From c0de2b38fbae180db8e04e4614f3e0ab204ef7d2 Mon Sep 17 00:00:00 2001 From: FlyingArowana Date: Sat, 23 Nov 2024 01:52:56 +0000 Subject: [PATCH 01/55] fix(DB/Creature) Removal of Turkeys outside of the expected zones. (#20685) --- .../updates/pending_db_world/rev_1732311126856859300.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1732311126856859300.sql diff --git a/data/sql/updates/pending_db_world/rev_1732311126856859300.sql b/data/sql/updates/pending_db_world/rev_1732311126856859300.sql new file mode 100644 index 00000000000000..434f9807b72833 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1732311126856859300.sql @@ -0,0 +1,6 @@ +-- +-- Deletes creatures by GUID that are `Wild Turkey` outside of zones 15 and 85 (Elwynn Forest and Tirisfal Glades) +DELETE FROM `creature` WHERE `guid` IN (241977, 242000, 242012, 243830, 243874, 243955, 243968, 243970, 243972, 243984, 243985, 243986, 243987, 243988, 243989, 243990, 243991, 243992, 243993, 243994, 243995, 243996, 243997, 243998, 243999, 244000, 244001, 244002, 244003, 244004, 244005, 244006, 244007, 244008, 244009, 244010, 244073, 244076, 244098, 244117, 244124, 244125, 244186, 244189, 244208, 244209, 244285, 244308, 244309, 244310, 244311, 244312, 244313, 244314, 244315, 244316, 244317, 244318, 244319, 244320, 244321, 244322, 244323, 244324, 244325, 241971, 243863, 243944, 244100, 244101, 244119, 244220, 244221, 244295, 240654, 243959, 244094, 244114, 244115, 244116, 240656, 244108, 244140, 244141, 244142, 240655, 240658, 240659, 240703, 240742, 240764, 243776, 243777, 243778, 243787, 243943, 243957, 244136, 244137, 244138, 244139, 244204, 244205, 242032, 242033, 242034, 242035, 242036, 242037, 243949, 244087, 244112, 244173, 244174, 244286, 244307, 242149, 242151, 242153, 242156, 242158, 242163, 242164, 242167, 242168, 242170, 242171, 242176, 242177, 242178, 242179, 242187, 242203, 243865, 243945, 243961, 243962, 243963, 243964, 240419, 240420, 240645, 243947, 243950, 244088, 244089, 244090, 244091, 244143, 244144, 244145, 244146, 244212, 244213, 244306, 242103, 242104, 242116, 242117, 242123, 242124, 242127, 242128, 242130, 242132, 242135, 242142, 242144, 243862, 241994, 241995, 241996, 241997, 241998, 241999, 242001, 242002, 242003, 242004, 242005, 242006, 242007, 242008, 242009, 242010, 242011, 242013, 242014, 242016, 242017, 242018, 242019, 242020, 242021, 242022, 242023, 242024, 242025, 242026, 242027, 242028, 242029, 242030, 243832, 243956, 244099, 244118, 244126, 244127, 240657, 240661, 240721, 240723, 240804, 240810, 240811, 240991, 243836, 243837, 243838, 243839, 243840, 243841, 243871, 243954, 244051, 244052, 244053, 244057, 244058, 244061, 244062, 244155, 244156, 244157, 244158, 244175, 244202, 244203, 244228, 244229, 244230, 243826, 241415, 241453, 241603, 241605, 241625, 241666, 243952, 244086, 244109, 244110, 244122, 244177, 244206, 244207, 244287, 244288, 242040, 242043, 243946, 243958, 244092, 244093, 244113, 244128, 244132, 244133, 244134, 244135, 241968, 241969, 241970, 244084, 244085, 244167, 244168, 244169, 244170, 244231, 244290, 244291, 244292, 244293, 244294, 242061, 242064, 242065, 242066, 242071, 242072, 242073, 242077, 242079, 242081, 242084, 242094, 242096, 242099, 242101, 242102, 242105, 242114, 242115, 243953, 244102, 244103, 244104, 244111, 244120, 244129, 244130, 244131, 241972, 243864, 242045, 242058, 242062, 242063, 242067, 242068, 242069, 242070, 242074, 242075, 242078, 242082, 242083, 242085, 242086, 242087, 242088, 242089, 242090, 242091, 242092, 242093, 242095, 242097, 242098, 242100, 242106, 242107, 242108, 242109, 242110, 242111, 242112, 242113, 242118, 242119, 242120, 242121, 242122, 242125, 242126, 242129, 242131, 242133, 242134, 242136, 242137, 242138, 242139, 242140, 242141, 242143, 242145, 242146, 242147, 242148, 242150, 242152, 242154, 242155, 242157, 242159, 242160, 242161, 242162, 242165, 242166, 242169, 242172, 242173, 242174, 242175, 242180, 242181, 242182, 242183, 242184, 242185, 242186, 242188, 242189, 242190, 242191, 242192, 242193, 242194, 242195, 242196, 242197, 242198, 242199, 242200, 242201, 242202, 242204, 242205, 242206, 242207, 242208, 242209, 242210, 242211, 242212, 242213, 242214, 242216, 242217, 242218, 242219, 242221, 242222, 242223, 242224, 242225, 242226, 242227, 242228, 242229, 242230, 242231, 242232, 242233, 242234, 242235, 242236, 242237, 242238, 242239, 242240, 243711, 243876, 244163, 244164, 244165, 244166, 242215, 242763, 243381, 243930, 242044, 242046, 242047, 242048, 242049, 242050, 242051, 242052, 242053, 242054, 242056, 242057, 242059, 242060, 242080, 243782, 243783, 243784, 243785, 243786, 243788, 243789, 243877, 243948, 244147, 244148, 244149, 244150, 244159, 244160, 244171, 244172, 244216, 244217, 244222, 244223, 243548, 243558, 243560, 243570, 243573, 243575, 243580, 243589, 243875, 243931, 243932, 243933, 243934, 243935, 243936, 243937, 243938, 243939, 243940, 243941, 244011, 244012, 244013, 244014, 244015, 244016, 244017, 244018, 244019, 244020, 244021, 244105, 244106, 244107, 244121, 244185, 244187, 244214, 244215, 244348, 244349, 244350, 244351, 244352, 244353, 244354, 244355, 244356, 244357, 244358, 244359, 244360, 244361, 244362, 244363, 241712, 241715, 241771, 241777, 241800, 241811, 241815, 241818, 241820, 241823, 241837, 241839, 241845, 241860, 241862, 241864, 241865, 241870, 241871, 241878, 241880, 241882, 241908, 241923, 241928, 241929, 241935, 241938, 241940, 241941, 241944, 241948, 241949, 241951, 241958, 241961, 241962, 243774, 243775, 243810, 243929, 244161, 244162, 244200, 244201, 244233, 244151, 244152, 244153, 244154, 244210, 244211) AND `id1` = 32820; + +-- Deletes the same GUIDs as above from game_event_creature that has the event 26 (Pilgrim's Bounty) +DELETE FROM `game_event_creature` WHERE `guid` IN (240419, 240420, 240645, 240654, 240655, 240656, 240657, 240658, 240659, 240661, 240703, 240721, 240723, 240742, 240764, 240804, 240810, 240811, 240991, 241415, 241453, 241603, 241605, 241625, 241666, 241712, 241715, 241771, 241777, 241800, 241811, 241815, 241818, 241820, 241823, 241837, 241839, 241845, 241860, 241862, 241864, 241865, 241870, 241871, 241878, 241880, 241882, 241908, 241923, 241928, 241929, 241935, 241938, 241940, 241941, 241944, 241948, 241949, 241951, 241958, 241961, 241962, 241968, 241969, 241970, 241971, 241972, 241977, 241994, 241995, 241996, 241997, 241998, 241999, 242000, 242001, 242002, 242003, 242004, 242005, 242006, 242007, 242008, 242009, 242010, 242011, 242012, 242013, 242014, 242016, 242017, 242018, 242019, 242020, 242021, 242022, 242023, 242024, 242025, 242026, 242027, 242028, 242029, 242030, 242032, 242033, 242034, 242035, 242036, 242037, 242040, 242043, 242044, 242045, 242046, 242047, 242048, 242049, 242050, 242051, 242052, 242053, 242054, 242056, 242057, 242058, 242059, 242060, 242061, 242062, 242063, 242064, 242065, 242066, 242067, 242068, 242069, 242070, 242071, 242072, 242073, 242074, 242075, 242077, 242078, 242079, 242080, 242081, 242082, 242083, 242084, 242085, 242086, 242087, 242088, 242089, 242090, 242091, 242092, 242093, 242094, 242095, 242096, 242097, 242098, 242099, 242100, 242101, 242102, 242103, 242104, 242105, 242106, 242107, 242108, 242109, 242110, 242111, 242112, 242113, 242114, 242115, 242116, 242117, 242118, 242119, 242120, 242121, 242122, 242123, 242124, 242125, 242126, 242127, 242128, 242129, 242130, 242131, 242132, 242133, 242134, 242135, 242136, 242137, 242138, 242139, 242140, 242141, 242142, 242143, 242144, 242145, 242146, 242147, 242148, 242149, 242150, 242151, 242152, 242153, 242154, 242155, 242156, 242157, 242158, 242159, 242160, 242161, 242162, 242163, 242164, 242165, 242166, 242167, 242168, 242169, 242170, 242171, 242172, 242173, 242174, 242175, 242176, 242177, 242178, 242179, 242180, 242181, 242182, 242183, 242184, 242185, 242186, 242187, 242188, 242189, 242190, 242191, 242192, 242193, 242194, 242195, 242196, 242197, 242198, 242199, 242200, 242201, 242202, 242203, 242204, 242205, 242206, 242207, 242208, 242209, 242210, 242211, 242212, 242213, 242214, 242215, 242216, 242217, 242218, 242219, 242221, 242222, 242223, 242224, 242225, 242226, 242227, 242228, 242229, 242230, 242231, 242232, 242233, 242234, 242235, 242236, 242237, 242238, 242239, 242240, 242763, 243381, 243548, 243558, 243560, 243570, 243573, 243575, 243580, 243589, 243711, 243774, 243775, 243776, 243777, 243778, 243782, 243783, 243784, 243785, 243786, 243787, 243788, 243789, 243810, 243826, 243830, 243832, 243836, 243837, 243838, 243839, 243840, 243841, 243862, 243863, 243864, 243865, 243871, 243874, 243875, 243876, 243877, 243929, 243930, 243931, 243932, 243933, 243934, 243935, 243936, 243937, 243938, 243939, 243940, 243941, 243943, 243944, 243945, 243946, 243947, 243948, 243949, 243950, 243952, 243953, 243954, 243955, 243956, 243957, 243958, 243959, 243961, 243962, 243963, 243964, 243968, 243970, 243972, 243984, 243985, 243986, 243987, 243988, 243989, 243990, 243991, 243992, 243993, 243994, 243995, 243996, 243997, 243998, 243999, 244000, 244001, 244002, 244003, 244004, 244005, 244006, 244007, 244008, 244009, 244010, 244011, 244012, 244013, 244014, 244015, 244016, 244017, 244018, 244019, 244020, 244021, 244051, 244052, 244053, 244057, 244058, 244061, 244062, 244073, 244076, 244084, 244085, 244086, 244087, 244088, 244089, 244090, 244091, 244092, 244093, 244094, 244098, 244099, 244100, 244101, 244102, 244103, 244104, 244105, 244106, 244107, 244108, 244109, 244110, 244111, 244112, 244113, 244114, 244115, 244116, 244117, 244118, 244119, 244120, 244121, 244122, 244124, 244125, 244126, 244127, 244128, 244129, 244130, 244131, 244132, 244133, 244134, 244135, 244136, 244137, 244138, 244139, 244140, 244141, 244142, 244143, 244144, 244145, 244146, 244147, 244148, 244149, 244150, 244151, 244152, 244153, 244154, 244155, 244156, 244157, 244158, 244159, 244160, 244161, 244162, 244163, 244164, 244165, 244166, 244167, 244168, 244169, 244170, 244171, 244172, 244173, 244174, 244175, 244177, 244185, 244186, 244187, 244189, 244200, 244201, 244202, 244203, 244204, 244205, 244206, 244207, 244208, 244209, 244210, 244211, 244212, 244213, 244214, 244215, 244216, 244217, 244220, 244221, 244222, 244223, 244228, 244229, 244230, 244231, 244233, 244285, 244286, 244287, 244288, 244290, 244291, 244292, 244293, 244294, 244295, 244306, 244307, 244308, 244309, 244310, 244311, 244312, 244313, 244314, 244315, 244316, 244317, 244318, 244319, 244320, 244321, 244322, 244323, 244324, 244325, 244348, 244349, 244350, 244351, 244352, 244353, 244354, 244355, 244356, 244357, 244358, 244359, 244360, 244361, 244362, 244363) AND `eventEntry` = 26; From 3f6fe11f8355640799b27a48027d7e872a9ada53 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 23 Nov 2024 01:54:40 +0000 Subject: [PATCH 02/55] chore(DB): import pending files Referenced commit(s): c0de2b38fbae180db8e04e4614f3e0ab204ef7d2 --- .../rev_1732311126856859300.sql => db_world/2024_11_23_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1732311126856859300.sql => db_world/2024_11_23_00.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1732311126856859300.sql b/data/sql/updates/db_world/2024_11_23_00.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1732311126856859300.sql rename to data/sql/updates/db_world/2024_11_23_00.sql index 434f9807b72833..f6f802c5aea41a 100644 --- a/data/sql/updates/pending_db_world/rev_1732311126856859300.sql +++ b/data/sql/updates/db_world/2024_11_23_00.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_22_03 -> 2024_11_23_00 -- -- Deletes creatures by GUID that are `Wild Turkey` outside of zones 15 and 85 (Elwynn Forest and Tirisfal Glades) DELETE FROM `creature` WHERE `guid` IN (241977, 242000, 242012, 243830, 243874, 243955, 243968, 243970, 243972, 243984, 243985, 243986, 243987, 243988, 243989, 243990, 243991, 243992, 243993, 243994, 243995, 243996, 243997, 243998, 243999, 244000, 244001, 244002, 244003, 244004, 244005, 244006, 244007, 244008, 244009, 244010, 244073, 244076, 244098, 244117, 244124, 244125, 244186, 244189, 244208, 244209, 244285, 244308, 244309, 244310, 244311, 244312, 244313, 244314, 244315, 244316, 244317, 244318, 244319, 244320, 244321, 244322, 244323, 244324, 244325, 241971, 243863, 243944, 244100, 244101, 244119, 244220, 244221, 244295, 240654, 243959, 244094, 244114, 244115, 244116, 240656, 244108, 244140, 244141, 244142, 240655, 240658, 240659, 240703, 240742, 240764, 243776, 243777, 243778, 243787, 243943, 243957, 244136, 244137, 244138, 244139, 244204, 244205, 242032, 242033, 242034, 242035, 242036, 242037, 243949, 244087, 244112, 244173, 244174, 244286, 244307, 242149, 242151, 242153, 242156, 242158, 242163, 242164, 242167, 242168, 242170, 242171, 242176, 242177, 242178, 242179, 242187, 242203, 243865, 243945, 243961, 243962, 243963, 243964, 240419, 240420, 240645, 243947, 243950, 244088, 244089, 244090, 244091, 244143, 244144, 244145, 244146, 244212, 244213, 244306, 242103, 242104, 242116, 242117, 242123, 242124, 242127, 242128, 242130, 242132, 242135, 242142, 242144, 243862, 241994, 241995, 241996, 241997, 241998, 241999, 242001, 242002, 242003, 242004, 242005, 242006, 242007, 242008, 242009, 242010, 242011, 242013, 242014, 242016, 242017, 242018, 242019, 242020, 242021, 242022, 242023, 242024, 242025, 242026, 242027, 242028, 242029, 242030, 243832, 243956, 244099, 244118, 244126, 244127, 240657, 240661, 240721, 240723, 240804, 240810, 240811, 240991, 243836, 243837, 243838, 243839, 243840, 243841, 243871, 243954, 244051, 244052, 244053, 244057, 244058, 244061, 244062, 244155, 244156, 244157, 244158, 244175, 244202, 244203, 244228, 244229, 244230, 243826, 241415, 241453, 241603, 241605, 241625, 241666, 243952, 244086, 244109, 244110, 244122, 244177, 244206, 244207, 244287, 244288, 242040, 242043, 243946, 243958, 244092, 244093, 244113, 244128, 244132, 244133, 244134, 244135, 241968, 241969, 241970, 244084, 244085, 244167, 244168, 244169, 244170, 244231, 244290, 244291, 244292, 244293, 244294, 242061, 242064, 242065, 242066, 242071, 242072, 242073, 242077, 242079, 242081, 242084, 242094, 242096, 242099, 242101, 242102, 242105, 242114, 242115, 243953, 244102, 244103, 244104, 244111, 244120, 244129, 244130, 244131, 241972, 243864, 242045, 242058, 242062, 242063, 242067, 242068, 242069, 242070, 242074, 242075, 242078, 242082, 242083, 242085, 242086, 242087, 242088, 242089, 242090, 242091, 242092, 242093, 242095, 242097, 242098, 242100, 242106, 242107, 242108, 242109, 242110, 242111, 242112, 242113, 242118, 242119, 242120, 242121, 242122, 242125, 242126, 242129, 242131, 242133, 242134, 242136, 242137, 242138, 242139, 242140, 242141, 242143, 242145, 242146, 242147, 242148, 242150, 242152, 242154, 242155, 242157, 242159, 242160, 242161, 242162, 242165, 242166, 242169, 242172, 242173, 242174, 242175, 242180, 242181, 242182, 242183, 242184, 242185, 242186, 242188, 242189, 242190, 242191, 242192, 242193, 242194, 242195, 242196, 242197, 242198, 242199, 242200, 242201, 242202, 242204, 242205, 242206, 242207, 242208, 242209, 242210, 242211, 242212, 242213, 242214, 242216, 242217, 242218, 242219, 242221, 242222, 242223, 242224, 242225, 242226, 242227, 242228, 242229, 242230, 242231, 242232, 242233, 242234, 242235, 242236, 242237, 242238, 242239, 242240, 243711, 243876, 244163, 244164, 244165, 244166, 242215, 242763, 243381, 243930, 242044, 242046, 242047, 242048, 242049, 242050, 242051, 242052, 242053, 242054, 242056, 242057, 242059, 242060, 242080, 243782, 243783, 243784, 243785, 243786, 243788, 243789, 243877, 243948, 244147, 244148, 244149, 244150, 244159, 244160, 244171, 244172, 244216, 244217, 244222, 244223, 243548, 243558, 243560, 243570, 243573, 243575, 243580, 243589, 243875, 243931, 243932, 243933, 243934, 243935, 243936, 243937, 243938, 243939, 243940, 243941, 244011, 244012, 244013, 244014, 244015, 244016, 244017, 244018, 244019, 244020, 244021, 244105, 244106, 244107, 244121, 244185, 244187, 244214, 244215, 244348, 244349, 244350, 244351, 244352, 244353, 244354, 244355, 244356, 244357, 244358, 244359, 244360, 244361, 244362, 244363, 241712, 241715, 241771, 241777, 241800, 241811, 241815, 241818, 241820, 241823, 241837, 241839, 241845, 241860, 241862, 241864, 241865, 241870, 241871, 241878, 241880, 241882, 241908, 241923, 241928, 241929, 241935, 241938, 241940, 241941, 241944, 241948, 241949, 241951, 241958, 241961, 241962, 243774, 243775, 243810, 243929, 244161, 244162, 244200, 244201, 244233, 244151, 244152, 244153, 244154, 244210, 244211) AND `id1` = 32820; From 0b771cbc922f06ecf159c43db9102a4716cc25a3 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 23 Nov 2024 06:57:26 -0300 Subject: [PATCH 03/55] fix(Core/Creature): Don't call reset if still in combat (#20675) --- src/server/game/AI/ScriptedAI/ScriptedCreature.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 86240a1a876420..50a7f8a8b4d101 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -624,6 +624,9 @@ void BossAI::_Reset() if (!me->IsAlive()) return; + if (me->IsEngaged()) + return; + me->SetCombatPulseDelay(0); me->ResetLootMode(); events.Reset(); From 7cb459591c451b9d27b5d7dfd02a59bf66f5bde0 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sat, 23 Nov 2024 12:47:11 +0100 Subject: [PATCH 04/55] fix(DB/Conditions): add Jan'alai's Summon Hatchers implicit target entry (#20692) fix(DB/Conditions)SummonHatchersSetTargetEntry Summon Amani'shi Hatcher --- .../sql/updates/pending_db_world/rev_1732339897805274964.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1732339897805274964.sql diff --git a/data/sql/updates/pending_db_world/rev_1732339897805274964.sql b/data/sql/updates/pending_db_world/rev_1732339897805274964.sql new file mode 100644 index 00000000000000..745e0edad1c5ca --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1732339897805274964.sql @@ -0,0 +1,5 @@ +-- +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 1) AND (`SourceEntry` IN (45340, 43962)); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 43962, 0, 0, 31, 0, 3, 22515, 0, 0, 0, 0, '', 'Summon Amani\'shi Hatcher target World Trigger'), +(13, 1, 45340, 0, 0, 31, 0, 3, 22515, 0, 0, 0, 0, '', 'Summon Amani\'shi Hatcher target World Trigger'); From f8368fee49f7e94f4b9e596a483c41d396cc784f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 23 Nov 2024 11:49:00 +0000 Subject: [PATCH 05/55] chore(DB): import pending files Referenced commit(s): 7cb459591c451b9d27b5d7dfd02a59bf66f5bde0 --- .../rev_1732339897805274964.sql => db_world/2024_11_23_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1732339897805274964.sql => db_world/2024_11_23_01.sql} (93%) diff --git a/data/sql/updates/pending_db_world/rev_1732339897805274964.sql b/data/sql/updates/db_world/2024_11_23_01.sql similarity index 93% rename from data/sql/updates/pending_db_world/rev_1732339897805274964.sql rename to data/sql/updates/db_world/2024_11_23_01.sql index 745e0edad1c5ca..a89e2146a8702c 100644 --- a/data/sql/updates/pending_db_world/rev_1732339897805274964.sql +++ b/data/sql/updates/db_world/2024_11_23_01.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_23_00 -> 2024_11_23_01 -- DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 1) AND (`SourceEntry` IN (45340, 43962)); INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES From d9d8dc5a2f5f733fc4a681b0a4be7bf8b67245d2 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sun, 24 Nov 2024 03:51:36 +0100 Subject: [PATCH 06/55] fix(DB/Creature): add spawns Eagle Trash Aggro Trigger (#20693) fix(DB/Creature)AddEagleTrashAggroTrigger --- .../rev_1732344425193512572.sql | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1732344425193512572.sql diff --git a/data/sql/updates/pending_db_world/rev_1732344425193512572.sql b/data/sql/updates/pending_db_world/rev_1732344425193512572.sql new file mode 100644 index 00000000000000..dd3e388b4c581e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1732344425193512572.sql @@ -0,0 +1,21 @@ +-- +-- not selectable +UPDATE `creature_template` SET `unit_flags` = `unit_flags` | 33554432 WHERE (`entry` = 24223); +-- root +UPDATE `creature_template_movement` SET `Rooted` = 1 WHERE (`CreatureId` = 24223); + +SET @GUID:=38464; +DELETE FROM `creature` WHERE (`id1` = 24223) AND (`guid` BETWEEN (@GUID+00) AND (@GUID+11)); +INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES +(@GUID+00, 24223, 0, 0, 568, 0, 0, 1, 1, 0, 231.7856, 1477.3315, 26.000067, 0.541052043437957763, 7200, 0, 0, 3827, 0, 0, 0, 0, 0, '', 53788), +(@GUID+01, 24223, 0, 0, 568, 0, 0, 1, 1, 0, 227.88835, 1452.7626, 26.000414, 3.001966238021850585, 7200, 0, 0, 3827, 0, 0, 0, 0, 0, '', 53788), +(@GUID+02, 24223, 0, 0, 568, 0, 0, 1, 1, 0, 228.48058, 1433.1262, 27.387426, 2.58308720588684082, 7200, 0, 0, 3827, 0, 0, 0, 0, 0, '', 53788), +(@GUID+03, 24223, 0, 0, 568, 0, 0, 1, 1, 0, 227.02995, 1417.4744, 32.817062, 2.757620096206665039, 7200, 0, 0, 3827, 0, 0, 0, 0, 0, '', 53788), +(@GUID+04, 24223, 0, 0, 568, 0, 0, 1, 1, 0, 227.65094, 1404.276, 37.13389, 2.321287870407104492, 7200, 0, 0, 3827, 0, 0, 0, 0, 0, '', 53788), +(@GUID+05, 24223, 0, 0, 568, 0, 0, 1, 1, 0, 227.5511, 1382.4186, 44.78124, 0.174532920122146606, 7200, 0, 0, 3827, 0, 0, 0, 0, 0, '', 53788), +(@GUID+06, 24223, 0, 0, 568, 0, 0, 1, 1, 0, 229.57564, 1361.4746, 49.162132, 5.218534469604492187, 7200, 0, 0, 3827, 0, 0, 0, 0, 0, '', 53788), +(@GUID+07, 24223, 0, 0, 568, 0, 0, 1, 1, 0, 246.97385, 1356.4729, 49.40504, 1.2042771577835083, 7200, 0, 0, 3827, 0, 0, 0, 0, 0, '', 53788), +(@GUID+08, 24223, 0, 0, 568, 0, 0, 1, 1, 0, 261.45508, 1402.2993, 49.40504, 2.0245819091796875, 7200, 0, 0, 3827, 0, 0, 0, 0, 0, '', 53788), +(@GUID+09, 24223, 0, 0, 568, 0, 0, 1, 1, 0, 245.92024, 1374.8492, 49.404884, 3.40339207649230957, 7200, 0, 0, 3827, 0, 0, 0, 0, 0, '', 53788), +(@GUID+10, 24223, 0, 0, 568, 0, 0, 1, 1, 0, 253.92784, 1429.9912, 49.40504, 2.181661605834960937, 7200, 0, 0, 3827, 0, 0, 0, 0, 0, '', 53788), +(@GUID+11, 24223, 0, 0, 568, 0, 0, 1, 1, 0, 281.30252, 1430.9957, 61.60976, 0.087266460061073303, 7200, 0, 0, 3827, 0, 0, 0, 0, 0, '', 53788); From cb9df80a6dca1b9f7c47246d1eca16b6b32b0894 Mon Sep 17 00:00:00 2001 From: FlyingArowana Date: Sun, 24 Nov 2024 02:52:27 +0000 Subject: [PATCH 07/55] fix(DB/Creature): Adds "Disarm" Mechanic Flag Immunity to Halazzi (#20696) * Created file * Added Disarm Immunity to Halazzi --- data/sql/updates/pending_db_world/rev_1732378170824740900.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1732378170824740900.sql diff --git a/data/sql/updates/pending_db_world/rev_1732378170824740900.sql b/data/sql/updates/pending_db_world/rev_1732378170824740900.sql new file mode 100644 index 00000000000000..8093a8321f4682 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1732378170824740900.sql @@ -0,0 +1,3 @@ +-- +-- Adds "Disarm" immunity to Creautre (Boss) "Halazzi" - [Zul'Aman] +UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` | 4 WHERE `entry` = 23577; From 9db157545d5767d07e734e7b3c31f257c1bec6e9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 24 Nov 2024 02:52:30 +0000 Subject: [PATCH 08/55] chore(DB): import pending files Referenced commit(s): d9d8dc5a2f5f733fc4a681b0a4be7bf8b67245d2 --- .../rev_1732344425193512572.sql => db_world/2024_11_24_00.sql} | 1 + .../rev_1732378170824740900.sql => db_world/2024_11_24_01.sql} | 1 + 2 files changed, 2 insertions(+) rename data/sql/updates/{pending_db_world/rev_1732344425193512572.sql => db_world/2024_11_24_00.sql} (98%) rename data/sql/updates/{pending_db_world/rev_1732378170824740900.sql => db_world/2024_11_24_01.sql} (80%) diff --git a/data/sql/updates/pending_db_world/rev_1732344425193512572.sql b/data/sql/updates/db_world/2024_11_24_00.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1732344425193512572.sql rename to data/sql/updates/db_world/2024_11_24_00.sql index dd3e388b4c581e..6e0869338ab880 100644 --- a/data/sql/updates/pending_db_world/rev_1732344425193512572.sql +++ b/data/sql/updates/db_world/2024_11_24_00.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_23_01 -> 2024_11_24_00 -- -- not selectable UPDATE `creature_template` SET `unit_flags` = `unit_flags` | 33554432 WHERE (`entry` = 24223); diff --git a/data/sql/updates/pending_db_world/rev_1732378170824740900.sql b/data/sql/updates/db_world/2024_11_24_01.sql similarity index 80% rename from data/sql/updates/pending_db_world/rev_1732378170824740900.sql rename to data/sql/updates/db_world/2024_11_24_01.sql index 8093a8321f4682..6a31ee62c2f960 100644 --- a/data/sql/updates/pending_db_world/rev_1732378170824740900.sql +++ b/data/sql/updates/db_world/2024_11_24_01.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_24_00 -> 2024_11_24_01 -- -- Adds "Disarm" immunity to Creautre (Boss) "Halazzi" - [Zul'Aman] UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` | 4 WHERE `entry` = 23577; From a6f279ccfa96c06d379724910a60468dd54d8d18 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sun, 24 Nov 2024 10:34:31 +0100 Subject: [PATCH 09/55] fix(Scripts/Zulaman): Halazzi double scheduling of lynx abilties in the first phase 1 (#20708) double scheduling of enter lynx --- src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp index acf169ef0a5ff2..4a57a42cf94074 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp @@ -100,7 +100,6 @@ struct boss_halazzi : public BossAI BossAI::Reset(); _transformCount = 0; _phase = PHASE_NONE; - EnterPhase(PHASE_LYNX); SetInvincibility(true); } From 0676bf93557c984b78a07127dbdf5683dbd768a6 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 24 Nov 2024 07:47:23 -0300 Subject: [PATCH 10/55] fix(DB/Conditions): Fix Jan'lai not hatching all eggs (#20686) * fix(DB/Conditions): Fix Jan'lai not hatching all eggs * Update rev_1732316403019721900.sql --- data/sql/updates/pending_db_world/rev_1732316403019721900.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1732316403019721900.sql diff --git a/data/sql/updates/pending_db_world/rev_1732316403019721900.sql b/data/sql/updates/pending_db_world/rev_1732316403019721900.sql new file mode 100644 index 00000000000000..e6034c0e9b5aee --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1732316403019721900.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 23817) AND (`source_type` = 0) AND (`id` IN (1)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(23817, 0, 1, 0, 8, 0, 100, 0, 43144, 0, 0, 0, 0, 0, 11, 42493, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonhawk Egg - On Spellhit \'Hatch Eggs\' - Cast \'Summon Dragonhawk Hatchling\''); From cbcee46a828de497c15588d987ff31ed50034d71 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 24 Nov 2024 10:48:16 +0000 Subject: [PATCH 11/55] chore(DB): import pending files Referenced commit(s): 0676bf93557c984b78a07127dbdf5683dbd768a6 --- .../rev_1732316403019721900.sql => db_world/2024_11_24_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1732316403019721900.sql => db_world/2024_11_24_02.sql} (94%) diff --git a/data/sql/updates/pending_db_world/rev_1732316403019721900.sql b/data/sql/updates/db_world/2024_11_24_02.sql similarity index 94% rename from data/sql/updates/pending_db_world/rev_1732316403019721900.sql rename to data/sql/updates/db_world/2024_11_24_02.sql index e6034c0e9b5aee..a28640251b3ecb 100644 --- a/data/sql/updates/pending_db_world/rev_1732316403019721900.sql +++ b/data/sql/updates/db_world/2024_11_24_02.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_24_01 -> 2024_11_24_02 -- DELETE FROM `smart_scripts` WHERE (`entryorguid` = 23817) AND (`source_type` = 0) AND (`id` IN (1)); INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES From c5876bff6fff4a3465c9aab9294fb2086b97105e Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 24 Nov 2024 07:56:18 -0300 Subject: [PATCH 12/55] fix(Scripts/ZulAman): Fix Amani Hatcher behaviour (#20687) --- src/server/game/AI/CreatureAI.cpp | 11 ++++ src/server/game/AI/CreatureAI.h | 2 + .../EasternKingdoms/ZulAman/boss_janalai.cpp | 57 ++++++++++++++++--- 3 files changed, 61 insertions(+), 9 deletions(-) diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index 17daed82d1c209..82d8279b3bea84 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -62,6 +62,17 @@ void CreatureAI::Talk(uint8 id, WorldObject const* target /*= nullptr*/, Millise } } +/** + * @brief Returns the summoner creature/object, if the creature is a temporary summon. + */ +WorldObject* CreatureAI::GetSummoner() const +{ + if (TempSummon* summon = me->ToTempSummon()) + return summon->GetSummoner(); + + return nullptr; +} + inline bool IsValidCombatTarget(Creature* source, Player* target) { if (target->IsGameMaster()) diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index 5d969b86537d4d..15aa561f67b3f8 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -96,6 +96,8 @@ class CreatureAI : public UnitAI void Talk(uint8 id, WorldObject const* whisperTarget = nullptr, Milliseconds delay = 0s); void Talk(uint8 id, Milliseconds delay) { Talk(id, nullptr, delay); } + WorldObject* GetSummoner() const; + explicit CreatureAI(Creature* creature) : UnitAI(creature), me(creature), _boundary(nullptr), _negateBoundary(false), m_MoveInLineOfSight_locked(false) { } ~CreatureAI() override {} diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp index 05db25f4cdfd91..401b8f6f511b86 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp @@ -109,8 +109,9 @@ enum HatchActions enum Misc { MAX_BOMB_COUNT = 40, - SCHEDULER_GROUP_HATCHING = 1, - GROUP_ENRAGE = 1 + GROUP_ENRAGE = 1, + GROUP_HATCHING = 2, + DATA_ALL_EGGS_HATCHED = 0 }; struct boss_janalai : public BossAI @@ -146,6 +147,8 @@ struct boss_janalai : public BossAI }); me->m_Events.KillAllEvents(false); + _sideHatched[0] = false; + _sideHatched[1] = false; } void JustDied(Unit* killer) override @@ -184,11 +187,33 @@ struct boss_janalai : public BossAI ScheduleTimedEvent(30s, [&]{ StartBombing(); }, 20s, 40s); - ScheduleTimedEvent(10s, [&]{ + + scheduler.Schedule(10s, GROUP_HATCHING, [this](TaskContext context) + { + if (_sideHatched[0] && _sideHatched[1]) + return; + Talk(SAY_SUMMON_HATCHER); - me->SummonCreature(NPC_AMANI_HATCHER, hatcherway[0][0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000); - me->SummonCreature(NPC_AMANI_HATCHER, hatcherway[1][0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000); - }, 90s); + + if (_sideHatched[0] && !_sideHatched[1]) + { + me->SummonCreature(NPC_AMANI_HATCHER, hatcherway[1][0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000); + me->SummonCreature(NPC_AMANI_HATCHER, hatcherway[1][0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000); + } + else if (!_sideHatched[0] && _sideHatched[1]) + { + me->SummonCreature(NPC_AMANI_HATCHER, hatcherway[0][0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000); + me->SummonCreature(NPC_AMANI_HATCHER, hatcherway[0][0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000); + } + else + { + me->SummonCreature(NPC_AMANI_HATCHER, hatcherway[0][0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000); + me->SummonCreature(NPC_AMANI_HATCHER, hatcherway[1][0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000); + } + + context.Repeat(90s); + }); + ScheduleTimedEvent(8s, [&]{ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) { @@ -215,6 +240,12 @@ struct boss_janalai : public BossAI }, 10min); } + void SetData(uint32 index, uint32 data) override + { + if (index == DATA_ALL_EGGS_HATCHED) + _sideHatched[data] = true; + } + bool HatchAllEggs(uint32 hatchAction) { std::list eggList; @@ -337,6 +368,7 @@ struct boss_janalai : public BossAI private: bool _isBombing; bool _isFlameBreathing; + bool _sideHatched[2]; }; struct npc_janalai_hatcher : public ScriptedAI @@ -349,6 +381,7 @@ struct npc_janalai_hatcher : public ScriptedAI scheduler.CancelAll(); _side = (me->GetPositionY() < 1150); _waypoint = 0; + _repeatCount = 1; _isHatching = false; me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MovePoint(0, hatcherway[_side][0]); @@ -360,19 +393,24 @@ struct npc_janalai_hatcher : public ScriptedAI { _isHatching = true; - scheduler.Schedule(1500ms, SCHEDULER_GROUP_HATCHING, [this](TaskContext context) + scheduler.Schedule(1500ms, [this](TaskContext context) { - me->CastCustomSpell(SPELL_HATCH_EGG_ALL, SPELLVALUE_MAX_TARGETS, context.GetRepeatCounter() + 1); + me->CastCustomSpell(SPELL_HATCH_EGG_ALL, SPELLVALUE_MAX_TARGETS, _repeatCount); + + ++_repeatCount; if (me->FindNearestCreature(NPC_EGG, 100.0f)) context.Repeat(4s); else { + if (WorldObject* summoner = GetSummoner()) + if (Creature* janalai = summoner->ToCreature()) + janalai->AI()->SetData(DATA_ALL_EGGS_HATCHED, _side); + _side = _side ? 0 : 1; _isHatching = false; _waypoint = 3; MoveToNewWaypoint(_waypoint); - context.CancelGroup(SCHEDULER_GROUP_HATCHING); } }); } @@ -407,6 +445,7 @@ struct npc_janalai_hatcher : public ScriptedAI private: uint8 _side; uint8 _waypoint; + uint32 _repeatCount; bool _isHatching; }; From 065579a6e3be1cc28efb6957f4b4c66f69cbaeea Mon Sep 17 00:00:00 2001 From: IntelligentQuantum Date: Sun, 24 Nov 2024 14:43:57 +0330 Subject: [PATCH 13/55] =?UTF-8?q?fix(Scripts/ZulAman):=20Nalorakk=20in=20B?= =?UTF-8?q?earform=20should=20not=20be=20attacking=20wi=E2=80=A6=20(#20707?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp index 6adadef9979b65..9ccb3696a47bad 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp @@ -242,6 +242,9 @@ struct boss_nalorakk : public BossAI Talk(SAY_SHIFTEDTOTROLL); scheduler.CancelGroup(GROUP_BEAR); _bearForm = false; + + me->SetCanDualWield(true); + scheduler.Schedule(15s, 20s, GROUP_HUMAN, [this](TaskContext context) { Talk(SAY_SURGE); @@ -271,6 +274,9 @@ struct boss_nalorakk : public BossAI DoCastSelf(SPELL_BEARFORM, true); scheduler.CancelGroup(GROUP_HUMAN); _bearForm = true; + + me->SetCanDualWield(false); + scheduler.Schedule(2s, GROUP_BEAR, [this](TaskContext context) { DoCastVictim(SPELL_LACERATINGSLASH); From 49b05967447559978dd92bbc3b619749cf1d5341 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 24 Nov 2024 08:54:29 -0300 Subject: [PATCH 14/55] fix(Scripts/ZulAman): Despawn Zuljin spirits shortly after death (#20711) --- src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp index 44b58e12fdc37a..852b5ae45eb905 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp @@ -268,6 +268,10 @@ struct boss_zuljin : public BossAI instance->SetBossState(DATA_ZULJIN, DONE); Talk(SAY_DEATH); summons.DespawnEntry(CREATURE_COLUMN_OF_FIRE); + + me->m_Events.AddEventAtOffset( [this] { + summons.DespawnAll(); + }, 3s); } void SpawnAdds() From 4aa70c4dba765fa2715c3548db0e16fec19c3311 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Sun, 24 Nov 2024 14:45:46 +0100 Subject: [PATCH 15/55] refactor(Deps/mysqllite): Nuke it (#20710) * close https://github.com/azerothcore/azerothcore-wotlk/issues/20123 --- deps/mysqllite/CMakeLists.txt | 261 - deps/mysqllite/COPYING | 339 - deps/mysqllite/README | 2254 - deps/mysqllite/VERSION | 4 - deps/mysqllite/cmake/character_sets.cmake | 43 - deps/mysqllite/cmake/mysql_version.cmake | 107 - deps/mysqllite/cmake/os/Windows.cmake | 142 - deps/mysqllite/cmake/os/WindowsCache.cmake | 356 - deps/mysqllite/cmake/stack_direction.c | 31 - deps/mysqllite/cmake/versioninfo.rc.in | 23 - deps/mysqllite/config.h.cmake | 618 - deps/mysqllite/configure.cmake | 1101 - deps/mysqllite/dbug/dbug.c | 2284 - deps/mysqllite/dbug/dbug_long.h | 160 - deps/mysqllite/dbug/monty.doc | 9 - deps/mysqllite/dbug/user.r | 1213 - deps/mysqllite/include/decimal.h | 107 - deps/mysqllite/include/errmsg.h | 108 - .../include/internal/atomic/gcc_builtins.h | 42 - .../include/internal/atomic/generic-msvc.h | 134 - .../include/internal/atomic/nolock.h | 69 - .../include/internal/atomic/rwlock.h | 100 - .../include/internal/atomic/solaris.h | 72 - .../include/internal/atomic/x86-gcc.h | 145 - deps/mysqllite/include/internal/base64.h | 48 - deps/mysqllite/include/internal/hash.h | 108 - deps/mysqllite/include/internal/lf.h | 265 - deps/mysqllite/include/internal/my_aes.h | 70 - deps/mysqllite/include/internal/my_alarm.h | 58 - deps/mysqllite/include/internal/my_atomic.h | 287 - deps/mysqllite/include/internal/my_base.h | 572 - deps/mysqllite/include/internal/my_bit.h | 105 - deps/mysqllite/include/internal/my_bitmap.h | 142 - deps/mysqllite/include/internal/my_handler.h | 130 - deps/mysqllite/include/internal/my_libwrap.h | 31 - deps/mysqllite/include/internal/my_md5.h | 59 - deps/mysqllite/include/internal/my_nosys.h | 52 - deps/mysqllite/include/internal/my_rdtsc.h | 129 - .../include/internal/my_stacktrace.h | 64 - deps/mysqllite/include/internal/my_time.h | 170 - deps/mysqllite/include/internal/my_tree.h | 96 - deps/mysqllite/include/internal/my_uctype.h | 1483 - deps/mysqllite/include/internal/myisampack.h | 242 - .../include/internal/mysql_version.h.in | 30 - deps/mysqllite/include/internal/mysys_err.h | 93 - deps/mysqllite/include/internal/password.h | 32 - .../mysqllite/include/internal/probes_mysql.h | 13 - .../include/internal/probes_mysql_nodtrace.h | 129 - deps/mysqllite/include/internal/queues.h | 75 - deps/mysqllite/include/internal/rijndael.h | 46 - deps/mysqllite/include/internal/sha1.h | 104 - deps/mysqllite/include/internal/t_ctype.h | 254 - deps/mysqllite/include/internal/thr_alarm.h | 110 - deps/mysqllite/include/internal/thr_lock.h | 163 - deps/mysqllite/include/internal/violite.h | 241 - deps/mysqllite/include/keycache.h | 146 - deps/mysqllite/include/m_ctype.h | 660 - deps/mysqllite/include/m_string.h | 295 - deps/mysqllite/include/my_alloc.h | 60 - deps/mysqllite/include/my_attribute.h | 69 - deps/mysqllite/include/my_compiler.h | 145 - deps/mysqllite/include/my_dbug.h | 194 - deps/mysqllite/include/my_dir.h | 109 - deps/mysqllite/include/my_getopt.h | 123 - deps/mysqllite/include/my_global.h | 1482 - deps/mysqllite/include/my_list.h | 45 - deps/mysqllite/include/my_net.h | 110 - deps/mysqllite/include/my_pthread.h | 943 - deps/mysqllite/include/my_sys.h | 959 - deps/mysqllite/include/my_xml.h | 89 - deps/mysqllite/include/mysql.h | 713 - deps/mysqllite/include/mysql/client_plugin.h | 163 - deps/mysqllite/include/mysql/innodb_priv.h | 36 - deps/mysqllite/include/mysql/plugin.h | 633 - deps/mysqllite/include/mysql/plugin_audit.h | 138 - deps/mysqllite/include/mysql/plugin_auth.h | 125 - .../include/mysql/plugin_auth_common.h | 105 - .../mysqllite/include/mysql/plugin_ftparser.h | 211 - deps/mysqllite/include/mysql/psi/mysql_file.h | 1434 - .../include/mysql/psi/mysql_thread.h | 1071 - deps/mysqllite/include/mysql/psi/psi.h | 1312 - deps/mysqllite/include/mysql/psi/psi_abi_v1.h | 26 - deps/mysqllite/include/mysql/psi/psi_abi_v2.h | 26 - .../include/mysql/service_my_snprintf.h | 101 - .../include/mysql/service_thd_alloc.h | 130 - .../include/mysql/service_thd_wait.h | 83 - .../include/mysql/service_thread_scheduler.h | 65 - deps/mysqllite/include/mysql/services.h | 32 - deps/mysqllite/include/mysql_com.h | 572 - deps/mysqllite/include/mysql_embed.h | 31 - deps/mysqllite/include/mysql_time.h | 55 - deps/mysqllite/include/mysqld_ername.h | 708 - deps/mysqllite/include/mysqld_error.h | 710 - deps/mysqllite/include/plugin.h | 633 - deps/mysqllite/include/plugin_audit.h | 138 - deps/mysqllite/include/plugin_ftparser.h | 211 - deps/mysqllite/include/sql_common.h | 113 - deps/mysqllite/include/sql_state.h | 220 - deps/mysqllite/include/sslopt-case.h | 32 - deps/mysqllite/include/sslopt-longopts.h | 49 - deps/mysqllite/include/sslopt-vars.h | 35 - deps/mysqllite/include/typelib.h | 44 - deps/mysqllite/libmysql/client_settings.h | 65 - deps/mysqllite/libmysql/errmsg.c | 125 - deps/mysqllite/libmysql/get_password.c | 209 - deps/mysqllite/libmysql/libmysql.c | 4832 --- deps/mysqllite/libmysql/libmysql_exports.def | 107 - deps/mysqllite/mysys/ChangeLog | 221 - deps/mysqllite/mysys/array.c | 383 - deps/mysqllite/mysys/base64.c | 311 - deps/mysqllite/mysys/charset-def.c | 354 - deps/mysqllite/mysys/charset.c | 937 - deps/mysqllite/mysys/checksum.c | 35 - deps/mysqllite/mysys/default.c | 1217 - deps/mysqllite/mysys/errors.c | 119 - deps/mysqllite/mysys/hash.c | 769 - deps/mysqllite/mysys/lf_alloc-pin.c | 527 - deps/mysqllite/mysys/lf_dynarray.c | 207 - deps/mysqllite/mysys/lf_hash.c | 503 - deps/mysqllite/mysys/list.c | 114 - deps/mysqllite/mysys/md5.c | 325 - deps/mysqllite/mysys/mf_arr_appstr.c | 61 - deps/mysqllite/mysys/mf_cache.c | 121 - deps/mysqllite/mysys/mf_dirname.c | 154 - deps/mysqllite/mysys/mf_fn_ext.c | 54 - deps/mysqllite/mysys/mf_format.c | 142 - deps/mysqllite/mysys/mf_getdate.c | 81 - deps/mysqllite/mysys/mf_iocache.c | 1949 - deps/mysqllite/mysys/mf_iocache2.c | 472 - deps/mysqllite/mysys/mf_keycache.c | 4523 -- deps/mysqllite/mysys/mf_keycaches.c | 361 - deps/mysqllite/mysys/mf_loadpath.c | 55 - deps/mysqllite/mysys/mf_pack.c | 460 - deps/mysqllite/mysys/mf_path.c | 120 - deps/mysqllite/mysys/mf_qsort.c | 216 - deps/mysqllite/mysys/mf_qsort2.c | 19 - deps/mysqllite/mysys/mf_radix.c | 54 - deps/mysqllite/mysys/mf_same.c | 40 - deps/mysqllite/mysys/mf_sort.c | 41 - deps/mysqllite/mysys/mf_soundex.c | 105 - deps/mysqllite/mysys/mf_tempdir.c | 95 - deps/mysqllite/mysys/mf_tempfile.c | 177 - deps/mysqllite/mysys/mf_unixpath.c | 36 - deps/mysqllite/mysys/mf_wcomp.c | 89 - deps/mysqllite/mysys/mulalloc.c | 63 - deps/mysqllite/mysys/my_access.c | 201 - deps/mysqllite/mysys/my_aes.c | 227 - deps/mysqllite/mysys/my_alarm.c | 32 - deps/mysqllite/mysys/my_alloc.c | 436 - deps/mysqllite/mysys/my_atomic.c | 67 - deps/mysqllite/mysys/my_bit.c | 64 - deps/mysqllite/mysys/my_bitmap.c | 932 - deps/mysqllite/mysys/my_chsize.c | 107 - deps/mysqllite/mysys/my_compress.c | 264 - deps/mysqllite/mysys/my_conio.c | 222 - deps/mysqllite/mysys/my_copy.c | 144 - deps/mysqllite/mysys/my_create.c | 73 - deps/mysqllite/mysys/my_delete.c | 125 - deps/mysqllite/mysys/my_div.c | 37 - deps/mysqllite/mysys/my_error.c | 290 - deps/mysqllite/mysys/my_file.c | 135 - deps/mysqllite/mysys/my_fopen.c | 358 - deps/mysqllite/mysys/my_fstream.c | 194 - deps/mysqllite/mysys/my_gethostbyname.c | 111 - deps/mysqllite/mysys/my_gethwaddr.c | 226 - deps/mysqllite/mysys/my_getncpus.c | 49 - deps/mysqllite/mysys/my_getopt.c | 1419 - deps/mysqllite/mysys/my_getpagesize.c | 40 - deps/mysqllite/mysys/my_getsystime.c | 226 - deps/mysqllite/mysys/my_getwd.c | 167 - deps/mysqllite/mysys/my_handler.c | 604 - deps/mysqllite/mysys/my_handler_errors.h | 71 - deps/mysqllite/mysys/my_init.c | 607 - deps/mysqllite/mysys/my_largepage.c | 166 - deps/mysqllite/mysys/my_lib.c | 424 - deps/mysqllite/mysys/my_libwrap.c | 41 - deps/mysqllite/mysys/my_lock.c | 223 - deps/mysqllite/mysys/my_lockmem.c | 98 - deps/mysqllite/mysys/my_malloc.c | 162 - deps/mysqllite/mysys/my_memmem.c | 83 - deps/mysqllite/mysys/my_mess.c | 34 - deps/mysqllite/mysys/my_mkdir.c | 42 - deps/mysqllite/mysys/my_mmap.c | 88 - deps/mysqllite/mysys/my_new.cc | 58 - deps/mysqllite/mysys/my_once.c | 119 - deps/mysqllite/mysys/my_open.c | 192 - deps/mysqllite/mysys/my_port.c | 40 - deps/mysqllite/mysys/my_pread.c | 206 - deps/mysqllite/mysys/my_pthread.c | 469 - deps/mysqllite/mysys/my_quick.c | 81 - deps/mysqllite/mysys/my_rdtsc.c | 962 - deps/mysqllite/mysys/my_read.c | 97 - deps/mysqllite/mysys/my_redel.c | 124 - deps/mysqllite/mysys/my_rename.c | 79 - deps/mysqllite/mysys/my_seek.c | 102 - deps/mysqllite/mysys/my_sleep.c | 35 - deps/mysqllite/mysys/my_static.c | 135 - deps/mysqllite/mysys/my_static.h | 50 - deps/mysqllite/mysys/my_symlink.c | 167 - deps/mysqllite/mysys/my_symlink2.c | 183 - deps/mysqllite/mysys/my_sync.c | 175 - deps/mysqllite/mysys/my_thr_init.c | 533 - deps/mysqllite/mysys/my_wincond.c | 369 - deps/mysqllite/mysys/my_windac.c | 223 - deps/mysqllite/mysys/my_winerr.c | 123 - deps/mysqllite/mysys/my_winfile.c | 681 - deps/mysqllite/mysys/my_winthread.c | 192 - deps/mysqllite/mysys/my_write.c | 100 - deps/mysqllite/mysys/mysys_priv.h | 107 - deps/mysqllite/mysys/ptr_cmp.c | 223 - deps/mysqllite/mysys/queues.c | 687 - deps/mysqllite/mysys/rijndael.c | 1379 - deps/mysqllite/mysys/sha1.c | 422 - deps/mysqllite/mysys/stacktrace.c | 714 - deps/mysqllite/mysys/string.c | 182 - deps/mysqllite/mysys/thr_alarm.c | 972 - deps/mysqllite/mysys/thr_lock.c | 1688 - deps/mysqllite/mysys/thr_mutex.c | 503 - deps/mysqllite/mysys/thr_rwlock.c | 472 - deps/mysqllite/mysys/tree.c | 757 - deps/mysqllite/mysys/typelib.c | 388 - deps/mysqllite/sql-common/client.c | 4273 -- deps/mysqllite/sql-common/client_plugin.c | 471 - deps/mysqllite/sql-common/my_time.c | 1256 - deps/mysqllite/sql-common/pack.c | 121 - deps/mysqllite/sql/net_serv.cc | 1186 - deps/mysqllite/sql/password.c | 562 - deps/mysqllite/strings/CHARSET_INFO.txt | 281 - deps/mysqllite/strings/README | 82 - deps/mysqllite/strings/bchange.c | 38 - deps/mysqllite/strings/bmove_upp.c | 32 - deps/mysqllite/strings/ctype-big5.c | 6983 ---- deps/mysqllite/strings/ctype-bin.c | 579 - deps/mysqllite/strings/ctype-cp932.c | 34889 ---------------- deps/mysqllite/strings/ctype-czech.c | 639 - deps/mysqllite/strings/ctype-euc_kr.c | 10072 ----- deps/mysqllite/strings/ctype-extra.c | 8649 ---- deps/mysqllite/strings/ctype-gb2312.c | 6474 --- deps/mysqllite/strings/ctype-gbk.c | 10869 ----- deps/mysqllite/strings/ctype-latin1.c | 782 - deps/mysqllite/strings/ctype-mb.c | 1369 - deps/mysqllite/strings/ctype-simple.c | 1704 - deps/mysqllite/strings/ctype-tis620.c | 965 - deps/mysqllite/strings/ctype-uca.c | 11462 ----- deps/mysqllite/strings/ctype-ucs2.c | 3190 -- deps/mysqllite/strings/ctype-utf8.c | 5238 --- deps/mysqllite/strings/ctype-win1250ch.c | 715 - deps/mysqllite/strings/ctype.c | 430 - deps/mysqllite/strings/decimal.c | 3128 -- deps/mysqllite/strings/dtoa.c | 2793 -- deps/mysqllite/strings/int2str.c | 164 - deps/mysqllite/strings/is_prefix.c | 32 - deps/mysqllite/strings/latin2.def | 478 - deps/mysqllite/strings/llstr.c | 40 - deps/mysqllite/strings/longlong2str.c | 143 - deps/mysqllite/strings/my_strchr.c | 104 - deps/mysqllite/strings/my_strtoll10.c | 236 - deps/mysqllite/strings/my_vsnprintf.c | 681 - deps/mysqllite/strings/str2int.c | 201 - deps/mysqllite/strings/str_alloc.c | 33 - deps/mysqllite/strings/strappend.c | 39 - deps/mysqllite/strings/strcend.c | 36 - deps/mysqllite/strings/strcont.c | 44 - deps/mysqllite/strings/strend.c | 37 - deps/mysqllite/strings/strfill.c | 34 - deps/mysqllite/strings/strmake.c | 54 - deps/mysqllite/strings/strmov.c | 37 - deps/mysqllite/strings/strnlen.c | 34 - deps/mysqllite/strings/strnmov.c | 34 - deps/mysqllite/strings/strxmov.c | 50 - deps/mysqllite/strings/strxnmov.c | 63 - deps/mysqllite/strings/t_ctype.h | 258 - deps/mysqllite/strings/xml.c | 496 - deps/mysqllite/vio/vio.c | 291 - deps/mysqllite/vio/vio_priv.h | 69 - deps/mysqllite/vio/viosocket.c | 1100 - deps/mysqllite/vio/viossl.c | 252 - deps/mysqllite/vio/viosslfactories.c | 315 - 278 files changed, 198720 deletions(-) delete mode 100644 deps/mysqllite/CMakeLists.txt delete mode 100644 deps/mysqllite/COPYING delete mode 100644 deps/mysqllite/README delete mode 100644 deps/mysqllite/VERSION delete mode 100644 deps/mysqllite/cmake/character_sets.cmake delete mode 100644 deps/mysqllite/cmake/mysql_version.cmake delete mode 100644 deps/mysqllite/cmake/os/Windows.cmake delete mode 100644 deps/mysqllite/cmake/os/WindowsCache.cmake delete mode 100644 deps/mysqllite/cmake/stack_direction.c delete mode 100644 deps/mysqllite/cmake/versioninfo.rc.in delete mode 100644 deps/mysqllite/config.h.cmake delete mode 100644 deps/mysqllite/configure.cmake delete mode 100644 deps/mysqllite/dbug/dbug.c delete mode 100644 deps/mysqllite/dbug/dbug_long.h delete mode 100644 deps/mysqllite/dbug/monty.doc delete mode 100644 deps/mysqllite/dbug/user.r delete mode 100644 deps/mysqllite/include/decimal.h delete mode 100644 deps/mysqllite/include/errmsg.h delete mode 100644 deps/mysqllite/include/internal/atomic/gcc_builtins.h delete mode 100644 deps/mysqllite/include/internal/atomic/generic-msvc.h delete mode 100644 deps/mysqllite/include/internal/atomic/nolock.h delete mode 100644 deps/mysqllite/include/internal/atomic/rwlock.h delete mode 100644 deps/mysqllite/include/internal/atomic/solaris.h delete mode 100644 deps/mysqllite/include/internal/atomic/x86-gcc.h delete mode 100644 deps/mysqllite/include/internal/base64.h delete mode 100644 deps/mysqllite/include/internal/hash.h delete mode 100644 deps/mysqllite/include/internal/lf.h delete mode 100644 deps/mysqllite/include/internal/my_aes.h delete mode 100644 deps/mysqllite/include/internal/my_alarm.h delete mode 100644 deps/mysqllite/include/internal/my_atomic.h delete mode 100644 deps/mysqllite/include/internal/my_base.h delete mode 100644 deps/mysqllite/include/internal/my_bit.h delete mode 100644 deps/mysqllite/include/internal/my_bitmap.h delete mode 100644 deps/mysqllite/include/internal/my_handler.h delete mode 100644 deps/mysqllite/include/internal/my_libwrap.h delete mode 100644 deps/mysqllite/include/internal/my_md5.h delete mode 100644 deps/mysqllite/include/internal/my_nosys.h delete mode 100644 deps/mysqllite/include/internal/my_rdtsc.h delete mode 100644 deps/mysqllite/include/internal/my_stacktrace.h delete mode 100644 deps/mysqllite/include/internal/my_time.h delete mode 100644 deps/mysqllite/include/internal/my_tree.h delete mode 100644 deps/mysqllite/include/internal/my_uctype.h delete mode 100644 deps/mysqllite/include/internal/myisampack.h delete mode 100644 deps/mysqllite/include/internal/mysql_version.h.in delete mode 100644 deps/mysqllite/include/internal/mysys_err.h delete mode 100644 deps/mysqllite/include/internal/password.h delete mode 100644 deps/mysqllite/include/internal/probes_mysql.h delete mode 100644 deps/mysqllite/include/internal/probes_mysql_nodtrace.h delete mode 100644 deps/mysqllite/include/internal/queues.h delete mode 100644 deps/mysqllite/include/internal/rijndael.h delete mode 100644 deps/mysqllite/include/internal/sha1.h delete mode 100644 deps/mysqllite/include/internal/t_ctype.h delete mode 100644 deps/mysqllite/include/internal/thr_alarm.h delete mode 100644 deps/mysqllite/include/internal/thr_lock.h delete mode 100644 deps/mysqllite/include/internal/violite.h delete mode 100644 deps/mysqllite/include/keycache.h delete mode 100644 deps/mysqllite/include/m_ctype.h delete mode 100644 deps/mysqllite/include/m_string.h delete mode 100644 deps/mysqllite/include/my_alloc.h delete mode 100644 deps/mysqllite/include/my_attribute.h delete mode 100644 deps/mysqllite/include/my_compiler.h delete mode 100644 deps/mysqllite/include/my_dbug.h delete mode 100644 deps/mysqllite/include/my_dir.h delete mode 100644 deps/mysqllite/include/my_getopt.h delete mode 100644 deps/mysqllite/include/my_global.h delete mode 100644 deps/mysqllite/include/my_list.h delete mode 100644 deps/mysqllite/include/my_net.h delete mode 100644 deps/mysqllite/include/my_pthread.h delete mode 100644 deps/mysqllite/include/my_sys.h delete mode 100644 deps/mysqllite/include/my_xml.h delete mode 100644 deps/mysqllite/include/mysql.h delete mode 100644 deps/mysqllite/include/mysql/client_plugin.h delete mode 100644 deps/mysqllite/include/mysql/innodb_priv.h delete mode 100644 deps/mysqllite/include/mysql/plugin.h delete mode 100644 deps/mysqllite/include/mysql/plugin_audit.h delete mode 100644 deps/mysqllite/include/mysql/plugin_auth.h delete mode 100644 deps/mysqllite/include/mysql/plugin_auth_common.h delete mode 100644 deps/mysqllite/include/mysql/plugin_ftparser.h delete mode 100644 deps/mysqllite/include/mysql/psi/mysql_file.h delete mode 100644 deps/mysqllite/include/mysql/psi/mysql_thread.h delete mode 100644 deps/mysqllite/include/mysql/psi/psi.h delete mode 100644 deps/mysqllite/include/mysql/psi/psi_abi_v1.h delete mode 100644 deps/mysqllite/include/mysql/psi/psi_abi_v2.h delete mode 100644 deps/mysqllite/include/mysql/service_my_snprintf.h delete mode 100644 deps/mysqllite/include/mysql/service_thd_alloc.h delete mode 100644 deps/mysqllite/include/mysql/service_thd_wait.h delete mode 100644 deps/mysqllite/include/mysql/service_thread_scheduler.h delete mode 100644 deps/mysqllite/include/mysql/services.h delete mode 100644 deps/mysqllite/include/mysql_com.h delete mode 100644 deps/mysqllite/include/mysql_embed.h delete mode 100644 deps/mysqllite/include/mysql_time.h delete mode 100644 deps/mysqllite/include/mysqld_ername.h delete mode 100644 deps/mysqllite/include/mysqld_error.h delete mode 100644 deps/mysqllite/include/plugin.h delete mode 100644 deps/mysqllite/include/plugin_audit.h delete mode 100644 deps/mysqllite/include/plugin_ftparser.h delete mode 100644 deps/mysqllite/include/sql_common.h delete mode 100644 deps/mysqllite/include/sql_state.h delete mode 100644 deps/mysqllite/include/sslopt-case.h delete mode 100644 deps/mysqllite/include/sslopt-longopts.h delete mode 100644 deps/mysqllite/include/sslopt-vars.h delete mode 100644 deps/mysqllite/include/typelib.h delete mode 100644 deps/mysqllite/libmysql/client_settings.h delete mode 100644 deps/mysqllite/libmysql/errmsg.c delete mode 100644 deps/mysqllite/libmysql/get_password.c delete mode 100644 deps/mysqllite/libmysql/libmysql.c delete mode 100644 deps/mysqllite/libmysql/libmysql_exports.def delete mode 100644 deps/mysqllite/mysys/ChangeLog delete mode 100644 deps/mysqllite/mysys/array.c delete mode 100644 deps/mysqllite/mysys/base64.c delete mode 100644 deps/mysqllite/mysys/charset-def.c delete mode 100644 deps/mysqllite/mysys/charset.c delete mode 100644 deps/mysqllite/mysys/checksum.c delete mode 100644 deps/mysqllite/mysys/default.c delete mode 100644 deps/mysqllite/mysys/errors.c delete mode 100644 deps/mysqllite/mysys/hash.c delete mode 100644 deps/mysqllite/mysys/lf_alloc-pin.c delete mode 100644 deps/mysqllite/mysys/lf_dynarray.c delete mode 100644 deps/mysqllite/mysys/lf_hash.c delete mode 100644 deps/mysqllite/mysys/list.c delete mode 100644 deps/mysqllite/mysys/md5.c delete mode 100644 deps/mysqllite/mysys/mf_arr_appstr.c delete mode 100644 deps/mysqllite/mysys/mf_cache.c delete mode 100644 deps/mysqllite/mysys/mf_dirname.c delete mode 100644 deps/mysqllite/mysys/mf_fn_ext.c delete mode 100644 deps/mysqllite/mysys/mf_format.c delete mode 100644 deps/mysqllite/mysys/mf_getdate.c delete mode 100644 deps/mysqllite/mysys/mf_iocache.c delete mode 100644 deps/mysqllite/mysys/mf_iocache2.c delete mode 100644 deps/mysqllite/mysys/mf_keycache.c delete mode 100644 deps/mysqllite/mysys/mf_keycaches.c delete mode 100644 deps/mysqllite/mysys/mf_loadpath.c delete mode 100644 deps/mysqllite/mysys/mf_pack.c delete mode 100644 deps/mysqllite/mysys/mf_path.c delete mode 100644 deps/mysqllite/mysys/mf_qsort.c delete mode 100644 deps/mysqllite/mysys/mf_qsort2.c delete mode 100644 deps/mysqllite/mysys/mf_radix.c delete mode 100644 deps/mysqllite/mysys/mf_same.c delete mode 100644 deps/mysqllite/mysys/mf_sort.c delete mode 100644 deps/mysqllite/mysys/mf_soundex.c delete mode 100644 deps/mysqllite/mysys/mf_tempdir.c delete mode 100644 deps/mysqllite/mysys/mf_tempfile.c delete mode 100644 deps/mysqllite/mysys/mf_unixpath.c delete mode 100644 deps/mysqllite/mysys/mf_wcomp.c delete mode 100644 deps/mysqllite/mysys/mulalloc.c delete mode 100644 deps/mysqllite/mysys/my_access.c delete mode 100644 deps/mysqllite/mysys/my_aes.c delete mode 100644 deps/mysqllite/mysys/my_alarm.c delete mode 100644 deps/mysqllite/mysys/my_alloc.c delete mode 100644 deps/mysqllite/mysys/my_atomic.c delete mode 100644 deps/mysqllite/mysys/my_bit.c delete mode 100644 deps/mysqllite/mysys/my_bitmap.c delete mode 100644 deps/mysqllite/mysys/my_chsize.c delete mode 100644 deps/mysqllite/mysys/my_compress.c delete mode 100644 deps/mysqllite/mysys/my_conio.c delete mode 100644 deps/mysqllite/mysys/my_copy.c delete mode 100644 deps/mysqllite/mysys/my_create.c delete mode 100644 deps/mysqllite/mysys/my_delete.c delete mode 100644 deps/mysqllite/mysys/my_div.c delete mode 100644 deps/mysqllite/mysys/my_error.c delete mode 100644 deps/mysqllite/mysys/my_file.c delete mode 100644 deps/mysqllite/mysys/my_fopen.c delete mode 100644 deps/mysqllite/mysys/my_fstream.c delete mode 100644 deps/mysqllite/mysys/my_gethostbyname.c delete mode 100644 deps/mysqllite/mysys/my_gethwaddr.c delete mode 100644 deps/mysqllite/mysys/my_getncpus.c delete mode 100644 deps/mysqllite/mysys/my_getopt.c delete mode 100644 deps/mysqllite/mysys/my_getpagesize.c delete mode 100644 deps/mysqllite/mysys/my_getsystime.c delete mode 100644 deps/mysqllite/mysys/my_getwd.c delete mode 100644 deps/mysqllite/mysys/my_handler.c delete mode 100644 deps/mysqllite/mysys/my_handler_errors.h delete mode 100644 deps/mysqllite/mysys/my_init.c delete mode 100644 deps/mysqllite/mysys/my_largepage.c delete mode 100644 deps/mysqllite/mysys/my_lib.c delete mode 100644 deps/mysqllite/mysys/my_libwrap.c delete mode 100644 deps/mysqllite/mysys/my_lock.c delete mode 100644 deps/mysqllite/mysys/my_lockmem.c delete mode 100644 deps/mysqllite/mysys/my_malloc.c delete mode 100644 deps/mysqllite/mysys/my_memmem.c delete mode 100644 deps/mysqllite/mysys/my_mess.c delete mode 100644 deps/mysqllite/mysys/my_mkdir.c delete mode 100644 deps/mysqllite/mysys/my_mmap.c delete mode 100644 deps/mysqllite/mysys/my_new.cc delete mode 100644 deps/mysqllite/mysys/my_once.c delete mode 100644 deps/mysqllite/mysys/my_open.c delete mode 100644 deps/mysqllite/mysys/my_port.c delete mode 100644 deps/mysqllite/mysys/my_pread.c delete mode 100644 deps/mysqllite/mysys/my_pthread.c delete mode 100644 deps/mysqllite/mysys/my_quick.c delete mode 100644 deps/mysqllite/mysys/my_rdtsc.c delete mode 100644 deps/mysqllite/mysys/my_read.c delete mode 100644 deps/mysqllite/mysys/my_redel.c delete mode 100644 deps/mysqllite/mysys/my_rename.c delete mode 100644 deps/mysqllite/mysys/my_seek.c delete mode 100644 deps/mysqllite/mysys/my_sleep.c delete mode 100644 deps/mysqllite/mysys/my_static.c delete mode 100644 deps/mysqllite/mysys/my_static.h delete mode 100644 deps/mysqllite/mysys/my_symlink.c delete mode 100644 deps/mysqllite/mysys/my_symlink2.c delete mode 100644 deps/mysqllite/mysys/my_sync.c delete mode 100644 deps/mysqllite/mysys/my_thr_init.c delete mode 100644 deps/mysqllite/mysys/my_wincond.c delete mode 100644 deps/mysqllite/mysys/my_windac.c delete mode 100644 deps/mysqllite/mysys/my_winerr.c delete mode 100644 deps/mysqllite/mysys/my_winfile.c delete mode 100644 deps/mysqllite/mysys/my_winthread.c delete mode 100644 deps/mysqllite/mysys/my_write.c delete mode 100644 deps/mysqllite/mysys/mysys_priv.h delete mode 100644 deps/mysqllite/mysys/ptr_cmp.c delete mode 100644 deps/mysqllite/mysys/queues.c delete mode 100644 deps/mysqllite/mysys/rijndael.c delete mode 100644 deps/mysqllite/mysys/sha1.c delete mode 100644 deps/mysqllite/mysys/stacktrace.c delete mode 100644 deps/mysqllite/mysys/string.c delete mode 100644 deps/mysqllite/mysys/thr_alarm.c delete mode 100644 deps/mysqllite/mysys/thr_lock.c delete mode 100644 deps/mysqllite/mysys/thr_mutex.c delete mode 100644 deps/mysqllite/mysys/thr_rwlock.c delete mode 100644 deps/mysqllite/mysys/tree.c delete mode 100644 deps/mysqllite/mysys/typelib.c delete mode 100644 deps/mysqllite/sql-common/client.c delete mode 100644 deps/mysqllite/sql-common/client_plugin.c delete mode 100644 deps/mysqllite/sql-common/my_time.c delete mode 100644 deps/mysqllite/sql-common/pack.c delete mode 100644 deps/mysqllite/sql/net_serv.cc delete mode 100644 deps/mysqllite/sql/password.c delete mode 100644 deps/mysqllite/strings/CHARSET_INFO.txt delete mode 100644 deps/mysqllite/strings/README delete mode 100644 deps/mysqllite/strings/bchange.c delete mode 100644 deps/mysqllite/strings/bmove_upp.c delete mode 100644 deps/mysqllite/strings/ctype-big5.c delete mode 100644 deps/mysqllite/strings/ctype-bin.c delete mode 100644 deps/mysqllite/strings/ctype-cp932.c delete mode 100644 deps/mysqllite/strings/ctype-czech.c delete mode 100644 deps/mysqllite/strings/ctype-euc_kr.c delete mode 100644 deps/mysqllite/strings/ctype-extra.c delete mode 100644 deps/mysqllite/strings/ctype-gb2312.c delete mode 100644 deps/mysqllite/strings/ctype-gbk.c delete mode 100644 deps/mysqllite/strings/ctype-latin1.c delete mode 100644 deps/mysqllite/strings/ctype-mb.c delete mode 100644 deps/mysqllite/strings/ctype-simple.c delete mode 100644 deps/mysqllite/strings/ctype-tis620.c delete mode 100644 deps/mysqllite/strings/ctype-uca.c delete mode 100644 deps/mysqllite/strings/ctype-ucs2.c delete mode 100644 deps/mysqllite/strings/ctype-utf8.c delete mode 100644 deps/mysqllite/strings/ctype-win1250ch.c delete mode 100644 deps/mysqllite/strings/ctype.c delete mode 100644 deps/mysqllite/strings/decimal.c delete mode 100644 deps/mysqllite/strings/dtoa.c delete mode 100644 deps/mysqllite/strings/int2str.c delete mode 100644 deps/mysqllite/strings/is_prefix.c delete mode 100644 deps/mysqllite/strings/latin2.def delete mode 100644 deps/mysqllite/strings/llstr.c delete mode 100644 deps/mysqllite/strings/longlong2str.c delete mode 100644 deps/mysqllite/strings/my_strchr.c delete mode 100644 deps/mysqllite/strings/my_strtoll10.c delete mode 100644 deps/mysqllite/strings/my_vsnprintf.c delete mode 100644 deps/mysqllite/strings/str2int.c delete mode 100644 deps/mysqllite/strings/str_alloc.c delete mode 100644 deps/mysqllite/strings/strappend.c delete mode 100644 deps/mysqllite/strings/strcend.c delete mode 100644 deps/mysqllite/strings/strcont.c delete mode 100644 deps/mysqllite/strings/strend.c delete mode 100644 deps/mysqllite/strings/strfill.c delete mode 100644 deps/mysqllite/strings/strmake.c delete mode 100644 deps/mysqllite/strings/strmov.c delete mode 100644 deps/mysqllite/strings/strnlen.c delete mode 100644 deps/mysqllite/strings/strnmov.c delete mode 100644 deps/mysqllite/strings/strxmov.c delete mode 100644 deps/mysqllite/strings/strxnmov.c delete mode 100644 deps/mysqllite/strings/t_ctype.h delete mode 100644 deps/mysqllite/strings/xml.c delete mode 100644 deps/mysqllite/vio/vio.c delete mode 100644 deps/mysqllite/vio/vio_priv.h delete mode 100644 deps/mysqllite/vio/viosocket.c delete mode 100644 deps/mysqllite/vio/viossl.c delete mode 100644 deps/mysqllite/vio/viosslfactories.c diff --git a/deps/mysqllite/CMakeLists.txt b/deps/mysqllite/CMakeLists.txt deleted file mode 100644 index 8d169d56f351e7..00000000000000 --- a/deps/mysqllite/CMakeLists.txt +++ /dev/null @@ -1,261 +0,0 @@ -# Copyright (C) 2006 MySQL AB -# Copyright (C) -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# Include the platform-specific file. -include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/os/Windows.cmake) - -# Add macros -include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/character_sets.cmake) -include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/mysql_version.cmake) - -# Advanced options (mostly useless, but usually still in config.h, so they need to be set...) -set(CYBOZU OFF) -set(BACKUP_TEST OFF) -set(ENABLED_LOCAL_INFILE ON) -set(WITH_FAST_MUTEXES OFF) - -# Handle useful options - hardcode to ON/OFF -set(ENABLED_PROFILING OFF) -set_directory_properties(PROPERTIES COMPILE_DEFINITIONS $<$:ENABLED_DEBUG_SYNC) - -# Set DBUG_OFF and other optional release-only flags for non-debug project types -foreach(BUILD_TYPE RELEASE RELWITHDEBINFO MINSIZEREL) - set_directory_properties(PROPERTIES COMPILE_DEFINITIONS_ DBUG_OFF) - if(WITH_FAST_MUTEXES) - set_directory_properties(PROPERTIES COMPILE_DEFINITIONS_ "MY_PTHREAD_FASTMUTEX=1") - endif() -endforeach() - -# Set commonly used variables -set(DEFAULT_MYSQL_HOME "C:/Program Files/MySQL/MySQL Server ${MYSQL_BASE_VERSION}" ) -set(SHAREDIR share) -set(DEFAULT_BASEDIR "${DEFAULT_MYSQL_HOME}") -set(MYSQL_DATADIR "${DEFAULT_MYSQL_HOME}/data") -set(DEFAULT_CHARSET_HOME "${DEFAULT_MYSQL_HOME}") -set(PLUGINDIR "${DEFAULT_MYSQL_HOME}/lib/plugin") - -set(COMPILATION_COMMENT "Source distribution lite for AzerothCore") - -# Run platform tests -include(${CMAKE_CURRENT_SOURCE_DIR}/configure.cmake) - -# Use system openssl. -add_definitions(-DHAVE_OPENSSL) - -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_BINARY_DIR} - ${OPENSSL_INCLUDE_DIR} - ${CMAKE_SOURCE_DIR}/deps/zlib - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_CURRENT_SOURCE_DIR}/include/internal - ${CMAKE_CURRENT_SOURCE_DIR}/dbug - ${CMAKE_CURRENT_SOURCE_DIR}/strings - ${CMAKE_CURRENT_SOURCE_DIR}/mysys - ${CMAKE_CURRENT_SOURCE_DIR}/libmysql -) - -set(DBUG_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/dbug/dbug.c -) - -set(STRINGS_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/strings/bchange.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/bmove_upp.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-big5.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-bin.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-cp932.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-czech.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-euc_kr.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-extra.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-gb2312.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-gbk.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-latin1.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-mb.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-simple.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-tis620.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-uca.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-ucs2.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-utf8.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype-win1250ch.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/ctype.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/decimal.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/dtoa.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/int2str.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/is_prefix.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/llstr.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/longlong2str.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/my_strtoll10.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/my_vsnprintf.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/str2int.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/str_alloc.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/strcend.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/strend.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/strfill.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/strmake.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/strmov.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/strnmov.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/strxmov.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/strxnmov.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/xml.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/my_strchr.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/strcont.c - ${CMAKE_CURRENT_SOURCE_DIR}/strings/strappend.c -) -if(NOT HAVE_STRNLEN) - # OSX does not have strnlen - set(STRINGS_SOURCES ${STRINGS_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/strings/strnlen.c) -endif() - -set(VIO_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/vio/vio.c - ${CMAKE_CURRENT_SOURCE_DIR}/vio/viosocket.c - ${CMAKE_CURRENT_SOURCE_DIR}/vio/viossl.c - ${CMAKE_CURRENT_SOURCE_DIR}/vio/viosslfactories.c -) - -set(MYSYS_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/array.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/charset-def.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/charset.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/checksum.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/default.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/errors.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/hash.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/list.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/md5.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_cache.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_dirname.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_fn_ext.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_format.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_getdate.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_iocache.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_iocache2.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_keycache.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_keycaches.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_loadpath.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_pack.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_path.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_qsort.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_qsort2.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_radix.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_same.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_sort.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_soundex.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_arr_appstr.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_tempdir.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_tempfile.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_unixpath.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mf_wcomp.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/mulalloc.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_access.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_aes.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_alloc.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_bit.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_bitmap.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_chsize.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_compress.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_copy.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_create.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_delete.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_div.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_error.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_file.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_fopen.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_fstream.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_gethostbyname.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_gethwaddr.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_getopt.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_getsystime.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_getwd.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_handler.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_init.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_lib.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_lock.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_malloc.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_mess.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_mkdir.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_mmap.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_once.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_open.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_pread.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_pthread.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_quick.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_read.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_redel.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_rename.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_seek.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_sleep.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_static.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_symlink.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_symlink2.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_sync.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_thr_init.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_write.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/ptr_cmp.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/queues.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/stacktrace.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/rijndael.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/sha1.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/string.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/thr_alarm.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/thr_lock.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/thr_mutex.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/thr_rwlock.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/tree.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/typelib.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/base64.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_memmem.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_getpagesize.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/lf_alloc-pin.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/lf_dynarray.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/lf_hash.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_atomic.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_getncpus.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_rdtsc.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_winthread.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_wincond.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_winerr.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_winfile.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_windac.c - ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_conio.c -) -if(HAVE_ALARM) - set(MYSYS_SOURCES ${MYSYS_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_alarm.c) -endif() -if(HAVE_LARGE_PAGES) - set(MYSYS_SOURCES ${MYSYS_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_largepage.c) -endif() -if(HAVE_MLOCK) - set(MYSYS_SOURCES ${MYSYS_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/mysys/my_lockmem.c) -endif() - -set(CLIENT_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/libmysql/get_password.c - ${CMAKE_CURRENT_SOURCE_DIR}/libmysql/libmysql.c - ${CMAKE_CURRENT_SOURCE_DIR}/libmysql/errmsg.c - ${CMAKE_CURRENT_SOURCE_DIR}/sql-common/client.c - ${CMAKE_CURRENT_SOURCE_DIR}/sql-common/my_time.c - ${CMAKE_CURRENT_SOURCE_DIR}/sql-common/client_plugin.c - ${CMAKE_CURRENT_SOURCE_DIR}/sql/net_serv.cc - ${CMAKE_CURRENT_SOURCE_DIR}/sql-common/pack.c - ${CMAKE_CURRENT_SOURCE_DIR}/sql/password.c -) - -configure_file(config.h.cmake ${CMAKE_BINARY_DIR}/my_config.h) -configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/internal/mysql_version.h.in ${CMAKE_BINARY_DIR}/mysql_version.h) - -add_version_info(libmysql CLIENT_SOURCES) -add_library(libmysql SHARED ${CLIENT_SOURCES} ${DBUG_SOURCES} ${MYSYS_SOURCES} ${STRINGS_SOURCES} ${VIO_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/libmysql/libmysql_exports.def) -target_link_libraries(libmysql zlib ${OPENSSL_LIBRARIES} ${OPENSSL_EXTRA_LIBRARIES} ws2_32) - -install(TARGETS libmysql RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}") diff --git a/deps/mysqllite/COPYING b/deps/mysqllite/COPYING deleted file mode 100644 index d511905c1647a1..00000000000000 --- a/deps/mysqllite/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/deps/mysqllite/README b/deps/mysqllite/README deleted file mode 100644 index 769313d7e610d4..00000000000000 --- a/deps/mysqllite/README +++ /dev/null @@ -1,2254 +0,0 @@ -MySQL Server - -This is a release of MySQL, a dual-license SQL database server. -For the avoidance of doubt, this particular copy of the software -is released under the version 2 of the GNU General Public License. -MySQL is brought to you by the MySQL team at Oracle. - -Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. - -License information can be found in the COPYING file. - -This distribution may include materials developed by third -parties. For license and attribution notices for these -materials, please refer to the documentation that accompanies -this distribution (see the Licenses for Third-Party Components -appendix). A copy of the license/notices is also reproduced -below. - -GPLv2 Disclaimer -For the avoidance of doubt, except that if any license choice -other than GPL or LGPL is available it will apply instead, -Oracle elects to use only the General Public License version 2 -(GPLv2) at this time for any software where a choice of GPL -license versions is made available with the language indicating -that GPLv2 or any later version may be used, or where a choice -of which version of the GPL is applied is otherwise unspecified. - -For further information about MySQL or additional documentation, -see: -- The latest information about MySQL: http://www.mysql.com -- The current MySQL documentation: http://dev.mysql.com/doc - -Some Reference Manual sections of special interest: -- If you are migrating from an older version of MySQL, please - read the "Upgrading from..." section. -- To see what MySQL can do, take a look at the features section. -- For installation instructions, see the Installing and Upgrading - chapter. -- For the new features/bugfix history, see the MySQL Change History - appendix. -- For currently known bugs, see the Errors and Common Problems - appendix. - -You can browse the MySQL Reference Manual online or download it -in any of several formats at the URL given earlier in this file. -Source distributions include a local copy of the manual in the -Docs directory. - -******************************************************************** - -Third-Party Component Notices - -********************************************************************* - -%%The following software may be included in this product: -FindGTest.cmake (part of CMake 2.8.0) - -Use of any of this software is governed by the terms of the license below: - -# Copyright 2009 Kitware, Inc. -# Copyright 2009 Philip Lowman -# Copyright 2009 Daniel Blezek -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#=========================================================================== -# (To distributed this file outside of CMake, substitute the full -# License text for the above reference.) -# -# Thanks to Daniel Blezek for the GTEST_ADD_TESTS code - - -Text of Copyright.txt mentioned above: - -CMake - Cross Platform Makefile Generator -Copyright 2000-2009 Kitware, Inc., Insight Software Consortium -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the names of Kitware, Inc., the Insight Software Consortium, - nor the names of their contributors may be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*************************************************************************** - -%%The following software may be included in this product: -Cmake - -Use of any of this software is governed by the terms of the license below: - -CMake is distributed under BSD License - - Copyright (c) 2008, Kitware, Inc. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - * Neither the name of Kitware, Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY Kitware, Inc. "AS IS" AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL Kitware Inc. BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - -Additional License(s) - -cmake-2.4.8/Utilities/cmtar/compat/gethostname.c: - gethostname.c: minimal substitute for missing gethostname() function - created 2000-Mar-02 jmk - requires SVR4 uname() and -lc - - by Jim Knoble - Copyright ? 2000 Jim Knoble - - Permission to use, copy, modify, distribute, and sell this software - and its documentation for any purpose is hereby granted without fee, - provided that the above copyright notice appear in all copies and - that both that copyright notice and this permission notice appear in - supporting documentation. - - This software is provided "as is", without warranty of any kind, - express or implied, including but not limited to the warranties of - merchantability, fitness for a particular purpose and - noninfringement. In no event shall the author(s) be liable for any - claim, damages or other liability, whether in an action of contract, - tort or otherwise, arising from, out of or in connection with the - software or the use or other dealings in the software. - ----------------------------------- - -* Originally written by Steven M. Bellovin while -* at the University of North Carolina at Chapel Hill. Later tweaked by -* a couple of people on Usenet. Completely overhauled by Rich $alz -* and Jim Berets in August, 1990. -* -* This code is in the public domain and has no copyright. - -------------------------------- - - THIS CODE IS SPECIFICALLY EXEMPTED FROM THE NCURSES PACKAGE COPYRIGHT. - You may freely copy it for use as a template for your own field types. - If you develop a field type that might be of general use, please send - it back to the ncurses maintainers for inclusion in the next version. - -************************************************************************** - - * Author : Per Foreby, perf@efd.lth.se - * Author : Juergen Pfeifer, juergen.pfeifer@gmx.net - -************************************************************************** - ----------------------------------------- - - Copyright (c) 2002 Insight Consortium. All rights reserved. - See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for - details. - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notices for more information. - --------------------------------------------- - - Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - - As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. - ---------------------------------------------------- - -cmake-2.4.8/Utilities/cmzlib/zlib.h: - zlib.h -- interface of the 'zlib' general purpose compression library - version 1.1.4, March 11th, 2002 - - Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - 3. This notice may not be removed or altered from any source - distribution. - - Jean-loup Gailly Mark Adler - ----------------------------------------------- - - This source code was modified by Martin Hedenfalk for use in Curl. His - latest changes were done 2000-09-18. - - It has since been patched away like a madman by Daniel Stenberg to make it - better applied to curl conditions, and to make it not use globals, pollute - name space and more. This source code awaits a rewrite to work around the - paragraph 2 in the BSD licenses as explained below. - - Copyright (c) 1995, 1996, 1997, 1998, 1999 Kungliga Tekniska Hgskolan - It has since been patched and modified a lot by Daniel Stenberg to make it - better applied to curl conditions, and to make it not use globals, pollute - name space and more. This source code awaits a rewrite to work around the - paragraph 2 in the BSD licenses as explained below. - - Copyright (c) 1998, 1999 Kungliga Tekniska Hgskolan - (Royal Institute of Technology, Stockholm, Sweden). - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of the Institute nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - ---------------------------------------------- - - Permission to use, copy, modify, and distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND - CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER. - --------------------------------------------------- - -cmake-2.4.8/Utilities/cmcurl/inet_pton.c, -cmake-2.4.8/Source/CTest/Curl/inet_pton.c: - This is from the BIND 4.9.4 release, modified to compile by itself - - Copyright (c) 1996 by Internet Software Consortium. - - Permission to use, copy, modify, and distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM - DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL - INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, - OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF - USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - -------------------------------------------------------- - -* Copyright (C) 2001 by Eric Kidd. All rights reserved. -* Copyright (C) 2001 by Luke Howard. All rights reserved. -* Copyright (C) 2002 Ximian, Inc. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* 1. Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* 2. Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* 3. The name of the author may not be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR -* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -* SUCH DAMAGE. - ---------------------------------------------------- - - Copyright (c) 1994 - The Regents of the University of California. All rights reserved. - - This code is derived from software contributed to Berkeley by - Chuck Karish of Mindcraft, Inc. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the University nor the names of its contributors - Copyright (c) 1985, 1986 The Regents of the University of California. - All rights reserved. - - This code is derived from software contributed to Berkeley by - James A. Woods, derived from original work by Spencer Thomas - and Joseph Orost. - ------------------------------------------------- - - Copyright (c) 1989, 1993, 1994 - The Regents of the University of California. All rights reserved. - - This code is derived from software contributed to Berkeley by - Guido van Rossum. - - Copyright (c) 1990 The Regents of the University of California. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - This product includes software developed by the University of - California, Berkeley and its contributors. - 4. Neither the name of the University nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - ------------------------------------------------------- - - Project ___| | | | _ \| | - / __| | | | |_) | | - | (__| |_| | _ <| |___ - \___|\___/|_| \_\_____| - - Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. - - Copyright (C) 2004, Daniel Stenberg, , et al. - - This software is licensed as described in the file COPYING, which - you should have received as part of this distribution. The terms - are also available at http://curl.haxx.se/docs/copyright.html. - - You may opt to use, copy, modify, merge, publish, distribute and/or sell - copies of the Software, and permit persons to whom the Software is - furnished to do so, under the terms of the COPYING file. - - This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - KIND, either express or implied. - ------------------------------------------------------------- - -*************************************************************************** - Copyright (c) 1998 Free Software Foundation, Inc. - Copyright (c) 1998,2000 Free Software Foundation, Inc. - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, distribute with modifications, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is furnished - to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN - NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - USE OR OTHER DEALINGS IN THE SOFTWARE. - - - Except as contained in this notice, the name(s) of the above copyright - holders shall not be used in advertising or otherwise to promote the sale, - use or other dealings in this Software without prior written - authorization. -*************************************************************************** - ------------------------------------------------------- - - Copyright (c) 1997 Todd C. Miller - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY - EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - -*************************************************************************** - -%%The following software may be included in this product: -Fred Fish's Dbug Library - -Use of any of this software is governed by the terms of the license below: - - * N O T I C E * - * * - * Copyright Abandoned, 1987, Fred Fish * - * * - * * - * This previously copyrighted work has been placed into the public * - * domain by the author and may be freely used for any purpose, * - * private or commercial. * - * * - * Because of the number of inquiries I was receiving about the use * - * of this product in commercially developed works I have decided to * - * simply make it public domain to further its unrestricted use. I * - * specifically would be most happy to see this material become a * - * part of the standard Unix distributions by AT&T and the Berkeley * - * Computer Science Research Group, and a standard part of the GNU * - * system from the Free Software Foundation. * - * * - * I would appreciate it, as a courtesy, if this notice is left in * - * all copies and derivative works. Thank you. * - * * - * The author makes no warranty of any kind with respect to this * - * product and explicitly disclaims any implied warranties of mer- * - * chantability or fitness for any particular purpose. * - -*************************************************************************** - -%%The following software may be included in this product: -dbug_analyze.c (part of Fred Fish's Dbug Library) - -Use of any of this software is governed by the terms of the license below: - -* Copyright Abandoned, 1987, Fred Fish * -* * -* * -* This previously copyrighted work has been placed into the public * -* domain by the author and may be freely used for any purpose, * -* private or commercial. * -* * -* Because of the number of inquiries I was receiving about the use * -* of this product in commercially developed works I have decided to * -* simply make it public domain to further its unrestricted use. I * -* specifically would be most happy to see this material become a * -* part of the standard Unix distributions by AT&T and the Berkeley * -* Computer Science Research Group, and a standard part of the GNU * -* system from the Free Software Foundation. * -* * -* I would appreciate it, as a courtesy, if this notice is left in * -* all copies and derivative works. Thank you. * -* * -* The author makes no warranty of any kind with respect to this * -* product and explicitly disclaims any implied warranties of mer- * -* chantability or fitness for any particular purpose. * - -*************************************************************************** - -%%The following software may be included in this product: -GNU Libtool, only ltmain.sh, libtool, auto-gen fil - -Use of any of this software is governed by the terms of the license below: - -ltmain.sh inclusion: -# ltmain.sh - Provide generalized library-building support services. -# NOTE: Changing this file will not affect anything until you rerun configure. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007 Free Software Foundation, Inc. -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -libtool inclusion: -# libtoolT - Provide generalized library-building support services. -# Generated automatically by (GNU mysql 5.1.30) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, -# 2006, 2007 Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -Auto-generated files: -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building -# support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -# 2004, 2005, 2006, 2007 Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -Additional License(s) - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -*************************************************************************** - -%%The following software may be included in this product: -innochecksum.c - -Use of any of this software is governed by the terms of the license below: - -GNU GENERAL PUBLIC LICENSE - -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to share -and change it. By contrast, the GNU General Public License is intended to -guarantee your freedom to share and change free software--to make sure the -software is free for all its users. This General Public License applies to most -of the Free Software Foundation's software and to any other program whose -authors commit to using it. (Some other Free Software Foundation software is -covered by the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom to -distribute copies of free software (and charge for this service if you wish), -that you receive source code or can get it if you want it, that you can change -the software or use pieces of it in new free programs; and that you know you can -do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny -you these rights or to ask you to surrender the rights. These restrictions -translate to certain responsibilities for you if you distribute copies of the -software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for a -fee, you must give the recipients all the rights that you have. You must make -sure that they, too, receive or can get the source code. And you must show them -these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) offer -you this license which gives you legal permission to copy, distribute and/or -modify the software. - -Also, for each author's protection and ours, we want to make certain that -everyone understands that there is no warranty for this free software. If the -software is modified by someone else and passed on, we want its recipients to -know that what they have is not the original, so that any problems introduced by -others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We wish -to avoid the danger that redistributors of a free program will individually -obtain patent licenses, in effect making the program proprietary. To prevent -this, we have made it clear that any patent must be licensed for everyone's free -use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification follow. -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice -placed by the copyright holder saying it may be distributed under the terms of -this General Public License. The "Program", below, refers to any such program or -work, and a "work based on the Program" means either the Program or any -derivative work under copyright law: that is to say, a work containing the -Program or a portion of it, either verbatim or with modifications and/or -translated into another language. (Hereinafter, translation is included without -limitation in the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not covered by -this License; they are outside its scope. The act of running the Program is not -restricted, and the output from the Program is covered only if its contents -constitute a work based on the Program (independent of having been made by -running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source code as -you receive it, in any medium, provided that you conspicuously and appropriately -publish on each copy an appropriate copyright notice and disclaimer of warranty; -keep intact all the notices that refer to this License and to the absence of any -warranty; and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may at -your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus -forming a work based on the Program, and copy and distribute such modifications -or work under the terms of Section 1 above, provided that you also meet all of -these conditions: - - a) You must cause the modified files to carry prominent notices stating that -you changed the files and the date of any change. - b) You must cause any work that you distribute or publish, that in whole or -in part contains or is derived from the Program or any part thereof, to be -licensed as a whole at no charge to all third parties under the terms of this -License. - c) If the modified program normally reads commands interactively when run, -you must cause it, when started running for such interactive use in the most -ordinary way, to print or display an announcement including an appropriate -copyright notice and a notice that there is no warranty (or else, saying that -you provide a warranty) and that users may redistribute the program under these -conditions, and telling the user how to view a copy of this License. (Exception: -if the Program itself is interactive but does not normally print such an -announcement, your work based on the Program is not required to print an -announcement.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Program, and can be reasonably -considered independent and separate works in themselves, then this License, and -its terms, do not apply to those sections when you distribute them as separate -works. But when you distribute the same sections as part of a whole which is a -work based on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the entire whole, -and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on the -Program. - -In addition, mere aggregation of another work not based on the Program with the -Program (or with a work based on the Program) on a volume of a storage or -distribution medium does not bring the other work under the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, under Section -2) in object code or executable form under the terms of Sections 1 and 2 above -provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable source -code, which must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange; or, - b) Accompany it with a written offer, valid for at least three years, to -give any third party, for a charge no more than your cost of physically -performing source distribution, a complete machine-readable copy of the -corresponding source code, to be distributed under the terms of Sections 1 and 2 -above on a medium customarily used for software interchange; or, - c) Accompany it with the information you received as to the offer to -distribute corresponding source code. (This alternative is allowed only for -noncommercial distribution and only if you received the program in object code -or executable form with such an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for making -modifications to it. For an executable work, complete source code means all the -source code for all modules it contains, plus any associated interface -definition files, plus the scripts used to control compilation and installation -of the executable. However, as a special exception, the source code distributed -need not include anything that is normally distributed (in either source or -binary form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component itself -accompanies the executable. - -If distribution of executable or object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the source code -from the same place counts as distribution of the source code, even though third -parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as -expressly provided under this License. Any attempt otherwise to copy, modify, -sublicense or distribute the Program is void, and will automatically terminate -your rights under this License. However, parties who have received copies, or -rights, from you under this License will not have their licenses terminated so -long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. -However, nothing else grants you permission to modify or distribute the Program -or its derivative works. These actions are prohibited by law if you do not -accept this License. Therefore, by modifying or distributing the Program (or any -work based on the Program), you indicate your acceptance of this License to do -so, and all its terms and conditions for copying, distributing or modifying the -Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), -the recipient automatically receives a license from the original licensor to -copy, distribute or modify the Program subject to these terms and conditions. -You may not impose any further restrictions on the recipients' exercise of the -rights granted herein. You are not responsible for enforcing compliance by third -parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent infringement -or for any other reason (not limited to patent issues), conditions are imposed -on you (whether by court order, agreement or otherwise) that contradict the -conditions of this License, they do not excuse you from the conditions of this -License. If you cannot distribute so as to satisfy simultaneously your -obligations under this License and any other pertinent obligations, then as a -consequence you may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by all those -who receive copies directly or indirectly through you, then the only way you -could satisfy both it and this License would be to refrain entirely from -distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply and the -section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system, which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain -countries either by patents or by copyrighted interfaces, the original copyright -holder who places the Program under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In such -case, this License incorporates the limitation as if written in the body of this -License. - -9. The Free Software Foundation may publish revised and/or new versions of the -General Public License from time to time. Such new versions will be similar in -spirit to the present version, but may differ in detail to address new problems -or concerns. - -Each version is given a distinguishing version number. If the Program specifies -a version number of this License which applies to it and "any later version", -you have the option of following the terms and conditions either of that version -or of any later version published by the Free Software Foundation. If the -Program does not specify a version number of this License, you may choose any -version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs -whose distribution conditions are different, write to the author to ask for -permission. For software which is copyrighted by the Free Software Foundation, -write to the Free Software Foundation; we sometimes make exceptions for this. -Our decision will be guided by the two goals of preserving the free status of -all derivatives of our free software and of promoting the sharing and reuse of -software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE -PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED -IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS -IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT -NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL -ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE -PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, -SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY -TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF -THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER -PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -END OF TERMS AND CONDITIONS -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use -to the public, the best way to achieve this is to make it free software which -everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach -them to the start of each source file to most effectively convey the exclusion -of warranty; and each file should have at least the "copyright" line and a -pointer to where the full notice is found. - -one line to give the program's name and an idea of what it does. -Copyright (C) yyyy name of author - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this when it -starts in an interactive mode: - -Gnomovision version 69, Copyright (C) year name of author -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details -type `show w'. This is free software, and you are welcome -to redistribute it under certain conditions; type `show c' -for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may be -called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your school, -if any, to sign a "copyright disclaimer" for the program, if necessary. Here is -a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright -interest in the program `Gnomovision' -(which makes passes at compilers) written -by James Hacker. - -signature of Ty Coon, 1 April 1989 -Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may consider -it more useful to permit linking proprietary applications with the library. If -this is what you want to do, use the GNU Lesser General Public License instead -of this License. - -Additional Documentation License(s) - -innochecksum.c is documented in the MySQL Reference -Manual at http://dev.mysql.com/doc/refman/5.1/en/innochecksum.html -The Reference Manual is not licensed under the GPL; rather, it -is offered under normal copyright, but with permission to -copy/redistribute electronically. - -*************************************************************************** - -%%The following software may be included in this product: -lib_sql.cc - -Use of any of this software is governed by the terms of the license below: - -/* - * Copyright (c) 2000 - * SWsoft company - * - * This material is provided "as is", with absolutely no warranty expressed - * or implied. Any use is at your own risk. - * - * Permission to use or copy this software for any purpose is hereby granted - * without fee, provided the above notices are retained on all copies. - * Permission to modify the code and to distribute modified code is granted, - * provided the above notices are retained, and a notice that the code was - * modified is included with the above copyright notice. - * - - This code was modified by the MySQL team -*/ - -*************************************************************************** - -%%The following software may be included in this product: -libevent - -Use of any of this software is governed by the terms of the license below: - -/* - * Copyright (c) 2000-2004 Niels Provos - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -Additional License(s) - -http://creativecommons.org/licenses/publicdomain - -*************************************************************************** - -%%The following software may be included in this product: -Async DNS Library - -Use of any of this software is governed by the terms of the license below: - -/* Async DNS Library - * Adam Langley - * http://www.imperialviolet.org/eventdns.html - * Public Domain code - * - * This software is Public Domain. To view a copy of the public domain dedication, - * visit http://creativecommons.org/licenses/publicdomain/ or send a letter to - * Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. - * - * I ask and expect, but do not require, that all derivative works contain an - * attribution similar to: - * Parts developed by Adam Langley - * - * You may wish to replace the word "Parts" with something else depending on - * the amount of original code. - * - * (Derivative works does not include programs which link against, run or include - * the source verbatim in their source distributions) - * - * Version: 0.1b - */ - -*************************************************************************** - -%%The following software may be included in this product: -log.c - -Use of any of this software is governed by the terms of the license below: - -/* $OpenBSD: err.c,v 1.2 2002/06/25 15:50:15 mickey Exp $ */ - -/* - * log.c - * - * Based on err.c, which was adapted from OpenBSD libc *err* *warn* code. - * - * Copyright (c) 2005 Nick Mathewson - * - * Copyright (c) 2000 Dug Song - * - * Copyright (c) 1993 - * The Regents of the University of California. All rights -reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -*************************************************************************** - -%%The following software may be included in this product: -min_heap.h - -Use of any of this software is governed by the terms of the license below: - -/* - * Copyright (c) 2006 Maxim Yegorushkin - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -*************************************************************************** - -%%The following software may be included in this product: -win32.c - -Use of any of this software is governed by the terms of the license below: - -/* - * Copyright 2000-2002 Niels Provos - * Copyright 2003 Michael A. Davis - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -*************************************************************************** - -%%The following software may be included in this product: -regex++ - -Use of any of this software is governed by the terms of the license below: - -Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved. -This software is not subject to any license of the American Telephone -and Telegraph Company or of the Regents of the University of California. - -Permission is granted to anyone to use this software for any purpose on -any computer system, and to alter it and redistribute it, subject -to the following restrictions: - -1. The author is not responsible for the consequences of use of this - software, no matter how awful, even if they arise from flaws in it. - -2. The origin of this software must not be misrepresented, either by - explicit claim or by omission. Since few users ever read sources, - credits must appear in the documentation. - -3. Altered versions must be plainly marked as such, and must not be - misrepresented as being the original software. Since few users - ever read sources, credits must appear in the documentation. - -4. This notice may not be removed or altered. - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -/*- - * Copyright (c) 1994 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)COPYRIGHT 8.1 (Berkeley) 3/16/94 - */ - -*************************************************************************** - -%%The following software may be included in this product: -Richard A. O'Keefe strings package - -Use of any of this software is governed by the terms of the license below: - -These files are in the public domain. This includes getopt.c, which -is the work of Henry Spencer, University of Toronto Zoology, who says of -it "None of this software is derived from Bell software. I had no access -to the source for Bell's versions at the time I wrote it. This software -is hereby explicitly placed in the public domain. It may be used for -any purpose on any machine by anyone." I would greatly prefer it if *my* -material received no military use. - -*************************************************************************** - -%%The following software may be included in this product: -t_ctype.h - -Use of any of this software is governed by the terms of the license below: - -http://bioinfo.mbb.yale.edu/genome/yeast/cluster/database/mysql/include/t_ctype.h - -/* - Copyright (C) 1998, 1999 by Pruet Boonma, all rights reserved. - Copyright (C) 1998 by Theppitak Karoonboonyanan, all rights reserved. - Permission to use, copy, modify, distribute and sell this software - and its documentation for any purpose is hereby granted without fee, - provided that the above copyright notice appear in all copies. - Smaphan Raruenrom and Pruet Boonma makes no representations about - the suitability of this software for any purpose. It is provided - "as is" without express or implied warranty. -*/ - -*************************************************************************** - -%%The following software may be included in this product: -SHA-1 in C - -Use of any of this software is governed by the terms of the license below: - - SHA-1 in C - By Steve Reid - 100% Public Domain - -Additional License(s) - -100% Public Domain - -*************************************************************************** - -%%The following software may be included in this product: -TCMalloc (part of google-perftools) - -Use of any of this software is governed by the terms of the license below: - -# Copyright (c) 1998-2006, Google Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Additional License(s) - -*** File src/tests/ptmalloc/thread-m.h contains this GPLv2 (or later) -text: - -/* Basic platform-independent macro definitions for mutexes and - thread-specific data. - Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Wolfram Gloger , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite - 330, Boston, MA 02111-1307, USA. */ - - - -*** File src/tests/ptmalloc/malloc-machine.h contains this BSD like text: - -/* Basic platform-independent macro definitions for mutexes, - thread-specific data and parameters for malloc. - Posix threads (pthreads) version. - Copyright (C) 2004 Wolfram Gloger . - -Permission to use, copy, modify, distribute, and sell this software -and its documentation for any purpose is hereby granted without fee, -provided that (i) the above copyright notices and this permission -notice appear in all copies of the software and related documentation, -and (ii) the name of Wolfram Gloger may not be used in any advertising -or publicity relating to the software. - -THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, -EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY -WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - -IN NO EVENT SHALL WOLFRAM GLOGER BE LIABLE FOR ANY SPECIAL, -INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY -DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY -OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -*/ - -*************************************************************************** - -%%The following software may be included in this product: -The tz database - -Use of any of this software is governed by the terms of the license below: - -Sources for Time Zone and Daylight Saving Time Data -@(#)tz-link.htm 7.54 - -Please send corrections to this web page to the time zone mailing list. -The tz database - -The public-domain time zone database contains code and data that represent the -history of local time for many representative locations around the globe. It is -updated periodically to reflect changes made by political bodies to time zone -boundaries, UTC offsets, and daylight-saving rules. This database (often called -tz or zoneinfo) is used by several implementations, including the GNU C Library -used in GNU/Linux, FreeBSD, NetBSD, OpenBSD, Cygwin, DJGPP, HP-UX, IRIX, Mac OS -X, OpenVMS, Solaris, Tru64, and UnixWare. - -Each location in the database represents a national region where all clocks -keeping local time have agreed since 1970. Locations are identified by continent -or ocean and then by the name of the location, which is typically the largest -city within the region. For example, America/New_York represents most of the US -eastern time zone; America/Phoenix represents most of Arizona, which uses -mountain time without daylight saving time (DST); America/Detroit represents -most of Michigan, which uses eastern time but with different DST rules in 1975; -and other entries represent smaller regions like Starke County, Indiana, which -switched from central to eastern time in 1991 and switched back in 2006. To use -the database on an extended POSIX implementation set the TZ environment variable -to the location's full name, e.g., TZ="America/New_York". - -In the tz database's FTP distribution the code is in the file tzcodeC.tar.gz, -where C is the code's version; similarly, the data are in tzdataD.tar.gz, where -D is the data's version. The following shell commands download these files to a -GNU/Linux or similar host; see the downloaded README file for what to do next. - -wget 'ftp://elsie.nci.nih.gov/pub/tz*.tar.gz' -gzip -dc tzcode*.tar.gz | tar -xf - -gzip -dc tzdata*.tar.gz | tar -xf - - -The code lets you compile the tz source files into machine-readable binary -files, one for each location. It also lets you read a tz binary file and -interpret time stamps for that location. - -The data are by no means authoritative. If you find errors, please send changes -to the time zone mailing list. You can also subscribe to the mailing list, -retrieve the archive of old messages (in gzip compressed format), or retrieve -archived older versions of code and data; there is also a smaller HTTP mirror. - -*************************************************************************** - -%%The following software may be included in this product: -UnicodeData.txt - -Use of any of this software is governed by the terms of the license below: - -Unicode Terms of Use - - For the general privacy policy governing access to this site, see the - Unicode Privacy Policy. For trademark usage, see the Unicode - Consortium (R) Trademarks and Logo Policy. - Notice to End User: Terms of Use - Carefully read the following legal agreement ("Agreement"). Use or - copying of the software and/or codes provided with this agreement (The - "Software") constitutes your acceptance of these terms - - 1. Unicode Copyright. - 1. Copyright (c) 1991-2008 Unicode, Inc. All rights reserved. - 2. Certain documents and files on this website contain a - legend indicating that "Modification is permitted." Any person - is hereby authorized, without fee, to modify such documents - and files to create derivative works conforming to the - Unicode (R) Standard, subject to Terms and Conditions herein. - 3. Any person is hereby authorized, without fee, to view, use, - reproduce, and distribute all documents and files solely for - informational purposes in the creation of products supporting - the Unicode Standard, subject to the Terms and Conditions - herein. - 4. Further specifications of rights and restrictions - pertaining to the use of the particular set of data files - known as the "Unicode Character Database" can be found in - Exhibit 1. - 5. Each version of the Unicode Standard has further - specifications of rights and restrictions of use. For the book - editions, these are found on the back of the title page. For - the online edition, certain files (such as the PDF files for - book chapters and code charts) carry specific restrictions. - All other files are covered under these general Terms of Use. - To request a permission to reproduce any part of the Unicode - Standard, please contact the Unicode Consortium. - 6. No license is granted to "mirror" the Unicode website where - a fee is charged for access to the "mirror" site. - 7. Modification is not permitted with respect to this - document. All copies of this document must be verbatim. - 2. Restricted Rights Legend. Any technical data or software which is - licensed to the United States of America, its agencies and/or - instrumentalities under this Agreement is commercial technical data - or commercial computer software developed exclusively at private - expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), - as applicable. For technical data, use, duplication, or disclosure - by the Government is subject to restrictions as set forth in DFARS - 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and - this Agreement. For Software, in accordance with FAR 12-212 or DFARS - 227-7202, as applicable, use, duplication or disclosure by the - Government is subject to the restrictions set forth in this - Agreement. - 3. Warranties and Disclaimers. - 1. This publication and/or website may include technical or - typographical errors or other inaccuracies . Changes are - periodically added to the information herein; these changes - will be incorporated in new editions of the publication and/or - website. Unicode may make improvements and/or changes in the - product(s) and/or program(s) described in this publication - and/or website at any time. - 2. If this file has been purchased on magnetic or optical - media from Unicode, Inc. the sole and exclusive remedy for any - claim will be exchange of the defective media within ninety - (90) days of original purchase. - 3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR - SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND - EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT - LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A - PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE AND ITS - LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN - THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE - REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE - WEBSITE. - 4. Waiver of Damages. In no event shall Unicode or its licensors be - liable for any special, incidental, indirect or consequential - damages of any kind, or any damages whatsoever, whether or not - Unicode was advised of the possibility of the damage, including, - without limitation, those resulting from the following: loss of use, - data or profits, in connection with the use, modification or - distribution of this information or its derivatives. - 5. Trademarks. - 1. Unicode and the Unicode logo are registered trademarks of - Unicode, Inc. - 2. This site contains product names and corporate names of - other companies. All product names and company names and logos - mentioned herein are the trademarks or registered trademarks - of their respective owners. Other products and corporate names - mentioned herein which are trademarks of a third party are - used only for explanation and for the owners' benefit and with - no intent to infringe. - 3. Use of third party products or information referred to - herein is at the user's risk. - 6. Miscellaneous. - 1. Jurisdiction and Venue. This server is operated from a - location in the State of California, United States of America. - Unicode makes no representation that the materials are - appropriate for use in other locations. If you access this - server from other locations, you are responsible for - compliance with local laws. This Agreement, all use of this - site and any claims and damages resulting from use of this - site are governed solely by the laws of the State of - California without regard to any principles which would apply - the laws of a different jurisdiction. The user agrees that any - disputes regarding this site shall be resolved solely in the - courts located in Santa Clara County, California. The user - agrees said courts have personal jurisdiction and agree to - waive any right to transfer the dispute to any other forum. - 2. Modification by Unicode Unicode shall have the right to - modify this Agreement at any time by posting it to this site. - The user may not assign any part of this Agreement without - Unicode's prior written consent. - 3. Taxes. The user agrees to pay any taxes arising from access - to this website or use of the information herein, except for - those based on Unicode's net income. - 4. Severability. If any provision of this Agreement is - declared invalid or unenforceable, the remaining provisions of - this Agreement shall remain in effect. - 5. Entire Agreement. This Agreement constitutes the entire - agreement between the parties. - -EXHIBIT 1 -UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE - - Unicode Data Files include all data files under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, and -http://www.unicode.org/cldr/data/ . Unicode Software includes any source code -published in the Unicode Standard or under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, and -http://www.unicode.org/cldr/data/. - - NOTICE TO USER: Carefully read the following legal agreement. BY -DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES -("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND -AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU -DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES -OR SOFTWARE. - - COPYRIGHT AND PERMISSION NOTICE - - Copyright (c) 1991-2008 Unicode, Inc. All rights reserved. Distributed under -the Terms of Use in http://www.unicode.org/copyright.html. - - Permission is hereby granted, free of charge, to any person obtaining a copy -of the Unicode data files and any associated documentation (the "Data Files") or -Unicode software and any associated documentation (the "Software") to deal in -the Data Files or Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files or -Software are furnished to do so, provided that (a) the above copyright notice(s) -and this permission notice appear with all copies of the Data Files or Software, -(b) both the above copyright notice(s) and this permission notice appear in -associated documentation, and (c) there is clear notice in each modified Data -File or in the Software as well as in the documentation associated with the Data -File(s) or Software that the data or software has been modified. - - THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD -PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS -NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL -DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING -OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE. - - Except as contained in this notice, the name of a copyright holder shall not -be used in advertising or otherwise to promote the sale, use or other dealings -in these Data Files or Software without prior written authorization of the -copyright holder. - - Unicode and the Unicode logo are trademarks of Unicode, Inc., and may be -registered in some jurisdictions. All other trademarks and registered trademarks -mentioned herein are the property of their respective owners. - -*************************************************************************** - -%%The following software may be included in this product: -zlib - -Use of any of this software is governed by the terms of the license below: - -/* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.3, July 18th, 2005 - - Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly jloup@gzip.org - Mark Adler madler@alumni.caltech.edu - -*/ - -*************************************************************************** - -%%The following software may be included in this product: -dtoa.c - -Use of any of this software is governed by the terms of the license below: - -/**************************************************************** - - This file incorporates work covered by the following copyright and - permission notice: - - The author of this software is David M. Gay. - - Copyright (c) 1991, 2000, 2001 by Lucent Technologies. - - Permission to use, copy, modify, and distribute this software for any - purpose without fee is hereby granted, provided that this entire - notice is included in all copies of any software which is or includes a copy - or modification of this software and in all copies of the supporting - documentation for such software. - - THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY - REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - - ***************************************************************/ - -*************************************************************************** - -%%The following software may be included in this product: -getarg.{c,h} - -Use of any of this software is governed by the terms of the license below: - -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - * Copyright (c) 1997, 1999 Kungliga Tekniska H366gskolan - * (Royal Institute of Technology, Stockholm, Sweden). - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -*************************************************************************** - -%%The following software may be included in this product: -MD5 message-digest algorithm (md5_hash.cpp) - -Use of any of this software is governed by the terms of the license below: - -/* - * This code implements the MD5 message-digest algorithm. - * The algorithm is due to Ron Rivest. This code was - * written by Colin Plumb in 1993, no copyright is claimed. - * This code is in the public domain; do with it what you wish. - * - * Equivalent code is available from RSA Data Security, Inc. - * This code has been tested against that, and is equivalent, - * except that you don't need to include two pages of legalese - * with every copy. - * - * The code has been modified by Mikael Ronstroem to handle - * calculating a hash value of a key that is always a multiple - * of 4 bytes long. Word 0 of the calculated 4-word hash value - * is returned as the hash value. - */ - -*************************************************************************** - -%%The following software may be included in this product: -nt_servc.{cc,h} - -Use of any of this software is governed by the terms of the license below: - -/** - @file - - @brief - Windows NT Service class library. - - Copyright Abandoned 1998 Irena Pancirov - Irnet Snc - This file is public domain and comes with NO WARRANTY of any kind -*/ - -*************************************************************************** - -%%The following software may be included in this product: -GNU Readline - -Use of any of this software is governed by the terms of the license below: - -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. - -*************************************************************************** - -%%The following software may be included in this product: -pstack (part of GNU Binutils) - -Use of any of this software is governed by the terms of the license below: - -pstack is comprised of various .c and .h files; all begin like this: - -/* bucomm.h -- binutils common include file. - Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. - -This file is part of GNU Binutils. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ - -*************************************************************************** - -%%The following software may be included in this product: -libiberty.h (part of pstack GNU Binutils) - -Use of any of this software is governed by the terms of the license below: - -See -http://www.koders.com/c/fid99F596804BBE22C076522B848D5575F142079064.aspx - -/* Function declarations for libiberty. - Written by Cygnus Support, 1994. - - The libiberty library provides a number of functions which are - missing on some operating systems. We do not declare those here, - to avoid conflicts with the system header files on operating - systems that do support those functions. In this file we only - declare those functions which are specific to libiberty. */ - -*************************************************************************** - -%%The following software may be included in this product: -ieee.h (part of pstack GNU Binutils) - -Use of any of this software is governed by the terms of the license below: - -See -http://src.opensolaris.org/source/xref//sfw/usr/src/cmd/gdb/gdb-6.3/include/ieee.h - - -/* IEEE Standard 695-1980 "Universal Format for Object Modules" - header file - Contributed by Cygnus Support. */ - -*************************************************************************** - -%%The following software may be included in this product: -pstack.c (part of pstack GNU Binutils) - -Use of any of this software is governed by the terms of the license below: - -/* - pstack.c -- asynchronous stack trace of a running process - Copyright (c) 1999 Ross Thompson - Author: Ross Thompson - Critical bug fix: Tim Waugh -*/ - -/* - This file is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -********************************************************************** diff --git a/deps/mysqllite/VERSION b/deps/mysqllite/VERSION deleted file mode 100644 index f85cac84d7e546..00000000000000 --- a/deps/mysqllite/VERSION +++ /dev/null @@ -1,4 +0,0 @@ -MYSQL_VERSION_MAJOR=5 -MYSQL_VERSION_MINOR=5 -MYSQL_VERSION_PATCH=9 -MYSQL_VERSION_EXTRA= diff --git a/deps/mysqllite/cmake/character_sets.cmake b/deps/mysqllite/cmake/character_sets.cmake deleted file mode 100644 index 6b7df9039c80c8..00000000000000 --- a/deps/mysqllite/cmake/character_sets.cmake +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (C) 2009 Sun Microsystems, Inc -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -#Charsets and collations -IF(NOT DEFAULT_CHARSET) -SET(DEFAULT_CHARSET "latin1") -ENDIF() - -IF(NOT DEFAULT_COLLATIONS) -SET(DEFAULT_COLLATION "latin1_swedish_ci") -ENDIF() - -SET(CHARSETS_AVAILABLE -binary armscii8 ascii big5 cp1250 cp1251 cp1256 cp1257 -cp850 cp852 cp866 cp932 dec8 euckr gb2312 gbk geostd8 -greek hebrew hp8 keybcs2 koi8r koi8u -latin1 latin2 latin5 latin7 macce macroman -swe7 tis620 ucs2 utf8 utf8mb4 utf16 utf32) - -SET(MYSQL_DEFAULT_CHARSET_NAME "${DEFAULT_CHARSET}") -SET(MYSQL_DEFAULT_COLLATION_NAME "${DEFAULT_COLLATION}") - -FOREACH(cs in ${CHARSETS_AVAILABLE}) - SET(HAVE_CHARSET_${cs} 1) -ENDFOREACH() - -SET(HAVE_UCA_COLLATIONS 1) - -SET(HAVE_UTF8_GENERAL_CS 1) -SET(USE_MB 1) -SET(USE_MB_IDENT 1) diff --git a/deps/mysqllite/cmake/mysql_version.cmake b/deps/mysqllite/cmake/mysql_version.cmake deleted file mode 100644 index 3c20f77e9d358e..00000000000000 --- a/deps/mysqllite/cmake/mysql_version.cmake +++ /dev/null @@ -1,107 +0,0 @@ -# Copyright (C) 2009 Sun Microsystems, Inc -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -# -# Global constants, only to be changed between major releases. -# - -SET(SHARED_LIB_MAJOR_VERSION "16") -SET(PROTOCOL_VERSION "10") -SET(DOT_FRM_VERSION "6") - -# Generate "something" to trigger cmake rerun when VERSION changes -CONFIGURE_FILE( - ${CMAKE_CURRENT_SOURCE_DIR}/VERSION - ${CMAKE_CURRENT_BINARY_DIR}/VERSION.dep -) - -# Read value for a variable from VERSION. - -MACRO(MYSQL_GET_CONFIG_VALUE keyword var) - IF(NOT ${var}) - FILE (STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/VERSION str REGEX "^[ ]*${keyword}=") - IF(str) - STRING(REPLACE "${keyword}=" "" str ${str}) - STRING(REGEX REPLACE "[ ].*" "" str "${str}") - SET(${var} ${str}) - ENDIF() - ENDIF() -ENDMACRO() - - -# Read mysql version for configure script - -MACRO(GET_MYSQL_VERSION) - MYSQL_GET_CONFIG_VALUE("MYSQL_VERSION_MAJOR" MAJOR_VERSION) - MYSQL_GET_CONFIG_VALUE("MYSQL_VERSION_MINOR" MINOR_VERSION) - MYSQL_GET_CONFIG_VALUE("MYSQL_VERSION_PATCH" PATCH_VERSION) - MYSQL_GET_CONFIG_VALUE("MYSQL_VERSION_EXTRA" EXTRA_VERSION) - - IF(NOT MAJOR_VERSION OR NOT MINOR_VERSION OR NOT PATCH_VERSION) - MESSAGE(FATAL_ERROR "VERSION file cannot be parsed.") - ENDIF() - - SET(VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}${EXTRA_VERSION}") - MESSAGE("-- MySQL ${VERSION}") - SET(MYSQL_BASE_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}" CACHE INTERNAL "MySQL Base version") - SET(MYSQL_NO_DASH_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}") - STRING(REPLACE "-" "_" MYSQL_RPM_VERSION "${VERSION}") - MATH(EXPR MYSQL_VERSION_ID "10000*${MAJOR_VERSION} + 100*${MINOR_VERSION} + ${PATCH_VERSION}") -ENDMACRO() - -# Get mysql version and other interesting variables -GET_MYSQL_VERSION() - -SET(MYSQL_TCP_PORT_DEFAULT "3306") - -IF(NOT MYSQL_TCP_PORT) - SET(MYSQL_TCP_PORT ${MYSQL_TCP_PORT_DEFAULT}) - SET(MYSQL_TCP_PORT_DEFAULT "0") -ELSEIF(MYSQL_TCP_PORT EQUAL MYSQL_TCP_PORT_DEFAULT) - SET(MYSQL_TCP_PORT_DEFAULT "0") -ENDIF() - - -IF(NOT MYSQL_UNIX_ADDR) - SET(MYSQL_UNIX_ADDR "/tmp/mysql.sock") -ENDIF() -IF(NOT COMPILATION_COMMENT) - SET(COMPILATION_COMMENT "Source distribution lite for Trinity Core") -ENDIF() - -# Windows 'date' command has unpredictable output, so cannot rely on it to -# set MYSQL_COPYRIGHT_YEAR - if someone finds a portable way to do so then -# it might be useful -# EXECUTE_PROCESS(COMMAND "date" "/T" OUTPUT_VARIABLE TMP_DATE) -# STRING(REGEX REPLACE "(..)/(..)/..(..).*" "\\3\\2\\1" MYSQL_COPYRIGHT_YEAR ${TMP_DATE}) - -# Add version information to the exe and dll files -# Refer to http://msdn.microsoft.com/en-us/library/aa381058(VS.85).aspx -# for more info. -IF(MSVC) - GET_FILENAME_COMPONENT(MYSQL_CMAKE_SCRIPT_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) - - SET(FILETYPE VFT_DLL) - CONFIGURE_FILE(${MYSQL_CMAKE_SCRIPT_DIR}/versioninfo.rc.in - ${CMAKE_CURRENT_BINARY_DIR}/versioninfo_dll.rc) - - FUNCTION(ADD_VERSION_INFO target sources_var) - SET(rcfile ${CMAKE_CURRENT_BINARY_DIR}/versioninfo_dll.rc) - SET(${sources_var} ${${sources_var}} ${rcfile} PARENT_SCOPE) - ENDFUNCTION() -ELSE() - FUNCTION(ADD_VERSION_INFO) - ENDFUNCTION() -ENDIF() diff --git a/deps/mysqllite/cmake/os/Windows.cmake b/deps/mysqllite/cmake/os/Windows.cmake deleted file mode 100644 index 19c230cc3d5873..00000000000000 --- a/deps/mysqllite/cmake/os/Windows.cmake +++ /dev/null @@ -1,142 +0,0 @@ -# Copyright (C) 2010 Sun Microsystems, Inc -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -# This file includes Windows specific hacks, mostly around compiler flags - -INCLUDE (CheckCSourceCompiles) -INCLUDE (CheckCXXSourceCompiles) -INCLUDE (CheckStructHasMember) -INCLUDE (CheckLibraryExists) -INCLUDE (CheckFunctionExists) -INCLUDE (CheckCCompilerFlag) -INCLUDE (CheckCSourceRuns) -INCLUDE (CheckSymbolExists) -INCLUDE (CheckTypeSize) - -# avoid running system checks by using pre-cached check results -# system checks are expensive on VS since every tiny program is to be compiled in -# a VC solution. -GET_FILENAME_COMPONENT(_SCRIPT_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) -INCLUDE(${_SCRIPT_DIR}/WindowsCache.cmake) - - -# OS display name (version_compile_os etc). -# Used by the test suite to ignore bugs on some platforms, -IF(CMAKE_SIZEOF_VOID_P MATCHES 8) - SET(SYSTEM_TYPE "Win64") -ELSE() - SET(SYSTEM_TYPE "Win32") -ENDIF() - -# Intel compiler is almost Visual C++ -# (same compile flags etc). Set MSVC flag -IF(CMAKE_C_COMPILER MATCHES "icl") - SET(MSVC TRUE) -ENDIF() - -ADD_DEFINITIONS("-D__WIN__ -D_CRT_SECURE_NO_DEPRECATE") -ADD_DEFINITIONS("-D_WIN32_WINNT=0x0501") -# Speed up build process excluding unused header files -ADD_DEFINITIONS("-DWIN32_LEAN_AND_MEAN") - -# Adjust compiler and linker flags -IF(MINGW AND CMAKE_SIZEOF_VOID_P EQUAL 4) - # mininal architecture flags, i486 enables GCC atomics - ADD_DEFINITIONS(-march=i486) -ENDIF() - -IF(MSVC) - # Remove support for exceptions - FOREACH(flag CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_INIT) - STRING(REPLACE "/EHsc" "" "${flag}" "${${flag}}") - ENDFOREACH() - - # Fix CMake's predefined huge stack size - STRING(REGEX REPLACE "/STACK:([^ ]+)" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") - - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805 /wd4996 /wd4244 /wd4267 /wd4090") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805 /wd4996 /we4099 /wd4244 /wd4267") -ENDIF() - -# System checks -SET(SIGNAL_WITH_VIO_CLOSE 1) # Something that runtime team needs - -# IPv6 constants appeared in Vista SDK first. We need to define them in any case if they are -# not in headers, to handle dual mode sockets correctly. -CHECK_SYMBOL_EXISTS(IPPROTO_IPV6 "winsock2.h" HAVE_IPPROTO_IPV6) -IF(NOT HAVE_IPPROTO_IPV6) - SET(HAVE_IPPROTO_IPV6 41) -ENDIF() -CHECK_SYMBOL_EXISTS(IPV6_V6ONLY "winsock2.h;ws2ipdef.h" HAVE_IPV6_V6ONLY) -IF(NOT HAVE_IPV6_V6ONLY) - SET(IPV6_V6ONLY 27) -ENDIF() - -# Some standard functions exist there under different -# names (e.g popen is _popen or strok_r is _strtok_s) -# If a replacement function exists, HAVE_FUNCTION is -# defined to 1. CMake variable will also -# be defined to the replacement name. -# So for example, CHECK_FUNCTION_REPLACEMENT(popen _popen) -# will define HAVE_POPEN to 1 and set variable named popen -# to _popen. If the header template, one needs to have -# cmakedefine popen @popen@ which will expand to -# define popen _popen after CONFIGURE_FILE - -MACRO(CHECK_FUNCTION_REPLACEMENT function replacement) - STRING(TOUPPER ${function} function_upper) - CHECK_FUNCTION_EXISTS(${function} HAVE_${function_upper}) - IF(NOT HAVE_${function_upper}) - CHECK_FUNCTION_EXISTS(${replacement} HAVE_${replacement}) - IF(HAVE_${replacement}) - SET(HAVE_${function_upper} 1 ) - SET(${function} ${replacement}) - ENDIF() - ENDIF() -ENDMACRO() -MACRO(CHECK_SYMBOL_REPLACEMENT symbol replacement header) - STRING(TOUPPER ${symbol} symbol_upper) - CHECK_SYMBOL_EXISTS(${symbol} ${header} HAVE_${symbol_upper}) - IF(NOT HAVE_${symbol_upper}) - CHECK_SYMBOL_EXISTS(${replacement} ${header} HAVE_${replacement}) - IF(HAVE_${replacement}) - SET(HAVE_${symbol_upper} 1) - SET(${symbol} ${replacement}) - ENDIF() - ENDIF() -ENDMACRO() - -CHECK_SYMBOL_REPLACEMENT(S_IROTH _S_IREAD sys/stat.h) -CHECK_SYMBOL_REPLACEMENT(S_IFIFO _S_IFIFO sys/stat.h) -CHECK_SYMBOL_REPLACEMENT(SIGQUIT SIGTERM signal.h) -CHECK_SYMBOL_REPLACEMENT(SIGPIPE SIGINT signal.h) -CHECK_SYMBOL_REPLACEMENT(isnan _isnan float.h) -CHECK_SYMBOL_REPLACEMENT(finite _finite float.h) -CHECK_FUNCTION_REPLACEMENT(popen _popen) -CHECK_FUNCTION_REPLACEMENT(pclose _pclose) -CHECK_FUNCTION_REPLACEMENT(access _access) -CHECK_FUNCTION_REPLACEMENT(strcasecmp _stricmp) -CHECK_FUNCTION_REPLACEMENT(strncasecmp _strnicmp) -CHECK_FUNCTION_REPLACEMENT(snprintf _snprintf) -CHECK_FUNCTION_REPLACEMENT(strtok_r strtok_s) -CHECK_FUNCTION_REPLACEMENT(strtoll _strtoi64) -CHECK_FUNCTION_REPLACEMENT(strtoull _strtoui64) -CHECK_FUNCTION_REPLACEMENT(vsnprintf _vsnprintf) -CHECK_TYPE_SIZE(ssize_t SIZE_OF_SSIZE_T) -IF(NOT HAVE_SIZE_OF_SSIZE_T) - SET(ssize_t SSIZE_T) -ENDIF() - -SET(FN_NO_CASE_SENSE 1) diff --git a/deps/mysqllite/cmake/os/WindowsCache.cmake b/deps/mysqllite/cmake/os/WindowsCache.cmake deleted file mode 100644 index ff068bfeaf6175..00000000000000 --- a/deps/mysqllite/cmake/os/WindowsCache.cmake +++ /dev/null @@ -1,356 +0,0 @@ -# Copyright (C) 2010 Sun Microsystems, Inc -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -# Avoid system checks on Windows by pre-caching results. Most of the system checks -# are not relevant for Windows anyway and it takes lot more time to run them, -# since CMake to creates a Visual Studio project for each tiny test. -# Note that only we cache values on VC++ only, MinGW would give slightly -# different results. - -IF(MSVC) -SET(HAVE_ACCESS 1 CACHE INTERNAL "") -SET(HAVE_AIO_H CACHE INTERNAL "") -SET(HAVE_AIO_READ CACHE INTERNAL "") -SET(HAVE_ALARM CACHE INTERNAL "") -SET(HAVE_ALLOCA_H CACHE INTERNAL "") -SET(HAVE_ARPA_INET_H CACHE INTERNAL "") -SET(HAVE_ASM_MSR_H CACHE INTERNAL "") -SET(HAVE_BACKTRACE CACHE INTERNAL "") -SET(HAVE_BACKTRACE_SYMBOLS CACHE INTERNAL "") -SET(HAVE_BACKTRACE_SYMBOLS_FD CACHE INTERNAL "") -SET(HAVE_BFILL CACHE INTERNAL "") -SET(HAVE_BMOVE CACHE INTERNAL "") -SET(HAVE_BSD_SIGNALS CACHE INTERNAL "") -SET(HAVE_BSEARCH 1 CACHE INTERNAL "") -SET(HAVE_BSS_START CACHE INTERNAL "") -SET(HAVE_BZERO CACHE INTERNAL "") -SET(HAVE_CHOWN CACHE INTERNAL "") -SET(HAVE_CLOCK_GETTIME CACHE INTERNAL "") -SET(HAVE_COMPRESS CACHE INTERNAL "") -SET(HAVE_CRYPT CACHE INTERNAL "") -SET(HAVE_CRYPT_H CACHE INTERNAL "") -SET(HAVE_CUSERID CACHE INTERNAL "") -SET(HAVE_CXX_NEW 1 CACHE INTERNAL "") -SET(HAVE_DECL_MADVISE CACHE INTERNAL "") -SET(HAVE_DIRECTIO CACHE INTERNAL "") -SET(HAVE_DIRENT_H CACHE INTERNAL "") -SET(HAVE_DLERROR CACHE INTERNAL "") -SET(HAVE_DLFCN_H CACHE INTERNAL "") -SET(HAVE_DLOPEN CACHE INTERNAL "") -SET(HAVE_DOPRNT CACHE INTERNAL "") -SET(HAVE_EXECINFO_H CACHE INTERNAL "") -SET(HAVE_FCHMOD CACHE INTERNAL "") -SET(HAVE_FCNTL CACHE INTERNAL "") -SET(HAVE_FCNTL_H 1 CACHE INTERNAL "") -SET(HAVE_FCNTL_NONBLOCK CACHE INTERNAL "") -SET(HAVE_FCONVERT CACHE INTERNAL "") -SET(HAVE_FDATASYNC CACHE INTERNAL "") -SET(HAVE_DECL_FDATASYNC CACHE INTERNAL "") -SET(HAVE_FENV_H CACHE INTERNAL "") -SET(HAVE_FESETROUND CACHE INTERNAL "") -SET(HAVE_FGETLN CACHE INTERNAL "") -SET(HAVE_FINITE CACHE INTERNAL "") -SET(HAVE_FINITE_IN_MATH_H CACHE INTERNAL "") -SET(HAVE_FLOATINGPOINT_H CACHE INTERNAL "") -SET(HAVE_FLOAT_H 1 CACHE INTERNAL "") -SET(HAVE_FLOCKFILE CACHE INTERNAL "") -SET(HAVE_FNMATCH_H CACHE INTERNAL "") -SET(HAVE_FPSETMASK CACHE INTERNAL "") -SET(HAVE_FPU_CONTROL_H CACHE INTERNAL "") -SET(HAVE_FSEEKO CACHE INTERNAL "") -SET(HAVE_FSYNC CACHE INTERNAL "") -SET(HAVE_FTIME 1 CACHE INTERNAL "") -SET(HAVE_FTRUNCATE CACHE INTERNAL "") -SET(HAVE_GETADDRINFO 1 CACHE INTERNAL "") -SET(HAVE_GETCWD 1 CACHE INTERNAL "") -SET(HAVE_GETHOSTBYADDR_R CACHE INTERNAL "") -SET(HAVE_GETHOSTBYNAME_R CACHE INTERNAL "") -SET(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE CACHE INTERNAL "") -SET(HAVE_GETHOSTBYNAME_R_RETURN_INT CACHE INTERNAL "") -SET(HAVE_GETHRTIME CACHE INTERNAL "") -SET(HAVE_GETLINE CACHE INTERNAL "") -SET(HAVE_GETNAMEINFO CACHE INTERNAL "") -SET(HAVE_GETPAGESIZE CACHE INTERNAL "") -SET(HAVE_GETPASS CACHE INTERNAL "") -SET(HAVE_GETPASSPHRASE CACHE INTERNAL "") -SET(HAVE_GETPWNAM CACHE INTERNAL "") -SET(HAVE_GETPWUID CACHE INTERNAL "") -SET(HAVE_GETRLIMIT CACHE INTERNAL "") -SET(HAVE_GETRUSAGE CACHE INTERNAL "") -SET(HAVE_GETTIMEOFDAY CACHE INTERNAL "") -SET(HAVE_GETWD CACHE INTERNAL "") -SET(HAVE_GMTIME_R CACHE INTERNAL "") -SET(HAVE_GRP_H CACHE INTERNAL "") -SET(HAVE_IA64INTRIN_H CACHE INTERNAL "") -SET(HAVE_IEEEFP_H CACHE INTERNAL "") -SET(HAVE_INDEX CACHE INTERNAL "") -SET(HAVE_INITGROUPS CACHE INTERNAL "") -SET(HAVE_INTTYPES_H CACHE INTERNAL "") -SET(HAVE_IPPROTO_IPV6 CACHE INTERNAL "") -SET(HAVE_IPV6 TRUE CACHE INTERNAL "") -SET(HAVE_IPV6_V6ONLY 1 CACHE INTERNAL "") -SET(HAVE_ISINF CACHE INTERNAL "") -SET(HAVE_ISNAN CACHE INTERNAL "") -SET(HAVE_ISSETUGID CACHE INTERNAL "") -SET(HAVE_LANGINFO_H CACHE INTERNAL "") -SET(HAVE_LDIV 1 CACHE INTERNAL "") -SET(HAVE_LIMITS_H 1 CACHE INTERNAL "") -SET(HAVE_LOCALE_H 1 CACHE INTERNAL "") -SET(HAVE_LOCALTIME_R CACHE INTERNAL "") -SET(HAVE_LOG2 CACHE INTERNAL "") -SET(HAVE_LONGJMP 1 CACHE INTERNAL "") -SET(HAVE_LRAND48 CACHE INTERNAL "") -SET(HAVE_LSTAT CACHE INTERNAL "") -SET(HAVE_MADVISE CACHE INTERNAL "") -SET(HAVE_MALLINFO CACHE INTERNAL "") -SET(HAVE_MALLOC_H 1 CACHE INTERNAL "") -SET(HAVE_MEMALIGN CACHE INTERNAL "") -SET(HAVE_MEMCPY 1 CACHE INTERNAL "") -SET(HAVE_MEMMOVE 1 CACHE INTERNAL "") -SET(HAVE_MEMORY_H 1 CACHE INTERNAL "") -SET(HAVE_MKSTEMP CACHE INTERNAL "") -SET(HAVE_MLOCK CACHE INTERNAL "") -SET(HAVE_MLOCKALL CACHE INTERNAL "") -SET(HAVE_MMAP CACHE INTERNAL "") -SET(HAVE_MMAP64 CACHE INTERNAL "") -SET(HAVE_NETINET_IN6_H CACHE INTERNAL "") -SET(HAVE_NETINET_IN_H CACHE INTERNAL "") -SET(HAVE_NL_LANGINFO CACHE INTERNAL "") -SET(HAVE_PASE_ENVIRONMENT CACHE INTERNAL "") -SET(HAVE_PATHS_H CACHE INTERNAL "") -SET(HAVE_PCLOSE CACHE INTERNAL "") -SET(HAVE_PERROR 1 CACHE INTERNAL "") -SET(HAVE_PEERCRED CACHE INTERNAL "") -SET(HAVE_POLL_H CACHE INTERNAL "") -SET(HAVE_POPEN CACHE INTERNAL "") -SET(HAVE_POLL CACHE INTERNAL "") -SET(HAVE_PORT_CREATE CACHE INTERNAL "") -SET(HAVE_PORT_H CACHE INTERNAL "") -SET(HAVE_POSIX_FALLOCATE CACHE INTERNAL "") -SET(HAVE_POSIX_SIGNALS CACHE INTERNAL "") -SET(HAVE_PREAD CACHE INTERNAL "") -SET(HAVE_PRINTSTACK CACHE INTERNAL "") -SET(HAVE_PTHREAD_ATTR_CREATE CACHE INTERNAL "") -SET(HAVE_PTHREAD_ATTR_GETSTACKSIZE CACHE INTERNAL "") -SET(HAVE_PTHREAD_ATTR_SETSCOPE CACHE INTERNAL "") -SET(HAVE_PTHREAD_ATTR_SETSTACKSIZE CACHE INTERNAL "") -SET(HAVE_PTHREAD_CONDATTR_CREATE CACHE INTERNAL "") -SET(HAVE_PTHREAD_CONDATTR_SETCLOCK CACHE INTERNAL "") -SET(HAVE_PTHREAD_INIT CACHE INTERNAL "") -SET(HAVE_PTHREAD_KEY_DELETE CACHE INTERNAL "") -SET(HAVE_PTHREAD_RWLOCK_RDLOCK CACHE INTERNAL "") -SET(HAVE_PTHREAD_SIGMASK CACHE INTERNAL "") -SET(HAVE_PTHREAD_THREADMASK CACHE INTERNAL "") -SET(HAVE_PTHREAD_YIELD_NP CACHE INTERNAL "") -SET(HAVE_PTHREAD_YIELD_ZERO_ARG CACHE INTERNAL "") -SET(HAVE_PUTENV 1 CACHE INTERNAL "") -SET(HAVE_PWD_H CACHE INTERNAL "") -SET(HAVE_RDTSCLL CACHE INTERNAL "") -SET(HAVE_READDIR_R CACHE INTERNAL "") -SET(HAVE_READLINK CACHE INTERNAL "") -SET(HAVE_READ_REAL_TIME CACHE INTERNAL "") -SET(HAVE_REALPATH CACHE INTERNAL "") -SET(HAVE_REGCOMP CACHE INTERNAL "") -SET(HAVE_RENAME 1 CACHE INTERNAL "") -SET(HAVE_RE_COMP CACHE INTERNAL "") -SET(HAVE_RINT CACHE INTERNAL "") -SET(HAVE_RWLOCK_INIT CACHE INTERNAL "") -SET(HAVE_SCHED_H CACHE INTERNAL "") -SET(HAVE_SCHED_YIELD CACHE INTERNAL "") -SET(HAVE_SELECT 1 CACHE INTERNAL "") -SET(HAVE_SELECT_H CACHE INTERNAL "") -SET(HAVE_SEMAPHORE_H CACHE INTERNAL "") -SET(HAVE_SETENV CACHE INTERNAL "") -SET(HAVE_SETFD CACHE INTERNAL "") -SET(HAVE_SETLOCALE 1 CACHE INTERNAL "") -SET(HAVE_SHMAT CACHE INTERNAL "") -SET(HAVE_SHMCTL CACHE INTERNAL "") -SET(HAVE_SHMDT CACHE INTERNAL "") -SET(HAVE_SHMGET CACHE INTERNAL "") -SET(HAVE_SIGACTION CACHE INTERNAL "") -SET(HAVE_SIGADDSET CACHE INTERNAL "") -SET(HAVE_SIGEMPTYSET CACHE INTERNAL "") -SET(HAVE_SIGHOLD CACHE INTERNAL "") -SET(HAVE_SIGINT 1 CACHE INTERNAL "") -SET(HAVE_SIGPIPE CACHE INTERNAL "") -SET(HAVE_SIGQUIT CACHE INTERNAL "") -SET(HAVE_SIGSET CACHE INTERNAL "") -SET(HAVE_SIGTERM 1 CACHE INTERNAL "") -SET(HAVE_SIGTHREADMASK CACHE INTERNAL "") -SET(HAVE_SIGWAIT CACHE INTERNAL "") -SET(HAVE_SIZEOF_BOOL FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_CHAR TRUE CACHE INTERNAL "") -SET(SIZEOF_CHAR 1 CACHE INTERNAL "") -SET(HAVE_SIZEOF_CHARP TRUE CACHE INTERNAL "") -SET(SIZEOF_CHARP ${CMAKE_SIZEOF_VOID_P} CACHE INTERNAL "") -SET(HAVE_SIZEOF_IN6_ADDR TRUE CACHE INTERNAL "") -SET(HAVE_SIZEOF_INT TRUE CACHE INTERNAL "") -SET(SIZEOF_INT 4 CACHE INTERNAL "") -SET(HAVE_SIZEOF_INT16 FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_INT32 FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_INT64 FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_INT8 FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_LONG TRUE CACHE INTERNAL "") -SET(SIZEOF_LONG 4 CACHE INTERNAL "") -SET(HAVE_SIZEOF_LONG_LONG TRUE CACHE INTERNAL "") -SET(SIZEOF_LONG_LONG 8 CACHE INTERNAL "") -SET(HAVE_SIZEOF_MODE_T FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_OFF_T TRUE CACHE INTERNAL "") -SET(SIZEOF_OFF_T 4 CACHE INTERNAL "") -SET(HAVE_SIZEOF_SHORT TRUE CACHE INTERNAL "") -SET(SIZEOF_SHORT 2 CACHE INTERNAL "") -SET(HAVE_SIZEOF_SIGSET_T FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_SIZE_T TRUE CACHE INTERNAL "") -SET(SIZEOF_SIZE_T ${CMAKE_SIZEOF_VOID_P} CACHE INTERNAL "") -SET(HAVE_SIZEOF_SOCKADDR_IN6 TRUE CACHE INTERNAL "") -SET(HAVE_SIZEOF_SOCKLEN_T FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_UCHAR FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_UINT FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_UINT16 FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_UINT32 FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_UINT64 FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_UINT8 FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_ULONG FALSE CACHE INTERNAL "") -SET(HAVE_SIZEOF_U_INT32_T FALSE CACHE INTERNAL "") -SET(HAVE_SIZE_OF_SSIZE_T FALSE CACHE INTERNAL "") -SET(HAVE_SLEEP CACHE INTERNAL "") -SET(HAVE_SNPRINTF CACHE INTERNAL "") -SET(HAVE_SOCKADDR_STORAGE_SS_FAMILY 1 CACHE INTERNAL "") -SET(HAVE_SOLARIS_STYLE_GETHOST CACHE INTERNAL "") -SET(STACK_DIRECTION -1 CACHE INTERNAL "") -SET(HAVE_STDARG_H 1 CACHE INTERNAL "") -SET(HAVE_STDDEF_H 1 CACHE INTERNAL "") -SET(HAVE_STDINT_H CACHE INTERNAL "") -SET(HAVE_STDLIB_H 1 CACHE INTERNAL "") -SET(HAVE_STPCPY CACHE INTERNAL "") -SET(HAVE_STRCASECMP CACHE INTERNAL "") -SET(HAVE_STRCOLL 1 CACHE INTERNAL "") -SET(HAVE_STRDUP 1 CACHE INTERNAL "") -SET(HAVE_STRERROR 1 CACHE INTERNAL "") -SET(HAVE_STRINGS_H CACHE INTERNAL "") -SET(HAVE_STRING_H 1 CACHE INTERNAL "") -SET(HAVE_STRLCAT CACHE INTERNAL "") -SET(HAVE_STRLCPY CACHE INTERNAL "") -SET(HAVE_STRNCASECMP CACHE INTERNAL "") -IF(MSVC_VERSION GREATER 1310) -SET(HAVE_STRNLEN 1 CACHE INTERNAL "") -ENDIF() -SET(HAVE_STRPBRK 1 CACHE INTERNAL "") -SET(HAVE_STRSEP CACHE INTERNAL "") -SET(HAVE_STRSIGNAL CACHE INTERNAL "") -SET(HAVE_STRSTR 1 CACHE INTERNAL "") -SET(HAVE_STRTOK_R CACHE INTERNAL "") -SET(HAVE_STRTOL 1 CACHE INTERNAL "") -SET(HAVE_STRTOLL CACHE INTERNAL "") -SET(HAVE_STRTOUL 1 CACHE INTERNAL "") -SET(HAVE_STRTOULL CACHE INTERNAL "") -SET(HAVE_SVR3_SIGNALS CACHE INTERNAL "") -SET(HAVE_SYNCH_H CACHE INTERNAL "") -SET(HAVE_SYSENT_H CACHE INTERNAL "") -SET(HAVE_SYS_CDEFS_H CACHE INTERNAL "") -SET(HAVE_SYS_DIR_H CACHE INTERNAL "") -SET(HAVE_SYS_ERRLIST CACHE INTERNAL "") -SET(HAVE_SYS_FILE_H CACHE INTERNAL "") -SET(HAVE_SYS_FPU_H CACHE INTERNAL "") -SET(HAVE_SYS_IOCTL_H CACHE INTERNAL "") -SET(HAVE_SYS_IPC_H CACHE INTERNAL "") -SET(HAVE_SYS_MALLOC_H CACHE INTERNAL "") -SET(HAVE_SYS_MMAN_H CACHE INTERNAL "") -SET(HAVE_SYS_PARAM_H CACHE INTERNAL "") -SET(HAVE_SYS_PRCTL_H CACHE INTERNAL "") -SET(HAVE_SYS_PTEM_H CACHE INTERNAL "") -SET(HAVE_SYS_PTE_H CACHE INTERNAL "") -SET(HAVE_SYS_RESOURCE_H CACHE INTERNAL "") -SET(HAVE_SYS_SELECT_H CACHE INTERNAL "") -SET(HAVE_SYS_SHM_H CACHE INTERNAL "") -SET(HAVE_SYS_SOCKET_H CACHE INTERNAL "") -SET(HAVE_SYS_STAT_H 1 CACHE INTERNAL "") -SET(HAVE_SYS_STREAM_H CACHE INTERNAL "") -SET(HAVE_SYS_TERMCAP_H CACHE INTERNAL "") -SET(HAVE_SYS_TIMEB_H 1 CACHE INTERNAL "") -SET(HAVE_SYS_TIMES_H CACHE INTERNAL "") -SET(HAVE_SYS_TIME_H CACHE INTERNAL "") -SET(HAVE_SYS_TYPES_H 1 CACHE INTERNAL "") -SET(HAVE_SYS_UN_H CACHE INTERNAL "") -SET(HAVE_SYS_UTIME_H 1 CACHE INTERNAL "") -SET(HAVE_SYS_VADVISE_H CACHE INTERNAL "") -SET(HAVE_SYS_WAIT_H CACHE INTERNAL "") -SET(HAVE_TCGETATTR CACHE INTERNAL "") -SET(HAVE_TELL 1 CACHE INTERNAL "") -SET(HAVE_TEMPNAM 1 CACHE INTERNAL "") -SET(HAVE_TERMCAP_H CACHE INTERNAL "") -SET(HAVE_TERMIOS_H CACHE INTERNAL "") -SET(HAVE_TERMIO_H CACHE INTERNAL "") -SET(HAVE_TERM_H CACHE INTERNAL "") -SET(HAVE_THR_SETCONCURRENCY CACHE INTERNAL "") -SET(HAVE_THR_YIELD CACHE INTERNAL "") -SET(HAVE_TIME 1 CACHE INTERNAL "") -SET(HAVE_TIMES CACHE INTERNAL "") -SET(HAVE_TIMESPEC_TS_SEC CACHE INTERNAL "") -SET(HAVE_TIME_H 1 CACHE INTERNAL "") -SET(HAVE_TZNAME 1 CACHE INTERNAL "") -SET(HAVE_UNISTD_H CACHE INTERNAL "") -SET(HAVE_UTIME_H CACHE INTERNAL "") -SET(HAVE_VALLOC CACHE INTERNAL "") -SET(HAVE_VARARGS_H 1 CACHE INTERNAL "") -SET(HAVE_VASPRINTF CACHE INTERNAL "") -SET(HAVE_VPRINTF 1 CACHE INTERNAL "") -IF(MSVC_VERSION GREATER 1310) -SET(HAVE_VSNPRINTF 1 CACHE INTERNAL "") -ENDIF() -SET(HAVE_WEAK_SYMBOL CACHE INTERNAL "") -SET(HAVE_WORDS_BIGENDIAN TRUE CACHE INTERNAL "") -SET(WORDS_BIGENDIAN CACHE INTERNAL "") -SET(HAVE__S_IFIFO 1 CACHE INTERNAL "") -SET(HAVE__S_IREAD 1 CACHE INTERNAL "") -SET(HAVE__finite 1 CACHE INTERNAL "") -SET(HAVE__isnan 1 CACHE INTERNAL "") -SET(HAVE__pclose 1 CACHE INTERNAL "") -SET(HAVE__popen 1 CACHE INTERNAL "") -SET(HAVE__snprintf 1 CACHE INTERNAL "") -SET(HAVE__stricmp 1 CACHE INTERNAL "") -SET(HAVE__strnicmp 1 CACHE INTERNAL "") -SET(HAVE__strtoi64 1 CACHE INTERNAL "") -SET(HAVE__strtoui64 1 CACHE INTERNAL "") -IF(MSVC_VERSION GREATER 1310) - SET(HAVE_strtok_s 1 CACHE INTERNAL "") -ENDIF() -SET(STDC_HEADERS CACHE 1 INTERNAL "") -SET(STRUCT_DIRENT_HAS_D_INO CACHE INTERNAL "") -SET(STRUCT_DIRENT_HAS_D_INO CACHE INTERNAL "") -SET(STRUCT_DIRENT_HAS_D_NAMLEN CACHE INTERNAL "") -SET(TIME_WITH_SYS_TIME CACHE INTERNAL "") -SET(TIOCSTAT_IN_SYS_IOCTL CACHE INTERNAL "") -SET(HAVE_S_IROTH CACHE INTERNAL "") -SET(HAVE_S_IFIFO CACHE INTERNAL "") -SET(QSORT_TYPE_IS_VOID 1 CACHE INTERNAL "") -SET(SIGNAL_RETURN_TYPE_IS_VOID 1 CACHE INTERNAL "") -SET(C_HAS_inline CACHE INTERNAL "") -SET(C_HAS___inline 1 CACHE INTERNAL "") -SET(FIONREAD_IN_SYS_IOCTL CACHE INTERNAL "") -SET(GWINSZ_IN_SYS_IOCTL CACHE INTERNAL "") -SET(HAVE_CXXABI_H CACHE INTERNAL "") -SET(HAVE_NDIR_H CACHE INTERNAL "") -SET(HAVE_SYS_NDIR_H CACHE INTERNAL "") -SET(HAVE_SYS_NDIR_H CACHE INTERNAL "") -SET(HAVE_ASM_TERMBITS_H CACHE INTERNAL "") -SET(HAVE_TERMBITS_H CACHE INTERNAL "") -SET(HAVE_VIS_H CACHE INTERNAL "") -SET(HAVE_WCHAR_H 1 CACHE INTERNAL "") -SET(HAVE_WCTYPE_H 1 CACHE INTERNAL "") -SET(HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP CACHE INTERNAL "") -SET(HAVE_SOCKADDR_IN_SIN_LEN CACHE INTERNAL "") -SET(HAVE_SOCKADDR_IN6_SIN6_LEN CACHE INTERNAL "") -ENDIF() diff --git a/deps/mysqllite/cmake/stack_direction.c b/deps/mysqllite/cmake/stack_direction.c deleted file mode 100644 index 11bcf803bfa0f5..00000000000000 --- a/deps/mysqllite/cmake/stack_direction.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - -/* Check stack direction (0-down, 1-up) */ -int f(int *a) -{ - int b; - return(&b > a)?1:0; -} -/* - Prevent compiler optimizations by calling function - through pointer. -*/ -volatile int (*ptr_f)(int *) = f; -int main() -{ - int a; - return ptr_f(&a); -} \ No newline at end of file diff --git a/deps/mysqllite/cmake/versioninfo.rc.in b/deps/mysqllite/cmake/versioninfo.rc.in deleted file mode 100644 index 11cedc38a39b1c..00000000000000 --- a/deps/mysqllite/cmake/versioninfo.rc.in +++ /dev/null @@ -1,23 +0,0 @@ -#include -VS_VERSION_INFO VERSIONINFO -FILEVERSION @MAJOR_VERSION@,@MINOR_VERSION@,@PATCH_VERSION@,0 -PRODUCTVERSION @MAJOR_VERSION@,@MINOR_VERSION@,@PATCH_VERSION@,0 -FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -FILEFLAGS 0 -FILEOS VOS__WINDOWS32 -FILETYPE @FILETYPE@ -FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904E4" - BEGIN - VALUE "FileVersion", "@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_VERSION@.0\0" - VALUE "ProductVersion", "@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_VERSION@.0\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1252 - END -END diff --git a/deps/mysqllite/config.h.cmake b/deps/mysqllite/config.h.cmake deleted file mode 100644 index 204e10324101b0..00000000000000 --- a/deps/mysqllite/config.h.cmake +++ /dev/null @@ -1,618 +0,0 @@ -/* Copyright (C) 2009, 2011, Oracle and/or its affiliates. All rights - reserved - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - -#ifndef MY_CONFIG_H -#define MY_CONFIG_H -#cmakedefine DOT_FRM_VERSION @DOT_FRM_VERSION@ -/* Headers we may want to use. */ -#cmakedefine STDC_HEADERS 1 -#cmakedefine _GNU_SOURCE 1 -#cmakedefine HAVE_ALLOCA_H 1 -#cmakedefine HAVE_AIO_H 1 -#cmakedefine HAVE_ARPA_INET_H 1 -#cmakedefine HAVE_ASM_MSR_H 1 -#cmakedefine HAVE_ASM_TERMBITS_H 1 -#cmakedefine HAVE_BSEARCH 1 -#cmakedefine HAVE_CRYPT_H 1 -#cmakedefine HAVE_CURSES_H 1 -#cmakedefine HAVE_CXXABI_H 1 -#cmakedefine HAVE_NCURSES_H 1 -#cmakedefine HAVE_NDIR_H 1 -#cmakedefine HAVE_DIRENT_H 1 -#cmakedefine HAVE_DLFCN_H 1 -#cmakedefine HAVE_EXECINFO_H 1 -#cmakedefine HAVE_FCNTL_H 1 -#cmakedefine HAVE_FENV_H 1 -#cmakedefine HAVE_FLOAT_H 1 -#cmakedefine HAVE_FLOATINGPOINT_H 1 -#cmakedefine HAVE_FNMATCH_H 1 -#cmakedefine HAVE_FPU_CONTROL_H 1 -#cmakedefine HAVE_GRP_H 1 -#cmakedefine HAVE_EXPLICIT_TEMPLATE_INSTANTIATION 1 -#cmakedefine HAVE_IA64INTRIN_H 1 -#cmakedefine HAVE_IEEEFP_H 1 -#cmakedefine HAVE_INTTYPES_H 1 -#cmakedefine HAVE_LIMITS_H 1 -#cmakedefine HAVE_LOCALE_H 1 -#cmakedefine HAVE_MALLOC_H 1 -#cmakedefine HAVE_MEMORY_H 1 -#cmakedefine HAVE_NETINET_IN_H 1 -#cmakedefine HAVE_PATHS_H 1 -#cmakedefine HAVE_POLL_H 1 -#cmakedefine HAVE_PORT_H 1 -#cmakedefine HAVE_PWD_H 1 -#cmakedefine HAVE_SCHED_H 1 -#cmakedefine HAVE_SELECT_H 1 -#cmakedefine HAVE_SOLARIS_LARGE_PAGES 1 -#cmakedefine HAVE_STDDEF_H 1 -#cmakedefine HAVE_STDLIB_H 1 -#cmakedefine HAVE_STDARG_H 1 -#cmakedefine HAVE_STRINGS_H 1 -#cmakedefine HAVE_STRING_H 1 -#cmakedefine HAVE_STDINT_H 1 -#cmakedefine HAVE_SEMAPHORE_H 1 -#cmakedefine HAVE_SYNCH_H 1 -#cmakedefine HAVE_SYSENT_H 1 -#cmakedefine HAVE_SYS_DIR_H 1 -#cmakedefine HAVE_SYS_CDEFS_H 1 -#cmakedefine HAVE_SYS_FILE_H 1 -#cmakedefine HAVE_SYS_FPU_H 1 -#cmakedefine HAVE_SYS_IOCTL_H 1 -#cmakedefine HAVE_SYS_IPC_H 1 -#cmakedefine HAVE_SYS_MALLOC_H 1 -#cmakedefine HAVE_SYS_MMAN_H 1 -#cmakedefine HAVE_SYS_NDIR_H 1 -#cmakedefine HAVE_SYS_PTE_H 1 -#cmakedefine HAVE_SYS_PTEM_H 1 -#cmakedefine HAVE_SYS_PRCTL_H 1 -#cmakedefine HAVE_SYS_RESOURCE_H 1 -#cmakedefine HAVE_SYS_SELECT_H 1 -#cmakedefine HAVE_SYS_SHM_H 1 -#cmakedefine HAVE_SYS_SOCKET_H 1 -#cmakedefine HAVE_SYS_STAT_H 1 -#cmakedefine HAVE_SYS_STREAM_H 1 -#cmakedefine HAVE_SYS_TERMCAP_H 1 -#cmakedefine HAVE_SYS_TIMEB_H 1 -#cmakedefine HAVE_SYS_TIMES_H 1 -#cmakedefine HAVE_SYS_TIME_H 1 -#cmakedefine HAVE_SYS_TYPES_H 1 -#cmakedefine HAVE_SYS_UN_H 1 -#cmakedefine HAVE_SYS_VADVISE_H 1 -#cmakedefine HAVE_TERM_H 1 -#cmakedefine HAVE_TERMBITS_H 1 -#cmakedefine HAVE_TERMIOS_H 1 -#cmakedefine HAVE_TERMIO_H 1 -#cmakedefine HAVE_TERMCAP_H 1 -#cmakedefine HAVE_TIME_H 1 -#cmakedefine HAVE_UNISTD_H 1 -#cmakedefine HAVE_UTIME_H 1 -#cmakedefine HAVE_VARARGS_H 1 -#cmakedefine HAVE_VIS_H 1 -#cmakedefine HAVE_SYS_UTIME_H 1 -#cmakedefine HAVE_SYS_WAIT_H 1 -#cmakedefine HAVE_SYS_PARAM_H 1 - -/* Libraries */ -#cmakedefine HAVE_LIBPTHREAD 1 -#cmakedefine HAVE_LIBM 1 -#cmakedefine HAVE_LIBDL 1 -#cmakedefine HAVE_LIBRT 1 -#cmakedefine HAVE_LIBSOCKET 1 -#cmakedefine HAVE_LIBNSL 1 -#cmakedefine HAVE_LIBCRYPT 1 -#cmakedefine HAVE_LIBMTMALLOC 1 -#cmakedefine HAVE_LIBWRAP 1 -/* Does "struct timespec" have a "sec" and "nsec" field? */ -#cmakedefine HAVE_TIMESPEC_TS_SEC 1 - -/* Readline */ -#cmakedefine HAVE_HIST_ENTRY 1 -#cmakedefine USE_LIBEDIT_INTERFACE 1 -#cmakedefine USE_NEW_READLINE_INTERFACE 1 - -#cmakedefine FIONREAD_IN_SYS_IOCTL 1 -#cmakedefine GWINSZ_IN_SYS_IOCTL 1 -#cmakedefine TIOCSTAT_IN_SYS_IOCTL 1 - -/* Functions we may want to use. */ -#cmakedefine HAVE_AIOWAIT 1 -#cmakedefine HAVE_ALARM 1 -#cmakedefine HAVE_ALLOCA 1 -#cmakedefine HAVE_BFILL 1 -#cmakedefine HAVE_BMOVE 1 -#cmakedefine HAVE_BZERO 1 -#cmakedefine HAVE_INDEX 1 -#cmakedefine HAVE_CHOWN 1 -#cmakedefine HAVE_CLOCK_GETTIME 1 -#cmakedefine HAVE_CRYPT 1 -#cmakedefine HAVE_CUSERID 1 -#cmakedefine HAVE_CXX_NEW 1 -#cmakedefine HAVE_DIRECTIO 1 -#cmakedefine HAVE_DLERROR 1 -#cmakedefine HAVE_DLOPEN 1 -#cmakedefine HAVE_DOPRNT 1 -#cmakedefine HAVE_FCHMOD 1 -#cmakedefine HAVE_FCNTL 1 -#cmakedefine HAVE_FCONVERT 1 -#cmakedefine HAVE_FDATASYNC 1 -#cmakedefine HAVE_FESETROUND 1 -#cmakedefine HAVE_FINITE 1 -#cmakedefine HAVE_FP_EXCEPT 1 -#cmakedefine HAVE_FPSETMASK 1 -#cmakedefine HAVE_FSEEKO 1 -#cmakedefine HAVE_FSYNC 1 -#cmakedefine HAVE_FTIME 1 -#cmakedefine HAVE_GETADDRINFO 1 -#cmakedefine HAVE_GETCWD 1 -#cmakedefine HAVE_GETHOSTBYADDR_R 1 -#cmakedefine HAVE_GETHOSTBYNAME_R 1 -#cmakedefine HAVE_GETHRTIME 1 -#cmakedefine HAVE_GETLINE 1 -#cmakedefine HAVE_GETNAMEINFO 1 -#cmakedefine HAVE_GETPAGESIZE 1 -#cmakedefine HAVE_GETPASS 1 -#cmakedefine HAVE_GETPASSPHRASE 1 -#cmakedefine HAVE_GETPWNAM 1 -#cmakedefine HAVE_GETPWUID 1 -#cmakedefine HAVE_GETRLIMIT 1 -#cmakedefine HAVE_GETRUSAGE 1 -#cmakedefine HAVE_GETTIMEOFDAY 1 -#cmakedefine HAVE_GETWD 1 -#cmakedefine HAVE_GMTIME_R 1 -#cmakedefine gmtime_r @gmtime_r@ -#cmakedefine HAVE_INITGROUPS 1 -#cmakedefine HAVE_ISSETUGID 1 -#cmakedefine HAVE_ISNAN 1 -#cmakedefine HAVE_ISINF 1 -#cmakedefine HAVE_LARGE_PAGE_OPTION 1 -#cmakedefine HAVE_LDIV 1 -#cmakedefine HAVE_LRAND48 1 -#cmakedefine HAVE_LOCALTIME_R 1 -#cmakedefine HAVE_LOG2 1 -#cmakedefine HAVE_LONGJMP 1 -#cmakedefine HAVE_LSTAT 1 -#cmakedefine HAVE_MEMALIGN 1 -/* #cmakedefine HAVE_MLOCK 1 see Bug#54662 */ -#cmakedefine HAVE_NPTL 1 -#cmakedefine HAVE_NL_LANGINFO 1 -#cmakedefine HAVE_MADVISE 1 -#cmakedefine HAVE_DECL_MADVISE 1 -#cmakedefine HAVE_DECL_TGOTO 1 -#cmakedefine HAVE_DECL_MHA_MAPSIZE_VA -#cmakedefine HAVE_MALLINFO 1 -#cmakedefine HAVE_MEMCPY 1 -#cmakedefine HAVE_MEMMOVE 1 -#cmakedefine HAVE_MKSTEMP 1 -#cmakedefine HAVE_MLOCKALL 1 -#cmakedefine HAVE_MMAP 1 -#cmakedefine HAVE_MMAP64 1 -#cmakedefine HAVE_PERROR 1 -#cmakedefine HAVE_POLL 1 -#cmakedefine HAVE_PORT_CREATE 1 -#cmakedefine HAVE_POSIX_FALLOCATE 1 -#cmakedefine HAVE_PREAD 1 -#cmakedefine HAVE_PAUSE_INSTRUCTION 1 -#cmakedefine HAVE_FAKE_PAUSE_INSTRUCTION 1 -#cmakedefine HAVE_RDTSCLL 1 -#cmakedefine HAVE_READ_REAL_TIME 1 -#cmakedefine HAVE_PTHREAD_ATTR_CREATE 1 -#cmakedefine HAVE_PTHREAD_ATTR_GETSTACKSIZE 1 -#cmakedefine HAVE_PTHREAD_ATTR_SETPRIO 1 -#cmakedefine HAVE_PTHREAD_ATTR_SETSCHEDPARAM 1 -#cmakedefine HAVE_PTHREAD_ATTR_SETSCOPE 1 -#cmakedefine HAVE_PTHREAD_ATTR_SETSTACKSIZE 1 -#cmakedefine HAVE_PTHREAD_CONDATTR_CREATE 1 -#cmakedefine HAVE_PTHREAD_CONDATTR_SETCLOCK 1 -#cmakedefine HAVE_PTHREAD_INIT 1 -#cmakedefine HAVE_PTHREAD_KEY_DELETE 1 -#cmakedefine HAVE_PTHREAD_KEY_DELETE 1 -#cmakedefine HAVE_PTHREAD_KILL 1 -#cmakedefine HAVE_PTHREAD_RWLOCK_RDLOCK 1 -#cmakedefine HAVE_PTHREAD_SETPRIO_NP 1 -#cmakedefine HAVE_PTHREAD_SETSCHEDPARAM 1 -#cmakedefine HAVE_PTHREAD_SIGMASK 1 -#cmakedefine HAVE_PTHREAD_THREADMASK 1 -#cmakedefine HAVE_PTHREAD_YIELD_NP 1 -#cmakedefine HAVE_PTHREAD_YIELD_ZERO_ARG 1 -#cmakedefine PTHREAD_ONCE_INITIALIZER @PTHREAD_ONCE_INITIALIZER@ -#cmakedefine HAVE_PUTENV 1 -#cmakedefine HAVE_RE_COMP 1 -#cmakedefine HAVE_REGCOMP 1 -#cmakedefine HAVE_READDIR_R 1 -#cmakedefine HAVE_READLINK 1 -#cmakedefine HAVE_REALPATH 1 -#cmakedefine HAVE_RENAME 1 -#cmakedefine HAVE_RINT 1 -#cmakedefine HAVE_RWLOCK_INIT 1 -#cmakedefine HAVE_SCHED_YIELD 1 -#cmakedefine HAVE_SELECT 1 -#cmakedefine HAVE_SETFD 1 -#cmakedefine HAVE_SETENV 1 -#cmakedefine HAVE_SETLOCALE 1 -#cmakedefine HAVE_SIGADDSET 1 -#cmakedefine HAVE_SIGEMPTYSET 1 -#cmakedefine HAVE_SIGHOLD 1 -#cmakedefine HAVE_SIGSET 1 -#cmakedefine HAVE_SIGSET_T 1 -#cmakedefine HAVE_SIGACTION 1 -#cmakedefine HAVE_SIGTHREADMASK 1 -#cmakedefine HAVE_SIGWAIT 1 -#cmakedefine HAVE_SLEEP 1 -#cmakedefine HAVE_SNPRINTF 1 -#cmakedefine HAVE_STPCPY 1 -#cmakedefine HAVE_STRERROR 1 -#cmakedefine HAVE_STRCOLL 1 -#cmakedefine HAVE_STRSIGNAL 1 -#cmakedefine HAVE_STRLCPY 1 -#cmakedefine HAVE_STRLCAT 1 -#cmakedefine HAVE_FGETLN 1 -#cmakedefine HAVE_STRNLEN 1 -#cmakedefine HAVE_STRPBRK 1 -#cmakedefine HAVE_STRSEP 1 -#cmakedefine HAVE_STRSTR 1 -#cmakedefine HAVE_STRTOK_R 1 -#cmakedefine HAVE_STRTOL 1 -#cmakedefine HAVE_STRTOLL 1 -#cmakedefine HAVE_STRTOUL 1 -#cmakedefine HAVE_STRTOULL 1 -#cmakedefine HAVE_SHMAT 1 -#cmakedefine HAVE_SHMCTL 1 -#cmakedefine HAVE_SHMDT 1 -#cmakedefine HAVE_SHMGET 1 -#cmakedefine HAVE_TELL 1 -#cmakedefine HAVE_TEMPNAM 1 -#cmakedefine HAVE_THR_SETCONCURRENCY 1 -#cmakedefine HAVE_THR_YIELD 1 -#cmakedefine HAVE_TIME 1 -#cmakedefine HAVE_TIMES 1 -#cmakedefine HAVE_VALLOC 1 -#define HAVE_VIO_READ_BUFF 1 -#cmakedefine HAVE_VASPRINTF 1 -#cmakedefine HAVE_VPRINTF 1 -#cmakedefine HAVE_VSNPRINTF 1 -#cmakedefine HAVE_FTRUNCATE 1 -#cmakedefine HAVE_TZNAME 1 -#cmakedefine HAVE_AIO_READ 1 -/* Symbols we may use */ -#cmakedefine HAVE_SYS_ERRLIST 1 -/* used by stacktrace functions */ -#cmakedefine HAVE_BSS_START 1 -#cmakedefine HAVE_BACKTRACE 1 -#cmakedefine HAVE_BACKTRACE_SYMBOLS 1 -#cmakedefine HAVE_BACKTRACE_SYMBOLS_FD 1 -#cmakedefine HAVE_PRINTSTACK 1 -#cmakedefine HAVE_STRUCT_SOCKADDR_IN6 1 -#cmakedefine HAVE_STRUCT_IN6_ADDR 1 -#cmakedefine HAVE_NETINET_IN6_H 1 -#cmakedefine HAVE_IPV6 1 -#cmakedefine ss_family @ss_family@ -#cmakedefine HAVE_SOCKADDR_IN_SIN_LEN 1 -#cmakedefine HAVE_SOCKADDR_IN6_SIN6_LEN 1 -#cmakedefine HAVE_TIMESPEC_TS_SEC 1 -#cmakedefine STRUCT_DIRENT_HAS_D_INO 1 -#cmakedefine STRUCT_DIRENT_HAS_D_NAMLEN 1 -#cmakedefine SPRINTF_RETURNS_INT 1 - -#define USE_MB 1 -#define USE_MB_IDENT 1 - -#cmakedefine HAVE_VALGRIND - -/* Types we may use */ -#ifdef __APPLE__ - /* - Special handling required for OSX to support universal binaries that - mix 32 and 64 bit architectures. - */ - #if(__LP64__) - #define SIZEOF_LONG 8 - #else - #define SIZEOF_LONG 4 - #endif - #define SIZEOF_VOIDP SIZEOF_LONG - #define SIZEOF_CHARP SIZEOF_LONG - #define SIZEOF_SIZE_T SIZEOF_LONG -#else -/* No indentation, to fetch the lines from verification scripts */ -#cmakedefine SIZEOF_LONG @SIZEOF_LONG@ -#cmakedefine SIZEOF_VOIDP @SIZEOF_VOIDP@ -#cmakedefine SIZEOF_CHARP @SIZEOF_CHARP@ -#cmakedefine SIZEOF_SIZE_T @SIZEOF_CHARP@ -#endif - -#cmakedefine SIZEOF_CHAR @SIZEOF_CHAR@ -#define HAVE_CHAR 1 -#define HAVE_LONG 1 -#define HAVE_CHARP 1 -#cmakedefine SIZEOF_SHORT @SIZEOF_SHORT@ -#define HAVE_SHORT 1 -#cmakedefine SIZEOF_INT @SIZEOF_INT@ -#define HAVE_INT 1 -#cmakedefine SIZEOF_LONG_LONG @SIZEOF_LONG_LONG@ -#cmakedefine HAVE_LONG_LONG 1 -#cmakedefine SIZEOF_OFF_T @SIZEOF_OFF_T@ -#cmakedefine HAVE_OFF_T 1 -#cmakedefine SIZEOF_SIGSET_T @SIZEOF_SIGSET_T@ -#cmakedefine HAVE_SIGSET_T 1 -#cmakedefine HAVE_SIZE_T 1 -#cmakedefine SIZEOF_UCHAR @SIZEOF_UCHAR@ -#cmakedefine HAVE_UCHAR 1 -#cmakedefine SIZEOF_UINT @SIZEOF_UINT@ -#cmakedefine HAVE_UINT 1 -#cmakedefine SIZEOF_ULONG @SIZEOF_ULONG@ -#cmakedefine HAVE_ULONG 1 -#cmakedefine SIZEOF_INT8 @SIZEOF_INT8@ -#cmakedefine HAVE_INT8 1 -#cmakedefine SIZEOF_UINT8 @SIZEOF_UINT8@ -#cmakedefine HAVE_UINT8 1 -#cmakedefine SIZEOF_INT16 @SIZEOF_INT16@ -#cmakedefine HAVE_INT16 1 -#cmakedefine SIZEOF_UINT16 @SIZEOF_UINT16@ -#cmakedefine HAVE_UINT16 1 -#cmakedefine SIZEOF_INT32 @SIZEOF_INT32@ -#cmakedefine HAVE_INT32 1 -#cmakedefine SIZEOF_UINT32 @SIZEOF_UINT32@ -#cmakedefine HAVE_UINT32 1 -#cmakedefine SIZEOF_U_INT32_T @SIZEOF_U_INT32_T@ -#cmakedefine HAVE_U_INT32_T 1 -#cmakedefine SIZEOF_INT64 @SIZEOF_INT64@ -#cmakedefine HAVE_INT64 1 -#cmakedefine SIZEOF_UINT64 @SIZEOF_UINT64@ -#cmakedefine HAVE_UINT64 1 -#cmakedefine SIZEOF_BOOL @SIZEOF_BOOL@ -#cmakedefine HAVE_BOOL 1 - -#cmakedefine SOCKET_SIZE_TYPE @SOCKET_SIZE_TYPE@ - -#cmakedefine HAVE_MBSTATE_T - -#define MAX_INDEXES 64 - -#cmakedefine QSORT_TYPE_IS_VOID 1 -#cmakedefine RETQSORTTYPE @RETQSORTTYPE@ - -#cmakedefine SIGNAL_RETURN_TYPE_IS_VOID 1 -#cmakedefine RETSIGTYPE @RETSIGTYPE@ -#cmakedefine VOID_SIGHANDLER 1 -#define STRUCT_RLIMIT struct rlimit - -#ifdef __APPLE__ - #if __BIG_ENDIAN - #define WORDS_BIGENDIAN 1 - #endif -#else -#cmakedefine WORDS_BIGENDIAN 1 -#endif - -/* Define to `__inline__' or `__inline' if that's what the C compiler calls - it, or to nothing if 'inline' is not supported under any name. */ -#cmakedefine C_HAS_inline 1 -#if !(C_HAS_inline) -#ifndef __cplusplus -# define inline @C_INLINE@ -#endif -#endif - - -#cmakedefine TARGET_OS_LINUX 1 - -#cmakedefine HAVE_WCTYPE_H 1 -#cmakedefine HAVE_WCHAR_H 1 -#cmakedefine HAVE_LANGINFO_H 1 -#cmakedefine HAVE_MBRLEN -#cmakedefine HAVE_MBSCMP -#cmakedefine HAVE_MBSRTOWCS -#cmakedefine HAVE_WCRTOMB -#cmakedefine HAVE_MBRTOWC -#cmakedefine HAVE_WCSCOLL -#cmakedefine HAVE_WCSDUP -#cmakedefine HAVE_WCWIDTH -#cmakedefine HAVE_WCTYPE -#cmakedefine HAVE_ISWLOWER 1 -#cmakedefine HAVE_ISWUPPER 1 -#cmakedefine HAVE_TOWLOWER 1 -#cmakedefine HAVE_TOWUPPER 1 -#cmakedefine HAVE_ISWCTYPE 1 -#cmakedefine HAVE_WCHAR_T 1 -#cmakedefine HAVE_WCTYPE_T 1 -#cmakedefine HAVE_WINT_T 1 - - -#cmakedefine HAVE_STRCASECMP 1 -#cmakedefine HAVE_STRNCASECMP 1 -#cmakedefine HAVE_STRDUP 1 -#cmakedefine HAVE_LANGINFO_CODESET -#cmakedefine HAVE_TCGETATTR 1 -#cmakedefine HAVE_FLOCKFILE 1 - -#cmakedefine HAVE_WEAK_SYMBOL 1 -#cmakedefine HAVE_ABI_CXA_DEMANGLE 1 - - -#cmakedefine HAVE_POSIX_SIGNALS 1 -#cmakedefine HAVE_BSD_SIGNALS 1 -#cmakedefine HAVE_SVR3_SIGNALS 1 -#cmakedefine HAVE_V7_SIGNALS 1 - - -#cmakedefine HAVE_SOLARIS_STYLE_GETHOST 1 -#cmakedefine HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE 1 -#cmakedefine HAVE_GETHOSTBYNAME_R_RETURN_INT 1 - -#cmakedefine MY_ATOMIC_MODE_DUMMY 1 -#cmakedefine MY_ATOMIC_MODE_RWLOCKS 1 -#cmakedefine HAVE_GCC_ATOMIC_BUILTINS 1 -#cmakedefine HAVE_SOLARIS_ATOMIC 1 -#cmakedefine HAVE_DECL_SHM_HUGETLB 1 -#cmakedefine HAVE_LARGE_PAGES 1 -#cmakedefine HUGETLB_USE_PROC_MEMINFO 1 -#cmakedefine NO_FCNTL_NONBLOCK 1 -#cmakedefine NO_ALARM 1 - -#cmakedefine _LARGE_FILES 1 -#cmakedefine _LARGEFILE_SOURCE 1 -#cmakedefine _LARGEFILE64_SOURCE 1 -#cmakedefine _FILE_OFFSET_BITS @_FILE_OFFSET_BITS@ - -#cmakedefine TIME_WITH_SYS_TIME 1 - -#cmakedefine STACK_DIRECTION @STACK_DIRECTION@ - -#define SYSTEM_TYPE "@SYSTEM_TYPE@" -#define MACHINE_TYPE "@CMAKE_SYSTEM_PROCESSOR@" -#cmakedefine HAVE_DTRACE 1 - -#cmakedefine SIGNAL_WITH_VIO_CLOSE 1 - -/* Windows stuff, mostly functions, that have Posix analogs but named differently */ -#cmakedefine S_IROTH @S_IROTH@ -#cmakedefine S_IFIFO @S_IFIFO@ -#cmakedefine IPPROTO_IPV6 @IPPROTO_IPV6@ -#cmakedefine IPV6_V6ONLY @IPV6_V6ONLY@ -#cmakedefine sigset_t @sigset_t@ -#cmakedefine mode_t @mode_t@ -#cmakedefine SIGQUIT @SIGQUIT@ -#cmakedefine SIGPIPE @SIGPIPE@ -#cmakedefine isnan @isnan@ -#cmakedefine finite @finite@ -#cmakedefine popen @popen@ -#cmakedefine pclose @pclose@ -#cmakedefine ssize_t @ssize_t@ -#cmakedefine strcasecmp @strcasecmp@ -#cmakedefine strncasecmp @strncasecmp@ -#cmakedefine snprintf @snprintf@ -#cmakedefine strtok_r @strtok_r@ -#cmakedefine strtoll @strtoll@ -#cmakedefine strtoull @strtoull@ -#cmakedefine vsnprintf @vsnprintf@ -#if (_MSC_VER > 1310) -# define HAVE_SETENV -#define setenv(a,b,c) _putenv_s(a,b) -#endif - - - - -/* - MySQL features -*/ -#cmakedefine ENABLED_LOCAL_INFILE 1 -#cmakedefine ENABLED_PROFILING 1 -#cmakedefine EXTRA_DEBUG 1 -#cmakedefine BACKUP_TEST 1 -#cmakedefine CYBOZU 1 - -/* Character sets and collations */ -#cmakedefine MYSQL_DEFAULT_CHARSET_NAME "latin1" -#cmakedefine MYSQL_DEFAULT_COLLATION_NAME "latin1_swedish_ci" - -#cmakedefine USE_MB 1 -#cmakedefine USE_MB_IDENT 1 -#cmakedefine USE_STRCOLL 1 - -/* This should mean case insensitive file system */ -#cmakedefine FN_NO_CASE_SENSE 1 - -#cmakedefine HAVE_CHARSET_armscii8 1 -#cmakedefine HAVE_CHARSET_ascii 1 -#cmakedefine HAVE_CHARSET_big5 1 -#cmakedefine HAVE_CHARSET_cp1250 1 -#cmakedefine HAVE_CHARSET_cp1251 1 -#cmakedefine HAVE_CHARSET_cp1256 1 -#cmakedefine HAVE_CHARSET_cp1257 1 -#cmakedefine HAVE_CHARSET_cp850 1 -#cmakedefine HAVE_CHARSET_cp852 1 -#cmakedefine HAVE_CHARSET_cp866 1 -#cmakedefine HAVE_CHARSET_cp932 1 -#cmakedefine HAVE_CHARSET_dec8 1 -#cmakedefine HAVE_CHARSET_eucjpms 1 -#cmakedefine HAVE_CHARSET_euckr 1 -#cmakedefine HAVE_CHARSET_gb2312 1 -#cmakedefine HAVE_CHARSET_gbk 1 -#cmakedefine HAVE_CHARSET_geostd8 1 -#cmakedefine HAVE_CHARSET_greek 1 -#cmakedefine HAVE_CHARSET_hebrew 1 -#cmakedefine HAVE_CHARSET_hp8 1 -#cmakedefine HAVE_CHARSET_keybcs2 1 -#cmakedefine HAVE_CHARSET_koi8r 1 -#cmakedefine HAVE_CHARSET_koi8u 1 -#cmakedefine HAVE_CHARSET_latin1 1 -#cmakedefine HAVE_CHARSET_latin2 1 -#cmakedefine HAVE_CHARSET_latin5 1 -#cmakedefine HAVE_CHARSET_latin7 1 -#cmakedefine HAVE_CHARSET_macce 1 -#cmakedefine HAVE_CHARSET_macroman 1 -#cmakedefine HAVE_CHARSET_sjis 1 -#cmakedefine HAVE_CHARSET_swe7 1 -#cmakedefine HAVE_CHARSET_tis620 1 -#cmakedefine HAVE_CHARSET_ucs2 1 -#cmakedefine HAVE_CHARSET_ujis 1 -#cmakedefine HAVE_CHARSET_utf8mb4 1 -#cmakedefine HAVE_CHARSET_utf8mb3 1 -#cmakedefine HAVE_CHARSET_utf8 1 -#cmakedefine HAVE_CHARSET_utf16 1 -#cmakedefine HAVE_CHARSET_utf32 1 -#cmakedefine HAVE_UCA_COLLATIONS 1 -#cmakedefine HAVE_COMPRESS 1 - - -/* - Stuff that always need to be defined (compile breaks without it) -*/ -#define HAVE_SPATIAL 1 -#define HAVE_RTREE_KEYS 1 -#define HAVE_QUERY_CACHE 1 -#define BIG_TABLES 1 - -/* - Important storage engines (those that really need define - WITH__STORAGE_ENGINE for the whole server) -*/ -#cmakedefine WITH_MYISAM_STORAGE_ENGINE 1 -#cmakedefine WITH_MYISAMMRG_STORAGE_ENGINE 1 -#cmakedefine WITH_HEAP_STORAGE_ENGINE 1 -#cmakedefine WITH_CSV_STORAGE_ENGINE 1 -#cmakedefine WITH_PARTITION_STORAGE_ENGINE 1 -#cmakedefine WITH_PERFSCHEMA_STORAGE_ENGINE 1 -#cmakedefine WITH_NDBCLUSTER_STORAGE_ENGINE 1 -#if (WITH_NDBCLUSTER_STORAGE_ENGINE) && !defined(EMBEDDED_LIBRARY) -# define HAVE_NDB_BINLOG 1 -#endif - -#cmakedefine DEFAULT_MYSQL_HOME "@DEFAULT_MYSQL_HOME@" -#cmakedefine SHAREDIR "@SHAREDIR@" -#cmakedefine DEFAULT_BASEDIR "@DEFAULT_BASEDIR@" -#cmakedefine MYSQL_DATADIR "@MYSQL_DATADIR@" -#cmakedefine DEFAULT_CHARSET_HOME "@DEFAULT_CHARSET_HOME@" -#cmakedefine PLUGINDIR "@PLUGINDIR@" -#cmakedefine DEFAULT_SYSCONFDIR "@DEFAULT_SYSCONFDIR@" - -#cmakedefine SO_EXT "@CMAKE_SHARED_MODULE_SUFFIX@" - -#define MYSQL_MAJOR_VERSION @MAJOR_VERSION@ -#define MYSQL_MINOR_VERSION @MINOR_VERSION@ - -#define PACKAGE "mysql" -#define PACKAGE_BUGREPORT "" -#define PACKAGE_NAME "MySQL Server" -#define PACKAGE_STRING "MySQL Server @VERSION@" -#define PACKAGE_TARNAME "mysql" -#define PACKAGE_VERSION "@VERSION@" -#define VERSION "@VERSION@" -#define PROTOCOL_VERSION 10 - - -#endif diff --git a/deps/mysqllite/configure.cmake b/deps/mysqllite/configure.cmake deleted file mode 100644 index 49e2fbb07aa201..00000000000000 --- a/deps/mysqllite/configure.cmake +++ /dev/null @@ -1,1101 +0,0 @@ - -# Copyright (C) 2009 Sun Microsystems,Inc -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -INCLUDE (CheckCSourceCompiles) -INCLUDE (CheckCXXSourceCompiles) -INCLUDE (CheckStructHasMember) -INCLUDE (CheckLibraryExists) -INCLUDE (CheckFunctionExists) -INCLUDE (CheckCCompilerFlag) -INCLUDE (CheckCSourceRuns) -INCLUDE (CheckSymbolExists) - - -# WITH_PIC options.Not of much use, PIC is taken care of on platforms -# where it makes sense anyway. -IF(UNIX) - IF(APPLE) - # OSX executable are always PIC - SET(WITH_PIC ON) - ELSE() - OPTION(WITH_PIC "Generate PIC objects" OFF) - IF(WITH_PIC) - SET(CMAKE_C_FLAGS - "${CMAKE_C_FLAGS} ${CMAKE_SHARED_LIBRARY_C_FLAGS}") - SET(CMAKE_CXX_FLAGS - "${CMAKE_CXX_FLAGS} ${CMAKE_SHARED_LIBRARY_CXX_FLAGS}") - ENDIF() - ENDIF() -ENDIF() - - - -# System type affects version_compile_os variable -IF(NOT SYSTEM_TYPE) - IF(PLATFORM) - SET(SYSTEM_TYPE ${PLATFORM}) - ELSE() - SET(SYSTEM_TYPE ${CMAKE_SYSTEM_NAME}) - ENDIF() -ENDIF() - - -# Always enable -Wall for gnu C/C++ -IF(CMAKE_COMPILER_IS_GNUCXX) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unused-parameter") -ENDIF() -IF(CMAKE_COMPILER_IS_GNUCC) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") -ENDIF() - - -IF(CMAKE_COMPILER_IS_GNUCXX) - # MySQL "canonical" GCC flags. At least -fno-rtti flag affects - # ABI and cannot be simply removed. - SET(CMAKE_CXX_FLAGS - "${CMAKE_CXX_FLAGS} -fno-implicit-templates -fno-exceptions -fno-rtti") - IF(CMAKE_CXX_FLAGS) - STRING(REGEX MATCH "fno-implicit-templates" NO_IMPLICIT_TEMPLATES - ${CMAKE_CXX_FLAGS}) - IF (NO_IMPLICIT_TEMPLATES) - SET(HAVE_EXPLICIT_TEMPLATE_INSTANTIATION TRUE) - ENDIF() - ENDIF() - - IF (CMAKE_EXE_LINKER_FLAGS MATCHES " -static " - OR CMAKE_EXE_LINKER_FLAGS MATCHES " -static$") - SET(HAVE_DLOPEN FALSE CACHE "Disable dlopen due to -static flag" FORCE) - SET(WITHOUT_DYNAMIC_PLUGINS TRUE) - ENDIF() -ENDIF() - -IF(WITHOUT_DYNAMIC_PLUGINS) - MESSAGE("Dynamic plugins are disabled.") -ENDIF(WITHOUT_DYNAMIC_PLUGINS) - -# Large files, common flag -SET(_LARGEFILE_SOURCE 1) - -# If finds the size of a type, set SIZEOF_ and HAVE_ -FUNCTION(MY_CHECK_TYPE_SIZE type defbase) - CHECK_TYPE_SIZE("${type}" SIZEOF_${defbase}) - IF(SIZEOF_${defbase}) - SET(HAVE_${defbase} 1 PARENT_SCOPE) - ENDIF() -ENDFUNCTION() - -# Same for structs, setting HAVE_STRUCT_ instead -FUNCTION(MY_CHECK_STRUCT_SIZE type defbase) - CHECK_TYPE_SIZE("struct ${type}" SIZEOF_${defbase}) - IF(SIZEOF_${defbase}) - SET(HAVE_STRUCT_${defbase} 1 PARENT_SCOPE) - ENDIF() -ENDFUNCTION() - -# Searches function in libraries -# if function is found, sets output parameter result to the name of the library -# if function is found in libc, result will be empty -FUNCTION(MY_SEARCH_LIBS func libs result) - IF(${${result}}) - # Library is already found or was predefined - RETURN() - ENDIF() - CHECK_FUNCTION_EXISTS(${func} HAVE_${func}_IN_LIBC) - IF(HAVE_${func}_IN_LIBC) - SET(${result} "" PARENT_SCOPE) - RETURN() - ENDIF() - FOREACH(lib ${libs}) - CHECK_LIBRARY_EXISTS(${lib} ${func} "" HAVE_${func}_IN_${lib}) - IF(HAVE_${func}_IN_${lib}) - SET(${result} ${lib} PARENT_SCOPE) - SET(HAVE_${result} 1 PARENT_SCOPE) - RETURN() - ENDIF() - ENDFOREACH() -ENDFUNCTION() - -# Find out which libraries to use. -IF(UNIX) - MY_SEARCH_LIBS(floor m LIBM) - IF(NOT LIBM) - MY_SEARCH_LIBS(__infinity m LIBM) - ENDIF() - MY_SEARCH_LIBS(gethostbyname_r "nsl_r;nsl" LIBNSL) - MY_SEARCH_LIBS(bind "bind;socket" LIBBIND) - MY_SEARCH_LIBS(crypt crypt LIBCRYPT) - MY_SEARCH_LIBS(setsockopt socket LIBSOCKET) - MY_SEARCH_LIBS(dlopen dl LIBDL) - MY_SEARCH_LIBS(sched_yield rt LIBRT) - IF(NOT LIBRT) - MY_SEARCH_LIBS(clock_gettime rt LIBRT) - ENDIF() - FIND_PACKAGE(Threads) - - SET(CMAKE_REQUIRED_LIBRARIES - ${LIBM} ${LIBNSL} ${LIBBIND} ${LIBCRYPT} ${LIBSOCKET} ${LIBDL} ${CMAKE_THREAD_LIBS_INIT} ${LIBRT}) - - LIST(REMOVE_DUPLICATES CMAKE_REQUIRED_LIBRARIES) - LINK_LIBRARIES(${CMAKE_THREAD_LIBS_INIT}) - - OPTION(WITH_LIBWRAP "Compile with tcp wrappers support" OFF) - IF(WITH_LIBWRAP) - SET(SAVE_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) - SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} wrap) - CHECK_C_SOURCE_COMPILES( - " - #include - int allow_severity = 0; - int deny_severity = 0; - int main() - { - hosts_access(0); - }" - HAVE_LIBWRAP) - SET(CMAKE_REQUIRED_LIBRARIES ${SAVE_CMAKE_REQUIRED_LIBRARIES}) - IF(HAVE_LIBWRAP) - SET(MYSYS_LIBWRAP_SOURCE ${CMAKE_SOURCE_DIR}/mysys/my_libwrap.c) - SET(LIBWRAP "wrap") - ENDIF() - ENDIF() -ENDIF() - -# -# Tests for header files -# -INCLUDE (CheckIncludeFiles) - -CHECK_INCLUDE_FILES ("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS) -CHECK_INCLUDE_FILES (sys/types.h HAVE_SYS_TYPES_H) -CHECK_INCLUDE_FILES (alloca.h HAVE_ALLOCA_H) -CHECK_INCLUDE_FILES (aio.h HAVE_AIO_H) -CHECK_INCLUDE_FILES (arpa/inet.h HAVE_ARPA_INET_H) -CHECK_INCLUDE_FILES (crypt.h HAVE_CRYPT_H) -CHECK_INCLUDE_FILES (cxxabi.h HAVE_CXXABI_H) -CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H) -CHECK_INCLUDE_FILES (dlfcn.h HAVE_DLFCN_H) -CHECK_INCLUDE_FILES (execinfo.h HAVE_EXECINFO_H) -CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H) -CHECK_INCLUDE_FILES (fenv.h HAVE_FENV_H) -CHECK_INCLUDE_FILES (float.h HAVE_FLOAT_H) -CHECK_INCLUDE_FILES (floatingpoint.h HAVE_FLOATINGPOINT_H) -CHECK_INCLUDE_FILES (fpu_control.h HAVE_FPU_CONTROL_H) -CHECK_INCLUDE_FILES (grp.h HAVE_GRP_H) -CHECK_INCLUDE_FILES (ieeefp.h HAVE_IEEEFP_H) -CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H) -CHECK_INCLUDE_FILES (langinfo.h HAVE_LANGINFO_H) -CHECK_INCLUDE_FILES (limits.h HAVE_LIMITS_H) -CHECK_INCLUDE_FILES (locale.h HAVE_LOCALE_H) -CHECK_INCLUDE_FILES (malloc.h HAVE_MALLOC_H) -CHECK_INCLUDE_FILES (memory.h HAVE_MEMORY_H) -CHECK_INCLUDE_FILES (ndir.h HAVE_NDIR_H) -CHECK_INCLUDE_FILES (netinet/in.h HAVE_NETINET_IN_H) -CHECK_INCLUDE_FILES (paths.h HAVE_PATHS_H) -CHECK_INCLUDE_FILES (port.h HAVE_PORT_H) -CHECK_INCLUDE_FILES (poll.h HAVE_POLL_H) -CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H) -CHECK_INCLUDE_FILES (sched.h HAVE_SCHED_H) -CHECK_INCLUDE_FILES (select.h HAVE_SELECT_H) -CHECK_INCLUDE_FILES (semaphore.h HAVE_SEMAPHORE_H) -CHECK_INCLUDE_FILES ("sys/types.h;sys/dir.h" HAVE_SYS_DIR_H) -CHECK_INCLUDE_FILES (sys/ndir.h HAVE_SYS_NDIR_H) -CHECK_INCLUDE_FILES (sys/pte.h HAVE_SYS_PTE_H) -CHECK_INCLUDE_FILES (stddef.h HAVE_STDDEF_H) -CHECK_INCLUDE_FILES (stdint.h HAVE_STDINT_H) -CHECK_INCLUDE_FILES (stdlib.h HAVE_STDLIB_H) -CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H) -CHECK_INCLUDE_FILES (string.h HAVE_STRING_H) -CHECK_INCLUDE_FILES (synch.h HAVE_SYNCH_H) -CHECK_INCLUDE_FILES (sysent.h HAVE_SYSENT_H) -CHECK_INCLUDE_FILES (sys/cdefs.h HAVE_SYS_CDEFS_H) -CHECK_INCLUDE_FILES (sys/file.h HAVE_SYS_FILE_H) -CHECK_INCLUDE_FILES (sys/fpu.h HAVE_SYS_FPU_H) -CHECK_INCLUDE_FILES (sys/ioctl.h HAVE_SYS_IOCTL_H) -CHECK_INCLUDE_FILES (sys/ipc.h HAVE_SYS_IPC_H) -CHECK_INCLUDE_FILES (sys/malloc.h HAVE_SYS_MALLOC_H) -CHECK_INCLUDE_FILES (sys/mman.h HAVE_SYS_MMAN_H) -CHECK_INCLUDE_FILES (sys/prctl.h HAVE_SYS_PRCTL_H) -CHECK_INCLUDE_FILES (sys/resource.h HAVE_SYS_RESOURCE_H) -CHECK_INCLUDE_FILES (sys/select.h HAVE_SYS_SELECT_H) -CHECK_INCLUDE_FILES (sys/shm.h HAVE_SYS_SHM_H) -CHECK_INCLUDE_FILES (sys/socket.h HAVE_SYS_SOCKET_H) -CHECK_INCLUDE_FILES (sys/stat.h HAVE_SYS_STAT_H) -CHECK_INCLUDE_FILES (sys/stream.h HAVE_SYS_STREAM_H) -CHECK_INCLUDE_FILES (sys/termcap.h HAVE_SYS_TERMCAP_H) -CHECK_INCLUDE_FILES ("time.h;sys/timeb.h" HAVE_SYS_TIMEB_H) -CHECK_INCLUDE_FILES ("curses.h;term.h" HAVE_TERM_H) -CHECK_INCLUDE_FILES (asm/termbits.h HAVE_ASM_TERMBITS_H) -CHECK_INCLUDE_FILES (termbits.h HAVE_TERMBITS_H) -CHECK_INCLUDE_FILES (termios.h HAVE_TERMIOS_H) -CHECK_INCLUDE_FILES (termio.h HAVE_TERMIO_H) -CHECK_INCLUDE_FILES (termcap.h HAVE_TERMCAP_H) -CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H) -CHECK_INCLUDE_FILES (utime.h HAVE_UTIME_H) -CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H) -CHECK_INCLUDE_FILES (sys/time.h HAVE_SYS_TIME_H) -CHECK_INCLUDE_FILES (sys/utime.h HAVE_SYS_UTIME_H) -CHECK_INCLUDE_FILES (sys/wait.h HAVE_SYS_WAIT_H) -CHECK_INCLUDE_FILES (sys/param.h HAVE_SYS_PARAM_H) -CHECK_INCLUDE_FILES (sys/vadvise.h HAVE_SYS_VADVISE_H) -CHECK_INCLUDE_FILES (fnmatch.h HAVE_FNMATCH_H) -CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H) -CHECK_INCLUDE_FILES ("stdlib.h;sys/un.h" HAVE_SYS_UN_H) -CHECK_INCLUDE_FILES (vis.h HAVE_VIS_H) -CHECK_INCLUDE_FILES (wchar.h HAVE_WCHAR_H) -CHECK_INCLUDE_FILES (wctype.h HAVE_WCTYPE_H) - -IF(HAVE_SYS_STREAM_H) - # Needs sys/stream.h on Solaris - CHECK_INCLUDE_FILES ("sys/stream.h;sys/ptem.h" HAVE_SYS_PTEM_H) -ELSE() - CHECK_INCLUDE_FILES (sys/ptem.h HAVE_SYS_PTEM_H) -ENDIF() - -# Figure out threading library -# -FIND_PACKAGE (Threads) - -FUNCTION(MY_CHECK_PTHREAD_ONCE_INIT) - CHECK_C_COMPILER_FLAG("-Werror" HAVE_WERROR_FLAG) - IF(NOT HAVE_WERROR_FLAG) - RETURN() - ENDIF() - SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror") - CHECK_C_SOURCE_COMPILES(" - #include - void foo(void) {} - int main() - { - pthread_once_t once_control = PTHREAD_ONCE_INIT; - pthread_once(&once_control, foo); - return 0; - }" - HAVE_PTHREAD_ONCE_INIT - ) - # http://bugs.opensolaris.org/bugdatabase/printableBug.do?bug_id=6611808 - IF(NOT HAVE_PTHREAD_ONCE_INIT) - CHECK_C_SOURCE_COMPILES(" - #include - void foo(void) {} - int main() - { - pthread_once_t once_control = { PTHREAD_ONCE_INIT }; - pthread_once(&once_control, foo); - return 0; - }" - HAVE_ARRAY_PTHREAD_ONCE_INIT - ) - ENDIF() - IF(HAVE_PTHREAD_ONCE_INIT) - SET(PTHREAD_ONCE_INITIALIZER "PTHREAD_ONCE_INIT" PARENT_SCOPE) - ENDIF() - IF(HAVE_ARRAY_PTHREAD_ONCE_INIT) - SET(PTHREAD_ONCE_INITIALIZER "{ PTHREAD_ONCE_INIT }" PARENT_SCOPE) - ENDIF() -ENDFUNCTION() - -IF(CMAKE_USE_PTHREADS_INIT) - MY_CHECK_PTHREAD_ONCE_INIT() -ENDIF() - -# -# Tests for functions -# -#CHECK_FUNCTION_EXISTS (aiowait HAVE_AIOWAIT) -CHECK_FUNCTION_EXISTS (aio_read HAVE_AIO_READ) -CHECK_FUNCTION_EXISTS (alarm HAVE_ALARM) -SET(HAVE_ALLOCA 1) -CHECK_FUNCTION_EXISTS (backtrace HAVE_BACKTRACE) -CHECK_FUNCTION_EXISTS (backtrace_symbols HAVE_BACKTRACE_SYMBOLS) -CHECK_FUNCTION_EXISTS (backtrace_symbols_fd HAVE_BACKTRACE_SYMBOLS_FD) -CHECK_FUNCTION_EXISTS (printstack HAVE_PRINTSTACK) -CHECK_FUNCTION_EXISTS (bfill HAVE_BFILL) -CHECK_FUNCTION_EXISTS (bmove HAVE_BMOVE) -CHECK_FUNCTION_EXISTS (bsearch HAVE_BSEARCH) -CHECK_FUNCTION_EXISTS (index HAVE_INDEX) -CHECK_FUNCTION_EXISTS (bzero HAVE_BZERO) -CHECK_FUNCTION_EXISTS (clock_gettime HAVE_CLOCK_GETTIME) -CHECK_FUNCTION_EXISTS (cuserid HAVE_CUSERID) -CHECK_FUNCTION_EXISTS (directio HAVE_DIRECTIO) -CHECK_FUNCTION_EXISTS (_doprnt HAVE_DOPRNT) -CHECK_FUNCTION_EXISTS (flockfile HAVE_FLOCKFILE) -CHECK_FUNCTION_EXISTS (ftruncate HAVE_FTRUNCATE) -CHECK_FUNCTION_EXISTS (getline HAVE_GETLINE) -CHECK_FUNCTION_EXISTS (compress HAVE_COMPRESS) -CHECK_FUNCTION_EXISTS (crypt HAVE_CRYPT) -CHECK_FUNCTION_EXISTS (dlerror HAVE_DLERROR) -CHECK_FUNCTION_EXISTS (dlopen HAVE_DLOPEN) -CHECK_FUNCTION_EXISTS (fchmod HAVE_FCHMOD) -CHECK_FUNCTION_EXISTS (fcntl HAVE_FCNTL) -CHECK_FUNCTION_EXISTS (fconvert HAVE_FCONVERT) -CHECK_FUNCTION_EXISTS (fdatasync HAVE_FDATASYNC) -CHECK_SYMBOL_EXISTS(fdatasync "unistd.h" HAVE_DECL_FDATASYNC) -CHECK_FUNCTION_EXISTS (fesetround HAVE_FESETROUND) -CHECK_FUNCTION_EXISTS (fpsetmask HAVE_FPSETMASK) -CHECK_FUNCTION_EXISTS (fseeko HAVE_FSEEKO) -CHECK_FUNCTION_EXISTS (fsync HAVE_FSYNC) -CHECK_FUNCTION_EXISTS (getcwd HAVE_GETCWD) -CHECK_FUNCTION_EXISTS (gethostbyaddr_r HAVE_GETHOSTBYADDR_R) -CHECK_FUNCTION_EXISTS (gethostbyname_r HAVE_GETHOSTBYNAME_R) -CHECK_FUNCTION_EXISTS (gethrtime HAVE_GETHRTIME) -CHECK_FUNCTION_EXISTS (getnameinfo HAVE_GETNAMEINFO) -CHECK_FUNCTION_EXISTS (getpass HAVE_GETPASS) -CHECK_FUNCTION_EXISTS (getpassphrase HAVE_GETPASSPHRASE) -CHECK_FUNCTION_EXISTS (getpwnam HAVE_GETPWNAM) -CHECK_FUNCTION_EXISTS (getpwuid HAVE_GETPWUID) -CHECK_FUNCTION_EXISTS (getrlimit HAVE_GETRLIMIT) -CHECK_FUNCTION_EXISTS (getrusage HAVE_GETRUSAGE) -CHECK_FUNCTION_EXISTS (getwd HAVE_GETWD) -CHECK_FUNCTION_EXISTS (gmtime_r HAVE_GMTIME_R) -CHECK_FUNCTION_EXISTS (initgroups HAVE_INITGROUPS) -CHECK_FUNCTION_EXISTS (issetugid HAVE_ISSETUGID) -CHECK_FUNCTION_EXISTS (ldiv HAVE_LDIV) -CHECK_FUNCTION_EXISTS (localtime_r HAVE_LOCALTIME_R) -CHECK_FUNCTION_EXISTS (longjmp HAVE_LONGJMP) -CHECK_FUNCTION_EXISTS (lstat HAVE_LSTAT) -CHECK_FUNCTION_EXISTS (madvise HAVE_MADVISE) -CHECK_FUNCTION_EXISTS (mallinfo HAVE_MALLINFO) -CHECK_FUNCTION_EXISTS (memcpy HAVE_MEMCPY) -CHECK_FUNCTION_EXISTS (memmove HAVE_MEMMOVE) -CHECK_FUNCTION_EXISTS (mkstemp HAVE_MKSTEMP) -CHECK_FUNCTION_EXISTS (mlock HAVE_MLOCK) -CHECK_FUNCTION_EXISTS (mlockall HAVE_MLOCKALL) -CHECK_FUNCTION_EXISTS (mmap HAVE_MMAP) -CHECK_FUNCTION_EXISTS (mmap64 HAVE_MMAP64) -CHECK_FUNCTION_EXISTS (perror HAVE_PERROR) -CHECK_FUNCTION_EXISTS (poll HAVE_POLL) -CHECK_FUNCTION_EXISTS (port_create HAVE_PORT_CREATE) -CHECK_FUNCTION_EXISTS (posix_fallocate HAVE_POSIX_FALLOCATE) -CHECK_FUNCTION_EXISTS (pread HAVE_PREAD) -CHECK_FUNCTION_EXISTS (pthread_attr_create HAVE_PTHREAD_ATTR_CREATE) -CHECK_FUNCTION_EXISTS (pthread_attr_getstacksize HAVE_PTHREAD_ATTR_GETSTACKSIZE) -CHECK_FUNCTION_EXISTS (pthread_attr_setscope HAVE_PTHREAD_ATTR_SETSCOPE) -CHECK_FUNCTION_EXISTS (pthread_attr_setstacksize HAVE_PTHREAD_ATTR_SETSTACKSIZE) -CHECK_FUNCTION_EXISTS (pthread_condattr_create HAVE_PTHREAD_CONDATTR_CREATE) -CHECK_FUNCTION_EXISTS (pthread_condattr_setclock HAVE_PTHREAD_CONDATTR_SETCLOCK) -CHECK_FUNCTION_EXISTS (pthread_init HAVE_PTHREAD_INIT) -CHECK_FUNCTION_EXISTS (pthread_key_delete HAVE_PTHREAD_KEY_DELETE) -CHECK_FUNCTION_EXISTS (pthread_rwlock_rdlock HAVE_PTHREAD_RWLOCK_RDLOCK) -CHECK_FUNCTION_EXISTS (pthread_sigmask HAVE_PTHREAD_SIGMASK) -CHECK_FUNCTION_EXISTS (pthread_threadmask HAVE_PTHREAD_THREADMASK) -CHECK_FUNCTION_EXISTS (pthread_yield_np HAVE_PTHREAD_YIELD_NP) -CHECK_FUNCTION_EXISTS (putenv HAVE_PUTENV) -CHECK_FUNCTION_EXISTS (readdir_r HAVE_READDIR_R) -CHECK_FUNCTION_EXISTS (readlink HAVE_READLINK) -CHECK_FUNCTION_EXISTS (re_comp HAVE_RE_COMP) -CHECK_FUNCTION_EXISTS (regcomp HAVE_REGCOMP) -CHECK_FUNCTION_EXISTS (realpath HAVE_REALPATH) -CHECK_FUNCTION_EXISTS (rename HAVE_RENAME) -CHECK_FUNCTION_EXISTS (rwlock_init HAVE_RWLOCK_INIT) -CHECK_FUNCTION_EXISTS (sched_yield HAVE_SCHED_YIELD) -CHECK_FUNCTION_EXISTS (setenv HAVE_SETENV) -CHECK_FUNCTION_EXISTS (setlocale HAVE_SETLOCALE) -CHECK_FUNCTION_EXISTS (setfd HAVE_SETFD) -CHECK_FUNCTION_EXISTS (sigaction HAVE_SIGACTION) -CHECK_FUNCTION_EXISTS (sigthreadmask HAVE_SIGTHREADMASK) -CHECK_FUNCTION_EXISTS (sigwait HAVE_SIGWAIT) -CHECK_FUNCTION_EXISTS (sigaddset HAVE_SIGADDSET) -CHECK_FUNCTION_EXISTS (sigemptyset HAVE_SIGEMPTYSET) -CHECK_FUNCTION_EXISTS (sighold HAVE_SIGHOLD) -CHECK_FUNCTION_EXISTS (sigset HAVE_SIGSET) -CHECK_FUNCTION_EXISTS (sleep HAVE_SLEEP) -CHECK_FUNCTION_EXISTS (snprintf HAVE_SNPRINTF) -CHECK_FUNCTION_EXISTS (stpcpy HAVE_STPCPY) -CHECK_FUNCTION_EXISTS (strcoll HAVE_STRCOLL) -CHECK_FUNCTION_EXISTS (strerror HAVE_STRERROR) -CHECK_FUNCTION_EXISTS (strlcpy HAVE_STRLCPY) -CHECK_FUNCTION_EXISTS (strnlen HAVE_STRNLEN) -CHECK_FUNCTION_EXISTS (strlcat HAVE_STRLCAT) -CHECK_FUNCTION_EXISTS (strsignal HAVE_STRSIGNAL) -CHECK_FUNCTION_EXISTS (fgetln HAVE_FGETLN) -CHECK_FUNCTION_EXISTS (strpbrk HAVE_STRPBRK) -CHECK_FUNCTION_EXISTS (strsep HAVE_STRSEP) -CHECK_FUNCTION_EXISTS (strstr HAVE_STRSTR) -CHECK_FUNCTION_EXISTS (strtok_r HAVE_STRTOK_R) -CHECK_FUNCTION_EXISTS (strtol HAVE_STRTOL) -CHECK_FUNCTION_EXISTS (strtoll HAVE_STRTOLL) -CHECK_FUNCTION_EXISTS (strtoul HAVE_STRTOUL) -CHECK_FUNCTION_EXISTS (strtoull HAVE_STRTOULL) -CHECK_FUNCTION_EXISTS (strcasecmp HAVE_STRCASECMP) -CHECK_FUNCTION_EXISTS (strncasecmp HAVE_STRNCASECMP) -CHECK_FUNCTION_EXISTS (strdup HAVE_STRDUP) -CHECK_FUNCTION_EXISTS (shmat HAVE_SHMAT) -CHECK_FUNCTION_EXISTS (shmctl HAVE_SHMCTL) -CHECK_FUNCTION_EXISTS (shmdt HAVE_SHMDT) -CHECK_FUNCTION_EXISTS (shmget HAVE_SHMGET) -CHECK_FUNCTION_EXISTS (tell HAVE_TELL) -CHECK_FUNCTION_EXISTS (tempnam HAVE_TEMPNAM) -CHECK_FUNCTION_EXISTS (thr_setconcurrency HAVE_THR_SETCONCURRENCY) -CHECK_FUNCTION_EXISTS (thr_yield HAVE_THR_YIELD) -CHECK_FUNCTION_EXISTS (vasprintf HAVE_VASPRINTF) -CHECK_FUNCTION_EXISTS (vsnprintf HAVE_VSNPRINTF) -CHECK_FUNCTION_EXISTS (vprintf HAVE_VPRINTF) -CHECK_FUNCTION_EXISTS (valloc HAVE_VALLOC) -CHECK_FUNCTION_EXISTS (memalign HAVE_MEMALIGN) -CHECK_FUNCTION_EXISTS (chown HAVE_CHOWN) -CHECK_FUNCTION_EXISTS (nl_langinfo HAVE_NL_LANGINFO) - -#-------------------------------------------------------------------- -# Support for WL#2373 (Use cycle counter for timing) -#-------------------------------------------------------------------- - -CHECK_INCLUDE_FILES(time.h HAVE_TIME_H) -CHECK_INCLUDE_FILES(sys/time.h HAVE_SYS_TIME_H) -CHECK_INCLUDE_FILES(sys/times.h HAVE_SYS_TIMES_H) -CHECK_INCLUDE_FILES(asm/msr.h HAVE_ASM_MSR_H) -#msr.h has rdtscll() - -CHECK_INCLUDE_FILES(ia64intrin.h HAVE_IA64INTRIN_H) - -CHECK_FUNCTION_EXISTS(times HAVE_TIMES) -CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY) -CHECK_FUNCTION_EXISTS(read_real_time HAVE_READ_REAL_TIME) -# This should work on AIX. - -CHECK_FUNCTION_EXISTS(ftime HAVE_FTIME) -# This is still a normal call for milliseconds. - -CHECK_FUNCTION_EXISTS(time HAVE_TIME) -# We can use time() on Macintosh if there is no ftime(). - -CHECK_FUNCTION_EXISTS(rdtscll HAVE_RDTSCLL) -# I doubt that we'll ever reach the check for this. - - -# -# Tests for symbols -# - -CHECK_SYMBOL_EXISTS(sys_errlist "stdio.h" HAVE_SYS_ERRLIST) -CHECK_SYMBOL_EXISTS(madvise "sys/mman.h" HAVE_DECL_MADVISE) -CHECK_SYMBOL_EXISTS(tzname "time.h" HAVE_TZNAME) -CHECK_SYMBOL_EXISTS(lrand48 "stdlib.h" HAVE_LRAND48) -CHECK_SYMBOL_EXISTS(getpagesize "unistd.h" HAVE_GETPAGESIZE) -CHECK_SYMBOL_EXISTS(TIOCGWINSZ "sys/ioctl.h" GWINSZ_IN_SYS_IOCTL) -CHECK_SYMBOL_EXISTS(FIONREAD "sys/ioctl.h" FIONREAD_IN_SYS_IOCTL) -CHECK_SYMBOL_EXISTS(TIOCSTAT "sys/ioctl.h" TIOCSTAT_IN_SYS_IOCTL) -CHECK_SYMBOL_EXISTS(gettimeofday "sys/time.h" HAVE_GETTIMEOFDAY) - -CHECK_SYMBOL_EXISTS(finite "math.h" HAVE_FINITE_IN_MATH_H) -IF(HAVE_FINITE_IN_MATH_H) - SET(HAVE_FINITE TRUE CACHE INTERNAL "") -ELSE() - CHECK_SYMBOL_EXISTS(finite "ieeefp.h" HAVE_FINITE) -ENDIF() -CHECK_SYMBOL_EXISTS(log2 math.h HAVE_LOG2) -CHECK_SYMBOL_EXISTS(isnan math.h HAVE_ISNAN) -CHECK_SYMBOL_EXISTS(rint math.h HAVE_RINT) - -# isinf() prototype not found on Solaris -CHECK_CXX_SOURCE_COMPILES( -"#include -int main() { - isinf(0.0); - return 0; -}" HAVE_ISINF) - - - -# -# Test for endianess -# -INCLUDE(TestBigEndian) -IF(APPLE) - # Cannot run endian test on universal PPC/Intel binaries - # would return inconsistent result. - # config.h.cmake includes a special #ifdef for Darwin -ELSE() - TEST_BIG_ENDIAN(WORDS_BIGENDIAN) -ENDIF() - -# -# Tests for type sizes (and presence) -# -INCLUDE (CheckTypeSize) -set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} - -D_LARGEFILE_SOURCE -D_LARGE_FILES -D_FILE_OFFSET_BITS=64 - -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS) -SET(CMAKE_EXTRA_INCLUDE_FILES signal.h) -MY_CHECK_TYPE_SIZE(sigset_t SIGSET_T) -IF(NOT SIZEOF_SIGSET_T) - SET(sigset_t int) -ENDIF() -MY_CHECK_TYPE_SIZE(mode_t MODE_T) -IF(NOT SIZEOF_MODE_T) - SET(mode_t int) -ENDIF() - - -IF(HAVE_STDINT_H) - SET(CMAKE_EXTRA_INCLUDE_FILES stdint.h) -ENDIF(HAVE_STDINT_H) - -SET(HAVE_VOIDP 1) -SET(HAVE_CHARP 1) -SET(HAVE_LONG 1) -SET(HAVE_SIZE_T 1) - -IF(NOT APPLE) -MY_CHECK_TYPE_SIZE("void *" VOIDP) -MY_CHECK_TYPE_SIZE("char *" CHARP) -MY_CHECK_TYPE_SIZE(long LONG) -MY_CHECK_TYPE_SIZE(size_t SIZE_T) -ENDIF() - -MY_CHECK_TYPE_SIZE(char CHAR) -MY_CHECK_TYPE_SIZE(short SHORT) -MY_CHECK_TYPE_SIZE(int INT) -MY_CHECK_TYPE_SIZE("long long" LONG_LONG) -SET(CMAKE_EXTRA_INCLUDE_FILES stdio.h sys/types.h) -MY_CHECK_TYPE_SIZE(off_t OFF_T) -MY_CHECK_TYPE_SIZE(uchar UCHAR) -MY_CHECK_TYPE_SIZE(uint UINT) -MY_CHECK_TYPE_SIZE(ulong ULONG) -MY_CHECK_TYPE_SIZE(int8 INT8) -MY_CHECK_TYPE_SIZE(uint8 UINT8) -MY_CHECK_TYPE_SIZE(int16 INT16) -MY_CHECK_TYPE_SIZE(uint16 UINT16) -MY_CHECK_TYPE_SIZE(int32 INT32) -MY_CHECK_TYPE_SIZE(uint32 UINT32) -MY_CHECK_TYPE_SIZE(u_int32_t U_INT32_T) -MY_CHECK_TYPE_SIZE(int64 INT64) -MY_CHECK_TYPE_SIZE(uint64 UINT64) -SET (CMAKE_EXTRA_INCLUDE_FILES sys/types.h) -MY_CHECK_TYPE_SIZE(bool BOOL) -SET(CMAKE_EXTRA_INCLUDE_FILES) -IF(HAVE_SYS_SOCKET_H) - SET(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h) -ENDIF(HAVE_SYS_SOCKET_H) -MY_CHECK_TYPE_SIZE(socklen_t SOCKLEN_T) -SET(CMAKE_EXTRA_INCLUDE_FILES) - -IF(HAVE_IEEEFP_H) - SET(CMAKE_EXTRA_INCLUDE_FILES ieeefp.h) - MY_CHECK_TYPE_SIZE(fp_except FP_EXCEPT) -ENDIF() - - -# -# Code tests -# - -CHECK_C_SOURCE_COMPILES(" -#ifdef _WIN32 -#include -#include -#else -#include -#include -#include -#endif -int main() -{ - getaddrinfo( 0, 0, 0, 0); - return 0; -}" -HAVE_GETADDRINFO) - -CHECK_C_SOURCE_COMPILES(" -#ifdef _WIN32 -#include -#include -#else -#include -#include -#include -#endif -int main() -{ - select(0,0,0,0,0); - return 0; -}" -HAVE_SELECT) - -# -# Check if timespec has ts_sec and ts_nsec fields -# - -CHECK_C_SOURCE_COMPILES(" -#include - -int main(int ac, char **av) -{ - struct timespec abstime; - abstime.ts_sec = time(NULL)+1; - abstime.ts_nsec = 0; -} -" HAVE_TIMESPEC_TS_SEC) - - -# -# Check return type of qsort() -# -CHECK_C_SOURCE_COMPILES(" -#include -#ifdef __cplusplus -extern \"C\" -#endif -void qsort(void *base, size_t nel, size_t width, - int (*compar) (const void *, const void *)); -int main(int ac, char **av) {} -" QSORT_TYPE_IS_VOID) -IF(QSORT_TYPE_IS_VOID) - SET(RETQSORTTYPE "void") -ELSE(QSORT_TYPE_IS_VOID) - SET(RETQSORTTYPE "int") -ENDIF(QSORT_TYPE_IS_VOID) - -IF(WIN32) -SET(SOCKET_SIZE_TYPE int) -ELSE() -CHECK_CXX_SOURCE_COMPILES(" -#include -int main(int argc, char **argv) -{ - getsockname(0,0,(socklen_t *) 0); - return 0; -}" -HAVE_SOCKET_SIZE_T_AS_socklen_t) - -IF(HAVE_SOCKET_SIZE_T_AS_socklen_t) - SET(SOCKET_SIZE_TYPE socklen_t) -ELSE() - CHECK_CXX_SOURCE_COMPILES(" - #include - int main(int argc, char **argv) - { - getsockname(0,0,(int *) 0); - return 0; - }" - HAVE_SOCKET_SIZE_T_AS_int) - IF(HAVE_SOCKET_SIZE_T_AS_int) - SET(SOCKET_SIZE_TYPE int) - ELSE() - CHECK_CXX_SOURCE_COMPILES(" - #include - int main(int argc, char **argv) - { - getsockname(0,0,(size_t *) 0); - return 0; - }" - HAVE_SOCKET_SIZE_T_AS_size_t) - IF(HAVE_SOCKET_SIZE_T_AS_size_t) - SET(SOCKET_SIZE_TYPE size_t) - ELSE() - SET(SOCKET_SIZE_TYPE int) - ENDIF() - ENDIF() -ENDIF() -ENDIF() - -CHECK_CXX_SOURCE_COMPILES(" -#include -int main() -{ - pthread_yield(); - return 0; -} -" HAVE_PTHREAD_YIELD_ZERO_ARG) - -IF(NOT STACK_DIRECTION) - IF(CMAKE_CROSSCOMPILING) - MESSAGE(FATAL_ERROR - "STACK_DIRECTION is not defined. Please specify -DSTACK_DIRECTION=1 " - "or -DSTACK_DIRECTION=-1 when calling cmake.") - ELSE() - TRY_RUN(STACKDIR_RUN_RESULT STACKDIR_COMPILE_RESULT - ${CMAKE_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/cmake/stack_direction.c - ) - # Test program returns 0 (down) or 1 (up). - # Convert to -1 or 1 - IF(STACKDIR_RUN_RESULT EQUAL 0) - SET(STACK_DIRECTION -1 CACHE INTERNAL "Stack grows direction") - ELSE() - SET(STACK_DIRECTION 1 CACHE INTERNAL "Stack grows direction") - ENDIF() - MESSAGE(STATUS "Checking stack direction : ${STACK_DIRECTION}") - ENDIF() -ENDIF() - -# -# Check return type of signal handlers -# -CHECK_C_SOURCE_COMPILES(" -#include -#ifdef signal -# undef signal -#endif -#ifdef __cplusplus -extern \"C\" void (*signal (int, void (*)(int)))(int); -#else -void (*signal ()) (); -#endif -int main(int ac, char **av) {} -" SIGNAL_RETURN_TYPE_IS_VOID) -IF(SIGNAL_RETURN_TYPE_IS_VOID) - SET(RETSIGTYPE void) - SET(VOID_SIGHANDLER 1) -ELSE(SIGNAL_RETURN_TYPE_IS_VOID) - SET(RETSIGTYPE int) -ENDIF(SIGNAL_RETURN_TYPE_IS_VOID) - - -CHECK_INCLUDE_FILES("time.h;sys/time.h" TIME_WITH_SYS_TIME) -CHECK_SYMBOL_EXISTS(O_NONBLOCK "unistd.h;fcntl.h" HAVE_FCNTL_NONBLOCK) -IF(NOT HAVE_FCNTL_NONBLOCK) - SET(NO_FCNTL_NONBLOCK 1) -ENDIF() - -# -# Test for how the C compiler does inline, if at all -# -CHECK_C_SOURCE_COMPILES(" -static inline int foo(){return 0;} -int main(int argc, char *argv[]){return 0;}" - C_HAS_inline) -IF(NOT C_HAS_inline) - CHECK_C_SOURCE_COMPILES(" - static __inline int foo(){return 0;} - int main(int argc, char *argv[]){return 0;}" - C_HAS___inline) - SET(C_INLINE __inline) -ENDIF() - -IF(NOT CMAKE_CROSSCOMPILING AND NOT MSVC) - STRING(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} processor) - IF(processor MATCHES "86" OR processor MATCHES "amd64" OR processor MATCHES "x64") - #Check for x86 PAUSE instruction - # We have to actually try running the test program, because of a bug - # in Solaris on x86_64, where it wrongly reports that PAUSE is not - # supported when trying to run an application. See - # http://bugs.opensolaris.org/bugdatabase/printableBug.do?bug_id=6478684 - CHECK_C_SOURCE_RUNS(" - int main() - { - __asm__ __volatile__ (\"pause\"); - return 0; - }" HAVE_PAUSE_INSTRUCTION) - ENDIF() - IF (NOT HAVE_PAUSE_INSTRUCTION) - CHECK_C_SOURCE_COMPILES(" - int main() - { - __asm__ __volatile__ (\"rep; nop\"); - return 0; - } - " HAVE_FAKE_PAUSE_INSTRUCTION) - ENDIF() -ENDIF() - -CHECK_SYMBOL_EXISTS(tcgetattr "termios.h" HAVE_TCGETATTR 1) - -# -# Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7) -# -CHECK_C_SOURCE_COMPILES(" - #include - int main(int ac, char **av) - { - sigset_t ss; - struct sigaction sa; - sigemptyset(&ss); sigsuspend(&ss); - sigaction(SIGINT, &sa, (struct sigaction *) 0); - sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0); - }" - HAVE_POSIX_SIGNALS) - -IF(NOT HAVE_POSIX_SIGNALS) - CHECK_C_SOURCE_COMPILES(" - #include - int main(int ac, char **av) - { - int mask = sigmask(SIGINT); - sigsetmask(mask); sigblock(mask); sigpause(mask); - }" - HAVE_BSD_SIGNALS) - IF (NOT HAVE_BSD_SIGNALS) - CHECK_C_SOURCE_COMPILES(" - #include - void foo() { } - int main(int ac, char **av) - { - int mask = sigmask(SIGINT); - sigset(SIGINT, foo); sigrelse(SIGINT); - sighold(SIGINT); sigpause(SIGINT); - }" - HAVE_SVR3_SIGNALS) - IF (NOT HAVE_SVR3_SIGNALS) - SET(HAVE_V7_SIGNALS 1) - ENDIF(NOT HAVE_SVR3_SIGNALS) - ENDIF(NOT HAVE_BSD_SIGNALS) -ENDIF(NOT HAVE_POSIX_SIGNALS) - -# Assume regular sprintf -SET(SPRINTFS_RETURNS_INT 1) - -IF(CMAKE_COMPILER_IS_GNUCXX AND HAVE_CXXABI_H) -CHECK_CXX_SOURCE_COMPILES(" - #include - int main(int argc, char **argv) - { - char *foo= 0; int bar= 0; - foo= abi::__cxa_demangle(foo, foo, 0, &bar); - return 0; - }" - HAVE_ABI_CXA_DEMANGLE) -ENDIF() - -CHECK_C_SOURCE_COMPILES(" - int main(int argc, char **argv) - { - extern char *__bss_start; - return __bss_start ? 1 : 0; - }" -HAVE_BSS_START) - -CHECK_C_SOURCE_COMPILES(" - int main() - { - extern void __attribute__((weak)) foo(void); - return 0; - }" - HAVE_WEAK_SYMBOL -) - - -CHECK_CXX_SOURCE_COMPILES(" - #include - int main() - { - char *c = new char; - return 0; - }" - HAVE_CXX_NEW -) - -CHECK_CXX_SOURCE_COMPILES(" - #undef inline - #if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT) - #define _REENTRANT - #endif - #include - #include - #include - #include - #include - #include - int main() - { - - struct hostent *foo = - gethostbyaddr_r((const char *) 0, - 0, 0, (struct hostent *) 0, (char *) NULL, 0, (int *)0); - return 0; - } - " - HAVE_SOLARIS_STYLE_GETHOST) - -CHECK_CXX_SOURCE_COMPILES(" - #undef inline - #if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT) - #define _REENTRANT - #endif - #include - #include - #include - #include - #include - #include - int main() - { - int ret = gethostbyname_r((const char *) 0, - (struct hostent*) 0, (char*) 0, 0, (struct hostent **) 0, (int *) 0); - return 0; - }" - HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) - -CHECK_CXX_SOURCE_COMPILES(" - #undef inline - #if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT) - #define _REENTRANT - #endif - #include - #include - #include - #include - #include - #include - int main() - { - int ret = gethostbyname_r((const char *) 0, (struct hostent*) 0, (struct hostent_data*) 0); - return 0; - }" - HAVE_GETHOSTBYNAME_R_RETURN_INT) - - -# Use of ALARMs to wakeup on timeout on sockets -# -# This feature makes use of a mutex and is a scalability hog we -# try to avoid using. However we need support for SO_SNDTIMEO and -# SO_RCVTIMEO socket options for this to work. So we will check -# if this feature is supported by a simple TRY_RUN macro. However -# on some OS's there is support for setting those variables but -# they are silently ignored. For those OS's we will not attempt -# to use SO_SNDTIMEO and SO_RCVTIMEO even if it is said to work. -# See Bug#29093 for the problem with SO_SND/RCVTIMEO on HP/UX. -# To use alarm is simple, simply avoid setting anything. - -IF(WIN32) - SET(HAVE_SOCKET_TIMEOUT 1) -ELSEIF(CMAKE_SYSTEM MATCHES "HP-UX") - SET(HAVE_SOCKET_TIMEOUT 0) -ELSEIF(CMAKE_CROSSCOMPILING) - SET(HAVE_SOCKET_TIMEOUT 0) -ELSE() -SET(CMAKE_REQUIRED_LIBRARIES ${LIBNSL} ${LIBSOCKET}) -CHECK_C_SOURCE_RUNS( -" - #include - #include - #include - - int main() - { - int fd = socket(AF_INET, SOCK_STREAM, 0); - struct timeval tv; - int ret= 0; - tv.tv_sec= 2; - tv.tv_usec= 0; - ret|= setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)); - ret|= setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); - return !!ret; - } -" HAVE_SOCKET_TIMEOUT) -ENDIF() - -SET(NO_ALARM "${HAVE_SOCKET_TIMEOUT}" CACHE BOOL - "No need to use alarm to implement socket timeout") -SET(SIGNAL_WITH_VIO_CLOSE "${HAVE_SOCKET_TIMEOUT}") -MARK_AS_ADVANCED(NO_ALARM) - - -IF(CMAKE_COMPILER_IS_GNUCXX) -IF(WITH_ATOMIC_OPS STREQUAL "up") - SET(MY_ATOMIC_MODE_DUMMY 1 CACHE BOOL "Assume single-CPU mode, no concurrency") -ELSEIF(WITH_ATOMIC_OPS STREQUAL "rwlocks") - SET(MY_ATOMIC_MODE_RWLOCK 1 CACHE BOOL "Use pthread rwlocks for atomic ops") -ELSEIF(WITH_ATOMIC_OPS STREQUAL "smp") -ELSEIF(NOT WITH_ATOMIC_OPS) - CHECK_CXX_SOURCE_COMPILES(" - int main() - { - int foo= -10; int bar= 10; - long long int foo64= -10; long long int bar64= 10; - if (!__sync_fetch_and_add(&foo, bar) || foo) - return -1; - bar= __sync_lock_test_and_set(&foo, bar); - if (bar || foo != 10) - return -1; - bar= __sync_val_compare_and_swap(&bar, foo, 15); - if (bar) - return -1; - if (!__sync_fetch_and_add(&foo64, bar64) || foo64) - return -1; - bar64= __sync_lock_test_and_set(&foo64, bar64); - if (bar64 || foo64 != 10) - return -1; - bar64= __sync_val_compare_and_swap(&bar64, foo, 15); - if (bar64) - return -1; - return 0; - }" - HAVE_GCC_ATOMIC_BUILTINS) -ELSE() - MESSAGE(FATAL_ERROR "${WITH_ATOMIC_OPS} is not a valid value for WITH_ATOMIC_OPS!") -ENDIF() -ENDIF() - -SET(WITH_ATOMIC_LOCKS "${WITH_ATOMIC_LOCKS}" CACHE STRING -"Implement atomic operations using pthread rwlocks or atomic CPU -instructions for multi-processor or uniprocessor -configuration. By default gcc built-in sync functions are used, -if available and 'smp' configuration otherwise.") -MARK_AS_ADVANCED(WITH_ATOMIC_LOCKS MY_ATOMIC_MODE_RWLOCK MY_ATOMIC_MODE_DUMMY) - -IF(WITH_VALGRIND) - CHECK_INCLUDE_FILES("valgrind/memcheck.h;valgrind/valgrind.h" - HAVE_VALGRIND_HEADERS) - IF(HAVE_VALGRIND_HEADERS) - SET(HAVE_VALGRIND 1) - ENDIF() -ENDIF() - -#-------------------------------------------------------------------- -# Check for IPv6 support -#-------------------------------------------------------------------- -CHECK_INCLUDE_FILE(netinet/in6.h HAVE_NETINET_IN6_H) - -IF(UNIX) - SET(CMAKE_EXTRA_INCLUDE_FILES sys/types.h netinet/in.h sys/socket.h) - IF(HAVE_NETINET_IN6_H) - SET(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES} netinet/in6.h) - ENDIF() -ELSEIF(WIN32) - SET(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES} winsock2.h ws2ipdef.h) -ENDIF() - -MY_CHECK_STRUCT_SIZE("sockaddr_in6" SOCKADDR_IN6) -MY_CHECK_STRUCT_SIZE("in6_addr" IN6_ADDR) - -IF(HAVE_STRUCT_SOCKADDR_IN6 OR HAVE_STRUCT_IN6_ADDR) - SET(HAVE_IPV6 TRUE CACHE INTERNAL "") -ENDIF() - - -# Check for sockaddr_storage.ss_family -# It is called differently under OS400 and older AIX - -CHECK_STRUCT_HAS_MEMBER("struct sockaddr_storage" - ss_family "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKADDR_STORAGE_SS_FAMILY) -IF(NOT HAVE_SOCKADDR_STORAGE_SS_FAMILY) - CHECK_STRUCT_HAS_MEMBER("struct sockaddr_storage" - __ss_family "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKADDR_STORAGE___SS_FAMILY) - IF(HAVE_SOCKADDR_STORAGE___SS_FAMILY) - SET(ss_family __ss_family) - ENDIF() -ENDIF() - -# -# Check if struct sockaddr_in::sin_len is available. -# - -CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in" sin_len - "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKADDR_IN_SIN_LEN) - -# -# Check if struct sockaddr_in6::sin6_len is available. -# - -CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in6" sin6_len - "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKADDR_IN6_SIN6_LEN) - -SET(CMAKE_EXTRA_INCLUDE_FILES) - -CHECK_STRUCT_HAS_MEMBER("struct dirent" d_ino "dirent.h" STRUCT_DIRENT_HAS_D_INO) -CHECK_STRUCT_HAS_MEMBER("struct dirent" d_namlen "dirent.h" STRUCT_DIRENT_HAS_D_NAMLEN) -SET(SPRINTF_RETURNS_INT 1) diff --git a/deps/mysqllite/dbug/dbug.c b/deps/mysqllite/dbug/dbug.c deleted file mode 100644 index 2c06eeff95aa00..00000000000000 --- a/deps/mysqllite/dbug/dbug.c +++ /dev/null @@ -1,2284 +0,0 @@ -/****************************************************************************** - * * - * N O T I C E * - * * - * Copyright Abandoned, 1987, Fred Fish * - * * - * * - * This previously copyrighted work has been placed into the public * - * domain by the author and may be freely used for any purpose, * - * private or commercial. * - * * - * Because of the number of inquiries I was receiving about the use * - * of this product in commercially developed works I have decided to * - * simply make it public domain to further its unrestricted use. I * - * specifically would be most happy to see this material become a * - * part of the standard Unix distributions by AT&T and the Berkeley * - * Computer Science Research Group, and a standard part of the GNU * - * system from the Free Software Foundation. * - * * - * I would appreciate it, as a courtesy, if this notice is left in * - * all copies and derivative works. Thank you. * - * * - * The author makes no warranty of any kind with respect to this * - * product and explicitly disclaims any implied warranties of mer- * - * chantability or fitness for any particular purpose. * - * * - ****************************************************************************** - */ - -/* - * FILE - * - * dbug.c runtime support routines for dbug package - * - * SCCS - * - * @(#)dbug.c 1.25 7/25/89 - * - * DESCRIPTION - * - * These are the runtime support routines for the dbug package. - * The dbug package has two main components; the user include - * file containing various macro definitions, and the runtime - * support routines which are called from the macro expansions. - * - * Externally visible functions in the runtime support module - * use the naming convention pattern "_db_xx...xx_", thus - * they are unlikely to collide with user defined function names. - * - * AUTHOR(S) - * - * Fred Fish (base code) - * Enhanced Software Technologies, Tempe, AZ - * asuvax!mcdphx!estinc!fnf - * - * Binayak Banerjee (profiling enhancements) - * seismo!bpa!sjuvax!bbanerje - * - * Michael Widenius: - * DBUG_DUMP - To dump a block of memory. - * PUSH_FLAG "O" - To be used insted of "o" if we - * want flushing after each write - * PUSH_FLAG "A" - as 'O', but we will append to the out file instead - * of creating a new one. - * Check of malloc on entry/exit (option "S") - * - * Sergei Golubchik: - * DBUG_EXECUTE_IF - * incremental mode (-#+t:-d,info ...) - * DBUG_SET, _db_explain_ - * thread-local settings - * negative lists (-#-d,info => everything but "info") - * - * function/ syntax - * (the logic is - think of a call stack as of a path. - * "function" means only this function, "function/" means the hierarchy. - * in the future, filters like function1/function2 could be supported. - * following this logic glob(7) wildcards are supported.) - * - */ - -/* - We can't have SAFE_MUTEX defined here as this will cause recursion - in pthread_mutex_lock -*/ - -#undef SAFE_MUTEX -#include -#include -#include - -#ifdef HAVE_FNMATCH_H -#include -#else -#define fnmatch(A,B,C) strcmp(A,B) -#endif - -#if defined(__WIN__) -#include -#endif - -#ifndef DBUG_OFF - - -/* - * Manifest constants which may be "tuned" if desired. - */ - -#define PRINTBUF 1024 /* Print buffer size */ -#define INDENT 2 /* Indentation per trace level */ -#define MAXDEPTH 200 /* Maximum trace depth default */ - -/* - * The following flags are used to determine which - * capabilities the user has enabled with the settings - * push macro. - * - * TRACE_ON is also used in _db_stack_frame_->level - * (until we add flags to _db_stack_frame_, increasing it by 4 bytes) - */ - -#define DEBUG_ON (1 << 1) /* Debug enabled */ -#define FILE_ON (1 << 2) /* File name print enabled */ -#define LINE_ON (1 << 3) /* Line number print enabled */ -#define DEPTH_ON (1 << 4) /* Function nest level print enabled */ -#define PROCESS_ON (1 << 5) /* Process name print enabled */ -#define NUMBER_ON (1 << 6) /* Number each line of output */ -#define PROFILE_ON (1 << 7) /* Print out profiling code */ -#define PID_ON (1 << 8) /* Identify each line with process id */ -#define TIMESTAMP_ON (1 << 9) /* timestamp every line of output */ -#define FLUSH_ON_WRITE (1 << 10) /* Flush on every write */ -#define OPEN_APPEND (1 << 11) /* Open for append */ -#define TRACE_ON ((uint)1 << 31) /* Trace enabled. MUST be the highest bit!*/ - -#define TRACING (cs->stack->flags & TRACE_ON) -#define DEBUGGING (cs->stack->flags & DEBUG_ON) -#define PROFILING (cs->stack->flags & PROFILE_ON) - -/* - * Typedefs to make things more obvious. - */ - -#define BOOLEAN my_bool - -/* - * Make it easy to change storage classes if necessary. - */ - -#define IMPORT extern /* Names defined externally */ -#define EXPORT /* Allocated here, available globally */ -#define AUTO auto /* Names to be allocated on stack */ -#define REGISTER register /* Names to be placed in registers */ - -/* - * The default file for profiling. Could also add another flag - * (G?) which allowed the user to specify this. - * - * If the automatic variables get allocated on the stack in - * reverse order from their declarations, then define AUTOS_REVERSE to 1. - * This is used by the code that keeps track of stack usage. For - * forward allocation, the difference in the dbug frame pointers - * represents stack used by the callee function. For reverse allocation, - * the difference represents stack used by the caller function. - * - */ - -#define PROF_FILE "dbugmon.out" -#define PROF_EFMT "E\t%ld\t%s\n" -#define PROF_SFMT "S\t%lx\t%lx\t%s\n" -#define PROF_XFMT "X\t%ld\t%s\n" - -#ifdef M_I386 /* predefined by xenix 386 compiler */ -#define AUTOS_REVERSE 1 -#else -#define AUTOS_REVERSE 0 -#endif - -/* - * Externally supplied functions. - */ - -#ifndef HAVE_PERROR -static void perror(); /* Fake system/library error print routine */ -#endif - -/* - * The user may specify a list of functions to trace or - * debug. These lists are kept in a linear linked list, - * a very simple implementation. - */ - -struct link { - struct link *next_link; /* Pointer to the next link */ - char flags; - char str[1]; /* Pointer to link's contents */ -}; - -/* flags for struct link and return flags of InList */ -#define SUBDIR 1 /* this MUST be 1 */ -#define INCLUDE 2 -#define EXCLUDE 4 -/* this is not a struct link flag, but only a return flags of InList */ -#define MATCHED 65536 -#define NOT_MATCHED 0 - -/* - * Debugging settings can be pushed or popped off of a - * stack which is implemented as a linked list. Note - * that the head of the list is the current settings and the - * stack is pushed by adding a new settings to the head of the - * list or popped by removing the first link. - * - * Note: if out_file is NULL, the other fields are not initialized at all! - */ - -struct settings { - uint flags; /* Current settings flags */ - uint maxdepth; /* Current maximum trace depth */ - uint delay; /* Delay after each output line */ - uint sub_level; /* Sub this from code_state->level */ - FILE *out_file; /* Current output stream */ - FILE *prof_file; /* Current profiling stream */ - char name[FN_REFLEN]; /* Name of output file */ - struct link *functions; /* List of functions */ - struct link *p_functions; /* List of profiled functions */ - struct link *keywords; /* List of debug keywords */ - struct link *processes; /* List of process names */ - struct settings *next; /* Next settings in the list */ -}; - -#define is_shared(S, V) ((S)->next && (S)->next->V == (S)->V) - -/* - * Local variables not seen by user. - */ - - -static BOOLEAN init_done= FALSE; /* Set to TRUE when initialization done */ -static struct settings init_settings; -static const char *db_process= 0;/* Pointer to process name; argv[0] */ -my_bool _dbug_on_= TRUE; /* FALSE if no debugging at all */ - -typedef struct _db_code_state_ { - const char *process; /* Pointer to process name; usually argv[0] */ - const char *func; /* Name of current user function */ - const char *file; /* Name of current user file */ - struct _db_stack_frame_ *framep; /* Pointer to current frame */ - struct settings *stack; /* debugging settings */ - const char *jmpfunc; /* Remember current function for setjmp */ - const char *jmpfile; /* Remember current file for setjmp */ - int lineno; /* Current debugger output line number */ - uint level; /* Current function nesting level */ - int jmplevel; /* Remember nesting level at setjmp() */ - -/* - * The following variables are used to hold the state information - * between the call to _db_pargs_() and _db_doprnt_(), during - * expansion of the DBUG_PRINT macro. This is the only macro - * that currently uses these variables. - * - * These variables are currently used only by _db_pargs_() and - * _db_doprnt_(). - */ - - uint u_line; /* User source code line number */ - int locked; /* If locked with _db_lock_file_ */ - const char *u_keyword; /* Keyword for current macro */ -} CODE_STATE; - -/* - The test below is so we could call functions with DBUG_ENTER before - my_thread_init(). -*/ -#define get_code_state_if_not_set_or_return if (!cs && !((cs=code_state()))) return -#define get_code_state_or_return if (!((cs=code_state()))) return - - /* Handling lists */ -#define ListAdd(A,B,C) ListAddDel(A,B,C,INCLUDE) -#define ListDel(A,B,C) ListAddDel(A,B,C,EXCLUDE) -static struct link *ListAddDel(struct link *, const char *, const char *, int); -static struct link *ListCopy(struct link *); -static int InList(struct link *linkp,const char *cp); -static uint ListFlags(struct link *linkp); -static void FreeList(struct link *linkp); - - /* OpenClose debug output stream */ -static void DBUGOpenFile(CODE_STATE *,const char *, const char *, int); -static void DBUGCloseFile(CODE_STATE *cs, FILE *fp); - /* Push current debug settings */ -static void PushState(CODE_STATE *cs); - /* Free memory associated with debug state. */ -static void FreeState (CODE_STATE *cs, struct settings *state, int free_state); - /* Test for tracing enabled */ -static int DoTrace(CODE_STATE *cs); -/* - return values of DoTrace. - Can also be used as bitmask: ret & DO_TRACE -*/ -#define DO_TRACE 1 -#define DONT_TRACE 2 -#define ENABLE_TRACE 3 -#define DISABLE_TRACE 4 - - /* Test to see if file is writable */ -#if defined(HAVE_ACCESS) -static BOOLEAN Writable(const char *pathname); - /* Change file owner and group */ -static void ChangeOwner(CODE_STATE *cs, char *pathname); - /* Allocate memory for runtime support */ -#endif - -static void DoPrefix(CODE_STATE *cs, uint line); - -static char *DbugMalloc(size_t size); -static const char *BaseName(const char *pathname); -static void Indent(CODE_STATE *cs, int indent); -static void DbugFlush(CODE_STATE *); -static void DbugExit(const char *why); -static const char *DbugStrTok(const char *s); -static void DbugVfprintf(FILE *stream, const char* format, va_list args); - -/* - * Miscellaneous printf format strings. - */ - -#define ERR_MISSING_RETURN "missing DBUG_RETURN or DBUG_VOID_RETURN macro in function \"%s\"\n" -#define ERR_OPEN "%s: can't open debug output stream \"%s\": " -#define ERR_CLOSE "%s: can't close debug file: " -#define ERR_ABORT "%s: debugger aborting because %s\n" - -/* - * Macros and defines for testing file accessibility under UNIX and MSDOS. - */ - -#undef EXISTS -#if !defined(HAVE_ACCESS) -#define EXISTS(pathname) (FALSE) /* Assume no existance */ -#define Writable(name) (TRUE) -#else -#define EXISTS(pathname) (access(pathname, F_OK) == 0) -#define WRITABLE(pathname) (access(pathname, W_OK) == 0) -#endif - - -/* -** Macros to allow dbugging with threads -*/ - -#include -static pthread_mutex_t THR_LOCK_dbug; - -static CODE_STATE *code_state(void) -{ - CODE_STATE *cs, **cs_ptr; - - /* - _dbug_on_ is reset if we don't plan to use any debug commands at all and - we want to run on maximum speed - */ - if (!_dbug_on_) - return 0; - - if (!init_done) - { - init_done=TRUE; - pthread_mutex_init(&THR_LOCK_dbug, NULL); - bzero(&init_settings, sizeof(init_settings)); - init_settings.out_file=stderr; - init_settings.flags=OPEN_APPEND; - } - - if (!(cs_ptr= (CODE_STATE**) my_thread_var_dbug())) - return 0; /* Thread not initialised */ - if (!(cs= *cs_ptr)) - { - cs=(CODE_STATE*) DbugMalloc(sizeof(*cs)); - bzero((uchar*) cs,sizeof(*cs)); - cs->process= db_process ? db_process : "dbug"; - cs->func="?func"; - cs->file="?file"; - cs->stack=&init_settings; - *cs_ptr= cs; - } - return cs; -} - -/* - * Translate some calls among different systems. - */ - -#ifdef HAVE_SLEEP -/* sleep() wants seconds */ -#define Delay(A) sleep(((uint) A)/10) -#else -#define Delay(A) (0) -#endif - -/* - * FUNCTION - * - * _db_process_ give the name to the current process/thread - * - * SYNOPSIS - * - * VOID _process_(name) - * char *name; - * - */ - -void _db_process_(const char *name) -{ - CODE_STATE *cs; - - if (!db_process) - db_process= name; - - get_code_state_or_return; - cs->process= name; -} - -/* - * FUNCTION - * - * DbugParse parse control string and set current debugger settings - * - * DESCRIPTION - * - * Given pointer to a debug control string in "control", - * parses the control string, and sets - * up a current debug settings. - * - * The debug control string is a sequence of colon separated fields - * as follows: - * - * [+]::...: - * - * Each field consists of a mandatory flag character followed by - * an optional "," and comma separated list of modifiers: - * - * [sign]flag[,modifier,modifier,...,modifier] - * - * See the manual for the list of supported signs, flags, and modifiers - * - * For convenience, any leading "-#" is stripped off. - * - * RETURN - * 1 - a list of functions ("f" flag) was possibly changed - * 0 - a list of functions was not changed - */ - -int DbugParse(CODE_STATE *cs, const char *control) -{ - const char *end; - int rel, f_used=0; - struct settings *stack; - - stack= cs->stack; - - if (control[0] == '-' && control[1] == '#') - control+=2; - - rel= control[0] == '+' || control[0] == '-'; - if ((!rel || (!stack->out_file && !stack->next))) - { - /* Free memory associated with the state before resetting its members */ - FreeState(cs, stack, 0); - stack->flags= 0; - stack->delay= 0; - stack->maxdepth= 0; - stack->sub_level= 0; - stack->out_file= stderr; - stack->prof_file= NULL; - stack->functions= NULL; - stack->p_functions= NULL; - stack->keywords= NULL; - stack->processes= NULL; - } - else if (!stack->out_file) - { - stack->flags= stack->next->flags; - stack->delay= stack->next->delay; - stack->maxdepth= stack->next->maxdepth; - stack->sub_level= stack->next->sub_level; - strcpy(stack->name, stack->next->name); - stack->prof_file= stack->next->prof_file; - if (stack->next == &init_settings) - { - /* - Never share with the global parent - it can change under your feet. - - Reset out_file to stderr to prevent sharing of trace files between - global and session settings. - */ - stack->out_file= stderr; - stack->functions= ListCopy(init_settings.functions); - stack->p_functions= ListCopy(init_settings.p_functions); - stack->keywords= ListCopy(init_settings.keywords); - stack->processes= ListCopy(init_settings.processes); - } - else - { - stack->out_file= stack->next->out_file; - stack->functions= stack->next->functions; - stack->p_functions= stack->next->p_functions; - stack->keywords= stack->next->keywords; - stack->processes= stack->next->processes; - } - } - - end= DbugStrTok(control); - while (control < end) - { - int c, sign= (*control == '+') ? 1 : (*control == '-') ? -1 : 0; - if (sign) control++; - c= *control++; - if (*control == ',') control++; - /* XXX when adding new cases here, don't forget _db_explain_ ! */ - switch (c) { - case 'd': - if (sign < 0 && control == end) - { - if (!is_shared(stack, keywords)) - FreeList(stack->keywords); - stack->keywords=NULL; - stack->flags &= ~DEBUG_ON; - break; - } - if (rel && is_shared(stack, keywords)) - stack->keywords= ListCopy(stack->keywords); - if (sign < 0) - { - if (DEBUGGING) - stack->keywords= ListDel(stack->keywords, control, end); - break; - } - stack->keywords= ListAdd(stack->keywords, control, end); - stack->flags |= DEBUG_ON; - break; - case 'D': - stack->delay= atoi(control); - break; - case 'f': - f_used= 1; - if (sign < 0 && control == end) - { - if (!is_shared(stack,functions)) - FreeList(stack->functions); - stack->functions=NULL; - break; - } - if (rel && is_shared(stack,functions)) - stack->functions= ListCopy(stack->functions); - if (sign < 0) - stack->functions= ListDel(stack->functions, control, end); - else - stack->functions= ListAdd(stack->functions, control, end); - break; - case 'F': - if (sign < 0) - stack->flags &= ~FILE_ON; - else - stack->flags |= FILE_ON; - break; - case 'i': - if (sign < 0) - stack->flags &= ~PID_ON; - else - stack->flags |= PID_ON; - break; - case 'L': - if (sign < 0) - stack->flags &= ~LINE_ON; - else - stack->flags |= LINE_ON; - break; - case 'n': - if (sign < 0) - stack->flags &= ~DEPTH_ON; - else - stack->flags |= DEPTH_ON; - break; - case 'N': - if (sign < 0) - stack->flags &= ~NUMBER_ON; - else - stack->flags |= NUMBER_ON; - break; - case 'A': - case 'O': - stack->flags |= FLUSH_ON_WRITE; - /* fall through */ - case 'a': - case 'o': - if (sign < 0) - { - if (!is_shared(stack, out_file)) - DBUGCloseFile(cs, stack->out_file); - stack->flags &= ~FLUSH_ON_WRITE; - stack->out_file= stderr; - break; - } - if (c == 'a' || c == 'A') - stack->flags |= OPEN_APPEND; - else - stack->flags &= ~OPEN_APPEND; - if (control != end) - DBUGOpenFile(cs, control, end, stack->flags & OPEN_APPEND); - else - DBUGOpenFile(cs, "-",0,0); - break; - case 'p': - if (sign < 0 && control == end) - { - if (!is_shared(stack,processes)) - FreeList(stack->processes); - stack->processes=NULL; - break; - } - if (rel && is_shared(stack, processes)) - stack->processes= ListCopy(stack->processes); - if (sign < 0) - stack->processes= ListDel(stack->processes, control, end); - else - stack->processes= ListAdd(stack->processes, control, end); - break; - case 'P': - if (sign < 0) - stack->flags &= ~PROCESS_ON; - else - stack->flags |= PROCESS_ON; - break; - case 'r': - stack->sub_level= cs->level; - break; - case 't': - if (sign < 0) - { - if (control != end) - stack->maxdepth-= atoi(control); - else - stack->maxdepth= 0; - } - else - { - if (control != end) - stack->maxdepth+= atoi(control); - else - stack->maxdepth= MAXDEPTH; - } - if (stack->maxdepth > 0) - stack->flags |= TRACE_ON; - else - stack->flags &= ~TRACE_ON; - break; - case 'T': - if (sign < 0) - stack->flags &= ~TIMESTAMP_ON; - else - stack->flags |= TIMESTAMP_ON; - break; - } - if (!*end) - break; - control=end+1; - end= DbugStrTok(control); - } - return !rel || f_used; -} - -#define framep_trace_flag(cs, frp) (frp ? \ - frp->level & TRACE_ON : \ - (ListFlags(cs->stack->functions) & INCLUDE) ? \ - 0 : (uint)TRACE_ON) - -void FixTraceFlags_helper(CODE_STATE *cs, const char *func, - struct _db_stack_frame_ *framep) -{ - if (framep->prev) - FixTraceFlags_helper(cs, framep->func, framep->prev); - - cs->func= func; - cs->level= framep->level & ~TRACE_ON; - framep->level= cs->level | framep_trace_flag(cs, framep->prev); - /* - we don't set cs->framep correctly, even though DoTrace uses it. - It's ok, because cs->framep may only affect DO_TRACE/DONT_TRACE return - values, but we ignore them here anyway - */ - switch(DoTrace(cs)) { - case ENABLE_TRACE: - framep->level|= TRACE_ON; - break; - case DISABLE_TRACE: - framep->level&= ~TRACE_ON; - break; - } -} - -#define fflags(cs) cs->stack->out_file ? ListFlags(cs->stack->functions) : TRACE_ON; - -void FixTraceFlags(uint old_fflags, CODE_STATE *cs) -{ - const char *func; - uint new_fflags, traceon, level; - struct _db_stack_frame_ *framep; - - /* - first (a.k.a. safety) check: - if we haven't started tracing yet, no call stack at all - we're safe. - */ - framep=cs->framep; - if (framep == 0) - return; - - /* - Ok, the tracing has started, call stack isn't empty. - - second check: does the new list have a SUBDIR rule ? - */ - new_fflags=fflags(cs); - if (new_fflags & SUBDIR) - goto yuck; - - /* - Ok, new list doesn't use SUBDIR. - - third check: we do NOT need to re-scan if - neither old nor new lists used SUBDIR flag and if a default behavior - (whether an unlisted function is traced) hasn't changed. - Default behavior depends on whether there're INCLUDE elements in the list. - */ - if (!(old_fflags & SUBDIR) && !((new_fflags^old_fflags) & INCLUDE)) - return; - - /* - Ok, old list may've used SUBDIR, or defaults could've changed. - - fourth check: are we inside a currently active SUBDIR rule ? - go up the call stack, if TRACE_ON flag ever changes its value - we are. - */ - for (traceon=framep->level; framep; framep=framep->prev) - if ((traceon ^ framep->level) & TRACE_ON) - goto yuck; - - /* - Ok, TRACE_ON flag doesn't change in the call stack. - - fifth check: but is the top-most value equal to a default one ? - */ - if (((traceon & TRACE_ON) != 0) == ((new_fflags & INCLUDE) == 0)) - return; - -yuck: - /* - Yuck! function list was changed, and one of the currently active rules - was possibly affected. For example, a tracing could've been enabled or - disabled for a function somewhere up the call stack. - To react correctly, we must go up the call stack all the way to - the top and re-match rules to set TRACE_ON bit correctly. - - We must traverse the stack forwards, not backwards. - That's what a recursive helper is doing. - It'll destroy two CODE_STATE fields, save them now. - */ - func= cs->func; - level= cs->level; - FixTraceFlags_helper(cs, func, cs->framep); - /* now we only need to restore CODE_STATE fields, and we're done */ - cs->func= func; - cs->level= level; -} - -/* - * FUNCTION - * - * _db_set_ set current debugger settings - * - * SYNOPSIS - * - * VOID _db_set_(control) - * char *control; - * - * DESCRIPTION - * - * Given pointer to a debug control string in "control", - * parses the control string, and sets up a current debug - * settings. Pushes a new debug settings if the current is - * set to the initial debugger settings. - * - */ - -void _db_set_(const char *control) -{ - CODE_STATE *cs; - uint old_fflags; - get_code_state_or_return; - old_fflags=fflags(cs); - if (cs->stack == &init_settings) - PushState(cs); - if (DbugParse(cs, control)) - FixTraceFlags(old_fflags, cs); -} - -/* - * FUNCTION - * - * _db_push_ push current debugger settings and set up new one - * - * SYNOPSIS - * - * VOID _db_push_(control) - * char *control; - * - * DESCRIPTION - * - * Given pointer to a debug control string in "control", pushes - * the current debug settings, parses the control string, and sets - * up a new debug settings with DbugParse() - * - */ - -void _db_push_(const char *control) -{ - CODE_STATE *cs; - uint old_fflags; - get_code_state_or_return; - old_fflags=fflags(cs); - PushState(cs); - if (DbugParse(cs, control)) - FixTraceFlags(old_fflags, cs); -} - - -/** - Returns TRUE if session-local settings have been set. -*/ - -int _db_is_pushed_() -{ - CODE_STATE *cs= NULL; - get_code_state_or_return FALSE; - return (cs->stack != &init_settings); -} - -/* - * FUNCTION - * - * _db_set_init_ set initial debugger settings - * - * SYNOPSIS - * - * VOID _db_set_init_(control) - * char *control; - * - * DESCRIPTION - * see _db_set_ - * - */ - -void _db_set_init_(const char *control) -{ - CODE_STATE tmp_cs; - bzero((uchar*) &tmp_cs, sizeof(tmp_cs)); - tmp_cs.stack= &init_settings; - tmp_cs.process= db_process ? db_process : "dbug"; - DbugParse(&tmp_cs, control); -} - -/* - * FUNCTION - * - * _db_pop_ pop the debug stack - * - * DESCRIPTION - * - * Pops the debug stack, returning the debug settings to its - * condition prior to the most recent _db_push_ invocation. - * Note that the pop will fail if it would remove the last - * valid settings from the stack. This prevents user errors - * in the push/pop sequence from screwing up the debugger. - * Maybe there should be some kind of warning printed if the - * user tries to pop too many states. - * - */ - -void _db_pop_() -{ - struct settings *discard; - uint old_fflags; - CODE_STATE *cs; - - get_code_state_or_return; - - discard= cs->stack; - if (discard != &init_settings) - { - old_fflags=fflags(cs); - cs->stack= discard->next; - FreeState(cs, discard, 1); - FixTraceFlags(old_fflags, cs); - } -} - -/* - * FUNCTION - * - * _db_explain_ generates 'control' string for the current settings - * - * RETURN - * 0 - ok - * 1 - buffer too short, output truncated - * - */ - -/* helper macros */ -#define char_to_buf(C) do { \ - *buf++=(C); \ - if (buf >= end) goto overflow; \ - } while (0) -#define str_to_buf(S) do { \ - char_to_buf(','); \ - buf=strnmov(buf, (S), len+1); \ - if (buf >= end) goto overflow; \ - } while (0) -#define list_to_buf(l, f) do { \ - struct link *listp=(l); \ - while (listp) \ - { \ - if (listp->flags & (f)) \ - { \ - str_to_buf(listp->str); \ - if (listp->flags & SUBDIR) \ - char_to_buf('/'); \ - } \ - listp=listp->next_link; \ - } \ - } while (0) -#define int_to_buf(i) do { \ - char b[50]; \ - int10_to_str((i), b, 10); \ - str_to_buf(b); \ - } while (0) -#define colon_to_buf do { \ - if (buf != start) char_to_buf(':'); \ - } while(0) -#define op_int_to_buf(C, val, def) do { \ - if ((val) != (def)) \ - { \ - colon_to_buf; \ - char_to_buf((C)); \ - int_to_buf(val); \ - } \ - } while (0) -#define op_intf_to_buf(C, val, def, cond) do { \ - if ((cond)) \ - { \ - colon_to_buf; \ - char_to_buf((C)); \ - if ((val) != (def)) int_to_buf(val); \ - } \ - } while (0) -#define op_str_to_buf(C, val, cond) do { \ - if ((cond)) \ - { \ - char *s=(val); \ - colon_to_buf; \ - char_to_buf((C)); \ - if (*s) str_to_buf(s); \ - } \ - } while (0) -#define op_list_to_buf(C, val, cond) do { \ - if ((cond)) \ - { \ - int f=ListFlags(val); \ - colon_to_buf; \ - char_to_buf((C)); \ - if (f & INCLUDE) \ - list_to_buf(val, INCLUDE); \ - if (f & EXCLUDE) \ - { \ - colon_to_buf; \ - char_to_buf('-'); \ - char_to_buf((C)); \ - list_to_buf(val, EXCLUDE); \ - } \ - } \ - } while (0) -#define op_bool_to_buf(C, cond) do { \ - if ((cond)) \ - { \ - colon_to_buf; \ - char_to_buf((C)); \ - } \ - } while (0) - -int _db_explain_ (CODE_STATE *cs, char *buf, size_t len) -{ - char *start=buf, *end=buf+len-4; - - get_code_state_if_not_set_or_return *buf=0; - - op_list_to_buf('d', cs->stack->keywords, DEBUGGING); - op_int_to_buf ('D', cs->stack->delay, 0); - op_list_to_buf('f', cs->stack->functions, cs->stack->functions); - op_bool_to_buf('F', cs->stack->flags & FILE_ON); - op_bool_to_buf('i', cs->stack->flags & PID_ON); - op_list_to_buf('g', cs->stack->p_functions, PROFILING); - op_bool_to_buf('L', cs->stack->flags & LINE_ON); - op_bool_to_buf('n', cs->stack->flags & DEPTH_ON); - op_bool_to_buf('N', cs->stack->flags & NUMBER_ON); - op_str_to_buf( - ((cs->stack->flags & FLUSH_ON_WRITE ? 0 : 32) | - (cs->stack->flags & OPEN_APPEND ? 'A' : 'O')), - cs->stack->name, cs->stack->out_file != stderr); - op_list_to_buf('p', cs->stack->processes, cs->stack->processes); - op_bool_to_buf('P', cs->stack->flags & PROCESS_ON); - op_bool_to_buf('r', cs->stack->sub_level != 0); - op_intf_to_buf('t', cs->stack->maxdepth, MAXDEPTH, TRACING); - op_bool_to_buf('T', cs->stack->flags & TIMESTAMP_ON); - - *buf= '\0'; - return 0; - -overflow: - *end++= '.'; - *end++= '.'; - *end++= '.'; - *end= '\0'; - return 1; -} - -#undef char_to_buf -#undef str_to_buf -#undef list_to_buf -#undef int_to_buf -#undef colon_to_buf -#undef op_int_to_buf -#undef op_intf_to_buf -#undef op_str_to_buf -#undef op_list_to_buf -#undef op_bool_to_buf - -/* - * FUNCTION - * - * _db_explain_init_ explain initial debugger settings - * - * DESCRIPTION - * see _db_explain_ - */ - -int _db_explain_init_(char *buf, size_t len) -{ - CODE_STATE cs; - bzero((uchar*) &cs,sizeof(cs)); - cs.stack=&init_settings; - return _db_explain_(&cs, buf, len); -} - -/* - * FUNCTION - * - * _db_enter_ process entry point to user function - * - * SYNOPSIS - * - * VOID _db_enter_(_func_, _file_, _line_, _stack_frame_) - * char *_func_; points to current function name - * char *_file_; points to current file name - * int _line_; called from source line number - * struct _db_stack_frame_ allocated on the caller's stack - * - * DESCRIPTION - * - * Called at the beginning of each user function to tell - * the debugger that a new function has been entered. - * Note that the pointers to the previous user function - * name and previous user file name are stored on the - * caller's stack (this is why the ENTER macro must be - * the first "executable" code in a function, since it - * allocates these storage locations). The previous nesting - * level is also stored on the callers stack for internal - * self consistency checks. - * - * Also prints a trace line if tracing is enabled and - * increments the current function nesting depth. - * - * Note that this mechanism allows the debugger to know - * what the current user function is at all times, without - * maintaining an internal stack for the function names. - * - */ - -void _db_enter_(const char *_func_, const char *_file_, - uint _line_, struct _db_stack_frame_ *_stack_frame_) -{ - int save_errno; - CODE_STATE *cs; - if (!((cs=code_state()))) - { - _stack_frame_->level= 0; /* Set to avoid valgrind warnings if dbug is enabled later */ - _stack_frame_->prev= 0; - return; - } - save_errno= errno; - - _stack_frame_->func= cs->func; - _stack_frame_->file= cs->file; - cs->func= _func_; - cs->file= _file_; - _stack_frame_->prev= cs->framep; - _stack_frame_->level= ++cs->level | framep_trace_flag(cs, cs->framep); - cs->framep= _stack_frame_; - - switch (DoTrace(cs)) { - case ENABLE_TRACE: - cs->framep->level|= TRACE_ON; - if (!TRACING) break; - /* fall through */ - case DO_TRACE: - if (TRACING) - { - if (!cs->locked) - pthread_mutex_lock(&THR_LOCK_dbug); - DoPrefix(cs, _line_); - Indent(cs, cs->level); - (void) fprintf(cs->stack->out_file, ">%s\n", cs->func); - DbugFlush(cs); /* This does a unlock */ - } - break; - case DISABLE_TRACE: - cs->framep->level&= ~TRACE_ON; - /* fall through */ - case DONT_TRACE: - break; - } - errno=save_errno; -} - -/* - * FUNCTION - * - * _db_return_ process exit from user function - * - * SYNOPSIS - * - * VOID _db_return_(_line_, _stack_frame_) - * int _line_; current source line number - * struct _db_stack_frame_ allocated on the caller's stack - * - * DESCRIPTION - * - * Called just before user function executes an explicit or implicit - * return. Prints a trace line if trace is enabled, decrements - * the current nesting level, and restores the current function and - * file names from the defunct function's stack. - * - */ - -void _db_return_(uint _line_, struct _db_stack_frame_ *_stack_frame_) -{ - int save_errno=errno; - uint _slevel_= _stack_frame_->level & ~TRACE_ON; - CODE_STATE *cs; - get_code_state_or_return; - - if (cs->framep != _stack_frame_) - { - char buf[512]; - my_snprintf(buf, sizeof(buf), ERR_MISSING_RETURN, cs->func); - DbugExit(buf); - } - - if (DoTrace(cs) & DO_TRACE) - { - if (TRACING) - { - if (!cs->locked) - pthread_mutex_lock(&THR_LOCK_dbug); - DoPrefix(cs, _line_); - Indent(cs, cs->level); - (void) fprintf(cs->stack->out_file, "<%s\n", cs->func); - DbugFlush(cs); - } - } - /* - Check to not set level < 0. This can happen if DBUG was disabled when - function was entered and enabled in function. - */ - cs->level= _slevel_ != 0 ? _slevel_ - 1 : 0; - cs->func= _stack_frame_->func; - cs->file= _stack_frame_->file; - if (cs->framep != NULL) - cs->framep= cs->framep->prev; - errno=save_errno; -} - - -/* - * FUNCTION - * - * _db_pargs_ log arguments for subsequent use by _db_doprnt_() - * - * SYNOPSIS - * - * VOID _db_pargs_(_line_, keyword) - * int _line_; - * char *keyword; - * - * DESCRIPTION - * - * The new universal printing macro DBUG_PRINT, which replaces - * all forms of the DBUG_N macros, needs two calls to runtime - * support routines. The first, this function, remembers arguments - * that are used by the subsequent call to _db_doprnt_(). - * - */ - -void _db_pargs_(uint _line_, const char *keyword) -{ - CODE_STATE *cs; - get_code_state_or_return; - cs->u_line= _line_; - cs->u_keyword= keyword; -} - - -/* - * FUNCTION - * - * _db_doprnt_ handle print of debug lines - * - * SYNOPSIS - * - * VOID _db_doprnt_(format, va_alist) - * char *format; - * va_dcl; - * - * DESCRIPTION - * - * When invoked via one of the DBUG macros, tests the current keyword - * set by calling _db_pargs_() to see if that macro has been selected - * for processing via the debugger control string, and if so, handles - * printing of the arguments via the format string. The line number - * of the DBUG macro in the source is found in u_line. - * - * Note that the format string SHOULD NOT include a terminating - * newline, this is supplied automatically. - * - */ - -#include - -void _db_doprnt_(const char *format,...) -{ - va_list args; - CODE_STATE *cs; - get_code_state_or_return; - - va_start(args,format); - - if (_db_keyword_(cs, cs->u_keyword, 0)) - { - int save_errno=errno; - if (!cs->locked) - pthread_mutex_lock(&THR_LOCK_dbug); - DoPrefix(cs, cs->u_line); - if (TRACING) - Indent(cs, cs->level + 1); - else - (void) fprintf(cs->stack->out_file, "%s: ", cs->func); - (void) fprintf(cs->stack->out_file, "%s: ", cs->u_keyword); - DbugVfprintf(cs->stack->out_file, format, args); - DbugFlush(cs); - errno=save_errno; - } - va_end(args); -} - -/* - * This function is intended as a - * vfprintf clone with consistent, platform independent output for - * problematic formats like %p, %zd and %lld. - */ -static void DbugVfprintf(FILE *stream, const char* format, va_list args) -{ - char cvtbuf[1024]; - (void) my_vsnprintf(cvtbuf, sizeof(cvtbuf), format, args); - (void) fprintf(stream, "%s\n", cvtbuf); -} - - -/* - * FUNCTION - * - * _db_dump_ dump a string in hex - * - * SYNOPSIS - * - * void _db_dump_(_line_,keyword,memory,length) - * int _line_; current source line number - * char *keyword; - * char *memory; Memory to print - * int length; Bytes to print - * - * DESCRIPTION - * Dump N characters in a binary array. - * Is used to examine corrupted memory or arrays. - */ - -void _db_dump_(uint _line_, const char *keyword, - const unsigned char *memory, size_t length) -{ - int pos; - CODE_STATE *cs; - get_code_state_or_return; - - if (_db_keyword_(cs, keyword, 0)) - { - if (!cs->locked) - pthread_mutex_lock(&THR_LOCK_dbug); - DoPrefix(cs, _line_); - if (TRACING) - { - Indent(cs, cs->level + 1); - pos= min(max(cs->level-cs->stack->sub_level,0)*INDENT,80); - } - else - { - fprintf(cs->stack->out_file, "%s: ", cs->func); - } - (void) fprintf(cs->stack->out_file, "%s: Memory: 0x%lx Bytes: (%ld)\n", - keyword, (ulong) memory, (long) length); - - pos=0; - while (length-- > 0) - { - uint tmp= *((unsigned char*) memory++); - if ((pos+=3) >= 80) - { - fputc('\n',cs->stack->out_file); - pos=3; - } - fputc(_dig_vec_upper[((tmp >> 4) & 15)], cs->stack->out_file); - fputc(_dig_vec_upper[tmp & 15], cs->stack->out_file); - fputc(' ',cs->stack->out_file); - } - (void) fputc('\n',cs->stack->out_file); - DbugFlush(cs); - } -} - - -/* - * FUNCTION - * - * ListAddDel modify the list according to debug control string - * - * DESCRIPTION - * - * Given pointer to a comma separated list of strings in "cltp", - * parses the list, and modifies "listp", returning a pointer - * to the new list. - * - * The mode of operation is defined by "todo" parameter. - * - * If it is INCLUDE, elements (strings from "cltp") are added to the - * list, they will have INCLUDE flag set. If the list already contains - * the string in question, new element is not added, but a flag of - * the existing element is adjusted (INCLUDE bit is set, EXCLUDE bit - * is removed). - * - * If it is EXCLUDE, elements are added to the list with the EXCLUDE - * flag set. If the list already contains the string in question, - * it is removed, new element is not added. - */ - -static struct link *ListAddDel(struct link *head, const char *ctlp, - const char *end, int todo) -{ - const char *start; - struct link **cur; - size_t len; - int subdir; - - ctlp--; -next: - while (++ctlp < end) - { - start= ctlp; - subdir=0; - while (ctlp < end && *ctlp != ',') - ctlp++; - len=ctlp-start; - if (start[len-1] == '/') - { - len--; - subdir=SUBDIR; - } - if (len == 0) continue; - for (cur=&head; *cur; cur=&((*cur)->next_link)) - { - if (!strncmp((*cur)->str, start, len)) - { - if ((*cur)->flags & todo) /* same action ? */ - (*cur)->flags|= subdir; /* just merge the SUBDIR flag */ - else if (todo == EXCLUDE) - { - struct link *delme=*cur; - *cur=(*cur)->next_link; - free((void*) delme); - } - else - { - (*cur)->flags&=~(EXCLUDE & SUBDIR); - (*cur)->flags|=INCLUDE | subdir; - } - goto next; - } - } - *cur= (struct link *) DbugMalloc(sizeof(struct link)+len); - memcpy((*cur)->str, start, len); - (*cur)->str[len]=0; - (*cur)->flags=todo | subdir; - (*cur)->next_link=0; - } - return head; -} - -/* - * FUNCTION - * - * ListCopy make a copy of the list - * - * SYNOPSIS - * - * static struct link *ListCopy(orig) - * struct link *orig; - * - * DESCRIPTION - * - * Given pointer to list, which contains a copy of every element from - * the original list. - * - * the orig pointer can be NULL - * - * Note that since each link is added at the head of the list, - * the final list will be in "reverse order", which is not - * significant for our usage here. - * - */ - -static struct link *ListCopy(struct link *orig) -{ - struct link *new_malloc; - struct link *head; - size_t len; - - head= NULL; - while (orig != NULL) - { - len= strlen(orig->str); - new_malloc= (struct link *) DbugMalloc(sizeof(struct link)+len); - memcpy(new_malloc->str, orig->str, len); - new_malloc->str[len]= 0; - new_malloc->flags=orig->flags; - new_malloc->next_link= head; - head= new_malloc; - orig= orig->next_link; - } - return head; -} - -/* - * FUNCTION - * - * InList test a given string for member of a given list - * - * DESCRIPTION - * - * Tests the string pointed to by "cp" to determine if it is in - * the list pointed to by "linkp". Linkp points to the first - * link in the list. If linkp is NULL or contains only EXCLUDE - * elements then the string is treated as if it is in the list. - * This may seem rather strange at first but leads to the desired - * operation if no list is given. The net effect is that all - * strings will be accepted when there is no list, and when there - * is a list, only those strings in the list will be accepted. - * - * RETURN - * combination of SUBDIR, INCLUDE, EXCLUDE, MATCHED flags - * - */ - -static int InList(struct link *linkp, const char *cp) -{ - int result; - - for (result=MATCHED; linkp != NULL; linkp= linkp->next_link) - { - if (!fnmatch(linkp->str, cp, 0)) - return linkp->flags; - if (!(linkp->flags & EXCLUDE)) - result=NOT_MATCHED; - if (linkp->flags & SUBDIR) - result|=SUBDIR; - } - return result; -} - -/* - * FUNCTION - * - * ListFlags returns aggregated list flags (ORed over all elements) - * - */ - -static uint ListFlags(struct link *linkp) -{ - uint f; - for (f=0; linkp != NULL; linkp= linkp->next_link) - f|= linkp->flags; - return f; -} - -/* - * FUNCTION - * - * PushState push current settings onto stack and set up new one - * - * SYNOPSIS - * - * static VOID PushState() - * - * DESCRIPTION - * - * Pushes the current settings on the settings stack, and creates - * a new settings. The new settings is NOT initialized - * - * The settings stack is a linked list of settings, with the new - * settings added at the head. This allows the stack to grow - * to the limits of memory if necessary. - * - */ - -static void PushState(CODE_STATE *cs) -{ - struct settings *new_malloc; - - new_malloc= (struct settings *) DbugMalloc(sizeof(struct settings)); - bzero(new_malloc, sizeof(struct settings)); - new_malloc->next= cs->stack; - cs->stack= new_malloc; -} - -/* - * FUNCTION - * - * FreeState Free memory associated with a struct state. - * - * SYNOPSIS - * - * static void FreeState (state) - * struct state *state; - * int free_state; - * - * DESCRIPTION - * - * Deallocates the memory allocated for various information in a - * state. If free_state is set, also free 'state' - * - */ -static void FreeState(CODE_STATE *cs, struct settings *state, int free_state) -{ - if (!is_shared(state, keywords)) - FreeList(state->keywords); - if (!is_shared(state, functions)) - FreeList(state->functions); - if (!is_shared(state, processes)) - FreeList(state->processes); - if (!is_shared(state, p_functions)) - FreeList(state->p_functions); - - if (!is_shared(state, out_file)) - DBUGCloseFile(cs, state->out_file); - else - (void) fflush(state->out_file); - - if (!is_shared(state, prof_file)) - DBUGCloseFile(cs, state->prof_file); - else - (void) fflush(state->prof_file); - - if (free_state) - free((void*) state); -} - - -/* - * FUNCTION - * - * _db_end_ End debugging, freeing state stack memory. - * - * SYNOPSIS - * - * static VOID _db_end_ () - * - * DESCRIPTION - * - * Ends debugging, de-allocating the memory allocated to the - * state stack. - * - * To be called at the very end of the program. - * - */ -void _db_end_() -{ - struct settings *discard; - static struct settings tmp; - CODE_STATE *cs; - /* - Set _dbug_on_ to be able to do full reset even when DEBUGGER_OFF was - called after dbug was initialized - */ - _dbug_on_= 1; - get_code_state_or_return; - - while ((discard= cs->stack)) - { - if (discard == &init_settings) - break; - cs->stack= discard->next; - FreeState(cs, discard, 1); - } - tmp= init_settings; - - /* Use mutex lock to make it less likely anyone access out_file */ - pthread_mutex_lock(&THR_LOCK_dbug); - init_settings.flags= OPEN_APPEND; - init_settings.out_file= stderr; - init_settings.prof_file= stderr; - init_settings.maxdepth= 0; - init_settings.delay= 0; - init_settings.sub_level= 0; - init_settings.functions= 0; - init_settings.p_functions= 0; - init_settings.keywords= 0; - init_settings.processes= 0; - pthread_mutex_unlock(&THR_LOCK_dbug); - FreeState(cs, &tmp, 0); -} - - -/* - * FUNCTION - * - * DoTrace check to see if tracing is current enabled - * - * DESCRIPTION - * - * Checks to see if dbug in this function is enabled based on - * whether the maximum trace depth has been reached, the current - * function is selected, and the current process is selected. - * - */ - -static int DoTrace(CODE_STATE *cs) -{ - if ((cs->stack->maxdepth == 0 || cs->level <= cs->stack->maxdepth) && - InList(cs->stack->processes, cs->process) & (MATCHED|INCLUDE)) - switch(InList(cs->stack->functions, cs->func)) { - case INCLUDE|SUBDIR: return ENABLE_TRACE; - case INCLUDE: return DO_TRACE; - case MATCHED|SUBDIR: - case NOT_MATCHED|SUBDIR: - case MATCHED: return framep_trace_flag(cs, cs->framep) ? - DO_TRACE : DONT_TRACE; - case EXCLUDE: - case NOT_MATCHED: return DONT_TRACE; - case EXCLUDE|SUBDIR: return DISABLE_TRACE; - } - return DONT_TRACE; -} - -FILE *_db_fp_(void) -{ - CODE_STATE *cs; - get_code_state_or_return NULL; - return cs->stack->out_file; -} - -/* - * FUNCTION - * - * _db_keyword_ test keyword for member of keyword list - * - * DESCRIPTION - * - * Test a keyword to determine if it is in the currently active - * keyword list. If strict=0, a keyword is accepted - * if the list is null, otherwise it must match one of the list - * members. When debugging is not on, no keywords are accepted. - * After the maximum trace level is exceeded, no keywords are - * accepted (this behavior subject to change). Additionally, - * the current function and process must be accepted based on - * their respective lists. - * - * Returns TRUE if keyword accepted, FALSE otherwise. - * - */ - -BOOLEAN _db_keyword_(CODE_STATE *cs, const char *keyword, int strict) -{ - get_code_state_if_not_set_or_return FALSE; - strict=strict ? INCLUDE : INCLUDE|MATCHED; - - return DEBUGGING && DoTrace(cs) & DO_TRACE && - InList(cs->stack->keywords, keyword) & strict; -} - -/* - * FUNCTION - * - * Indent indent a line to the given indentation level - * - * SYNOPSIS - * - * static VOID Indent(indent) - * int indent; - * - * DESCRIPTION - * - * Indent a line to the given level. Note that this is - * a simple minded but portable implementation. - * There are better ways. - * - * Also, the indent must be scaled by the compile time option - * of character positions per nesting level. - * - */ - -static void Indent(CODE_STATE *cs, int indent) -{ - REGISTER int count; - - indent= max(indent-1-cs->stack->sub_level,0)*INDENT; - for (count= 0; count < indent ; count++) - { - if ((count % INDENT) == 0) - fputc('|',cs->stack->out_file); - else - fputc(' ',cs->stack->out_file); - } -} - - -/* - * FUNCTION - * - * FreeList free all memory associated with a linked list - * - * SYNOPSIS - * - * static VOID FreeList(linkp) - * struct link *linkp; - * - * DESCRIPTION - * - * Given pointer to the head of a linked list, frees all - * memory held by the list and the members of the list. - * - */ - -static void FreeList(struct link *linkp) -{ - REGISTER struct link *old; - - while (linkp != NULL) - { - old= linkp; - linkp= linkp->next_link; - free((void*) old); - } -} - - -/* - * FUNCTION - * - * DoPrefix print debugger line prefix prior to indentation - * - * SYNOPSIS - * - * static VOID DoPrefix(_line_) - * int _line_; - * - * DESCRIPTION - * - * Print prefix common to all debugger output lines, prior to - * doing indentation if necessary. Print such information as - * current process name, current source file name and line number, - * and current function nesting depth. - * - */ - -static void DoPrefix(CODE_STATE *cs, uint _line_) -{ - cs->lineno++; - if (cs->stack->flags & PID_ON) - { - (void) fprintf(cs->stack->out_file, "%-7s: ", my_thread_name()); - } - if (cs->stack->flags & NUMBER_ON) - (void) fprintf(cs->stack->out_file, "%5d: ", cs->lineno); - if (cs->stack->flags & TIMESTAMP_ON) - { -#ifdef __WIN__ - /* FIXME This doesn't give microseconds as in Unix case, and the resolution is - in system ticks, 10 ms intervals. See my_getsystime.c for high res */ - SYSTEMTIME loc_t; - GetLocalTime(&loc_t); - (void) fprintf (cs->stack->out_file, - /* "%04d-%02d-%02d " */ - "%02d:%02d:%02d.%06d ", - /*tm_p->tm_year + 1900, tm_p->tm_mon + 1, tm_p->tm_mday,*/ - loc_t.wHour, loc_t.wMinute, loc_t.wSecond, loc_t.wMilliseconds); -#else - struct timeval tv; - struct tm *tm_p; - if (gettimeofday(&tv, NULL) != -1) - { - if ((tm_p= localtime((const time_t *)&tv.tv_sec))) - { - (void) fprintf (cs->stack->out_file, - /* "%04d-%02d-%02d " */ - "%02d:%02d:%02d.%06d ", - /*tm_p->tm_year + 1900, tm_p->tm_mon + 1, tm_p->tm_mday,*/ - tm_p->tm_hour, tm_p->tm_min, tm_p->tm_sec, - (int) (tv.tv_usec)); - } - } -#endif - } - if (cs->stack->flags & PROCESS_ON) - (void) fprintf(cs->stack->out_file, "%s: ", cs->process); - if (cs->stack->flags & FILE_ON) - (void) fprintf(cs->stack->out_file, "%14s: ", BaseName(cs->file)); - if (cs->stack->flags & LINE_ON) - (void) fprintf(cs->stack->out_file, "%5d: ", _line_); - if (cs->stack->flags & DEPTH_ON) - (void) fprintf(cs->stack->out_file, "%4d: ", cs->level); -} - - -/* - * FUNCTION - * - * DBUGOpenFile open new output stream for debugger output - * - * SYNOPSIS - * - * static VOID DBUGOpenFile(name) - * char *name; - * - * DESCRIPTION - * - * Given name of a new file (or "-" for stdout) opens the file - * and sets the output stream to the new file. - * - */ - -static void DBUGOpenFile(CODE_STATE *cs, - const char *name,const char *end,int append) -{ - REGISTER FILE *fp; - REGISTER BOOLEAN newfile; - - if (name != NULL) - { - if (end) - { - size_t len=end-name; - memcpy(cs->stack->name, name, len); - cs->stack->name[len]=0; - } - else - strmov(cs->stack->name,name); - name=cs->stack->name; - if (strcmp(name, "-") == 0) - { - cs->stack->out_file= stdout; - cs->stack->flags |= FLUSH_ON_WRITE; - cs->stack->name[0]=0; - } - else - { - if (!Writable(name)) - { - (void) fprintf(stderr, ERR_OPEN, cs->process, name); - perror(""); - fflush(stderr); - } - else - { - newfile= !EXISTS(name); - if (!(fp= fopen(name, append ? "a+" : "w"))) - { - (void) fprintf(stderr, ERR_OPEN, cs->process, name); - perror(""); - fflush(stderr); - } - else - { - cs->stack->out_file= fp; - } - } - } - } -} - -/* - * FUNCTION - * - * DBUGCloseFile close the debug output stream - * - * SYNOPSIS - * - * static VOID DBUGCloseFile(fp) - * FILE *fp; - * - * DESCRIPTION - * - * Closes the debug output stream unless it is standard output - * or standard error. - * - */ - -static void DBUGCloseFile(CODE_STATE *cs, FILE *fp) -{ - if (fp != NULL && fp != stderr && fp != stdout && fclose(fp) == EOF) - { - pthread_mutex_lock(&THR_LOCK_dbug); - (void) fprintf(cs->stack->out_file, ERR_CLOSE, cs->process); - perror(""); - DbugFlush(cs); - } -} - - -/* - * FUNCTION - * - * DbugExit print error message and exit - * - * SYNOPSIS - * - * static VOID DbugExit(why) - * char *why; - * - * DESCRIPTION - * - * Prints error message using current process name, the reason for - * aborting (typically out of memory), and exits with status 1. - * This should probably be changed to use a status code - * defined in the user's debugger include file. - * - */ - -static void DbugExit(const char *why) -{ - CODE_STATE *cs=code_state(); - (void) fprintf(stderr, ERR_ABORT, cs ? cs->process : "(null)", why); - (void) fflush(stderr); - DBUG_ABORT(); -} - - -/* - * FUNCTION - * - * DbugMalloc allocate memory for debugger runtime support - * - * SYNOPSIS - * - * static long *DbugMalloc(size) - * int size; - * - * DESCRIPTION - * - * Allocate more memory for debugger runtime support functions. - * Failure to to allocate the requested number of bytes is - * immediately fatal to the current process. This may be - * rather unfriendly behavior. It might be better to simply - * print a warning message, freeze the current debugger cs, - * and continue execution. - * - */ - -static char *DbugMalloc(size_t size) -{ - register char *new_malloc; - - if (!(new_malloc= (char*) malloc(size))) - DbugExit("out of memory"); - return new_malloc; -} - - -/* - * strtok lookalike - splits on ':', magically handles ::, :\ and :/ - */ - -static const char *DbugStrTok(const char *s) -{ - while (s[0] && (s[0] != ':' || - (s[1] == '\\' || s[1] == '/' || (s[1] == ':' && s++)))) - s++; - return s; -} - - -/* - * FUNCTION - * - * BaseName strip leading pathname components from name - * - * SYNOPSIS - * - * static char *BaseName(pathname) - * char *pathname; - * - * DESCRIPTION - * - * Given pointer to a complete pathname, locates the base file - * name at the end of the pathname and returns a pointer to - * it. - * - */ - -static const char *BaseName(const char *pathname) -{ - register const char *base; - - base= strrchr(pathname, FN_LIBCHAR); - if (base++ == NullS) - base= pathname; - return base; -} - - -/* - * FUNCTION - * - * Writable test to see if a pathname is writable/creatable - * - * SYNOPSIS - * - * static BOOLEAN Writable(pathname) - * char *pathname; - * - * DESCRIPTION - * - * Because the debugger might be linked in with a program that - * runs with the set-uid-bit (suid) set, we have to be careful - * about opening a user named file for debug output. This consists - * of checking the file for write access with the real user id, - * or checking the directory where the file will be created. - * - * Returns TRUE if the user would normally be allowed write or - * create access to the named file. Returns FALSE otherwise. - * - */ - - -#ifndef Writable - -static BOOLEAN Writable(const char *pathname) -{ - REGISTER BOOLEAN granted; - REGISTER char *lastslash; - - granted= FALSE; - if (EXISTS(pathname)) - { - if (WRITABLE(pathname)) - granted= TRUE; - } - else - { - lastslash= strrchr(pathname, '/'); - if (lastslash != NULL) - *lastslash= '\0'; - else - pathname= "."; - if (WRITABLE(pathname)) - granted= TRUE; - if (lastslash != NULL) - *lastslash= '/'; - } - return granted; -} -#endif - - -/* - * FUNCTION - * - * _db_setjmp_ save debugger environment - * - * SYNOPSIS - * - * VOID _db_setjmp_() - * - * DESCRIPTION - * - * Invoked as part of the user's DBUG_SETJMP macro to save - * the debugger environment in parallel with saving the user's - * environment. - * - */ - -#ifdef HAVE_LONGJMP - -EXPORT void _db_setjmp_() -{ - CODE_STATE *cs; - get_code_state_or_return; - - cs->jmplevel= cs->level; - cs->jmpfunc= cs->func; - cs->jmpfile= cs->file; -} - -/* - * FUNCTION - * - * _db_longjmp_ restore previously saved debugger environment - * - * SYNOPSIS - * - * VOID _db_longjmp_() - * - * DESCRIPTION - * - * Invoked as part of the user's DBUG_LONGJMP macro to restore - * the debugger environment in parallel with restoring the user's - * previously saved environment. - * - */ - -EXPORT void _db_longjmp_() -{ - CODE_STATE *cs; - get_code_state_or_return; - - cs->level= cs->jmplevel; - if (cs->jmpfunc) - cs->func= cs->jmpfunc; - if (cs->jmpfile) - cs->file= cs->jmpfile; -} -#endif - -/* - * FUNCTION - * - * perror perror simulation for systems that don't have it - * - * SYNOPSIS - * - * static VOID perror(s) - * char *s; - * - * DESCRIPTION - * - * Perror produces a message on the standard error stream which - * provides more information about the library or system error - * just encountered. The argument string s is printed, followed - * by a ':', a blank, and then a message and a newline. - * - * An undocumented feature of the unix perror is that if the string - * 's' is a null string (NOT a NULL pointer!), then the ':' and - * blank are not printed. - * - * This version just complains about an "unknown system error". - * - */ - -#ifndef HAVE_PERROR -static void perror(s) -char *s; -{ - if (s && *s != '\0') - (void) fprintf(stderr, "%s: ", s); - (void) fprintf(stderr, "\n"); -} -#endif /* HAVE_PERROR */ - - - /* flush dbug-stream, free mutex lock & wait delay */ - /* This is because some systems (MSDOS!!) dosn't flush fileheader */ - /* and dbug-file isn't readable after a system crash !! */ - -static void DbugFlush(CODE_STATE *cs) -{ - if (cs->stack->flags & FLUSH_ON_WRITE) - { - (void) fflush(cs->stack->out_file); - if (cs->stack->delay) - (void) Delay(cs->stack->delay); - } - if (!cs->locked) - pthread_mutex_unlock(&THR_LOCK_dbug); -} /* DbugFlush */ - - -/* For debugging */ - -void _db_flush_() -{ - CODE_STATE *cs= NULL; - get_code_state_or_return; - (void) fflush(cs->stack->out_file); -} - - -#ifndef __WIN__ -void _db_suicide_() -{ - int retval; - sigset_t new_mask; - sigfillset(&new_mask); - - fprintf(stderr, "SIGKILL myself\n"); - fflush(stderr); - - retval= kill(getpid(), SIGKILL); - assert(retval == 0); - retval= sigsuspend(&new_mask); - fprintf(stderr, "sigsuspend returned %d errno %d \n", retval, errno); - assert(FALSE); /* With full signal mask, we should never return here. */ -} -#endif /* ! __WIN__ */ - - -void _db_lock_file_() -{ - CODE_STATE *cs; - get_code_state_or_return; - pthread_mutex_lock(&THR_LOCK_dbug); - cs->locked=1; -} - -void _db_unlock_file_() -{ - CODE_STATE *cs; - get_code_state_or_return; - cs->locked=0; - pthread_mutex_unlock(&THR_LOCK_dbug); -} - -const char* _db_get_func_(void) -{ - CODE_STATE *cs; - get_code_state_or_return NULL; - return cs->func; -} - - -#else - -/* - * Dummy function, workaround for MySQL bug#14420 related - * build failure on a platform where linking with an empty - * archive fails. - * - * This block can be removed as soon as a fix for bug#14420 - * is implemented. - */ -int i_am_a_dummy_function() { - return 0; -} - -#endif diff --git a/deps/mysqllite/dbug/dbug_long.h b/deps/mysqllite/dbug/dbug_long.h deleted file mode 100644 index 829df181ef1af0..00000000000000 --- a/deps/mysqllite/dbug/dbug_long.h +++ /dev/null @@ -1,160 +0,0 @@ -#error This file is not used in MySQL - see ../include/my_dbug.h instead -/****************************************************************************** - * * - * N O T I C E * - * * - * Copyright Abandoned, 1987, Fred Fish * - * * - * * - * This previously copyrighted work has been placed into the public * - * domain by the author and may be freely used for any purpose, * - * private or commercial. * - * * - * Because of the number of inquiries I was receiving about the use * - * of this product in commercially developed works I have decided to * - * simply make it public domain to further its unrestricted use. I * - * specifically would be most happy to see this material become a * - * part of the standard Unix distributions by AT&T and the Berkeley * - * Computer Science Research Group, and a standard part of the GNU * - * system from the Free Software Foundation. * - * * - * I would appreciate it, as a courtesy, if this notice is left in * - * all copies and derivative works. Thank you. * - * * - * The author makes no warranty of any kind with respect to this * - * product and explicitly disclaims any implied warranties of mer- * - * chantability or fitness for any particular purpose. * - * * - ****************************************************************************** - */ - -/* - * FILE - * - * dbug.h user include file for programs using the dbug package - * - * SYNOPSIS - * - * #include - * - * SCCS ID - * - * @(#)dbug.h 1.13 7/17/89 - * - * DESCRIPTION - * - * Programs which use the dbug package must include this file. - * It contains the appropriate macros to call support routines - * in the dbug runtime library. - * - * To disable compilation of the macro expansions define the - * preprocessor symbol "DBUG_OFF". This will result in null - * macros expansions so that the resulting code will be smaller - * and faster. (The difference may be smaller than you think - * so this step is recommended only when absolutely necessary). - * In general, tradeoffs between space and efficiency are - * decided in favor of efficiency since space is seldom a - * problem on the new machines). - * - * All externally visible symbol names follow the pattern - * "_db_xxx..xx_" to minimize the possibility of a dbug package - * symbol colliding with a user defined symbol. - * - * The DBUG_ style macros are obsolete and should not be used - * in new code. Macros to map them to instances of DBUG_PRINT - * are provided for compatibility with older code. They may go - * away completely in subsequent releases. - * - * AUTHOR - * - * Fred Fish - * (Currently employed by Motorola Computer Division, Tempe, Az.) - * hao!noao!mcdsun!fnf - * (602) 438-3614 - * - */ - -/* - * Internally used dbug variables which must be global. - */ - -#ifndef DBUG_OFF - extern int _db_on_; /* TRUE if debug currently enabled */ - extern FILE *_db_fp_; /* Current debug output stream */ - extern char *_db_process_; /* Name of current process */ - extern int _db_keyword_ (); /* Accept/reject keyword */ - extern void _db_push_ (); /* Push state, set up new state */ - extern void _db_pop_ (); /* Pop previous debug state */ - extern void _db_enter_ (); /* New user function entered */ - extern void _db_return_ (); /* User function return */ - extern void _db_pargs_ (); /* Remember args for line */ - extern void _db_doprnt_ (); /* Print debug output */ - extern void _db_setjmp_ (); /* Save debugger environment */ - extern void _db_longjmp_ (); /* Restore debugger environment */ - extern void _db_dump_(); /* Dump memory */ -# endif - - -/* - * These macros provide a user interface into functions in the - * dbug runtime support library. They isolate users from changes - * in the MACROS and/or runtime support. - * - * The symbols "__LINE__" and "__FILE__" are expanded by the - * preprocessor to the current source file line number and file - * name respectively. - * - * WARNING --- Because the DBUG_ENTER macro allocates space on - * the user function's stack, it must precede any executable - * statements in the user function. - * - */ - -# ifdef DBUG_OFF -# define DBUG_ENTER(a1) -# define DBUG_RETURN(a1) return(a1) -# define DBUG_VOID_RETURN return -# define DBUG_EXECUTE(keyword,a1) -# define DBUG_PRINT(keyword,arglist) -# define DBUG_2(keyword,format) /* Obsolete */ -# define DBUG_3(keyword,format,a1) /* Obsolete */ -# define DBUG_4(keyword,format,a1,a2) /* Obsolete */ -# define DBUG_5(keyword,format,a1,a2,a3) /* Obsolete */ -# define DBUG_PUSH(a1) -# define DBUG_POP() -# define DBUG_PROCESS(a1) -# define DBUG_FILE (stderr) -# define DBUG_SETJMP setjmp -# define DBUG_LONGJMP longjmp -# define DBUG_DUMP(keyword,a1) -# else -# define DBUG_ENTER(a) \ - auto char *_db_func_; auto char *_db_file_; auto int _db_level_; \ - auto char **_db_framep_; \ - _db_enter_ (a,__FILE__,__LINE__,&_db_func_,&_db_file_,&_db_level_, \ - &_db_framep_) -# define DBUG_LEAVE \ - (_db_return_ (__LINE__, &_db_func_, &_db_file_, &_db_level_)) -# define DBUG_RETURN(a1) return (DBUG_LEAVE, (a1)) -/* define DBUG_RETURN(a1) {DBUG_LEAVE; return(a1);} Alternate form */ -# define DBUG_VOID_RETURN {DBUG_LEAVE; return;} -# define DBUG_EXECUTE(keyword,a1) \ - {if (_db_on_) {if (_db_keyword_ (keyword)) { a1 }}} -# define DBUG_PRINT(keyword,arglist) \ - {if (_db_on_) {_db_pargs_(__LINE__,keyword); _db_doprnt_ arglist;}} -# define DBUG_2(keyword,format) \ - DBUG_PRINT(keyword,(format)) /* Obsolete */ -# define DBUG_3(keyword,format,a1) \ - DBUG_PRINT(keyword,(format,a1)) /* Obsolete */ -# define DBUG_4(keyword,format,a1,a2) \ - DBUG_PRINT(keyword,(format,a1,a2)) /* Obsolete */ -# define DBUG_5(keyword,format,a1,a2,a3) \ - DBUG_PRINT(keyword,(format,a1,a2,a3)) /* Obsolete */ -# define DBUG_PUSH(a1) _db_push_ (a1) -# define DBUG_POP() _db_pop_ () -# define DBUG_PROCESS(a1) (_db_process_ = a1) -# define DBUG_FILE (_db_fp_) -# define DBUG_SETJMP(a1) (_db_setjmp_ (), setjmp (a1)) -# define DBUG_LONGJMP(a1,a2) (_db_longjmp_ (), longjmp (a1, a2)) -# define DBUG_DUMP(keyword,a1,a2) _db_dump_(__LINE__,keyword,a1,a2) -# endif diff --git a/deps/mysqllite/dbug/monty.doc b/deps/mysqllite/dbug/monty.doc deleted file mode 100644 index 1af67b81d42837..00000000000000 --- a/deps/mysqllite/dbug/monty.doc +++ /dev/null @@ -1,9 +0,0 @@ - -All changes that I or other people at MySQL AB have done to all files -in the dbug library (Mainly in dbug.c, dbug_analyze.c, dbug_long.h, -dbug.h) are put in public domain, as the rest of the dbug.c library) - -To my knowledge, all code in dbug library is in public domain. - -Michael Widenius - diff --git a/deps/mysqllite/dbug/user.r b/deps/mysqllite/dbug/user.r deleted file mode 100644 index 5628f5a4fa118d..00000000000000 --- a/deps/mysqllite/dbug/user.r +++ /dev/null @@ -1,1213 +0,0 @@ -.\" @(#)user.r 1.13 10/29/86 -.\" -.\" 2004-10-29: documented features implemented since 10/29/86 -.\" formatting cleanup -.\" - Sergei Golubchik -.\" -.\" DBUG (Macro Debugger Package) nroff source -.\" -.\" nroff -mm user.r >user.t -.\" groff -mm user.r >user.ps -.\" -.\" =================================================== -.\" -.\" === Some sort of black magic, but I forget... -.tr ~ -.\" === Hyphenation control (1 = on) -.\".nr Hy 1 -.\" === Force all first level headings to start on new page -.nr Ej 1 -.\" === Set for breaks after headings for levels 1-3 -.nr Hb 3 -.\" === Set for space after headings for levels 1-3 -.nr Hs 3 -.\" === Set standard indent for one/half inch -.nr Si 10 -.\" === Set page header -.PH "/DBUG User Manual//\*(DT/" -.\" === Set page footer -.PF "// - % - //" -.\" === Set page offset -.\".po 0.60i -.\" === Set line length -.\".ll 6.5i -.TL -.warn 0 -D B U G -.P 0 -C Program Debugging Package -.P 0 -by -.AU "Fred Fish" -.AF "" -.SA 1 -.\" === All paragraphs indented. -.nr Pt 1 -.AS 1 -This document introduces -.I dbug , -a macro based C debugging -package which has proven to be a very flexible and useful tool -for debugging, testing, and porting C programs. - -.P -All of the features of the -.I dbug -package can be enabled or disabled dynamically at execution time. -This means that production programs will run normally when -debugging is not enabled, and eliminates the need to maintain two -separate versions of a program. - -.P -Many of the things easily accomplished with conventional debugging -tools, such as symbolic debuggers, are difficult or impossible with this -package, and vice versa. -Thus the -.I dbug -package should -.I not -be thought of as a replacement or substitute for -other debugging tools, but simply as a useful -.I addition -to the -program development and maintenance environment. - -.AE -.MT 4 -.SK -.B -INTRODUCTION -.R - -.P -Almost every program development environment worthy of the name -provides some sort of debugging facility. -Usually this takes the form of a program which is capable of -controlling execution of other programs and examining the internal -state of other executing programs. -These types of programs will be referred to as external debuggers -since the debugger is not part of the executing program. -Examples of this type of debugger include the -.B adb -and -.B sdb -debuggers provided with the -.B UNIX\*F -.FS -UNIX is a trademark of AT&T Bell Laboratories. -.FE -operating system. - -.P -One of the problems associated with developing programs in an environment -with good external debuggers is that developed programs tend to have -little or no internal instrumentation. -This is usually not a problem for the developer since he is, -or at least should be, intimately familiar with the internal organization, -data structures, and control flow of the program being debugged. -It is a serious problem for maintenance programmers, who -are unlikely to have such familiarity with the program being -maintained, modified, or ported to another environment. -It is also a problem, even for the developer, when the program is -moved to an environment with a primitive or unfamiliar debugger, -or even no debugger. - -.P -On the other hand, -.I dbug -is an example of an internal debugger. -Because it requires internal instrumentation of a program, -and its usage does not depend on any special capabilities of -the execution environment, it is always available and will -execute in any environment that the program itself will -execute in. -In addition, since it is a complete package with a specific -user interface, all programs which use it will be provided -with similar debugging capabilities. -This is in sharp contrast to other forms of internal instrumentation -where each developer has their own, usually less capable, form -of internal debugger. -In summary, -because -.I dbug -is an internal debugger it provides consistency across operating -environments, -and because it is available to all developers it provides -consistency across all programs in the same environment. - -.P -The -.I dbug -package imposes only a slight speed penalty on executing -programs, typically much less than 10 percent, and a modest size -penalty, typically 10 to 20 percent. -By defining a specific C preprocessor symbol both of these -can be reduced to zero with no changes required to the -source code. - -.P -The following list is a quick summary of the capabilities -of the -.I dbug -package. -Each capability can be individually enabled or disabled -at the time a program is invoked by specifying the appropriate -command line arguments. -.SP 1 -.ML o 1i -.LI -Execution trace showing function level control flow in a -semi-graphically manner using indentation to indicate nesting -depth. -.LI -Output the values of all, or any subset of, key internal variables. -.LI -Limit actions to a specific set of named functions. -.LI -Limit function trace to a specified nesting depth. -.LI -Label each output line with source file name and line number. -.LI -Label each output line with name of current process. -.LI -Push or pop internal debugging state to allow execution with -built in debugging defaults. -.LI -Redirect the debug output stream to standard output (stdout) -or a named file. -The default output stream is standard error (stderr). -The redirection mechanism is completely independent of -normal command line redirection to avoid output conflicts. -.LE - -.SK -.B -PRIMITIVE DEBUGGING TECHNIQUES -.R - -.P -Internal instrumentation is already a familiar concept -to most programmers, since it is usually the first debugging -technique learned. -Typically, "print\ statements" are inserted in the source -code at interesting points, the code is recompiled and executed, -and the resulting output is examined in an attempt to determine -where the problem is. - -The procedure is iterative, with each iteration yielding more -and more output, and hopefully the source of the problem is -discovered before the output becomes too large to deal with -or previously inserted statements need to be removed. -Figure 1 is an example of this type of primitive debugging -technique. -.DS I N -.SP 2 -\fC -.so example1.r -\fR -.SP 2 -.ll -5 -.ce -Figure 1 -.ce -Primitive Debugging Technique -.ll +5 -.SP 2 -.DE - -.P -Eventually, and usually after at least several iterations, the -problem will be found and corrected. -At this point, the newly inserted print statements must be -dealt with. -One obvious solution is to simply delete them all. -Beginners usually do this a few times until they have to -repeat the entire process every time a new bug pops up. -The second most obvious solution is to somehow disable -the output, either through the source code comment facility, -creation of a debug variable to be switched on or off, or by using the -C preprocessor. -Figure 2 is an example of all three techniques. -.DS I N -.SP 2 -\fC -.so example2.r -\fR -.SP 2 -.ll -5 -.ce -Figure 2 -.ce -Debug Disable Techniques -.ll +5 -.SP 2 -.DE - -.P -Each technique has its advantages and disadvantages with respect -to dynamic vs static activation, source code overhead, recompilation -requirements, ease of use, program readability, etc. -Overuse of the preprocessor solution quickly leads to problems with -source code readability and maintainability when multiple -.B #ifdef -symbols are to be defined or undefined based on specific types -of debug desired. -The source code can be made slightly more readable by suitable indentation -of the -.B #ifdef -arguments to match the indentation of the code, but -not all C preprocessors allow this. -The only requirement for the standard -.B UNIX -C preprocessor is for the '#' character to appear -in the first column, but even this seems -like an arbitrary and unreasonable restriction. -Figure 3 is an example of this usage. -.DS I N -.SP 2 -\fC -.so example3.r -\fR -.SP 2 -.ll -5 -.ce -Figure 3 -.ce -More Readable Preprocessor Usage -.ll +5 -.SP 2 -.DE - -.SK -.B -FUNCTION TRACE EXAMPLE -.R - -.P -We will start off learning about the capabilities of the -.I dbug -package by using a simple minded program which computes the -factorial of a number. -In order to better demonstrate the function trace mechanism, this -program is implemented recursively. -Figure 4 is the main function for this factorial program. -.DS I N -.SP 2 -\fC -.so main.r -\fR -.SP 2 -.ll -5 -.ce -Figure 4 -.ce -Factorial Program Mainline -.ll +5 -.SP 2 -.DE - -.P -The -.B main -function is responsible for processing any command line -option arguments and then computing and printing the factorial of -each non-option argument. -.P -First of all, notice that all of the debugger functions are implemented -via preprocessor macros. -This does not detract from the readability of the code and makes disabling -all debug compilation trivial (a single preprocessor symbol, -.B DBUG_OFF , -forces the macro expansions to be null). -.P -Also notice the inclusion of the header file -.B dbug.h -from the local header file directory. -(The version included here is the test version in the dbug source -distribution directory). -This file contains all the definitions for the debugger macros, which -all have the form -.B DBUG_XX...XX . - -.P -The -.B DBUG_ENTER -macro informs that debugger that we have entered the -function named -.B main . -It must be the very first "executable" line in a function, after -all declarations and before any other executable line. -The -.B DBUG_PROCESS -macro is generally used only once per program to -inform the debugger what name the program was invoked with. -The -.B DBUG_PUSH -macro modifies the current debugger state by -saving the previous state and setting a new state based on the -control string passed as its argument. -The -.B DBUG_PRINT -macro is used to print the values of each argument -for which a factorial is to be computed. -The -.B DBUG_RETURN -macro tells the debugger that the end of the current -function has been reached and returns a value to the calling -function. -All of these macros will be fully explained in subsequent sections. -.P -To use the debugger, the factorial program is invoked with a command -line of the form: -.DS CB N -\fCfactorial -#d:t 1 2 3 -.DE -The -.B main -function recognizes the "-#d:t" string as a debugger control -string, and passes the debugger arguments ("d:t") to the -.I dbug -runtime support routines via the -.B DBUG_PUSH -macro. -This particular string enables output from the -.B DBUG_PRINT -macro with the 'd' flag and enables function tracing with the 't' flag. -The factorial function is then called three times, with the arguments -"1", "2", and "3". -Note that the DBUG_PRINT takes exactly -.B two -arguments, with the second argument (a format string and list -of printable values) enclosed in parentheses. -.P -Debug control strings consist of a header, the "-#", followed -by a colon separated list of debugger arguments. -Each debugger argument is a single character flag followed -by an optional comma separated list of arguments specific -to the given flag. -Some examples are: -.DS CB N -\fC --#d:t:o --#d,in,out:f,main:F:L -.DE -Note that previously enabled debugger actions can be disabled by the -control string "-#". - -.P -The definition of the factorial function, symbolized as "N!", is -given by: -.DS CB N -N! = N * N-1 * ... 2 * 1 -.DE -Figure 5 is the factorial function which implements this algorithm -recursively. -Note that this is not necessarily the best way to do factorials -and error conditions are ignored completely. -.DS I N -.SP 2 -\fC -.so factorial.r -\fR -.SP 2 -.ll -5 -.ce -Figure 5 -.ce -Factorial Function -.ll +5 -.SP 2 -.DE - -.P -One advantage (some may not consider it so) to using the -.I dbug -package is that it strongly encourages fully structured coding -with only one entry and one exit point in each function. -Multiple exit points, such as early returns to escape a loop, -may be used, but each such point requires the use of an -appropriate -.B DBUG_RETURN -or -.B DBUG_VOID_RETURN -macro. - -.P -To build the factorial program on a -.B UNIX -system, compile and -link with the command: -.DS CB N -\fCcc -o factorial main.c factorial.c -ldbug -.DE -The "-ldbug" argument tells the loader to link in the -runtime support modules for the -.I dbug -package. -Executing the factorial program with a command of the form: -.DS CB N -\fCfactorial 1 2 3 4 5 -.DE -generates the output shown in figure 6. -.DS I N -.SP 2 -\fC -.so output1.r -\fR -.SP 2 -.ll -5 -.ce -Figure 6 -.ce -\fCfactorial 1 2 3 4 5 -.ll +5 -.SP 2 -.DE - -.P -Function level tracing is enabled by passing the debugger -the 't' flag in the debug control string. -Figure 7 is the output resulting from the command -"factorial\ -#t:o\ 2\ 3". -.DS I N -.SP 2 -\fC -.so output2.r -\fR -.SP 2 -.ll -5 -.ce -Figure 7 -.ce -\fCfactorial -#t:o 2 3 -.ll +5 -.SP 2 -.DE - -.P -Each entry to or return from a function is indicated by '>' for the -entry point and '<' for the exit point, connected by -vertical bars to allow matching points to be easily found -when separated by large distances. - -.P -This trace output indicates that there was an initial call -to factorial from main (to compute 2!), followed by -a single recursive call to factorial to compute 1!. -The main program then output the result for 2! and called the -factorial function again with the second argument, 3. -Factorial called itself recursively to compute 2! and 1!, then -returned control to main, which output the value for 3! and exited. - -.P -Note that there is no matching entry point "main>" for the -return point "\ %s", stp, stp\ ->\ name));\fR -.SP 1 -.LI DBUG_DUMP\ -Used to dump a memory block in hex via the "fprintf" library function -on the current debug stream, DBUG_FILE. The first argument is a debug -keyword, the second is a pointer to a memory to dump, the third is a -number of bytes to dump. -.SP 1 -EX: \fCDBUG_DBUG\ ("net",\ packet,\ len);\fR -.SP 1 -.LI DBUG_SETJMP\ -Used in place of the setjmp() function to first save the current -debugger state and then execute the standard setjmp call. -This allows to the debugger to restore its state when the -DBUG_LONGJMP macro is used to invoke the standard longjmp() call. -Currently all instances of DBUG_SETJMP must occur within the -same function and at the same function nesting level. -.SP 1 -EX: \fCDBUG_SETJMP\ (env);\fR -.SP 1 -.LI DBUG_LONGJMP\ -Used in place of the longjmp() function to first restore the -previous debugger state at the time of the last DBUG_SETJMP -and then execute the standard longjmp() call. -Note that currently all DBUG_LONGJMP macros restore the state -at the time of the last DBUG_SETJMP. -It would be possible to maintain separate DBUG_SETJMP and DBUG_LONGJMP -pairs by having the debugger runtime support module use the first -argument to differentiate the pairs. -.SP 1 -EX: \fCDBUG_LONGJMP\ (env,val);\fR -.SP 1 -.LI DBUG_LOCK_FILE\ -Used in multi-threaded environment to lock DBUG_FILE stream. -It can be used, for example, in functions that need to write something to a -debug stream more than in one fprintf() call and want to ensure that no other -thread will write something in between. -.SP 1 -EX:\fC -.br - DBUG_LOCK_FILE; -.br - fprintf (DBUG_FILE, "a=["); -.br - for (int i=0; i < a_length; i++) -.br - fprintf (DBUG_FILE, "0x%03x ", a[i]); -.br - fprintf (DBUG_FILE, "]"); -.br - DBUG_UNLOCK_FILE;\fR -.SP 1 -.LI DBUG_UNLOCK_FILE\ -Unlocks DBUG_FILE stream, that was locked with a DBUG_LOCK_FILE. -.LI DBUG_ASSERT\ -This macro just does a regular assert(). The difference is that it will be -disabled by DBUG_OFF togeher with the -.I dbug -library. So there will be no need to disable asserts separately with NDEBUG. -.SP 1 -EX:\ \fCDBUG_ASSERT(\ a\ >\ 0\ );\fR -.SP 1 -.LI DBUG_ABORT\ -This macro could be used instead of abort(). It flushes DBUG_FILE stream -to ensure that no -.I dbug -output is lost and then calls abort(). -.SP 1 -.LI DBUG_EXPLAIN\ -Generates control string corresponding to the current debug state. -The macro takes two arguments - a buffer to store the result string -into and its length. The macro (which could be used as a function) -returns 1 if the control string didn't fit into the buffer and was -truncated and 0 otherwise. -.SP 1 -EX:\fC -.br - char buf[256]; -.br - DBUG_EXPLAIN( buf, sizeof(buf) );\fR -.SP 1 -.LI DBUG_SET_INITIAL\ -.LI DBUG_EXPLAIN_INITIAL\ -.br -These two macros are identical to DBUG_SET and DBUG_EXPLAIN, but they -operate on the debug state that any new thread starts from. -Modifying -.I initial -value does not affect threads that are already running. Obviously, -these macros are only useful in the multi-threaded environment. -.LE - -.SK -.B -DEBUG CONTROL STRING -.R - -.P -The debug control string is used to set the state of the debugger -via the -.B DBUG_PUSH -or -.B DBUG_SET -macros. Control string consists of colon separated flags. Colons -that are part of ':\\', ':/', or '::' are not considered flag -separators. A flag may take an argument or a list of arguments. -If a control string starts from a '+' sign it works -.I incrementally, -that is, it can modify existing state without overriding it. Every -flag may be preceded by a '+' or '-' to enable or disable a -corresponding option in the debugger state or to add or remove -arguments to the list. This section summarizes the currently available -debugger options and the flag characters which enable or disable them. -Argument lists enclosed in '[' and ']' are optional. -.SP 2 -.BL 22 -.LI a[,file] -Redirect the debugger output stream and append it to the specified -file. The default output stream is stderr. A null argument list -causes output to be redirected to stdout. -.SP 1 -EX: \fCa,C:\\tmp\\log\fR -.LI A[,file] -Like 'a[,file]' but ensure that data are written after each write -(this typically implies flush or close/reopen). It helps to get -a complete log file in case of crashes. This mode is implicit in -multi-threaded environment. -.LI d[,keywords] -Enable output from macros with specified keywords. -Every keyword can be a -.I glob(7) -pattern. -An empty list of keywords implies that all keywords are selected. -.LI D[,time] -Delay for specified time after each output line, to let output drain. -Time is given in tenths of a second (value of 10 is one second). -Default is zero. -.LI f[,functions] -Limit debugger actions to the specified list of functions. -Every function can be a -.I glob(7) -pattern. -An empty list of functions implies that all functions are selected. -Every function in the list may optionally be followed by a '/' - -this will implicitly select all the functions down the call stack. -.SP 1 -EX: \fCf,func1,func2/:-f,func3,func4/\fR -.SP 1 -This would enable debugger in functions 'func1()', 'func2()' and all -functions called from it (directly or indirectly). But not in -functions 'func3()' or 'func4()' and all functions called from -it. -.LI F -Mark each debugger output line with the name of the source file -containing the macro causing the output. -.LI i -Mark each debugger output line with the PID (or thread ID) of the -current process. -.LI g,[functions] -Enable profiling for the specified list of functions. -Every function can be a -.I glob(7) -pattern. -An empty list of functions enables profiling for all functions. -See -.B PROFILING\ WITH\ DBUG -below. -.LI L -Mark each debugger output line with the source file line number of -the macro causing the output. -.LI n -Mark each debugger output line with the current function nesting depth. -.LI N -Sequentially number each debugger output line starting at 1. -This is useful for reference purposes when debugger output is -interspersed with program output. -.LI o[,file] -Like 'a[,file]' but overwrite old file, do not append. -.LI O[,file] -Like 'A[,file]' but overwrite old file, do not append. -.LI p[,processes] -Limit debugger actions to the specified processes. -Every name can be a -.I glob(7) -pattern. -An empty list -implies all processes. This is useful for processes which run child -processes. Note that each debugger output line can be marked with the -name of the current process via the 'P' flag. The process name must -match the argument passed to the -.B DBUG_PROCESS -macro. -.LI P -Mark each debugger output line with the name of the current process. -Most useful when used with a process which runs child processes that -are also being debugged. Note that the parent process must arrange -for the debugger control string to be passed to the child processes. -.LI r -Used in conjunction with the -.B DBUG_PUSH -macro to reset the current -indentation level back to zero. -Most useful with -.B DBUG_PUSH -macros used to temporarily alter the -debugger state. -.LI t[,N] -Enable function control flow tracing. -The maximum nesting depth is specified by N, and defaults to -200. -.LI T -Mark each debugger output line with the current timestamp. -The value is printed with microsecond resolution, as returned by -.I gettimeofday() -system call. The actual resolution is OS- and hardware-dependent. -.LE - -.SK -.B -MULTI-THREADED DEBUGGING -.R - -.P -When -.I dbug -is used in a multi-threaded environment there are few differences from a single-threaded -case to keep in mind. This section tries to summarize them. -.SP 2 -.BL 5 -.LI -Every thread has its own stack of debugger states. -.B DBUG_PUSH -and -.B DBUG_POP -affect only the thread that executed them. -.LI -At the bottom of the stack for all threads there is the common -.I initial -state. Changes to this state (for example, with -.B DBUG_SET_INITIAL -macro) affect all new threads and all running threads that didn't -.B DBUG_PUSH -yet. -.LI -Every thread can have its own name, that can be set with -.B DBUG_PROCESS -macro. Thus, "-#p,name1,name2" can be used to limit the output to specific threads. -.LI -When printing directly to -.B DBUG_FILE -it may be necessary to prevent other threads from writing something between two parts -of logically indivisible output. It is done with -.B DBUG_LOCK_FILE -and -.B DBUG_UNLOCK_FILE -macors. See the appropriate section for examples. -.LI -"-#o,file" and "-#O,file" are treated as "-#a,file" and "-#A,file" respectively. That is -all writes to a file are always followed by a flush. -.LI -"-#i" prints not a PID but a thread id in the form of "T@nnn" -.LE - -.SK -.B -PROFILING WITH DBUG -.R - -.P -With -.I dbug -one can do profiling in a machine independent fashion, -without a need for profiled version of system libraries. -For this, -.I dbug -can write out a file -called -.B dbugmon.out -(by default). This is an ascii file containing lines of the form: -.DS CB N -\fC E - X -.DE - -.P -A second program (\fBanalyze\fR) reads this file, and produces a report on -standard output. - -.P -Profiling is enabled through the -.B g -flag. It can take a list of -function names for which profiling is enabled. By default, it -profiles all functions. - -.P -The profile file is opened for appending. This -is in order that one can run a program several times, and get the -sum total of all the times, etc. - -.P -An example of the report generated follows: -.DS CB N -\fC - Profile of Execution - Execution times are in milliseconds - - Calls Time - ----- ---- - Times Percentage Time Spent Percentage -Function Called of total in Function of total Importance -======== ====== ========== =========== ========== ========== -factorial 5 83.33 30 100.00 8333 -main 1 16.67 0 0.00 0 -======== ====== ========== =========== ========== -Totals 6 100.00 30 100.00 -.DE -.P -As you can see, it's quite self-evident. The -.B Importance -column is a -metric obtained by multiplying the percentage of the calls and the percentage -of the time. Functions with higher 'importance' benefit the most from -being sped up. - -.P -As a limitation - setjmp/longjmp, or child processes, are ignored -for the time being. Also, profiling does not work -in a multi-threaded environment. - -.P -Profiling code is (c) Binayak Banerjee. - -.SK -.B -HINTS AND MISCELLANEOUS -.R - -.P -One of the most useful capabilities of the -.I dbug -package is to compare the executions of a given program in two -different environments. -This is typically done by executing the program in the environment -where it behaves properly and saving the debugger output in a -reference file. -The program is then run with identical inputs in the environment where -it misbehaves and the output is again captured in a reference file. -The two reference files can then be differentially compared to -determine exactly where execution of the two processes diverges. - -.P -A related usage is regression testing where the execution of a current -version is compared against executions of previous versions. -This is most useful when there are only minor changes. - -.P -It is not difficult to modify an existing compiler to implement -some of the functionality of the -.I dbug -package automatically, without source code changes to the -program being debugged. -In fact, such changes were implemented in a version of the -Portable C Compiler by the author in less than a day. -However, it is strongly encouraged that all newly -developed code continue to use the debugger macros -for the portability reasons noted earlier. -The modified compiler should be used only for testing existing -programs. - -.SK -.B -CAVEATS -.R - -.P -The -.I dbug -package works best with programs which have "line\ oriented" -output, such as text processors, general purpose utilities, etc. -It can be interfaced with screen oriented programs such as -visual editors by redefining the appropriate macros to call -special functions for displaying the debugger results. -Of course, this caveat is not applicable if the debugger output -is simply dumped into a file for post-execution examination. - -.P -Programs which use memory allocation functions other than -.B malloc -will usually have problems using the standard -.I dbug -package. -The most common problem is multiply allocated memory. -.SP 2 -.\" .DE nroff dident like this. davida 900108 -.CS - -.\" vim:filetype=nroff diff --git a/deps/mysqllite/include/decimal.h b/deps/mysqllite/include/decimal.h deleted file mode 100644 index 530ed9e1757e9d..00000000000000 --- a/deps/mysqllite/include/decimal.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _decimal_h -#define _decimal_h - -typedef enum -{TRUNCATE=0, HALF_EVEN, HALF_UP, CEILING, FLOOR} - decimal_round_mode; -typedef int32 decimal_digit_t; - -typedef struct st_decimal_t { - int intg, frac, len; - my_bool sign; - decimal_digit_t *buf; -} decimal_t; - -int internal_str2dec(const char *from, decimal_t *to, char **end, - my_bool fixed); -int decimal2string(decimal_t *from, char *to, int *to_len, - int fixed_precision, int fixed_decimals, - char filler); -int decimal2ulonglong(decimal_t *from, ulonglong *to); -int ulonglong2decimal(ulonglong from, decimal_t *to); -int decimal2longlong(decimal_t *from, longlong *to); -int longlong2decimal(longlong from, decimal_t *to); -int decimal2double(decimal_t *from, double *to); -int double2decimal(double from, decimal_t *to); -int decimal_actual_fraction(decimal_t *from); -int decimal2bin(decimal_t *from, uchar *to, int precision, int scale); -int bin2decimal(const uchar *from, decimal_t *to, int precision, int scale); - -int decimal_size(int precision, int scale); -int decimal_bin_size(int precision, int scale); -int decimal_result_size(decimal_t *from1, decimal_t *from2, char op, - int param); - -int decimal_intg(decimal_t *from); -int decimal_add(decimal_t *from1, decimal_t *from2, decimal_t *to); -int decimal_sub(decimal_t *from1, decimal_t *from2, decimal_t *to); -int decimal_cmp(decimal_t *from1, decimal_t *from2); -int decimal_mul(decimal_t *from1, decimal_t *from2, decimal_t *to); -int decimal_div(decimal_t *from1, decimal_t *from2, decimal_t *to, - int scale_incr); -int decimal_mod(decimal_t *from1, decimal_t *from2, decimal_t *to); -int decimal_round(decimal_t *from, decimal_t *to, int new_scale, - decimal_round_mode mode); -int decimal_is_zero(decimal_t *from); -void max_decimal(int precision, int frac, decimal_t *to); - -#define string2decimal(A,B,C) internal_str2dec((A), (B), (C), 0) -#define string2decimal_fixed(A,B,C) internal_str2dec((A), (B), (C), 1) - -/* set a decimal_t to zero */ - -#define decimal_make_zero(dec) do { \ - (dec)->buf[0]=0; \ - (dec)->intg=1; \ - (dec)->frac=0; \ - (dec)->sign=0; \ - } while(0) - -/* - returns the length of the buffer to hold string representation - of the decimal (including decimal dot, possible sign and \0) -*/ - -#define decimal_string_size(dec) (((dec)->intg ? (dec)->intg : 1) + \ - (dec)->frac + ((dec)->frac > 0) + 2) - -/* negate a decimal */ -#define decimal_neg(dec) do { (dec)->sign^=1; } while(0) - -/* - conventions: - - decimal_smth() == 0 -- everything's ok - decimal_smth() <= 1 -- result is usable, but precision loss is possible - decimal_smth() <= 2 -- result can be unusable, most significant digits - could've been lost - decimal_smth() > 2 -- no result was generated -*/ - -#define E_DEC_OK 0 -#define E_DEC_TRUNCATED 1 -#define E_DEC_OVERFLOW 2 -#define E_DEC_DIV_ZERO 4 -#define E_DEC_BAD_NUM 8 -#define E_DEC_OOM 16 - -#define E_DEC_ERROR 31 -#define E_DEC_FATAL_ERROR 30 - -#endif - diff --git a/deps/mysqllite/include/errmsg.h b/deps/mysqllite/include/errmsg.h deleted file mode 100644 index f1d7dd65f97815..00000000000000 --- a/deps/mysqllite/include/errmsg.h +++ /dev/null @@ -1,108 +0,0 @@ -#ifndef ERRMSG_INCLUDED -#define ERRMSG_INCLUDED - -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Error messages for MySQL clients */ -/* (Error messages for the daemon are in sql/share/errmsg.txt) */ - -#ifdef __cplusplus -extern "C" { -#endif -void init_client_errs(void); -void finish_client_errs(void); -extern const char *client_errors[]; /* Error messages */ -#ifdef __cplusplus -} -#endif - -#define CR_MIN_ERROR 2000 /* For easier client code */ -#define CR_MAX_ERROR 2999 -#if !defined(ER) -#define ER(X) client_errors[(X)-CR_MIN_ERROR] -#endif -#define CLIENT_ERRMAP 2 /* Errormap used by my_error() */ - -/* Do not add error numbers before CR_ERROR_FIRST. */ -/* If necessary to add lower numbers, change CR_ERROR_FIRST accordingly. */ -#define CR_ERROR_FIRST 2000 /*Copy first error nr.*/ -#define CR_UNKNOWN_ERROR 2000 -#define CR_SOCKET_CREATE_ERROR 2001 -#define CR_CONNECTION_ERROR 2002 -#define CR_CONN_HOST_ERROR 2003 -#define CR_IPSOCK_ERROR 2004 -#define CR_UNKNOWN_HOST 2005 -#define CR_SERVER_GONE_ERROR 2006 -#define CR_VERSION_ERROR 2007 -#define CR_OUT_OF_MEMORY 2008 -#define CR_WRONG_HOST_INFO 2009 -#define CR_LOCALHOST_CONNECTION 2010 -#define CR_TCP_CONNECTION 2011 -#define CR_SERVER_HANDSHAKE_ERR 2012 -#define CR_SERVER_LOST 2013 -#define CR_COMMANDS_OUT_OF_SYNC 2014 -#define CR_NAMEDPIPE_CONNECTION 2015 -#define CR_NAMEDPIPEWAIT_ERROR 2016 -#define CR_NAMEDPIPEOPEN_ERROR 2017 -#define CR_NAMEDPIPESETSTATE_ERROR 2018 -#define CR_CANT_READ_CHARSET 2019 -#define CR_NET_PACKET_TOO_LARGE 2020 -#define CR_EMBEDDED_CONNECTION 2021 -#define CR_PROBE_SLAVE_STATUS 2022 -#define CR_PROBE_SLAVE_HOSTS 2023 -#define CR_PROBE_SLAVE_CONNECT 2024 -#define CR_PROBE_MASTER_CONNECT 2025 -#define CR_SSL_CONNECTION_ERROR 2026 -#define CR_MALFORMED_PACKET 2027 -#define CR_WRONG_LICENSE 2028 - -/* new 4.1 error codes */ -#define CR_NULL_POINTER 2029 -#define CR_NO_PREPARE_STMT 2030 -#define CR_PARAMS_NOT_BOUND 2031 -#define CR_DATA_TRUNCATED 2032 -#define CR_NO_PARAMETERS_EXISTS 2033 -#define CR_INVALID_PARAMETER_NO 2034 -#define CR_INVALID_BUFFER_USE 2035 -#define CR_UNSUPPORTED_PARAM_TYPE 2036 - -#define CR_SHARED_MEMORY_CONNECTION 2037 -#define CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR 2038 -#define CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR 2039 -#define CR_SHARED_MEMORY_CONNECT_FILE_MAP_ERROR 2040 -#define CR_SHARED_MEMORY_CONNECT_MAP_ERROR 2041 -#define CR_SHARED_MEMORY_FILE_MAP_ERROR 2042 -#define CR_SHARED_MEMORY_MAP_ERROR 2043 -#define CR_SHARED_MEMORY_EVENT_ERROR 2044 -#define CR_SHARED_MEMORY_CONNECT_ABANDONED_ERROR 2045 -#define CR_SHARED_MEMORY_CONNECT_SET_ERROR 2046 -#define CR_CONN_UNKNOW_PROTOCOL 2047 -#define CR_INVALID_CONN_HANDLE 2048 -#define CR_SECURE_AUTH 2049 -#define CR_FETCH_CANCELED 2050 -#define CR_NO_DATA 2051 -#define CR_NO_STMT_METADATA 2052 -#define CR_NO_RESULT_SET 2053 -#define CR_NOT_IMPLEMENTED 2054 -#define CR_SERVER_LOST_EXTENDED 2055 -#define CR_STMT_CLOSED 2056 -#define CR_NEW_STMT_METADATA 2057 -#define CR_ALREADY_CONNECTED 2058 -#define CR_AUTH_PLUGIN_CANNOT_LOAD 2059 -#define CR_ERROR_LAST /*Copy last error nr:*/ 2059 -/* Add error numbers before CR_ERROR_LAST and change it accordingly. */ - -#endif /* ERRMSG_INCLUDED */ diff --git a/deps/mysqllite/include/internal/atomic/gcc_builtins.h b/deps/mysqllite/include/internal/atomic/gcc_builtins.h deleted file mode 100644 index d03d28f572e986..00000000000000 --- a/deps/mysqllite/include/internal/atomic/gcc_builtins.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef ATOMIC_GCC_BUILTINS_INCLUDED -#define ATOMIC_GCC_BUILTINS_INCLUDED - -/* Copyright (C) 2008 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#define make_atomic_add_body(S) \ - v= __sync_fetch_and_add(a, v); -#define make_atomic_fas_body(S) \ - v= __sync_lock_test_and_set(a, v); -#define make_atomic_cas_body(S) \ - int ## S sav; \ - int ## S cmp_val= *cmp; \ - sav= __sync_val_compare_and_swap(a, cmp_val, set);\ - if (!(ret= (sav == cmp_val))) *cmp= sav - -#ifdef MY_ATOMIC_MODE_DUMMY -#define make_atomic_load_body(S) ret= *a -#define make_atomic_store_body(S) *a= v -#define MY_ATOMIC_MODE "gcc-builtins-up" - -#else -#define MY_ATOMIC_MODE "gcc-builtins-smp" -#define make_atomic_load_body(S) \ - ret= __sync_fetch_and_or(a, 0); -#define make_atomic_store_body(S) \ - (void) __sync_lock_test_and_set(a, v); -#endif - -#endif /* ATOMIC_GCC_BUILTINS_INCLUDED */ diff --git a/deps/mysqllite/include/internal/atomic/generic-msvc.h b/deps/mysqllite/include/internal/atomic/generic-msvc.h deleted file mode 100644 index a84cde6b2c3fd5..00000000000000 --- a/deps/mysqllite/include/internal/atomic/generic-msvc.h +++ /dev/null @@ -1,134 +0,0 @@ -/* Copyright (C) 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _atomic_h_cleanup_ -#define _atomic_h_cleanup_ "atomic/generic-msvc.h" - -/* - We don't implement anything specific for MY_ATOMIC_MODE_DUMMY, always use - intrinsics. - 8 and 16-bit atomics are not implemented, but it can be done if necessary. -*/ -#undef MY_ATOMIC_HAS_8_16 - -#include -/* - x86 compilers (both VS2003 or VS2005) never use instrinsics, but generate - function calls to kernel32 instead, even in the optimized build. - We force intrinsics as described in MSDN documentation for - _InterlockedCompareExchange. -*/ -#ifdef _M_IX86 - -#if (_MSC_VER >= 1500) -#include -#else -C_MODE_START -/*Visual Studio 2003 and earlier do not have prototypes for atomic intrinsics*/ -LONG _InterlockedCompareExchange (LONG volatile *Target, LONG Value, LONG Comp); -LONGLONG _InterlockedCompareExchange64 (LONGLONG volatile *Target, - LONGLONG Value, LONGLONG Comp); -C_MODE_END - -#pragma intrinsic(_InterlockedCompareExchange) -#pragma intrinsic(_InterlockedCompareExchange64) -#endif - -#define InterlockedCompareExchange _InterlockedCompareExchange -#define InterlockedCompareExchange64 _InterlockedCompareExchange64 -/* - No need to do something special for InterlockedCompareExchangePointer - as it is a #define to InterlockedCompareExchange. The same applies to - InterlockedExchangePointer. -*/ -#endif /*_M_IX86*/ - -#define MY_ATOMIC_MODE "msvc-intrinsics" -/* Implement using CAS on WIN32 */ -#define IL_COMP_EXCHG32(X,Y,Z) \ - InterlockedCompareExchange((volatile LONG *)(X),(Y),(Z)) -#define IL_COMP_EXCHG64(X,Y,Z) \ - InterlockedCompareExchange64((volatile LONGLONG *)(X), \ - (LONGLONG)(Y),(LONGLONG)(Z)) -#define IL_COMP_EXCHGptr InterlockedCompareExchangePointer - -#define make_atomic_cas_body(S) \ - int ## S initial_cmp= *cmp; \ - int ## S initial_a= IL_COMP_EXCHG ## S (a, set, initial_cmp); \ - if (!(ret= (initial_a == initial_cmp))) *cmp= initial_a; - -#ifndef _M_IX86 -/* Use full set of optimised functions on WIN64 */ -#define IL_EXCHG_ADD32(X,Y) \ - InterlockedExchangeAdd((volatile LONG *)(X),(Y)) -#define IL_EXCHG_ADD64(X,Y) \ - InterlockedExchangeAdd64((volatile LONGLONG *)(X),(LONGLONG)(Y)) -#define IL_EXCHG32(X,Y) \ - InterlockedExchange((volatile LONG *)(X),(Y)) -#define IL_EXCHG64(X,Y) \ - InterlockedExchange64((volatile LONGLONG *)(X),(LONGLONG)(Y)) -#define IL_EXCHGptr InterlockedExchangePointer - -#define make_atomic_add_body(S) \ - v= IL_EXCHG_ADD ## S (a, v) -#define make_atomic_swap_body(S) \ - v= IL_EXCHG ## S (a, v) -#define make_atomic_load_body(S) \ - ret= 0; /* avoid compiler warning */ \ - ret= IL_COMP_EXCHG ## S (a, ret, ret); -#endif -/* - my_yield_processor (equivalent of x86 PAUSE instruction) should be used - to improve performance on hyperthreaded CPUs. Intel recommends to use it in - spin loops also on non-HT machines to reduce power consumption (see e.g - http://softwarecommunity.intel.com/articles/eng/2004.htm) - - Running benchmarks for spinlocks implemented with InterlockedCompareExchange - and YieldProcessor shows that much better performance is achieved by calling - YieldProcessor in a loop - that is, yielding longer. On Intel boxes setting - loop count in the range 200-300 brought best results. - */ -#ifndef YIELD_LOOPS -#define YIELD_LOOPS 200 -#endif - -static __inline int my_yield_processor() -{ - int i; - for(i=0; irw) -#define my_atomic_rwlock_init(name) pthread_mutex_init(& (name)->rw, 0) -#define my_atomic_rwlock_rdlock(name) pthread_mutex_lock(& (name)->rw) -#define my_atomic_rwlock_wrlock(name) pthread_mutex_lock(& (name)->rw) -#define my_atomic_rwlock_rdunlock(name) pthread_mutex_unlock(& (name)->rw) -#define my_atomic_rwlock_wrunlock(name) pthread_mutex_unlock(& (name)->rw) - -#else /* SAFE_MUTEX */ - -/* - SAFE_MUTEX pollutes the compiling name space with macros - that alter pthread_mutex_t, pthread_mutex_init, etc. - Atomic operations should never use the safe mutex wrappers. - Unfortunately, there is no way to have both: - - safe mutex macros expanding pthread_mutex_lock to safe_mutex_lock - - my_atomic macros expanding to unmodified pthread_mutex_lock - inlined in the same compilation unit. - So, in case of SAFE_MUTEX, a function call is required. - Given that SAFE_MUTEX is a debugging facility, - this extra function call is not a performance concern for - production builds. -*/ -C_MODE_START -extern void plain_pthread_mutex_init(safe_mutex_t *); -extern void plain_pthread_mutex_destroy(safe_mutex_t *); -extern void plain_pthread_mutex_lock(safe_mutex_t *); -extern void plain_pthread_mutex_unlock(safe_mutex_t *); -C_MODE_END - -#define my_atomic_rwlock_destroy(name) plain_pthread_mutex_destroy(&(name)->rw) -#define my_atomic_rwlock_init(name) plain_pthread_mutex_init(&(name)->rw) -#define my_atomic_rwlock_rdlock(name) plain_pthread_mutex_lock(&(name)->rw) -#define my_atomic_rwlock_wrlock(name) plain_pthread_mutex_lock(&(name)->rw) -#define my_atomic_rwlock_rdunlock(name) plain_pthread_mutex_unlock(&(name)->rw) -#define my_atomic_rwlock_wrunlock(name) plain_pthread_mutex_unlock(&(name)->rw) - -#endif /* SAFE_MUTEX */ - -#define MY_ATOMIC_MODE "mutex" -#ifndef MY_ATOMIC_MODE_RWLOCKS -#define MY_ATOMIC_MODE_RWLOCKS 1 -#endif -#endif - -#define make_atomic_add_body(S) int ## S sav; sav= *a; *a+= v; v=sav; -#define make_atomic_fas_body(S) int ## S sav; sav= *a; *a= v; v=sav; -#define make_atomic_cas_body(S) if ((ret= (*a == *cmp))) *a= set; else *cmp=*a; -#define make_atomic_load_body(S) ret= *a; -#define make_atomic_store_body(S) *a= v; - -#endif /* ATOMIC_RWLOCK_INCLUDED */ diff --git a/deps/mysqllite/include/internal/atomic/solaris.h b/deps/mysqllite/include/internal/atomic/solaris.h deleted file mode 100644 index 5643f878cd2a08..00000000000000 --- a/deps/mysqllite/include/internal/atomic/solaris.h +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2008 MySQL AB, 2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _atomic_h_cleanup_ -#define _atomic_h_cleanup_ "atomic/solaris.h" - -#include - -#define MY_ATOMIC_MODE "solaris-atomic" - -#if defined(__GNUC__) -#define atomic_typeof(T,V) __typeof__(V) -#else -#define atomic_typeof(T,V) T -#endif - -#define uintptr_t void * -#define atomic_or_ptr_nv(X,Y) (void *)atomic_or_ulong_nv((volatile ulong_t *)X, Y) - -#define make_atomic_cas_body(S) \ - atomic_typeof(uint ## S ## _t, *cmp) sav; \ - sav = atomic_cas_ ## S( \ - (volatile uint ## S ## _t *)a, \ - (uint ## S ## _t)*cmp, \ - (uint ## S ## _t)set); \ - if (! (ret= (sav == *cmp))) \ - *cmp= sav; - -#define make_atomic_add_body(S) \ - int ## S nv; /* new value */ \ - nv= atomic_add_ ## S ## _nv((volatile uint ## S ## _t *)a, v); \ - v= nv - v - -/* ------------------------------------------------------------------------ */ - -#ifdef MY_ATOMIC_MODE_DUMMY - -#define make_atomic_load_body(S) ret= *a -#define make_atomic_store_body(S) *a= v - -#else /* MY_ATOMIC_MODE_DUMMY */ - -#define make_atomic_load_body(S) \ - ret= atomic_or_ ## S ## _nv((volatile uint ## S ## _t *)a, 0) - -#define make_atomic_store_body(S) \ - (void) atomic_swap_ ## S((volatile uint ## S ## _t *)a, (uint ## S ## _t)v) - -#endif - -#define make_atomic_fas_body(S) \ - v= atomic_swap_ ## S((volatile uint ## S ## _t *)a, (uint ## S ## _t)v) - -#else /* cleanup */ - -#undef uintptr_t -#undef atomic_or_ptr_nv - -#endif - diff --git a/deps/mysqllite/include/internal/atomic/x86-gcc.h b/deps/mysqllite/include/internal/atomic/x86-gcc.h deleted file mode 100644 index ea3202aa9c9ba5..00000000000000 --- a/deps/mysqllite/include/internal/atomic/x86-gcc.h +++ /dev/null @@ -1,145 +0,0 @@ -#ifndef ATOMIC_X86_GCC_INCLUDED -#define ATOMIC_X86_GCC_INCLUDED - -/* Copyright (C) 2006 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - XXX 64-bit atomic operations can be implemented using - cmpxchg8b, if necessary. Though I've heard that not all 64-bit - architectures support double-word (128-bit) cas. -*/ - -/* - No special support of 8 and 16 bit operations are implemented here - currently. -*/ -#undef MY_ATOMIC_HAS_8_AND_16 - -#ifdef __x86_64__ -# ifdef MY_ATOMIC_NO_XADD -# define MY_ATOMIC_MODE "gcc-amd64" LOCK_prefix "-no-xadd" -# else -# define MY_ATOMIC_MODE "gcc-amd64" LOCK_prefix -# endif -#else -# ifdef MY_ATOMIC_NO_XADD -# define MY_ATOMIC_MODE "gcc-x86" LOCK_prefix "-no-xadd" -# else -# define MY_ATOMIC_MODE "gcc-x86" LOCK_prefix -# endif -#endif - -/* fix -ansi errors while maintaining readability */ -#ifndef asm -#define asm __asm__ -#endif - -#ifndef MY_ATOMIC_NO_XADD -#define make_atomic_add_body(S) make_atomic_add_body ## S -#define make_atomic_cas_body(S) make_atomic_cas_body ## S -#endif - -#define make_atomic_add_body32 \ - asm volatile (LOCK_prefix "; xadd %0, %1;" \ - : "+r" (v), "=m" (*a) \ - : "m" (*a) \ - : "memory") - -#define make_atomic_cas_body32 \ - __typeof__(*cmp) sav; \ - asm volatile (LOCK_prefix "; cmpxchg %3, %0; setz %2;" \ - : "=m" (*a), "=a" (sav), "=q" (ret) \ - : "r" (set), "m" (*a), "a" (*cmp) \ - : "memory"); \ - if (!ret) \ - *cmp= sav - -#ifdef __x86_64__ -#define make_atomic_add_body64 make_atomic_add_body32 -#define make_atomic_cas_body64 make_atomic_cas_body32 - -#define make_atomic_fas_body(S) \ - asm volatile ("xchg %0, %1;" \ - : "+r" (v), "=m" (*a) \ - : "m" (*a) \ - : "memory") - -/* - Actually 32/64-bit reads/writes are always atomic on x86_64, - nonetheless issue memory barriers as appropriate. -*/ -#define make_atomic_load_body(S) \ - /* Serialize prior load and store operations. */ \ - asm volatile ("mfence" ::: "memory"); \ - ret= *a; \ - /* Prevent compiler from reordering instructions. */ \ - asm volatile ("" ::: "memory") -#define make_atomic_store_body(S) \ - asm volatile ("; xchg %0, %1;" \ - : "=m" (*a), "+r" (v) \ - : "m" (*a) \ - : "memory") - -#else -/* - Use default implementations of 64-bit operations since we solved - the 64-bit problem on 32-bit platforms for CAS, no need to solve it - once more for ADD, LOAD, STORE and FAS as well. - Since we already added add32 support, we need to define add64 - here, but we haven't defined fas, load and store at all, so - we can fallback on default implementations. -*/ -#define make_atomic_add_body64 \ - int64 tmp=*a; \ - while (!my_atomic_cas64(a, &tmp, tmp+v)) ; \ - v=tmp; - -/* - On some platforms (e.g. Mac OS X and Solaris) the ebx register - is held as a pointer to the global offset table. Thus we're not - allowed to use the b-register on those platforms when compiling - PIC code, to avoid this we push ebx and pop ebx. The new value - is copied directly from memory to avoid problems with a implicit - manipulation of the stack pointer by the push. - - cmpxchg8b works on both 32-bit platforms and 64-bit platforms but - the code here is only used on 32-bit platforms, on 64-bit - platforms the much simpler make_atomic_cas_body32 will work - fine. -*/ -#define make_atomic_cas_body64 \ - asm volatile ("push %%ebx;" \ - "movl (%%ecx), %%ebx;" \ - "movl 4(%%ecx), %%ecx;" \ - LOCK_prefix "; cmpxchg8b %0;" \ - "setz %2; pop %%ebx" \ - : "=m" (*a), "+A" (*cmp), "=c" (ret) \ - : "c" (&set), "m" (*a) \ - : "memory", "esp") -#endif - -/* - The implementation of make_atomic_cas_body32 is adaptable to - the OS word size, so on 64-bit platforms it will automatically - adapt to 64-bits and so it will work also on 64-bit platforms -*/ -#define make_atomic_cas_bodyptr make_atomic_cas_body32 - -#ifdef MY_ATOMIC_MODE_DUMMY -#define make_atomic_load_body(S) ret=*a -#define make_atomic_store_body(S) *a=v -#endif -#endif /* ATOMIC_X86_GCC_INCLUDED */ diff --git a/deps/mysqllite/include/internal/base64.h b/deps/mysqllite/include/internal/base64.h deleted file mode 100644 index 4ac0aa72ad8e4c..00000000000000 --- a/deps/mysqllite/include/internal/base64.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef __BASE64_H_INCLUDED__ -#define __BASE64_H_INCLUDED__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - Calculate how much memory needed for dst of base64_encode() -*/ -int base64_needed_encoded_length(int length_of_data); - -/* - Calculate how much memory needed for dst of base64_decode() -*/ -int base64_needed_decoded_length(int length_of_encoded_data); - -/* - Encode data as a base64 string -*/ -int base64_encode(const void *src, size_t src_len, char *dst); - -/* - Decode a base64 string into data -*/ -int base64_decode(const char *src, size_t src_len, - void *dst, const char **end_ptr); - - -#ifdef __cplusplus -} -#endif -#endif /* !__BASE64_H_INCLUDED__ */ diff --git a/deps/mysqllite/include/internal/hash.h b/deps/mysqllite/include/internal/hash.h deleted file mode 100644 index d390cb7d4e6a5c..00000000000000 --- a/deps/mysqllite/include/internal/hash.h +++ /dev/null @@ -1,108 +0,0 @@ -/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Dynamic hashing of record with different key-length */ - -#ifndef _hash_h -#define _hash_h - -#include "my_global.h" /* uchar */ -#include "my_sys.h" /* DYNAMIC_ARRAY */ - -/* - This forward declaration is used from C files where the real - definition is included before. Since C does not allow repeated - typedef declarations, even when identical, the definition may not be - repeated. -*/ -#ifndef CHARSET_INFO_DEFINED -#define CHARSET_INFO_DEFINED -typedef struct charset_info_st CHARSET_INFO; -#endif /* CHARSET_INFO_DEFINED */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - Overhead to store an element in hash - Can be used to approximate memory consumption for a hash - */ -#define HASH_OVERHEAD (sizeof(char*)*2) - -/* flags for hash_init */ -#define HASH_UNIQUE 1 /* hash_insert fails on duplicate key */ - -typedef uint my_hash_value_type; -typedef uchar *(*my_hash_get_key)(const uchar *,size_t*,my_bool); -typedef void (*my_hash_free_key)(void *); - -typedef struct st_hash { - size_t key_offset,key_length; /* Length of key if const length */ - size_t blength; - ulong records; - uint flags; - DYNAMIC_ARRAY array; /* Place for hash_keys */ - my_hash_get_key get_key; - void (*free)(void *); - CHARSET_INFO *charset; -} HASH; - -/* A search iterator state */ -typedef uint HASH_SEARCH_STATE; - -#define my_hash_init(A,B,C,D,E,F,G,H) \ - _my_hash_init(A,0,B,C,D,E,F,G,H) -#define my_hash_init2(A,B,C,D,E,F,G,H,I) \ - _my_hash_init(A,B,C,D,E,F,G,H,I) -my_bool _my_hash_init(HASH *hash, uint growth_size, CHARSET_INFO *charset, - ulong default_array_elements, size_t key_offset, - size_t key_length, my_hash_get_key get_key, - void (*free_element)(void*), - uint flags); -void my_hash_free(HASH *tree); -void my_hash_reset(HASH *hash); -uchar *my_hash_element(HASH *hash, ulong idx); -uchar *my_hash_search(const HASH *info, const uchar *key, size_t length); -uchar *my_hash_search_using_hash_value(const HASH *info, - my_hash_value_type hash_value, - const uchar *key, size_t length); -my_hash_value_type my_calc_hash(const HASH *info, - const uchar *key, size_t length); -uchar *my_hash_first(const HASH *info, const uchar *key, size_t length, - HASH_SEARCH_STATE *state); -uchar *my_hash_first_from_hash_value(const HASH *info, - my_hash_value_type hash_value, - const uchar *key, - size_t length, - HASH_SEARCH_STATE *state); -uchar *my_hash_next(const HASH *info, const uchar *key, size_t length, - HASH_SEARCH_STATE *state); -my_bool my_hash_insert(HASH *info, const uchar *data); -my_bool my_hash_delete(HASH *hash, uchar *record); -my_bool my_hash_update(HASH *hash, uchar *record, uchar *old_key, - size_t old_key_length); -void my_hash_replace(HASH *hash, HASH_SEARCH_STATE *state, uchar *new_row); -my_bool my_hash_check(HASH *hash); /* Only in debug library */ - -#define my_hash_clear(H) bzero((char*) (H), sizeof(*(H))) -#define my_hash_inited(H) ((H)->blength != 0) -#define my_hash_init_opt(A,B,C,D,E,F,G,H) \ - (!my_hash_inited(A) && _my_hash_init(A,0,B,C,D,E,F,G,H)) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/deps/mysqllite/include/internal/lf.h b/deps/mysqllite/include/internal/lf.h deleted file mode 100644 index e9fb094493f037..00000000000000 --- a/deps/mysqllite/include/internal/lf.h +++ /dev/null @@ -1,265 +0,0 @@ -/* Copyright (C) 2007-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _lf_h -#define _lf_h - -#include - -C_MODE_START - -/* - Helpers to define both func() and _func(), where - func() is a _func() protected by my_atomic_rwlock_wrlock() -*/ - -#define lock_wrap(f, t, proto_args, args, lock) \ -t _ ## f proto_args; \ -static inline t f proto_args \ -{ \ - t ret; \ - my_atomic_rwlock_wrlock(lock); \ - ret= _ ## f args; \ - my_atomic_rwlock_wrunlock(lock); \ - return ret; \ -} - -#define lock_wrap_void(f, proto_args, args, lock) \ -void _ ## f proto_args; \ -static inline void f proto_args \ -{ \ - my_atomic_rwlock_wrlock(lock); \ - _ ## f args; \ - my_atomic_rwlock_wrunlock(lock); \ -} - -#define nolock_wrap(f, t, proto_args, args) \ -t _ ## f proto_args; \ -static inline t f proto_args \ -{ \ - return _ ## f args; \ -} - -#define nolock_wrap_void(f, proto_args, args) \ -void _ ## f proto_args; \ -static inline void f proto_args \ -{ \ - _ ## f args; \ -} - -/* - wait-free dynamic array, see lf_dynarray.c - - 4 levels of 256 elements each mean 4311810304 elements in an array - it - should be enough for a while -*/ -#define LF_DYNARRAY_LEVEL_LENGTH 256 -#define LF_DYNARRAY_LEVELS 4 - -typedef struct { - void * volatile level[LF_DYNARRAY_LEVELS]; - uint size_of_element; - my_atomic_rwlock_t lock; -} LF_DYNARRAY; - -typedef int (*lf_dynarray_func)(void *, void *); - -void lf_dynarray_init(LF_DYNARRAY *array, uint element_size); -void lf_dynarray_destroy(LF_DYNARRAY *array); - -nolock_wrap(lf_dynarray_value, void *, - (LF_DYNARRAY *array, uint idx), - (array, idx)) -lock_wrap(lf_dynarray_lvalue, void *, - (LF_DYNARRAY *array, uint idx), - (array, idx), - &array->lock) -nolock_wrap(lf_dynarray_iterate, int, - (LF_DYNARRAY *array, lf_dynarray_func func, void *arg), - (array, func, arg)) - -/* - pin manager for memory allocator, lf_alloc-pin.c -*/ - -#define LF_PINBOX_PINS 4 -#define LF_PURGATORY_SIZE 10 - -typedef void lf_pinbox_free_func(void *, void *, void*); - -typedef struct { - LF_DYNARRAY pinarray; - lf_pinbox_free_func *free_func; - void *free_func_arg; - uint free_ptr_offset; - uint32 volatile pinstack_top_ver; /* this is a versioned pointer */ - uint32 volatile pins_in_array; /* number of elements in array */ -} LF_PINBOX; - -typedef struct { - void * volatile pin[LF_PINBOX_PINS]; - LF_PINBOX *pinbox; - void **stack_ends_here; - void *purgatory; - uint32 purgatory_count; - uint32 volatile link; -/* we want sizeof(LF_PINS) to be 64 to avoid false sharing */ -#if SIZEOF_INT*2+SIZEOF_CHARP*(LF_PINBOX_PINS+3) != 64 - char pad[64-sizeof(uint32)*2-sizeof(void*)*(LF_PINBOX_PINS+3)]; -#endif -} LF_PINS; - -/* - shortcut macros to do an atomic_wrlock on a structure that uses pins - (e.g. lf_hash). -*/ -#define lf_rwlock_by_pins(PINS) \ - my_atomic_rwlock_wrlock(&(PINS)->pinbox->pinarray.lock) -#define lf_rwunlock_by_pins(PINS) \ - my_atomic_rwlock_wrunlock(&(PINS)->pinbox->pinarray.lock) - -/* - compile-time assert, to require "no less than N" pins - it's enough if it'll fail on at least one compiler, so - we'll enable it on GCC only, which supports zero-length arrays. -*/ -#if defined(__GNUC__) && defined(MY_LF_EXTRA_DEBUG) -#define LF_REQUIRE_PINS(N) \ - static const char require_pins[LF_PINBOX_PINS-N] \ - __attribute__ ((unused)); \ - static const int LF_NUM_PINS_IN_THIS_FILE= N; -#define _lf_pin(PINS, PIN, ADDR) \ - ( \ - assert(PIN < LF_NUM_PINS_IN_THIS_FILE), \ - my_atomic_storeptr(&(PINS)->pin[PIN], (ADDR)) \ - ) -#else -#define LF_REQUIRE_PINS(N) -#define _lf_pin(PINS, PIN, ADDR) my_atomic_storeptr(&(PINS)->pin[PIN], (ADDR)) -#endif - -#define _lf_unpin(PINS, PIN) _lf_pin(PINS, PIN, NULL) -#define lf_pin(PINS, PIN, ADDR) \ - do { \ - lf_rwlock_by_pins(PINS); \ - _lf_pin(PINS, PIN, ADDR); \ - lf_rwunlock_by_pins(PINS); \ - } while (0) -#define lf_unpin(PINS, PIN) lf_pin(PINS, PIN, NULL) -#define _lf_assert_pin(PINS, PIN) assert((PINS)->pin[PIN] != 0) -#define _lf_assert_unpin(PINS, PIN) assert((PINS)->pin[PIN] == 0) - -void lf_pinbox_init(LF_PINBOX *pinbox, uint free_ptr_offset, - lf_pinbox_free_func *free_func, void * free_func_arg); -void lf_pinbox_destroy(LF_PINBOX *pinbox); - -lock_wrap(lf_pinbox_get_pins, LF_PINS *, - (LF_PINBOX *pinbox), - (pinbox), - &pinbox->pinarray.lock) -lock_wrap_void(lf_pinbox_put_pins, - (LF_PINS *pins), - (pins), - &pins->pinbox->pinarray.lock) -lock_wrap_void(lf_pinbox_free, - (LF_PINS *pins, void *addr), - (pins, addr), - &pins->pinbox->pinarray.lock) - -/* - memory allocator, lf_alloc-pin.c -*/ - -typedef struct st_lf_allocator { - LF_PINBOX pinbox; - uchar * volatile top; - uint element_size; - uint32 volatile mallocs; -} LF_ALLOCATOR; - -void lf_alloc_init(LF_ALLOCATOR *allocator, uint size, uint free_ptr_offset); -void lf_alloc_destroy(LF_ALLOCATOR *allocator); -uint lf_alloc_pool_count(LF_ALLOCATOR *allocator); -/* - shortcut macros to access underlying pinbox functions from an LF_ALLOCATOR - see _lf_pinbox_get_pins() and _lf_pinbox_put_pins() -*/ -#define _lf_alloc_free(PINS, PTR) _lf_pinbox_free((PINS), (PTR)) -#define lf_alloc_free(PINS, PTR) lf_pinbox_free((PINS), (PTR)) -#define _lf_alloc_get_pins(A) _lf_pinbox_get_pins(&(A)->pinbox) -#define lf_alloc_get_pins(A) lf_pinbox_get_pins(&(A)->pinbox) -#define _lf_alloc_put_pins(PINS) _lf_pinbox_put_pins(PINS) -#define lf_alloc_put_pins(PINS) lf_pinbox_put_pins(PINS) -#define lf_alloc_direct_free(ALLOC, ADDR) my_free((ADDR)) - -lock_wrap(lf_alloc_new, void *, - (LF_PINS *pins), - (pins), - &pins->pinbox->pinarray.lock) - -C_MODE_END - -/* - extendible hash, lf_hash.c -*/ -#include - -C_MODE_START - -#define LF_HASH_UNIQUE 1 - -/* lf_hash overhead per element is sizeof(LF_SLIST). */ - -typedef struct { - LF_DYNARRAY array; /* hash itself */ - LF_ALLOCATOR alloc; /* allocator for elements */ - my_hash_get_key get_key; /* see HASH */ - CHARSET_INFO *charset; /* see HASH */ - uint key_offset, key_length; /* see HASH */ - uint element_size; /* size of memcpy'ed area on insert */ - uint flags; /* LF_HASH_UNIQUE, etc */ - int32 volatile size; /* size of array */ - int32 volatile count; /* number of elements in the hash */ -} LF_HASH; - -void lf_hash_init(LF_HASH *hash, uint element_size, uint flags, - uint key_offset, uint key_length, my_hash_get_key get_key, - CHARSET_INFO *charset); -void lf_hash_destroy(LF_HASH *hash); -int lf_hash_insert(LF_HASH *hash, LF_PINS *pins, const void *data); -void *lf_hash_search(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen); -int lf_hash_delete(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen); -/* - shortcut macros to access underlying pinbox functions from an LF_HASH - see _lf_pinbox_get_pins() and _lf_pinbox_put_pins() -*/ -#define _lf_hash_get_pins(HASH) _lf_alloc_get_pins(&(HASH)->alloc) -#define lf_hash_get_pins(HASH) lf_alloc_get_pins(&(HASH)->alloc) -#define _lf_hash_put_pins(PINS) _lf_pinbox_put_pins(PINS) -#define lf_hash_put_pins(PINS) lf_pinbox_put_pins(PINS) -#define lf_hash_search_unpin(PINS) lf_unpin((PINS), 2) -/* - cleanup -*/ - -#undef lock_wrap_void -#undef lock_wrap -#undef nolock_wrap_void -#undef nolock_wrap - -C_MODE_END - -#endif - diff --git a/deps/mysqllite/include/internal/my_aes.h b/deps/mysqllite/include/internal/my_aes.h deleted file mode 100644 index 2e2a66b4968253..00000000000000 --- a/deps/mysqllite/include/internal/my_aes.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef MY_AES_INCLUDED -#define MY_AES_INCLUDED - -/* Copyright (C) 2002 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -/* Header file for my_aes.c */ -/* Wrapper to give simple interface for MySQL to AES standard encryption */ - -#include "rijndael.h" - -C_MODE_START - -#define AES_KEY_LENGTH 128 /* Must be 128 192 or 256 */ - -/* - my_aes_encrypt - Crypt buffer with AES encryption algorithm. - source - Pointer to data for encryption - source_length - size of encryption data - dest - buffer to place encrypted data (must be large enough) - key - Key to be used for encryption - kel_length - Length of the key. Will handle keys of any length - - returns - size of encrypted data, or negative in case of error. -*/ - -int my_aes_encrypt(const char *source, int source_length, char *dest, - const char *key, int key_length); - -/* - my_aes_decrypt - DeCrypt buffer with AES encryption algorithm. - source - Pointer to data for decryption - source_length - size of encrypted data - dest - buffer to place decrypted data (must be large enough) - key - Key to be used for decryption - kel_length - Length of the key. Will handle keys of any length - - returns - size of original data, or negative in case of error. -*/ - - -int my_aes_decrypt(const char *source, int source_length, char *dest, - const char *key, int key_length); - -/* - my_aes_get_size - get size of buffer which will be large enough for encrypted - data - source_length - length of data to be encrypted - - returns - size of buffer required to store encrypted data -*/ - -int my_aes_get_size(int source_length); - -C_MODE_END - -#endif /* MY_AES_INCLUDED */ diff --git a/deps/mysqllite/include/internal/my_alarm.h b/deps/mysqllite/include/internal/my_alarm.h deleted file mode 100644 index fa396cf02f975b..00000000000000 --- a/deps/mysqllite/include/internal/my_alarm.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - File to include when we want to use alarm or a loop_counter to display - some information when a program is running -*/ -#ifndef _my_alarm_h -#define _my_alarm_h -#ifdef __cplusplus -extern "C" { -#endif - -extern int volatile my_have_got_alarm; -extern ulong my_time_to_wait_for_lock; - -#if defined(HAVE_ALARM) && !defined(NO_ALARM_LOOP) -#include -#define ALARM_VARIABLES uint alarm_old=0; \ - sig_return alarm_signal=0 -#define ALARM_INIT my_have_got_alarm=0 ; \ - alarm_old=(uint) alarm(MY_HOW_OFTEN_TO_ALARM); \ - alarm_signal=signal(SIGALRM,my_set_alarm_variable); -#define ALARM_END (void) signal(SIGALRM,alarm_signal); \ - (void) alarm(alarm_old); -#define ALARM_TEST my_have_got_alarm -#ifdef SIGNAL_HANDLER_RESET_ON_DELIVERY -#define ALARM_REINIT (void) alarm(MY_HOW_OFTEN_TO_ALARM); \ - (void) signal(SIGALRM,my_set_alarm_variable);\ - my_have_got_alarm=0; -#else -#define ALARM_REINIT (void) alarm((uint) MY_HOW_OFTEN_TO_ALARM); \ - my_have_got_alarm=0; -#endif /* SIGNAL_HANDLER_RESET_ON_DELIVERY */ -#else -#define ALARM_VARIABLES long alarm_pos=0,alarm_end_pos=MY_HOW_OFTEN_TO_WRITE-1 -#define ALARM_INIT -#define ALARM_END -#define ALARM_TEST (alarm_pos++ >= alarm_end_pos) -#define ALARM_REINIT alarm_end_pos+=MY_HOW_OFTEN_TO_WRITE -#endif /* HAVE_ALARM */ - -#ifdef __cplusplus -} -#endif -#endif diff --git a/deps/mysqllite/include/internal/my_atomic.h b/deps/mysqllite/include/internal/my_atomic.h deleted file mode 100644 index c2d514012d963d..00000000000000 --- a/deps/mysqllite/include/internal/my_atomic.h +++ /dev/null @@ -1,287 +0,0 @@ -#ifndef MY_ATOMIC_INCLUDED -#define MY_ATOMIC_INCLUDED - -/* Copyright (C) 2006 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - This header defines five atomic operations: - - my_atomic_add#(&var, what) - 'Fetch and Add' - add 'what' to *var, and return the old value of *var - - my_atomic_fas#(&var, what) - 'Fetch And Store' - store 'what' in *var, and return the old value of *var - - my_atomic_cas#(&var, &old, new) - An odd variation of 'Compare And Set/Swap' - if *var is equal to *old, then store 'new' in *var, and return TRUE - otherwise store *var in *old, and return FALSE - Usually, &old should not be accessed if the operation is successful. - - my_atomic_load#(&var) - return *var - - my_atomic_store#(&var, what) - store 'what' in *var - - '#' is substituted by a size suffix - 8, 16, 32, 64, or ptr - (e.g. my_atomic_add8, my_atomic_fas32, my_atomic_casptr). - - NOTE This operations are not always atomic, so they always must be - enclosed in my_atomic_rwlock_rdlock(lock)/my_atomic_rwlock_rdunlock(lock) - or my_atomic_rwlock_wrlock(lock)/my_atomic_rwlock_wrunlock(lock). - Hint: if a code block makes intensive use of atomic ops, it make sense - to take/release rwlock once for the whole block, not for every statement. - - On architectures where these operations are really atomic, rwlocks will - be optimized away. - 8- and 16-bit atomics aren't implemented for windows (see generic-msvc.h), - but can be added, if necessary. -*/ - -#ifndef my_atomic_rwlock_init - -#define intptr void * -/** - Currently we don't support 8-bit and 16-bit operations. - It can be added later if needed. -*/ -#undef MY_ATOMIC_HAS_8_16 - -#ifndef MY_ATOMIC_MODE_RWLOCKS -/* - * Attempt to do atomic ops without locks - */ -#include "atomic/nolock.h" -#endif - -#ifndef make_atomic_cas_body -/* nolock.h was not able to generate even a CAS function, fall back */ -#include "atomic/rwlock.h" -#endif - -/* define missing functions by using the already generated ones */ -#ifndef make_atomic_add_body -#define make_atomic_add_body(S) \ - int ## S tmp=*a; \ - while (!my_atomic_cas ## S(a, &tmp, tmp+v)) ; \ - v=tmp; -#endif -#ifndef make_atomic_fas_body -#define make_atomic_fas_body(S) \ - int ## S tmp=*a; \ - while (!my_atomic_cas ## S(a, &tmp, v)) ; \ - v=tmp; -#endif -#ifndef make_atomic_load_body -#define make_atomic_load_body(S) \ - ret= 0; /* avoid compiler warning */ \ - (void)(my_atomic_cas ## S(a, &ret, ret)); -#endif -#ifndef make_atomic_store_body -#define make_atomic_store_body(S) \ - (void)(my_atomic_fas ## S (a, v)); -#endif - -/* - transparent_union doesn't work in g++ - Bug ? - - Darwin's gcc doesn't want to put pointers in a transparent_union - when built with -arch ppc64. Complains: - warning: 'transparent_union' attribute ignored -*/ -#if defined(__GNUC__) && !defined(__cplusplus) && \ - ! (defined(__APPLE__) && (defined(_ARCH_PPC64) ||defined (_ARCH_PPC))) -/* - we want to be able to use my_atomic_xxx functions with - both signed and unsigned integers. But gcc will issue a warning - "passing arg N of `my_atomic_XXX' as [un]signed due to prototype" - if the signedness of the argument doesn't match the prototype, or - "pointer targets in passing argument N of my_atomic_XXX differ in signedness" - if int* is used where uint* is expected (or vice versa). - Let's shut these warnings up -*/ -#define make_transparent_unions(S) \ - typedef union { \ - int ## S i; \ - uint ## S u; \ - } U_ ## S __attribute__ ((transparent_union)); \ - typedef union { \ - int ## S volatile *i; \ - uint ## S volatile *u; \ - } Uv_ ## S __attribute__ ((transparent_union)); -#define uintptr intptr -make_transparent_unions(8) -make_transparent_unions(16) -make_transparent_unions(32) -make_transparent_unions(64) -make_transparent_unions(ptr) -#undef uintptr -#undef make_transparent_unions -#define a U_a.i -#define cmp U_cmp.i -#define v U_v.i -#define set U_set.i -#else -#define U_8 int8 -#define U_16 int16 -#define U_32 int32 -#define U_64 int64 -#define U_ptr intptr -#define Uv_8 int8 -#define Uv_16 int16 -#define Uv_32 int32 -#define Uv_64 int64 -#define Uv_ptr intptr -#define U_a volatile *a -#define U_cmp *cmp -#define U_v v -#define U_set set -#endif /* __GCC__ transparent_union magic */ - -#define make_atomic_cas(S) \ -static inline int my_atomic_cas ## S(Uv_ ## S U_a, \ - Uv_ ## S U_cmp, U_ ## S U_set) \ -{ \ - int8 ret; \ - make_atomic_cas_body(S); \ - return ret; \ -} - -#define make_atomic_add(S) \ -static inline int ## S my_atomic_add ## S( \ - Uv_ ## S U_a, U_ ## S U_v) \ -{ \ - make_atomic_add_body(S); \ - return v; \ -} - -#define make_atomic_fas(S) \ -static inline int ## S my_atomic_fas ## S( \ - Uv_ ## S U_a, U_ ## S U_v) \ -{ \ - make_atomic_fas_body(S); \ - return v; \ -} - -#define make_atomic_load(S) \ -static inline int ## S my_atomic_load ## S(Uv_ ## S U_a) \ -{ \ - int ## S ret; \ - make_atomic_load_body(S); \ - return ret; \ -} - -#define make_atomic_store(S) \ -static inline void my_atomic_store ## S( \ - Uv_ ## S U_a, U_ ## S U_v) \ -{ \ - make_atomic_store_body(S); \ -} - -#ifdef MY_ATOMIC_HAS_8_16 -make_atomic_cas(8) -make_atomic_cas(16) -#endif -make_atomic_cas(32) -make_atomic_cas(64) -make_atomic_cas(ptr) - -#ifdef MY_ATOMIC_HAS_8_16 -make_atomic_add(8) -make_atomic_add(16) -#endif -make_atomic_add(32) -make_atomic_add(64) - -#ifdef MY_ATOMIC_HAS_8_16 -make_atomic_load(8) -make_atomic_load(16) -#endif -make_atomic_load(32) -make_atomic_load(64) -make_atomic_load(ptr) - -#ifdef MY_ATOMIC_HAS_8_16 -make_atomic_fas(8) -make_atomic_fas(16) -#endif -make_atomic_fas(32) -make_atomic_fas(64) -make_atomic_fas(ptr) - -#ifdef MY_ATOMIC_HAS_8_16 -make_atomic_store(8) -make_atomic_store(16) -#endif -make_atomic_store(32) -make_atomic_store(64) -make_atomic_store(ptr) - -#ifdef _atomic_h_cleanup_ -#include _atomic_h_cleanup_ -#undef _atomic_h_cleanup_ -#endif - -#undef U_8 -#undef U_16 -#undef U_32 -#undef U_64 -#undef U_ptr -#undef Uv_8 -#undef Uv_16 -#undef Uv_32 -#undef Uv_64 -#undef Uv_ptr -#undef a -#undef cmp -#undef v -#undef set -#undef U_a -#undef U_cmp -#undef U_v -#undef U_set -#undef make_atomic_add -#undef make_atomic_cas -#undef make_atomic_load -#undef make_atomic_store -#undef make_atomic_fas -#undef make_atomic_add_body -#undef make_atomic_cas_body -#undef make_atomic_load_body -#undef make_atomic_store_body -#undef make_atomic_fas_body -#undef intptr - -/* - the macro below defines (as an expression) the code that - will be run in spin-loops. Intel manuals recummend to have PAUSE there. - It is expected to be defined in include/atomic/ *.h files -*/ -#ifndef LF_BACKOFF -#define LF_BACKOFF (1) -#endif - -#define MY_ATOMIC_OK 0 -#define MY_ATOMIC_NOT_1CPU 1 -extern int my_atomic_initialize(); - -#endif - -#endif /* MY_ATOMIC_INCLUDED */ diff --git a/deps/mysqllite/include/internal/my_base.h b/deps/mysqllite/include/internal/my_base.h deleted file mode 100644 index 347bda01befd5c..00000000000000 --- a/deps/mysqllite/include/internal/my_base.h +++ /dev/null @@ -1,572 +0,0 @@ -/* Copyright (C) 2000, 2011, Oracle and/or its affiliates. All rights - reserved - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* This file includes constants used with all databases */ - -#ifndef _my_base_h -#define _my_base_h - -#ifndef stdin /* Included first in handler */ -#define CHSIZE_USED -#include -#include /* This includes types */ -#include -#include -#include - -#ifndef EOVERFLOW -#define EOVERFLOW 84 -#endif - -#endif /* stdin */ -#include - -/* The following is bits in the flag parameter to ha_open() */ - -#define HA_OPEN_ABORT_IF_LOCKED 0 /* default */ -#define HA_OPEN_WAIT_IF_LOCKED 1 -#define HA_OPEN_IGNORE_IF_LOCKED 2 -#define HA_OPEN_TMP_TABLE 4 /* Table is a temp table */ -#define HA_OPEN_DELAY_KEY_WRITE 8 /* Don't update index */ -#define HA_OPEN_ABORT_IF_CRASHED 16 -#define HA_OPEN_FOR_REPAIR 32 /* open even if crashed */ -#define HA_OPEN_FROM_SQL_LAYER 64 -#define HA_OPEN_MMAP 128 /* open memory mapped */ -#define HA_OPEN_COPY 256 /* Open copy (for repair) */ -/* Internal temp table, used for temporary results */ -#define HA_OPEN_INTERNAL_TABLE 512 - -/* The following is parameter to ha_rkey() how to use key */ - -/* - We define a complete-field prefix of a key value as a prefix where - the last included field in the prefix contains the full field, not - just some bytes from the start of the field. A partial-field prefix - is allowed to contain only a few first bytes from the last included - field. - - Below HA_READ_KEY_EXACT, ..., HA_READ_BEFORE_KEY can take a - complete-field prefix of a key value as the search - key. HA_READ_PREFIX and HA_READ_PREFIX_LAST could also take a - partial-field prefix, but currently (4.0.10) they are only used with - complete-field prefixes. MySQL uses a padding trick to implement - LIKE 'abc%' queries. - - NOTE that in InnoDB HA_READ_PREFIX_LAST will NOT work with a - partial-field prefix because InnoDB currently strips spaces from the - end of varchar fields! -*/ - -enum ha_rkey_function { - HA_READ_KEY_EXACT, /* Find first record else error */ - HA_READ_KEY_OR_NEXT, /* Record or next record */ - HA_READ_KEY_OR_PREV, /* Record or previous */ - HA_READ_AFTER_KEY, /* Find next rec. after key-record */ - HA_READ_BEFORE_KEY, /* Find next rec. before key-record */ - HA_READ_PREFIX, /* Key which as same prefix */ - HA_READ_PREFIX_LAST, /* Last key with the same prefix */ - HA_READ_PREFIX_LAST_OR_PREV, /* Last or prev key with the same prefix */ - HA_READ_MBR_CONTAIN, - HA_READ_MBR_INTERSECT, - HA_READ_MBR_WITHIN, - HA_READ_MBR_DISJOINT, - HA_READ_MBR_EQUAL -}; - - /* Key algorithm types */ - -enum ha_key_alg { - HA_KEY_ALG_UNDEF= 0, /* Not specified (old file) */ - HA_KEY_ALG_BTREE= 1, /* B-tree, default one */ - HA_KEY_ALG_RTREE= 2, /* R-tree, for spatial searches */ - HA_KEY_ALG_HASH= 3, /* HASH keys (HEAP tables) */ - HA_KEY_ALG_FULLTEXT= 4 /* FULLTEXT (MyISAM tables) */ -}; - - /* Storage media types */ - -enum ha_storage_media { - HA_SM_DEFAULT= 0, /* Not specified (engine default) */ - HA_SM_DISK= 1, /* DISK storage */ - HA_SM_MEMORY= 2 /* MAIN MEMORY storage */ -}; - - /* The following is parameter to ha_extra() */ - -enum ha_extra_function { - HA_EXTRA_NORMAL=0, /* Optimize for space (def) */ - HA_EXTRA_QUICK=1, /* Optimize for speed */ - HA_EXTRA_NOT_USED=2, - HA_EXTRA_CACHE=3, /* Cache record in HA_rrnd() */ - HA_EXTRA_NO_CACHE=4, /* End caching of records (def) */ - HA_EXTRA_NO_READCHECK=5, /* No readcheck on update */ - HA_EXTRA_READCHECK=6, /* Use readcheck (def) */ - HA_EXTRA_KEYREAD=7, /* Read only key to database */ - HA_EXTRA_NO_KEYREAD=8, /* Normal read of records (def) */ - HA_EXTRA_NO_USER_CHANGE=9, /* No user is allowed to write */ - HA_EXTRA_KEY_CACHE=10, - HA_EXTRA_NO_KEY_CACHE=11, - HA_EXTRA_WAIT_LOCK=12, /* Wait until file is avalably (def) */ - HA_EXTRA_NO_WAIT_LOCK=13, /* If file is locked, return quickly */ - HA_EXTRA_WRITE_CACHE=14, /* Use write cache in ha_write() */ - HA_EXTRA_FLUSH_CACHE=15, /* flush write_record_cache */ - HA_EXTRA_NO_KEYS=16, /* Remove all update of keys */ - HA_EXTRA_KEYREAD_CHANGE_POS=17, /* Keyread, but change pos */ - /* xxxxchk -r must be used */ - HA_EXTRA_REMEMBER_POS=18, /* Remember pos for next/prev */ - HA_EXTRA_RESTORE_POS=19, - HA_EXTRA_REINIT_CACHE=20, /* init cache from current record */ - HA_EXTRA_FORCE_REOPEN=21, /* Datafile have changed on disk */ - HA_EXTRA_FLUSH, /* Flush tables to disk */ - HA_EXTRA_NO_ROWS, /* Don't write rows */ - HA_EXTRA_RESET_STATE, /* Reset positions */ - HA_EXTRA_IGNORE_DUP_KEY, /* Dup keys don't rollback everything*/ - HA_EXTRA_NO_IGNORE_DUP_KEY, - HA_EXTRA_PREPARE_FOR_DROP, - HA_EXTRA_PREPARE_FOR_UPDATE, /* Remove read cache if problems */ - HA_EXTRA_PRELOAD_BUFFER_SIZE, /* Set buffer size for preloading */ - /* - On-the-fly switching between unique and non-unique key inserting. - */ - HA_EXTRA_CHANGE_KEY_TO_UNIQUE, - HA_EXTRA_CHANGE_KEY_TO_DUP, - /* - When using HA_EXTRA_KEYREAD, overwrite only key member fields and keep - other fields intact. When this is off (by default) InnoDB will use memcpy - to overwrite entire row. - */ - HA_EXTRA_KEYREAD_PRESERVE_FIELDS, - HA_EXTRA_MMAP, - /* - Ignore if the a tuple is not found, continue processing the - transaction and ignore that 'row'. Needed for idempotency - handling on the slave - - Currently only used by NDB storage engine. Partition handler ignores flag. - */ - HA_EXTRA_IGNORE_NO_KEY, - HA_EXTRA_NO_IGNORE_NO_KEY, - /* - Mark the table as a log table. For some handlers (e.g. CSV) this results - in a special locking for the table. - */ - HA_EXTRA_MARK_AS_LOG_TABLE, - /* - Informs handler that write_row() which tries to insert new row into the - table and encounters some already existing row with same primary/unique - key can replace old row with new row instead of reporting error (basically - it informs handler that we do REPLACE instead of simple INSERT). - Off by default. - */ - HA_EXTRA_WRITE_CAN_REPLACE, - HA_EXTRA_WRITE_CANNOT_REPLACE, - /* - Inform handler that delete_row()/update_row() cannot batch deletes/updates - and should perform them immediately. This may be needed when table has - AFTER DELETE/UPDATE triggers which access to subject table. - These flags are reset by the handler::extra(HA_EXTRA_RESET) call. - */ - HA_EXTRA_DELETE_CANNOT_BATCH, - HA_EXTRA_UPDATE_CANNOT_BATCH, - /* - Inform handler that an "INSERT...ON DUPLICATE KEY UPDATE" will be - executed. This condition is unset by HA_EXTRA_NO_IGNORE_DUP_KEY. - */ - HA_EXTRA_INSERT_WITH_UPDATE, - /* Inform handler that we will do a rename */ - HA_EXTRA_PREPARE_FOR_RENAME, - /* - Special actions for MERGE tables. - */ - HA_EXTRA_ADD_CHILDREN_LIST, - HA_EXTRA_ATTACH_CHILDREN, - HA_EXTRA_IS_ATTACHED_CHILDREN, - HA_EXTRA_DETACH_CHILDREN -}; - -/* Compatible option, to be deleted in 6.0 */ -#define HA_EXTRA_PREPARE_FOR_DELETE HA_EXTRA_PREPARE_FOR_DROP - - /* The following is parameter to ha_panic() */ - -enum ha_panic_function { - HA_PANIC_CLOSE, /* Close all databases */ - HA_PANIC_WRITE, /* Unlock and write status */ - HA_PANIC_READ /* Lock and read keyinfo */ -}; - - /* The following is parameter to ha_create(); keytypes */ - -enum ha_base_keytype { - HA_KEYTYPE_END=0, - HA_KEYTYPE_TEXT=1, /* Key is sorted as letters */ - HA_KEYTYPE_BINARY=2, /* Key is sorted as unsigned chars */ - HA_KEYTYPE_SHORT_INT=3, - HA_KEYTYPE_LONG_INT=4, - HA_KEYTYPE_FLOAT=5, - HA_KEYTYPE_DOUBLE=6, - HA_KEYTYPE_NUM=7, /* Not packed num with pre-space */ - HA_KEYTYPE_USHORT_INT=8, - HA_KEYTYPE_ULONG_INT=9, - HA_KEYTYPE_LONGLONG=10, - HA_KEYTYPE_ULONGLONG=11, - HA_KEYTYPE_INT24=12, - HA_KEYTYPE_UINT24=13, - HA_KEYTYPE_INT8=14, - /* Varchar (0-255 bytes) with length packed with 1 byte */ - HA_KEYTYPE_VARTEXT1=15, /* Key is sorted as letters */ - HA_KEYTYPE_VARBINARY1=16, /* Key is sorted as unsigned chars */ - /* Varchar (0-65535 bytes) with length packed with 2 bytes */ - HA_KEYTYPE_VARTEXT2=17, /* Key is sorted as letters */ - HA_KEYTYPE_VARBINARY2=18, /* Key is sorted as unsigned chars */ - HA_KEYTYPE_BIT=19 -}; - -#define HA_MAX_KEYTYPE 31 /* Must be log2-1 */ - - /* These flags kan be OR:ed to key-flag */ - -#define HA_NOSAME 1 /* Set if not dupplicated records */ -#define HA_PACK_KEY 2 /* Pack string key to previous key */ -#define HA_AUTO_KEY 16 -#define HA_BINARY_PACK_KEY 32 /* Packing of all keys to prev key */ -#define HA_FULLTEXT 128 /* For full-text search */ -#define HA_UNIQUE_CHECK 256 /* Check the key for uniqueness */ -#define HA_SPATIAL 1024 /* For spatial search */ -#define HA_NULL_ARE_EQUAL 2048 /* NULL in key are cmp as equal */ -#define HA_GENERATED_KEY 8192 /* Automaticly generated key */ - - /* The combination of the above can be used for key type comparison. */ -#define HA_KEYFLAG_MASK (HA_NOSAME | HA_PACK_KEY | HA_AUTO_KEY | \ - HA_BINARY_PACK_KEY | HA_FULLTEXT | HA_UNIQUE_CHECK | \ - HA_SPATIAL | HA_NULL_ARE_EQUAL | HA_GENERATED_KEY) - -/* - Key contains partial segments. - - This flag is internal to the MySQL server by design. It is not supposed - neither to be saved in FRM-files, nor to be passed to storage engines. - It is intended to pass information into internal static sort_keys(KEY *, - KEY *) function. - - This flag can be calculated -- it's based on key lengths comparison. -*/ -#define HA_KEY_HAS_PART_KEY_SEG 65536 - - /* Automatic bits in key-flag */ - -#define HA_SPACE_PACK_USED 4 /* Test for if SPACE_PACK used */ -#define HA_VAR_LENGTH_KEY 8 -#define HA_NULL_PART_KEY 64 -#define HA_USES_COMMENT 4096 -#define HA_USES_PARSER 16384 /* Fulltext index uses [pre]parser */ -#define HA_USES_BLOCK_SIZE ((uint) 32768) -#define HA_SORT_ALLOWS_SAME 512 /* Intern bit when sorting records */ - - /* These flags can be added to key-seg-flag */ - -#define HA_SPACE_PACK 1 /* Pack space in key-seg */ -#define HA_PART_KEY_SEG 4 /* Used by MySQL for part-key-cols */ -#define HA_VAR_LENGTH_PART 8 -#define HA_NULL_PART 16 -#define HA_BLOB_PART 32 -#define HA_SWAP_KEY 64 -#define HA_REVERSE_SORT 128 /* Sort key in reverse order */ -#define HA_NO_SORT 256 /* do not bother sorting on this keyseg */ -/* - End space in unique/varchar are considered equal. (Like 'a' and 'a ') - Only needed for internal temporary tables. -*/ -#define HA_END_SPACE_ARE_EQUAL 512 -#define HA_BIT_PART 1024 - - /* optionbits for database */ -#define HA_OPTION_PACK_RECORD 1 -#define HA_OPTION_PACK_KEYS 2 -#define HA_OPTION_COMPRESS_RECORD 4 -#define HA_OPTION_LONG_BLOB_PTR 8 /* new ISAM format */ -#define HA_OPTION_TMP_TABLE 16 -#define HA_OPTION_CHECKSUM 32 -#define HA_OPTION_DELAY_KEY_WRITE 64 -#define HA_OPTION_NO_PACK_KEYS 128 /* Reserved for MySQL */ -#define HA_OPTION_CREATE_FROM_ENGINE 256 -#define HA_OPTION_RELIES_ON_SQL_LAYER 512 -#define HA_OPTION_NULL_FIELDS 1024 -#define HA_OPTION_PAGE_CHECKSUM 2048 -#define HA_OPTION_TEMP_COMPRESS_RECORD ((uint) 16384) /* set by isamchk */ -#define HA_OPTION_READ_ONLY_DATA ((uint) 32768) /* Set by isamchk */ - - /* Bits in flag to create() */ - -#define HA_DONT_TOUCH_DATA 1 /* Don't empty datafile (isamchk) */ -#define HA_PACK_RECORD 2 /* Request packed record format */ -#define HA_CREATE_TMP_TABLE 4 -#define HA_CREATE_CHECKSUM 8 -#define HA_CREATE_KEEP_FILES 16 /* don't overwrite .MYD and MYI */ -#define HA_CREATE_PAGE_CHECKSUM 32 -#define HA_CREATE_DELAY_KEY_WRITE 64 -#define HA_CREATE_RELIES_ON_SQL_LAYER 128 - -/* - The following flags (OR-ed) are passed to handler::info() method. - The method copies misc handler information out of the storage engine - to data structures accessible from MySQL - - Same flags are also passed down to mi_status, myrg_status, etc. -*/ - -/* this one is not used */ -#define HA_STATUS_POS 1 -/* - assuming the table keeps shared actual copy of the 'info' and - local, possibly outdated copy, the following flag means that - it should not try to get the actual data (locking the shared structure) - slightly outdated version will suffice -*/ -#define HA_STATUS_NO_LOCK 2 -/* update the time of the last modification (in handler::update_time) */ -#define HA_STATUS_TIME 4 -/* - update the 'constant' part of the info: - handler::max_data_file_length, max_index_file_length, create_time - sortkey, ref_length, block_size, data_file_name, index_file_name. - handler::table->s->keys_in_use, keys_for_keyread, rec_per_key -*/ -#define HA_STATUS_CONST 8 -/* - update the 'variable' part of the info: - handler::records, deleted, data_file_length, index_file_length, - check_time, mean_rec_length -*/ -#define HA_STATUS_VARIABLE 16 -/* - get the information about the key that caused last duplicate value error - update handler::errkey and handler::dupp_ref - see handler::get_dup_key() -*/ -#define HA_STATUS_ERRKEY 32 -/* - update handler::auto_increment_value -*/ -#define HA_STATUS_AUTO 64 -/* - Get also delete_length when HA_STATUS_VARIABLE is called. It's ok to set it also - when only HA_STATUS_VARIABLE but it won't be used. -*/ -#define HA_STATUS_VARIABLE_EXTRA 128 - -/* - Errorcodes given by handler functions - - opt_sum_query() assumes these codes are > 1 - Do not add error numbers before HA_ERR_FIRST. - If necessary to add lower numbers, change HA_ERR_FIRST accordingly. -*/ -#define HA_ERR_FIRST 120 /* Copy of first error nr.*/ - -#define HA_ERR_KEY_NOT_FOUND 120 /* Didn't find key on read or update */ -#define HA_ERR_FOUND_DUPP_KEY 121 /* Dupplicate key on write */ -#define HA_ERR_INTERNAL_ERROR 122 /* Internal error */ -#define HA_ERR_RECORD_CHANGED 123 /* Uppdate with is recoverable */ -#define HA_ERR_WRONG_INDEX 124 /* Wrong index given to function */ -#define HA_ERR_CRASHED 126 /* Indexfile is crashed */ -#define HA_ERR_WRONG_IN_RECORD 127 /* Record-file is crashed */ -#define HA_ERR_OUT_OF_MEM 128 /* Record-file is crashed */ -#define HA_ERR_NOT_A_TABLE 130 /* not a MYI file - no signature */ -#define HA_ERR_WRONG_COMMAND 131 /* Command not supported */ -#define HA_ERR_OLD_FILE 132 /* old databasfile */ -#define HA_ERR_NO_ACTIVE_RECORD 133 /* No record read in update() */ -#define HA_ERR_RECORD_DELETED 134 /* A record is not there */ -#define HA_ERR_RECORD_FILE_FULL 135 /* No more room in file */ -#define HA_ERR_INDEX_FILE_FULL 136 /* No more room in file */ -#define HA_ERR_END_OF_FILE 137 /* end in next/prev/first/last */ -#define HA_ERR_UNSUPPORTED 138 /* unsupported extension used */ -#define HA_ERR_TO_BIG_ROW 139 /* Too big row */ -#define HA_WRONG_CREATE_OPTION 140 /* Wrong create option */ -#define HA_ERR_FOUND_DUPP_UNIQUE 141 /* Dupplicate unique on write */ -#define HA_ERR_UNKNOWN_CHARSET 142 /* Can't open charset */ -#define HA_ERR_WRONG_MRG_TABLE_DEF 143 /* conflicting tables in MERGE */ -#define HA_ERR_CRASHED_ON_REPAIR 144 /* Last (automatic?) repair failed */ -#define HA_ERR_CRASHED_ON_USAGE 145 /* Table must be repaired */ -#define HA_ERR_LOCK_WAIT_TIMEOUT 146 -#define HA_ERR_LOCK_TABLE_FULL 147 -#define HA_ERR_READ_ONLY_TRANSACTION 148 /* Updates not allowed */ -#define HA_ERR_LOCK_DEADLOCK 149 -#define HA_ERR_CANNOT_ADD_FOREIGN 150 /* Cannot add a foreign key constr. */ -#define HA_ERR_NO_REFERENCED_ROW 151 /* Cannot add a child row */ -#define HA_ERR_ROW_IS_REFERENCED 152 /* Cannot delete a parent row */ -#define HA_ERR_NO_SAVEPOINT 153 /* No savepoint with that name */ -#define HA_ERR_NON_UNIQUE_BLOCK_SIZE 154 /* Non unique key block size */ -#define HA_ERR_NO_SUCH_TABLE 155 /* The table does not exist in engine */ -#define HA_ERR_TABLE_EXIST 156 /* The table existed in storage engine */ -#define HA_ERR_NO_CONNECTION 157 /* Could not connect to storage engine */ -/* NULLs are not supported in spatial index */ -#define HA_ERR_NULL_IN_SPATIAL 158 -#define HA_ERR_TABLE_DEF_CHANGED 159 /* The table changed in storage engine */ -/* There's no partition in table for given value */ -#define HA_ERR_NO_PARTITION_FOUND 160 -#define HA_ERR_RBR_LOGGING_FAILED 161 /* Row-based binlogging of row failed */ -#define HA_ERR_DROP_INDEX_FK 162 /* Index needed in foreign key constr */ -/* - Upholding foreign key constraints would lead to a duplicate key error - in some other table. -*/ -#define HA_ERR_FOREIGN_DUPLICATE_KEY 163 -/* The table changed in storage engine */ -#define HA_ERR_TABLE_NEEDS_UPGRADE 164 -#define HA_ERR_TABLE_READONLY 165 /* The table is not writable */ - -#define HA_ERR_AUTOINC_READ_FAILED 166 /* Failed to get next autoinc value */ -#define HA_ERR_AUTOINC_ERANGE 167 /* Failed to set row autoinc value */ -#define HA_ERR_GENERIC 168 /* Generic error */ -/* row not actually updated: new values same as the old values */ -#define HA_ERR_RECORD_IS_THE_SAME 169 -/* It is not possible to log this statement */ -#define HA_ERR_LOGGING_IMPOSSIBLE 170 /* It is not possible to log this - statement */ -#define HA_ERR_CORRUPT_EVENT 171 /* The event was corrupt, leading to - illegal data being read */ -#define HA_ERR_NEW_FILE 172 /* New file format */ -#define HA_ERR_ROWS_EVENT_APPLY 173 /* The event could not be processed - no other hanlder error happened */ -#define HA_ERR_INITIALIZATION 174 /* Error during initialization */ -#define HA_ERR_FILE_TOO_SHORT 175 /* File too short */ -#define HA_ERR_WRONG_CRC 176 /* Wrong CRC on page */ -#define HA_ERR_TOO_MANY_CONCURRENT_TRXS 177 /*Too many active concurrent transactions */ -#define HA_ERR_LAST 177 /* Copy of last error nr */ - -/* Number of different errors */ -#define HA_ERR_ERRORS (HA_ERR_LAST - HA_ERR_FIRST + 1) - - /* Other constants */ - -#define HA_NAMELEN 64 /* Max length of saved filename */ -#define NO_SUCH_KEY (~(uint)0) /* used as a key no. */ - -typedef ulong key_part_map; -#define HA_WHOLE_KEY (~(key_part_map)0) - - /* Intern constants in databases */ - - /* bits in _search */ -#define SEARCH_FIND 1 -#define SEARCH_NO_FIND 2 -#define SEARCH_SAME 4 -#define SEARCH_BIGGER 8 -#define SEARCH_SMALLER 16 -#define SEARCH_SAVE_BUFF 32 -#define SEARCH_UPDATE 64 -#define SEARCH_PREFIX 128 -#define SEARCH_LAST 256 -#define MBR_CONTAIN 512 -#define MBR_INTERSECT 1024 -#define MBR_WITHIN 2048 -#define MBR_DISJOINT 4096 -#define MBR_EQUAL 8192 -#define MBR_DATA 16384 -#define SEARCH_NULL_ARE_EQUAL 32768 /* NULL in keys are equal */ -#define SEARCH_NULL_ARE_NOT_EQUAL 65536 /* NULL in keys are not equal */ - - /* bits in opt_flag */ -#define QUICK_USED 1 -#define READ_CACHE_USED 2 -#define READ_CHECK_USED 4 -#define KEY_READ_USED 8 -#define WRITE_CACHE_USED 16 -#define OPT_NO_ROWS 32 - - /* bits in update */ -#define HA_STATE_CHANGED 1 /* Database has changed */ -#define HA_STATE_AKTIV 2 /* Has a current record */ -#define HA_STATE_WRITTEN 4 /* Record is written */ -#define HA_STATE_DELETED 8 -#define HA_STATE_NEXT_FOUND 16 /* Next found record (record before) */ -#define HA_STATE_PREV_FOUND 32 /* Prev found record (record after) */ -#define HA_STATE_NO_KEY 64 /* Last read didn't find record */ -#define HA_STATE_KEY_CHANGED 128 -#define HA_STATE_WRITE_AT_END 256 /* set in _ps_find_writepos */ -#define HA_STATE_BUFF_SAVED 512 /* If current keybuff is info->buff */ -#define HA_STATE_ROW_CHANGED 1024 /* To invalide ROW cache */ -#define HA_STATE_EXTEND_BLOCK 2048 -#define HA_STATE_RNEXT_SAME 4096 /* rnext_same occupied lastkey2 */ - -/* myisampack expects no more than 32 field types. */ -enum en_fieldtype { - FIELD_LAST=-1,FIELD_NORMAL,FIELD_SKIP_ENDSPACE,FIELD_SKIP_PRESPACE, - FIELD_SKIP_ZERO,FIELD_BLOB,FIELD_CONSTANT,FIELD_INTERVALL,FIELD_ZERO, - FIELD_VARCHAR,FIELD_CHECK, - FIELD_enum_val_count -}; - -enum data_file_type { - STATIC_RECORD, DYNAMIC_RECORD, COMPRESSED_RECORD, BLOCK_RECORD -}; - -/* For key ranges */ - -#define NO_MIN_RANGE 1 -#define NO_MAX_RANGE 2 -#define NEAR_MIN 4 -#define NEAR_MAX 8 -#define UNIQUE_RANGE 16 -#define EQ_RANGE 32 -#define NULL_RANGE 64 -#define GEOM_FLAG 128 -#define SKIP_RANGE 256 - -typedef struct st_key_range -{ - const uchar *key; - uint length; - key_part_map keypart_map; - enum ha_rkey_function flag; -} key_range; - -typedef struct st_key_multi_range -{ - key_range start_key; - key_range end_key; - char *ptr; /* Free to use by caller (ptr to row etc) */ - uint range_flag; /* key range flags see above */ -} KEY_MULTI_RANGE; - - -/* For number of records */ -#ifdef BIG_TABLES -#define rows2double(A) ulonglong2double(A) -typedef my_off_t ha_rows; -#else -#define rows2double(A) (double) (A) -typedef ulong ha_rows; -#endif - -#define HA_POS_ERROR (~ (ha_rows) 0) -#define HA_OFFSET_ERROR (~ (my_off_t) 0) - -#if SYSTEM_SIZEOF_OFF_T == 4 -#define MAX_FILE_SIZE INT_MAX32 -#else -#define MAX_FILE_SIZE LONGLONG_MAX -#endif - -#define HA_VARCHAR_PACKLENGTH(field_length) ((field_length) < 256 ? 1 :2) - -/* invalidator function reference for Query Cache */ -C_MODE_START -typedef void (* invalidator_by_filename)(const char * filename); -C_MODE_END - -#endif /* _my_base_h */ diff --git a/deps/mysqllite/include/internal/my_bit.h b/deps/mysqllite/include/internal/my_bit.h deleted file mode 100644 index b396b84b0d8b55..00000000000000 --- a/deps/mysqllite/include/internal/my_bit.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef MY_BIT_INCLUDED -#define MY_BIT_INCLUDED - -/* - Some useful bit functions -*/ - -C_MODE_START - -extern const char _my_bits_nbits[256]; -extern const uchar _my_bits_reverse_table[256]; - -/* - Find smallest X in 2^X >= value - This can be used to divide a number with value by doing a shift instead -*/ - -static inline uint my_bit_log2(ulong value) -{ - uint bit; - for (bit=0 ; value > 1 ; value>>=1, bit++) ; - return bit; -} - -static inline uint my_count_bits(ulonglong v) -{ -#if SIZEOF_LONG_LONG > 4 - /* The following code is a bit faster on 16 bit machines than if we would - only shift v */ - ulong v2=(ulong) (v >> 32); - return (uint) (uchar) (_my_bits_nbits[(uchar) v] + - _my_bits_nbits[(uchar) (v >> 8)] + - _my_bits_nbits[(uchar) (v >> 16)] + - _my_bits_nbits[(uchar) (v >> 24)] + - _my_bits_nbits[(uchar) (v2)] + - _my_bits_nbits[(uchar) (v2 >> 8)] + - _my_bits_nbits[(uchar) (v2 >> 16)] + - _my_bits_nbits[(uchar) (v2 >> 24)]); -#else - return (uint) (uchar) (_my_bits_nbits[(uchar) v] + - _my_bits_nbits[(uchar) (v >> 8)] + - _my_bits_nbits[(uchar) (v >> 16)] + - _my_bits_nbits[(uchar) (v >> 24)]); -#endif -} - -static inline uint my_count_bits_ushort(ushort v) -{ - return _my_bits_nbits[v]; -} - - -/* - Next highest power of two - - SYNOPSIS - my_round_up_to_next_power() - v Value to check - - RETURN - Next or equal power of 2 - Note: 0 will return 0 - - NOTES - Algorithm by Sean Anderson, according to: - http://graphics.stanford.edu/~seander/bithacks.html - (Orignal code public domain) - - Comments shows how this works with 01100000000000000000000000001011 -*/ - -static inline uint32 my_round_up_to_next_power(uint32 v) -{ - v--; /* 01100000000000000000000000001010 */ - v|= v >> 1; /* 01110000000000000000000000001111 */ - v|= v >> 2; /* 01111100000000000000000000001111 */ - v|= v >> 4; /* 01111111110000000000000000001111 */ - v|= v >> 8; /* 01111111111111111100000000001111 */ - v|= v >> 16; /* 01111111111111111111111111111111 */ - return v+1; /* 10000000000000000000000000000000 */ -} - -static inline uint32 my_clear_highest_bit(uint32 v) -{ - uint32 w=v >> 1; - w|= w >> 1; - w|= w >> 2; - w|= w >> 4; - w|= w >> 8; - w|= w >> 16; - return v & w; -} - -static inline uint32 my_reverse_bits(uint32 key) -{ - return - (_my_bits_reverse_table[ key & 255] << 24) | - (_my_bits_reverse_table[(key>> 8) & 255] << 16) | - (_my_bits_reverse_table[(key>>16) & 255] << 8) | - _my_bits_reverse_table[(key>>24) ]; -} - -C_MODE_END - -#endif /* MY_BIT_INCLUDED */ diff --git a/deps/mysqllite/include/internal/my_bitmap.h b/deps/mysqllite/include/internal/my_bitmap.h deleted file mode 100644 index 78b33b09a51297..00000000000000 --- a/deps/mysqllite/include/internal/my_bitmap.h +++ /dev/null @@ -1,142 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _my_bitmap_h_ -#define _my_bitmap_h_ - -#define MY_BIT_NONE (~(uint) 0) - -#include - -typedef uint32 my_bitmap_map; - -typedef struct st_bitmap -{ - my_bitmap_map *bitmap; - uint n_bits; /* number of bits occupied by the above */ - my_bitmap_map last_word_mask; - my_bitmap_map *last_word_ptr; - /* - mutex will be acquired for the duration of each bitmap operation if - thread_safe flag in bitmap_init was set. Otherwise, we optimize by not - acquiring the mutex - */ - mysql_mutex_t *mutex; -} MY_BITMAP; - -#ifdef __cplusplus -extern "C" { -#endif -extern void create_last_word_mask(MY_BITMAP *map); -extern my_bool bitmap_init(MY_BITMAP *map, my_bitmap_map *buf, uint n_bits, - my_bool thread_safe); -extern my_bool bitmap_is_clear_all(const MY_BITMAP *map); -extern my_bool bitmap_is_prefix(const MY_BITMAP *map, uint prefix_size); -extern my_bool bitmap_is_set_all(const MY_BITMAP *map); -extern my_bool bitmap_is_subset(const MY_BITMAP *map1, const MY_BITMAP *map2); -extern my_bool bitmap_is_overlapping(const MY_BITMAP *map1, - const MY_BITMAP *map2); -extern my_bool bitmap_test_and_set(MY_BITMAP *map, uint bitmap_bit); -extern my_bool bitmap_test_and_clear(MY_BITMAP *map, uint bitmap_bit); -extern my_bool bitmap_fast_test_and_set(MY_BITMAP *map, uint bitmap_bit); -extern uint bitmap_set_next(MY_BITMAP *map); -extern uint bitmap_get_first(const MY_BITMAP *map); -extern uint bitmap_get_first_set(const MY_BITMAP *map); -extern uint bitmap_bits_set(const MY_BITMAP *map); -extern void bitmap_free(MY_BITMAP *map); -extern void bitmap_set_above(MY_BITMAP *map, uint from_byte, uint use_bit); -extern void bitmap_set_prefix(MY_BITMAP *map, uint prefix_size); -extern void bitmap_intersect(MY_BITMAP *map, const MY_BITMAP *map2); -extern void bitmap_subtract(MY_BITMAP *map, const MY_BITMAP *map2); -extern void bitmap_union(MY_BITMAP *map, const MY_BITMAP *map2); -extern void bitmap_xor(MY_BITMAP *map, const MY_BITMAP *map2); -extern void bitmap_invert(MY_BITMAP *map); -extern void bitmap_copy(MY_BITMAP *map, const MY_BITMAP *map2); - -extern uint bitmap_lock_set_next(MY_BITMAP *map); -extern void bitmap_lock_clear_bit(MY_BITMAP *map, uint bitmap_bit); -/* Fast, not thread safe, bitmap functions */ -#define bitmap_buffer_size(bits) (((bits)+31)/32)*4 -#define no_bytes_in_map(map) (((map)->n_bits + 7)/8) -#define no_words_in_map(map) (((map)->n_bits + 31)/32) -#define bytes_word_aligned(bytes) (4*((bytes + 3)/4)) -#define _bitmap_set_bit(MAP, BIT) (((uchar*)(MAP)->bitmap)[(BIT) / 8] \ - |= (1 << ((BIT) & 7))) -#define _bitmap_flip_bit(MAP, BIT) (((uchar*)(MAP)->bitmap)[(BIT) / 8] \ - ^= (1 << ((BIT) & 7))) -#define _bitmap_clear_bit(MAP, BIT) (((uchar*)(MAP)->bitmap)[(BIT) / 8] \ - &= ~ (1 << ((BIT) & 7))) -#define _bitmap_is_set(MAP, BIT) (uint) (((uchar*)(MAP)->bitmap)[(BIT) / 8] \ - & (1 << ((BIT) & 7))) -/* - WARNING! - - The below symbols are inline functions in DEBUG builds and macros in - non-DEBUG builds. The latter evaluate their 'bit' argument twice. - - NEVER use an increment/decrement operator with the 'bit' argument. - It would work with DEBUG builds, but fails later in production builds! - - FORBIDDEN: bitmap_set_bit($my_bitmap, (field++)->field_index); -*/ -#ifndef DBUG_OFF -static inline void -bitmap_set_bit(MY_BITMAP *map,uint bit) -{ - DBUG_ASSERT(bit < (map)->n_bits); - _bitmap_set_bit(map,bit); -} -static inline void -bitmap_flip_bit(MY_BITMAP *map,uint bit) -{ - DBUG_ASSERT(bit < (map)->n_bits); - _bitmap_flip_bit(map,bit); -} -static inline void -bitmap_clear_bit(MY_BITMAP *map,uint bit) -{ - DBUG_ASSERT(bit < (map)->n_bits); - _bitmap_clear_bit(map,bit); -} -static inline uint -bitmap_is_set(const MY_BITMAP *map,uint bit) -{ - DBUG_ASSERT(bit < (map)->n_bits); - return _bitmap_is_set(map,bit); -} -#else -#define bitmap_set_bit(MAP, BIT) _bitmap_set_bit(MAP, BIT) -#define bitmap_flip_bit(MAP, BIT) _bitmap_flip_bit(MAP, BIT) -#define bitmap_clear_bit(MAP, BIT) _bitmap_clear_bit(MAP, BIT) -#define bitmap_is_set(MAP, BIT) _bitmap_is_set(MAP, BIT) -#endif - -static inline my_bool bitmap_cmp(const MY_BITMAP *map1, const MY_BITMAP *map2) -{ - *(map1)->last_word_ptr|= (map1)->last_word_mask; - *(map2)->last_word_ptr|= (map2)->last_word_mask; - return memcmp((map1)->bitmap, (map2)->bitmap, 4*no_words_in_map((map1)))==0; -} - -#define bitmap_clear_all(MAP) \ - { memset((MAP)->bitmap, 0, 4*no_words_in_map((MAP))); } -#define bitmap_set_all(MAP) \ - (memset((MAP)->bitmap, 0xFF, 4*no_words_in_map((MAP)))) - -#ifdef __cplusplus -} -#endif - -#endif /* _my_bitmap_h_ */ diff --git a/deps/mysqllite/include/internal/my_handler.h b/deps/mysqllite/include/internal/my_handler.h deleted file mode 100644 index ba0d3fc313f50c..00000000000000 --- a/deps/mysqllite/include/internal/my_handler.h +++ /dev/null @@ -1,130 +0,0 @@ -/* Copyright (C) 2002-2006 MySQL AB - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; version 2 - of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -#ifndef _my_handler_h -#define _my_handler_h - -#include "myisampack.h" -#ifdef __cplusplus -extern "C" { -#endif - -#include "m_ctype.h" /* CHARSET_INFO */ - -/* - There is a hard limit for the maximum number of keys as there are only - 8 bits in the index file header for the number of keys in a table. - This means that 0..255 keys can exist for a table. The idea of - HA_MAX_POSSIBLE_KEY is to ensure that one can use myisamchk & tools on - a MyISAM table for which one has more keys than MyISAM is normally - compiled for. If you don't have this, you will get a core dump when - running myisamchk compiled for 128 keys on a table with 255 keys. -*/ - -#define HA_MAX_POSSIBLE_KEY 255 /* For myisamchk */ -/* - The following defines can be increased if necessary. - But beware the dependency of MI_MAX_POSSIBLE_KEY_BUFF and HA_MAX_KEY_LENGTH. -*/ - -#define HA_MAX_KEY_LENGTH 1000 /* Max length in bytes */ -#define HA_MAX_KEY_SEG 16 /* Max segments for key */ - -#define HA_MAX_POSSIBLE_KEY_BUFF (HA_MAX_KEY_LENGTH + 24+ 6+6) -#define HA_MAX_KEY_BUFF (HA_MAX_KEY_LENGTH+HA_MAX_KEY_SEG*6+8+8) - -typedef struct st_HA_KEYSEG /* Key-portion */ -{ - CHARSET_INFO *charset; - uint32 start; /* Start of key in record */ - uint32 null_pos; /* position to NULL indicator */ - uint16 bit_pos; /* Position to bit part */ - uint16 flag; - uint16 length; /* Keylength */ - uint16 language; - uint8 type; /* Type of key (for sort) */ - uint8 null_bit; /* bitmask to test for NULL */ - uint8 bit_start,bit_end; /* if bit field */ - uint8 bit_length; /* Length of bit part */ -} HA_KEYSEG; - -#define get_key_length(length,key) \ -{ if (*(uchar*) (key) != 255) \ - length= (uint) *(uchar*) ((key)++); \ - else \ - { length= mi_uint2korr((key)+1); (key)+=3; } \ -} - -#define get_key_length_rdonly(length,key) \ -{ if (*(uchar*) (key) != 255) \ - length= ((uint) *(uchar*) ((key))); \ - else \ - { length= mi_uint2korr((key)+1); } \ -} - -#define get_key_pack_length(length,length_pack,key) \ -{ if (*(uchar*) (key) != 255) \ - { length= (uint) *(uchar*) ((key)++); length_pack= 1; }\ - else \ - { length=mi_uint2korr((key)+1); (key)+= 3; length_pack= 3; } \ -} - -#define store_key_length_inc(key,length) \ -{ if ((length) < 255) \ - { *(key)++= (length); } \ - else \ - { *(key)=255; mi_int2store((key)+1,(length)); (key)+=3; } \ -} - -#define size_to_store_key_length(length) ((length) < 255 ? 1 : 3) - -#define get_rec_bits(bit_ptr, bit_ofs, bit_len) \ - (((((uint16) (bit_ptr)[1] << 8) | (uint16) (bit_ptr)[0]) >> (bit_ofs)) & \ - ((1 << (bit_len)) - 1)) - -#define set_rec_bits(bits, bit_ptr, bit_ofs, bit_len) \ -{ \ - (bit_ptr)[0]= ((bit_ptr)[0] & ~(((1 << (bit_len)) - 1) << (bit_ofs))) | \ - ((bits) << (bit_ofs)); \ - if ((bit_ofs) + (bit_len) > 8) \ - (bit_ptr)[1]= ((bit_ptr)[1] & ~((1 << ((bit_len) - 8 + (bit_ofs))) - 1)) | \ - ((bits) >> (8 - (bit_ofs))); \ -} - -#define clr_rec_bits(bit_ptr, bit_ofs, bit_len) \ - set_rec_bits(0, bit_ptr, bit_ofs, bit_len) - -extern int ha_compare_text(CHARSET_INFO *, uchar *, uint, uchar *, uint , - my_bool, my_bool); -extern int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, - register uchar *b, uint key_length, uint nextflag, - uint *diff_pos); - -extern HA_KEYSEG *ha_find_null(HA_KEYSEG *keyseg, uchar *a); -extern void my_handler_error_register(void); -extern void my_handler_error_unregister(void); -/* - Inside an in-memory data record, memory pointers to pieces of the - record (like BLOBs) are stored in their native byte order and in - this amount of bytes. -*/ -#define portable_sizeof_char_ptr 8 -#ifdef __cplusplus -} -#endif - -#endif /* _my_handler_h */ diff --git a/deps/mysqllite/include/internal/my_libwrap.h b/deps/mysqllite/include/internal/my_libwrap.h deleted file mode 100644 index 8235c00d8f37a8..00000000000000 --- a/deps/mysqllite/include/internal/my_libwrap.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef MY_LIBWRAP_INCLUDED -#define MY_LIBWRAP_INCLUDED - -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifdef HAVE_LIBWRAP -#include -#include -#ifdef NEED_SYS_SYSLOG_H -#include -#endif /* NEED_SYS_SYSLOG_H */ - -extern void my_fromhost(struct request_info *req); -extern int my_hosts_access(struct request_info *req); -extern char *my_eval_client(struct request_info *req); - -#endif /* HAVE_LIBWRAP */ -#endif /* MY_LIBWRAP_INCLUDED */ diff --git a/deps/mysqllite/include/internal/my_md5.h b/deps/mysqllite/include/internal/my_md5.h deleted file mode 100644 index 782bef8a27aa50..00000000000000 --- a/deps/mysqllite/include/internal/my_md5.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef MY_MD5_INCLUDED -#define MY_MD5_INCLUDED - -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* See md5.c for explanation and copyright information. */ - -/* - * $FreeBSD: src/contrib/cvs/lib/md5.h,v 1.2 1999/12/11 15:10:02 peter Exp $ - */ - -/* Unlike previous versions of this code, uint32 need not be exactly - 32 bits, merely 32 bits or more. Choosing a data type which is 32 - bits instead of 64 is not important; speed is considerably more - important. ANSI guarantees that "unsigned long" will be big enough, - and always using it seems to have few disadvantages. */ -typedef uint32 cvs_uint32; - -typedef struct { - cvs_uint32 buf[4]; - cvs_uint32 bits[2]; - unsigned char in[64]; -} my_MD5Context; - -#ifdef __cplusplus -extern "C" { -#endif -void my_MD5Init (my_MD5Context *context); -void my_MD5Update (my_MD5Context *context, - unsigned char const *buf, unsigned len); -void my_MD5Final (unsigned char digest[16], - my_MD5Context *context); - -#ifdef __cplusplus -} -#endif - -#define MY_MD5_HASH(digest,buf,len) \ -do { \ - my_MD5Context ctx; \ - my_MD5Init (&ctx); \ - my_MD5Update (&ctx, buf, len); \ - my_MD5Final (digest, &ctx); \ -} while (0) - -#endif /* MY_MD__INCLUDED */ diff --git a/deps/mysqllite/include/internal/my_nosys.h b/deps/mysqllite/include/internal/my_nosys.h deleted file mode 100644 index 96ba6d4c46428e..00000000000000 --- a/deps/mysqllite/include/internal/my_nosys.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Header to remove use of my_functions in functions where we need speed and - where calls to posix functions should work -*/ -#ifndef _my_nosys_h -#define _my_nosys_h -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef __MY_NOSYS__ -#define __MY_NOSYS__ - -#ifndef HAVE_STDLIB_H -#include -#endif - -#undef my_read -#undef my_write -#undef my_seek -#define my_read(a,b,c,d) my_quick_read(a,b,c,d) -#define my_write(a,b,c,d) my_quick_write(a,b,c) -extern size_t my_quick_read(File Filedes,uchar *Buffer,size_t Count, - myf myFlags); -extern size_t my_quick_write(File Filedes,const uchar *Buffer,size_t Count); - -#if defined(USE_HALLOC) -#define my_malloc(a,b) halloc(a,1) -#define my_no_flags_free(a) hfree(a) -#endif - -#endif /* __MY_NOSYS__ */ - -#ifdef __cplusplus -} -#endif -#endif diff --git a/deps/mysqllite/include/internal/my_rdtsc.h b/deps/mysqllite/include/internal/my_rdtsc.h deleted file mode 100644 index 81bc1aafb5846e..00000000000000 --- a/deps/mysqllite/include/internal/my_rdtsc.h +++ /dev/null @@ -1,129 +0,0 @@ -/* Copyright (C) 2008, 2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - rdtsc3 -- multi-platform timer code - pgulutzan@mysql.com, 2005-08-29 - modified 2008-11-02 -*/ - -#ifndef MY_RDTSC_H -#define MY_RDTSC_H - -/** - Characteristics of a timer. -*/ -struct my_timer_unit_info -{ - /** Routine used for the timer. */ - ulonglong routine; - /** Overhead of the timer. */ - ulonglong overhead; - /** Frequency of the timer. */ - ulonglong frequency; - /** Resolution of the timer. */ - ulonglong resolution; -}; - -/** - Characteristics of all the supported timers. - @sa my_timer_init(). -*/ -struct my_timer_info -{ - /** Characteristics of the cycle timer. */ - struct my_timer_unit_info cycles; - /** Characteristics of the nanosecond timer. */ - struct my_timer_unit_info nanoseconds; - /** Characteristics of the microsecond timer. */ - struct my_timer_unit_info microseconds; - /** Characteristics of the millisecond timer. */ - struct my_timer_unit_info milliseconds; - /** Characteristics of the tick timer. */ - struct my_timer_unit_info ticks; -}; - -typedef struct my_timer_info MY_TIMER_INFO; - -C_MODE_START - -/** - A cycle timer. - @return the current timer value, in cycles. -*/ -ulonglong my_timer_cycles(void); - -/** - A namoseconds timer. - @return the current timer value, in nanoseconds. -*/ -ulonglong my_timer_nanoseconds(void); - -/** - A microseconds timer. - @return the current timer value, in microseconds. -*/ -ulonglong my_timer_microseconds(void); - -/** - A millisecond timer. - @return the current timer value, in milliseconds. -*/ -ulonglong my_timer_milliseconds(void); - -/** - A ticks timer. - @return the current timer value, in ticks. -*/ -ulonglong my_timer_ticks(void); - -/** - Timer initialization function. - @param [out] mti the timer characteristics. -*/ -void my_timer_init(MY_TIMER_INFO *mti); - -C_MODE_END - -#define MY_TIMER_ROUTINE_ASM_X86 1 -#define MY_TIMER_ROUTINE_ASM_X86_64 2 -#define MY_TIMER_ROUTINE_RDTSCLL 3 -#define MY_TIMER_ROUTINE_ASM_X86_WIN 4 -#define MY_TIMER_ROUTINE_RDTSC 5 -#define MY_TIMER_ROUTINE_ASM_IA64 6 -#define MY_TIMER_ROUTINE_ASM_PPC 7 -#define MY_TIMER_ROUTINE_SGI_CYCLE 8 -#define MY_TIMER_ROUTINE_GETHRTIME 9 -#define MY_TIMER_ROUTINE_READ_REAL_TIME 10 -#define MY_TIMER_ROUTINE_CLOCK_GETTIME 11 -#define MY_TIMER_ROUTINE_NXGETTIME 12 -#define MY_TIMER_ROUTINE_GETTIMEOFDAY 13 -#define MY_TIMER_ROUTINE_QUERYPERFORMANCECOUNTER 14 -#define MY_TIMER_ROUTINE_GETTICKCOUNT 15 -#define MY_TIMER_ROUTINE_TIME 16 -#define MY_TIMER_ROUTINE_TIMES 17 -#define MY_TIMER_ROUTINE_FTIME 18 -#define MY_TIMER_ROUTINE_ASM_PPC64 19 -#define MY_TIMER_ROUTINE_ASM_SUNPRO_SPARC64 20 -#define MY_TIMER_ROUTINE_ASM_SUNPRO_SPARC32 21 -#define MY_TIMER_ROUTINE_ASM_SUNPRO_I386 22 -#define MY_TIMER_ROUTINE_ASM_GCC_SPARC64 23 -#define MY_TIMER_ROUTINE_ASM_GCC_SPARC32 24 -#define MY_TIMER_ROUTINE_MACH_ABSOLUTE_TIME 25 -#define MY_TIMER_ROUTINE_GETSYSTEMTIMEASFILETIME 26 -#define MY_TIMER_ROUTINE_ASM_SUNPRO_X86_64 27 - -#endif - diff --git a/deps/mysqllite/include/internal/my_stacktrace.h b/deps/mysqllite/include/internal/my_stacktrace.h deleted file mode 100644 index 8c2c97c68e5dbc..00000000000000 --- a/deps/mysqllite/include/internal/my_stacktrace.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _my_stacktrace_h_ -#define _my_stacktrace_h_ - -#include - -#ifdef TARGET_OS_LINUX -#if defined (__x86_64__) || defined (__i386__) || \ - (defined(__alpha__) && defined(__GNUC__)) -#define HAVE_STACKTRACE 1 -#endif -#elif defined(__WIN__) || defined(HAVE_PRINTSTACK) -#define HAVE_STACKTRACE 1 -#endif - -#if HAVE_BACKTRACE && (HAVE_BACKTRACE_SYMBOLS || HAVE_BACKTRACE_SYMBOLS_FD) -#undef HAVE_STACKTRACE -#define HAVE_STACKTRACE 1 -#endif - -#define HAVE_WRITE_CORE - -#if HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS && \ - HAVE_CXXABI_H && HAVE_ABI_CXA_DEMANGLE && \ - HAVE_WEAK_SYMBOL -#define BACKTRACE_DEMANGLE 1 -#endif - -C_MODE_START - -#if defined(HAVE_STACKTRACE) || defined(HAVE_BACKTRACE) -void my_init_stacktrace(); -void my_print_stacktrace(uchar* stack_bottom, ulong thread_stack); -void my_safe_print_str(const char* val, int max_len); -void my_write_core(int sig); -#if BACKTRACE_DEMANGLE -char *my_demangle(const char *mangled_name, int *status); -#endif -#ifdef __WIN__ -void my_set_exception_pointers(EXCEPTION_POINTERS *ep); -#endif -#endif - -#ifdef HAVE_WRITE_CORE -void my_write_core(int sig); -#endif - -C_MODE_END - -#endif /* _my_stacktrace_h_ */ diff --git a/deps/mysqllite/include/internal/my_time.h b/deps/mysqllite/include/internal/my_time.h deleted file mode 100644 index fdfe130c45feab..00000000000000 --- a/deps/mysqllite/include/internal/my_time.h +++ /dev/null @@ -1,170 +0,0 @@ -/* Copyright (C) 2004-2005 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - This is a private header of sql-common library, containing - declarations for my_time.c -*/ - -#ifndef _my_time_h_ -#define _my_time_h_ -#include "my_global.h" -#include "mysql_time.h" - -C_MODE_START - -extern ulonglong log_10_int[20]; -extern uchar days_in_month[]; - -/* - Portable time_t replacement. - Should be signed and hold seconds for 1902 -- 2038-01-19 range - i.e at least a 32bit variable - - Using the system built in time_t is not an option as - we rely on the above requirements in the time functions -*/ -typedef long my_time_t; - -#define MY_TIME_T_MAX LONG_MAX -#define MY_TIME_T_MIN LONG_MIN - -/* Time handling defaults */ -#define TIMESTAMP_MAX_YEAR 2038 -#define TIMESTAMP_MIN_YEAR (1900 + YY_PART_YEAR - 1) -#define TIMESTAMP_MAX_VALUE INT_MAX32 -#define TIMESTAMP_MIN_VALUE 1 - -/* two-digit years < this are 20..; >= this are 19.. */ -#define YY_PART_YEAR 70 - -/* Flags to str_to_datetime */ -#define TIME_FUZZY_DATE 1 -#define TIME_DATETIME_ONLY 2 -/* Must be same as MODE_NO_ZERO_IN_DATE */ -#define TIME_NO_ZERO_IN_DATE (65536L*2*2*2*2*2*2*2) -/* Must be same as MODE_NO_ZERO_DATE */ -#define TIME_NO_ZERO_DATE (TIME_NO_ZERO_IN_DATE*2) -#define TIME_INVALID_DATES (TIME_NO_ZERO_DATE*2) - -#define MYSQL_TIME_WARN_TRUNCATED 1 -#define MYSQL_TIME_WARN_OUT_OF_RANGE 2 - -/* Limits for the TIME data type */ -#define TIME_MAX_HOUR 838 -#define TIME_MAX_MINUTE 59 -#define TIME_MAX_SECOND 59 -#define TIME_MAX_VALUE (TIME_MAX_HOUR*10000 + TIME_MAX_MINUTE*100 + \ - TIME_MAX_SECOND) -#define TIME_MAX_VALUE_SECONDS (TIME_MAX_HOUR * 3600L + \ - TIME_MAX_MINUTE * 60L + TIME_MAX_SECOND) - -my_bool check_date(const MYSQL_TIME *ltime, my_bool not_zero_date, - ulonglong flags, int *was_cut); -enum enum_mysql_timestamp_type -str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time, - ulonglong flags, int *was_cut); -longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res, - ulonglong flags, int *was_cut); -ulonglong TIME_to_ulonglong_datetime(const MYSQL_TIME *); -ulonglong TIME_to_ulonglong_date(const MYSQL_TIME *); -ulonglong TIME_to_ulonglong_time(const MYSQL_TIME *); -ulonglong TIME_to_ulonglong(const MYSQL_TIME *); - - -my_bool str_to_time(const char *str,uint length, MYSQL_TIME *l_time, - int *warning); - -int check_time_range(struct st_mysql_time *, int *warning); - -long calc_daynr(uint year,uint month,uint day); -uint calc_days_in_year(uint year); -uint year_2000_handling(uint year); - -void my_init_time(void); - - -/* - Function to check sanity of a TIMESTAMP value - - DESCRIPTION - Check if a given MYSQL_TIME value fits in TIMESTAMP range. - This function doesn't make precise check, but rather a rough - estimate. - - RETURN VALUES - FALSE The value seems sane - TRUE The MYSQL_TIME value is definitely out of range -*/ - -static inline my_bool validate_timestamp_range(const MYSQL_TIME *t) -{ - if ((t->year > TIMESTAMP_MAX_YEAR || t->year < TIMESTAMP_MIN_YEAR) || - (t->year == TIMESTAMP_MAX_YEAR && (t->month > 1 || t->day > 19)) || - (t->year == TIMESTAMP_MIN_YEAR && (t->month < 12 || t->day < 31))) - return FALSE; - - return TRUE; -} - -my_time_t -my_system_gmt_sec(const MYSQL_TIME *t, long *my_timezone, - my_bool *in_dst_time_gap); - -void set_zero_time(MYSQL_TIME *tm, enum enum_mysql_timestamp_type time_type); - -/* - Required buffer length for my_time_to_str, my_date_to_str, - my_datetime_to_str and TIME_to_string functions. Note, that the - caller is still responsible to check that given TIME structure - has values in valid ranges, otherwise size of the buffer could - be not enough. We also rely on the fact that even wrong values - sent using binary protocol fit in this buffer. -*/ -#define MAX_DATE_STRING_REP_LENGTH 30 - -int my_time_to_str(const MYSQL_TIME *l_time, char *to); -int my_date_to_str(const MYSQL_TIME *l_time, char *to); -int my_datetime_to_str(const MYSQL_TIME *l_time, char *to); -int my_TIME_to_str(const MYSQL_TIME *l_time, char *to); - -/* - Available interval types used in any statement. - - 'interval_type' must be sorted so that simple intervals comes first, - ie year, quarter, month, week, day, hour, etc. The order based on - interval size is also important and the intervals should be kept in a - large to smaller order. (get_interval_value() depends on this) - - Note: If you change the order of elements in this enum you should fix - order of elements in 'interval_type_to_name' and 'interval_names' - arrays - - See also interval_type_to_name, get_interval_value, interval_names -*/ - -enum interval_type -{ - INTERVAL_YEAR, INTERVAL_QUARTER, INTERVAL_MONTH, INTERVAL_WEEK, INTERVAL_DAY, - INTERVAL_HOUR, INTERVAL_MINUTE, INTERVAL_SECOND, INTERVAL_MICROSECOND, - INTERVAL_YEAR_MONTH, INTERVAL_DAY_HOUR, INTERVAL_DAY_MINUTE, - INTERVAL_DAY_SECOND, INTERVAL_HOUR_MINUTE, INTERVAL_HOUR_SECOND, - INTERVAL_MINUTE_SECOND, INTERVAL_DAY_MICROSECOND, INTERVAL_HOUR_MICROSECOND, - INTERVAL_MINUTE_MICROSECOND, INTERVAL_SECOND_MICROSECOND, INTERVAL_LAST -}; - -C_MODE_END - -#endif /* _my_time_h_ */ diff --git a/deps/mysqllite/include/internal/my_tree.h b/deps/mysqllite/include/internal/my_tree.h deleted file mode 100644 index 0958a37fb4c081..00000000000000 --- a/deps/mysqllite/include/internal/my_tree.h +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _tree_h -#define _tree_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "my_base.h" /* get 'enum ha_rkey_function' */ -#include "my_alloc.h" /* MEM_ROOT */ - -/* Worst case tree is half full. This gives use 2^(MAX_TREE_HEIGHT/2) leafs */ -#define MAX_TREE_HEIGHT 64 - -#define ELEMENT_KEY(tree,element)\ -(tree->offset_to_key ? (void*)((uchar*) element+tree->offset_to_key) :\ - *((void**) (element+1))) - -#define tree_set_pointer(element,ptr) *((uchar **) (element+1))=((uchar*) (ptr)) - -#define TREE_NO_DUPS 1 - -typedef enum { left_root_right, right_root_left } TREE_WALK; -typedef uint32 element_count; -typedef int (*tree_walk_action)(void *,element_count,void *); - -typedef enum { free_init, free_free, free_end } TREE_FREE; -typedef void (*tree_element_free)(void*, TREE_FREE, void *); - -typedef struct st_tree_element { - struct st_tree_element *left,*right; - uint32 count:31, - colour:1; /* black is marked as 1 */ -} TREE_ELEMENT; - -#define ELEMENT_CHILD(element, offs) (*(TREE_ELEMENT**)((char*)element + offs)) - -typedef struct st_tree { - TREE_ELEMENT *root,null_element; - TREE_ELEMENT **parents[MAX_TREE_HEIGHT]; - uint offset_to_key,elements_in_tree,size_of_element; - ulong memory_limit, allocated; - qsort_cmp2 compare; - void *custom_arg; - MEM_ROOT mem_root; - my_bool with_delete; - tree_element_free free; - uint flag; -} TREE; - - /* Functions on whole tree */ -void init_tree(TREE *tree, ulong default_alloc_size, ulong memory_limit, - int size, qsort_cmp2 compare, my_bool with_delete, - tree_element_free free_element, void *custom_arg); -void delete_tree(TREE*); -void reset_tree(TREE*); - /* similar to delete tree, except we do not my_free() blocks in mem_root - */ -#define is_tree_inited(tree) ((tree)->root != 0) - - /* Functions on leafs */ -TREE_ELEMENT *tree_insert(TREE *tree,void *key, uint key_size, - void *custom_arg); -void *tree_search(TREE *tree, void *key, void *custom_arg); -int tree_walk(TREE *tree,tree_walk_action action, - void *argument, TREE_WALK visit); -int tree_delete(TREE *tree, void *key, uint key_size, void *custom_arg); -void *tree_search_key(TREE *tree, const void *key, - TREE_ELEMENT **parents, TREE_ELEMENT ***last_pos, - enum ha_rkey_function flag, void *custom_arg); -void *tree_search_edge(TREE *tree, TREE_ELEMENT **parents, - TREE_ELEMENT ***last_pos, int child_offs); -void *tree_search_next(TREE *tree, TREE_ELEMENT ***last_pos, int l_offs, - int r_offs); -ha_rows tree_record_pos(TREE *tree, const void *key, - enum ha_rkey_function search_flag, void *custom_arg); - -#define TREE_ELEMENT_EXTRA_SIZE (sizeof(TREE_ELEMENT) + sizeof(void*)) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/deps/mysqllite/include/internal/my_uctype.h b/deps/mysqllite/include/internal/my_uctype.h deleted file mode 100644 index 580eb646e11d67..00000000000000 --- a/deps/mysqllite/include/internal/my_uctype.h +++ /dev/null @@ -1,1483 +0,0 @@ -#ifndef MY_UCTYPE_INCLUDED -#define MY_UCTYPE_INCLUDED - -/* Copyright (C) 2006 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - -/* - Unicode ctype data - Generated from UnicodeData-5.0.0d9.txt -*/ -static unsigned char uctype_page00[256]= -{ - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, - 16, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 16, 16, 16, 16, 16, - 16, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, - 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 16, 16, 16, 16, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 32, 16, 16, - 16, 16, 20, 20, 16, 2, 16, 16, 16, 20, 2, 16, 20, 20, 20, 16, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static unsigned char uctype_page01[256]= -{ - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, - 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, - 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, - 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, - 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, - 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, - 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 2, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2 -}; - -static unsigned char uctype_page02[256]= -{ - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, - 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 16, 16, 16, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 2, 2, 2, 2, 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 -}; - -static unsigned char uctype_page03[256]= -{ - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 0, 0, 0, 0, 16, 16, 0, 0, 0, 0, 2, 2, 2, 2, 16, 0, - 0, 0, 0, 0, 16, 16, 1, 16, 1, 1, 1, 0, 1, 0, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 2, 2, 1, 1, 1, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 2, 2, 2, 2, 1, 2, 16, 1, 2, 1, 1, 2, 2, 1, 1, 1 -}; - -static unsigned char uctype_page04[256]= -{ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 16, 18, 18, 18, 18, 0, 18, 18, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 -}; - -static unsigned char uctype_page05[256]= -{ - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 0, 2, 16, 16, 16, 16, 16, 16, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 16, 16, 0, 0, 0, 0, 0, - 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 16, 18, - 16, 18, 18, 16, 18, 18, 16, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 2, 2, 2, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page06[256]= -{ - 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, - 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 16, 0, 0, 16, 16, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 2, 2, - 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 16, 2, 18, 18, 18, 18, 18, 18, 18, 32, 18, 18, - 18, 18, 18, 18, 18, 2, 2, 18, 18, 16, 18, 18, 18, 18, 2, 2, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 16, 16, 2 -}; - -static unsigned char uctype_page07[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 32, - 2, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 2, 2, 16, 16, 16, 16, 2, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page09[256]= -{ - 0, 18, 18, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, - 2, 18, 18, 18, 18, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 18, 18, 16, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, - 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, - 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 0, 2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, - 18, 18, 18, 18, 18, 0, 0, 18, 18, 0, 0, 18, 18, 18, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 2, 2, 0, 2, - 2, 2, 18, 18, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 2, 2, 16, 16, 20, 20, 20, 20, 20, 20, 16, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page0A[256]= -{ - 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, - 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 0, 2, 2, 0, 2, 2, 0, 2, 2, 0, 0, 18, 0, 18, 18, - 18, 18, 18, 0, 0, 0, 0, 18, 18, 0, 0, 18, 18, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 0, - 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 18, 18, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, - 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, - 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 0, 18, 18, 18, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 18, 18, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page0B[256]= -{ - 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, - 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, - 18, 18, 18, 18, 0, 0, 0, 18, 18, 0, 0, 18, 18, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 2, 2, 0, 2, - 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 16, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 18, 2, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, - 2, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 0, 2, 0, 2, 2, - 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 18, 18, - 18, 18, 18, 0, 0, 0, 18, 18, 18, 0, 18, 18, 18, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 20, 20, 20, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page0C[256]= -{ - 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, - 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 18, 18, - 18, 18, 18, 18, 18, 0, 18, 18, 18, 0, 18, 18, 18, 18, 0, 0, - 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, - 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, - 18, 18, 18, 18, 18, 0, 18, 18, 18, 0, 18, 18, 18, 18, 0, 0, - 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 2, 0, - 2, 2, 18, 18, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 0, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page0D[256]= -{ - 0, 0, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, - 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 18, 18, - 18, 18, 18, 18, 0, 0, 18, 18, 18, 0, 18, 18, 18, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 18, 0, 0, 0, 0, 18, - 18, 18, 18, 18, 18, 0, 18, 0, 18, 18, 18, 18, 18, 18, 18, 18, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 18, 18, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page0E[256]= -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 18, 2, 2, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 16, - 2, 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, 18, 18, 18, 16, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 0, 2, 0, 0, 2, 2, 0, 2, 0, 0, 2, 0, 0, - 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, - 0, 2, 2, 2, 0, 2, 0, 2, 0, 0, 2, 2, 0, 2, 2, 2, - 2, 18, 2, 2, 18, 18, 18, 18, 18, 18, 0, 18, 18, 2, 0, 0, - 2, 2, 2, 2, 2, 0, 2, 0, 18, 18, 18, 18, 18, 18, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 2, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page0F[256]= -{ - 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 16, 16, 16, 16, 16, 16, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 16, 18, 16, 18, 16, 18, 16, 16, 16, 16, 18, 18, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 16, 18, 18, 2, 2, 2, 2, 0, 0, 0, 0, - 18, 18, 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 16, 16, - 16, 16, 16, 16, 16, 16, 18, 16, 16, 16, 16, 16, 16, 0, 0, 16, - 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page10[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 2, 0, 18, 18, 18, 18, - 18, 18, 18, 0, 0, 0, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, - 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 0, 0, 0 -}; - -static unsigned char uctype_page11[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page12[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 2, 2, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, - 2, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static unsigned char uctype_page13[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 18, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page14[256]= -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static unsigned char uctype_page16[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page17[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, - 2, 2, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 18, 18, 18, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, - 2, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 32, 32, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 16, 16, 16, 2, 16, 16, 16, 16, 2, 18, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page18[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 8, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 18, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page19[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, - 16, 0, 0, 0, 16, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 2, 2, 2, 2, 2, 2, 2, 18, 18, 0, 0, 0, 0, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 -}; - -static unsigned char uctype_page1A[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, 0, 0, 16, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page1B[256]= -{ - 18, 18, 18, 18, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page1D[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18 -}; - -static unsigned char uctype_page1E[256]= -{ - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page1F[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 1, 0, 1, 0, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 1, 16, 2, 16, - 16, 16, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 1, 16, 16, 16, - 2, 2, 2, 2, 0, 0, 2, 2, 1, 1, 1, 1, 0, 16, 16, 16, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 16, 16, 16, - 0, 0, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 1, 16, 16, 0 -}; - -static unsigned char uctype_page20[256]= -{ - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 32, 32, 32, 32, 32, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 8, 8, 32, 32, 32, 32, 32, 8, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 8, - 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, - 20, 2, 0, 0, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, 16, 2, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, 16, 0, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page21[256]= -{ - 16, 16, 1, 16, 16, 16, 16, 1, 16, 16, 2, 1, 1, 1, 2, 2, - 1, 1, 1, 2, 16, 1, 16, 16, 16, 1, 1, 1, 1, 1, 16, 16, - 16, 16, 16, 16, 1, 16, 1, 16, 1, 16, 1, 1, 1, 1, 16, 2, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 16, 16, 2, 2, 1, 1, - 16, 16, 16, 16, 16, 1, 2, 2, 2, 2, 16, 16, 16, 16, 2, 0, - 0, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 -}; - -static unsigned char uctype_page23[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page24[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 -}; - -static unsigned char uctype_page26[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page27[256]= -{ - 0, 16, 16, 16, 16, 0, 16, 16, 16, 16, 0, 0, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 0, 16, - 16, 16, 16, 0, 0, 0, 16, 0, 16, 16, 16, 16, 16, 16, 16, 0, - 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 16, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 -}; - -static unsigned char uctype_page2B[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page2C[256]= -{ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 0, 0, 0, - 0, 0, 0, 0, 2, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 2, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 20, 16, 16 -}; - -static unsigned char uctype_page2D[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page2E[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page2F[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0 -}; - -static unsigned char uctype_page30[256]= -{ - 8, 16, 16, 16, 16, 2, 2, 7, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 7, 7, 7, 7, 7, 7, 7, 7, 7, 18, 18, 18, 18, 18, 18, - 16, 2, 2, 2, 2, 2, 16, 16, 7, 7, 7, 2, 2, 16, 16, 16, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 18, 18, 16, 16, 2, 2, 2, - 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2 -}; - -static unsigned char uctype_page31[256]= -{ - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 16, 16, 20, 20, 20, 20, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static unsigned char uctype_page32[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0 -}; - -static unsigned char uctype_page4D[256]= -{ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 -}; - -static unsigned char uctype_page9F[256]= -{ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageA4[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageA7[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageA8[256]= -{ - 2, 2, 18, 2, 2, 2, 18, 2, 2, 2, 2, 18, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 18, 18, 18, 18, 18, 16, 16, 16, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageD7[256]= -{ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageD8[256]= -{ - 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageDB[256]= -{ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, - 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32 -}; - -static unsigned char uctype_pageDC[256]= -{ - 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageDF[256]= -{ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32 -}; - -static unsigned char uctype_pageE0[256]= -{ - 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageF8[256]= -{ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32 -}; - -static unsigned char uctype_pageFA[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageFB[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 18, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 0, - 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static unsigned char uctype_pageFD[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 0, 0 -}; - -static unsigned char uctype_pageFE[256]= -{ - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, - 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 32 -}; - -static unsigned char uctype_pageFF[256]= -{ - 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, - 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, - 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 16, 16, 0, 0 -}; - -MY_UNI_CTYPE my_uni_ctype[256]={ - {0,uctype_page00}, - {0,uctype_page01}, - {0,uctype_page02}, - {0,uctype_page03}, - {0,uctype_page04}, - {0,uctype_page05}, - {0,uctype_page06}, - {0,uctype_page07}, - {0,NULL}, - {0,uctype_page09}, - {0,uctype_page0A}, - {0,uctype_page0B}, - {0,uctype_page0C}, - {0,uctype_page0D}, - {0,uctype_page0E}, - {0,uctype_page0F}, - {0,uctype_page10}, - {0,uctype_page11}, - {0,uctype_page12}, - {0,uctype_page13}, - {0,uctype_page14}, - {2,NULL}, - {0,uctype_page16}, - {0,uctype_page17}, - {0,uctype_page18}, - {0,uctype_page19}, - {0,uctype_page1A}, - {0,uctype_page1B}, - {0,NULL}, - {0,uctype_page1D}, - {0,uctype_page1E}, - {0,uctype_page1F}, - {0,uctype_page20}, - {0,uctype_page21}, - {16,NULL}, - {0,uctype_page23}, - {0,uctype_page24}, - {16,NULL}, - {0,uctype_page26}, - {0,uctype_page27}, - {16,NULL}, - {16,NULL}, - {16,NULL}, - {0,uctype_page2B}, - {0,uctype_page2C}, - {0,uctype_page2D}, - {0,uctype_page2E}, - {0,uctype_page2F}, - {0,uctype_page30}, - {0,uctype_page31}, - {0,uctype_page32}, - {16,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {0,uctype_page4D}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {0,uctype_page9F}, - {2,NULL}, - {2,NULL}, - {2,NULL}, - {2,NULL}, - {0,uctype_pageA4}, - {0,NULL}, - {0,NULL}, - {0,uctype_pageA7}, - {0,uctype_pageA8}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {0,uctype_pageD7}, - {0,uctype_pageD8}, - {0,NULL}, - {0,NULL}, - {0,uctype_pageDB}, - {0,uctype_pageDC}, - {0,NULL}, - {0,NULL}, - {0,uctype_pageDF}, - {0,uctype_pageE0}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,uctype_pageF8}, - {2,NULL}, - {0,uctype_pageFA}, - {0,uctype_pageFB}, - {2,NULL}, - {0,uctype_pageFD}, - {0,uctype_pageFE}, - {0,uctype_pageFF} -}; - - -#endif /* MY_UCTYPE_INCLUDED */ diff --git a/deps/mysqllite/include/internal/myisampack.h b/deps/mysqllite/include/internal/myisampack.h deleted file mode 100644 index ecf35520a88bf0..00000000000000 --- a/deps/mysqllite/include/internal/myisampack.h +++ /dev/null @@ -1,242 +0,0 @@ -#ifndef MYISAMPACK_INCLUDED -#define MYISAMPACK_INCLUDED - -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Storing of values in high byte first order. - - integer keys and file pointers are stored with high byte first to get - better compression -*/ - -/* these two are for uniformity */ -#define mi_sint1korr(A) ((int8)(*A)) -#define mi_uint1korr(A) ((uint8)(*A)) - -#define mi_sint2korr(A) ((int16) (((int16) (((uchar*) (A))[1])) +\ - ((int16) ((int16) ((char*) (A))[0]) << 8))) -#define mi_sint3korr(A) ((int32) (((((uchar*) (A))[0]) & 128) ? \ - (((uint32) 255L << 24) | \ - (((uint32) ((uchar*) (A))[0]) << 16) |\ - (((uint32) ((uchar*) (A))[1]) << 8) | \ - ((uint32) ((uchar*) (A))[2])) : \ - (((uint32) ((uchar*) (A))[0]) << 16) |\ - (((uint32) ((uchar*) (A))[1]) << 8) | \ - ((uint32) ((uchar*) (A))[2]))) -#define mi_sint4korr(A) ((int32) (((int32) (((uchar*) (A))[3])) +\ - ((int32) (((uchar*) (A))[2]) << 8) +\ - ((int32) (((uchar*) (A))[1]) << 16) +\ - ((int32) ((int16) ((char*) (A))[0]) << 24))) -#define mi_sint8korr(A) ((longlong) mi_uint8korr(A)) -#define mi_uint2korr(A) ((uint16) (((uint16) (((uchar*) (A))[1])) +\ - ((uint16) (((uchar*) (A))[0]) << 8))) -#define mi_uint3korr(A) ((uint32) (((uint32) (((uchar*) (A))[2])) +\ - (((uint32) (((uchar*) (A))[1])) << 8) +\ - (((uint32) (((uchar*) (A))[0])) << 16))) -#define mi_uint4korr(A) ((uint32) (((uint32) (((uchar*) (A))[3])) +\ - (((uint32) (((uchar*) (A))[2])) << 8) +\ - (((uint32) (((uchar*) (A))[1])) << 16) +\ - (((uint32) (((uchar*) (A))[0])) << 24))) -#define mi_uint5korr(A) ((ulonglong)(((uint32) (((uchar*) (A))[4])) +\ - (((uint32) (((uchar*) (A))[3])) << 8) +\ - (((uint32) (((uchar*) (A))[2])) << 16) +\ - (((uint32) (((uchar*) (A))[1])) << 24)) +\ - (((ulonglong) (((uchar*) (A))[0])) << 32)) -#define mi_uint6korr(A) ((ulonglong)(((uint32) (((uchar*) (A))[5])) +\ - (((uint32) (((uchar*) (A))[4])) << 8) +\ - (((uint32) (((uchar*) (A))[3])) << 16) +\ - (((uint32) (((uchar*) (A))[2])) << 24)) +\ - (((ulonglong) (((uint32) (((uchar*) (A))[1])) +\ - (((uint32) (((uchar*) (A))[0]) << 8)))) <<\ - 32)) -#define mi_uint7korr(A) ((ulonglong)(((uint32) (((uchar*) (A))[6])) +\ - (((uint32) (((uchar*) (A))[5])) << 8) +\ - (((uint32) (((uchar*) (A))[4])) << 16) +\ - (((uint32) (((uchar*) (A))[3])) << 24)) +\ - (((ulonglong) (((uint32) (((uchar*) (A))[2])) +\ - (((uint32) (((uchar*) (A))[1])) << 8) +\ - (((uint32) (((uchar*) (A))[0])) << 16))) <<\ - 32)) -#define mi_uint8korr(A) ((ulonglong)(((uint32) (((uchar*) (A))[7])) +\ - (((uint32) (((uchar*) (A))[6])) << 8) +\ - (((uint32) (((uchar*) (A))[5])) << 16) +\ - (((uint32) (((uchar*) (A))[4])) << 24)) +\ - (((ulonglong) (((uint32) (((uchar*) (A))[3])) +\ - (((uint32) (((uchar*) (A))[2])) << 8) +\ - (((uint32) (((uchar*) (A))[1])) << 16) +\ - (((uint32) (((uchar*) (A))[0])) << 24))) <<\ - 32)) - -/* This one is for uniformity */ -#define mi_int1store(T,A) *((uchar*)(T))= (uchar) (A) - -#define mi_int2store(T,A) { uint def_temp= (uint) (A) ;\ - ((uchar*) (T))[1]= (uchar) (def_temp);\ - ((uchar*) (T))[0]= (uchar) (def_temp >> 8); } -#define mi_int3store(T,A) { /*lint -save -e734 */\ - ulong def_temp= (ulong) (A);\ - ((uchar*) (T))[2]= (uchar) (def_temp);\ - ((uchar*) (T))[1]= (uchar) (def_temp >> 8);\ - ((uchar*) (T))[0]= (uchar) (def_temp >> 16);\ - /*lint -restore */} -#define mi_int4store(T,A) { ulong def_temp= (ulong) (A);\ - ((uchar*) (T))[3]= (uchar) (def_temp);\ - ((uchar*) (T))[2]= (uchar) (def_temp >> 8);\ - ((uchar*) (T))[1]= (uchar) (def_temp >> 16);\ - ((uchar*) (T))[0]= (uchar) (def_temp >> 24); } -#define mi_int5store(T,A) { ulong def_temp= (ulong) (A),\ - def_temp2= (ulong) ((A) >> 32);\ - ((uchar*) (T))[4]= (uchar) (def_temp);\ - ((uchar*) (T))[3]= (uchar) (def_temp >> 8);\ - ((uchar*) (T))[2]= (uchar) (def_temp >> 16);\ - ((uchar*) (T))[1]= (uchar) (def_temp >> 24);\ - ((uchar*) (T))[0]= (uchar) (def_temp2); } -#define mi_int6store(T,A) { ulong def_temp= (ulong) (A),\ - def_temp2= (ulong) ((A) >> 32);\ - ((uchar*) (T))[5]= (uchar) (def_temp);\ - ((uchar*) (T))[4]= (uchar) (def_temp >> 8);\ - ((uchar*) (T))[3]= (uchar) (def_temp >> 16);\ - ((uchar*) (T))[2]= (uchar) (def_temp >> 24);\ - ((uchar*) (T))[1]= (uchar) (def_temp2);\ - ((uchar*) (T))[0]= (uchar) (def_temp2 >> 8); } -#define mi_int7store(T,A) { ulong def_temp= (ulong) (A),\ - def_temp2= (ulong) ((A) >> 32);\ - ((uchar*) (T))[6]= (uchar) (def_temp);\ - ((uchar*) (T))[5]= (uchar) (def_temp >> 8);\ - ((uchar*) (T))[4]= (uchar) (def_temp >> 16);\ - ((uchar*) (T))[3]= (uchar) (def_temp >> 24);\ - ((uchar*) (T))[2]= (uchar) (def_temp2);\ - ((uchar*) (T))[1]= (uchar) (def_temp2 >> 8);\ - ((uchar*) (T))[0]= (uchar) (def_temp2 >> 16); } -#define mi_int8store(T,A) { ulong def_temp3= (ulong) (A),\ - def_temp4= (ulong) ((A) >> 32);\ - mi_int4store((uchar*) (T) + 0, def_temp4);\ - mi_int4store((uchar*) (T) + 4, def_temp3); } - -#ifdef WORDS_BIGENDIAN - -#define mi_float4store(T,A) { ((uchar*) (T))[0]= ((uchar*) &A)[0];\ - ((uchar*) (T))[1]= ((uchar*) &A)[1];\ - ((uchar*) (T))[2]= ((uchar*) &A)[2];\ - ((uchar*) (T))[3]= ((uchar*) &A)[3]; } - -#define mi_float4get(V,M) { float def_temp;\ - ((uchar*) &def_temp)[0]= ((uchar*) (M))[0];\ - ((uchar*) &def_temp)[1]= ((uchar*) (M))[1];\ - ((uchar*) &def_temp)[2]= ((uchar*) (M))[2];\ - ((uchar*) &def_temp)[3]= ((uchar*) (M))[3];\ - (V)= def_temp; } - -#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((uchar*) &V)[0];\ - ((uchar*) (T))[1]= ((uchar*) &V)[1];\ - ((uchar*) (T))[2]= ((uchar*) &V)[2];\ - ((uchar*) (T))[3]= ((uchar*) &V)[3];\ - ((uchar*) (T))[4]= ((uchar*) &V)[4];\ - ((uchar*) (T))[5]= ((uchar*) &V)[5];\ - ((uchar*) (T))[6]= ((uchar*) &V)[6];\ - ((uchar*) (T))[7]= ((uchar*) &V)[7]; } - -#define mi_float8get(V,M) { double def_temp;\ - ((uchar*) &def_temp)[0]= ((uchar*) (M))[0];\ - ((uchar*) &def_temp)[1]= ((uchar*) (M))[1];\ - ((uchar*) &def_temp)[2]= ((uchar*) (M))[2];\ - ((uchar*) &def_temp)[3]= ((uchar*) (M))[3];\ - ((uchar*) &def_temp)[4]= ((uchar*) (M))[4];\ - ((uchar*) &def_temp)[5]= ((uchar*) (M))[5];\ - ((uchar*) &def_temp)[6]= ((uchar*) (M))[6];\ - ((uchar*) &def_temp)[7]= ((uchar*) (M))[7]; \ - (V)= def_temp; } -#else - -#define mi_float4store(T,A) { ((uchar*) (T))[0]= ((uchar*) &A)[3];\ - ((uchar*) (T))[1]= ((uchar*) &A)[2];\ - ((uchar*) (T))[2]= ((uchar*) &A)[1];\ - ((uchar*) (T))[3]= ((uchar*) &A)[0]; } - -#define mi_float4get(V,M) { float def_temp;\ - ((uchar*) &def_temp)[0]= ((uchar*) (M))[3];\ - ((uchar*) &def_temp)[1]= ((uchar*) (M))[2];\ - ((uchar*) &def_temp)[2]= ((uchar*) (M))[1];\ - ((uchar*) &def_temp)[3]= ((uchar*) (M))[0];\ - (V)= def_temp; } - -#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN) -#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((uchar*) &V)[3];\ - ((uchar*) (T))[1]= ((uchar*) &V)[2];\ - ((uchar*) (T))[2]= ((uchar*) &V)[1];\ - ((uchar*) (T))[3]= ((uchar*) &V)[0];\ - ((uchar*) (T))[4]= ((uchar*) &V)[7];\ - ((uchar*) (T))[5]= ((uchar*) &V)[6];\ - ((uchar*) (T))[6]= ((uchar*) &V)[5];\ - ((uchar*) (T))[7]= ((uchar*) &V)[4];} - -#define mi_float8get(V,M) { double def_temp;\ - ((uchar*) &def_temp)[0]= ((uchar*) (M))[3];\ - ((uchar*) &def_temp)[1]= ((uchar*) (M))[2];\ - ((uchar*) &def_temp)[2]= ((uchar*) (M))[1];\ - ((uchar*) &def_temp)[3]= ((uchar*) (M))[0];\ - ((uchar*) &def_temp)[4]= ((uchar*) (M))[7];\ - ((uchar*) &def_temp)[5]= ((uchar*) (M))[6];\ - ((uchar*) &def_temp)[6]= ((uchar*) (M))[5];\ - ((uchar*) &def_temp)[7]= ((uchar*) (M))[4];\ - (V)= def_temp; } - -#else -#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((uchar*) &V)[7];\ - ((uchar*) (T))[1]= ((uchar*) &V)[6];\ - ((uchar*) (T))[2]= ((uchar*) &V)[5];\ - ((uchar*) (T))[3]= ((uchar*) &V)[4];\ - ((uchar*) (T))[4]= ((uchar*) &V)[3];\ - ((uchar*) (T))[5]= ((uchar*) &V)[2];\ - ((uchar*) (T))[6]= ((uchar*) &V)[1];\ - ((uchar*) (T))[7]= ((uchar*) &V)[0];} - -#define mi_float8get(V,M) { double def_temp;\ - ((uchar*) &def_temp)[0]= ((uchar*) (M))[7];\ - ((uchar*) &def_temp)[1]= ((uchar*) (M))[6];\ - ((uchar*) &def_temp)[2]= ((uchar*) (M))[5];\ - ((uchar*) &def_temp)[3]= ((uchar*) (M))[4];\ - ((uchar*) &def_temp)[4]= ((uchar*) (M))[3];\ - ((uchar*) &def_temp)[5]= ((uchar*) (M))[2];\ - ((uchar*) &def_temp)[6]= ((uchar*) (M))[1];\ - ((uchar*) &def_temp)[7]= ((uchar*) (M))[0];\ - (V)= def_temp; } -#endif /* __FLOAT_WORD_ORDER */ -#endif /* WORDS_BIGENDIAN */ - -/* Fix to avoid warnings when sizeof(ha_rows) == sizeof(long) */ - -#ifdef BIG_TABLES -#define mi_rowstore(T,A) mi_int8store(T, A) -#define mi_rowkorr(T) mi_uint8korr(T) -#else -#define mi_rowstore(T,A) { mi_int4store(T, 0);\ - mi_int4store(((uchar*) (T) + 4), A); } -#define mi_rowkorr(T) mi_uint4korr((uchar*) (T) + 4) -#endif - -#if SIZEOF_OFF_T > 4 -#define mi_sizestore(T,A) mi_int8store(T, A) -#define mi_sizekorr(T) mi_uint8korr(T) -#else -#define mi_sizestore(T,A) { if ((A) == HA_OFFSET_ERROR)\ - bfill((char*) (T), 8, 255);\ - else { mi_int4store((T), 0);\ - mi_int4store(((T) + 4), A); }} -#define mi_sizekorr(T) mi_uint4korr((uchar*) (T) + 4) -#endif -#endif /* MYISAMPACK_INCLUDED */ diff --git a/deps/mysqllite/include/internal/mysql_version.h.in b/deps/mysqllite/include/internal/mysql_version.h.in deleted file mode 100644 index 04a43f2c968ff1..00000000000000 --- a/deps/mysqllite/include/internal/mysql_version.h.in +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright Abandoned 1996, 1999, 2001 MySQL AB - This file is public domain and comes with NO WARRANTY of any kind */ - -/* Version numbers for protocol & mysqld */ - -#ifndef _mysql_version_h -#define _mysql_version_h -#ifdef _CUSTOMCONFIG_ -#include -#else -#define PROTOCOL_VERSION @PROTOCOL_VERSION@ -#define MYSQL_SERVER_VERSION "@VERSION@" -#define MYSQL_BASE_VERSION "mysqld-@MYSQL_BASE_VERSION@" -#define MYSQL_SERVER_SUFFIX_DEF "@MYSQL_SERVER_SUFFIX@" -#define FRM_VER @DOT_FRM_VERSION@ -#define MYSQL_VERSION_ID @MYSQL_VERSION_ID@ -#define MYSQL_PORT @MYSQL_TCP_PORT@ -#define MYSQL_PORT_DEFAULT @MYSQL_TCP_PORT_DEFAULT@ -#define MYSQL_UNIX_ADDR "@MYSQL_UNIX_ADDR@" -#define MYSQL_CONFIG_NAME "my" -#define MYSQL_COMPILATION_COMMENT "@COMPILATION_COMMENT@" - -/* mysqld compile time options */ -#endif /* _CUSTOMCONFIG_ */ - -#ifndef LICENSE -#define LICENSE GPL -#endif /* LICENSE */ - -#endif /* _mysql_version_h */ diff --git a/deps/mysqllite/include/internal/mysys_err.h b/deps/mysqllite/include/internal/mysys_err.h deleted file mode 100644 index 22ac74302a2076..00000000000000 --- a/deps/mysqllite/include/internal/mysys_err.h +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _mysys_err_h -#define _mysys_err_h - -#ifdef __cplusplus -extern "C" { -#endif - -#define GLOBERRS (EE_ERROR_LAST - EE_ERROR_FIRST + 1) /* Nr of global errors */ -#define EE(X) (globerrs[(X) - EE_ERROR_FIRST]) - -extern const char *globerrs[]; /* my_error_messages is here */ - -/* Error message numbers in global map */ -/* - Do not add error numbers before EE_ERROR_FIRST. - If necessary to add lower numbers, change EE_ERROR_FIRST accordingly. - - We start with error 1 to not confuse peoples with 'error 0' -*/ - -#define EE_ERROR_FIRST 1 /*Copy first error nr.*/ -#define EE_CANTCREATEFILE 1 -#define EE_READ 2 -#define EE_WRITE 3 -#define EE_BADCLOSE 4 -#define EE_OUTOFMEMORY 5 -#define EE_DELETE 6 -#define EE_LINK 7 -#define EE_EOFERR 9 -#define EE_CANTLOCK 10 -#define EE_CANTUNLOCK 11 -#define EE_DIR 12 -#define EE_STAT 13 -#define EE_CANT_CHSIZE 14 -#define EE_CANT_OPEN_STREAM 15 -#define EE_GETWD 16 -#define EE_SETWD 17 -#define EE_LINK_WARNING 18 -#define EE_OPEN_WARNING 19 -#define EE_DISK_FULL 20 -#define EE_CANT_MKDIR 21 -#define EE_UNKNOWN_CHARSET 22 -#define EE_OUT_OF_FILERESOURCES 23 -#define EE_CANT_READLINK 24 -#define EE_CANT_SYMLINK 25 -#define EE_REALPATH 26 -#define EE_SYNC 27 -#define EE_UNKNOWN_COLLATION 28 -#define EE_FILENOTFOUND 29 -#define EE_FILE_NOT_CLOSED 30 -#define EE_CHANGE_OWNERSHIP 31 -#define EE_CHANGE_PERMISSIONS 32 -#define EE_CANT_SEEK 33 -#define EE_ERROR_LAST 33 /* Copy last error nr */ -/* Add error numbers before EE_ERROR_LAST and change it accordingly. */ - - /* exit codes for all MySQL programs */ - -#define EXIT_UNSPECIFIED_ERROR 1 -#define EXIT_UNKNOWN_OPTION 2 -#define EXIT_AMBIGUOUS_OPTION 3 -#define EXIT_NO_ARGUMENT_ALLOWED 4 -#define EXIT_ARGUMENT_REQUIRED 5 -#define EXIT_VAR_PREFIX_NOT_UNIQUE 6 -#define EXIT_UNKNOWN_VARIABLE 7 -#define EXIT_OUT_OF_MEMORY 8 -#define EXIT_UNKNOWN_SUFFIX 9 -#define EXIT_NO_PTR_TO_VARIABLE 10 -#define EXIT_CANNOT_CONNECT_TO_SERVICE 11 -#define EXIT_OPTION_DISABLED 12 -#define EXIT_ARGUMENT_INVALID 13 - - -#ifdef __cplusplus -} -#endif -#endif - diff --git a/deps/mysqllite/include/internal/password.h b/deps/mysqllite/include/internal/password.h deleted file mode 100644 index e75b09297a31fd..00000000000000 --- a/deps/mysqllite/include/internal/password.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - -#ifndef PASSWORD_INCLUDED -#define PASSWORD_INCLUDED - -#include "my_global.h" - -C_MODE_START - -void my_make_scrambled_password_323(char *to, const char *password, - size_t pass_len); -void my_make_scrambled_password(char *to, const char *password, - size_t pass_len); - -void hash_password(ulong *result, const char *password, uint password_len); - -C_MODE_END - -#endif /* PASSWORD_INCLUDED */ diff --git a/deps/mysqllite/include/internal/probes_mysql.h b/deps/mysqllite/include/internal/probes_mysql.h deleted file mode 100644 index 13491c661fdeed..00000000000000 --- a/deps/mysqllite/include/internal/probes_mysql.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef PROBES_MYSQL_H - -#define PROBES_MYSQL_H - -#include - -#if defined(HAVE_DTRACE) && !defined(DISABLE_DTRACE) -#include "probes_mysql_dtrace.h" -#else -#include "probes_mysql_nodtrace.h" -#endif - -#endif /* PROBES_MYSQL_H */ diff --git a/deps/mysqllite/include/internal/probes_mysql_nodtrace.h b/deps/mysqllite/include/internal/probes_mysql_nodtrace.h deleted file mode 100644 index bc3b65a00e5e86..00000000000000 --- a/deps/mysqllite/include/internal/probes_mysql_nodtrace.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Generated by dheadgen(1). - */ - -#ifndef _PROBES_MYSQL_D -#define _PROBES_MYSQL_D - -#ifdef __cplusplus -extern "C" { -#endif - -#define MYSQL_CONNECTION_START(arg0, arg1, arg2) -#define MYSQL_CONNECTION_START_ENABLED() (0) -#define MYSQL_CONNECTION_DONE(arg0, arg1) -#define MYSQL_CONNECTION_DONE_ENABLED() (0) -#define MYSQL_COMMAND_START(arg0, arg1, arg2, arg3) -#define MYSQL_COMMAND_START_ENABLED() (0) -#define MYSQL_COMMAND_DONE(arg0) -#define MYSQL_COMMAND_DONE_ENABLED() (0) -#define MYSQL_QUERY_START(arg0, arg1, arg2, arg3, arg4) -#define MYSQL_QUERY_START_ENABLED() (0) -#define MYSQL_QUERY_DONE(arg0) -#define MYSQL_QUERY_DONE_ENABLED() (0) -#define MYSQL_QUERY_PARSE_START(arg0) -#define MYSQL_QUERY_PARSE_START_ENABLED() (0) -#define MYSQL_QUERY_PARSE_DONE(arg0) -#define MYSQL_QUERY_PARSE_DONE_ENABLED() (0) -#define MYSQL_QUERY_CACHE_HIT(arg0, arg1) -#define MYSQL_QUERY_CACHE_HIT_ENABLED() (0) -#define MYSQL_QUERY_CACHE_MISS(arg0) -#define MYSQL_QUERY_CACHE_MISS_ENABLED() (0) -#define MYSQL_QUERY_EXEC_START(arg0, arg1, arg2, arg3, arg4, arg5) -#define MYSQL_QUERY_EXEC_START_ENABLED() (0) -#define MYSQL_QUERY_EXEC_DONE(arg0) -#define MYSQL_QUERY_EXEC_DONE_ENABLED() (0) -#define MYSQL_INSERT_ROW_START(arg0, arg1) -#define MYSQL_INSERT_ROW_START_ENABLED() (0) -#define MYSQL_INSERT_ROW_DONE(arg0) -#define MYSQL_INSERT_ROW_DONE_ENABLED() (0) -#define MYSQL_UPDATE_ROW_START(arg0, arg1) -#define MYSQL_UPDATE_ROW_START_ENABLED() (0) -#define MYSQL_UPDATE_ROW_DONE(arg0) -#define MYSQL_UPDATE_ROW_DONE_ENABLED() (0) -#define MYSQL_DELETE_ROW_START(arg0, arg1) -#define MYSQL_DELETE_ROW_START_ENABLED() (0) -#define MYSQL_DELETE_ROW_DONE(arg0) -#define MYSQL_DELETE_ROW_DONE_ENABLED() (0) -#define MYSQL_READ_ROW_START(arg0, arg1, arg2) -#define MYSQL_READ_ROW_START_ENABLED() (0) -#define MYSQL_READ_ROW_DONE(arg0) -#define MYSQL_READ_ROW_DONE_ENABLED() (0) -#define MYSQL_INDEX_READ_ROW_START(arg0, arg1) -#define MYSQL_INDEX_READ_ROW_START_ENABLED() (0) -#define MYSQL_INDEX_READ_ROW_DONE(arg0) -#define MYSQL_INDEX_READ_ROW_DONE_ENABLED() (0) -#define MYSQL_HANDLER_RDLOCK_START(arg0, arg1) -#define MYSQL_HANDLER_RDLOCK_START_ENABLED() (0) -#define MYSQL_HANDLER_WRLOCK_START(arg0, arg1) -#define MYSQL_HANDLER_WRLOCK_START_ENABLED() (0) -#define MYSQL_HANDLER_UNLOCK_START(arg0, arg1) -#define MYSQL_HANDLER_UNLOCK_START_ENABLED() (0) -#define MYSQL_HANDLER_RDLOCK_DONE(arg0) -#define MYSQL_HANDLER_RDLOCK_DONE_ENABLED() (0) -#define MYSQL_HANDLER_WRLOCK_DONE(arg0) -#define MYSQL_HANDLER_WRLOCK_DONE_ENABLED() (0) -#define MYSQL_HANDLER_UNLOCK_DONE(arg0) -#define MYSQL_HANDLER_UNLOCK_DONE_ENABLED() (0) -#define MYSQL_FILESORT_START(arg0, arg1) -#define MYSQL_FILESORT_START_ENABLED() (0) -#define MYSQL_FILESORT_DONE(arg0, arg1) -#define MYSQL_FILESORT_DONE_ENABLED() (0) -#define MYSQL_SELECT_START(arg0) -#define MYSQL_SELECT_START_ENABLED() (0) -#define MYSQL_SELECT_DONE(arg0, arg1) -#define MYSQL_SELECT_DONE_ENABLED() (0) -#define MYSQL_INSERT_START(arg0) -#define MYSQL_INSERT_START_ENABLED() (0) -#define MYSQL_INSERT_DONE(arg0, arg1) -#define MYSQL_INSERT_DONE_ENABLED() (0) -#define MYSQL_INSERT_SELECT_START(arg0) -#define MYSQL_INSERT_SELECT_START_ENABLED() (0) -#define MYSQL_INSERT_SELECT_DONE(arg0, arg1) -#define MYSQL_INSERT_SELECT_DONE_ENABLED() (0) -#define MYSQL_UPDATE_START(arg0) -#define MYSQL_UPDATE_START_ENABLED() (0) -#define MYSQL_UPDATE_DONE(arg0, arg1, arg2) -#define MYSQL_UPDATE_DONE_ENABLED() (0) -#define MYSQL_MULTI_UPDATE_START(arg0) -#define MYSQL_MULTI_UPDATE_START_ENABLED() (0) -#define MYSQL_MULTI_UPDATE_DONE(arg0, arg1, arg2) -#define MYSQL_MULTI_UPDATE_DONE_ENABLED() (0) -#define MYSQL_DELETE_START(arg0) -#define MYSQL_DELETE_START_ENABLED() (0) -#define MYSQL_DELETE_DONE(arg0, arg1) -#define MYSQL_DELETE_DONE_ENABLED() (0) -#define MYSQL_MULTI_DELETE_START(arg0) -#define MYSQL_MULTI_DELETE_START_ENABLED() (0) -#define MYSQL_MULTI_DELETE_DONE(arg0, arg1) -#define MYSQL_MULTI_DELETE_DONE_ENABLED() (0) -#define MYSQL_NET_READ_START() -#define MYSQL_NET_READ_START_ENABLED() (0) -#define MYSQL_NET_READ_DONE(arg0, arg1) -#define MYSQL_NET_READ_DONE_ENABLED() (0) -#define MYSQL_NET_WRITE_START(arg0) -#define MYSQL_NET_WRITE_START_ENABLED() (0) -#define MYSQL_NET_WRITE_DONE(arg0) -#define MYSQL_NET_WRITE_DONE_ENABLED() (0) -#define MYSQL_KEYCACHE_READ_START(arg0, arg1, arg2, arg3) -#define MYSQL_KEYCACHE_READ_START_ENABLED() (0) -#define MYSQL_KEYCACHE_READ_BLOCK(arg0) -#define MYSQL_KEYCACHE_READ_BLOCK_ENABLED() (0) -#define MYSQL_KEYCACHE_READ_HIT() -#define MYSQL_KEYCACHE_READ_HIT_ENABLED() (0) -#define MYSQL_KEYCACHE_READ_MISS() -#define MYSQL_KEYCACHE_READ_MISS_ENABLED() (0) -#define MYSQL_KEYCACHE_READ_DONE(arg0, arg1) -#define MYSQL_KEYCACHE_READ_DONE_ENABLED() (0) -#define MYSQL_KEYCACHE_WRITE_START(arg0, arg1, arg2, arg3) -#define MYSQL_KEYCACHE_WRITE_START_ENABLED() (0) -#define MYSQL_KEYCACHE_WRITE_BLOCK(arg0) -#define MYSQL_KEYCACHE_WRITE_BLOCK_ENABLED() (0) -#define MYSQL_KEYCACHE_WRITE_DONE(arg0, arg1) -#define MYSQL_KEYCACHE_WRITE_DONE_ENABLED() (0) - -#ifdef __cplusplus -} -#endif - -#endif /* _PROBES_MYSQL_D */ diff --git a/deps/mysqllite/include/internal/queues.h b/deps/mysqllite/include/internal/queues.h deleted file mode 100644 index 07962f09201ec1..00000000000000 --- a/deps/mysqllite/include/internal/queues.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Code for generell handling of priority Queues. - Implemention of queues from "Algoritms in C" by Robert Sedgewick. - Copyright Monty Program KB. - By monty. -*/ - -#ifndef _queues_h -#define _queues_h - -#include "my_global.h" /* uchar */ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct st_queue { - uchar **root; - void *first_cmp_arg; - uint elements; - uint max_elements; - uint offset_to_key; /* compare is done on element+offset */ - int max_at_top; /* Normally 1, set to -1 if queue_top gives max */ - int (*compare)(void *, uchar *,uchar *); - uint auto_extent; -} QUEUE; - -#define queue_top(queue) ((queue)->root[1]) -#define queue_element(queue,index) ((queue)->root[index+1]) -#define queue_end(queue) ((queue)->root[(queue)->elements]) -#define queue_replaced(queue) _downheap(queue,1) -#define queue_set_cmp_arg(queue, set_arg) (queue)->first_cmp_arg= set_arg -#define queue_set_max_at_top(queue, set_arg) \ - (queue)->max_at_top= set_arg ? -1 : 1 -typedef int (*queue_compare)(void *,uchar *, uchar *); - -int init_queue(QUEUE *queue,uint max_elements,uint offset_to_key, - pbool max_at_top, queue_compare compare, - void *first_cmp_arg); -int init_queue_ex(QUEUE *queue,uint max_elements,uint offset_to_key, - pbool max_at_top, queue_compare compare, - void *first_cmp_arg, uint auto_extent); -int reinit_queue(QUEUE *queue,uint max_elements,uint offset_to_key, - pbool max_at_top, queue_compare compare, - void *first_cmp_arg); -int resize_queue(QUEUE *queue, uint max_elements); -void delete_queue(QUEUE *queue); -void queue_insert(QUEUE *queue,uchar *element); -int queue_insert_safe(QUEUE *queue, uchar *element); -uchar *queue_remove(QUEUE *queue,uint idx); -#define queue_remove_all(queue) { (queue)->elements= 0; } -#define queue_is_full(queue) (queue->elements == queue->max_elements) -void _downheap(QUEUE *queue,uint idx); -void queue_fix(QUEUE *queue); -#define is_queue_inited(queue) ((queue)->root != 0) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/deps/mysqllite/include/internal/rijndael.h b/deps/mysqllite/include/internal/rijndael.h deleted file mode 100644 index 71df1c48dbfd76..00000000000000 --- a/deps/mysqllite/include/internal/rijndael.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef RIJNDAEL_INCLUDED -#define RIJNDAEL_INCLUDED - -/* Copyright (C) 2002 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -/* - rijndael-alg-fst.h - - @version 3.0 (December 2000) - Optimised ANSI C code for the Rijndael cipher (now AES) - @author Vincent Rijmen - @author Antoon Bosselaers - @author Paulo Barreto - - This code is hereby placed in the public domain. - Modified by Peter Zaitsev to fit MySQL coding style. - */ - -#define AES_MAXKC (256/32) -#define AES_MAXKB (256/8) -#define AES_MAXNR 14 - -int rijndaelKeySetupEnc(uint32 rk[/*4*(Nr + 1)*/], const uint8 cipherKey[], - int keyBits); -int rijndaelKeySetupDec(uint32 rk[/*4*(Nr + 1)*/], const uint8 cipherKey[], - int keyBits); -void rijndaelEncrypt(const uint32 rk[/*4*(Nr + 1)*/], int Nr, - const uint8 pt[16], uint8 ct[16]); -void rijndaelDecrypt(const uint32 rk[/*4*(Nr + 1)*/], int Nr, - const uint8 ct[16], uint8 pt[16]); - -#endif /* RIJNDAEL_INCLUDED */ diff --git a/deps/mysqllite/include/internal/sha1.h b/deps/mysqllite/include/internal/sha1.h deleted file mode 100644 index d60d5e17c60eba..00000000000000 --- a/deps/mysqllite/include/internal/sha1.h +++ /dev/null @@ -1,104 +0,0 @@ -#ifndef SHA1_INCLUDED -#define SHA1_INCLUDED - -/* Copyright (C) 2002, 2006 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - This is the header file for code which implements the Secure - Hashing Algorithm 1 as defined in FIPS PUB 180-1 published - April 17, 1995. - - Many of the variable names in this code, especially the - single character names, were used because those were the names - used in the publication. - - Please read the file sha1.c for more information. - - Modified 2002 by Peter Zaitsev to better follow MySQL standards - - Original Source from: http://www.faqs.org/rfcs/rfc3174.html - - Copyright (C) The Internet Society (2001). All Rights Reserved. - - This document and translations of it may be copied and furnished to - others, and derivative works that comment on or otherwise explain it - or assist in its implementation may be prepared, copied, published - and distributed, in whole or in part, without restriction of any - kind, provided that the above copyright notice and this paragraph are - included on all such copies and derivative works. However, this - document itself may not be modified in any way, such as by removing - the copyright notice or references to the Internet Society or other - Internet organizations, except as needed for the purpose of - developing Internet standards in which case the procedures for - copyrights defined in the Internet Standards process must be - followed, or as required to translate it into languages other than - English. - - The limited permissions granted above are perpetual and will not be - revoked by the Internet Society or its successors or assigns. - - This document and the information contained herein is provided on an - "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING - TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION - HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF - MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - - Acknowledgement - Funding for the RFC Editor function is currently provided by the - Internet Society. -*/ - - -enum sha_result_codes -{ - SHA_SUCCESS = 0, - SHA_NULL, /* Null pointer parameter */ - SHA_INPUT_TOO_LONG, /* input data too long */ - SHA_STATE_ERROR /* called Input after Result */ -}; - -#define SHA1_HASH_SIZE 20 /* Hash size in bytes */ - -/* - This structure will hold context information for the SHA-1 - hashing operation -*/ - -typedef struct SHA1_CONTEXT -{ - ulonglong Length; /* Message length in bits */ - uint32 Intermediate_Hash[SHA1_HASH_SIZE/4]; /* Message Digest */ - int Computed; /* Is the digest computed? */ - int Corrupted; /* Is the message digest corrupted? */ - int16 Message_Block_Index; /* Index into message block array */ - uint8 Message_Block[64]; /* 512-bit message blocks */ -} SHA1_CONTEXT; - -/* - Function Prototypes -*/ - -C_MODE_START - -int mysql_sha1_reset(SHA1_CONTEXT*); -int mysql_sha1_input(SHA1_CONTEXT*, const uint8 *, unsigned int); -int mysql_sha1_result(SHA1_CONTEXT* , uint8 Message_Digest[SHA1_HASH_SIZE]); - -C_MODE_END - -#endif /* SHA__INCLUDED */ diff --git a/deps/mysqllite/include/internal/t_ctype.h b/deps/mysqllite/include/internal/t_ctype.h deleted file mode 100644 index 15600019cd61c8..00000000000000 --- a/deps/mysqllite/include/internal/t_ctype.h +++ /dev/null @@ -1,254 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Copyright (C) 1998, 1999 by Pruet Boonma, all rights reserved. - Copyright (C) 1998 by Theppitak Karoonboonyanan, all rights reserved. - Permission to use, copy, modify, distribute and sell this software - and its documentation for any purpose is hereby granted without fee, - provided that the above copyright notice appear in all copies. - Smaphan Raruenrom and Pruet Boonma makes no representations about - the suitability of this software for any purpose. It is provided - "as is" without express or implied warranty. -*/ - -/* LC_COLLATE category + Level information */ - -#ifndef _t_ctype_h -#define _t_ctype_h - -#define TOT_LEVELS 5 -#define LAST_LEVEL 4 /* TOT_LEVELS - 1 */ - -#define IGNORE 0 - - -/* level 1 symbols & order */ -enum l1_symbols { - L1_08 = TOT_LEVELS, - L1_18, - L1_28, - L1_38, - L1_48, - L1_58, - L1_68, - L1_78, - L1_88, - L1_98, - L1_A8, - L1_B8, - L1_C8, - L1_D8, - L1_E8, - L1_F8, - L1_G8, - L1_H8, - L1_I8, - L1_J8, - L1_K8, - L1_L8, - L1_M8, - L1_N8, - L1_O8, - L1_P8, - L1_Q8, - L1_R8, - L1_S8, - L1_T8, - L1_U8, - L1_V8, - L1_W8, - L1_X8, - L1_Y8, - L1_Z8, - L1_KO_KAI, - L1_KHO_KHAI, - L1_KHO_KHUAT, - L1_KHO_KHWAI, - L1_KHO_KHON, - L1_KHO_RAKHANG, - L1_NGO_NGU, - L1_CHO_CHAN, - L1_CHO_CHING, - L1_CHO_CHANG, - L1_SO_SO, - L1_CHO_CHOE, - L1_YO_YING, - L1_DO_CHADA, - L1_TO_PATAK, - L1_THO_THAN, - L1_THO_NANGMONTHO, - L1_THO_PHUTHAO, - L1_NO_NEN, - L1_DO_DEK, - L1_TO_TAO, - L1_THO_THUNG, - L1_THO_THAHAN, - L1_THO_THONG, - L1_NO_NU, - L1_BO_BAIMAI, - L1_PO_PLA, - L1_PHO_PHUNG, - L1_FO_FA, - L1_PHO_PHAN, - L1_FO_FAN, - L1_PHO_SAMPHAO, - L1_MO_MA, - L1_YO_YAK, - L1_RO_RUA, - L1_RU, - L1_LO_LING, - L1_LU, - L1_WO_WAEN, - L1_SO_SALA, - L1_SO_RUSI, - L1_SO_SUA, - L1_HO_HIP, - L1_LO_CHULA, - L1_O_ANG, - L1_HO_NOKHUK, - L1_NKHIT, - L1_SARA_A, - L1_MAI_HAN_AKAT, - L1_SARA_AA, - L1_SARA_AM, - L1_SARA_I, - L1_SARA_II, - L1_SARA_UE, - L1_SARA_UEE, - L1_SARA_U, - L1_SARA_UU, - L1_SARA_E, - L1_SARA_AE, - L1_SARA_O, - L1_SARA_AI_MAIMUAN, - L1_SARA_AI_MAIMALAI -}; - -/* level 2 symbols & order */ -enum l2_symbols { - L2_BLANK = TOT_LEVELS, - L2_THAII, - L2_YAMAK, - L2_PINTHU, - L2_GARAN, - L2_TYKHU, - L2_TONE1, - L2_TONE2, - L2_TONE3, - L2_TONE4 -}; - -/* level 3 symbols & order */ -enum l3_symbols { - L3_BLANK = TOT_LEVELS, - L3_SPACE, - L3_NB_SACE, - L3_LOW_LINE, - L3_HYPHEN, - L3_COMMA, - L3_SEMICOLON, - L3_COLON, - L3_EXCLAMATION, - L3_QUESTION, - L3_SOLIDUS, - L3_FULL_STOP, - L3_PAIYAN_NOI, - L3_MAI_YAMOK, - L3_GRAVE, - L3_CIRCUMFLEX, - L3_TILDE, - L3_APOSTROPHE, - L3_QUOTATION, - L3_L_PARANTHESIS, - L3_L_BRACKET, - L3_L_BRACE, - L3_R_BRACE, - L3_R_BRACKET, - L3_R_PARENTHESIS, - L3_AT, - L3_BAHT, - L3_DOLLAR, - L3_FONGMAN, - L3_ANGKHANKHU, - L3_KHOMUT, - L3_ASTERISK, - L3_BK_SOLIDUS, - L3_AMPERSAND, - L3_NUMBER, - L3_PERCENT, - L3_PLUS, - L3_LESS_THAN, - L3_EQUAL, - L3_GREATER_THAN, - L3_V_LINE -}; - -/* level 4 symbols & order */ -enum l4_symbols { - L4_BLANK = TOT_LEVELS, - L4_MIN, - L4_CAP, - L4_EXT -}; - -enum level_symbols { - L_UPRUPR = TOT_LEVELS, - L_UPPER, - L_MIDDLE, - L_LOWER -}; - -#define _is(c) (t_ctype[(c)][LAST_LEVEL]) -#define _level 8 -#define _consnt 16 -#define _ldvowel 32 -#define _fllwvowel 64 -#define _uprvowel 128 -#define _lwrvowel 256 -#define _tone 512 -#define _diacrt1 1024 -#define _diacrt2 2048 -#define _combine 4096 -#define _stone 8192 -#define _tdig 16384 -#define _rearvowel (_fllwvowel | _uprvowel | _lwrvowel) -#define _diacrt (_diacrt1 | _diacrt2) -#define levelof(c) ( _is(c) & _level ) -#define isthai(c) ( (c) >= 128 ) -#define istalpha(c) ( _is(c) & (_consnt|_ldvowel|_rearvowel|\ - _tone|_diacrt1|_diacrt2) ) -#define isconsnt(c) ( _is(c) & _consnt ) -#define isldvowel(c) ( _is(c) & _ldvowel ) -#define isfllwvowel(c) ( _is(c) & _fllwvowel ) -#define ismidvowel(c) ( _is(c) & (_ldvowel|_fllwvowel) ) -#define isuprvowel(c) ( _is(c) & _uprvowel ) -#define islwrvowel(c) ( _is(c) & _lwrvowel ) -#define isuprlwrvowel(c) ( _is(c) & (_lwrvowel | _uprvowel)) -#define isrearvowel(c) ( _is(c) & _rearvowel ) -#define isvowel(c) ( _is(c) & (_ldvowel|_rearvowel) ) -#define istone(c) ( _is(c) & _tone ) -#define isunldable(c) ( _is(c) & (_rearvowel|_tone|_diacrt1|_diacrt2) ) -#define iscombinable(c) ( _is(c) & _combine ) -#define istdigit(c) ( _is(c) & _tdig ) -#define isstone(c) ( _is(c) & _stone ) -#define isdiacrt1(c) ( _is(c) & _diacrt1) -#define isdiacrt2(c) ( _is(c) & _diacrt2) -#define isdiacrt(c) ( _is(c) & _diacrt) - -/* Function prototype called by sql/field.cc */ -void ThNormalize(uchar* ptr, uint field_length, const uchar* from, uint length); - -#endif diff --git a/deps/mysqllite/include/internal/thr_alarm.h b/deps/mysqllite/include/internal/thr_alarm.h deleted file mode 100644 index 8c91fc0b899c02..00000000000000 --- a/deps/mysqllite/include/internal/thr_alarm.h +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Prototypes when using thr_alarm library functions */ - -#ifndef _thr_alarm_h -#define _thr_alarm_h -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef USE_ALARM_THREAD -#define USE_ONE_SIGNAL_HAND /* One must call process_alarm */ -#endif -#ifdef HAVE_rts_threads -#undef USE_ONE_SIGNAL_HAND -#define USE_ALARM_THREAD -#define THR_SERVER_ALARM SIGUSR1 -#else -#define THR_SERVER_ALARM SIGALRM -#endif - -typedef struct st_alarm_info -{ - ulong next_alarm_time; - uint active_alarms; - uint max_used_alarms; -} ALARM_INFO; - -void thr_alarm_info(ALARM_INFO *info); - -#if defined(DONT_USE_THR_ALARM) - -#define USE_ALARM_THREAD -#undef USE_ONE_SIGNAL_HAND - -typedef my_bool thr_alarm_t; -typedef my_bool ALARM; - -#define thr_alarm_init(A) (*(A))=0 -#define thr_alarm_in_use(A) (*(A) != 0) -#define thr_end_alarm(A) -#define thr_alarm(A,B,C) ((*(A)=1)-1) -/* The following should maybe be (*(A)) */ -#define thr_got_alarm(A) 0 -#define init_thr_alarm(A) -#define thr_alarm_kill(A) -#define resize_thr_alarm(N) -#define end_thr_alarm(A) - -#else -#if defined(__WIN__) -typedef struct st_thr_alarm_entry -{ - UINT_PTR crono; -} thr_alarm_entry; - -#else /* System with posix threads */ - -typedef int thr_alarm_entry; - -#define thr_got_alarm(thr_alarm) (**(thr_alarm)) - -#endif /* __WIN__ */ - -typedef thr_alarm_entry* thr_alarm_t; - -typedef struct st_alarm { - ulong expire_time; - thr_alarm_entry alarmed; /* set when alarm is due */ - pthread_t thread; - my_thread_id thread_id; - my_bool malloced; -} ALARM; - -extern uint thr_client_alarm; -extern pthread_t alarm_thread; - -#define thr_alarm_init(A) (*(A))=0 -#define thr_alarm_in_use(A) (*(A)!= 0) -void init_thr_alarm(uint max_alarm); -void resize_thr_alarm(uint max_alarms); -my_bool thr_alarm(thr_alarm_t *alarmed, uint sec, ALARM *buff); -void thr_alarm_kill(my_thread_id thread_id); -void thr_end_alarm(thr_alarm_t *alarmed); -void end_thr_alarm(my_bool free_structures); -sig_handler process_alarm(int); -#ifndef thr_got_alarm -my_bool thr_got_alarm(thr_alarm_t *alrm); -#endif - - -#endif /* DONT_USE_THR_ALARM */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* _thr_alarm_h */ diff --git a/deps/mysqllite/include/internal/thr_lock.h b/deps/mysqllite/include/internal/thr_lock.h deleted file mode 100644 index 91473737be37dd..00000000000000 --- a/deps/mysqllite/include/internal/thr_lock.h +++ /dev/null @@ -1,163 +0,0 @@ -/* Copyright 2000-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* For use with thr_lock:s */ - -#ifndef _thr_lock_h -#define _thr_lock_h -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -struct st_thr_lock; -extern ulong locks_immediate,locks_waited ; - -/* - Important: if a new lock type is added, a matching lock description - must be added to sql_test.cc's lock_descriptions array. -*/ -enum thr_lock_type { TL_IGNORE=-1, - TL_UNLOCK, /* UNLOCK ANY LOCK */ - /* - Parser only! At open_tables() becomes TL_READ or - TL_READ_NO_INSERT depending on the binary log format - (SBR/RBR) and on the table category (log table). - Used for tables that are read by statements which - modify tables. - */ - TL_READ_DEFAULT, - TL_READ, /* Read lock */ - TL_READ_WITH_SHARED_LOCKS, - /* High prior. than TL_WRITE. Allow concurrent insert */ - TL_READ_HIGH_PRIORITY, - /* READ, Don't allow concurrent insert */ - TL_READ_NO_INSERT, - /* - Write lock, but allow other threads to read / write. - Used by BDB tables in MySQL to mark that someone is - reading/writing to the table. - */ - TL_WRITE_ALLOW_WRITE, - /* - WRITE lock used by concurrent insert. Will allow - READ, if one could use concurrent insert on table. - */ - TL_WRITE_CONCURRENT_INSERT, - /* Write used by INSERT DELAYED. Allows READ locks */ - TL_WRITE_DELAYED, - /* - parser only! Late bound low_priority flag. - At open_tables() becomes thd->update_lock_default. - */ - TL_WRITE_DEFAULT, - /* WRITE lock that has lower priority than TL_READ */ - TL_WRITE_LOW_PRIORITY, - /* Normal WRITE lock */ - TL_WRITE, - /* Abort new lock request with an error */ - TL_WRITE_ONLY}; - -enum enum_thr_lock_result { THR_LOCK_SUCCESS= 0, THR_LOCK_ABORTED= 1, - THR_LOCK_WAIT_TIMEOUT= 2, THR_LOCK_DEADLOCK= 3 }; - - -extern ulong max_write_lock_count; -extern my_bool thr_lock_inited; -extern enum thr_lock_type thr_upgraded_concurrent_insert_lock; - -/* - A description of the thread which owns the lock. The address - of an instance of this structure is used to uniquely identify the thread. -*/ - -typedef struct st_thr_lock_info -{ - pthread_t thread; - my_thread_id thread_id; -} THR_LOCK_INFO; - - -typedef struct st_thr_lock_data { - THR_LOCK_INFO *owner; - struct st_thr_lock_data *next,**prev; - struct st_thr_lock *lock; - mysql_cond_t *cond; - enum thr_lock_type type; - void *status_param; /* Param to status functions */ - void *debug_print_param; - struct PSI_table *m_psi; -} THR_LOCK_DATA; - -struct st_lock_list { - THR_LOCK_DATA *data,**last; -}; - -typedef struct st_thr_lock { - LIST list; - mysql_mutex_t mutex; - struct st_lock_list read_wait; - struct st_lock_list read; - struct st_lock_list write_wait; - struct st_lock_list write; - /* write_lock_count is incremented for write locks and reset on read locks */ - ulong write_lock_count; - uint read_no_write_count; - void (*get_status)(void*, int); /* When one gets a lock */ - void (*copy_status)(void*,void*); - void (*update_status)(void*); /* Before release of write */ - void (*restore_status)(void*); /* Before release of read */ - my_bool (*check_status)(void *); -} THR_LOCK; - - -extern LIST *thr_lock_thread_list; -extern mysql_mutex_t THR_LOCK_lock; - -my_bool init_thr_lock(void); /* Must be called once/thread */ -void thr_lock_info_init(THR_LOCK_INFO *info); -void thr_lock_init(THR_LOCK *lock); -void thr_lock_delete(THR_LOCK *lock); -void thr_lock_data_init(THR_LOCK *lock,THR_LOCK_DATA *data, - void *status_param); -enum enum_thr_lock_result thr_lock(THR_LOCK_DATA *data, - THR_LOCK_INFO *owner, - enum thr_lock_type lock_type, - ulong lock_wait_timeout); -void thr_unlock(THR_LOCK_DATA *data); -enum enum_thr_lock_result thr_multi_lock(THR_LOCK_DATA **data, - uint count, THR_LOCK_INFO *owner, - ulong lock_wait_timeout); -void thr_multi_unlock(THR_LOCK_DATA **data,uint count); -void -thr_lock_merge_status(THR_LOCK_DATA **data, uint count); -void thr_abort_locks(THR_LOCK *lock, my_bool upgrade_lock); -my_bool thr_abort_locks_for_thread(THR_LOCK *lock, my_thread_id thread); -void thr_print_locks(void); /* For debugging */ -my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data, - enum thr_lock_type new_lock_type, - ulong lock_wait_timeout); -void thr_downgrade_write_lock(THR_LOCK_DATA *data, - enum thr_lock_type new_lock_type); -my_bool thr_reschedule_write_lock(THR_LOCK_DATA *data, - ulong lock_wait_timeout); -void thr_set_lock_wait_callback(void (*before_wait)(void), - void (*after_wait)(void)); -#ifdef __cplusplus -} -#endif -#endif /* _thr_lock_h */ diff --git a/deps/mysqllite/include/internal/violite.h b/deps/mysqllite/include/internal/violite.h deleted file mode 100644 index f408321689401e..00000000000000 --- a/deps/mysqllite/include/internal/violite.h +++ /dev/null @@ -1,241 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - * Vio Lite. - * Purpose: include file for Vio that will work with C and C++ - */ - -#ifndef vio_violite_h_ -#define vio_violite_h_ - -#include "my_net.h" /* needed because of struct in_addr */ - - -/* Simple vio interface in C; The functions are implemented in violite.c */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#ifdef __cplusplus -typedef struct st_vio Vio; -#endif /* __cplusplus */ - -enum enum_vio_type -{ - VIO_CLOSED, VIO_TYPE_TCPIP, VIO_TYPE_SOCKET, VIO_TYPE_NAMEDPIPE, - VIO_TYPE_SSL, VIO_TYPE_SHARED_MEMORY -}; - - -#define VIO_LOCALHOST 1 /* a localhost connection */ -#define VIO_BUFFERED_READ 2 /* use buffered read */ -#define VIO_READ_BUFFER_SIZE 16384 /* size of read buffer */ - -Vio* vio_new(my_socket sd, enum enum_vio_type type, uint flags); -#ifdef __WIN__ -Vio* vio_new_win32pipe(HANDLE hPipe); -Vio* vio_new_win32shared_memory(HANDLE handle_file_map, - HANDLE handle_map, - HANDLE event_server_wrote, - HANDLE event_server_read, - HANDLE event_client_wrote, - HANDLE event_client_read, - HANDLE event_conn_closed); -#else -#define HANDLE void * -#endif /* __WIN__ */ - -void vio_delete(Vio* vio); -int vio_close(Vio* vio); -void vio_reset(Vio* vio, enum enum_vio_type type, - my_socket sd, HANDLE hPipe, uint flags); -size_t vio_read(Vio *vio, uchar * buf, size_t size); -size_t vio_read_buff(Vio *vio, uchar * buf, size_t size); -size_t vio_write(Vio *vio, const uchar * buf, size_t size); -int vio_blocking(Vio *vio, my_bool onoff, my_bool *old_mode); -my_bool vio_is_blocking(Vio *vio); -/* setsockopt TCP_NODELAY at IPPROTO_TCP level, when possible */ -int vio_fastsend(Vio *vio); -/* setsockopt SO_KEEPALIVE at SOL_SOCKET level, when possible */ -int vio_keepalive(Vio *vio, my_bool onoff); -/* Whenever we should retry the last read/write operation. */ -my_bool vio_should_retry(Vio *vio); -/* Check that operation was timed out */ -my_bool vio_was_interrupted(Vio *vio); -/* Short text description of the socket for those, who are curious.. */ -const char* vio_description(Vio *vio); -/* Return the type of the connection */ -enum enum_vio_type vio_type(Vio* vio); -/* Return last error number */ -int vio_errno(Vio*vio); -/* Get socket number */ -my_socket vio_fd(Vio*vio); -/* Remote peer's address and name in text form */ -my_bool vio_peer_addr(Vio *vio, char *buf, uint16 *port, size_t buflen); -my_bool vio_poll_read(Vio *vio, uint timeout); -my_bool vio_is_connected(Vio *vio); -ssize_t vio_pending(Vio *vio); - -my_bool vio_get_normalized_ip_string(const struct sockaddr *addr, int addr_length, - char *ip_string, size_t ip_string_size); - -int vio_getnameinfo(const struct sockaddr *sa, - char *hostname, size_t hostname_size, - char *port, size_t port_size, - int flags); - -#ifdef HAVE_OPENSSL -#include -#if OPENSSL_VERSION_NUMBER < 0x0090700f -#define DES_cblock des_cblock -#define DES_key_schedule des_key_schedule -#define DES_set_key_unchecked(k,ks) des_set_key_unchecked((k),*(ks)) -#define DES_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e) des_ede3_cbc_encrypt((i),(o),(l),*(k1),*(k2),*(k3),(iv),(e)) -#endif - -#define HEADER_DES_LOCL_H dummy_something -#define YASSL_MYSQL_COMPATIBLE -#ifndef YASSL_PREFIX -#define YASSL_PREFIX -#endif -/* Set yaSSL to use same type as MySQL do for socket handles */ -typedef my_socket YASSL_SOCKET_T; -#define YASSL_SOCKET_T_DEFINED -#include -#include - -#ifndef EMBEDDED_LIBRARY -enum enum_ssl_init_error -{ - SSL_INITERR_NOERROR= 0, SSL_INITERR_CERT, SSL_INITERR_KEY, - SSL_INITERR_NOMATCH, SSL_INITERR_BAD_PATHS, SSL_INITERR_CIPHERS, - SSL_INITERR_MEMFAIL, SSL_INITERR_LASTERR -}; -const char* sslGetErrString(enum enum_ssl_init_error err); - -struct st_VioSSLFd -{ - SSL_CTX *ssl_context; -}; - -int sslaccept(struct st_VioSSLFd*, Vio *, long timeout); -int sslconnect(struct st_VioSSLFd*, Vio *, long timeout); - -struct st_VioSSLFd -*new_VioSSLConnectorFd(const char *key_file, const char *cert_file, - const char *ca_file, const char *ca_path, - const char *cipher); -struct st_VioSSLFd -*new_VioSSLAcceptorFd(const char *key_file, const char *cert_file, - const char *ca_file,const char *ca_path, - const char *cipher, enum enum_ssl_init_error* error); -void free_vio_ssl_acceptor_fd(struct st_VioSSLFd *fd); -#endif /* ! EMBEDDED_LIBRARY */ -#endif /* HAVE_OPENSSL */ - -void vio_end(void); - -#ifdef __cplusplus -} -#endif - -#if !defined(DONT_MAP_VIO) -#define vio_delete(vio) (vio)->viodelete(vio) -#define vio_errno(vio) (vio)->vioerrno(vio) -#define vio_read(vio, buf, size) ((vio)->read)(vio,buf,size) -#define vio_write(vio, buf, size) ((vio)->write)(vio, buf, size) -#define vio_blocking(vio, set_blocking_mode, old_mode)\ - (vio)->vioblocking(vio, set_blocking_mode, old_mode) -#define vio_is_blocking(vio) (vio)->is_blocking(vio) -#define vio_fastsend(vio) (vio)->fastsend(vio) -#define vio_keepalive(vio, set_keep_alive) (vio)->viokeepalive(vio, set_keep_alive) -#define vio_should_retry(vio) (vio)->should_retry(vio) -#define vio_was_interrupted(vio) (vio)->was_interrupted(vio) -#define vio_close(vio) ((vio)->vioclose)(vio) -#define vio_peer_addr(vio, buf, prt, buflen) (vio)->peer_addr(vio, buf, prt, buflen) -#define vio_timeout(vio, which, seconds) (vio)->timeout(vio, which, seconds) -#define vio_poll_read(vio, timeout) (vio)->poll_read(vio, timeout) -#define vio_is_connected(vio) (vio)->is_connected(vio) -#endif /* !defined(DONT_MAP_VIO) */ - -/* This enumerator is used in parser - should be always visible */ -enum SSL_type -{ - SSL_TYPE_NOT_SPECIFIED= -1, - SSL_TYPE_NONE, - SSL_TYPE_ANY, - SSL_TYPE_X509, - SSL_TYPE_SPECIFIED -}; - - -/* HFTODO - hide this if we don't want client in embedded server */ -/* This structure is for every connection on both sides */ -struct st_vio -{ - my_socket sd; /* my_socket - real or imaginary */ - HANDLE hPipe; - my_bool localhost; /* Are we from localhost? */ - int fcntl_mode; /* Buffered fcntl(sd,F_GETFL) */ - struct sockaddr_storage local; /* Local internet address */ - struct sockaddr_storage remote; /* Remote internet address */ - int addrLen; /* Length of remote address */ - enum enum_vio_type type; /* Type of connection */ - char desc[30]; /* String description */ - char *read_buffer; /* buffer for vio_read_buff */ - char *read_pos; /* start of unfetched data in the - read buffer */ - char *read_end; /* end of unfetched data */ - /* function pointers. They are similar for socket/SSL/whatever */ - void (*viodelete)(Vio*); - int (*vioerrno)(Vio*); - size_t (*read)(Vio*, uchar *, size_t); - size_t (*write)(Vio*, const uchar *, size_t); - int (*vioblocking)(Vio*, my_bool, my_bool *); - my_bool (*is_blocking)(Vio*); - int (*viokeepalive)(Vio*, my_bool); - int (*fastsend)(Vio*); - my_bool (*peer_addr)(Vio*, char *, uint16*, size_t); - void (*in_addr)(Vio*, struct sockaddr_storage*); - my_bool (*should_retry)(Vio*); - my_bool (*was_interrupted)(Vio*); - int (*vioclose)(Vio*); - void (*timeout)(Vio*, unsigned int which, unsigned int timeout); - my_bool (*poll_read)(Vio *vio, uint timeout); - my_bool (*is_connected)(Vio*); - my_bool (*has_data) (Vio*); -#ifdef HAVE_OPENSSL - void *ssl_arg; -#endif -#ifdef HAVE_SMEM - HANDLE handle_file_map; - char *handle_map; - HANDLE event_server_wrote; - HANDLE event_server_read; - HANDLE event_client_wrote; - HANDLE event_client_read; - HANDLE event_conn_closed; - size_t shared_memory_remain; - char *shared_memory_pos; -#endif /* HAVE_SMEM */ -#ifdef _WIN32 - OVERLAPPED pipe_overlapped; - DWORD read_timeout_ms; - DWORD write_timeout_ms; -#endif -}; -#endif /* vio_violite_h_ */ diff --git a/deps/mysqllite/include/keycache.h b/deps/mysqllite/include/keycache.h deleted file mode 100644 index fefa31afd87a9d..00000000000000 --- a/deps/mysqllite/include/keycache.h +++ /dev/null @@ -1,146 +0,0 @@ -/* Copyright (C) 2003 MySQL AB, 2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Key cache variable structures */ - -#ifndef _keycache_h -#define _keycache_h - -#include "my_sys.h" /* flush_type */ - -C_MODE_START - -/* declare structures that is used by st_key_cache */ - -struct st_block_link; -typedef struct st_block_link BLOCK_LINK; -struct st_keycache_page; -typedef struct st_keycache_page KEYCACHE_PAGE; -struct st_hash_link; -typedef struct st_hash_link HASH_LINK; - -/* info about requests in a waiting queue */ -typedef struct st_keycache_wqueue -{ - struct st_my_thread_var *last_thread; /* circular list of waiting threads */ -} KEYCACHE_WQUEUE; - -#define CHANGED_BLOCKS_HASH 128 /* must be power of 2 */ - -/* - The key cache structure - It also contains read-only statistics parameters. -*/ - -typedef struct st_key_cache -{ - my_bool key_cache_inited; - my_bool in_resize; /* true during resize operation */ - my_bool resize_in_flush; /* true during flush of resize operation */ - my_bool can_be_used; /* usage of cache for read/write is allowed */ - size_t key_cache_mem_size; /* specified size of the cache memory */ - uint key_cache_block_size; /* size of the page buffer of a cache block */ - ulong min_warm_blocks; /* min number of warm blocks; */ - ulong age_threshold; /* age threshold for hot blocks */ - ulonglong keycache_time; /* total number of block link operations */ - uint hash_entries; /* max number of entries in the hash table */ - int hash_links; /* max number of hash links */ - int hash_links_used; /* number of hash links currently used */ - int disk_blocks; /* max number of blocks in the cache */ - ulong blocks_used; /* maximum number of concurrently used blocks */ - ulong blocks_unused; /* number of currently unused blocks */ - ulong blocks_changed; /* number of currently dirty blocks */ - ulong warm_blocks; /* number of blocks in warm sub-chain */ - ulong cnt_for_resize_op; /* counter to block resize operation */ - long blocks_available; /* number of blocks available in the LRU chain */ - HASH_LINK **hash_root; /* arr. of entries into hash table buckets */ - HASH_LINK *hash_link_root; /* memory for hash table links */ - HASH_LINK *free_hash_list; /* list of free hash links */ - BLOCK_LINK *free_block_list; /* list of free blocks */ - BLOCK_LINK *block_root; /* memory for block links */ - uchar *block_mem; /* memory for block buffers */ - BLOCK_LINK *used_last; /* ptr to the last block of the LRU chain */ - BLOCK_LINK *used_ins; /* ptr to the insertion block in LRU chain */ - mysql_mutex_t cache_lock; /* to lock access to the cache structure */ - KEYCACHE_WQUEUE resize_queue; /* threads waiting during resize operation */ - /* - Waiting for a zero resize count. Using a queue for symmetry though - only one thread can wait here. - */ - KEYCACHE_WQUEUE waiting_for_resize_cnt; - KEYCACHE_WQUEUE waiting_for_hash_link; /* waiting for a free hash link */ - KEYCACHE_WQUEUE waiting_for_block; /* requests waiting for a free block */ - BLOCK_LINK *changed_blocks[CHANGED_BLOCKS_HASH]; /* hash for dirty file bl.*/ - BLOCK_LINK *file_blocks[CHANGED_BLOCKS_HASH]; /* hash for other file bl.*/ - - /* - The following variables are and variables used to hold parameters for - initializing the key cache. - */ - - ulonglong param_buff_size; /* size the memory allocated for the cache */ - ulonglong param_block_size; /* size of the blocks in the key cache */ - ulonglong param_division_limit; /* min. percentage of warm blocks */ - ulonglong param_age_threshold; /* determines when hot block is downgraded */ - - /* Statistics variables. These are reset in reset_key_cache_counters(). */ - ulong global_blocks_changed; /* number of currently dirty blocks */ - ulonglong global_cache_w_requests;/* number of write requests (write hits) */ - ulonglong global_cache_write; /* number of writes from cache to files */ - ulonglong global_cache_r_requests;/* number of read requests (read hits) */ - ulonglong global_cache_read; /* number of reads from files to cache */ - - int blocks; /* max number of blocks in the cache */ - my_bool in_init; /* Set to 1 in MySQL during init/resize */ -} KEY_CACHE; - -/* The default key cache */ -extern KEY_CACHE dflt_key_cache_var, *dflt_key_cache; - -extern int init_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, - size_t use_mem, uint division_limit, - uint age_threshold); -extern int resize_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, - size_t use_mem, uint division_limit, - uint age_threshold); -extern void change_key_cache_param(KEY_CACHE *keycache, uint division_limit, - uint age_threshold); -extern uchar *key_cache_read(KEY_CACHE *keycache, - File file, my_off_t filepos, int level, - uchar *buff, uint length, - uint block_length,int return_buffer); -extern int key_cache_insert(KEY_CACHE *keycache, - File file, my_off_t filepos, int level, - uchar *buff, uint length); -extern int key_cache_write(KEY_CACHE *keycache, - File file, my_off_t filepos, int level, - uchar *buff, uint length, - uint block_length,int force_write); -extern int flush_key_blocks(KEY_CACHE *keycache, - int file, enum flush_type type); -extern void end_key_cache(KEY_CACHE *keycache, my_bool cleanup); - -/* Functions to handle multiple key caches */ -extern my_bool multi_keycache_init(void); -extern void multi_keycache_free(void); -extern KEY_CACHE *multi_key_cache_search(uchar *key, uint length); -extern my_bool multi_key_cache_set(const uchar *key, uint length, - KEY_CACHE *key_cache); -extern void multi_key_cache_change(KEY_CACHE *old_data, - KEY_CACHE *new_data); -extern int reset_key_cache_counters(const char *name, - KEY_CACHE *key_cache); -C_MODE_END -#endif /* _keycache_h */ diff --git a/deps/mysqllite/include/m_ctype.h b/deps/mysqllite/include/m_ctype.h deleted file mode 100644 index bb7f5ddfb3d60e..00000000000000 --- a/deps/mysqllite/include/m_ctype.h +++ /dev/null @@ -1,660 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - A better inplementation of the UNIX ctype(3) library. -*/ - -#ifndef _m_ctype_h -#define _m_ctype_h - -#include -#include "my_global.h" /* uint16, uchar */ - -#ifdef __cplusplus -extern "C" { -#endif - -#define MY_CS_NAME_SIZE 32 -#define MY_CS_CTYPE_TABLE_SIZE 257 -#define MY_CS_TO_LOWER_TABLE_SIZE 256 -#define MY_CS_TO_UPPER_TABLE_SIZE 256 -#define MY_CS_SORT_ORDER_TABLE_SIZE 256 -#define MY_CS_TO_UNI_TABLE_SIZE 256 - -#define CHARSET_DIR "charsets/" - -#define my_wc_t ulong - -#define MY_CS_REPLACEMENT_CHARACTER 0xFFFD - -/* - On i386 we store Unicode->CS conversion tables for - some character sets using Big-endian order, - to copy two bytes at onces. - This gives some performance improvement. -*/ -#ifdef __i386__ -#define MB2(x) (((x) >> 8) + (((x) & 0xFF) << 8)) -#define MY_PUT_MB2(s, code) { *((uint16*)(s))= (code); } -#else -#define MB2(x) (x) -#define MY_PUT_MB2(s, code) { (s)[0]= code >> 8; (s)[1]= code & 0xFF; } -#endif - - - -typedef struct unicase_info_st -{ - uint32 toupper; - uint32 tolower; - uint32 sort; -} MY_UNICASE_INFO; - - -extern MY_UNICASE_INFO *my_unicase_default[256]; -extern MY_UNICASE_INFO *my_unicase_turkish[256]; - -typedef struct uni_ctype_st -{ - uchar pctype; - uchar *ctype; -} MY_UNI_CTYPE; - -extern MY_UNI_CTYPE my_uni_ctype[256]; - -/* wm_wc and wc_mb return codes */ -#define MY_CS_ILSEQ 0 /* Wrong by sequence: wb_wc */ -#define MY_CS_ILUNI 0 /* Cannot encode Unicode to charset: wc_mb */ -#define MY_CS_TOOSMALL -101 /* Need at least one byte: wc_mb and mb_wc */ -#define MY_CS_TOOSMALL2 -102 /* Need at least two bytes: wc_mb and mb_wc */ -#define MY_CS_TOOSMALL3 -103 /* Need at least three bytes: wc_mb and mb_wc */ -/* These following three are currently not really used */ -#define MY_CS_TOOSMALL4 -104 /* Need at least 4 bytes: wc_mb and mb_wc */ -#define MY_CS_TOOSMALL5 -105 /* Need at least 5 bytes: wc_mb and mb_wc */ -#define MY_CS_TOOSMALL6 -106 /* Need at least 6 bytes: wc_mb and mb_wc */ -/* A helper macros for "need at least n bytes" */ -#define MY_CS_TOOSMALLN(n) (-100-(n)) - -#define MY_SEQ_INTTAIL 1 -#define MY_SEQ_SPACES 2 - - /* My charsets_list flags */ -#define MY_CS_COMPILED 1 /* compiled-in sets */ -#define MY_CS_CONFIG 2 /* sets that have a *.conf file */ -#define MY_CS_INDEX 4 /* sets listed in the Index file */ -#define MY_CS_LOADED 8 /* sets that are currently loaded */ -#define MY_CS_BINSORT 16 /* if binary sort order */ -#define MY_CS_PRIMARY 32 /* if primary collation */ -#define MY_CS_STRNXFRM 64 /* if strnxfrm is used for sort */ -#define MY_CS_UNICODE 128 /* is a charset is BMP Unicode */ -#define MY_CS_READY 256 /* if a charset is initialized */ -#define MY_CS_AVAILABLE 512 /* If either compiled-in or loaded*/ -#define MY_CS_CSSORT 1024 /* if case sensitive sort order */ -#define MY_CS_HIDDEN 2048 /* don't display in SHOW */ -#define MY_CS_PUREASCII 4096 /* if a charset is pure ascii */ -#define MY_CS_NONASCII 8192 /* if not ASCII-compatible */ -#define MY_CS_UNICODE_SUPPLEMENT 16384 /* Non-BMP Unicode characters */ -#define MY_CHARSET_UNDEFINED 0 - -/* Character repertoire flags */ -#define MY_REPERTOIRE_ASCII 1 /* Pure ASCII U+0000..U+007F */ -#define MY_REPERTOIRE_EXTENDED 2 /* Extended characters: U+0080..U+FFFF */ -#define MY_REPERTOIRE_UNICODE30 3 /* ASCII | EXTENDED: U+0000..U+FFFF */ - -typedef struct my_uni_idx_st -{ - uint16 from; - uint16 to; - uchar *tab; -} MY_UNI_IDX; - -typedef struct -{ - uint beg; - uint end; - uint mb_len; -} my_match_t; - -enum my_lex_states -{ - MY_LEX_START, MY_LEX_CHAR, MY_LEX_IDENT, - MY_LEX_IDENT_SEP, MY_LEX_IDENT_START, - MY_LEX_REAL, MY_LEX_HEX_NUMBER, MY_LEX_BIN_NUMBER, - MY_LEX_CMP_OP, MY_LEX_LONG_CMP_OP, MY_LEX_STRING, MY_LEX_COMMENT, MY_LEX_END, - MY_LEX_OPERATOR_OR_IDENT, MY_LEX_NUMBER_IDENT, MY_LEX_INT_OR_REAL, - MY_LEX_REAL_OR_POINT, MY_LEX_BOOL, MY_LEX_EOL, MY_LEX_ESCAPE, - MY_LEX_LONG_COMMENT, MY_LEX_END_LONG_COMMENT, MY_LEX_SEMICOLON, - MY_LEX_SET_VAR, MY_LEX_USER_END, MY_LEX_HOSTNAME, MY_LEX_SKIP, - MY_LEX_USER_VARIABLE_DELIMITER, MY_LEX_SYSTEM_VAR, - MY_LEX_IDENT_OR_KEYWORD, - MY_LEX_IDENT_OR_HEX, MY_LEX_IDENT_OR_BIN, MY_LEX_IDENT_OR_NCHAR, - MY_LEX_STRING_OR_DELIMITER -}; - -struct charset_info_st; - - -/* See strings/CHARSET_INFO.txt for information about this structure */ -typedef struct my_collation_handler_st -{ - my_bool (*init)(struct charset_info_st *, void *(*alloc)(size_t)); - /* Collation routines */ - int (*strnncoll)(struct charset_info_st *, - const uchar *, size_t, const uchar *, size_t, my_bool); - int (*strnncollsp)(struct charset_info_st *, - const uchar *, size_t, const uchar *, size_t, - my_bool diff_if_only_endspace_difference); - size_t (*strnxfrm)(struct charset_info_st *, - uchar *, size_t, const uchar *, size_t); - size_t (*strnxfrmlen)(struct charset_info_st *, size_t); - my_bool (*like_range)(struct charset_info_st *, - const char *s, size_t s_length, - pchar w_prefix, pchar w_one, pchar w_many, - size_t res_length, - char *min_str, char *max_str, - size_t *min_len, size_t *max_len); - int (*wildcmp)(struct charset_info_st *, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape,int w_one, int w_many); - - int (*strcasecmp)(struct charset_info_st *, const char *, const char *); - - uint (*instr)(struct charset_info_st *, - const char *b, size_t b_length, - const char *s, size_t s_length, - my_match_t *match, uint nmatch); - - /* Hash calculation */ - void (*hash_sort)(struct charset_info_st *cs, const uchar *key, size_t len, - ulong *nr1, ulong *nr2); - my_bool (*propagate)(struct charset_info_st *cs, const uchar *str, size_t len); -} MY_COLLATION_HANDLER; - -extern MY_COLLATION_HANDLER my_collation_mb_bin_handler; -extern MY_COLLATION_HANDLER my_collation_8bit_bin_handler; -extern MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler; -extern MY_COLLATION_HANDLER my_collation_ucs2_uca_handler; - -/* Some typedef to make it easy for C++ to make function pointers */ -typedef int (*my_charset_conv_mb_wc)(struct charset_info_st *, my_wc_t *, - const uchar *, const uchar *); -typedef int (*my_charset_conv_wc_mb)(struct charset_info_st *, my_wc_t, - uchar *, uchar *); -typedef size_t (*my_charset_conv_case)(struct charset_info_st *, - char *, size_t, char *, size_t); - - -/* See strings/CHARSET_INFO.txt about information on this structure */ -typedef struct my_charset_handler_st -{ - my_bool (*init)(struct charset_info_st *, void *(*alloc)(size_t)); - /* Multibyte routines */ - uint (*ismbchar)(struct charset_info_st *, const char *, const char *); - uint (*mbcharlen)(struct charset_info_st *, uint c); - size_t (*numchars)(struct charset_info_st *, const char *b, const char *e); - size_t (*charpos)(struct charset_info_st *, const char *b, const char *e, - size_t pos); - size_t (*well_formed_len)(struct charset_info_st *, - const char *b,const char *e, - size_t nchars, int *error); - size_t (*lengthsp)(struct charset_info_st *, const char *ptr, size_t length); - size_t (*numcells)(struct charset_info_st *, const char *b, const char *e); - - /* Unicode conversion */ - my_charset_conv_mb_wc mb_wc; - my_charset_conv_wc_mb wc_mb; - - /* CTYPE scanner */ - int (*ctype)(struct charset_info_st *cs, int *ctype, - const uchar *s, const uchar *e); - - /* Functions for case and sort conversion */ - size_t (*caseup_str)(struct charset_info_st *, char *); - size_t (*casedn_str)(struct charset_info_st *, char *); - - my_charset_conv_case caseup; - my_charset_conv_case casedn; - - /* Charset dependant snprintf() */ - size_t (*snprintf)(struct charset_info_st *, char *to, size_t n, - const char *fmt, - ...) ATTRIBUTE_FORMAT_FPTR(printf, 4, 5); - size_t (*long10_to_str)(struct charset_info_st *, char *to, size_t n, - int radix, long int val); - size_t (*longlong10_to_str)(struct charset_info_st *, char *to, size_t n, - int radix, longlong val); - - void (*fill)(struct charset_info_st *, char *to, size_t len, int fill); - - /* String-to-number conversion routines */ - long (*strntol)(struct charset_info_st *, const char *s, size_t l, - int base, char **e, int *err); - ulong (*strntoul)(struct charset_info_st *, const char *s, size_t l, - int base, char **e, int *err); - longlong (*strntoll)(struct charset_info_st *, const char *s, size_t l, - int base, char **e, int *err); - ulonglong (*strntoull)(struct charset_info_st *, const char *s, size_t l, - int base, char **e, int *err); - double (*strntod)(struct charset_info_st *, char *s, size_t l, char **e, - int *err); - longlong (*strtoll10)(struct charset_info_st *cs, - const char *nptr, char **endptr, int *error); - ulonglong (*strntoull10rnd)(struct charset_info_st *cs, - const char *str, size_t length, - int unsigned_fl, - char **endptr, int *error); - size_t (*scan)(struct charset_info_st *, const char *b, const char *e, - int sq); -} MY_CHARSET_HANDLER; - -extern MY_CHARSET_HANDLER my_charset_8bit_handler; -extern MY_CHARSET_HANDLER my_charset_ucs2_handler; - - -/* - We define this CHARSET_INFO_DEFINED here to prevent a repeat of the - typedef in hash.c, which will cause a compiler error. -*/ -#define CHARSET_INFO_DEFINED - -/* See strings/CHARSET_INFO.txt about information on this structure */ -typedef struct charset_info_st -{ - uint number; - uint primary_number; - uint binary_number; - uint state; - const char *csname; - const char *name; - const char *comment; - const char *tailoring; - uchar *ctype; - uchar *to_lower; - uchar *to_upper; - uchar *sort_order; - uint16 *contractions; - uint16 **sort_order_big; - uint16 *tab_to_uni; - MY_UNI_IDX *tab_from_uni; - MY_UNICASE_INFO **caseinfo; - uchar *state_map; - uchar *ident_map; - uint strxfrm_multiply; - uchar caseup_multiply; - uchar casedn_multiply; - uint mbminlen; - uint mbmaxlen; - uint16 min_sort_char; - uint16 max_sort_char; /* For LIKE optimization */ - uchar pad_char; - my_bool escape_with_backslash_is_dangerous; - - MY_CHARSET_HANDLER *cset; - MY_COLLATION_HANDLER *coll; - -} CHARSET_INFO; -#define ILLEGAL_CHARSET_INFO_NUMBER (~0U) - - -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_bin; -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_latin1; -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_filename; - -extern CHARSET_INFO my_charset_big5_chinese_ci; -extern CHARSET_INFO my_charset_big5_bin; -extern CHARSET_INFO my_charset_cp932_japanese_ci; -extern CHARSET_INFO my_charset_cp932_bin; -extern CHARSET_INFO my_charset_cp1250_czech_ci; -extern CHARSET_INFO my_charset_eucjpms_japanese_ci; -extern CHARSET_INFO my_charset_eucjpms_bin; -extern CHARSET_INFO my_charset_euckr_korean_ci; -extern CHARSET_INFO my_charset_euckr_bin; -extern CHARSET_INFO my_charset_gb2312_chinese_ci; -extern CHARSET_INFO my_charset_gb2312_bin; -extern CHARSET_INFO my_charset_gbk_chinese_ci; -extern CHARSET_INFO my_charset_gbk_bin; -extern CHARSET_INFO my_charset_latin1_german2_ci; -extern CHARSET_INFO my_charset_latin1_bin; -extern CHARSET_INFO my_charset_latin2_czech_ci; -extern CHARSET_INFO my_charset_sjis_japanese_ci; -extern CHARSET_INFO my_charset_sjis_bin; -extern CHARSET_INFO my_charset_tis620_thai_ci; -extern CHARSET_INFO my_charset_tis620_bin; -extern CHARSET_INFO my_charset_ucs2_general_ci; -extern CHARSET_INFO my_charset_ucs2_bin; -extern CHARSET_INFO my_charset_ucs2_unicode_ci; -extern CHARSET_INFO my_charset_ujis_japanese_ci; -extern CHARSET_INFO my_charset_ujis_bin; -extern CHARSET_INFO my_charset_utf16_bin; -extern CHARSET_INFO my_charset_utf16_general_ci; -extern CHARSET_INFO my_charset_utf16_unicode_ci; -extern CHARSET_INFO my_charset_utf32_bin; -extern CHARSET_INFO my_charset_utf32_general_ci; -extern CHARSET_INFO my_charset_utf32_unicode_ci; - -extern CHARSET_INFO my_charset_utf8_general_ci; -extern CHARSET_INFO my_charset_utf8_unicode_ci; -extern CHARSET_INFO my_charset_utf8_bin; -extern CHARSET_INFO my_charset_utf8mb4_bin; -extern CHARSET_INFO my_charset_utf8mb4_general_ci; -extern CHARSET_INFO my_charset_utf8mb4_unicode_ci; -#define MY_UTF8MB3 "utf8" -#define MY_UTF8MB4 "utf8mb4" - - -/* Helper functions to handle contraction */ -static inline my_bool -my_cs_have_contractions(CHARSET_INFO *cs) -{ - return cs->contractions != NULL; -} - -static inline my_bool -my_cs_can_be_contraction_head(CHARSET_INFO *cs, my_wc_t wc) -{ - return ((const char *)cs->contractions)[0x40*0x40 + (wc & 0xFF)]; -} - -static inline my_bool -my_cs_can_be_contraction_tail(CHARSET_INFO *cs, my_wc_t wc) -{ - return ((const char *)cs->contractions)[0x40*0x40 + (wc & 0xFF)]; -} - -static inline uint16* -my_cs_contraction2_weight(CHARSET_INFO *cs, my_wc_t wc1, my_wc_t wc2) -{ - return &cs->contractions[(wc1 - 0x40) * 0x40 + wc2 - 0x40]; -} - - -/* declarations for simple charsets */ -extern size_t my_strnxfrm_simple(CHARSET_INFO *, uchar *, size_t, - const uchar *, size_t); -size_t my_strnxfrmlen_simple(CHARSET_INFO *, size_t); -extern int my_strnncoll_simple(CHARSET_INFO *, const uchar *, size_t, - const uchar *, size_t, my_bool); - -extern int my_strnncollsp_simple(CHARSET_INFO *, const uchar *, size_t, - const uchar *, size_t, - my_bool diff_if_only_endspace_difference); - -extern void my_hash_sort_simple(CHARSET_INFO *cs, - const uchar *key, size_t len, - ulong *nr1, ulong *nr2); - -extern size_t my_lengthsp_8bit(CHARSET_INFO *cs, const char *ptr, size_t length); - -extern uint my_instr_simple(struct charset_info_st *, - const char *b, size_t b_length, - const char *s, size_t s_length, - my_match_t *match, uint nmatch); - - -/* Functions for 8bit */ -extern size_t my_caseup_str_8bit(CHARSET_INFO *, char *); -extern size_t my_casedn_str_8bit(CHARSET_INFO *, char *); -extern size_t my_caseup_8bit(CHARSET_INFO *, char *src, size_t srclen, - char *dst, size_t dstlen); -extern size_t my_casedn_8bit(CHARSET_INFO *, char *src, size_t srclen, - char *dst, size_t dstlen); - -extern int my_strcasecmp_8bit(CHARSET_INFO * cs, const char *, const char *); - -int my_mb_wc_8bit(CHARSET_INFO *cs,my_wc_t *wc, const uchar *s,const uchar *e); -int my_wc_mb_8bit(CHARSET_INFO *cs,my_wc_t wc, uchar *s, uchar *e); - -int my_mb_ctype_8bit(CHARSET_INFO *,int *, const uchar *,const uchar *); -int my_mb_ctype_mb(CHARSET_INFO *,int *, const uchar *,const uchar *); - -size_t my_scan_8bit(CHARSET_INFO *cs, const char *b, const char *e, int sq); - -size_t my_snprintf_8bit(struct charset_info_st *, char *to, size_t n, - const char *fmt, ...) - ATTRIBUTE_FORMAT(printf, 4, 5); - -long my_strntol_8bit(CHARSET_INFO *, const char *s, size_t l, int base, - char **e, int *err); -ulong my_strntoul_8bit(CHARSET_INFO *, const char *s, size_t l, int base, - char **e, int *err); -longlong my_strntoll_8bit(CHARSET_INFO *, const char *s, size_t l, int base, - char **e, int *err); -ulonglong my_strntoull_8bit(CHARSET_INFO *, const char *s, size_t l, int base, - char **e, int *err); -double my_strntod_8bit(CHARSET_INFO *, char *s, size_t l,char **e, - int *err); -size_t my_long10_to_str_8bit(CHARSET_INFO *, char *to, size_t l, int radix, - long int val); -size_t my_longlong10_to_str_8bit(CHARSET_INFO *, char *to, size_t l, int radix, - longlong val); - -longlong my_strtoll10_8bit(CHARSET_INFO *cs, - const char *nptr, char **endptr, int *error); -longlong my_strtoll10_ucs2(CHARSET_INFO *cs, - const char *nptr, char **endptr, int *error); - -ulonglong my_strntoull10rnd_8bit(CHARSET_INFO *cs, - const char *str, size_t length, int - unsigned_fl, char **endptr, int *error); -ulonglong my_strntoull10rnd_ucs2(CHARSET_INFO *cs, - const char *str, size_t length, - int unsigned_fl, char **endptr, int *error); - -void my_fill_8bit(CHARSET_INFO *cs, char* to, size_t l, int fill); - -/* For 8-bit character set */ -my_bool my_like_range_simple(CHARSET_INFO *cs, - const char *ptr, size_t ptr_length, - pbool escape, pbool w_one, pbool w_many, - size_t res_length, - char *min_str, char *max_str, - size_t *min_length, size_t *max_length); - -/* For ASCII-based multi-byte character sets with mbminlen=1 */ -my_bool my_like_range_mb(CHARSET_INFO *cs, - const char *ptr, size_t ptr_length, - pbool escape, pbool w_one, pbool w_many, - size_t res_length, - char *min_str, char *max_str, - size_t *min_length, size_t *max_length); - -/* For other character sets, with arbitrary mbminlen and mbmaxlen numbers */ -my_bool my_like_range_generic(CHARSET_INFO *cs, - const char *ptr, size_t ptr_length, - pbool escape, pbool w_one, pbool w_many, - size_t res_length, - char *min_str, char *max_str, - size_t *min_length, size_t *max_length); - -int my_wildcmp_8bit(CHARSET_INFO *, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many); - -int my_wildcmp_bin(CHARSET_INFO *, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many); - -size_t my_numchars_8bit(CHARSET_INFO *, const char *b, const char *e); -size_t my_numcells_8bit(CHARSET_INFO *, const char *b, const char *e); -size_t my_charpos_8bit(CHARSET_INFO *, const char *b, const char *e, size_t pos); -size_t my_well_formed_len_8bit(CHARSET_INFO *, const char *b, const char *e, - size_t pos, int *error); -uint my_mbcharlen_8bit(CHARSET_INFO *, uint c); - - -/* Functions for multibyte charsets */ -extern size_t my_caseup_str_mb(CHARSET_INFO *, char *); -extern size_t my_casedn_str_mb(CHARSET_INFO *, char *); -extern size_t my_caseup_mb(CHARSET_INFO *, char *src, size_t srclen, - char *dst, size_t dstlen); -extern size_t my_casedn_mb(CHARSET_INFO *, char *src, size_t srclen, - char *dst, size_t dstlen); -extern size_t my_caseup_mb_varlen(CHARSET_INFO *, char *src, size_t srclen, - char *dst, size_t dstlen); -extern size_t my_casedn_mb_varlen(CHARSET_INFO *, char *src, size_t srclen, - char *dst, size_t dstlen); -extern size_t my_caseup_ujis(CHARSET_INFO *, char *src, size_t srclen, - char *dst, size_t dstlen); -extern size_t my_casedn_ujis(CHARSET_INFO *, char *src, size_t srclen, - char *dst, size_t dstlen); -extern int my_strcasecmp_mb(CHARSET_INFO * cs,const char *, const char *); - -int my_wildcmp_mb(CHARSET_INFO *, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many); -size_t my_numchars_mb(CHARSET_INFO *, const char *b, const char *e); -size_t my_numcells_mb(CHARSET_INFO *, const char *b, const char *e); -size_t my_charpos_mb(CHARSET_INFO *, const char *b, const char *e, size_t pos); -size_t my_well_formed_len_mb(CHARSET_INFO *, const char *b, const char *e, - size_t pos, int *error); -uint my_instr_mb(struct charset_info_st *, - const char *b, size_t b_length, - const char *s, size_t s_length, - my_match_t *match, uint nmatch); - -int my_strnncoll_mb_bin(CHARSET_INFO * cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix); - -int my_strnncollsp_mb_bin(CHARSET_INFO *cs, - const uchar *a, size_t a_length, - const uchar *b, size_t b_length, - my_bool diff_if_only_endspace_difference); - -int my_wildcmp_mb_bin(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many); - -int my_strcasecmp_mb_bin(CHARSET_INFO * cs __attribute__((unused)), - const char *s, const char *t); - -void my_hash_sort_mb_bin(CHARSET_INFO *cs __attribute__((unused)), - const uchar *key, size_t len,ulong *nr1, ulong *nr2); - -size_t my_strnxfrm_unicode(CHARSET_INFO *, - uchar *dst, size_t dstlen, - const uchar *src, size_t srclen); - -size_t my_strnxfrm_unicode_full_bin(CHARSET_INFO *, - uchar *dst, size_t dstlen, - const uchar *src, size_t srclen); -size_t my_strnxfrmlen_unicode_full_bin(CHARSET_INFO *, size_t); - -int my_wildcmp_unicode(CHARSET_INFO *cs, - const char *str, const char *str_end, - const char *wildstr, const char *wildend, - int escape, int w_one, int w_many, - MY_UNICASE_INFO **weights); - -extern my_bool my_parse_charset_xml(const char *bug, size_t len, - int (*add)(CHARSET_INFO *cs)); -extern char *my_strchr(CHARSET_INFO *cs, const char *str, const char *end, - pchar c); -extern size_t my_strcspn(CHARSET_INFO *cs, const char *str, const char *end, - const char *accept); - -my_bool my_propagate_simple(CHARSET_INFO *cs, const uchar *str, size_t len); -my_bool my_propagate_complex(CHARSET_INFO *cs, const uchar *str, size_t len); - - -uint my_string_repertoire(CHARSET_INFO *cs, const char *str, ulong len); -my_bool my_charset_is_ascii_based(CHARSET_INFO *cs); -my_bool my_charset_is_8bit_pure_ascii(CHARSET_INFO *cs); -uint my_charset_repertoire(CHARSET_INFO *cs); - -my_bool my_charset_is_ascii_compatible(CHARSET_INFO *cs); - -extern size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n, - const char* fmt, va_list ap); - -#define _MY_U 01 /* Upper case */ -#define _MY_L 02 /* Lower case */ -#define _MY_NMR 04 /* Numeral (digit) */ -#define _MY_SPC 010 /* Spacing character */ -#define _MY_PNT 020 /* Punctuation */ -#define _MY_CTR 040 /* Control character */ -#define _MY_B 0100 /* Blank */ -#define _MY_X 0200 /* heXadecimal digit */ - - -#define my_isascii(c) (!((c) & ~0177)) -#define my_toascii(c) ((c) & 0177) -#define my_tocntrl(c) ((c) & 31) -#define my_toprint(c) ((c) | 64) -#define my_toupper(s,c) (char) ((s)->to_upper[(uchar) (c)]) -#define my_tolower(s,c) (char) ((s)->to_lower[(uchar) (c)]) -#define my_isalpha(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_U | _MY_L)) -#define my_isupper(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_U) -#define my_islower(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_L) -#define my_isdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_NMR) -#define my_isxdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_X) -#define my_isalnum(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_U | _MY_L | _MY_NMR)) -#define my_isspace(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_SPC) -#define my_ispunct(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_PNT) -#define my_isprint(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR | _MY_B)) -#define my_isgraph(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR)) -#define my_iscntrl(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_CTR) - -/* Some macros that should be cleaned up a little */ -#define my_isvar(s,c) (my_isalnum(s,c) || (c) == '_') -#define my_isvar_start(s,c) (my_isalpha(s,c) || (c) == '_') - -#define my_binary_compare(s) ((s)->state & MY_CS_BINSORT) -#define use_strnxfrm(s) ((s)->state & MY_CS_STRNXFRM) -#define my_strnxfrm(s, a, b, c, d) ((s)->coll->strnxfrm((s), (a), (b), (c), (d))) -#define my_strnncoll(s, a, b, c, d) ((s)->coll->strnncoll((s), (a), (b), (c), (d), 0)) -#define my_like_range(s, a, b, c, d, e, f, g, h, i, j) \ - ((s)->coll->like_range((s), (a), (b), (c), (d), (e), (f), (g), (h), (i), (j))) -#define my_wildcmp(cs,s,se,w,we,e,o,m) ((cs)->coll->wildcmp((cs),(s),(se),(w),(we),(e),(o),(m))) -#define my_strcasecmp(s, a, b) ((s)->coll->strcasecmp((s), (a), (b))) -#define my_charpos(cs, b, e, num) (cs)->cset->charpos((cs), (const char*) (b), (const char *)(e), (num)) - - -#define use_mb(s) ((s)->cset->ismbchar != NULL) -#define my_ismbchar(s, a, b) ((s)->cset->ismbchar((s), (a), (b))) -#ifdef USE_MB -#define my_mbcharlen(s, a) ((s)->cset->mbcharlen((s),(a))) -#else -#define my_mbcharlen(s, a) 1 -#endif - -#define my_caseup_str(s, a) ((s)->cset->caseup_str((s), (a))) -#define my_casedn_str(s, a) ((s)->cset->casedn_str((s), (a))) -#define my_strntol(s, a, b, c, d, e) ((s)->cset->strntol((s),(a),(b),(c),(d),(e))) -#define my_strntoul(s, a, b, c, d, e) ((s)->cset->strntoul((s),(a),(b),(c),(d),(e))) -#define my_strntoll(s, a, b, c, d, e) ((s)->cset->strntoll((s),(a),(b),(c),(d),(e))) -#define my_strntoull(s, a, b, c,d, e) ((s)->cset->strntoull((s),(a),(b),(c),(d),(e))) -#define my_strntod(s, a, b, c, d) ((s)->cset->strntod((s),(a),(b),(c),(d))) - - -/* XXX: still need to take care of this one */ -#ifdef MY_CHARSET_TIS620 -#error The TIS620 charset is broken at the moment. Tell tim to fix it. -#define USE_TIS620 -#include "t_ctype.h" -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* _m_ctype_h */ diff --git a/deps/mysqllite/include/m_string.h b/deps/mysqllite/include/m_string.h deleted file mode 100644 index d2194858589bcf..00000000000000 --- a/deps/mysqllite/include/m_string.h +++ /dev/null @@ -1,295 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* There may be prolems include all of theese. Try to test in - configure with ones are needed? */ - -/* This is needed for the definitions of strchr... on solaris */ - -#ifndef _m_string_h -#define _m_string_h - -#include "my_global.h" /* HAVE_* */ - -#ifndef __USE_GNU -#define __USE_GNU /* We want to use stpcpy */ -#endif -#if defined(HAVE_STRINGS_H) -#include -#endif -#if defined(HAVE_STRING_H) -#include -#endif - -/* need by my_vsnprintf */ -#include - -/* This is needed for the definitions of bzero... on solaris */ -#if defined(HAVE_STRINGS_H) -#include -#endif - -/* This is needed for the definitions of memcpy... on solaris */ -#if defined(HAVE_MEMORY_H) && !defined(__cplusplus) -#include -#endif - -#if !defined(HAVE_MEMCPY) && !defined(HAVE_MEMMOVE) -# define memcpy(d, s, n) bcopy ((s), (d), (n)) -# define memset(A,C,B) bfill((A),(B),(C)) -# define memmove(d, s, n) bmove ((d), (s), (n)) -#elif defined(HAVE_MEMMOVE) -# define bmove(d, s, n) memmove((d), (s), (n)) -#endif - -/* Unixware 7 */ -#if !defined(HAVE_BFILL) -# define bfill(A,B,C) memset((A),(C),(B)) -#endif - -#if !defined(bzero) && !defined(HAVE_BZERO) -# define bzero(A,B) memset((A),0,(B)) -#endif - -#if defined(__cplusplus) -extern "C" { -#endif - -/* - my_str_malloc() and my_str_free() are assigned to implementations in - strings/alloc.c, but can be overridden in the calling program. - */ -extern void *(*my_str_malloc)(size_t); -extern void (*my_str_free)(void *); - -#if defined(HAVE_STPCPY) && MY_GNUC_PREREQ(3, 4) && !defined(__INTEL_COMPILER) -#define strmov(A,B) __builtin_stpcpy((A),(B)) -#elif defined(HAVE_STPCPY) -#define strmov(A,B) stpcpy((A),(B)) -#ifndef stpcpy -extern char *stpcpy(char *, const char *); /* For AIX with gcc 2.95.3 */ -#endif -#endif - -/* Declared in int2str() */ -extern char _dig_vec_upper[]; -extern char _dig_vec_lower[]; - -#ifndef strmov -#define strmov_overlapp(A,B) strmov(A,B) -#define strmake_overlapp(A,B,C) strmake(A,B,C) -#endif - - /* Prototypes for string functions */ - -extern void bmove_upp(uchar *dst,const uchar *src,size_t len); -extern void bchange(uchar *dst,size_t old_len,const uchar *src, - size_t new_len,size_t tot_len); -extern void strappend(char *s,size_t len,pchar fill); -extern char *strend(const char *s); -extern char *strcend(const char *, pchar); -extern char *strfill(char * s,size_t len,pchar fill); -extern char *strmake(char *dst,const char *src,size_t length); - -#ifndef strmov -extern char *strmov(char *dst,const char *src); -#else -extern char *strmov_overlapp(char *dst,const char *src); -#endif -extern char *strnmov(char *dst, const char *src, size_t n); -extern char *strcont(const char *src, const char *set); -extern char *strxmov(char *dst, const char *src, ...); -extern char *strxnmov(char *dst, size_t len, const char *src, ...); - -/* Prototypes of normal stringfunctions (with may ours) */ -#ifndef HAVE_STRNLEN -extern size_t strnlen(const char *s, size_t n); -#endif - -extern int is_prefix(const char *, const char *); - -/* Conversion routines */ -typedef enum { - MY_GCVT_ARG_FLOAT, - MY_GCVT_ARG_DOUBLE -} my_gcvt_arg_type; - -double my_strtod(const char *str, char **end, int *error); -double my_atof(const char *nptr); -size_t my_fcvt(double x, int precision, char *to, my_bool *error); -size_t my_gcvt(double x, my_gcvt_arg_type type, int width, char *to, - my_bool *error); - -#define NOT_FIXED_DEC 31 - -/* - The longest string my_fcvt can return is 311 + "precision" bytes. - Here we assume that we never cal my_fcvt() with precision >= NOT_FIXED_DEC - (+ 1 byte for the terminating '\0'). -*/ -#define FLOATING_POINT_BUFFER (311 + NOT_FIXED_DEC) - -/* - We want to use the 'e' format in some cases even if we have enough space - for the 'f' one just to mimic sprintf("%.15g") behavior for large integers, - and to improve it for numbers < 10^(-4). - That is, for |x| < 1 we require |x| >= 10^(-15), and for |x| > 1 we require - it to be integer and be <= 10^DBL_DIG for the 'f' format to be used. - We don't lose precision, but make cases like "1e200" or "0.00001" look nicer. -*/ -#define MAX_DECPT_FOR_F_FORMAT DBL_DIG - -/* - The maximum possible field width for my_gcvt() conversion. - (DBL_DIG + 2) significant digits + sign + "." + ("e-NNN" or - MAX_DECPT_FOR_F_FORMAT zeros for cases when |x|<1 and the 'f' format is used). -*/ -#define MY_GCVT_MAX_FIELD_WIDTH (DBL_DIG + 4 + max(5, MAX_DECPT_FOR_F_FORMAT)) \ - -extern char *llstr(longlong value,char *buff); -extern char *ullstr(longlong value,char *buff); -#ifndef HAVE_STRTOUL -extern long strtol(const char *str, char **ptr, int base); -extern ulong strtoul(const char *str, char **ptr, int base); -#endif - -extern char *int2str(long val, char *dst, int radix, int upcase); -extern char *int10_to_str(long val,char *dst,int radix); -extern char *str2int(const char *src,int radix,long lower,long upper, - long *val); -longlong my_strtoll10(const char *nptr, char **endptr, int *error); -#if SIZEOF_LONG == SIZEOF_LONG_LONG -#define ll2str(A,B,C,D) int2str((A),(B),(C),(D)) -#define longlong10_to_str(A,B,C) int10_to_str((A),(B),(C)) -#undef strtoll -#define strtoll(A,B,C) strtol((A),(B),(C)) -#define strtoull(A,B,C) strtoul((A),(B),(C)) -#ifndef HAVE_STRTOULL -#define HAVE_STRTOULL -#endif -#ifndef HAVE_STRTOLL -#define HAVE_STRTOLL -#endif -#else -#ifdef HAVE_LONG_LONG -extern char *ll2str(longlong val,char *dst,int radix, int upcase); -extern char *longlong10_to_str(longlong val,char *dst,int radix); -#if (!defined(HAVE_STRTOULL) || defined(NO_STRTOLL_PROTO)) -extern longlong strtoll(const char *str, char **ptr, int base); -extern ulonglong strtoull(const char *str, char **ptr, int base); -#endif -#endif -#endif -#define longlong2str(A,B,C) ll2str((A),(B),(C),1) - -#if defined(__cplusplus) -} -#endif - -/* - LEX_STRING -- a pair of a C-string and its length. - (it's part of the plugin API as a MYSQL_LEX_STRING) -*/ - -#include -typedef struct st_mysql_lex_string LEX_STRING; - -#define STRING_WITH_LEN(X) (X), ((size_t) (sizeof(X) - 1)) -#define USTRING_WITH_LEN(X) ((uchar*) X), ((size_t) (sizeof(X) - 1)) -#define C_STRING_WITH_LEN(X) ((char *) (X)), ((size_t) (sizeof(X) - 1)) - -struct st_mysql_const_lex_string -{ - const char *str; - size_t length; -}; -typedef struct st_mysql_const_lex_string LEX_CSTRING; - -/* SPACE_INT is a word that contains only spaces */ -#if SIZEOF_INT == 4 -#define SPACE_INT 0x20202020 -#elif SIZEOF_INT == 8 -#define SPACE_INT 0x2020202020202020 -#else -#error define the appropriate constant for a word full of spaces -#endif - -/** - Skip trailing space. - - On most systems reading memory in larger chunks (ideally equal to the size of - the chinks that the machine physically reads from memory) causes fewer memory - access loops and hence increased performance. - This is why the 'int' type is used : it's closest to that (according to how - it's defined in C). - So when we determine the amount of whitespace at the end of a string we do - the following : - 1. We divide the string into 3 zones : - a) from the start of the string (__start) to the first multiple - of sizeof(int) (__start_words) - b) from the end of the string (__end) to the last multiple of sizeof(int) - (__end_words) - c) a zone that is aligned to sizeof(int) and can be safely accessed - through an int * - 2. We start comparing backwards from (c) char-by-char. If all we find is - space then we continue - 3. If there are elements in zone (b) we compare them as unsigned ints to a - int mask (SPACE_INT) consisting of all spaces - 4. Finally we compare the remaining part (a) of the string char by char. - This covers for the last non-space unsigned int from 3. (if any) - - This algorithm works well for relatively larger strings, but it will slow - the things down for smaller strings (because of the additional calculations - and checks compared to the naive method). Thus the barrier of length 20 - is added. - - @param ptr pointer to the input string - @param len the length of the string - @return the last non-space character -*/ - -static inline const uchar *skip_trailing_space(const uchar *ptr,size_t len) -{ - const uchar *end= ptr + len; - - if (len > 20) - { - const uchar *end_words= (const uchar *)(intptr) - (((ulonglong)(intptr)end) / SIZEOF_INT * SIZEOF_INT); - const uchar *start_words= (const uchar *)(intptr) - ((((ulonglong)(intptr)ptr) + SIZEOF_INT - 1) / SIZEOF_INT * SIZEOF_INT); - - DBUG_ASSERT(((ulonglong)(intptr)ptr) >= SIZEOF_INT); - if (end_words > ptr) - { - while (end > end_words && end[-1] == 0x20) - end--; - if (end[-1] == 0x20 && start_words < end_words) - while (end > start_words && ((unsigned *)end)[-1] == SPACE_INT) - end -= SIZEOF_INT; - } - } - while (end > ptr && end[-1] == 0x20) - end--; - return (end); -} - -static inline void lex_string_set(LEX_STRING *lex_str, const char *c_str) -{ - lex_str->str= (char *) c_str; - lex_str->length= strlen(c_str); -} - -#endif diff --git a/deps/mysqllite/include/my_alloc.h b/deps/mysqllite/include/my_alloc.h deleted file mode 100644 index 4b1ffd3d4444d3..00000000000000 --- a/deps/mysqllite/include/my_alloc.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Data structures for mysys/my_alloc.c (root memory allocator) -*/ - -#ifndef _my_alloc_h -#define _my_alloc_h - -#define ALLOC_MAX_BLOCK_TO_DROP 4096 -#define ALLOC_MAX_BLOCK_USAGE_BEFORE_DROP 10 - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct st_used_mem -{ /* struct for once_alloc (block) */ - struct st_used_mem *next; /* Next block in use */ - unsigned int left; /* memory left in block */ - unsigned int size; /* size of block */ -} USED_MEM; - - -typedef struct st_mem_root -{ - USED_MEM *free; /* blocks with free memory in it */ - USED_MEM *used; /* blocks almost without free memory */ - USED_MEM *pre_alloc; /* preallocated block */ - /* if block have less memory it will be put in 'used' list */ - size_t min_malloc; - size_t block_size; /* initial block size */ - unsigned int block_num; /* allocated blocks counter */ - /* - first free block in queue test counter (if it exceed - MAX_BLOCK_USAGE_BEFORE_DROP block will be dropped in 'used' list) - */ - unsigned int first_block_usage; - - void (*error_handler)(void); -} MEM_ROOT; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/deps/mysqllite/include/my_attribute.h b/deps/mysqllite/include/my_attribute.h deleted file mode 100644 index d35b3013bdd254..00000000000000 --- a/deps/mysqllite/include/my_attribute.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Helper macros used for setting different __attributes__ - on functions in a portable fashion -*/ - -#ifndef _my_attribute_h -#define _my_attribute_h - -#if defined(__GNUC__) -# ifndef GCC_VERSION -# define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) -# endif -#endif - -/* - Disable __attribute__() on gcc < 2.7, g++ < 3.4, and non-gcc compilers. - Some forms of __attribute__ are actually supported in earlier versions of - g++, but we just disable them all because we only use them to generate - compilation warnings. -*/ -#ifndef __attribute__ -# if !defined(__GNUC__) -# define __attribute__(A) -# elif GCC_VERSION < 2008 -# define __attribute__(A) -# elif defined(__cplusplus) && GCC_VERSION < 3004 -# define __attribute__(A) -# endif -#endif - -/* - __attribute__((format(...))) is only supported in gcc >= 2.8 and g++ >= 3.4 - But that's already covered by the __attribute__ tests above, so this is - just a convenience macro. -*/ -#ifndef ATTRIBUTE_FORMAT -# define ATTRIBUTE_FORMAT(style, m, n) __attribute__((format(style, m, n))) -#endif - -/* - - __attribute__((format(...))) on a function pointer is not supported - until gcc 3.1 -*/ -#ifndef ATTRIBUTE_FORMAT_FPTR -# if (GCC_VERSION >= 3001) -# define ATTRIBUTE_FORMAT_FPTR(style, m, n) ATTRIBUTE_FORMAT(style, m, n) -# else -# define ATTRIBUTE_FORMAT_FPTR(style, m, n) -# endif /* GNUC >= 3.1 */ -#endif - - -#endif diff --git a/deps/mysqllite/include/my_compiler.h b/deps/mysqllite/include/my_compiler.h deleted file mode 100644 index 5f898621159c8a..00000000000000 --- a/deps/mysqllite/include/my_compiler.h +++ /dev/null @@ -1,145 +0,0 @@ -#ifndef MY_COMPILER_INCLUDED -#define MY_COMPILER_INCLUDED - -/* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - -/** - Header for compiler-dependent features. - - Intended to contain a set of reusable wrappers for preprocessor - macros, attributes, pragmas, and any other features that are - specific to a target compiler. -*/ - -#include /* stddef.h offsetof */ - -/** - Compiler-dependent internal convenience macros. -*/ - -/* GNU C/C++ */ -#if defined __GNUC__ -/* Convenience macro to test the minimum required GCC version. */ -# define MY_GNUC_PREREQ(maj, min) \ - ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) -/* Any after 2.95... */ -# define MY_ALIGN_EXT -/* Comunicate to the compiler the unreachability of the code. */ -# if MY_GNUC_PREREQ(4,5) -# define MY_ASSERT_UNREACHABLE() __builtin_unreachable() -# endif - -/* Microsoft Visual C++ */ -#elif defined _MSC_VER -# define MY_ALIGNOF(type) __alignof(type) -# define MY_ALIGNED(n) __declspec(align(n)) - -/* Oracle Solaris Studio */ -#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) -# if __SUNPRO_C >= 0x590 -# define MY_ALIGN_EXT -# endif - -/* IBM XL C/C++ */ -#elif defined __xlC__ -# if __xlC__ >= 0x0600 -# define MY_ALIGN_EXT -# endif - -/* HP aCC */ -#elif defined(__HP_aCC) || defined(__HP_cc) -# if (__HP_aCC >= 60000) || (__HP_cc >= 60000) -# define MY_ALIGN_EXT -# endif -#endif - -#ifdef MY_ALIGN_EXT -/** Specifies the minimum alignment of a type. */ -# define MY_ALIGNOF(type) __alignof__(type) -/** Determine the alignment requirement of a type. */ -# define MY_ALIGNED(n) __attribute__((__aligned__((n)))) -#endif - -/** - Generic (compiler-independent) features. -*/ - -#ifndef MY_GNUC_PREREQ -# define MY_GNUC_PREREQ(maj, min) (0) -#endif - -#ifndef MY_ALIGNOF -# ifdef __cplusplus - template struct my_alignof_helper { char m1; type m2; }; - /* Invalid for non-POD types, but most compilers give the right answer. */ -# define MY_ALIGNOF(type) offsetof(my_alignof_helper, m2) -# else -# define MY_ALIGNOF(type) offsetof(struct { char m1; type m2; }, m2) -# endif -#endif - -#ifndef MY_ASSERT_UNREACHABLE -# define MY_ASSERT_UNREACHABLE() do { assert(0); } while (0) -#endif - -/** - C++ Type Traits -*/ - -#ifdef __cplusplus - -/** - Opaque storage with a particular alignment. -*/ -# if defined(MY_ALIGNED) -/* Partial specialization used due to MSVC++. */ -template struct my_alignment_imp; -template<> struct MY_ALIGNED(1) my_alignment_imp<1> {}; -template<> struct MY_ALIGNED(2) my_alignment_imp<2> {}; -template<> struct MY_ALIGNED(4) my_alignment_imp<4> {}; -template<> struct MY_ALIGNED(8) my_alignment_imp<8> {}; -template<> struct MY_ALIGNED(16) my_alignment_imp<16> {}; -/* ... expand as necessary. */ -# else -template -struct my_alignment_imp { double m1; }; -# endif - -/** - A POD type with a given size and alignment. - - @remark If the compiler does not support a alignment attribute - (MY_ALIGN macro), the default alignment of a double is - used instead. - - @tparam size The minimum size. - @tparam alignment The desired alignment: 1, 2, 4, 8 or 16. -*/ -template -struct my_aligned_storage -{ - union - { - char data[size]; - my_alignment_imp align; - }; -}; - -#endif /* __cplusplus */ - -#include - -#endif /* MY_COMPILER_INCLUDED */ diff --git a/deps/mysqllite/include/my_dbug.h b/deps/mysqllite/include/my_dbug.h deleted file mode 100644 index 7f8f5a1578d4be..00000000000000 --- a/deps/mysqllite/include/my_dbug.h +++ /dev/null @@ -1,194 +0,0 @@ -/* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef MY_DBUG_INCLUDED -#define MY_DBUG_INCLUDED - -#ifndef __WIN__ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_UNISTD_H -#include -#endif -#include -#endif /* not __WIN__ */ - -#ifdef __cplusplus -extern "C" { -#endif -#if !defined(DBUG_OFF) && !defined(_lint) - -struct _db_stack_frame_ { - const char *func; /* function name of the previous stack frame */ - const char *file; /* filename of the function of previous frame */ - uint level; /* this nesting level, highest bit enables tracing */ - struct _db_stack_frame_ *prev; /* pointer to the previous frame */ -}; - -struct _db_code_state_; -extern my_bool _dbug_on_; -extern my_bool _db_keyword_(struct _db_code_state_ *, const char *, int); -extern int _db_explain_(struct _db_code_state_ *cs, char *buf, size_t len); -extern int _db_explain_init_(char *buf, size_t len); -extern int _db_is_pushed_(void); -extern void _db_setjmp_(void); -extern void _db_longjmp_(void); -extern void _db_process_(const char *name); -extern void _db_push_(const char *control); -extern void _db_pop_(void); -extern void _db_set_(const char *control); -extern void _db_set_init_(const char *control); -extern void _db_enter_(const char *_func_, const char *_file_, uint _line_, - struct _db_stack_frame_ *_stack_frame_); -extern void _db_return_(uint _line_, struct _db_stack_frame_ *_stack_frame_); -extern void _db_pargs_(uint _line_,const char *keyword); -extern void _db_doprnt_(const char *format,...) - ATTRIBUTE_FORMAT(printf, 1, 2); -extern void _db_dump_(uint _line_,const char *keyword, - const unsigned char *memory, size_t length); -extern void _db_end_(void); -extern void _db_lock_file_(void); -extern void _db_unlock_file_(void); -extern FILE *_db_fp_(void); -extern void _db_flush_(); -extern const char* _db_get_func_(void); - -#define DBUG_ENTER(a) struct _db_stack_frame_ _db_stack_frame_; \ - _db_enter_ (a,__FILE__,__LINE__,&_db_stack_frame_) -#define DBUG_LEAVE _db_return_ (__LINE__, &_db_stack_frame_) -#define DBUG_RETURN(a1) do {DBUG_LEAVE; return(a1);} while(0) -#define DBUG_VOID_RETURN do {DBUG_LEAVE; return;} while(0) -#define DBUG_EXECUTE(keyword,a1) \ - do {if (_db_keyword_(0, (keyword), 0)) { a1 }} while(0) -#define DBUG_EXECUTE_IF(keyword,a1) \ - do {if (_db_keyword_(0, (keyword), 1)) { a1 }} while(0) -#define DBUG_EVALUATE(keyword,a1,a2) \ - (_db_keyword_(0,(keyword), 0) ? (a1) : (a2)) -#define DBUG_EVALUATE_IF(keyword,a1,a2) \ - (_db_keyword_(0,(keyword), 1) ? (a1) : (a2)) -#define DBUG_PRINT(keyword,arglist) \ - do {_db_pargs_(__LINE__,keyword); _db_doprnt_ arglist;} while(0) -#define DBUG_PUSH(a1) _db_push_ (a1) -#define DBUG_POP() _db_pop_ () -#define DBUG_SET(a1) _db_set_ (a1) -#define DBUG_SET_INITIAL(a1) _db_set_init_ (a1) -#define DBUG_PROCESS(a1) _db_process_(a1) -#define DBUG_FILE _db_fp_() -#define DBUG_SETJMP(a1) (_db_setjmp_ (), setjmp (a1)) -#define DBUG_LONGJMP(a1,a2) (_db_longjmp_ (), longjmp (a1, a2)) -#define DBUG_DUMP(keyword,a1,a2) _db_dump_(__LINE__,keyword,a1,a2) -#define DBUG_END() _db_end_ () -#define DBUG_LOCK_FILE _db_lock_file_() -#define DBUG_UNLOCK_FILE _db_unlock_file_() -#define DBUG_ASSERT(A) assert(A) -#define DBUG_EXPLAIN(buf,len) _db_explain_(0, (buf),(len)) -#define DBUG_EXPLAIN_INITIAL(buf,len) _db_explain_init_((buf),(len)) -#define DEBUGGER_OFF do { _dbug_on_= 0; } while(0) -#define DEBUGGER_ON do { _dbug_on_= 1; } while(0) -#ifndef __WIN__ -#define DBUG_ABORT() (_db_flush_(), abort()) -#else -/* - Avoid popup with abort/retry/ignore buttons. When BUG#31745 is fixed we can - call abort() instead of _exit(3) (now it would cause a "test signal" popup). -*/ -#include -#define DBUG_ABORT() (_db_flush_(),\ - (void)_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE),\ - (void)_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR),\ - _exit(3)) -#endif -#define DBUG_CHECK_CRASH(func, op) \ - do { char _dbuf_[255]; strxnmov(_dbuf_, sizeof(_dbuf_)-1, (func), (op)); \ - DBUG_EXECUTE_IF(_dbuf_, DBUG_ABORT()); } while(0) -#define DBUG_CRASH_ENTER(func) \ - DBUG_ENTER(func); DBUG_CHECK_CRASH(func, "_crash_enter") -#define DBUG_CRASH_RETURN(val) \ - DBUG_CHECK_CRASH(_db_get_func_(), "_crash_return") -#define DBUG_CRASH_VOID_RETURN \ - DBUG_CHECK_CRASH (_db_get_func_(), "_crash_return") - -/* - Make the program fail, without creating a core file. - abort() will send SIGABRT which (most likely) generates core. - Use SIGKILL instead, which cannot be caught. - We also pause the current thread, until the signal is actually delivered. - An alternative would be to use _exit(EXIT_FAILURE), - but then valgrind would report lots of memory leaks. - */ -#ifdef __WIN__ -#define DBUG_SUICIDE() DBUG_ABORT() -#else -extern void _db_suicide_(); -#define DBUG_SUICIDE() (_db_flush_(), _db_suicide_()) -#endif - -#else /* No debugger */ - -#define DBUG_ENTER(a1) -#define DBUG_LEAVE -#define DBUG_RETURN(a1) do { return(a1); } while(0) -#define DBUG_VOID_RETURN do { return; } while(0) -#define DBUG_EXECUTE(keyword,a1) do { } while(0) -#define DBUG_EXECUTE_IF(keyword,a1) do { } while(0) -#define DBUG_EVALUATE(keyword,a1,a2) (a2) -#define DBUG_EVALUATE_IF(keyword,a1,a2) (a2) -#define DBUG_PRINT(keyword,arglist) do { } while(0) -#define DBUG_PUSH(a1) do { } while(0) -#define DBUG_SET(a1) do { } while(0) -#define DBUG_SET_INITIAL(a1) do { } while(0) -#define DBUG_POP() do { } while(0) -#define DBUG_PROCESS(a1) do { } while(0) -#define DBUG_SETJMP(a1) setjmp(a1) -#define DBUG_LONGJMP(a1) longjmp(a1) -#define DBUG_DUMP(keyword,a1,a2) do { } while(0) -#define DBUG_END() do { } while(0) -#define DBUG_ASSERT(A) do { } while(0) -#define DBUG_LOCK_FILE do { } while(0) -#define DBUG_FILE (stderr) -#define DBUG_UNLOCK_FILE do { } while(0) -#define DBUG_EXPLAIN(buf,len) -#define DBUG_EXPLAIN_INITIAL(buf,len) -#define DEBUGGER_OFF do { } while(0) -#define DEBUGGER_ON do { } while(0) -#define DBUG_ABORT() do { } while(0) -#define DBUG_CRASH_ENTER(func) -#define DBUG_CRASH_RETURN(val) do { return(val); } while(0) -#define DBUG_CRASH_VOID_RETURN do { return; } while(0) -#define DBUG_SUICIDE() do { } while(0) - -#endif - -#ifdef EXTRA_DEBUG -/** - Sync points allow us to force the server to reach a certain line of code - and block there until the client tells the server it is ok to go on. - The client tells the server to block with SELECT GET_LOCK() - and unblocks it with SELECT RELEASE_LOCK(). Used for debugging difficult - concurrency problems -*/ -#define DBUG_SYNC_POINT(lock_name,lock_timeout) \ - debug_sync_point(lock_name,lock_timeout) -void debug_sync_point(const char* lock_name, uint lock_timeout); -#else -#define DBUG_SYNC_POINT(lock_name,lock_timeout) -#endif /* EXTRA_DEBUG */ - -#ifdef __cplusplus -} -#endif - -#endif /* MY_DBUG_INCLUDED */ diff --git a/deps/mysqllite/include/my_dir.h b/deps/mysqllite/include/my_dir.h deleted file mode 100644 index de21bee73858df..00000000000000 --- a/deps/mysqllite/include/my_dir.h +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef MY_DIR_H -#define MY_DIR_H - -#include "my_global.h" - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - /* Defines for my_dir and my_stat */ - -#define MY_S_IFMT S_IFMT /* type of file */ -#define MY_S_IFDIR S_IFDIR /* directory */ -#define MY_S_IFCHR S_IFCHR /* character special */ -#define MY_S_IFBLK S_IFBLK /* block special */ -#define MY_S_IFREG S_IFREG /* regular */ -#define MY_S_IFIFO S_IFIFO /* fifo */ -#define MY_S_ISUID S_ISUID /* set user id on execution */ -#define MY_S_ISGID S_ISGID /* set group id on execution */ -#define MY_S_ISVTX S_ISVTX /* save swapped text even after use */ -#define MY_S_IREAD S_IREAD /* read permission, owner */ -#define MY_S_IWRITE S_IWRITE /* write permission, owner */ -#define MY_S_IEXEC S_IEXEC /* execute/search permission, owner */ - -#define MY_S_ISDIR(m) (((m) & MY_S_IFMT) == MY_S_IFDIR) -#define MY_S_ISCHR(m) (((m) & MY_S_IFMT) == MY_S_IFCHR) -#define MY_S_ISBLK(m) (((m) & MY_S_IFMT) == MY_S_IFBLK) -#define MY_S_ISREG(m) (((m) & MY_S_IFMT) == MY_S_IFREG) -#define MY_S_ISFIFO(m) (((m) & MY_S_IFMT) == MY_S_IFIFO) - -#define MY_DONT_SORT 512 /* my_lib; Don't sort files */ -#define MY_WANT_STAT 1024 /* my_lib; stat files */ - - /* typedefs for my_dir & my_stat */ - -#ifdef USE_MY_STAT_STRUCT - -typedef struct my_stat -{ - dev_t st_dev; /* major & minor device numbers */ - ino_t st_ino; /* inode number */ - ushort st_mode; /* file permissons (& suid sgid .. bits) */ - short st_nlink; /* number of links to file */ - ushort st_uid; /* user id */ - ushort st_gid; /* group id */ - dev_t st_rdev; /* more major & minor device numbers (???) */ - off_t st_size; /* size of file */ - time_t st_atime; /* time for last read */ - time_t st_mtime; /* time for last contens modify */ - time_t st_ctime; /* time for last inode or contents modify */ -} MY_STAT; - -#else - -#if(_MSC_VER) -#define MY_STAT struct _stati64 /* 64 bit file size */ -#else -#define MY_STAT struct stat /* Orginal struct have what we need */ -#endif - -#endif /* USE_MY_STAT_STRUCT */ - -/* Struct describing one file returned from my_dir */ -typedef struct fileinfo -{ - char *name; - MY_STAT *mystat; -} FILEINFO; - -typedef struct st_my_dir /* Struct returned from my_dir */ -{ - /* - These members are just copies of parts of DYNAMIC_ARRAY structure, - which is allocated right after the end of MY_DIR structure (MEM_ROOT - for storing names is also resides there). We've left them here because - we don't want to change code that uses my_dir. - */ - struct fileinfo *dir_entry; - uint number_off_files; -} MY_DIR; - -extern MY_DIR *my_dir(const char *path,myf MyFlags); -extern void my_dirend(MY_DIR *buffer); -extern MY_STAT *my_stat(const char *path, MY_STAT *stat_area, myf my_flags); -extern int my_fstat(int filenr, MY_STAT *stat_area, myf MyFlags); - -#ifdef __cplusplus -} -#endif - -#endif /* MY_DIR_H */ - diff --git a/deps/mysqllite/include/my_getopt.h b/deps/mysqllite/include/my_getopt.h deleted file mode 100644 index 47feb21d85e4e5..00000000000000 --- a/deps/mysqllite/include/my_getopt.h +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright (C) 2002-2004 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _my_getopt_h -#define _my_getopt_h - -#include "my_sys.h" /* loglevel */ - -C_MODE_START - -#define GET_NO_ARG 1 -#define GET_BOOL 2 -#define GET_INT 3 -#define GET_UINT 4 -#define GET_LONG 5 -#define GET_ULONG 6 -#define GET_LL 7 -#define GET_ULL 8 -#define GET_STR 9 -#define GET_STR_ALLOC 10 -#define GET_DISABLED 11 -#define GET_ENUM 12 -#define GET_SET 13 -#define GET_DOUBLE 14 -#define GET_FLAGSET 15 - -#define GET_ASK_ADDR 128 -#define GET_TYPE_MASK 127 - -/** - Enumeration of the my_option::arg_type attributes. - It should be noted that for historical reasons variables with the combination - arg_type=NO_ARG, my_option::var_type=GET_BOOL still accepts - arguments. This is someone counter intuitive and care should be taken - if the code is refactored. -*/ -enum get_opt_arg_type { NO_ARG, OPT_ARG, REQUIRED_ARG }; - -struct st_typelib; - -struct my_option -{ - const char *name; /**< Name of the option. name=NULL - marks the end of the my_option[] - array. - */ - int id; /**< For 0255 no short option - is created, but a long option still - can be identified uniquely in the - my_get_one_option() callback. - If an opton needs neither special - treatment in the my_get_one_option() - nor one-letter short equivalent - use id=0 - */ - const char *comment; /**< option comment, for autom. --help. - if it's NULL the option is not - visible in --help. - */ - void *value; /**< A pointer to the variable value */ - void *u_max_value; /**< The user def. max variable value */ - struct st_typelib *typelib; /**< Pointer to possible values */ - ulong var_type; /**< GET_BOOL, GET_ULL, etc */ - enum get_opt_arg_type arg_type; /**< e.g. REQUIRED_ARG or OPT_ARG */ - longlong def_value; /**< Default value */ - longlong min_value; /**< Min allowed value (for numbers) */ - longlong max_value; /**< Max allowed value (for numbers) */ - longlong sub_size; /**< Unused */ - long block_size; /**< Value should be a mult. of this (for numbers) */ - void *app_type; /**< To be used by an application */ -}; - - -typedef my_bool (*my_get_one_option)(int, const struct my_option *, char *); -typedef void (*my_error_reporter)(enum loglevel level, const char *format, ...); -/** - Used to retrieve a reference to the object (variable) that holds the value - for the given option. For example, if var_type is GET_UINT, the function - must return a pointer to a variable of type uint. A argument is stored in - the location pointed to by the returned pointer. -*/ -typedef void *(*my_getopt_value)(const char *, uint, const struct my_option *, - int *); - - -extern char *disabled_my_option; -extern my_bool my_getopt_print_errors; -extern my_bool my_getopt_skip_unknown; -extern my_error_reporter my_getopt_error_reporter; - -extern int handle_options (int *argc, char ***argv, - const struct my_option *longopts, my_get_one_option); -extern void my_cleanup_options(const struct my_option *options); -extern void my_print_help(const struct my_option *options); -extern void my_print_variables(const struct my_option *options); -extern void my_getopt_register_get_addr(my_getopt_value); - -ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp, - my_bool *fix); -longlong getopt_ll_limit_value(longlong, const struct my_option *, - my_bool *fix); -double getopt_double_limit_value(double num, const struct my_option *optp, - my_bool *fix); -my_bool getopt_compare_strings(const char *s, const char *t, uint length); - -C_MODE_END - -#endif /* _my_getopt_h */ - diff --git a/deps/mysqllite/include/my_global.h b/deps/mysqllite/include/my_global.h deleted file mode 100644 index dd0a18f7a73b30..00000000000000 --- a/deps/mysqllite/include/my_global.h +++ /dev/null @@ -1,1482 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB, 2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* This is the include file that should be included 'first' in every C file. */ - -#ifndef _global_h -#define _global_h - -/* Client library users on Windows need this macro defined here. */ -#if !defined(__WIN__) && defined(_WIN32) -#define __WIN__ -#endif - -/* - InnoDB depends on some MySQL internals which other plugins should not - need. This is because of InnoDB's foreign key support, "safe" binlog - truncation, and other similar legacy features. - - We define accessors for these internals unconditionally, but do not - expose them in mysql/plugin.h. They are declared in ha_innodb.h for - InnoDB's use. -*/ -#define INNODB_COMPATIBILITY_HOOKS - -#ifdef __CYGWIN__ -/* We use a Unix API, so pretend it's not Windows */ -#undef WIN -#undef WIN32 -#undef _WIN -#undef _WIN32 -#undef _WIN64 -#undef __WIN__ -#undef __WIN32__ -#define HAVE_ERRNO_AS_DEFINE -#endif /* __CYGWIN__ */ - -/* to make command line shorter we'll define USE_PRAGMA_INTERFACE here */ -#ifdef USE_PRAGMA_IMPLEMENTATION -#define USE_PRAGMA_INTERFACE -#endif - -#if defined(__OpenBSD__) && (OpenBSD >= 200411) -#define HAVE_ERRNO_AS_DEFINE -#endif - -#if defined(i386) && !defined(__i386__) -#define __i386__ -#endif - -/* Macros to make switching between C and C++ mode easier */ -#ifdef __cplusplus -#define C_MODE_START extern "C" { -#define C_MODE_END } -#else -#define C_MODE_START -#define C_MODE_END -#endif - -#ifdef __cplusplus -#define CPP_UNNAMED_NS_START namespace { -#define CPP_UNNAMED_NS_END } -#endif - -#include - -#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE -#define HAVE_PSI_INTERFACE -#endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */ - -/* Make it easier to add conditional code in _expressions_ */ -#ifdef __WIN__ -#define IF_WIN(A,B) A -#else -#define IF_WIN(A,B) B -#endif - -#ifdef HAVE_purify -#define IF_PURIFY(A,B) A -#else -#define IF_PURIFY(A,B) B -#endif - -#ifndef EMBEDDED_LIBRARY -#ifdef WITH_NDB_BINLOG -#define HAVE_NDB_BINLOG 1 -#endif -#endif /* !EMBEDDED_LIBRARY */ - -#ifndef EMBEDDED_LIBRARY -#define HAVE_REPLICATION -#define HAVE_EXTERNAL_CLIENT -#endif - -#if defined (_WIN32) -/* - off_t is 32 bit long. We do not use C runtime functions - with off_t but native Win32 file IO APIs, that work with - 64 bit offsets. -*/ -#undef SIZEOF_OFF_T -#define SIZEOF_OFF_T 8 - -/* - Prevent inclusion of Windows GDI headers - they define symbol - ERROR that conflicts with mysql headers. -*/ -#ifndef NOGDI -#define NOGDI -#endif - -/* Include common headers.*/ -#include -#include /* SOCKET */ -#include /* access(), chmod() */ -#include /* getpid() */ - -#define sleep(a) Sleep((a)*1000) - -/* Define missing access() modes. */ -#define F_OK 0 -#define W_OK 2 - -/* Define missing file locking constants. */ -#define F_RDLCK 1 -#define F_WRLCK 2 -#define F_UNLCK 3 -#define F_TO_EOF 0x3FFFFFFF - -/* Shared memory and named pipe connections are supported. */ -#define HAVE_SMEM 1 -#define HAVE_NAMED_PIPE 1 -#define shared_memory_buffer_length 16000 -#define default_shared_memory_base_name "MYSQL" -#endif /* _WIN32*/ - - -/* Workaround for _LARGE_FILES and _LARGE_FILE_API incompatibility on AIX */ -#if defined(_AIX) && defined(_LARGE_FILE_API) -#undef _LARGE_FILE_API -#endif - -/* - The macros below are used to allow build of Universal/fat binaries of - MySQL and MySQL applications under darwin. -*/ -#if defined(__APPLE__) && defined(__MACH__) -# undef SIZEOF_CHARP -# undef SIZEOF_SHORT -# undef SIZEOF_INT -# undef SIZEOF_LONG -# undef SIZEOF_LONG_LONG -# undef SIZEOF_OFF_T -# undef WORDS_BIGENDIAN -# define SIZEOF_SHORT 2 -# define SIZEOF_INT 4 -# define SIZEOF_LONG_LONG 8 -# define SIZEOF_OFF_T 8 -# if defined(__i386__) || defined(__ppc__) -# define SIZEOF_CHARP 4 -# define SIZEOF_LONG 4 -# elif defined(__x86_64__) || defined(__ppc64__) -# define SIZEOF_CHARP 8 -# define SIZEOF_LONG 8 -# else -# error Building FAT binary for an unknown architecture. -# endif -# if defined(__ppc__) || defined(__ppc64__) -# define WORDS_BIGENDIAN -# endif -#endif /* defined(__APPLE__) && defined(__MACH__) */ - - -/* - The macros below are borrowed from include/linux/compiler.h in the - Linux kernel. Use them to indicate the likelyhood of the truthfulness - of a condition. This serves two purposes - newer versions of gcc will be - able to optimize for branch predication, which could yield siginficant - performance gains in frequently executed sections of the code, and the - other reason to use them is for documentation -*/ - -#if !defined(__GNUC__) || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) -#define __builtin_expect(x, expected_value) (x) -#endif - -#define likely(x) __builtin_expect((x),1) -#define unlikely(x) __builtin_expect((x),0) - -/* Fix problem with S_ISLNK() on Linux */ -#if defined(TARGET_OS_LINUX) || defined(__GLIBC__) -#undef _GNU_SOURCE -#define _GNU_SOURCE 1 -#endif - -/* - Temporary solution to solve bug#7156. Include "sys/types.h" before - the thread headers, else the function madvise() will not be defined -*/ -#if defined(HAVE_SYS_TYPES_H) && ( defined(sun) || defined(__sun) ) -#include -#endif - -#ifdef HAVE_THREADS_WITHOUT_SOCKETS -/* MIT pthreads does not work with unix sockets */ -#undef HAVE_SYS_UN_H -#endif - -#define __EXTENSIONS__ 1 /* We want some extension */ -#ifndef __STDC_EXT__ -#define __STDC_EXT__ 1 /* To get large file support on hpux */ -#endif - -/* - Solaris 9 include file refers to X/Open document - - System Interfaces and Headers, Issue 5 - - saying we should define _XOPEN_SOURCE=500 to get POSIX.1c prototypes, - but apparently other systems (namely FreeBSD) don't agree. - - On a newer Solaris 10, the above file recognizes also _XOPEN_SOURCE=600. - Furthermore, it tests that if a program requires older standard - (_XOPEN_SOURCE<600 or _POSIX_C_SOURCE<200112L) it cannot be - run on a new compiler (that defines _STDC_C99) and issues an #error. - It's also an #error if a program requires new standard (_XOPEN_SOURCE=600 - or _POSIX_C_SOURCE=200112L) and a compiler does not define _STDC_C99. - - To add more to this mess, Sun Studio C compiler defines _STDC_C99 while - C++ compiler does not! - - So, in a desperate attempt to get correct prototypes for both - C and C++ code, we define either _XOPEN_SOURCE=600 or _XOPEN_SOURCE=500 - depending on the compiler's announced C standard support. - - Cleaner solutions are welcome. -*/ -#ifdef __sun -#if __STDC_VERSION__ - 0 >= 199901L -#define _XOPEN_SOURCE 600 -#else -#define _XOPEN_SOURCE 500 -#endif -#endif - -#if !defined(__WIN__) -#ifndef _POSIX_PTHREAD_SEMANTICS -#define _POSIX_PTHREAD_SEMANTICS /* We want posix threads */ -#endif - -#if !defined(SCO) -#define _REENTRANT 1 /* Some thread libraries require this */ -#endif -#if !defined(_THREAD_SAFE) && !defined(_AIX) -#define _THREAD_SAFE /* Required for OSF1 */ -#endif -#if defined(HPUX10) || defined(HPUX11) -C_MODE_START /* HPUX needs this, signal.h bug */ -#include -C_MODE_END -#else -#include /* AIX must have this included first */ -#endif -#if !defined(SCO) && !defined(_REENTRANT) -#define _REENTRANT 1 /* Threads requires reentrant code */ -#endif -#endif /* !defined(__WIN__) */ - -/* Go around some bugs in different OS and compilers */ -#ifdef _AIX /* By soren@t.dk */ -#define _H_STRINGS -#define _SYS_STREAM_H -/* #define _AIX32_CURSES */ /* XXX: this breaks AIX 4.3.3 (others?). */ -#define ulonglong2double(A) my_ulonglong2double(A) -#define my_off_t2double(A) my_ulonglong2double(A) -C_MODE_START -double my_ulonglong2double(unsigned long long A); -C_MODE_END -#endif /* _AIX */ - -#ifdef HAVE_BROKEN_SNPRINTF /* HPUX 10.20 don't have this defined */ -#undef HAVE_SNPRINTF -#endif -#ifdef HAVE_BROKEN_PREAD -/* - pread()/pwrite() are not 64 bit safe on HP-UX 11.0 without - installing the kernel patch PHKL_20349 or greater -*/ -#undef HAVE_PREAD -#undef HAVE_PWRITE -#endif - -#ifdef UNDEF_HAVE_GETHOSTBYNAME_R /* For OSF4.x */ -#undef HAVE_GETHOSTBYNAME_R -#endif -#ifdef UNDEF_HAVE_INITGROUPS /* For AIX 4.3 */ -#undef HAVE_INITGROUPS -#endif - -/* gcc/egcs issues */ - -#if defined(__GNUC) && defined(__EXCEPTIONS) -#error "Please add -fno-exceptions to CXXFLAGS and reconfigure/recompile" -#endif - -#if defined(_lint) && !defined(lint) -#define lint -#endif -#if SIZEOF_LONG_LONG > 4 && !defined(_LONG_LONG) -#define _LONG_LONG 1 /* For AIX string library */ -#endif - -#ifndef stdin -#include -#endif -#include -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STDDEF_H -#include -#endif - -#include -#ifdef HAVE_LIMITS_H -#include -#endif -#ifdef HAVE_FLOAT_H -#include -#endif -#ifdef HAVE_FENV_H -#include /* For fesetround() */ -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_FCNTL_H -#include -#endif -#ifdef HAVE_SYS_TIMEB_H -#include /* Avoid warnings on SCO */ -#endif -#if TIME_WITH_SYS_TIME -# include -# include -#else -# if HAVE_SYS_TIME_H -# include -# else -# include -# endif -#endif /* TIME_WITH_SYS_TIME */ -#ifdef HAVE_UNISTD_H -#include -#endif -#if defined(__cplusplus) && defined(NO_CPLUSPLUS_ALLOCA) -#undef HAVE_ALLOCA -#undef HAVE_ALLOCA_H -#endif -#ifdef HAVE_ALLOCA_H -#include -#endif - -#include /* Recommended by debian */ -/* We need the following to go around a problem with openssl on solaris */ -#if defined(HAVE_CRYPT_H) -#include -#endif - -/* - A lot of our programs uses asserts, so better to always include it - This also fixes a problem when people uses DBUG_ASSERT without including - assert.h -*/ -#include - -/* an assert that works at compile-time. only for constant expression */ -#ifndef __GNUC__ -#define compile_time_assert(X) do { } while(0) -#else -#define compile_time_assert(X) \ - do \ - { \ - typedef char compile_time_assert[(X) ? 1 : -1]; \ - } while(0) -#endif - -/* Go around some bugs in different OS and compilers */ -#if defined (HPUX11) && defined(_LARGEFILE_SOURCE) -#ifndef _LARGEFILE64_SOURCE -#define _LARGEFILE64_SOURCE -#endif -#endif - -#if defined(_HPUX_SOURCE) && defined(HAVE_SYS_STREAM_H) -#include /* HPUX 10.20 defines ulong here. UGLY !!! */ -#define HAVE_ULONG -#endif -#if defined(HPUX10) && defined(_LARGEFILE64_SOURCE) -/* Fix bug in setrlimit */ -#undef setrlimit -#define setrlimit cma_setrlimit64 -#endif -/* Declare madvise where it is not declared for C++, like Solaris */ -#if HAVE_MADVISE && !HAVE_DECL_MADVISE && defined(__cplusplus) -extern "C" int madvise(void *addr, size_t len, int behav); -#endif - -#define QUOTE_ARG(x) #x /* Quote argument (before cpp) */ -#define STRINGIFY_ARG(x) QUOTE_ARG(x) /* Quote argument, after cpp */ - -/* Paranoid settings. Define I_AM_PARANOID if you are paranoid */ -#ifdef I_AM_PARANOID -#define DONT_ALLOW_USER_CHANGE 1 -#define DONT_USE_MYSQL_PWD 1 -#endif - -/* Does the system remember a signal handler after a signal ? */ -#if !defined(HAVE_BSD_SIGNALS) && !defined(HAVE_SIGACTION) -#define SIGNAL_HANDLER_RESET_ON_DELIVERY -#endif - -/* - Deprecated workaround for false-positive uninitialized variables - warnings. Those should be silenced using tool-specific heuristics. - - Enabled by default for g++ due to the bug referenced below. -*/ -#if defined(_lint) || defined(FORCE_INIT_OF_VARS) || \ - (defined(__GNUC__) && defined(__cplusplus)) -#define LINT_INIT(var) var= 0 -#else -#define LINT_INIT(var) -#endif - -#ifndef SO_EXT -#ifdef _WIN32 -#define SO_EXT ".dll" -#elif defined(__APPLE__) -#define SO_EXT ".dylib" -#else -#define SO_EXT ".so" -#endif -#endif - -/* - Suppress uninitialized variable warning without generating code. - - The _cplusplus is a temporary workaround for C++ code pending a fix - for a g++ bug (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34772). -*/ -#if defined(_lint) || defined(FORCE_INIT_OF_VARS) || \ - defined(__cplusplus) || !defined(__GNUC__) -#define UNINIT_VAR(x) x= 0 -#else -/* GCC specific self-initialization which inhibits the warning. */ -#define UNINIT_VAR(x) x= x -#endif - -#if !defined(HAVE_UINT) -#undef HAVE_UINT -#define HAVE_UINT -typedef unsigned int uint; -typedef unsigned short ushort; -#endif - -#define swap_variables(t, a, b) { t dummy; dummy= a; a= b; b= dummy; } -#define test(a) ((a) ? 1 : 0) -#define set_if_bigger(a,b) do { if ((a) < (b)) (a)=(b); } while(0) -#define set_if_smaller(a,b) do { if ((a) > (b)) (a)=(b); } while(0) -#define test_all_bits(a,b) (((a) & (b)) == (b)) -#define array_elements(A) ((uint) (sizeof(A)/sizeof(A[0]))) - -/* Define some general constants */ -#ifndef TRUE -#define TRUE (1) /* Logical true */ -#define FALSE (0) /* Logical false */ -#endif - -#include - -/* - Wen using the embedded library, users might run into link problems, - duplicate declaration of __cxa_pure_virtual, solved by declaring it a - weak symbol. -*/ -#if defined(USE_MYSYS_NEW) && ! defined(DONT_DECLARE_CXA_PURE_VIRTUAL) -C_MODE_START -int __cxa_pure_virtual () __attribute__ ((weak)); -C_MODE_END -#endif - -/* The DBUG_ON flag always takes precedence over default DBUG_OFF */ -#if defined(DBUG_ON) && defined(DBUG_OFF) -#undef DBUG_OFF -#endif - -/* We might be forced to turn debug off, if not turned off already */ -#if (defined(FORCE_DBUG_OFF) || defined(_lint)) && !defined(DBUG_OFF) -# define DBUG_OFF -# ifdef DBUG_ON -# undef DBUG_ON -# endif -#endif - -/* Some types that is different between systems */ - -typedef int File; /* File descriptor */ -#ifdef _WIN32 -typedef SOCKET my_socket; -#else -typedef int my_socket; /* File descriptor for sockets */ -#define INVALID_SOCKET -1 -#endif -/* Type for fuctions that handles signals */ -#define sig_handler RETSIGTYPE -C_MODE_START -typedef void (*sig_return)();/* Returns type from signal */ -C_MODE_END -#if defined(__GNUC__) && !defined(_lint) -typedef char pchar; /* Mixed prototypes can take char */ -typedef char puchar; /* Mixed prototypes can take char */ -typedef char pbool; /* Mixed prototypes can take char */ -typedef short pshort; /* Mixed prototypes can take short int */ -typedef float pfloat; /* Mixed prototypes can take float */ -#else -typedef int pchar; /* Mixed prototypes can't take char */ -typedef uint puchar; /* Mixed prototypes can't take char */ -typedef int pbool; /* Mixed prototypes can't take char */ -typedef int pshort; /* Mixed prototypes can't take short int */ -typedef double pfloat; /* Mixed prototypes can't take float */ -#endif -C_MODE_START -typedef int (*qsort_cmp)(const void *,const void *); -typedef int (*qsort_cmp2)(void*, const void *,const void *); -C_MODE_END -#define qsort_t RETQSORTTYPE /* Broken GCC cant handle typedef !!!! */ -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -typedef SOCKET_SIZE_TYPE size_socket; - -#ifndef SOCKOPT_OPTLEN_TYPE -#define SOCKOPT_OPTLEN_TYPE size_socket -#endif - -/* file create flags */ - -#ifndef O_SHARE /* Probably not windows */ -#define O_SHARE 0 /* Flag to my_open for shared files */ -#ifndef O_BINARY -#define O_BINARY 0 /* Flag to my_open for binary files */ -#endif -#ifndef FILE_BINARY -#define FILE_BINARY O_BINARY /* Flag to my_fopen for binary streams */ -#endif -#ifdef HAVE_FCNTL -#define HAVE_FCNTL_LOCK -#define F_TO_EOF 0L /* Param to lockf() to lock rest of file */ -#endif -#endif /* O_SHARE */ - -#ifndef O_TEMPORARY -#define O_TEMPORARY 0 -#endif -#ifndef O_SHORT_LIVED -#define O_SHORT_LIVED 0 -#endif -#ifndef O_NOFOLLOW -#define O_NOFOLLOW 0 -#endif - -/* additional file share flags for win32 */ -#ifdef __WIN__ -#define _SH_DENYRWD 0x110 /* deny read/write mode & delete */ -#define _SH_DENYWRD 0x120 /* deny write mode & delete */ -#define _SH_DENYRDD 0x130 /* deny read mode & delete */ -#define _SH_DENYDEL 0x140 /* deny delete only */ -#endif /* __WIN__ */ - - -/* General constants */ -#define FN_LEN 256 /* Max file name len */ -#define FN_HEADLEN 253 /* Max length of filepart of file name */ -#define FN_EXTLEN 20 /* Max length of extension (part of FN_LEN) */ -#define FN_REFLEN 512 /* Max length of full path-name */ -#define FN_EXTCHAR '.' -#define FN_HOMELIB '~' /* ~/ is used as abbrev for home dir */ -#define FN_CURLIB '.' /* ./ is used as abbrev for current dir */ -#define FN_PARENTDIR ".." /* Parent directory; Must be a string */ - -#ifdef _WIN32 -#define FN_LIBCHAR '\\' -#define FN_LIBCHAR2 '/' -#define FN_DIRSEP "/\\" /* Valid directory separators */ -#define FN_ROOTDIR "\\" -#define FN_DEVCHAR ':' -#define FN_NETWORK_DRIVES /* Uses \\ to indicate network drives */ -#define FN_NO_CASE_SENCE /* Files are not case-sensitive */ -#else -#define FN_LIBCHAR '/' -#define FN_LIBCHAR2 '/' -#define FN_DIRSEP "/" /* Valid directory separators */ -#define FN_ROOTDIR "/" -#endif - -/* - MY_FILE_MIN is Windows speciality and is used to quickly detect - the mismatch of CRT and mysys file IO usage on Windows at runtime. - CRT file descriptors can be in the range 0-2047, whereas descriptors returned - by my_open() will start with 2048. If a file descriptor with value less then - MY_FILE_MIN is passed to mysys IO function, chances are it stemms from - open()/fileno() and not my_open()/my_fileno. - - For Posix, mysys functions are light wrappers around libc, and MY_FILE_MIN - is logically 0. -*/ - -#ifdef _WIN32 -#define MY_FILE_MIN 2048 -#else -#define MY_FILE_MIN 0 -#endif - -/* - MY_NFILE is the default size of my_file_info array. - - It is larger on Windows, because it all file handles are stored in my_file_info - Default size is 16384 and this should be enough for most cases.If it is not - enough, --max-open-files with larger value can be used. - - For Posix , my_file_info array is only used to store filenames for - error reporting and its size is not a limitation for number of open files. -*/ -#ifdef _WIN32 -#define MY_NFILE (16384 + MY_FILE_MIN) -#else -#define MY_NFILE 64 -#endif - -#ifndef OS_FILE_LIMIT -#define OS_FILE_LIMIT UINT_MAX -#endif - -/* - Io buffer size; Must be a power of 2 and a multiple of 512. May be - smaller what the disk page size. This influences the speed of the - isam btree library. eg to big to slow. -*/ -#define IO_SIZE 4096 -/* - How much overhead does malloc have. The code often allocates - something like 1024-MALLOC_OVERHEAD bytes -*/ -#define MALLOC_OVERHEAD 8 - - /* get memory in huncs */ -#define ONCE_ALLOC_INIT (uint) (4096-MALLOC_OVERHEAD) - /* Typical record cash */ -#define RECORD_CACHE_SIZE (uint) (64*1024-MALLOC_OVERHEAD) - /* Typical key cash */ -#define KEY_CACHE_SIZE (uint) (8*1024*1024) - /* Default size of a key cache block */ -#define KEY_CACHE_BLOCK_SIZE (uint) 1024 - - - /* Some things that this system doesn't have */ - -#ifdef _WIN32 -#define NO_DIR_LIBRARY /* Not standard dir-library */ -#endif - -/* Some defines of functions for portability */ - -#undef remove /* Crashes MySQL on SCO 5.0.0 */ -#ifndef __WIN__ -#define closesocket(A) close(A) -#endif - -#if (_MSC_VER) -#if !defined(_WIN64) -inline double my_ulonglong2double(unsigned long long value) -{ - long long nr=(long long) value; - if (nr >= 0) - return (double) nr; - return (18446744073709551616.0 + (double) nr); -} -#define ulonglong2double my_ulonglong2double -#define my_off_t2double my_ulonglong2double -#endif /* _WIN64 */ -inline unsigned long long my_double2ulonglong(double d) -{ - double t= d - (double) 0x8000000000000000ULL; - - if (t >= 0) - return ((unsigned long long) t) + 0x8000000000000000ULL; - return (unsigned long long) d; -} -#define double2ulonglong my_double2ulonglong -#endif - -#ifndef ulonglong2double -#define ulonglong2double(A) ((double) (ulonglong) (A)) -#define my_off_t2double(A) ((double) (my_off_t) (A)) -#endif -#ifndef double2ulonglong -#define double2ulonglong(A) ((ulonglong) (double) (A)) -#endif - -#ifndef offsetof -#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) -#endif -#define ulong_to_double(X) ((double) (ulong) (X)) - -#ifndef STACK_DIRECTION -#error "please add -DSTACK_DIRECTION=1 or -1 to your CPPFLAGS" -#endif - -#if !defined(HAVE_STRTOK_R) -#define strtok_r(A,B,C) strtok((A),(B)) -#endif - -/* This is from the old m-machine.h file */ - -#if SIZEOF_LONG_LONG > 4 -#define HAVE_LONG_LONG 1 -#endif - -/* - Some pre-ANSI-C99 systems like AIX 5.1 and Linux/GCC 2.95 define - ULONGLONG_MAX, LONGLONG_MIN, LONGLONG_MAX; we use them if they're defined. -*/ - -#if defined(HAVE_LONG_LONG) && !defined(LONGLONG_MIN) -#define LONGLONG_MIN ((long long) 0x8000000000000000LL) -#define LONGLONG_MAX ((long long) 0x7FFFFFFFFFFFFFFFLL) -#endif - -#if defined(HAVE_LONG_LONG) && !defined(ULONGLONG_MAX) -/* First check for ANSI C99 definition: */ -#ifdef ULLONG_MAX -#define ULONGLONG_MAX ULLONG_MAX -#else -#define ULONGLONG_MAX ((unsigned long long)(~0ULL)) -#endif -#endif /* defined (HAVE_LONG_LONG) && !defined(ULONGLONG_MAX)*/ - -#define INT_MIN64 (~0x7FFFFFFFFFFFFFFFLL) -#define INT_MAX64 0x7FFFFFFFFFFFFFFFLL -#define INT_MIN32 (~0x7FFFFFFFL) -#define INT_MAX32 0x7FFFFFFFL -#define UINT_MAX32 0xFFFFFFFFL -#define INT_MIN24 (~0x007FFFFF) -#define INT_MAX24 0x007FFFFF -#define UINT_MAX24 0x00FFFFFF -#define INT_MIN16 (~0x7FFF) -#define INT_MAX16 0x7FFF -#define UINT_MAX16 0xFFFF -#define INT_MIN8 (~0x7F) -#define INT_MAX8 0x7F -#define UINT_MAX8 0xFF - -/* From limits.h instead */ -#ifndef DBL_MIN -#define DBL_MIN 4.94065645841246544e-324 -#define FLT_MIN ((float)1.40129846432481707e-45) -#endif -#ifndef DBL_MAX -#define DBL_MAX 1.79769313486231470e+308 -#define FLT_MAX ((float)3.40282346638528860e+38) -#endif -#ifndef SIZE_T_MAX -#define SIZE_T_MAX (~((size_t) 0)) -#endif - -#ifdef HAVE_FINITE -#define isfinite(x) finite(x) -#else -#define finite(x) (1.0 / fabs(x) > 0.0) -#endif /* HAVE_FINITE */ -#define isfinite(x) (1.0 / fabs(x) > 0.0) - -#ifndef HAVE_ISNAN -#define isnan(x) ((x) != (x)) -#endif - -#ifdef HAVE_ISINF -/* Check if C compiler is affected by GCC bug #39228 */ -#if !defined(__cplusplus) && defined(HAVE_BROKEN_ISINF) -/* Force store/reload of the argument to/from a 64-bit double */ -static inline double my_isinf(double x) -{ - volatile double t= x; - return isinf(t); -} -#else -/* System-provided isinf() is available and safe to use */ -#define my_isinf(X) isinf(X) -#endif -#else /* !HAVE_ISINF */ -#define my_isinf(X) (!finite(X) && !isnan(X)) -#endif - -/* Define missing math constants. */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#ifndef M_E -#define M_E 2.7182818284590452354 -#endif -#ifndef M_LN2 -#define M_LN2 0.69314718055994530942 -#endif - -/* - Max size that must be added to a so that we know Size to make - adressable obj. -*/ -#if SIZEOF_CHARP == 4 -typedef long my_ptrdiff_t; -#else -typedef long long my_ptrdiff_t; -#endif - -#define MY_ALIGN(A,L) (((A) + (L) - 1) & ~((L) - 1)) -#define ALIGN_SIZE(A) MY_ALIGN((A),sizeof(double)) -/* Size to make adressable obj. */ -#define ADD_TO_PTR(ptr,size,type) (type) ((uchar*) (ptr)+size) -#define PTR_BYTE_DIFF(A,B) (my_ptrdiff_t) ((uchar*) (A) - (uchar*) (B)) - -/* - Custom version of standard offsetof() macro which can be used to get - offsets of members in class for non-POD types (according to the current - version of C++ standard offsetof() macro can't be used in such cases and - attempt to do so causes warnings to be emitted, OTOH in many cases it is - still OK to assume that all instances of the class has the same offsets - for the same members). - - This is temporary solution which should be removed once File_parser class - and related routines are refactored. -*/ - -#define my_offsetof(TYPE, MEMBER) \ - ((size_t)((char *)&(((TYPE *)0x10)->MEMBER) - (char*)0x10)) - -#define NullS (char *) 0 - -#ifdef STDCALL -#undef STDCALL -#endif - -#ifdef _WIN32 -#define STDCALL __stdcall -#else -#define STDCALL -#endif - -/* Typdefs for easyier portability */ - -#ifndef HAVE_UCHAR -typedef unsigned char uchar; /* Short for unsigned char */ -#endif - -#ifndef HAVE_INT8 -typedef signed char int8; /* Signed integer >= 8 bits */ -#endif -#ifndef HAVE_UINT8 -typedef unsigned char uint8; /* Unsigned integer >= 8 bits */ -#endif -#ifndef HAVE_INT16 -typedef short int16; -#endif -#ifndef HAVE_UINT16 -typedef unsigned short uint16; -#endif -#if SIZEOF_INT == 4 -#ifndef HAVE_INT32 -typedef int int32; -#endif -#ifndef HAVE_UINT32 -typedef unsigned int uint32; -#endif -#elif SIZEOF_LONG == 4 -#ifndef HAVE_INT32 -typedef long int32; -#endif -#ifndef HAVE_UINT32 -typedef unsigned long uint32; -#endif -#else -#error Neither int or long is of 4 bytes width -#endif - -#if !defined(HAVE_ULONG) && !defined(__USE_MISC) -typedef unsigned long ulong; /* Short for unsigned long */ -#endif -#ifndef longlong_defined -/* - Using [unsigned] long long is preferable as [u]longlong because we use - [unsigned] long long unconditionally in many places, - for example in constants with [U]LL suffix. -*/ -#if defined(HAVE_LONG_LONG) && SIZEOF_LONG_LONG == 8 -typedef unsigned long long int ulonglong; /* ulong or unsigned long long */ -typedef long long int longlong; -#else -typedef unsigned long ulonglong; /* ulong or unsigned long long */ -typedef long longlong; -#endif -#endif -#ifndef HAVE_INT64 -typedef longlong int64; -#endif -#ifndef HAVE_UINT64 -typedef ulonglong uint64; -#endif - -#if defined(NO_CLIENT_LONG_LONG) -typedef unsigned long my_ulonglong; -#elif defined (__WIN__) -typedef unsigned __int64 my_ulonglong; -#else -typedef unsigned long long my_ulonglong; -#endif - -#if SIZEOF_CHARP == SIZEOF_INT -typedef int intptr; -#elif SIZEOF_CHARP == SIZEOF_LONG -typedef long intptr; -#elif SIZEOF_CHARP == SIZEOF_LONG_LONG -typedef long long intptr; -#else -#error sizeof(void *) is neither sizeof(int) nor sizeof(long) nor sizeof(long long) -#endif - -#define MY_ERRPTR ((void*)(intptr)1) - -#if defined(_WIN32) -typedef unsigned long long my_off_t; -typedef unsigned long long os_off_t; -#else -typedef off_t os_off_t; -#if SIZEOF_OFF_T > 4 -typedef ulonglong my_off_t; -#else -typedef unsigned long my_off_t; -#endif -#endif /*_WIN32*/ -#define MY_FILEPOS_ERROR (~(my_off_t) 0) - -/* - TODO Convert these to use Bitmap class. - */ -typedef ulonglong table_map; /* Used for table bits in join */ -typedef ulong nesting_map; /* Used for flags of nesting constructs */ - -#if defined(__WIN__) -#define socket_errno WSAGetLastError() -#define SOCKET_EINTR WSAEINTR -#define SOCKET_EAGAIN WSAEINPROGRESS -#define SOCKET_ETIMEDOUT WSAETIMEDOUT -#define SOCKET_EWOULDBLOCK WSAEWOULDBLOCK -#define SOCKET_EADDRINUSE WSAEADDRINUSE -#define SOCKET_ENFILE ENFILE -#define SOCKET_EMFILE EMFILE -#else /* Unix */ -#define socket_errno errno -#define closesocket(A) close(A) -#define SOCKET_EINTR EINTR -#define SOCKET_EAGAIN EAGAIN -#define SOCKET_ETIMEDOUT SOCKET_EINTR -#define SOCKET_EWOULDBLOCK EWOULDBLOCK -#define SOCKET_EADDRINUSE EADDRINUSE -#define SOCKET_ENFILE ENFILE -#define SOCKET_EMFILE EMFILE -#endif - -typedef int myf; /* Type of MyFlags in my_funcs */ -typedef char my_bool; /* Small bool */ - -/* Macros for converting *constants* to the right type */ -#define MYF(v) (myf) (v) - -#ifndef LL -#ifdef HAVE_LONG_LONG -#define LL(A) A ## LL -#else -#define LL(A) A ## L -#endif -#endif - -#ifndef ULL -#ifdef HAVE_LONG_LONG -#define ULL(A) A ## ULL -#else -#define ULL(A) A ## UL -#endif -#endif - -/* - Defines to make it possible to prioritize register assignments. No - longer that important with modern compilers. -*/ -#ifndef USING_X -#define reg1 register -#define reg2 register -#define reg3 register -#define reg4 register -#define reg5 register -#define reg6 register -#define reg7 register -#define reg8 register -#define reg9 register -#define reg10 register -#define reg11 register -#define reg12 register -#define reg13 register -#define reg14 register -#define reg15 register -#define reg16 register -#endif - -#include - -/* Some helper macros */ -#define YESNO(X) ((X) ? "yes" : "no") - -#define MY_HOW_OFTEN_TO_ALARM 2 /* How often we want info on screen */ -#define MY_HOW_OFTEN_TO_WRITE 1000 /* How often we want info on screen */ - - - -/* - Define-funktions for reading and storing in machine independent format - (low byte first) -*/ - -/* Optimized store functions for Intel x86 */ -#if defined(__i386__) || defined(_WIN32) -#define sint2korr(A) (*((int16 *) (A))) -#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \ - (((uint32) 255L << 24) | \ - (((uint32) (uchar) (A)[2]) << 16) |\ - (((uint32) (uchar) (A)[1]) << 8) | \ - ((uint32) (uchar) (A)[0])) : \ - (((uint32) (uchar) (A)[2]) << 16) |\ - (((uint32) (uchar) (A)[1]) << 8) | \ - ((uint32) (uchar) (A)[0]))) -#define sint4korr(A) (*((long *) (A))) -#define uint2korr(A) (*((uint16 *) (A))) -#if defined(HAVE_purify) && !defined(_WIN32) -#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ - (((uint32) ((uchar) (A)[1])) << 8) +\ - (((uint32) ((uchar) (A)[2])) << 16)) -#else -/* - ATTENTION ! - - Please, note, uint3korr reads 4 bytes (not 3) ! - It means, that you have to provide enough allocated space ! -*/ -#define uint3korr(A) (long) (*((unsigned int *) (A)) & 0xFFFFFF) -#endif /* HAVE_purify && !_WIN32 */ -#define uint4korr(A) (*((uint32 *) (A))) -#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ - (((uint32) ((uchar) (A)[1])) << 8) +\ - (((uint32) ((uchar) (A)[2])) << 16) +\ - (((uint32) ((uchar) (A)[3])) << 24)) +\ - (((ulonglong) ((uchar) (A)[4])) << 32)) -#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) + \ - (((uint32) ((uchar) (A)[1])) << 8) + \ - (((uint32) ((uchar) (A)[2])) << 16) + \ - (((uint32) ((uchar) (A)[3])) << 24)) + \ - (((ulonglong) ((uchar) (A)[4])) << 32) + \ - (((ulonglong) ((uchar) (A)[5])) << 40)) -#define uint8korr(A) (*((ulonglong *) (A))) -#define sint8korr(A) (*((longlong *) (A))) -#define int2store(T,A) *((uint16*) (T))= (uint16) (A) -#define int3store(T,A) do { *(T)= (uchar) ((A));\ - *(T+1)=(uchar) (((uint) (A) >> 8));\ - *(T+2)=(uchar) (((A) >> 16)); } while (0) -#define int4store(T,A) *((long *) (T))= (long) (A) -#define int5store(T,A) do { *(T)= (uchar)((A));\ - *((T)+1)=(uchar) (((A) >> 8));\ - *((T)+2)=(uchar) (((A) >> 16));\ - *((T)+3)=(uchar) (((A) >> 24)); \ - *((T)+4)=(uchar) (((A) >> 32)); } while(0) -#define int6store(T,A) do { *(T)= (uchar)((A)); \ - *((T)+1)=(uchar) (((A) >> 8)); \ - *((T)+2)=(uchar) (((A) >> 16)); \ - *((T)+3)=(uchar) (((A) >> 24)); \ - *((T)+4)=(uchar) (((A) >> 32)); \ - *((T)+5)=(uchar) (((A) >> 40)); } while(0) -#define int8store(T,A) *((ulonglong *) (T))= (ulonglong) (A) - -typedef union { - double v; - long m[2]; -} doubleget_union; -#define doubleget(V,M) \ -do { doubleget_union _tmp; \ - _tmp.m[0] = *((long*)(M)); \ - _tmp.m[1] = *(((long*) (M))+1); \ - (V) = _tmp.v; } while(0) -#define doublestore(T,V) do { *((long *) T) = ((doubleget_union *)&V)->m[0]; \ - *(((long *) T)+1) = ((doubleget_union *)&V)->m[1]; \ - } while (0) -#define float4get(V,M) do { *((float *) &(V)) = *((float*) (M)); } while(0) -#define float8get(V,M) doubleget((V),(M)) -#define float4store(V,M) memcpy((uchar*) V,(uchar*) (&M),sizeof(float)) -#define floatstore(T,V) memcpy((uchar*)(T), (uchar*)(&V),sizeof(float)) -#define floatget(V,M) memcpy((uchar*) &V,(uchar*) (M),sizeof(float)) -#define float8store(V,M) doublestore((V),(M)) -#else - -/* - We're here if it's not a IA-32 architecture (Win32 and UNIX IA-32 defines - were done before) -*/ -#define sint2korr(A) (int16) (((int16) ((uchar) (A)[0])) +\ - ((int16) ((int16) (A)[1]) << 8)) -#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \ - (((uint32) 255L << 24) | \ - (((uint32) (uchar) (A)[2]) << 16) |\ - (((uint32) (uchar) (A)[1]) << 8) | \ - ((uint32) (uchar) (A)[0])) : \ - (((uint32) (uchar) (A)[2]) << 16) |\ - (((uint32) (uchar) (A)[1]) << 8) | \ - ((uint32) (uchar) (A)[0]))) -#define sint4korr(A) (int32) (((int32) ((uchar) (A)[0])) +\ - (((int32) ((uchar) (A)[1]) << 8)) +\ - (((int32) ((uchar) (A)[2]) << 16)) +\ - (((int32) ((int16) (A)[3]) << 24))) -#define sint8korr(A) (longlong) uint8korr(A) -#define uint2korr(A) (uint16) (((uint16) ((uchar) (A)[0])) +\ - ((uint16) ((uchar) (A)[1]) << 8)) -#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ - (((uint32) ((uchar) (A)[1])) << 8) +\ - (((uint32) ((uchar) (A)[2])) << 16)) -#define uint4korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ - (((uint32) ((uchar) (A)[1])) << 8) +\ - (((uint32) ((uchar) (A)[2])) << 16) +\ - (((uint32) ((uchar) (A)[3])) << 24)) -#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ - (((uint32) ((uchar) (A)[1])) << 8) +\ - (((uint32) ((uchar) (A)[2])) << 16) +\ - (((uint32) ((uchar) (A)[3])) << 24)) +\ - (((ulonglong) ((uchar) (A)[4])) << 32)) -#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) + \ - (((uint32) ((uchar) (A)[1])) << 8) + \ - (((uint32) ((uchar) (A)[2])) << 16) + \ - (((uint32) ((uchar) (A)[3])) << 24)) + \ - (((ulonglong) ((uchar) (A)[4])) << 32) + \ - (((ulonglong) ((uchar) (A)[5])) << 40)) -#define uint8korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ - (((uint32) ((uchar) (A)[1])) << 8) +\ - (((uint32) ((uchar) (A)[2])) << 16) +\ - (((uint32) ((uchar) (A)[3])) << 24)) +\ - (((ulonglong) (((uint32) ((uchar) (A)[4])) +\ - (((uint32) ((uchar) (A)[5])) << 8) +\ - (((uint32) ((uchar) (A)[6])) << 16) +\ - (((uint32) ((uchar) (A)[7])) << 24))) <<\ - 32)) -#define int2store(T,A) do { uint def_temp= (uint) (A) ;\ - *((uchar*) (T))= (uchar)(def_temp); \ - *((uchar*) (T)+1)=(uchar)((def_temp >> 8)); \ - } while(0) -#define int3store(T,A) do { /*lint -save -e734 */\ - *((uchar*)(T))=(uchar) ((A));\ - *((uchar*) (T)+1)=(uchar) (((A) >> 8));\ - *((uchar*)(T)+2)=(uchar) (((A) >> 16)); \ - /*lint -restore */} while(0) -#define int4store(T,A) do { *((char *)(T))=(char) ((A));\ - *(((char *)(T))+1)=(char) (((A) >> 8));\ - *(((char *)(T))+2)=(char) (((A) >> 16));\ - *(((char *)(T))+3)=(char) (((A) >> 24)); } while(0) -#define int5store(T,A) do { *((char *)(T))= (char)((A)); \ - *(((char *)(T))+1)= (char)(((A) >> 8)); \ - *(((char *)(T))+2)= (char)(((A) >> 16)); \ - *(((char *)(T))+3)= (char)(((A) >> 24)); \ - *(((char *)(T))+4)= (char)(((A) >> 32)); \ - } while(0) -#define int6store(T,A) do { *((char *)(T))= (char)((A)); \ - *(((char *)(T))+1)= (char)(((A) >> 8)); \ - *(((char *)(T))+2)= (char)(((A) >> 16)); \ - *(((char *)(T))+3)= (char)(((A) >> 24)); \ - *(((char *)(T))+4)= (char)(((A) >> 32)); \ - *(((char *)(T))+5)= (char)(((A) >> 40)); \ - } while(0) -#define int8store(T,A) do { uint def_temp= (uint) (A), def_temp2= (uint) ((A) >> 32); \ - int4store((T),def_temp); \ - int4store((T+4),def_temp2); } while(0) -#ifdef WORDS_BIGENDIAN -#define float4store(T,A) do { *(T)= ((uchar *) &A)[3];\ - *((T)+1)=(char) ((uchar *) &A)[2];\ - *((T)+2)=(char) ((uchar *) &A)[1];\ - *((T)+3)=(char) ((uchar *) &A)[0]; } while(0) - -#define float4get(V,M) do { float def_temp;\ - ((uchar*) &def_temp)[0]=(M)[3];\ - ((uchar*) &def_temp)[1]=(M)[2];\ - ((uchar*) &def_temp)[2]=(M)[1];\ - ((uchar*) &def_temp)[3]=(M)[0];\ - (V)=def_temp; } while(0) -#define float8store(T,V) do { *(T)= ((uchar *) &V)[7];\ - *((T)+1)=(char) ((uchar *) &V)[6];\ - *((T)+2)=(char) ((uchar *) &V)[5];\ - *((T)+3)=(char) ((uchar *) &V)[4];\ - *((T)+4)=(char) ((uchar *) &V)[3];\ - *((T)+5)=(char) ((uchar *) &V)[2];\ - *((T)+6)=(char) ((uchar *) &V)[1];\ - *((T)+7)=(char) ((uchar *) &V)[0]; } while(0) - -#define float8get(V,M) do { double def_temp;\ - ((uchar*) &def_temp)[0]=(M)[7];\ - ((uchar*) &def_temp)[1]=(M)[6];\ - ((uchar*) &def_temp)[2]=(M)[5];\ - ((uchar*) &def_temp)[3]=(M)[4];\ - ((uchar*) &def_temp)[4]=(M)[3];\ - ((uchar*) &def_temp)[5]=(M)[2];\ - ((uchar*) &def_temp)[6]=(M)[1];\ - ((uchar*) &def_temp)[7]=(M)[0];\ - (V) = def_temp; } while(0) -#else -#define float4get(V,M) memcpy(&V, (M), sizeof(float)) -#define float4store(V,M) memcpy(V, (&M), sizeof(float)) - -#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN) -#define doublestore(T,V) do { *(((char*)T)+0)=(char) ((uchar *) &V)[4];\ - *(((char*)T)+1)=(char) ((uchar *) &V)[5];\ - *(((char*)T)+2)=(char) ((uchar *) &V)[6];\ - *(((char*)T)+3)=(char) ((uchar *) &V)[7];\ - *(((char*)T)+4)=(char) ((uchar *) &V)[0];\ - *(((char*)T)+5)=(char) ((uchar *) &V)[1];\ - *(((char*)T)+6)=(char) ((uchar *) &V)[2];\ - *(((char*)T)+7)=(char) ((uchar *) &V)[3]; }\ - while(0) -#define doubleget(V,M) do { double def_temp;\ - ((uchar*) &def_temp)[0]=(M)[4];\ - ((uchar*) &def_temp)[1]=(M)[5];\ - ((uchar*) &def_temp)[2]=(M)[6];\ - ((uchar*) &def_temp)[3]=(M)[7];\ - ((uchar*) &def_temp)[4]=(M)[0];\ - ((uchar*) &def_temp)[5]=(M)[1];\ - ((uchar*) &def_temp)[6]=(M)[2];\ - ((uchar*) &def_temp)[7]=(M)[3];\ - (V) = def_temp; } while(0) -#endif /* __FLOAT_WORD_ORDER */ - -#define float8get(V,M) doubleget((V),(M)) -#define float8store(V,M) doublestore((V),(M)) -#endif /* WORDS_BIGENDIAN */ - -#endif /* __i386__ OR _WIN32 */ - -/* - Macro for reading 32-bit integer from network byte order (big-endian) - from unaligned memory location. -*/ -#define int4net(A) (int32) (((uint32) ((uchar) (A)[3])) |\ - (((uint32) ((uchar) (A)[2])) << 8) |\ - (((uint32) ((uchar) (A)[1])) << 16) |\ - (((uint32) ((uchar) (A)[0])) << 24)) -/* - Define-funktions for reading and storing in machine format from/to - short/long to/from some place in memory V should be a (not - register) variable, M is a pointer to byte -*/ - -#ifdef WORDS_BIGENDIAN - -#define ushortget(V,M) do { V = (uint16) (((uint16) ((uchar) (M)[1]))+\ - ((uint16) ((uint16) (M)[0]) << 8)); } while(0) -#define shortget(V,M) do { V = (short) (((short) ((uchar) (M)[1]))+\ - ((short) ((short) (M)[0]) << 8)); } while(0) -#define longget(V,M) do { int32 def_temp;\ - ((uchar*) &def_temp)[0]=(M)[0];\ - ((uchar*) &def_temp)[1]=(M)[1];\ - ((uchar*) &def_temp)[2]=(M)[2];\ - ((uchar*) &def_temp)[3]=(M)[3];\ - (V)=def_temp; } while(0) -#define ulongget(V,M) do { uint32 def_temp;\ - ((uchar*) &def_temp)[0]=(M)[0];\ - ((uchar*) &def_temp)[1]=(M)[1];\ - ((uchar*) &def_temp)[2]=(M)[2];\ - ((uchar*) &def_temp)[3]=(M)[3];\ - (V)=def_temp; } while(0) -#define shortstore(T,A) do { uint def_temp=(uint) (A) ;\ - *(((char*)T)+1)=(char)(def_temp); \ - *(((char*)T)+0)=(char)(def_temp >> 8); } while(0) -#define longstore(T,A) do { *(((char*)T)+3)=((A));\ - *(((char*)T)+2)=(((A) >> 8));\ - *(((char*)T)+1)=(((A) >> 16));\ - *(((char*)T)+0)=(((A) >> 24)); } while(0) - -#define floatget(V,M) memcpy(&V, (M), sizeof(float)) -#define floatstore(T,V) memcpy((T), (void*) (&V), sizeof(float)) -#define doubleget(V,M) memcpy(&V, (M), sizeof(double)) -#define doublestore(T,V) memcpy((T), (void *) &V, sizeof(double)) -#define longlongget(V,M) memcpy(&V, (M), sizeof(ulonglong)) -#define longlongstore(T,V) memcpy((T), &V, sizeof(ulonglong)) - -#else - -#define ushortget(V,M) do { V = uint2korr(M); } while(0) -#define shortget(V,M) do { V = sint2korr(M); } while(0) -#define longget(V,M) do { V = sint4korr(M); } while(0) -#define ulongget(V,M) do { V = uint4korr(M); } while(0) -#define shortstore(T,V) int2store(T,V) -#define longstore(T,V) int4store(T,V) -#ifndef floatstore -#define floatstore(T,V) memcpy((T), (void *) (&V), sizeof(float)) -#define floatget(V,M) memcpy(&V, (M), sizeof(float)) -#endif -#ifndef doubleget -#define doubleget(V,M) memcpy(&V, (M), sizeof(double)) -#define doublestore(T,V) memcpy((T), (void *) &V, sizeof(double)) -#endif /* doubleget */ -#define longlongget(V,M) memcpy(&V, (M), sizeof(ulonglong)) -#define longlongstore(T,V) memcpy((T), &V, sizeof(ulonglong)) - -#endif /* WORDS_BIGENDIAN */ - -#ifdef HAVE_CHARSET_utf8 -#define MYSQL_UNIVERSAL_CLIENT_CHARSET "utf8" -#else -#define MYSQL_UNIVERSAL_CLIENT_CHARSET MYSQL_DEFAULT_CHARSET_NAME -#endif - -#if defined(EMBEDDED_LIBRARY) && !defined(HAVE_EMBEDDED_PRIVILEGE_CONTROL) -#define NO_EMBEDDED_ACCESS_CHECKS -#endif - -#if defined(_WIN32) -#define dlsym(lib, name) (void*)GetProcAddress((HMODULE)lib, name) -#define dlopen(libname, unused) LoadLibraryEx(libname, NULL, 0) -#define dlclose(lib) FreeLibrary((HMODULE)lib) -#ifndef HAVE_DLOPEN -#define HAVE_DLOPEN -#endif -#endif - -#ifdef HAVE_DLOPEN -#if defined(HAVE_DLFCN_H) -#include -#endif -#endif - -#ifndef HAVE_DLERROR -#ifdef _WIN32 -#define dlerror() "" -#else -#define dlerror() "No support for dynamic loading (static build?)" -#endif -#endif - - -/* - * Include standard definitions of operator new and delete. - */ -#ifdef __cplusplus -#include -#endif - -/* Length of decimal number represented by INT32. */ -#define MY_INT32_NUM_DECIMAL_DIGITS 11 - -/* Length of decimal number represented by INT64. */ -#define MY_INT64_NUM_DECIMAL_DIGITS 21 - -/* Define some useful general macros (should be done after all headers). */ -#if !defined(max) -#define max(a, b) ((a) > (b) ? (a) : (b)) -#define min(a, b) ((a) < (b) ? (a) : (b)) -#endif - -/* - Only Linux is known to need an explicit sync of the directory to make sure a - file creation/deletion/renaming in(from,to) this directory durable. -*/ -#ifdef TARGET_OS_LINUX -#define NEED_EXPLICIT_SYNC_DIR 1 -#endif - -#if !defined(__cplusplus) && !defined(bool) -#define bool In_C_you_should_use_my_bool_instead() -#endif - -/* Provide __func__ macro definition for platforms that miss it. */ -#if __STDC_VERSION__ < 199901L -# if __GNUC__ >= 2 -# define __func__ __FUNCTION__ -# else -# define __func__ "" -# endif -#elif defined(_MSC_VER) -# if _MSC_VER < 1300 -# define __func__ "" -# else -# define __func__ __FUNCTION__ -# endif -#elif defined(__BORLANDC__) -# define __func__ __FUNC__ -#else -# define __func__ "" -#endif - -#ifndef HAVE_RINT -/** - All integers up to this number can be represented exactly as double precision - values (DBL_MANT_DIG == 53 for IEEE 754 hardware). -*/ -#define MAX_EXACT_INTEGER ((1LL << DBL_MANT_DIG) - 1) - -/** - rint(3) implementation for platforms that do not have it. - Always rounds to the nearest integer with ties being rounded to the nearest - even integer to mimic glibc's rint() behavior in the "round-to-nearest" - FPU mode. Hardware-specific optimizations are possible (frndint on x86). - Unlike this implementation, hardware will also honor the FPU rounding mode. -*/ - -static inline double rint(double x) -{ - double f, i; - f = modf(x, &i); - /* - All doubles with absolute values > MAX_EXACT_INTEGER are even anyway, - no need to check it. - */ - if (x > 0.0) - i += (double) ((f > 0.5) || (f == 0.5 && - i <= (double) MAX_EXACT_INTEGER && - (longlong) i % 2)); - else - i -= (double) ((f < -0.5) || (f == -0.5 && - i >= (double) -MAX_EXACT_INTEGER && - (longlong) i % 2)); - return i; -} -#endif /* HAVE_RINT */ - -/* - MYSQL_PLUGIN_IMPORT macro is used to export mysqld data - (i.e variables) for usage in storage engine loadable plugins. - Outside of Windows, it is dummy. -*/ -#ifndef MYSQL_PLUGIN_IMPORT -#if (defined(_WIN32) && defined(MYSQL_DYNAMIC_PLUGIN)) -#define MYSQL_PLUGIN_IMPORT __declspec(dllimport) -#else -#define MYSQL_PLUGIN_IMPORT -#endif -#endif - -/* Defines that are unique to the embedded version of MySQL */ - -#ifdef EMBEDDED_LIBRARY - -/* Things we don't need in the embedded version of MySQL */ -/* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */ - -#undef HAVE_OPENSSL -#undef HAVE_SMEM /* No shared memory */ -#undef HAVE_NDBCLUSTER_DB /* No NDB cluster */ - -#endif /* EMBEDDED_LIBRARY */ - -#endif /* my_global_h */ diff --git a/deps/mysqllite/include/my_list.h b/deps/mysqllite/include/my_list.h deleted file mode 100644 index ff086e1725b018..00000000000000 --- a/deps/mysqllite/include/my_list.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _list_h_ -#define _list_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct st_list { - struct st_list *prev,*next; - void *data; -} LIST; - -typedef int (*list_walk_action)(void *,void *); - -extern LIST *list_add(LIST *root,LIST *element); -extern LIST *list_delete(LIST *root,LIST *element); -extern LIST *list_cons(void *data,LIST *root); -extern LIST *list_reverse(LIST *root); -extern void list_free(LIST *root,unsigned int free_data); -extern unsigned int list_length(LIST *); -extern int list_walk(LIST *,list_walk_action action,unsigned char * argument); - -#define list_rest(a) ((a)->next) -#define list_push(a,b) (a)=list_cons((b),(a)) -#define list_pop(A) {LIST *old=(A); (A)=list_delete(old,old); my_free(old); } - -#ifdef __cplusplus -} -#endif -#endif diff --git a/deps/mysqllite/include/my_net.h b/deps/mysqllite/include/my_net.h deleted file mode 100644 index 5762f5da06e892..00000000000000 --- a/deps/mysqllite/include/my_net.h +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - This file is also used to make handling of sockets and ioctl() - portable accross systems. - -*/ - -#ifndef _my_net_h -#define _my_net_h - -#include "my_global.h" /* C_MODE_START, C_MODE_END */ - -C_MODE_START - -#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_ARPA_INET_H -#include -#endif -#ifdef HAVE_POLL -#include -#endif -#ifdef HAVE_SYS_IOCTL_H -#include -#endif - -#if !defined(__WIN__) && !defined(HAVE_BROKEN_NETINET_INCLUDES) -#include -#include -#include -#if !defined(alpha_linux_port) -#include -#endif -#endif - -#if defined(__WIN__) -#define O_NONBLOCK 1 /* For emulation of fcntl() */ - -/* - SHUT_RDWR is called SD_BOTH in windows and - is defined to 2 in winsock2.h - #define SD_BOTH 0x02 -*/ -#define SHUT_RDWR 0x02 - -#endif - -/* - On OSes which don't have the in_addr_t, we guess that using uint32 is the best - possible choice. We guess this from the fact that on HP-UX64bit & FreeBSD64bit - & Solaris64bit, in_addr_t is equivalent to uint32. And on Linux32bit too. -*/ -#ifndef HAVE_IN_ADDR_T -#define in_addr_t uint32 -#endif - -/* - Handling of gethostbyname_r() -*/ - -#if !defined(HAVE_GETHOSTBYNAME_R) -struct hostent *my_gethostbyname_r(const char *name, - struct hostent *result, char *buffer, - int buflen, int *h_errnop); -void my_gethostbyname_r_free(); -#elif defined(HAVE_PTHREAD_ATTR_CREATE) || defined(_AIX) || defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) -struct hostent *my_gethostbyname_r(const char *name, - struct hostent *result, char *buffer, - int buflen, int *h_errnop); -#define my_gethostbyname_r_free() -#if !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) && !defined(HPUX10) -#define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data) -#endif /* !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) */ - -#elif defined(HAVE_GETHOSTBYNAME_R_RETURN_INT) -#define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data) -struct hostent *my_gethostbyname_r(const char *name, - struct hostent *result, char *buffer, - int buflen, int *h_errnop); -#define my_gethostbyname_r_free() -#else -#define my_gethostbyname_r(A,B,C,D,E) gethostbyname_r((A),(B),(C),(D),(E)) -#define my_gethostbyname_r_free() -#endif /* !defined(HAVE_GETHOSTBYNAME_R) */ - -#ifndef GETHOSTBYNAME_BUFF_SIZE -#define GETHOSTBYNAME_BUFF_SIZE 2048 -#endif - -C_MODE_END -#endif diff --git a/deps/mysqllite/include/my_pthread.h b/deps/mysqllite/include/my_pthread.h deleted file mode 100644 index f1636cad136d6c..00000000000000 --- a/deps/mysqllite/include/my_pthread.h +++ /dev/null @@ -1,943 +0,0 @@ -/* Copyright (C) 2000-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Defines to make different thread packages compatible */ - -#ifndef _my_pthread_h -#define _my_pthread_h - -#include "my_global.h" /* myf */ - -#ifndef ETIME -#define ETIME ETIMEDOUT /* For FreeBSD */ -#endif - -#ifdef __cplusplus -#define EXTERNC extern "C" -extern "C" { -#else -#define EXTERNC -#endif /* __cplusplus */ - -#if defined(__WIN__) -typedef CRITICAL_SECTION pthread_mutex_t; -typedef DWORD pthread_t; -typedef struct thread_attr { - DWORD dwStackSize ; - DWORD dwCreatingFlag ; -} pthread_attr_t ; - -typedef struct { int dummy; } pthread_condattr_t; - -/* Implementation of posix conditions */ - -typedef struct st_pthread_link { - DWORD thread_id; - struct st_pthread_link *next; -} pthread_link; - -/** - Implementation of Windows condition variables. - We use native conditions on Vista and later, and fallback to own - implementation on earlier OS version. -*/ -typedef union -{ - /* Native condition (used on Vista and later) */ - CONDITION_VARIABLE native_cond; - - /* Own implementation (used on XP) */ - struct - { - uint32 waiting; - CRITICAL_SECTION lock_waiting; - enum - { - SIGNAL= 0, - BROADCAST= 1, - MAX_EVENTS= 2 - } EVENTS; - HANDLE events[MAX_EVENTS]; - HANDLE broadcast_block_event; - }; -} pthread_cond_t; - - -typedef int pthread_mutexattr_t; -#define pthread_self() GetCurrentThreadId() -#define pthread_handler_t EXTERNC void * __cdecl -typedef void * (__cdecl *pthread_handler)(void *); - -typedef volatile LONG my_pthread_once_t; -#define MY_PTHREAD_ONCE_INIT 0 -#define MY_PTHREAD_ONCE_INPROGRESS 1 -#define MY_PTHREAD_ONCE_DONE 2 - -/* - Struct and macros to be used in combination with the - windows implementation of pthread_cond_timedwait -*/ - -/* - Declare a union to make sure FILETIME is properly aligned - so it can be used directly as a 64 bit value. The value - stored is in 100ns units. - */ - union ft64 { - FILETIME ft; - __int64 i64; - }; -struct timespec { - union ft64 tv; - /* The max timeout value in millisecond for pthread_cond_timedwait */ - long max_timeout_msec; -}; -#define set_timespec(ABSTIME,SEC) { \ - GetSystemTimeAsFileTime(&((ABSTIME).tv.ft)); \ - (ABSTIME).tv.i64+= (__int64)(SEC)*10000000; \ - (ABSTIME).max_timeout_msec= (long)((SEC)*1000); \ -} -#define set_timespec_nsec(ABSTIME,NSEC) { \ - GetSystemTimeAsFileTime(&((ABSTIME).tv.ft)); \ - (ABSTIME).tv.i64+= (__int64)(NSEC)/100; \ - (ABSTIME).max_timeout_msec= (long)((NSEC)/1000000); \ -} - -/** - Compare two timespec structs. - - @retval 1 If TS1 ends after TS2. - - @retval 0 If TS1 is equal to TS2. - - @retval -1 If TS1 ends before TS2. -*/ -#define cmp_timespec(TS1, TS2) \ - ((TS1.tv.i64 > TS2.tv.i64) ? 1 : \ - ((TS1.tv.i64 < TS2.tv.i64) ? -1 : 0)) - - -int win_pthread_mutex_trylock(pthread_mutex_t *mutex); -int pthread_create(pthread_t *, const pthread_attr_t *, pthread_handler, void *); -int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr); -int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); -int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, - struct timespec *abstime); -int pthread_cond_signal(pthread_cond_t *cond); -int pthread_cond_broadcast(pthread_cond_t *cond); -int pthread_cond_destroy(pthread_cond_t *cond); -int pthread_attr_init(pthread_attr_t *connect_att); -int pthread_attr_setstacksize(pthread_attr_t *connect_att,DWORD stack); -int pthread_attr_destroy(pthread_attr_t *connect_att); -int my_pthread_once(my_pthread_once_t *once_control,void (*init_routine)(void)); -struct tm *localtime_r(const time_t *timep,struct tm *tmp); -struct tm *gmtime_r(const time_t *timep,struct tm *tmp); - -void pthread_exit(void *a); -int pthread_join(pthread_t thread, void **value_ptr); -int pthread_cancel(pthread_t thread); - -#ifndef ETIMEDOUT -#define ETIMEDOUT 145 /* Win32 doesn't have this */ -#endif -#define HAVE_LOCALTIME_R 1 -#define _REENTRANT 1 -#define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1 - - -#undef SAFE_MUTEX /* This will cause conflicts */ -#define pthread_key(T,V) DWORD V -#define pthread_key_create(A,B) ((*A=TlsAlloc())==0xFFFFFFFF) -#define pthread_key_delete(A) TlsFree(A) -#define my_pthread_setspecific_ptr(T,V) (!TlsSetValue((T),(V))) -#define pthread_setspecific(A,B) (!TlsSetValue((A),(B))) -#define pthread_getspecific(A) (TlsGetValue(A)) -#define my_pthread_getspecific(T,A) ((T) TlsGetValue(A)) -#define my_pthread_getspecific_ptr(T,V) ((T) TlsGetValue(V)) - -#define pthread_equal(A,B) ((A) == (B)) -#define pthread_mutex_init(A,B) (InitializeCriticalSection(A),0) -#define pthread_mutex_lock(A) (EnterCriticalSection(A),0) -#define pthread_mutex_trylock(A) win_pthread_mutex_trylock((A)) -#define pthread_mutex_unlock(A) (LeaveCriticalSection(A), 0) -#define pthread_mutex_destroy(A) (DeleteCriticalSection(A), 0) -#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) - - -/* Dummy defines for easier code */ -#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) -#define pthread_attr_setscope(A,B) -#define pthread_detach_this_thread() -#define pthread_condattr_init(A) -#define pthread_condattr_destroy(A) -#define pthread_yield() SwitchToThread() -#define my_sigset(A,B) signal(A,B) - -#else /* Normal threads */ - -#ifdef HAVE_rts_threads -#define sigwait org_sigwait -#include -#undef sigwait -#endif -#include -#ifndef _REENTRANT -#define _REENTRANT -#endif -#ifdef HAVE_THR_SETCONCURRENCY -#include /* Probably solaris */ -#endif -#ifdef HAVE_SCHED_H -#include -#endif -#ifdef HAVE_SYNCH_H -#include -#endif - -#define pthread_key(T,V) pthread_key_t V -#define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,(V)) -#define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,(void*) (V)) -#define pthread_detach_this_thread() -#define pthread_handler_t EXTERNC void * -typedef void *(* pthread_handler)(void *); - -#define my_pthread_once_t pthread_once_t -#if defined(PTHREAD_ONCE_INITIALIZER) -#define MY_PTHREAD_ONCE_INIT PTHREAD_ONCE_INITIALIZER -#else -#define MY_PTHREAD_ONCE_INIT PTHREAD_ONCE_INIT -#endif -#define my_pthread_once(C,F) pthread_once(C,F) - -/* Test first for RTS or FSU threads */ - -#if defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) -#define HAVE_rts_threads -extern int my_pthread_create_detached; -#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) -#define PTHREAD_CREATE_DETACHED &my_pthread_create_detached -#define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_GLOBAL -#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_LOCAL -#define USE_ALARM_THREAD -#endif /* defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) */ - -#if defined(_BSDI_VERSION) && _BSDI_VERSION < 199910 -int sigwait(sigset_t *set, int *sig); -#endif - -#ifndef HAVE_NONPOSIX_SIGWAIT -#define my_sigwait(A,B) sigwait((A),(B)) -#else -int my_sigwait(const sigset_t *set,int *sig); -#endif - -#ifdef HAVE_NONPOSIX_PTHREAD_MUTEX_INIT -#ifndef SAFE_MUTEX -#define pthread_mutex_init(a,b) my_pthread_mutex_init((a),(b)) -extern int my_pthread_mutex_init(pthread_mutex_t *mp, - const pthread_mutexattr_t *attr); -#endif /* SAFE_MUTEX */ -#define pthread_cond_init(a,b) my_pthread_cond_init((a),(b)) -extern int my_pthread_cond_init(pthread_cond_t *mp, - const pthread_condattr_t *attr); -#endif /* HAVE_NONPOSIX_PTHREAD_MUTEX_INIT */ - -#if defined(HAVE_SIGTHREADMASK) && !defined(HAVE_PTHREAD_SIGMASK) -#define pthread_sigmask(A,B,C) sigthreadmask((A),(B),(C)) -#endif - -#if !defined(HAVE_SIGWAIT) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(_AIX) -int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */ -#endif - - -/* - We define my_sigset() and use that instead of the system sigset() so that - we can favor an implementation based on sigaction(). On some systems, such - as Mac OS X, sigset() results in flags such as SA_RESTART being set, and - we want to make sure that no such flags are set. -*/ -#if defined(HAVE_SIGACTION) && !defined(my_sigset) -#define my_sigset(A,B) do { struct sigaction l_s; sigset_t l_set; \ - DBUG_ASSERT((A) != 0); \ - sigemptyset(&l_set); \ - l_s.sa_handler = (B); \ - l_s.sa_mask = l_set; \ - l_s.sa_flags = 0; \ - sigaction((A), &l_s, NULL); \ - } while (0) -#elif defined(HAVE_SIGSET) && !defined(my_sigset) -#define my_sigset(A,B) sigset((A),(B)) -#elif !defined(my_sigset) -#define my_sigset(A,B) signal((A),(B)) -#endif - -#if !defined(HAVE_PTHREAD_ATTR_SETSCOPE) || defined(HAVE_DEC_3_2_THREADS) -#define pthread_attr_setscope(A,B) -#undef HAVE_GETHOSTBYADDR_R /* No definition */ -#endif - -#if defined(HAVE_BROKEN_PTHREAD_COND_TIMEDWAIT) && !defined(SAFE_MUTEX) -extern int my_pthread_cond_timedwait(pthread_cond_t *cond, - pthread_mutex_t *mutex, - struct timespec *abstime); -#define pthread_cond_timedwait(A,B,C) my_pthread_cond_timedwait((A),(B),(C)) -#endif - -#if !defined( HAVE_NONPOSIX_PTHREAD_GETSPECIFIC) -#define my_pthread_getspecific(A,B) ((A) pthread_getspecific(B)) -#else -#define my_pthread_getspecific(A,B) ((A) my_pthread_getspecific_imp(B)) -void *my_pthread_getspecific_imp(pthread_key_t key); -#endif - -#ifndef HAVE_LOCALTIME_R -struct tm *localtime_r(const time_t *clock, struct tm *res); -#endif - -#ifndef HAVE_GMTIME_R -struct tm *gmtime_r(const time_t *clock, struct tm *res); -#endif - -#ifdef HAVE_PTHREAD_CONDATTR_CREATE -/* DCE threads on HPUX 10.20 */ -#define pthread_condattr_init pthread_condattr_create -#define pthread_condattr_destroy pthread_condattr_delete -#endif - -/* FSU THREADS */ -#if !defined(HAVE_PTHREAD_KEY_DELETE) && !defined(pthread_key_delete) -#define pthread_key_delete(A) pthread_dummy(0) -#endif - -#ifdef HAVE_CTHREADS_WRAPPER /* For MacOSX */ -#define pthread_cond_destroy(A) pthread_dummy(0) -#define pthread_mutex_destroy(A) pthread_dummy(0) -#define pthread_attr_delete(A) pthread_dummy(0) -#define pthread_condattr_delete(A) pthread_dummy(0) -#define pthread_attr_setstacksize(A,B) pthread_dummy(0) -#define pthread_equal(A,B) ((A) == (B)) -#define pthread_cond_timedwait(a,b,c) pthread_cond_wait((a),(b)) -#define pthread_attr_init(A) pthread_attr_create(A) -#define pthread_attr_destroy(A) pthread_attr_delete(A) -#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) -#define pthread_create(A,B,C,D) pthread_create((A),*(B),(C),(D)) -#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) -#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) -#undef pthread_detach_this_thread -#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); } -#endif - -#ifdef HAVE_DARWIN5_THREADS -#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) -#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) -#define pthread_condattr_init(A) pthread_dummy(0) -#define pthread_condattr_destroy(A) pthread_dummy(0) -#undef pthread_detach_this_thread -#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(tmp); } -#endif - -#if ((defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT)) || defined(HAVE_DEC_3_2_THREADS)) && !defined(HAVE_CTHREADS_WRAPPER) -/* This is set on AIX_3_2 and Siemens unix (and DEC OSF/1 3.2 too) */ -#define pthread_key_create(A,B) \ - pthread_keycreate(A,(B) ?\ - (pthread_destructor_t) (B) :\ - (pthread_destructor_t) pthread_dummy) -#define pthread_attr_init(A) pthread_attr_create(A) -#define pthread_attr_destroy(A) pthread_attr_delete(A) -#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) -#define pthread_create(A,B,C,D) pthread_create((A),*(B),(C),(D)) -#ifndef pthread_sigmask -#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) -#endif -#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) -#undef pthread_detach_this_thread -#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); } -#else /* HAVE_PTHREAD_ATTR_CREATE && !HAVE_SIGWAIT */ -#define HAVE_PTHREAD_KILL -#endif - -#endif /* defined(__WIN__) */ - -#if defined(HPUX10) && !defined(DONT_REMAP_PTHREAD_FUNCTIONS) -#undef pthread_cond_timedwait -#define pthread_cond_timedwait(a,b,c) my_pthread_cond_timedwait((a),(b),(c)) -int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, - struct timespec *abstime); -#endif - -#if defined(HPUX10) -#define pthread_attr_getstacksize(A,B) my_pthread_attr_getstacksize(A,B) -void my_pthread_attr_getstacksize(pthread_attr_t *attrib, size_t *size); -#endif - -#if defined(HAVE_POSIX1003_4a_MUTEX) && !defined(DONT_REMAP_PTHREAD_FUNCTIONS) -#undef pthread_mutex_trylock -#define pthread_mutex_trylock(a) my_pthread_mutex_trylock((a)) -int my_pthread_mutex_trylock(pthread_mutex_t *mutex); -#endif - -#if !defined(HAVE_PTHREAD_YIELD_ONE_ARG) && !defined(HAVE_PTHREAD_YIELD_ZERO_ARG) -/* no pthread_yield() available */ -#ifdef HAVE_SCHED_YIELD -#define pthread_yield() sched_yield() -#elif defined(HAVE_PTHREAD_YIELD_NP) /* can be Mac OS X */ -#define pthread_yield() pthread_yield_np() -#elif defined(HAVE_THR_YIELD) -#define pthread_yield() thr_yield() -#endif -#endif - -/* - The defines set_timespec and set_timespec_nsec should be used - for calculating an absolute time at which - pthread_cond_timedwait should timeout -*/ -#ifdef HAVE_TIMESPEC_TS_SEC -#ifndef set_timespec -#define set_timespec(ABSTIME,SEC) \ -{ \ - (ABSTIME).ts_sec=time(0) + (time_t) (SEC); \ - (ABSTIME).ts_nsec=0; \ -} -#endif /* !set_timespec */ -#ifndef set_timespec_nsec -#define set_timespec_nsec(ABSTIME,NSEC) \ -{ \ - ulonglong now= my_getsystime() + (NSEC/100); \ - (ABSTIME).ts_sec= (now / ULL(10000000)); \ - (ABSTIME).ts_nsec= (now % ULL(10000000) * 100 + ((NSEC) % 100)); \ -} -#endif /* !set_timespec_nsec */ -#else -#ifndef set_timespec -#define set_timespec(ABSTIME,SEC) \ -{\ - struct timeval tv;\ - gettimeofday(&tv,0);\ - (ABSTIME).tv_sec=tv.tv_sec+(time_t) (SEC);\ - (ABSTIME).tv_nsec=tv.tv_usec*1000;\ -} -#endif /* !set_timespec */ -#ifndef set_timespec_nsec -#define set_timespec_nsec(ABSTIME,NSEC) \ -{\ - ulonglong now= my_getsystime() + (NSEC/100); \ - (ABSTIME).tv_sec= (time_t) (now / ULL(10000000)); \ - (ABSTIME).tv_nsec= (long) (now % ULL(10000000) * 100 + ((NSEC) % 100)); \ -} -#endif /* !set_timespec_nsec */ -#endif /* HAVE_TIMESPEC_TS_SEC */ - -/** - Compare two timespec structs. - - @retval 1 If TS1 ends after TS2. - - @retval 0 If TS1 is equal to TS2. - - @retval -1 If TS1 ends before TS2. -*/ -#ifdef HAVE_TIMESPEC_TS_SEC -#ifndef cmp_timespec -#define cmp_timespec(TS1, TS2) \ - ((TS1.ts_sec > TS2.ts_sec || \ - (TS1.ts_sec == TS2.ts_sec && TS1.ts_nsec > TS2.ts_nsec)) ? 1 : \ - ((TS1.ts_sec < TS2.ts_sec || \ - (TS1.ts_sec == TS2.ts_sec && TS1.ts_nsec < TS2.ts_nsec)) ? -1 : 0)) -#endif /* !cmp_timespec */ -#else -#ifndef cmp_timespec -#define cmp_timespec(TS1, TS2) \ - ((TS1.tv_sec > TS2.tv_sec || \ - (TS1.tv_sec == TS2.tv_sec && TS1.tv_nsec > TS2.tv_nsec)) ? 1 : \ - ((TS1.tv_sec < TS2.tv_sec || \ - (TS1.tv_sec == TS2.tv_sec && TS1.tv_nsec < TS2.tv_nsec)) ? -1 : 0)) -#endif /* !cmp_timespec */ -#endif /* HAVE_TIMESPEC_TS_SEC */ - - /* safe_mutex adds checking to mutex for easier debugging */ - -typedef struct st_safe_mutex_t -{ - pthread_mutex_t global,mutex; - const char *file; - uint line,count; - pthread_t thread; -#ifdef SAFE_MUTEX_DETECT_DESTROY - struct st_safe_mutex_info_t *info; /* to track destroying of mutexes */ -#endif -} safe_mutex_t; - -#ifdef SAFE_MUTEX_DETECT_DESTROY -/* - Used to track the destroying of mutexes. This needs to be a seperate - structure because the safe_mutex_t structure could be freed before - the mutexes are destroyed. -*/ - -typedef struct st_safe_mutex_info_t -{ - struct st_safe_mutex_info_t *next; - struct st_safe_mutex_info_t *prev; - const char *init_file; - uint32 init_line; -} safe_mutex_info_t; -#endif /* SAFE_MUTEX_DETECT_DESTROY */ - -int safe_mutex_init(safe_mutex_t *mp, const pthread_mutexattr_t *attr, - const char *file, uint line); -int safe_mutex_lock(safe_mutex_t *mp, my_bool try_lock, const char *file, uint line); -int safe_mutex_unlock(safe_mutex_t *mp,const char *file, uint line); -int safe_mutex_destroy(safe_mutex_t *mp,const char *file, uint line); -int safe_cond_wait(pthread_cond_t *cond, safe_mutex_t *mp,const char *file, - uint line); -int safe_cond_timedwait(pthread_cond_t *cond, safe_mutex_t *mp, - const struct timespec *abstime, - const char *file, uint line); -void safe_mutex_global_init(void); -void safe_mutex_end(FILE *file); - - /* Wrappers if safe mutex is actually used */ -#ifdef SAFE_MUTEX -#undef pthread_mutex_init -#undef pthread_mutex_lock -#undef pthread_mutex_unlock -#undef pthread_mutex_destroy -#undef pthread_mutex_wait -#undef pthread_mutex_timedwait -#undef pthread_mutex_t -#undef pthread_cond_wait -#undef pthread_cond_timedwait -#undef pthread_mutex_trylock -#define pthread_mutex_init(A,B) safe_mutex_init((A),(B),__FILE__,__LINE__) -#define pthread_mutex_lock(A) safe_mutex_lock((A), FALSE, __FILE__, __LINE__) -#define pthread_mutex_unlock(A) safe_mutex_unlock((A),__FILE__,__LINE__) -#define pthread_mutex_destroy(A) safe_mutex_destroy((A),__FILE__,__LINE__) -#define pthread_cond_wait(A,B) safe_cond_wait((A),(B),__FILE__,__LINE__) -#define pthread_cond_timedwait(A,B,C) safe_cond_timedwait((A),(B),(C),__FILE__,__LINE__) -#define pthread_mutex_trylock(A) safe_mutex_lock((A), TRUE, __FILE__, __LINE__) -#define pthread_mutex_t safe_mutex_t -#define safe_mutex_assert_owner(mp) \ - DBUG_ASSERT((mp)->count > 0 && \ - pthread_equal(pthread_self(), (mp)->thread)) -#define safe_mutex_assert_not_owner(mp) \ - DBUG_ASSERT(! (mp)->count || \ - ! pthread_equal(pthread_self(), (mp)->thread)) -#else -#define safe_mutex_assert_owner(mp) -#define safe_mutex_assert_not_owner(mp) -#endif /* SAFE_MUTEX */ - -#if defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX) -typedef struct st_my_pthread_fastmutex_t -{ - pthread_mutex_t mutex; - uint spins; - uint rng_state; -} my_pthread_fastmutex_t; -void fastmutex_global_init(void); - -int my_pthread_fastmutex_init(my_pthread_fastmutex_t *mp, - const pthread_mutexattr_t *attr); -int my_pthread_fastmutex_lock(my_pthread_fastmutex_t *mp); - -#undef pthread_mutex_init -#undef pthread_mutex_lock -#undef pthread_mutex_unlock -#undef pthread_mutex_destroy -#undef pthread_mutex_wait -#undef pthread_mutex_timedwait -#undef pthread_mutex_t -#undef pthread_cond_wait -#undef pthread_cond_timedwait -#undef pthread_mutex_trylock -#define pthread_mutex_init(A,B) my_pthread_fastmutex_init((A),(B)) -#define pthread_mutex_lock(A) my_pthread_fastmutex_lock(A) -#define pthread_mutex_unlock(A) pthread_mutex_unlock(&(A)->mutex) -#define pthread_mutex_destroy(A) pthread_mutex_destroy(&(A)->mutex) -#define pthread_cond_wait(A,B) pthread_cond_wait((A),&(B)->mutex) -#define pthread_cond_timedwait(A,B,C) pthread_cond_timedwait((A),&(B)->mutex,(C)) -#define pthread_mutex_trylock(A) pthread_mutex_trylock(&(A)->mutex) -#define pthread_mutex_t my_pthread_fastmutex_t -#endif /* defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX) */ - - /* READ-WRITE thread locking */ - -#ifdef HAVE_BROKEN_RWLOCK /* For OpenUnix */ -#undef HAVE_PTHREAD_RWLOCK_RDLOCK -#undef HAVE_RWLOCK_INIT -#undef HAVE_RWLOCK_T -#endif - -#if defined(USE_MUTEX_INSTEAD_OF_RW_LOCKS) -/* use these defs for simple mutex locking */ -#define rw_lock_t pthread_mutex_t -#define my_rwlock_init(A,B) pthread_mutex_init((A),(B)) -#define rw_rdlock(A) pthread_mutex_lock((A)) -#define rw_wrlock(A) pthread_mutex_lock((A)) -#define rw_tryrdlock(A) pthread_mutex_trylock((A)) -#define rw_trywrlock(A) pthread_mutex_trylock((A)) -#define rw_unlock(A) pthread_mutex_unlock((A)) -#define rwlock_destroy(A) pthread_mutex_destroy((A)) -#elif defined(HAVE_PTHREAD_RWLOCK_RDLOCK) -#define rw_lock_t pthread_rwlock_t -#define my_rwlock_init(A,B) pthread_rwlock_init((A),(B)) -#define rw_rdlock(A) pthread_rwlock_rdlock(A) -#define rw_wrlock(A) pthread_rwlock_wrlock(A) -#define rw_tryrdlock(A) pthread_rwlock_tryrdlock((A)) -#define rw_trywrlock(A) pthread_rwlock_trywrlock((A)) -#define rw_unlock(A) pthread_rwlock_unlock(A) -#define rwlock_destroy(A) pthread_rwlock_destroy(A) -#elif defined(HAVE_RWLOCK_INIT) -#ifdef HAVE_RWLOCK_T /* For example Solaris 2.6-> */ -#define rw_lock_t rwlock_t -#endif -#define my_rwlock_init(A,B) rwlock_init((A),USYNC_THREAD,0) -#else -/* Use our own version of read/write locks */ -#define NEED_MY_RW_LOCK 1 -#define rw_lock_t my_rw_lock_t -#define my_rwlock_init(A,B) my_rw_init((A)) -#define rw_rdlock(A) my_rw_rdlock((A)) -#define rw_wrlock(A) my_rw_wrlock((A)) -#define rw_tryrdlock(A) my_rw_tryrdlock((A)) -#define rw_trywrlock(A) my_rw_trywrlock((A)) -#define rw_unlock(A) my_rw_unlock((A)) -#define rwlock_destroy(A) my_rw_destroy((A)) -#define rw_lock_assert_write_owner(A) my_rw_lock_assert_write_owner((A)) -#define rw_lock_assert_not_write_owner(A) my_rw_lock_assert_not_write_owner((A)) -#endif /* USE_MUTEX_INSTEAD_OF_RW_LOCKS */ - - -/** - Portable implementation of special type of read-write locks. - - These locks have two properties which are unusual for rwlocks: - 1) They "prefer readers" in the sense that they do not allow - situations in which rwlock is rd-locked and there is a - pending rd-lock which is blocked (e.g. due to pending - request for wr-lock). - This is a stronger guarantee than one which is provided for - PTHREAD_RWLOCK_PREFER_READER_NP rwlocks in Linux. - MDL subsystem deadlock detector relies on this property for - its correctness. - 2) They are optimized for uncontended wr-lock/unlock case. - This is scenario in which they are most oftenly used - within MDL subsystem. Optimizing for it gives significant - performance improvements in some of tests involving many - connections. - - Another important requirement imposed on this type of rwlock - by the MDL subsystem is that it should be OK to destroy rwlock - object which is in unlocked state even though some threads might - have not yet fully left unlock operation for it (of course there - is an external guarantee that no thread will try to lock rwlock - which is destroyed). - Putting it another way the unlock operation should not access - rwlock data after changing its state to unlocked. - - TODO/FIXME: We should consider alleviating this requirement as - it blocks us from doing certain performance optimizations. -*/ - -typedef struct st_rw_pr_lock_t { - /** - Lock which protects the structure. - Also held for the duration of wr-lock. - */ - pthread_mutex_t lock; - /** - Condition variable which is used to wake-up - writers waiting for readers to go away. - */ - pthread_cond_t no_active_readers; - /** Number of active readers. */ - uint active_readers; - /** Number of writers waiting for readers to go away. */ - uint writers_waiting_readers; - /** Indicates whether there is an active writer. */ - my_bool active_writer; -#ifdef SAFE_MUTEX - /** Thread holding wr-lock (for debug purposes only). */ - pthread_t writer_thread; -#endif -} rw_pr_lock_t; - -extern int rw_pr_init(rw_pr_lock_t *); -extern int rw_pr_rdlock(rw_pr_lock_t *); -extern int rw_pr_wrlock(rw_pr_lock_t *); -extern int rw_pr_unlock(rw_pr_lock_t *); -extern int rw_pr_destroy(rw_pr_lock_t *); -#ifdef SAFE_MUTEX -#define rw_pr_lock_assert_write_owner(A) \ - DBUG_ASSERT((A)->active_writer && pthread_equal(pthread_self(), \ - (A)->writer_thread)) -#define rw_pr_lock_assert_not_write_owner(A) \ - DBUG_ASSERT(! (A)->active_writer || ! pthread_equal(pthread_self(), \ - (A)->writer_thread)) -#else -#define rw_pr_lock_assert_write_owner(A) -#define rw_pr_lock_assert_not_write_owner(A) -#endif /* SAFE_MUTEX */ - - -#ifdef NEED_MY_RW_LOCK - -#ifdef _WIN32 - -/** - Implementation of Windows rwlock. - - We use native (slim) rwlocks on Win7 and later, and fallback to portable - implementation on earlier Windows. - - slim rwlock are also available on Vista/WS2008, but we do not use it - ("trylock" APIs are missing on Vista) -*/ -typedef union -{ - /* Native rwlock (is_srwlock == TRUE) */ - struct - { - SRWLOCK srwlock; /* native reader writer lock */ - BOOL have_exclusive_srwlock; /* used for unlock */ - }; - - /* - Portable implementation (is_srwlock == FALSE) - Fields are identical with Unix my_rw_lock_t fields. - */ - struct - { - pthread_mutex_t lock; /* lock for structure */ - pthread_cond_t readers; /* waiting readers */ - pthread_cond_t writers; /* waiting writers */ - int state; /* -1:writer,0:free,>0:readers */ - int waiters; /* number of waiting writers */ -#ifdef SAFE_MUTEX - pthread_t write_thread; -#endif - }; -} my_rw_lock_t; - - -#else /* _WIN32 */ - -/* - On systems which don't support native read/write locks we have - to use own implementation. -*/ -typedef struct st_my_rw_lock_t { - pthread_mutex_t lock; /* lock for structure */ - pthread_cond_t readers; /* waiting readers */ - pthread_cond_t writers; /* waiting writers */ - int state; /* -1:writer,0:free,>0:readers */ - int waiters; /* number of waiting writers */ -#ifdef SAFE_MUTEX - pthread_t write_thread; -#endif -} my_rw_lock_t; - -#endif /*! _WIN32 */ - -extern int my_rw_init(my_rw_lock_t *); -extern int my_rw_destroy(my_rw_lock_t *); -extern int my_rw_rdlock(my_rw_lock_t *); -extern int my_rw_wrlock(my_rw_lock_t *); -extern int my_rw_unlock(my_rw_lock_t *); -extern int my_rw_tryrdlock(my_rw_lock_t *); -extern int my_rw_trywrlock(my_rw_lock_t *); -#ifdef SAFE_MUTEX -#define my_rw_lock_assert_write_owner(A) \ - DBUG_ASSERT((A)->state == -1 && pthread_equal(pthread_self(), \ - (A)->write_thread)) -#define my_rw_lock_assert_not_write_owner(A) \ - DBUG_ASSERT((A)->state >= 0 || ! pthread_equal(pthread_self(), \ - (A)->write_thread)) -#else -#define my_rw_lock_assert_write_owner(A) -#define my_rw_lock_assert_not_write_owner(A) -#endif -#endif /* NEED_MY_RW_LOCK */ - - -#define GETHOSTBYADDR_BUFF_SIZE 2048 - -#ifndef HAVE_THR_SETCONCURRENCY -#define thr_setconcurrency(A) pthread_dummy(0) -#endif -#if !defined(HAVE_PTHREAD_ATTR_SETSTACKSIZE) && ! defined(pthread_attr_setstacksize) -#define pthread_attr_setstacksize(A,B) pthread_dummy(0) -#endif - -/* Define mutex types, see my_thr_init.c */ -#define MY_MUTEX_INIT_SLOW NULL -#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP -extern pthread_mutexattr_t my_fast_mutexattr; -#define MY_MUTEX_INIT_FAST &my_fast_mutexattr -#else -#define MY_MUTEX_INIT_FAST NULL -#endif -#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP -extern pthread_mutexattr_t my_errorcheck_mutexattr; -#define MY_MUTEX_INIT_ERRCHK &my_errorcheck_mutexattr -#else -#define MY_MUTEX_INIT_ERRCHK NULL -#endif - -#ifndef ESRCH -/* Define it to something */ -#define ESRCH 1 -#endif - -typedef ulong my_thread_id; - -extern my_bool my_thread_global_init(void); -extern my_bool my_thread_basic_global_init(void); -extern void my_thread_basic_global_reinit(void); -extern void my_thread_global_end(void); -extern my_bool my_thread_init(void); -extern void my_thread_end(void); -extern const char *my_thread_name(void); -extern my_thread_id my_thread_dbug_id(void); -extern int pthread_dummy(int); - -/* All thread specific variables are in the following struct */ - -#define THREAD_NAME_SIZE 10 -#ifndef DEFAULT_THREAD_STACK -#if SIZEOF_CHARP > 4 -/* - MySQL can survive with 32K, but some glibc libraries require > 128K stack - To resolve hostnames. Also recursive stored procedures needs stack. -*/ -#define DEFAULT_THREAD_STACK (256*1024L) -#else -#define DEFAULT_THREAD_STACK (192*1024) -#endif -#endif - -#include - -#define INSTRUMENT_ME 0 - -struct st_my_thread_var -{ - int thr_errno; - mysql_cond_t suspend; - mysql_mutex_t mutex; - mysql_mutex_t * volatile current_mutex; - mysql_cond_t * volatile current_cond; - pthread_t pthread_self; - my_thread_id id; - int cmp_length; - int volatile abort; - my_bool init; - struct st_my_thread_var *next,**prev; - void *opt_info; - void *stack_ends_here; -#ifndef DBUG_OFF - void *dbug; - char name[THREAD_NAME_SIZE+1]; -#endif -}; - -extern struct st_my_thread_var *_my_thread_var(void) __attribute__ ((const)); -extern void **my_thread_var_dbug(); -extern uint my_thread_end_wait_time; -#define my_thread_var (_my_thread_var()) -#define my_errno my_thread_var->thr_errno -/* - Keep track of shutdown,signal, and main threads so that my_end() will not - report errors with them -*/ - -/* Which kind of thread library is in use */ - -#define THD_LIB_OTHER 1 -#define THD_LIB_NPTL 2 -#define THD_LIB_LT 4 - -extern uint thd_lib_detected; - -/* - thread_safe_xxx functions are for critical statistic or counters. - The implementation is guaranteed to be thread safe, on all platforms. - Note that the calling code should *not* assume the counter is protected - by the mutex given, as the implementation of these helpers may change - to use my_atomic operations instead. -*/ - -#ifndef thread_safe_increment -#ifdef _WIN32 -#define thread_safe_increment(V,L) InterlockedIncrement((long*) &(V)) -#define thread_safe_decrement(V,L) InterlockedDecrement((long*) &(V)) -#else -#define thread_safe_increment(V,L) \ - (mysql_mutex_lock((L)), (V)++, mysql_mutex_unlock((L))) -#define thread_safe_decrement(V,L) \ - (mysql_mutex_lock((L)), (V)--, mysql_mutex_unlock((L))) -#endif -#endif - -#ifndef thread_safe_add -#ifdef _WIN32 -#define thread_safe_add(V,C,L) InterlockedExchangeAdd((long*) &(V),(C)) -#define thread_safe_sub(V,C,L) InterlockedExchangeAdd((long*) &(V),-(long) (C)) -#else -#define thread_safe_add(V,C,L) \ - (mysql_mutex_lock((L)), (V)+=(C), mysql_mutex_unlock((L))) -#define thread_safe_sub(V,C,L) \ - (mysql_mutex_lock((L)), (V)-=(C), mysql_mutex_unlock((L))) -#endif -#endif - - -/* - statistics_xxx functions are for non critical statistic, - maintained in global variables. - When compiling with SAFE_STATISTICS: - - race conditions can not occur. - - some locking occurs, which may cause performance degradation. - - When compiling without SAFE_STATISTICS: - - race conditions can occur, making the result slightly inaccurate. - - the lock given is not honored. -*/ -#ifdef SAFE_STATISTICS -#define statistic_increment(V,L) thread_safe_increment((V),(L)) -#define statistic_decrement(V,L) thread_safe_decrement((V),(L)) -#define statistic_add(V,C,L) thread_safe_add((V),(C),(L)) -#define statistic_sub(V,C,L) thread_safe_sub((V),(C),(L)) -#else -#define statistic_decrement(V,L) (V)-- -#define statistic_increment(V,L) (V)++ -#define statistic_add(V,C,L) (V)+=(C) -#define statistic_sub(V,C,L) (V)-=(C) -#endif /* SAFE_STATISTICS */ - -/* - No locking needed, the counter is owned by the thread -*/ -#define status_var_increment(V) (V)++ -#define status_var_decrement(V) (V)-- -#define status_var_add(V,C) (V)+=(C) -#define status_var_sub(V,C) (V)-=(C) - -#ifdef __cplusplus -} -#endif -#endif /* _my_ptread_h */ diff --git a/deps/mysqllite/include/my_sys.h b/deps/mysqllite/include/my_sys.h deleted file mode 100644 index 96b40415c564f5..00000000000000 --- a/deps/mysqllite/include/my_sys.h +++ /dev/null @@ -1,959 +0,0 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _my_sys_h -#define _my_sys_h - -#include "my_global.h" /* C_MODE_START, C_MODE_END */ - -C_MODE_START - -#ifdef HAVE_AIOWAIT -#include /* Used by record-cache */ -typedef struct my_aio_result { - aio_result_t result; - int pending; -} my_aio_result; -#endif - -#ifdef HAVE_VALGRIND -# include -# define MEM_UNDEFINED(a,len) VALGRIND_MAKE_MEM_UNDEFINED(a,len) -# define MEM_NOACCESS(a,len) VALGRIND_MAKE_MEM_NOACCESS(a,len) -# define MEM_CHECK_ADDRESSABLE(a,len) VALGRIND_CHECK_MEM_IS_ADDRESSABLE(a,len) -# define MEM_CHECK_DEFINED(a,len) VALGRIND_CHECK_MEM_IS_DEFINED(a,len) -#else /* HAVE_VALGRIND */ -# define MEM_UNDEFINED(a,len) ((void) 0) -# define MEM_NOACCESS(a,len) ((void) 0) -# define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0) -# define MEM_CHECK_DEFINED(a,len) ((void) 0) -#endif /* HAVE_VALGRIND */ - -#include - -#include /* for CHARSET_INFO */ -#include -#include -#ifdef _WIN32 -#include /*for alloca*/ -#endif - -#define MY_INIT(name) { my_progname= name; my_init(); } - -/** - Max length of an error message generated by mysys utilities. - Some mysys functions produce error messages. These mostly go - to stderr. - This constant defines the size of the buffer used to format - the message. It should be kept in sync with MYSQL_ERRMSG_SIZE, - since sometimes mysys errors are stored in the server diagnostics - area, and we would like to avoid unexpected truncation. -*/ -#define MYSYS_ERRMSG_SIZE (512) - -#define MY_FILE_ERROR ((size_t) -1) - - /* General bitmaps for my_func's */ -#define MY_FFNF 1 /* Fatal if file not found */ -#define MY_FNABP 2 /* Fatal if not all bytes read/writen */ -#define MY_NABP 4 /* Error if not all bytes read/writen */ -#define MY_FAE 8 /* Fatal if any error */ -#define MY_WME 16 /* Write message on error */ -#define MY_WAIT_IF_FULL 32 /* Wait and try again if disk full error */ -#define MY_IGNORE_BADFD 32 /* my_sync: ignore 'bad descriptor' errors */ -#define MY_SYNC_DIR 8192 /* my_create/delete/rename: sync directory */ -#define MY_UNUSED 64 /* Unused (was support for RAID) */ -#define MY_FULL_IO 512 /* For my_read - loop intil I/O is complete */ -#define MY_DONT_CHECK_FILESIZE 128 /* Option to init_io_cache() */ -#define MY_LINK_WARNING 32 /* my_redel() gives warning if links */ -#define MY_COPYTIME 64 /* my_redel() copys time */ -#define MY_DELETE_OLD 256 /* my_create_with_symlink() */ -#define MY_RESOLVE_LINK 128 /* my_realpath(); Only resolve links */ -#define MY_HOLD_ORIGINAL_MODES 128 /* my_copy() holds to file modes */ -#define MY_REDEL_MAKE_BACKUP 256 -#define MY_SEEK_NOT_DONE 32 /* my_lock may have to do a seek */ -#define MY_DONT_WAIT 64 /* my_lock() don't wait if can't lock */ -#define MY_ZEROFILL 32 /* my_malloc(), fill array with zero */ -#define MY_ALLOW_ZERO_PTR 64 /* my_realloc() ; zero ptr -> malloc */ -#define MY_FREE_ON_ERROR 128 /* my_realloc() ; Free old ptr on error */ -#define MY_HOLD_ON_ERROR 256 /* my_realloc() ; Return old ptr on error */ -#define MY_DONT_OVERWRITE_FILE 1024 /* my_copy: Don't overwrite file */ -#define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */ -#define MY_SYNC 4096 /* my_copy(): sync dst file */ - -#define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */ -#define MY_GIVE_INFO 2 /* Give time info about process*/ -#define MY_DONT_FREE_DBUG 4 /* Do not call DBUG_END() in my_end() */ - -#define ME_HIGHBYTE 8 /* Shift for colours */ -#define ME_NOCUR 1 /* Don't use curses message */ -#define ME_OLDWIN 2 /* Use old window */ -#define ME_BELL 4 /* Ring bell then printing message */ -#define ME_HOLDTANG 8 /* Don't delete last keys */ -#define ME_WAITTOT 16 /* Wait for errtime secs of for a action */ -#define ME_WAITTANG 32 /* Wait for a user action */ -#define ME_NOREFRESH 64 /* Dont refresh screen */ -#define ME_NOINPUT 128 /* Dont use the input libary */ -#define ME_COLOUR1 ((1 << ME_HIGHBYTE)) /* Possibly error-colours */ -#define ME_COLOUR2 ((2 << ME_HIGHBYTE)) -#define ME_COLOUR3 ((3 << ME_HIGHBYTE)) -#define ME_FATALERROR 1024 /* Fatal statement error */ - - /* Bits in last argument to fn_format */ -#define MY_REPLACE_DIR 1 /* replace dir in name with 'dir' */ -#define MY_REPLACE_EXT 2 /* replace extension with 'ext' */ -#define MY_UNPACK_FILENAME 4 /* Unpack name (~ -> home) */ -#define MY_PACK_FILENAME 8 /* Pack name (home -> ~) */ -#define MY_RESOLVE_SYMLINKS 16 /* Resolve all symbolic links */ -#define MY_RETURN_REAL_PATH 32 /* return full path for file */ -#define MY_SAFE_PATH 64 /* Return NULL if too long path */ -#define MY_RELATIVE_PATH 128 /* name is relative to 'dir' */ -#define MY_APPEND_EXT 256 /* add 'ext' as additional extension*/ - - - /* My seek flags */ -#define MY_SEEK_SET 0 -#define MY_SEEK_CUR 1 -#define MY_SEEK_END 2 - - /* Some constants */ -#define MY_WAIT_FOR_USER_TO_FIX_PANIC 60 /* in seconds */ -#define MY_WAIT_GIVE_USER_A_MESSAGE 10 /* Every 10 times of prev */ -#define MIN_COMPRESS_LENGTH 50 /* Don't compress small bl. */ -#define DFLT_INIT_HITS 3 - - /* root_alloc flags */ -#define MY_KEEP_PREALLOC 1 -#define MY_MARK_BLOCKS_FREE 2 /* move used to free list and reuse them */ - - /* Internal error numbers (for assembler functions) */ -#define MY_ERRNO_EDOM 33 -#define MY_ERRNO_ERANGE 34 - - /* Bits for get_date timeflag */ -#define GETDATE_DATE_TIME 1 -#define GETDATE_SHORT_DATE 2 -#define GETDATE_HHMMSSTIME 4 -#define GETDATE_GMT 8 -#define GETDATE_FIXEDLENGTH 16 - - /* defines when allocating data */ -extern void *my_malloc(size_t Size,myf MyFlags); -extern void *my_multi_malloc(myf MyFlags, ...); -extern void *my_realloc(void *oldpoint, size_t Size, myf MyFlags); -extern void my_free(void *ptr); -extern void *my_memdup(const void *from,size_t length,myf MyFlags); -extern char *my_strdup(const char *from,myf MyFlags); -extern char *my_strndup(const char *from, size_t length, - myf MyFlags); -#define TRASH(A,B) do{MEM_CHECK_ADDRESSABLE(A,B);MEM_UNDEFINED(A,B);} while (0) -#if defined(ENABLED_DEBUG_SYNC) -extern void (*debug_sync_C_callback_ptr)(const char *, size_t); -#define DEBUG_SYNC_C(_sync_point_name_) do { \ - if (debug_sync_C_callback_ptr != NULL) \ - (*debug_sync_C_callback_ptr)(STRING_WITH_LEN(_sync_point_name_)); } \ - while(0) -#else -#define DEBUG_SYNC_C(_sync_point_name_) -#endif /* defined(ENABLED_DEBUG_SYNC) */ - -#ifdef HAVE_LARGE_PAGES -extern uint my_get_large_page_size(void); -extern uchar * my_large_malloc(size_t size, myf my_flags); -extern void my_large_free(uchar *ptr); -#else -#define my_get_large_page_size() (0) -#define my_large_malloc(A,B) my_malloc_lock((A),(B)) -#define my_large_free(A) my_free_lock((A)) -#endif /* HAVE_LARGE_PAGES */ - -#ifdef HAVE_ALLOCA -#if defined(_AIX) && !defined(__GNUC__) && !defined(_AIX43) -#pragma alloca -#endif /* _AIX */ -#if defined(__MWERKS__) -#undef alloca -#define alloca _alloca -#endif /* __MWERKS__ */ -#if defined(__GNUC__) && !defined(HAVE_ALLOCA_H) && ! defined(alloca) -#define alloca __builtin_alloca -#endif /* GNUC */ -#define my_alloca(SZ) alloca((size_t) (SZ)) -#define my_afree(PTR) {} -#else -#define my_alloca(SZ) my_malloc(SZ,MYF(MY_FAE)) -#define my_afree(PTR) my_free(PTR) -#endif /* HAVE_ALLOCA */ - -#ifndef errno /* did we already get it? */ -#ifdef HAVE_ERRNO_AS_DEFINE -#include /* errno is a define */ -#else -extern int errno; /* declare errno */ -#endif -#endif /* #ifndef errno */ -extern char *home_dir; /* Home directory for user */ -extern const char *my_progname; /* program-name (printed in errors) */ -extern char curr_dir[]; /* Current directory for user */ -extern void (*error_handler_hook)(uint my_err, const char *str,myf MyFlags); -extern void (*fatal_error_handler_hook)(uint my_err, const char *str, - myf MyFlags); -extern uint my_file_limit; -extern ulong my_thread_stack_size; - -extern const char *(*proc_info_hook)(void *, const char *, const char *, - const char *, const unsigned int); - -#ifdef HAVE_LARGE_PAGES -extern my_bool my_use_large_pages; -extern uint my_large_page_size; -#endif - -/* charsets */ -#define MY_ALL_CHARSETS_SIZE 2048 -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *default_charset_info; -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *all_charsets[MY_ALL_CHARSETS_SIZE]; -extern CHARSET_INFO compiled_charsets[]; - -/* statistics */ -extern ulong my_file_opened,my_stream_opened, my_tmp_file_created; -extern ulong my_file_total_opened; -extern uint mysys_usage_id; -extern my_bool my_init_done; - - /* Point to current my_message() */ -extern void (*my_sigtstp_cleanup)(void), - /* Executed before jump to shell */ - (*my_sigtstp_restart)(void), - (*my_abort_hook)(int); - /* Executed when comming from shell */ -extern MYSQL_PLUGIN_IMPORT int my_umask; /* Default creation mask */ -extern int my_umask_dir, - my_recived_signals, /* Signals we have got */ - my_safe_to_handle_signal, /* Set when allowed to SIGTSTP */ - my_dont_interrupt; /* call remember_intr when set */ -extern my_bool my_use_symdir; - -extern ulong my_default_record_cache_size; -extern my_bool my_disable_locking, my_disable_async_io, - my_disable_flush_key_blocks, my_disable_symlinks; -extern char wild_many,wild_one,wild_prefix; -extern const char *charsets_dir; -/* from default.c */ -extern const char *my_defaults_extra_file; -extern const char *my_defaults_group_suffix; -extern const char *my_defaults_file; - -extern my_bool timed_mutexes; - -enum loglevel { - ERROR_LEVEL, - WARNING_LEVEL, - INFORMATION_LEVEL -}; - -enum cache_type -{ - TYPE_NOT_SET= 0, READ_CACHE, WRITE_CACHE, - SEQ_READ_APPEND /* sequential read or append */, - READ_FIFO, READ_NET,WRITE_NET}; - -enum flush_type -{ - FLUSH_KEEP, /* flush block and keep it in the cache */ - FLUSH_RELEASE, /* flush block and remove it from the cache */ - FLUSH_IGNORE_CHANGED, /* remove block from the cache */ - /* - As my_disable_flush_pagecache_blocks is always 0, the following option - is strictly equivalent to FLUSH_KEEP - */ - FLUSH_FORCE_WRITE -}; - -typedef struct st_record_cache /* Used when cacheing records */ -{ - File file; - int rc_seek,error,inited; - uint rc_length,read_length,reclength; - my_off_t rc_record_pos,end_of_file; - uchar *rc_buff,*rc_buff2,*rc_pos,*rc_end,*rc_request_pos; -#ifdef HAVE_AIOWAIT - int use_async_io; - my_aio_result aio_result; -#endif - enum cache_type type; -} RECORD_CACHE; - -enum file_type -{ - UNOPEN = 0, FILE_BY_OPEN, FILE_BY_CREATE, STREAM_BY_FOPEN, STREAM_BY_FDOPEN, - FILE_BY_MKSTEMP, FILE_BY_DUP -}; - -struct st_my_file_info -{ - char *name; -#ifdef _WIN32 - HANDLE fhandle; /* win32 file handle */ - int oflag; /* open flags, e.g O_APPEND */ -#endif - enum file_type type; -#if !defined(HAVE_PREAD) && !defined(_WIN32) - mysql_mutex_t mutex; -#endif -}; - -extern struct st_my_file_info *my_file_info; - -typedef struct st_dynamic_array -{ - uchar *buffer; - uint elements,max_element; - uint alloc_increment; - uint size_of_element; -} DYNAMIC_ARRAY; - -typedef struct st_my_tmpdir -{ - DYNAMIC_ARRAY full_list; - char **list; - uint cur, max; - mysql_mutex_t mutex; -} MY_TMPDIR; - -typedef struct st_dynamic_string -{ - char *str; - size_t length,max_length,alloc_increment; -} DYNAMIC_STRING; - -struct st_io_cache; -typedef int (*IO_CACHE_CALLBACK)(struct st_io_cache*); - -typedef struct st_io_cache_share -{ - mysql_mutex_t mutex; /* To sync on reads into buffer. */ - mysql_cond_t cond; /* To wait for signals. */ - mysql_cond_t cond_writer; /* For a synchronized writer. */ - /* Offset in file corresponding to the first byte of buffer. */ - my_off_t pos_in_file; - /* If a synchronized write cache is the source of the data. */ - struct st_io_cache *source_cache; - uchar *buffer; /* The read buffer. */ - uchar *read_end; /* Behind last valid byte of buffer. */ - int running_threads; /* threads not in lock. */ - int total_threads; /* threads sharing the cache. */ - int error; /* Last error. */ -#ifdef NOT_YET_IMPLEMENTED - /* whether the structure should be free'd */ - my_bool alloced; -#endif -} IO_CACHE_SHARE; - -typedef struct st_io_cache /* Used when cacheing files */ -{ - /* Offset in file corresponding to the first byte of uchar* buffer. */ - my_off_t pos_in_file; - /* - The offset of end of file for READ_CACHE and WRITE_CACHE. - For SEQ_READ_APPEND it the maximum of the actual end of file and - the position represented by read_end. - */ - my_off_t end_of_file; - /* Points to current read position in the buffer */ - uchar *read_pos; - /* the non-inclusive boundary in the buffer for the currently valid read */ - uchar *read_end; - uchar *buffer; /* The read buffer */ - /* Used in ASYNC_IO */ - uchar *request_pos; - - /* Only used in WRITE caches and in SEQ_READ_APPEND to buffer writes */ - uchar *write_buffer; - /* - Only used in SEQ_READ_APPEND, and points to the current read position - in the write buffer. Note that reads in SEQ_READ_APPEND caches can - happen from both read buffer (uchar* buffer) and write buffer - (uchar* write_buffer). - */ - uchar *append_read_pos; - /* Points to current write position in the write buffer */ - uchar *write_pos; - /* The non-inclusive boundary of the valid write area */ - uchar *write_end; - - /* - Current_pos and current_end are convenience variables used by - my_b_tell() and other routines that need to know the current offset - current_pos points to &write_pos, and current_end to &write_end in a - WRITE_CACHE, and &read_pos and &read_end respectively otherwise - */ - uchar **current_pos, **current_end; - - /* - The lock is for append buffer used in SEQ_READ_APPEND cache - need mutex copying from append buffer to read buffer. - */ - mysql_mutex_t append_buffer_lock; - /* - The following is used when several threads are reading the - same file in parallel. They are synchronized on disk - accesses reading the cached part of the file asynchronously. - It should be set to NULL to disable the feature. Only - READ_CACHE mode is supported. - */ - IO_CACHE_SHARE *share; - - /* - A caller will use my_b_read() macro to read from the cache - if the data is already in cache, it will be simply copied with - memcpy() and internal variables will be accordinging updated with - no functions invoked. However, if the data is not fully in the cache, - my_b_read() will call read_function to fetch the data. read_function - must never be invoked directly. - */ - int (*read_function)(struct st_io_cache *,uchar *,size_t); - /* - Same idea as in the case of read_function, except my_b_write() needs to - be replaced with my_b_append() for a SEQ_READ_APPEND cache - */ - int (*write_function)(struct st_io_cache *,const uchar *,size_t); - /* - Specifies the type of the cache. Depending on the type of the cache - certain operations might not be available and yield unpredicatable - results. Details to be documented later - */ - enum cache_type type; - /* - Callbacks when the actual read I/O happens. These were added and - are currently used for binary logging of LOAD DATA INFILE - when a - block is read from the file, we create a block create/append event, and - when IO_CACHE is closed, we create an end event. These functions could, - of course be used for other things - */ - IO_CACHE_CALLBACK pre_read; - IO_CACHE_CALLBACK post_read; - IO_CACHE_CALLBACK pre_close; - /* - Counts the number of times, when we were forced to use disk. We use it to - increase the binlog_cache_disk_use and binlog_stmt_cache_disk_use status - variables. - */ - ulong disk_writes; - void* arg; /* for use by pre/post_read */ - char *file_name; /* if used with 'open_cached_file' */ - char *dir,*prefix; - File file; /* file descriptor */ - /* - seek_not_done is set by my_b_seek() to inform the upcoming read/write - operation that a seek needs to be preformed prior to the actual I/O - error is 0 if the cache operation was successful, -1 if there was a - "hard" error, and the actual number of I/O-ed bytes if the read/write was - partial. - */ - int seek_not_done,error; - /* buffer_length is memory size allocated for buffer or write_buffer */ - size_t buffer_length; - /* read_length is the same as buffer_length except when we use async io */ - size_t read_length; - myf myflags; /* Flags used to my_read/my_write */ - /* - alloced_buffer is 1 if the buffer was allocated by init_io_cache() and - 0 if it was supplied by the user. - Currently READ_NET is the only one that will use a buffer allocated - somewhere else - */ - my_bool alloced_buffer; -#ifdef HAVE_AIOWAIT - /* - As inidicated by ifdef, this is for async I/O, which is not currently - used (because it's not reliable on all systems) - */ - uint inited; - my_off_t aio_read_pos; - my_aio_result aio_result; -#endif -} IO_CACHE; - -typedef int (*qsort2_cmp)(const void *, const void *, const void *); - - /* defines for mf_iocache */ - - /* Test if buffer is inited */ -#define my_b_clear(info) (info)->buffer=0 -#define my_b_inited(info) (info)->buffer -#define my_b_EOF INT_MIN - -#define my_b_read(info,Buffer,Count) \ - ((info)->read_pos + (Count) <= (info)->read_end ?\ - (memcpy(Buffer,(info)->read_pos,(size_t) (Count)), \ - ((info)->read_pos+=(Count)),0) :\ - (*(info)->read_function)((info),Buffer,Count)) - -#define my_b_write(info,Buffer,Count) \ - ((info)->write_pos + (Count) <=(info)->write_end ?\ - (memcpy((info)->write_pos, (Buffer), (size_t)(Count)),\ - ((info)->write_pos+=(Count)),0) : \ - (*(info)->write_function)((info),(uchar *)(Buffer),(Count))) - -#define my_b_get(info) \ - ((info)->read_pos != (info)->read_end ?\ - ((info)->read_pos++, (int) (uchar) (info)->read_pos[-1]) :\ - _my_b_get(info)) - - /* my_b_write_byte dosn't have any err-check */ -#define my_b_write_byte(info,chr) \ - (((info)->write_pos < (info)->write_end) ?\ - ((*(info)->write_pos++)=(chr)) :\ - (_my_b_write(info,0,0) , ((*(info)->write_pos++)=(chr)))) - -#define my_b_fill_cache(info) \ - (((info)->read_end=(info)->read_pos),(*(info)->read_function)(info,0,0)) - -#define my_b_tell(info) ((info)->pos_in_file + \ - (size_t) (*(info)->current_pos - (info)->request_pos)) - -#define my_b_get_buffer_start(info) (info)->request_pos -#define my_b_get_bytes_in_buffer(info) (char*) (info)->read_end - \ - (char*) my_b_get_buffer_start(info) -#define my_b_get_pos_in_file(info) (info)->pos_in_file - -/* tell write offset in the SEQ_APPEND cache */ -int my_b_copy_to_file(IO_CACHE *cache, FILE *file); -my_off_t my_b_append_tell(IO_CACHE* info); -my_off_t my_b_safe_tell(IO_CACHE* info); /* picks the correct tell() */ - -#define my_b_bytes_in_cache(info) (size_t) (*(info)->current_end - \ - *(info)->current_pos) - -typedef uint32 ha_checksum; - -/* Define the type of function to be passed to process_default_option_files */ -typedef int (*Process_option_func)(void *ctx, const char *group_name, - const char *option); - -#include - - - /* Prototypes for mysys and my_func functions */ - -extern int my_copy(const char *from,const char *to,myf MyFlags); -extern int my_delete(const char *name,myf MyFlags); -extern int my_getwd(char * buf,size_t size,myf MyFlags); -extern int my_setwd(const char *dir,myf MyFlags); -extern int my_lock(File fd,int op,my_off_t start, my_off_t length,myf MyFlags); -extern void *my_once_alloc(size_t Size,myf MyFlags); -extern void my_once_free(void); -extern char *my_once_strdup(const char *src,myf myflags); -extern void *my_once_memdup(const void *src, size_t len, myf myflags); -extern File my_open(const char *FileName,int Flags,myf MyFlags); -extern File my_register_filename(File fd, const char *FileName, - enum file_type type_of_file, - uint error_message_number, myf MyFlags); -extern File my_create(const char *FileName,int CreateFlags, - int AccessFlags, myf MyFlags); -extern int my_close(File Filedes,myf MyFlags); -extern int my_mkdir(const char *dir, int Flags, myf MyFlags); -extern int my_readlink(char *to, const char *filename, myf MyFlags); -extern int my_is_symlink(const char *filename); -extern int my_realpath(char *to, const char *filename, myf MyFlags); -extern File my_create_with_symlink(const char *linkname, const char *filename, - int createflags, int access_flags, - myf MyFlags); -extern int my_delete_with_symlink(const char *name, myf MyFlags); -extern int my_rename_with_symlink(const char *from,const char *to,myf MyFlags); -extern int my_symlink(const char *content, const char *linkname, myf MyFlags); -extern size_t my_read(File Filedes,uchar *Buffer,size_t Count,myf MyFlags); -extern size_t my_pread(File Filedes,uchar *Buffer,size_t Count,my_off_t offset, - myf MyFlags); -extern int my_rename(const char *from,const char *to,myf MyFlags); -extern my_off_t my_seek(File fd,my_off_t pos,int whence,myf MyFlags); -extern my_off_t my_tell(File fd,myf MyFlags); -extern size_t my_write(File Filedes,const uchar *Buffer,size_t Count, - myf MyFlags); -extern size_t my_pwrite(File Filedes,const uchar *Buffer,size_t Count, - my_off_t offset,myf MyFlags); -extern size_t my_fread(FILE *stream,uchar *Buffer,size_t Count,myf MyFlags); -extern size_t my_fwrite(FILE *stream,const uchar *Buffer,size_t Count, - myf MyFlags); -extern my_off_t my_fseek(FILE *stream,my_off_t pos,int whence,myf MyFlags); -extern my_off_t my_ftell(FILE *stream,myf MyFlags); - -/* implemented in my_memmem.c */ -extern void *my_memmem(const void *haystack, size_t haystacklen, - const void *needle, size_t needlelen); - - -#ifdef _WIN32 -extern int my_access(const char *path, int amode); -#else -#define my_access access -#endif - -extern int check_if_legal_filename(const char *path); -extern int check_if_legal_tablename(const char *path); - -#ifdef _WIN32 -extern int nt_share_delete(const char *name,myf MyFlags); -#define my_delete_allow_opened(fname,flags) nt_share_delete((fname),(flags)) -#else -#define my_delete_allow_opened(fname,flags) my_delete((fname),(flags)) -#endif - -#ifdef _WIN32 -/* Windows-only functions (CRT equivalents)*/ -extern HANDLE my_get_osfhandle(File fd); -extern void my_osmaperr(unsigned long last_error); -#endif - -extern void init_glob_errs(void); -extern const char** get_global_errmsgs(); -extern void wait_for_free_space(const char *filename, int errors); -extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags); -extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags); -extern FILE *my_freopen(const char *path, const char *mode, FILE *stream); -extern int my_fclose(FILE *fd,myf MyFlags); -extern File my_fileno(FILE *fd); -extern int my_chsize(File fd,my_off_t newlength, int filler, myf MyFlags); -extern int my_sync(File fd, myf my_flags); -extern int my_sync_dir(const char *dir_name, myf my_flags); -extern int my_sync_dir_by_file(const char *file_name, myf my_flags); -extern void my_error(int nr,myf MyFlags, ...); -extern void my_printf_error(uint my_err, const char *format, - myf MyFlags, ...) - ATTRIBUTE_FORMAT(printf, 2, 4); -extern void my_printv_error(uint error, const char *format, myf MyFlags, - va_list ap); -extern int my_error_register(const char** (*get_errmsgs) (), - int first, int last); -extern const char **my_error_unregister(int first, int last); -extern void my_message(uint my_err, const char *str,myf MyFlags); -extern void my_message_stderr(uint my_err, const char *str, myf MyFlags); -extern my_bool my_basic_init(void); -extern my_bool my_init(void); -extern void my_end(int infoflag); -extern int my_redel(const char *from, const char *to, int MyFlags); -extern int my_copystat(const char *from, const char *to, int MyFlags); -extern char * my_filename(File fd); - -#ifdef EXTRA_DEBUG -void my_print_open_files(void); -#else -#define my_print_open_files() -#endif - -extern my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist); -extern char *my_tmpdir(MY_TMPDIR *tmpdir); -extern void free_tmpdir(MY_TMPDIR *tmpdir); - -extern void my_remember_signal(int signal_number,sig_handler (*func)(int)); -extern size_t dirname_part(char * to,const char *name, size_t *to_res_length); -extern size_t dirname_length(const char *name); -#define base_name(A) (A+dirname_length(A)) -extern int test_if_hard_path(const char *dir_name); -extern my_bool has_path(const char *name); -extern char *convert_dirname(char *to, const char *from, const char *from_end); -extern void to_unix_path(char * name); -extern char * fn_ext(const char *name); -extern char * fn_same(char * toname,const char *name,int flag); -extern char * fn_format(char * to,const char *name,const char *dir, - const char *form, uint flag); -extern size_t strlength(const char *str); -extern void pack_dirname(char * to,const char *from); -extern size_t normalize_dirname(char * to, const char *from); -extern size_t unpack_dirname(char * to,const char *from); -extern size_t cleanup_dirname(char * to,const char *from); -extern size_t system_filename(char * to,const char *from); -extern size_t unpack_filename(char * to,const char *from); -extern char * intern_filename(char * to,const char *from); -extern char * directory_file_name(char * dst, const char *src); -extern int pack_filename(char * to, const char *name, size_t max_length); -extern char * my_path(char * to,const char *progname, - const char *own_pathname_part); -extern char * my_load_path(char * to, const char *path, - const char *own_path_prefix); -extern int wild_compare(const char *str,const char *wildstr, - pbool str_is_pattern); -extern my_bool array_append_string_unique(const char *str, - const char **array, size_t size); -extern void get_date(char * to,int timeflag,time_t use_time); -extern void soundex(CHARSET_INFO *, char * out_pntr, char * in_pntr, - pbool remove_garbage); -extern int init_record_cache(RECORD_CACHE *info,size_t cachesize,File file, - size_t reclength,enum cache_type type, - pbool use_async_io); -extern int read_cache_record(RECORD_CACHE *info,uchar *to); -extern int end_record_cache(RECORD_CACHE *info); -extern int write_cache_record(RECORD_CACHE *info,my_off_t filepos, - const uchar *record,size_t length); -extern int flush_write_cache(RECORD_CACHE *info); -extern void handle_recived_signals(void); - -extern sig_handler my_set_alarm_variable(int signo); -extern void my_string_ptr_sort(uchar *base,uint items,size_t size); -extern void radixsort_for_str_ptr(uchar* base[], uint number_of_elements, - size_t size_of_element,uchar *buffer[]); -extern qsort_t my_qsort(void *base_ptr, size_t total_elems, size_t size, - qsort_cmp cmp); -extern qsort_t my_qsort2(void *base_ptr, size_t total_elems, size_t size, - qsort2_cmp cmp, void *cmp_argument); -extern qsort2_cmp get_ptr_compare(size_t); -void my_store_ptr(uchar *buff, size_t pack_length, my_off_t pos); -my_off_t my_get_ptr(uchar *ptr, size_t pack_length); -extern int init_io_cache(IO_CACHE *info,File file,size_t cachesize, - enum cache_type type,my_off_t seek_offset, - pbool use_async_io, myf cache_myflags); -extern my_bool reinit_io_cache(IO_CACHE *info,enum cache_type type, - my_off_t seek_offset,pbool use_async_io, - pbool clear_cache); -extern void setup_io_cache(IO_CACHE* info); -extern int _my_b_read(IO_CACHE *info,uchar *Buffer,size_t Count); -extern int _my_b_read_r(IO_CACHE *info,uchar *Buffer,size_t Count); -extern void init_io_cache_share(IO_CACHE *read_cache, IO_CACHE_SHARE *cshare, - IO_CACHE *write_cache, uint num_threads); -extern void remove_io_thread(IO_CACHE *info); -extern int _my_b_seq_read(IO_CACHE *info,uchar *Buffer,size_t Count); -extern int _my_b_net_read(IO_CACHE *info,uchar *Buffer,size_t Count); -extern int _my_b_get(IO_CACHE *info); -extern int _my_b_async_read(IO_CACHE *info,uchar *Buffer,size_t Count); -extern int _my_b_write(IO_CACHE *info,const uchar *Buffer,size_t Count); -extern int my_b_append(IO_CACHE *info,const uchar *Buffer,size_t Count); -extern int my_b_safe_write(IO_CACHE *info,const uchar *Buffer,size_t Count); - -extern int my_block_write(IO_CACHE *info, const uchar *Buffer, - size_t Count, my_off_t pos); -extern int my_b_flush_io_cache(IO_CACHE *info, int need_append_buffer_lock); - -#define flush_io_cache(info) my_b_flush_io_cache((info),1) - -extern int end_io_cache(IO_CACHE *info); -extern size_t my_b_fill(IO_CACHE *info); -extern void my_b_seek(IO_CACHE *info,my_off_t pos); -extern size_t my_b_gets(IO_CACHE *info, char *to, size_t max_length); -extern my_off_t my_b_filelength(IO_CACHE *info); -extern size_t my_b_printf(IO_CACHE *info, const char* fmt, ...); -extern size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list ap); -extern my_bool open_cached_file(IO_CACHE *cache,const char *dir, - const char *prefix, size_t cache_size, - myf cache_myflags); -extern my_bool real_open_cached_file(IO_CACHE *cache); -extern void close_cached_file(IO_CACHE *cache); -File create_temp_file(char *to, const char *dir, const char *pfx, - int mode, myf MyFlags); -#define my_init_dynamic_array(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D) -#define my_init_dynamic_array_ci(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D) -#define my_init_dynamic_array2(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E) -#define my_init_dynamic_array2_ci(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E) -extern my_bool init_dynamic_array2(DYNAMIC_ARRAY *array, uint element_size, - void *init_buffer, uint init_alloc, - uint alloc_increment); -/* init_dynamic_array() function is deprecated */ -extern my_bool init_dynamic_array(DYNAMIC_ARRAY *array, uint element_size, - uint init_alloc, uint alloc_increment); -extern my_bool insert_dynamic(DYNAMIC_ARRAY *array,uchar * element); -extern uchar *alloc_dynamic(DYNAMIC_ARRAY *array); -extern uchar *pop_dynamic(DYNAMIC_ARRAY*); -extern my_bool set_dynamic(DYNAMIC_ARRAY *array,uchar * element,uint array_index); -extern my_bool allocate_dynamic(DYNAMIC_ARRAY *array, uint max_elements); -extern void get_dynamic(DYNAMIC_ARRAY *array,uchar * element,uint array_index); -extern void delete_dynamic(DYNAMIC_ARRAY *array); -extern void delete_dynamic_element(DYNAMIC_ARRAY *array, uint array_index); -extern void freeze_size(DYNAMIC_ARRAY *array); -extern int get_index_dynamic(DYNAMIC_ARRAY *array, uchar * element); -#define dynamic_array_ptr(array,array_index) ((array)->buffer+(array_index)*(array)->size_of_element) -#define dynamic_element(array,array_index,type) ((type)((array)->buffer) +(array_index)) -#define push_dynamic(A,B) insert_dynamic((A),(B)) -#define reset_dynamic(array) ((array)->elements= 0) -#define sort_dynamic(A,cmp) my_qsort((A)->buffer, (A)->elements, (A)->size_of_element, (cmp)) - -extern my_bool init_dynamic_string(DYNAMIC_STRING *str, const char *init_str, - size_t init_alloc,size_t alloc_increment); -extern my_bool dynstr_append(DYNAMIC_STRING *str, const char *append); -my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append, - size_t length); -extern my_bool dynstr_append_os_quoted(DYNAMIC_STRING *str, const char *append, - ...); -extern my_bool dynstr_set(DYNAMIC_STRING *str, const char *init_str); -extern my_bool dynstr_realloc(DYNAMIC_STRING *str, size_t additional_size); -extern my_bool dynstr_trunc(DYNAMIC_STRING *str, size_t n); -extern void dynstr_free(DYNAMIC_STRING *str); -#ifdef HAVE_MLOCK -extern void *my_malloc_lock(size_t length,myf flags); -extern void my_free_lock(void *ptr); -#else -#define my_malloc_lock(A,B) my_malloc((A),(B)) -#define my_free_lock(A) my_free((A)) -#endif -#define alloc_root_inited(A) ((A)->min_malloc != 0) -#define ALLOC_ROOT_MIN_BLOCK_SIZE (MALLOC_OVERHEAD + sizeof(USED_MEM) + 8) -#define clear_alloc_root(A) do { (A)->free= (A)->used= (A)->pre_alloc= 0; (A)->min_malloc=0;} while(0) -extern void init_alloc_root(MEM_ROOT *mem_root, size_t block_size, - size_t pre_alloc_size); -extern void *alloc_root(MEM_ROOT *mem_root, size_t Size); -extern void *multi_alloc_root(MEM_ROOT *mem_root, ...); -extern void free_root(MEM_ROOT *root, myf MyFLAGS); -extern void set_prealloc_root(MEM_ROOT *root, char *ptr); -extern void reset_root_defaults(MEM_ROOT *mem_root, size_t block_size, - size_t prealloc_size); -extern char *strdup_root(MEM_ROOT *root,const char *str); -static inline char *safe_strdup_root(MEM_ROOT *root, const char *str) -{ - return str ? strdup_root(root, str) : 0; -} -extern char *strmake_root(MEM_ROOT *root,const char *str,size_t len); -extern void *memdup_root(MEM_ROOT *root,const void *str, size_t len); -extern int get_defaults_options(int argc, char **argv, - char **defaults, char **extra_defaults, - char **group_suffix); -extern const char *args_separator; -extern int my_load_defaults(const char *conf_file, const char **groups, - int *argc, char ***argv, const char ***); -extern int load_defaults(const char *conf_file, const char **groups, - int *argc, char ***argv); -extern int my_search_option_files(const char *conf_file, int *argc, - char ***argv, uint *args_used, - Process_option_func func, void *func_ctx, - const char **default_directories); -extern void free_defaults(char **argv); -extern void my_print_default_files(const char *conf_file); -extern void print_defaults(const char *conf_file, const char **groups); -extern my_bool my_compress(uchar *, size_t *, size_t *); -extern my_bool my_uncompress(uchar *, size_t , size_t *); -extern uchar *my_compress_alloc(const uchar *packet, size_t *len, - size_t *complen); -extern int packfrm(uchar *, size_t, uchar **, size_t *); -extern int unpackfrm(uchar **, size_t *, const uchar *); - -extern ha_checksum my_checksum(ha_checksum crc, const uchar *mem, - size_t count); -extern void my_sleep(ulong m_seconds); -extern ulong crc32(ulong crc, const uchar *buf, uint len); -extern uint my_set_max_open_files(uint files); -void my_free_open_file_info(void); - -extern time_t my_time(myf flags); -extern ulonglong my_getsystime(void); -extern ulonglong my_micro_time(); -extern ulonglong my_micro_time_and_time(time_t *time_arg); -time_t my_time_possible_from_micro(ulonglong microtime); -extern my_bool my_gethwaddr(uchar *to); -extern int my_getncpus(); - -#ifdef HAVE_SYS_MMAN_H -#include - -#ifndef MAP_NOSYNC -#define MAP_NOSYNC 0 -#endif -#ifndef MAP_NORESERVE -#define MAP_NORESERVE 0 /* For irix and AIX */ -#endif - -#ifdef HAVE_MMAP64 -#define my_mmap(a,b,c,d,e,f) mmap64(a,b,c,d,e,f) -#else -#define my_mmap(a,b,c,d,e,f) mmap(a,b,c,d,e,f) -#endif -#define my_munmap(a,b) munmap((a),(b)) - -#else -/* not a complete set of mmap() flags, but only those that nesessary */ -#define PROT_READ 1 -#define PROT_WRITE 2 -#define MAP_NORESERVE 0 -#define MAP_SHARED 0x0001 -#define MAP_PRIVATE 0x0002 -#define MAP_NOSYNC 0x0800 -#define MAP_FAILED ((void *)-1) -#define MS_SYNC 0x0000 - -#define HAVE_MMAP -void *my_mmap(void *, size_t, int, int, int, my_off_t); -int my_munmap(void *, size_t); -#endif - -/* my_getpagesize */ -#ifdef HAVE_GETPAGESIZE -#define my_getpagesize() getpagesize() -#else -int my_getpagesize(void); -#endif - -int my_msync(int, void *, size_t, int); - -/* character sets */ -extern uint get_charset_number(const char *cs_name, uint cs_flags); -extern uint get_collation_number(const char *name); -extern const char *get_charset_name(uint cs_number); - -extern CHARSET_INFO *get_charset(uint cs_number, myf flags); -extern CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags); -extern CHARSET_INFO *get_charset_by_csname(const char *cs_name, - uint cs_flags, myf my_flags); - -extern my_bool resolve_charset(const char *cs_name, - CHARSET_INFO *default_cs, - CHARSET_INFO **cs); -extern my_bool resolve_collation(const char *cl_name, - CHARSET_INFO *default_cl, - CHARSET_INFO **cl); -extern void free_charsets(void); -extern char *get_charsets_dir(char *buf); -extern my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2); -extern my_bool init_compiled_charsets(myf flags); -extern void add_compiled_collation(CHARSET_INFO *cs); -extern size_t escape_string_for_mysql(CHARSET_INFO *charset_info, - char *to, size_t to_length, - const char *from, size_t length); -#ifdef __WIN__ -#define BACKSLASH_MBTAIL -/* File system character set */ -extern CHARSET_INFO *fs_character_set(void); -#endif -extern size_t escape_quotes_for_mysql(CHARSET_INFO *charset_info, - char *to, size_t to_length, - const char *from, size_t length); - -extern void thd_increment_bytes_sent(ulong length); -extern void thd_increment_bytes_received(ulong length); -extern void thd_increment_net_big_packet_count(ulong length); - -#ifdef __WIN__ -extern my_bool have_tcpip; /* Is set if tcpip is used */ - -/* implemented in my_windac.c */ - -int my_security_attr_create(SECURITY_ATTRIBUTES **psa, const char **perror, - DWORD owner_rights, DWORD everybody_rights); - -void my_security_attr_free(SECURITY_ATTRIBUTES *sa); - -/* implemented in my_conio.c */ -char* my_cgets(char *string, size_t clen, size_t* plen); - -#endif - -#include - -#ifdef HAVE_PSI_INTERFACE -extern MYSQL_PLUGIN_IMPORT struct PSI_bootstrap *PSI_hook; -void my_init_mysys_psi_keys(void); -#endif - -struct st_mysql_file; -extern struct st_mysql_file *mysql_stdin; - -C_MODE_END -#endif /* _my_sys_h */ diff --git a/deps/mysqllite/include/my_xml.h b/deps/mysqllite/include/my_xml.h deleted file mode 100644 index 6a453ee90be935..00000000000000 --- a/deps/mysqllite/include/my_xml.h +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#ifndef _my_xml_h -#define _my_xml_h - -#ifdef __cplusplus -extern "C" { -#endif - - -#define MY_XML_OK 0 -#define MY_XML_ERROR 1 - -/* - A flag whether to use absolute tag names in call-back functions, - like "a", "a.b" and "a.b.c" (used in character set file parser), - or relative names like "a", "b" and "c". -*/ -#define MY_XML_FLAG_RELATIVE_NAMES 1 - -/* - A flag whether to skip normilization of text values before calling - call-back functions: i.e. skip leading/trailing spaces, - \r, \n, \t characters. -*/ -#define MY_XML_FLAG_SKIP_TEXT_NORMALIZATION 2 - -enum my_xml_node_type -{ - MY_XML_NODE_TAG, /* can have TAG, ATTR and TEXT children */ - MY_XML_NODE_ATTR, /* can have TEXT children */ - MY_XML_NODE_TEXT /* cannot have children */ -}; - -typedef struct xml_stack_st -{ - int flags; - enum my_xml_node_type current_node_type; - char errstr[128]; - char attr[128]; - char *attrend; - const char *beg; - const char *cur; - const char *end; - void *user_data; - int (*enter)(struct xml_stack_st *st,const char *val, size_t len); - int (*value)(struct xml_stack_st *st,const char *val, size_t len); - int (*leave_xml)(struct xml_stack_st *st,const char *val, size_t len); -} MY_XML_PARSER; - -void my_xml_parser_create(MY_XML_PARSER *st); -void my_xml_parser_free(MY_XML_PARSER *st); -int my_xml_parse(MY_XML_PARSER *st,const char *str, size_t len); - -void my_xml_set_value_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, - const char *, - size_t len)); -void my_xml_set_enter_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, - const char *, - size_t len)); -void my_xml_set_leave_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, - const char *, - size_t len)); -void my_xml_set_user_data(MY_XML_PARSER *st, void *); - -size_t my_xml_error_pos(MY_XML_PARSER *st); -uint my_xml_error_lineno(MY_XML_PARSER *st); - -const char *my_xml_error_string(MY_XML_PARSER *st); - -#ifdef __cplusplus -} -#endif - -#endif /* _my_xml_h */ diff --git a/deps/mysqllite/include/mysql.h b/deps/mysqllite/include/mysql.h deleted file mode 100644 index 0755846bc894f4..00000000000000 --- a/deps/mysqllite/include/mysql.h +++ /dev/null @@ -1,713 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - This file defines the client API to MySQL and also the ABI of the - dynamically linked libmysqlclient. - - The ABI should never be changed in a released product of MySQL, - thus you need to take great care when changing the file. In case - the file is changed so the ABI is broken, you must also update - the SHARED_LIB_MAJOR_VERSION in cmake/mysql_version.cmake -*/ - -#ifndef _mysql_h -#define _mysql_h - -#ifdef _AIX /* large-file support will break without this */ -#include -#endif - -#ifdef __CYGWIN__ /* CYGWIN implements a UNIX API */ -#undef WIN -#undef _WIN -#undef _WIN32 -#undef _WIN64 -#undef __WIN__ -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _global_h /* If not standard header */ -#ifndef MYSQL_ABI_CHECK -#include -#endif -#ifdef __LCC__ -#include /* For windows */ -#endif -typedef char my_bool; -#if (defined(_WIN32) || defined(_WIN64)) && !defined(__WIN__) -#define __WIN__ -#endif -#if !defined(__WIN__) -#define STDCALL -#else -#define STDCALL __stdcall -#endif - -#ifndef my_socket_defined -#ifdef __WIN__ -#define my_socket SOCKET -#else -typedef int my_socket; -#endif /* __WIN__ */ -#endif /* my_socket_defined */ -#endif /* _global_h */ - -#include "mysql_version.h" -#include "mysql_com.h" -#include "mysql_time.h" - -#include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */ - -extern unsigned int mysql_port; -extern char *mysql_unix_port; - -#define CLIENT_NET_READ_TIMEOUT 365*24*3600 /* Timeout on read */ -#define CLIENT_NET_WRITE_TIMEOUT 365*24*3600 /* Timeout on write */ - -#define IS_PRI_KEY(n) ((n) & PRI_KEY_FLAG) -#define IS_NOT_NULL(n) ((n) & NOT_NULL_FLAG) -#define IS_BLOB(n) ((n) & BLOB_FLAG) -/** - Returns true if the value is a number which does not need quotes for - the sql_lex.cc parser to parse correctly. -*/ -#define IS_NUM(t) (((t) <= MYSQL_TYPE_INT24 && (t) != MYSQL_TYPE_TIMESTAMP) || (t) == MYSQL_TYPE_YEAR || (t) == MYSQL_TYPE_NEWDECIMAL) -#define IS_LONGDATA(t) ((t) >= MYSQL_TYPE_TINY_BLOB && (t) <= MYSQL_TYPE_STRING) - - -typedef struct st_mysql_field { - char *name; /* Name of column */ - char *org_name; /* Original column name, if an alias */ - char *table; /* Table of column if column was a field */ - char *org_table; /* Org table name, if table was an alias */ - char *db; /* Database for table */ - char *catalog; /* Catalog for table */ - char *def; /* Default value (set by mysql_list_fields) */ - unsigned long length; /* Width of column (create length) */ - unsigned long max_length; /* Max width for selected set */ - unsigned int name_length; - unsigned int org_name_length; - unsigned int table_length; - unsigned int org_table_length; - unsigned int db_length; - unsigned int catalog_length; - unsigned int def_length; - unsigned int flags; /* Div flags */ - unsigned int decimals; /* Number of decimals in field */ - unsigned int charsetnr; /* Character set */ - enum enum_field_types type; /* Type of field. See mysql_com.h for types */ - void *extension; -} MYSQL_FIELD; - -typedef char **MYSQL_ROW; /* return data as array of strings */ -typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field */ - -#ifndef _global_h -#if defined(NO_CLIENT_LONG_LONG) -typedef unsigned long my_ulonglong; -#elif defined (__WIN__) -typedef unsigned __int64 my_ulonglong; -#else -typedef unsigned long long my_ulonglong; -#endif -#endif - -#include "typelib.h" - -#define MYSQL_COUNT_ERROR (~(my_ulonglong) 0) - -/* backward compatibility define - to be removed eventually */ -#define ER_WARN_DATA_TRUNCATED WARN_DATA_TRUNCATED - -typedef struct st_mysql_rows { - struct st_mysql_rows *next; /* list of rows */ - MYSQL_ROW data; - unsigned long length; -} MYSQL_ROWS; - -typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */ - -#include "my_alloc.h" - -typedef struct embedded_query_result EMBEDDED_QUERY_RESULT; -typedef struct st_mysql_data { - MYSQL_ROWS *data; - struct embedded_query_result *embedded_info; - MEM_ROOT alloc; - my_ulonglong rows; - unsigned int fields; - /* extra info for embedded library */ - void *extension; -} MYSQL_DATA; - -enum mysql_option -{ - MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE, - MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, - MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE, - MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT, - MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT, - MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION, - MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH, - MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT, - MYSQL_OPT_SSL_VERIFY_SERVER_CERT, MYSQL_PLUGIN_DIR, MYSQL_DEFAULT_AUTH -}; - -/** - @todo remove the "extension", move st_mysql_options completely - out of mysql.h -*/ -struct st_mysql_options_extention; - -struct st_mysql_options { - unsigned int connect_timeout, read_timeout, write_timeout; - unsigned int port, protocol; - unsigned long client_flag; - char *host,*user,*password,*unix_socket,*db; - struct st_dynamic_array *init_commands; - char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name; - char *ssl_key; /* PEM key file */ - char *ssl_cert; /* PEM cert file */ - char *ssl_ca; /* PEM CA file */ - char *ssl_capath; /* PEM directory of CA-s? */ - char *ssl_cipher; /* cipher to use */ - char *shared_memory_base_name; - unsigned long max_allowed_packet; - my_bool use_ssl; /* if to use SSL or not */ - my_bool compress,named_pipe; - my_bool unused1; - my_bool unused2; - my_bool unused3; - my_bool unused4; - enum mysql_option methods_to_use; - char *client_ip; - /* Refuse client connecting to server if it uses old (pre-4.1.1) protocol */ - my_bool secure_auth; - /* 0 - never report, 1 - always report (default) */ - my_bool report_data_truncation; - - /* function pointers for local infile support */ - int (*local_infile_init)(void **, const char *, void *); - int (*local_infile_read)(void *, char *, unsigned int); - void (*local_infile_end)(void *); - int (*local_infile_error)(void *, char *, unsigned int); - void *local_infile_userdata; - struct st_mysql_options_extention *extension; -}; - -enum mysql_status -{ - MYSQL_STATUS_READY, MYSQL_STATUS_GET_RESULT, MYSQL_STATUS_USE_RESULT, - MYSQL_STATUS_STATEMENT_GET_RESULT -}; - -enum mysql_protocol_type -{ - MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET, - MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY -}; - -typedef struct character_set -{ - unsigned int number; /* character set number */ - unsigned int state; /* character set state */ - const char *csname; /* collation name */ - const char *name; /* character set name */ - const char *comment; /* comment */ - const char *dir; /* character set directory */ - unsigned int mbminlen; /* min. length for multibyte strings */ - unsigned int mbmaxlen; /* max. length for multibyte strings */ -} MY_CHARSET_INFO; - -struct st_mysql_methods; -struct st_mysql_stmt; - -typedef struct st_mysql -{ - NET net; /* Communication parameters */ - unsigned char *connector_fd; /* ConnectorFd for SSL */ - char *host,*user,*passwd,*unix_socket,*server_version,*host_info; - char *info, *db; - struct charset_info_st *charset; - MYSQL_FIELD *fields; - MEM_ROOT field_alloc; - my_ulonglong affected_rows; - my_ulonglong insert_id; /* id if insert on table with NEXTNR */ - my_ulonglong extra_info; /* Not used */ - unsigned long thread_id; /* Id for connection in server */ - unsigned long packet_length; - unsigned int port; - unsigned long client_flag,server_capabilities; - unsigned int protocol_version; - unsigned int field_count; - unsigned int server_status; - unsigned int server_language; - unsigned int warning_count; - struct st_mysql_options options; - enum mysql_status status; - my_bool free_me; /* If free in mysql_close */ - my_bool reconnect; /* set to 1 if automatic reconnect */ - - /* session-wide random string */ - char scramble[SCRAMBLE_LENGTH+1]; - my_bool unused1; - void *unused2, *unused3, *unused4, *unused5; - - LIST *stmts; /* list of all statements */ - const struct st_mysql_methods *methods; - void *thd; - /* - Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flag - from mysql_stmt_close if close had to cancel result set of this object. - */ - my_bool *unbuffered_fetch_owner; - /* needed for embedded server - no net buffer to store the 'info' */ - char *info_buffer; - void *extension; -} MYSQL; - - -typedef struct st_mysql_res { - my_ulonglong row_count; - MYSQL_FIELD *fields; - MYSQL_DATA *data; - MYSQL_ROWS *data_cursor; - unsigned long *lengths; /* column lengths of current row */ - MYSQL *handle; /* for unbuffered reads */ - const struct st_mysql_methods *methods; - MYSQL_ROW row; /* If unbuffered read */ - MYSQL_ROW current_row; /* buffer to current row */ - MEM_ROOT field_alloc; - unsigned int field_count, current_field; - my_bool eof; /* Used by mysql_fetch_row */ - /* mysql_stmt_close() had to cancel this result */ - my_bool unbuffered_fetch_cancelled; - void *extension; -} MYSQL_RES; - - -#if !defined(MYSQL_SERVER) && !defined(MYSQL_CLIENT) -#define MYSQL_CLIENT -#endif - - -typedef struct st_mysql_parameters -{ - unsigned long *p_max_allowed_packet; - unsigned long *p_net_buffer_length; - void *extension; -} MYSQL_PARAMETERS; - -#if !defined(MYSQL_SERVER) && !defined(EMBEDDED_LIBRARY) -#define max_allowed_packet (*mysql_get_parameters()->p_max_allowed_packet) -#define net_buffer_length (*mysql_get_parameters()->p_net_buffer_length) -#endif - -/* - Set up and bring down the server; to ensure that applications will - work when linked against either the standard client library or the - embedded server library, these functions should be called. -*/ -int STDCALL mysql_server_init(int argc, char **argv, char **groups); -void STDCALL mysql_server_end(void); - -/* - mysql_server_init/end need to be called when using libmysqld or - libmysqlclient (exactly, mysql_server_init() is called by mysql_init() so - you don't need to call it explicitely; but you need to call - mysql_server_end() to free memory). The names are a bit misleading - (mysql_SERVER* to be used when using libmysqlCLIENT). So we add more general - names which suit well whether you're using libmysqld or libmysqlclient. We - intend to promote these aliases over the mysql_server* ones. -*/ -#define mysql_library_init mysql_server_init -#define mysql_library_end mysql_server_end - -MYSQL_PARAMETERS *STDCALL mysql_get_parameters(void); - -/* - Set up and bring down a thread; these function should be called - for each thread in an application which opens at least one MySQL - connection. All uses of the connection(s) should be between these - function calls. -*/ -my_bool STDCALL mysql_thread_init(void); -void STDCALL mysql_thread_end(void); - -/* - Functions to get information from the MYSQL and MYSQL_RES structures - Should definitely be used if one uses shared libraries. -*/ - -my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res); -unsigned int STDCALL mysql_num_fields(MYSQL_RES *res); -my_bool STDCALL mysql_eof(MYSQL_RES *res); -MYSQL_FIELD *STDCALL mysql_fetch_field_direct(MYSQL_RES *res, - unsigned int fieldnr); -MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res); -MYSQL_ROW_OFFSET STDCALL mysql_row_tell(MYSQL_RES *res); -MYSQL_FIELD_OFFSET STDCALL mysql_field_tell(MYSQL_RES *res); - -unsigned int STDCALL mysql_field_count(MYSQL *mysql); -my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql); -my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql); -unsigned int STDCALL mysql_errno(MYSQL *mysql); -const char * STDCALL mysql_error(MYSQL *mysql); -const char *STDCALL mysql_sqlstate(MYSQL *mysql); -unsigned int STDCALL mysql_warning_count(MYSQL *mysql); -const char * STDCALL mysql_info(MYSQL *mysql); -unsigned long STDCALL mysql_thread_id(MYSQL *mysql); -const char * STDCALL mysql_character_set_name(MYSQL *mysql); -int STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname); - -MYSQL * STDCALL mysql_init(MYSQL *mysql); -my_bool STDCALL mysql_ssl_set(MYSQL *mysql, const char *key, - const char *cert, const char *ca, - const char *capath, const char *cipher); -const char * STDCALL mysql_get_ssl_cipher(MYSQL *mysql); -my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, - const char *passwd, const char *db); -MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, - const char *user, - const char *passwd, - const char *db, - unsigned int port, - const char *unix_socket, - unsigned long clientflag); -int STDCALL mysql_select_db(MYSQL *mysql, const char *db); -int STDCALL mysql_query(MYSQL *mysql, const char *q); -int STDCALL mysql_send_query(MYSQL *mysql, const char *q, - unsigned long length); -int STDCALL mysql_real_query(MYSQL *mysql, const char *q, - unsigned long length); -MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql); -MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql); - -void STDCALL mysql_get_character_set_info(MYSQL *mysql, - MY_CHARSET_INFO *charset); - -/* local infile support */ - -#define LOCAL_INFILE_ERROR_LEN 512 - -void -mysql_set_local_infile_handler(MYSQL *mysql, - int (*local_infile_init)(void **, const char *, - void *), - int (*local_infile_read)(void *, char *, - unsigned int), - void (*local_infile_end)(void *), - int (*local_infile_error)(void *, char*, - unsigned int), - void *); - -void -mysql_set_local_infile_default(MYSQL *mysql); - -int STDCALL mysql_shutdown(MYSQL *mysql, - enum mysql_enum_shutdown_level - shutdown_level); -int STDCALL mysql_dump_debug_info(MYSQL *mysql); -int STDCALL mysql_refresh(MYSQL *mysql, - unsigned int refresh_options); -int STDCALL mysql_kill(MYSQL *mysql,unsigned long pid); -int STDCALL mysql_set_server_option(MYSQL *mysql, - enum enum_mysql_set_option - option); -int STDCALL mysql_ping(MYSQL *mysql); -const char * STDCALL mysql_stat(MYSQL *mysql); -const char * STDCALL mysql_get_server_info(MYSQL *mysql); -const char * STDCALL mysql_get_client_info(void); -unsigned long STDCALL mysql_get_client_version(void); -const char * STDCALL mysql_get_host_info(MYSQL *mysql); -unsigned long STDCALL mysql_get_server_version(MYSQL *mysql); -unsigned int STDCALL mysql_get_proto_info(MYSQL *mysql); -MYSQL_RES * STDCALL mysql_list_dbs(MYSQL *mysql,const char *wild); -MYSQL_RES * STDCALL mysql_list_tables(MYSQL *mysql,const char *wild); -MYSQL_RES * STDCALL mysql_list_processes(MYSQL *mysql); -int STDCALL mysql_options(MYSQL *mysql,enum mysql_option option, - const void *arg); -void STDCALL mysql_free_result(MYSQL_RES *result); -void STDCALL mysql_data_seek(MYSQL_RES *result, - my_ulonglong offset); -MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result, - MYSQL_ROW_OFFSET offset); -MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result, - MYSQL_FIELD_OFFSET offset); -MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result); -unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result); -MYSQL_FIELD * STDCALL mysql_fetch_field(MYSQL_RES *result); -MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table, - const char *wild); -unsigned long STDCALL mysql_escape_string(char *to,const char *from, - unsigned long from_length); -unsigned long STDCALL mysql_hex_string(char *to,const char *from, - unsigned long from_length); -unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql, - char *to,const char *from, - unsigned long length); -void STDCALL mysql_debug(const char *debug); -void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name); -unsigned int STDCALL mysql_thread_safe(void); -my_bool STDCALL mysql_embedded(void); -my_bool STDCALL mysql_read_query_result(MYSQL *mysql); - - -/* - The following definitions are added for the enhanced - client-server protocol -*/ - -/* statement state */ -enum enum_mysql_stmt_state -{ - MYSQL_STMT_INIT_DONE= 1, MYSQL_STMT_PREPARE_DONE, MYSQL_STMT_EXECUTE_DONE, - MYSQL_STMT_FETCH_DONE -}; - - -/* - This structure is used to define bind information, and - internally by the client library. - Public members with their descriptions are listed below - (conventionally `On input' refers to the binds given to - mysql_stmt_bind_param, `On output' refers to the binds given - to mysql_stmt_bind_result): - - buffer_type - One of the MYSQL_* types, used to describe - the host language type of buffer. - On output: if column type is different from - buffer_type, column value is automatically converted - to buffer_type before it is stored in the buffer. - buffer - On input: points to the buffer with input data. - On output: points to the buffer capable to store - output data. - The type of memory pointed by buffer must correspond - to buffer_type. See the correspondence table in - the comment to mysql_stmt_bind_param. - - The two above members are mandatory for any kind of bind. - - buffer_length - the length of the buffer. You don't have to set - it for any fixed length buffer: float, double, - int, etc. It must be set however for variable-length - types, such as BLOBs or STRINGs. - - length - On input: in case when lengths of input values - are different for each execute, you can set this to - point at a variable containining value length. This - way the value length can be different in each execute. - If length is not NULL, buffer_length is not used. - Note, length can even point at buffer_length if - you keep bind structures around while fetching: - this way you can change buffer_length before - each execution, everything will work ok. - On output: if length is set, mysql_stmt_fetch will - write column length into it. - - is_null - On input: points to a boolean variable that should - be set to TRUE for NULL values. - This member is useful only if your data may be - NULL in some but not all cases. - If your data is never NULL, is_null should be set to 0. - If your data is always NULL, set buffer_type - to MYSQL_TYPE_NULL, and is_null will not be used. - - is_unsigned - On input: used to signify that values provided for one - of numeric types are unsigned. - On output describes signedness of the output buffer. - If, taking into account is_unsigned flag, column data - is out of range of the output buffer, data for this column - is regarded truncated. Note that this has no correspondence - to the sign of result set column, if you need to find it out - use mysql_stmt_result_metadata. - error - where to write a truncation error if it is present. - possible error value is: - 0 no truncation - 1 value is out of range or buffer is too small - - Please note that MYSQL_BIND also has internals members. -*/ - -typedef struct st_mysql_bind -{ - unsigned long *length; /* output length pointer */ - my_bool *is_null; /* Pointer to null indicator */ - void *buffer; /* buffer to get/put data */ - /* set this if you want to track data truncations happened during fetch */ - my_bool *error; - unsigned char *row_ptr; /* for the current data position */ - void (*store_param_func)(NET *net, struct st_mysql_bind *param); - void (*fetch_result)(struct st_mysql_bind *, MYSQL_FIELD *, - unsigned char **row); - void (*skip_result)(struct st_mysql_bind *, MYSQL_FIELD *, - unsigned char **row); - /* output buffer length, must be set when fetching str/binary */ - unsigned long buffer_length; - unsigned long offset; /* offset position for char/binary fetch */ - unsigned long length_value; /* Used if length is 0 */ - unsigned int param_number; /* For null count and error messages */ - unsigned int pack_length; /* Internal length for packed data */ - enum enum_field_types buffer_type; /* buffer type */ - my_bool error_value; /* used if error is 0 */ - my_bool is_unsigned; /* set if integer type is unsigned */ - my_bool long_data_used; /* If used with mysql_send_long_data */ - my_bool is_null_value; /* Used if is_null is 0 */ - void *extension; -} MYSQL_BIND; - - -/* statement handler */ -typedef struct st_mysql_stmt -{ - MEM_ROOT mem_root; /* root allocations */ - LIST list; /* list to keep track of all stmts */ - MYSQL *mysql; /* connection handle */ - MYSQL_BIND *params; /* input parameters */ - MYSQL_BIND *bind; /* output parameters */ - MYSQL_FIELD *fields; /* result set metadata */ - MYSQL_DATA result; /* cached result set */ - MYSQL_ROWS *data_cursor; /* current row in cached result */ - /* - mysql_stmt_fetch() calls this function to fetch one row (it's different - for buffered, unbuffered and cursor fetch). - */ - int (*read_row_func)(struct st_mysql_stmt *stmt, - unsigned char **row); - /* copy of mysql->affected_rows after statement execution */ - my_ulonglong affected_rows; - my_ulonglong insert_id; /* copy of mysql->insert_id */ - unsigned long stmt_id; /* Id for prepared statement */ - unsigned long flags; /* i.e. type of cursor to open */ - unsigned long prefetch_rows; /* number of rows per one COM_FETCH */ - /* - Copied from mysql->server_status after execute/fetch to know - server-side cursor status for this statement. - */ - unsigned int server_status; - unsigned int last_errno; /* error code */ - unsigned int param_count; /* input parameter count */ - unsigned int field_count; /* number of columns in result set */ - enum enum_mysql_stmt_state state; /* statement state */ - char last_error[MYSQL_ERRMSG_SIZE]; /* error message */ - char sqlstate[SQLSTATE_LENGTH+1]; - /* Types of input parameters should be sent to server */ - my_bool send_types_to_server; - my_bool bind_param_done; /* input buffers were supplied */ - unsigned char bind_result_done; /* output buffers were supplied */ - /* mysql_stmt_close() had to cancel this result */ - my_bool unbuffered_fetch_cancelled; - /* - Is set to true if we need to calculate field->max_length for - metadata fields when doing mysql_stmt_store_result. - */ - my_bool update_max_length; - void *extension; -} MYSQL_STMT; - -enum enum_stmt_attr_type -{ - /* - When doing mysql_stmt_store_result calculate max_length attribute - of statement metadata. This is to be consistent with the old API, - where this was done automatically. - In the new API we do that only by request because it slows down - mysql_stmt_store_result sufficiently. - */ - STMT_ATTR_UPDATE_MAX_LENGTH, - /* - unsigned long with combination of cursor flags (read only, for update, - etc) - */ - STMT_ATTR_CURSOR_TYPE, - /* - Amount of rows to retrieve from server per one fetch if using cursors. - Accepts unsigned long attribute in the range 1 - ulong_max - */ - STMT_ATTR_PREFETCH_ROWS -}; - - -MYSQL_STMT * STDCALL mysql_stmt_init(MYSQL *mysql); -int STDCALL mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, - unsigned long length); -int STDCALL mysql_stmt_execute(MYSQL_STMT *stmt); -int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt); -int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind_arg, - unsigned int column, - unsigned long offset); -int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt); -unsigned long STDCALL mysql_stmt_param_count(MYSQL_STMT * stmt); -my_bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt, - enum enum_stmt_attr_type attr_type, - const void *attr); -my_bool STDCALL mysql_stmt_attr_get(MYSQL_STMT *stmt, - enum enum_stmt_attr_type attr_type, - void *attr); -my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bnd); -my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bnd); -my_bool STDCALL mysql_stmt_close(MYSQL_STMT * stmt); -my_bool STDCALL mysql_stmt_reset(MYSQL_STMT * stmt); -my_bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt); -my_bool STDCALL mysql_stmt_send_long_data(MYSQL_STMT *stmt, - unsigned int param_number, - const char *data, - unsigned long length); -MYSQL_RES *STDCALL mysql_stmt_result_metadata(MYSQL_STMT *stmt); -MYSQL_RES *STDCALL mysql_stmt_param_metadata(MYSQL_STMT *stmt); -unsigned int STDCALL mysql_stmt_errno(MYSQL_STMT * stmt); -const char *STDCALL mysql_stmt_error(MYSQL_STMT * stmt); -const char *STDCALL mysql_stmt_sqlstate(MYSQL_STMT * stmt); -MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_seek(MYSQL_STMT *stmt, - MYSQL_ROW_OFFSET offset); -MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_tell(MYSQL_STMT *stmt); -void STDCALL mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong offset); -my_ulonglong STDCALL mysql_stmt_num_rows(MYSQL_STMT *stmt); -my_ulonglong STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt); -my_ulonglong STDCALL mysql_stmt_insert_id(MYSQL_STMT *stmt); -unsigned int STDCALL mysql_stmt_field_count(MYSQL_STMT *stmt); - -my_bool STDCALL mysql_commit(MYSQL * mysql); -my_bool STDCALL mysql_rollback(MYSQL * mysql); -my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode); -my_bool STDCALL mysql_more_results(MYSQL *mysql); -int STDCALL mysql_next_result(MYSQL *mysql); -int STDCALL mysql_stmt_next_result(MYSQL_STMT *stmt); -void STDCALL mysql_close(MYSQL *sock); - - -/* status return codes */ -#define MYSQL_NO_DATA 100 -#define MYSQL_DATA_TRUNCATED 101 - -#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT) - -#ifdef USE_OLD_FUNCTIONS -MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host, - const char *user, const char *passwd); -int STDCALL mysql_create_db(MYSQL *mysql, const char *DB); -int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB); -#endif -#define HAVE_MYSQL_REAL_CONNECT - -#ifdef __cplusplus -} -#endif - -#endif /* _mysql_h */ diff --git a/deps/mysqllite/include/mysql/client_plugin.h b/deps/mysqllite/include/mysql/client_plugin.h deleted file mode 100644 index cc3f468040fc79..00000000000000 --- a/deps/mysqllite/include/mysql/client_plugin.h +++ /dev/null @@ -1,163 +0,0 @@ -#ifndef MYSQL_CLIENT_PLUGIN_INCLUDED -/* Copyright (C) 2010 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/** - @file - - MySQL Client Plugin API - - This file defines the API for plugins that work on the client side -*/ -#define MYSQL_CLIENT_PLUGIN_INCLUDED - -#ifndef MYSQL_ABI_CHECK -#include -#include -#endif - -/* known plugin types */ -#define MYSQL_CLIENT_reserved1 0 -#define MYSQL_CLIENT_reserved2 1 -#define MYSQL_CLIENT_AUTHENTICATION_PLUGIN 2 - -#define MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION 0x0100 - -#define MYSQL_CLIENT_MAX_PLUGINS 3 - -#define mysql_declare_client_plugin(X) \ - MYSQL_PLUGIN_EXPORT struct st_mysql_client_plugin_ ## X \ - _mysql_client_plugin_declaration_ = { \ - MYSQL_CLIENT_ ## X ## _PLUGIN, \ - MYSQL_CLIENT_ ## X ## _PLUGIN_INTERFACE_VERSION, -#define mysql_end_client_plugin } - -/* generic plugin header structure */ -#define MYSQL_CLIENT_PLUGIN_HEADER \ - int type; \ - unsigned int interface_version; \ - const char *name; \ - const char *author; \ - const char *desc; \ - unsigned int version[3]; \ - const char *license; \ - void *mysql_api; \ - int (*init)(char *, size_t, int, va_list); \ - int (*deinit)(); \ - int (*options)(const char *option, const void *); - -struct st_mysql_client_plugin -{ - MYSQL_CLIENT_PLUGIN_HEADER -}; - -struct st_mysql; - -/******** authentication plugin specific declarations *********/ -#include - -struct st_mysql_client_plugin_AUTHENTICATION -{ - MYSQL_CLIENT_PLUGIN_HEADER - int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, struct st_mysql *mysql); -}; - -/******** using plugins ************/ - -/** - loads a plugin and initializes it - - @param mysql MYSQL structure. - @param name a name of the plugin to load - @param type type of plugin that should be loaded, -1 to disable type check - @param argc number of arguments to pass to the plugin initialization - function - @param ... arguments for the plugin initialization function - - @retval - a pointer to the loaded plugin, or NULL in case of a failure -*/ -struct st_mysql_client_plugin * -mysql_load_plugin(struct st_mysql *mysql, const char *name, int type, - int argc, ...); - -/** - loads a plugin and initializes it, taking va_list as an argument - - This is the same as mysql_load_plugin, but take va_list instead of - a list of arguments. - - @param mysql MYSQL structure. - @param name a name of the plugin to load - @param type type of plugin that should be loaded, -1 to disable type check - @param argc number of arguments to pass to the plugin initialization - function - @param args arguments for the plugin initialization function - - @retval - a pointer to the loaded plugin, or NULL in case of a failure -*/ -struct st_mysql_client_plugin * -mysql_load_plugin_v(struct st_mysql *mysql, const char *name, int type, - int argc, va_list args); - -/** - finds an already loaded plugin by name, or loads it, if necessary - - @param mysql MYSQL structure. - @param name a name of the plugin to load - @param type type of plugin that should be loaded - - @retval - a pointer to the plugin, or NULL in case of a failure -*/ -struct st_mysql_client_plugin * -mysql_client_find_plugin(struct st_mysql *mysql, const char *name, int type); - -/** - adds a plugin structure to the list of loaded plugins - - This is useful if an application has the necessary functionality - (for example, a special load data handler) statically linked into - the application binary. It can use this function to register the plugin - directly, avoiding the need to factor it out into a shared object. - - @param mysql MYSQL structure. It is only used for error reporting - @param plugin an st_mysql_client_plugin structure to register - - @retval - a pointer to the plugin, or NULL in case of a failure -*/ -struct st_mysql_client_plugin * -mysql_client_register_plugin(struct st_mysql *mysql, - struct st_mysql_client_plugin *plugin); - -/** - set plugin options - - Can be used to set extra options and affect behavior for a plugin. - This function may be called multiple times to set several options - - @param plugin an st_mysql_client_plugin structure - @param option a string which specifies the option to set - @param value value for the option. - - @retval 0 on success, 1 in case of failure -**/ -int STDCALL mysql_plugin_options(struct st_mysql_client_plugin *plugin, - const char *option, - const void *value); -#endif - diff --git a/deps/mysqllite/include/mysql/innodb_priv.h b/deps/mysqllite/include/mysql/innodb_priv.h deleted file mode 100644 index 5406c292b18f04..00000000000000 --- a/deps/mysqllite/include/mysql/innodb_priv.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef INNODB_PRIV_INCLUDED -#define INNODB_PRIV_INCLUDED - -/** @file Declaring server-internal functions that are used by InnoDB. */ - -#include - -class THD; - -int get_quote_char_for_identifier(THD *thd, const char *name, uint length); -bool schema_table_store_record(THD *thd, TABLE *table); -void localtime_to_TIME(MYSQL_TIME *to, struct tm *from); -bool check_global_access(THD *thd, ulong want_access); -uint strconvert(CHARSET_INFO *from_cs, const char *from, - CHARSET_INFO *to_cs, char *to, uint to_length, - uint *errors); -void sql_print_error(const char *format, ...); - - - -#endif /* INNODB_PRIV_INCLUDED */ diff --git a/deps/mysqllite/include/mysql/plugin.h b/deps/mysqllite/include/mysql/plugin.h deleted file mode 100644 index 7ec68ff5040b67..00000000000000 --- a/deps/mysqllite/include/mysql/plugin.h +++ /dev/null @@ -1,633 +0,0 @@ -/* Copyright (C) 2005 MySQL AB, 2009 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _my_plugin_h -#define _my_plugin_h - -/* - On Windows, exports from DLL need to be declared - Also, plugin needs to be declared as extern "C" because MSVC - unlike other compilers, uses C++ mangling for variables not only - for functions. -*/ -#if defined(_MSC_VER) -#if defined(MYSQL_DYNAMIC_PLUGIN) - #ifdef __cplusplus - #define MYSQL_PLUGIN_EXPORT extern "C" __declspec(dllexport) - #else - #define MYSQL_PLUGIN_EXPORT __declspec(dllexport) - #endif -#else /* MYSQL_DYNAMIC_PLUGIN */ - #ifdef __cplusplus - #define MYSQL_PLUGIN_EXPORT extern "C" - #else - #define MYSQL_PLUGIN_EXPORT - #endif -#endif /*MYSQL_DYNAMIC_PLUGIN */ -#else /*_MSC_VER */ -#define MYSQL_PLUGIN_EXPORT -#endif - -#ifdef __cplusplus -class THD; -class Item; -#define MYSQL_THD THD* -#else -#define MYSQL_THD void* -#endif - -#include - -#define MYSQL_XIDDATASIZE 128 -/** - struct st_mysql_xid is binary compatible with the XID structure as - in the X/Open CAE Specification, Distributed Transaction Processing: - The XA Specification, X/Open Company Ltd., 1991. - http://www.opengroup.org/bookstore/catalog/c193.htm - - @see XID in sql/handler.h -*/ -struct st_mysql_xid { - long formatID; - long gtrid_length; - long bqual_length; - char data[MYSQL_XIDDATASIZE]; /* Not \0-terminated */ -}; -typedef struct st_mysql_xid MYSQL_XID; - -/************************************************************************* - Plugin API. Common for all plugin types. -*/ - -#define MYSQL_PLUGIN_INTERFACE_VERSION 0x0102 - -/* - The allowable types of plugins -*/ -#define MYSQL_UDF_PLUGIN 0 /* User-defined function */ -#define MYSQL_STORAGE_ENGINE_PLUGIN 1 /* Storage Engine */ -#define MYSQL_FTPARSER_PLUGIN 2 /* Full-text parser plugin */ -#define MYSQL_DAEMON_PLUGIN 3 /* The daemon/raw plugin type */ -#define MYSQL_INFORMATION_SCHEMA_PLUGIN 4 /* The I_S plugin type */ -#define MYSQL_AUDIT_PLUGIN 5 /* The Audit plugin type */ -#define MYSQL_REPLICATION_PLUGIN 6 /* The replication plugin type */ -#define MYSQL_AUTHENTICATION_PLUGIN 7 /* The authentication plugin type */ -#define MYSQL_MAX_PLUGIN_TYPE_NUM 8 /* The number of plugin types */ - -/* We use the following strings to define licenses for plugins */ -#define PLUGIN_LICENSE_PROPRIETARY 0 -#define PLUGIN_LICENSE_GPL 1 -#define PLUGIN_LICENSE_BSD 2 - -#define PLUGIN_LICENSE_PROPRIETARY_STRING "PROPRIETARY" -#define PLUGIN_LICENSE_GPL_STRING "GPL" -#define PLUGIN_LICENSE_BSD_STRING "BSD" - -/* - Macros for beginning and ending plugin declarations. Between - mysql_declare_plugin and mysql_declare_plugin_end there should - be a st_mysql_plugin struct for each plugin to be declared. -*/ - - -#ifndef MYSQL_DYNAMIC_PLUGIN -#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \ -MYSQL_PLUGIN_EXPORT int VERSION= MYSQL_PLUGIN_INTERFACE_VERSION; \ -MYSQL_PLUGIN_EXPORT int PSIZE= sizeof(struct st_mysql_plugin); \ -MYSQL_PLUGIN_EXPORT struct st_mysql_plugin DECLS[]= { -#else -#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \ -MYSQL_PLUGIN_EXPORT int _mysql_plugin_interface_version_= MYSQL_PLUGIN_INTERFACE_VERSION; \ -MYSQL_PLUGIN_EXPORT int _mysql_sizeof_struct_st_plugin_= sizeof(struct st_mysql_plugin); \ -MYSQL_PLUGIN_EXPORT struct st_mysql_plugin _mysql_plugin_declarations_[]= { -#endif - -#define mysql_declare_plugin(NAME) \ -__MYSQL_DECLARE_PLUGIN(NAME, \ - builtin_ ## NAME ## _plugin_interface_version, \ - builtin_ ## NAME ## _sizeof_struct_st_plugin, \ - builtin_ ## NAME ## _plugin) - -#define mysql_declare_plugin_end ,{0,0,0,0,0,0,0,0,0,0,0,0}} - -/* - declarations for SHOW STATUS support in plugins -*/ -enum enum_mysql_show_type -{ - SHOW_UNDEF, SHOW_BOOL, SHOW_INT, SHOW_LONG, - SHOW_LONGLONG, SHOW_CHAR, SHOW_CHAR_PTR, - SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE, - SHOW_always_last -}; - -struct st_mysql_show_var { - const char *name; - char *value; - enum enum_mysql_show_type type; -}; - -#define SHOW_VAR_FUNC_BUFF_SIZE 1024 -typedef int (*mysql_show_var_func)(MYSQL_THD, struct st_mysql_show_var*, char *); - - -/* - declarations for server variables and command line options -*/ - - -#define PLUGIN_VAR_BOOL 0x0001 -#define PLUGIN_VAR_INT 0x0002 -#define PLUGIN_VAR_LONG 0x0003 -#define PLUGIN_VAR_LONGLONG 0x0004 -#define PLUGIN_VAR_STR 0x0005 -#define PLUGIN_VAR_ENUM 0x0006 -#define PLUGIN_VAR_SET 0x0007 -#define PLUGIN_VAR_UNSIGNED 0x0080 -#define PLUGIN_VAR_THDLOCAL 0x0100 /* Variable is per-connection */ -#define PLUGIN_VAR_READONLY 0x0200 /* Server variable is read only */ -#define PLUGIN_VAR_NOSYSVAR 0x0400 /* Not a server variable */ -#define PLUGIN_VAR_NOCMDOPT 0x0800 /* Not a command line option */ -#define PLUGIN_VAR_NOCMDARG 0x1000 /* No argument for cmd line */ -#define PLUGIN_VAR_RQCMDARG 0x0000 /* Argument required for cmd line */ -#define PLUGIN_VAR_OPCMDARG 0x2000 /* Argument optional for cmd line */ -#define PLUGIN_VAR_MEMALLOC 0x8000 /* String needs memory allocated */ - -struct st_mysql_sys_var; -struct st_mysql_value; - -/* - SYNOPSIS - (*mysql_var_check_func)() - thd thread handle - var dynamic variable being altered - save pointer to temporary storage - value user provided value - RETURN - 0 user provided value is OK and the update func may be called. - any other value indicates error. - - This function should parse the user provided value and store in the - provided temporary storage any data as required by the update func. - There is sufficient space in the temporary storage to store a double. - Note that the update func may not be called if any other error occurs - so any memory allocated should be thread-local so that it may be freed - automatically at the end of the statement. -*/ - -typedef int (*mysql_var_check_func)(MYSQL_THD thd, - struct st_mysql_sys_var *var, - void *save, struct st_mysql_value *value); - -/* - SYNOPSIS - (*mysql_var_update_func)() - thd thread handle - var dynamic variable being altered - var_ptr pointer to dynamic variable - save pointer to temporary storage - RETURN - NONE - - This function should use the validated value stored in the temporary store - and persist it in the provided pointer to the dynamic variable. - For example, strings may require memory to be allocated. -*/ -typedef void (*mysql_var_update_func)(MYSQL_THD thd, - struct st_mysql_sys_var *var, - void *var_ptr, const void *save); - - -/* the following declarations are for internal use only */ - - -#define PLUGIN_VAR_MASK \ - (PLUGIN_VAR_READONLY | PLUGIN_VAR_NOSYSVAR | \ - PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_NOCMDARG | \ - PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC) - -#define MYSQL_PLUGIN_VAR_HEADER \ - int flags; \ - const char *name; \ - const char *comment; \ - mysql_var_check_func check; \ - mysql_var_update_func update - -#define MYSQL_SYSVAR_NAME(name) mysql_sysvar_ ## name -#define MYSQL_SYSVAR(name) \ - ((struct st_mysql_sys_var *)&(MYSQL_SYSVAR_NAME(name))) - -/* - for global variables, the value pointer is the first - element after the header, the default value is the second. - for thread variables, the value offset is the first - element after the header, the default value is the second. -*/ - - -#define DECLARE_MYSQL_SYSVAR_BASIC(name, type) struct { \ - MYSQL_PLUGIN_VAR_HEADER; \ - type *value; \ - const type def_val; \ -} MYSQL_SYSVAR_NAME(name) - -#define DECLARE_MYSQL_SYSVAR_SIMPLE(name, type) struct { \ - MYSQL_PLUGIN_VAR_HEADER; \ - type *value; type def_val; \ - type min_val; type max_val; \ - type blk_sz; \ -} MYSQL_SYSVAR_NAME(name) - -#define DECLARE_MYSQL_SYSVAR_TYPELIB(name, type) struct { \ - MYSQL_PLUGIN_VAR_HEADER; \ - type *value; type def_val; \ - TYPELIB *typelib; \ -} MYSQL_SYSVAR_NAME(name) - -#define DECLARE_THDVAR_FUNC(type) \ - type *(*resolve)(MYSQL_THD thd, int offset) - -#define DECLARE_MYSQL_THDVAR_BASIC(name, type) struct { \ - MYSQL_PLUGIN_VAR_HEADER; \ - int offset; \ - const type def_val; \ - DECLARE_THDVAR_FUNC(type); \ -} MYSQL_SYSVAR_NAME(name) - -#define DECLARE_MYSQL_THDVAR_SIMPLE(name, type) struct { \ - MYSQL_PLUGIN_VAR_HEADER; \ - int offset; \ - type def_val; type min_val; \ - type max_val; type blk_sz; \ - DECLARE_THDVAR_FUNC(type); \ -} MYSQL_SYSVAR_NAME(name) - -#define DECLARE_MYSQL_THDVAR_TYPELIB(name, type) struct { \ - MYSQL_PLUGIN_VAR_HEADER; \ - int offset; \ - type def_val; \ - DECLARE_THDVAR_FUNC(type); \ - TYPELIB *typelib; \ -} MYSQL_SYSVAR_NAME(name) - - -/* - the following declarations are for use by plugin implementors -*/ - -#define MYSQL_SYSVAR_BOOL(name, varname, opt, comment, check, update, def) \ -DECLARE_MYSQL_SYSVAR_BASIC(name, char) = { \ - PLUGIN_VAR_BOOL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def} - -#define MYSQL_SYSVAR_STR(name, varname, opt, comment, check, update, def) \ -DECLARE_MYSQL_SYSVAR_BASIC(name, char *) = { \ - PLUGIN_VAR_STR | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def} - -#define MYSQL_SYSVAR_INT(name, varname, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_SYSVAR_SIMPLE(name, int) = { \ - PLUGIN_VAR_INT | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, min, max, blk } - -#define MYSQL_SYSVAR_UINT(name, varname, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned int) = { \ - PLUGIN_VAR_INT | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, min, max, blk } - -#define MYSQL_SYSVAR_LONG(name, varname, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_SYSVAR_SIMPLE(name, long) = { \ - PLUGIN_VAR_LONG | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, min, max, blk } - -#define MYSQL_SYSVAR_ULONG(name, varname, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long) = { \ - PLUGIN_VAR_LONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, min, max, blk } - -#define MYSQL_SYSVAR_LONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_SYSVAR_SIMPLE(name, long long) = { \ - PLUGIN_VAR_LONGLONG | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, min, max, blk } - -#define MYSQL_SYSVAR_ULONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long long) = { \ - PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, min, max, blk } - -#define MYSQL_SYSVAR_ENUM(name, varname, opt, comment, check, update, def, typelib) \ -DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long) = { \ - PLUGIN_VAR_ENUM | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, typelib } - -#define MYSQL_SYSVAR_SET(name, varname, opt, comment, check, update, def, typelib) \ -DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long long) = { \ - PLUGIN_VAR_SET | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, typelib } - -#define MYSQL_THDVAR_BOOL(name, opt, comment, check, update, def) \ -DECLARE_MYSQL_THDVAR_BASIC(name, char) = { \ - PLUGIN_VAR_BOOL | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, NULL} - -#define MYSQL_THDVAR_STR(name, opt, comment, check, update, def) \ -DECLARE_MYSQL_THDVAR_BASIC(name, char *) = { \ - PLUGIN_VAR_STR | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, NULL} - -#define MYSQL_THDVAR_INT(name, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_THDVAR_SIMPLE(name, int) = { \ - PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, min, max, blk, NULL } - -#define MYSQL_THDVAR_UINT(name, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned int) = { \ - PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, min, max, blk, NULL } - -#define MYSQL_THDVAR_LONG(name, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_THDVAR_SIMPLE(name, long) = { \ - PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, min, max, blk, NULL } - -#define MYSQL_THDVAR_ULONG(name, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long) = { \ - PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, min, max, blk, NULL } - -#define MYSQL_THDVAR_LONGLONG(name, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_THDVAR_SIMPLE(name, long long) = { \ - PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, min, max, blk, NULL } - -#define MYSQL_THDVAR_ULONGLONG(name, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long long) = { \ - PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, min, max, blk, NULL } - -#define MYSQL_THDVAR_ENUM(name, opt, comment, check, update, def, typelib) \ -DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long) = { \ - PLUGIN_VAR_ENUM | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, NULL, typelib } - -#define MYSQL_THDVAR_SET(name, opt, comment, check, update, def, typelib) \ -DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long long) = { \ - PLUGIN_VAR_SET | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, NULL, typelib } - -/* accessor macros */ - -#define SYSVAR(name) \ - (*(MYSQL_SYSVAR_NAME(name).value)) - -/* when thd == null, result points to global value */ -#define THDVAR(thd, name) \ - (*(MYSQL_SYSVAR_NAME(name).resolve(thd, MYSQL_SYSVAR_NAME(name).offset))) - - -/* - Plugin description structure. -*/ - -struct st_mysql_plugin -{ - int type; /* the plugin type (a MYSQL_XXX_PLUGIN value) */ - void *info; /* pointer to type-specific plugin descriptor */ - const char *name; /* plugin name */ - const char *author; /* plugin author (for I_S.PLUGINS) */ - const char *descr; /* general descriptive text (for I_S.PLUGINS) */ - int license; /* the plugin license (PLUGIN_LICENSE_XXX) */ - int (*init)(void *); /* the function to invoke when plugin is loaded */ - int (*deinit)(void *);/* the function to invoke when plugin is unloaded */ - unsigned int version; /* plugin version (for I_S.PLUGINS) */ - struct st_mysql_show_var *status_vars; - struct st_mysql_sys_var **system_vars; - void * __reserved1; /* reserved for dependency checking */ -}; - -/************************************************************************* - API for Full-text parser plugin. (MYSQL_FTPARSER_PLUGIN) -*/ -#include "plugin_ftparser.h" - -/************************************************************************* - API for Storage Engine plugin. (MYSQL_DAEMON_PLUGIN) -*/ - -/* handlertons of different MySQL releases are incompatible */ -#define MYSQL_DAEMON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) - -/* - Here we define only the descriptor structure, that is referred from - st_mysql_plugin. -*/ - -struct st_mysql_daemon -{ - int interface_version; -}; - - -/************************************************************************* - API for I_S plugin. (MYSQL_INFORMATION_SCHEMA_PLUGIN) -*/ - -/* handlertons of different MySQL releases are incompatible */ -#define MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) - -/* - Here we define only the descriptor structure, that is referred from - st_mysql_plugin. -*/ - -struct st_mysql_information_schema -{ - int interface_version; -}; - - -/************************************************************************* - API for Storage Engine plugin. (MYSQL_STORAGE_ENGINE_PLUGIN) -*/ - -/* handlertons of different MySQL releases are incompatible */ -#define MYSQL_HANDLERTON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) - -/* - The real API is in the sql/handler.h - Here we define only the descriptor structure, that is referred from - st_mysql_plugin. -*/ - -struct st_mysql_storage_engine -{ - int interface_version; -}; - -struct handlerton; - - -/* - API for Replication plugin. (MYSQL_REPLICATION_PLUGIN) -*/ - #define MYSQL_REPLICATION_INTERFACE_VERSION 0x0100 - - /** - Replication plugin descriptor - */ - struct Mysql_replication { - int interface_version; - }; - -/************************************************************************* - st_mysql_value struct for reading values from mysqld. - Used by server variables framework to parse user-provided values. - Will be used for arguments when implementing UDFs. - - Note that val_str() returns a string in temporary memory - that will be freed at the end of statement. Copy the string - if you need it to persist. -*/ - -#define MYSQL_VALUE_TYPE_STRING 0 -#define MYSQL_VALUE_TYPE_REAL 1 -#define MYSQL_VALUE_TYPE_INT 2 - -struct st_mysql_value -{ - int (*value_type)(struct st_mysql_value *); - const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length); - int (*val_real)(struct st_mysql_value *, double *realbuf); - int (*val_int)(struct st_mysql_value *, long long *intbuf); - int (*is_unsigned)(struct st_mysql_value *); -}; - - -/************************************************************************* - Miscellaneous functions for plugin implementors -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -int thd_in_lock_tables(const MYSQL_THD thd); -int thd_tablespace_op(const MYSQL_THD thd); -long long thd_test_options(const MYSQL_THD thd, long long test_options); -int thd_sql_command(const MYSQL_THD thd); -const char *thd_proc_info(MYSQL_THD thd, const char *info); -void **thd_ha_data(const MYSQL_THD thd, const struct handlerton *hton); -void thd_storage_lock_wait(MYSQL_THD thd, long long value); -int thd_tx_isolation(const MYSQL_THD thd); -char *thd_security_context(MYSQL_THD thd, char *buffer, unsigned int length, - unsigned int max_query_len); -/* Increments the row counter, see THD::row_count */ -void thd_inc_row_count(MYSQL_THD thd); - -/** - Create a temporary file. - - @details - The temporary file is created in a location specified by the mysql - server configuration (--tmpdir option). The caller does not need to - delete the file, it will be deleted automatically. - - @param prefix prefix for temporary file name - @retval -1 error - @retval >= 0 a file handle that can be passed to dup or my_close -*/ -int mysql_tmpfile(const char *prefix); - -/** - Check the killed state of a connection - - @details - In MySQL support for the KILL statement is cooperative. The KILL - statement only sets a "killed" flag. This function returns the value - of that flag. A thread should check it often, especially inside - time-consuming loops, and gracefully abort the operation if it is - non-zero. - - @param thd user thread connection handle - @retval 0 the connection is active - @retval 1 the connection has been killed -*/ -int thd_killed(const MYSQL_THD thd); - - -/** - Return the thread id of a user thread - - @param thd user thread connection handle - @return thread id -*/ -unsigned long thd_get_thread_id(const MYSQL_THD thd); - -/** - Get the XID for this connection's transaction - - @param thd user thread connection handle - @param xid location where identifier is stored -*/ -void thd_get_xid(const MYSQL_THD thd, MYSQL_XID *xid); - -/** - Invalidate the query cache for a given table. - - @param thd user thread connection handle - @param key databasename\\0tablename\\0 - @param key_length length of key in bytes, including the NUL bytes - @param using_trx flag: TRUE if using transactions, FALSE otherwise -*/ -void mysql_query_cache_invalidate4(MYSQL_THD thd, - const char *key, unsigned int key_length, - int using_trx); - - -/** - Provide a handler data getter to simplify coding -*/ -void *thd_get_ha_data(const MYSQL_THD thd, const struct handlerton *hton); - - -/** - Provide a handler data setter to simplify coding - - @details - Set ha_data pointer (storage engine per-connection information). - - To avoid unclean deactivation (uninstall) of storage engine plugin - in the middle of transaction, additional storage engine plugin - lock is acquired. - - If ha_data is not null and storage engine plugin was not locked - by thd_set_ha_data() in this connection before, storage engine - plugin gets locked. - - If ha_data is null and storage engine plugin was locked by - thd_set_ha_data() in this connection before, storage engine - plugin lock gets released. - - If handlerton::close_connection() didn't reset ha_data, server does - it immediately after calling handlerton::close_connection(). -*/ -void thd_set_ha_data(MYSQL_THD thd, const struct handlerton *hton, - const void *ha_data); -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/deps/mysqllite/include/mysql/plugin_audit.h b/deps/mysqllite/include/mysql/plugin_audit.h deleted file mode 100644 index 8811c832949d8b..00000000000000 --- a/deps/mysqllite/include/mysql/plugin_audit.h +++ /dev/null @@ -1,138 +0,0 @@ -/* Copyright (C) 2007 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _my_audit_h -#define _my_audit_h - -/************************************************************************* - API for Audit plugin. (MYSQL_AUDIT_PLUGIN) -*/ - -#include "plugin.h" - -#define MYSQL_AUDIT_CLASS_MASK_SIZE 1 - -#define MYSQL_AUDIT_INTERFACE_VERSION 0x0200 - -/* - The first word in every event class struct indicates the specific - class of the event. -*/ -struct mysql_event -{ - unsigned int event_class; -}; - - -/************************************************************************* - AUDIT CLASS : GENERAL - - LOG events occurs before emitting to the general query log. - ERROR events occur before transmitting errors to the user. - RESULT events occur after transmitting a resultset to the user. - STATUS events occur after transmitting a resultset or errors - to the user. -*/ - -#define MYSQL_AUDIT_GENERAL_CLASS 0 -#define MYSQL_AUDIT_GENERAL_CLASSMASK (1 << MYSQL_AUDIT_GENERAL_CLASS) -#define MYSQL_AUDIT_GENERAL_LOG 0 -#define MYSQL_AUDIT_GENERAL_ERROR 1 -#define MYSQL_AUDIT_GENERAL_RESULT 2 -#define MYSQL_AUDIT_GENERAL_STATUS 3 - -struct mysql_event_general -{ - unsigned int event_class; - unsigned int event_subclass; - int general_error_code; - unsigned long general_thread_id; - const char *general_user; - unsigned int general_user_length; - const char *general_command; - unsigned int general_command_length; - const char *general_query; - unsigned int general_query_length; - struct charset_info_st *general_charset; - unsigned long long general_time; - unsigned long long general_rows; -}; - - -/* - AUDIT CLASS : CONNECTION - - CONNECT occurs after authentication phase is completed. - DISCONNECT occurs after connection is terminated. - CHANGE_USER occurs after COM_CHANGE_USER RPC is completed. -*/ - -#define MYSQL_AUDIT_CONNECTION_CLASS 1 -#define MYSQL_AUDIT_CONNECTION_CLASSMASK (1 << MYSQL_AUDIT_CONNECTION_CLASS) -#define MYSQL_AUDIT_CONNECTION_CONNECT 0 -#define MYSQL_AUDIT_CONNECTION_DISCONNECT 1 -#define MYSQL_AUDIT_CONNECTION_CHANGE_USER 2 - -struct mysql_event_connection -{ - unsigned int event_class; - unsigned int event_subclass; - int status; - unsigned long thread_id; - const char *user; - unsigned int user_length; - const char *priv_user; - unsigned int priv_user_length; - const char *external_user; - unsigned int external_user_length; - const char *proxy_user; - unsigned int proxy_user_length; - const char *host; - unsigned int host_length; - const char *ip; - unsigned int ip_length; - const char *database; - unsigned int database_length; -}; - - -/************************************************************************* - Here we define the descriptor structure, that is referred from - st_mysql_plugin. - - release_thd() event occurs when the event class consumer is to be - disassociated from the specified THD. This would typically occur - before some operation which may require sleeping - such as when - waiting for the next query from the client. - - event_notify() is invoked whenever an event occurs which is of any - class for which the plugin has interest. The first word of the - mysql_event argument indicates the specific event class and the - remainder of the structure is as required for that class. - - class_mask is an array of bits used to indicate what event classes - that this plugin wants to receive. -*/ - -struct st_mysql_audit -{ - int interface_version; - void (*release_thd)(MYSQL_THD); - void (*event_notify)(MYSQL_THD, const struct mysql_event *); - unsigned long class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE]; -}; - - -#endif diff --git a/deps/mysqllite/include/mysql/plugin_auth.h b/deps/mysqllite/include/mysql/plugin_auth.h deleted file mode 100644 index 420eb3bb80fffa..00000000000000 --- a/deps/mysqllite/include/mysql/plugin_auth.h +++ /dev/null @@ -1,125 +0,0 @@ -#ifndef MYSQL_PLUGIN_AUTH_INCLUDED -/* Copyright (C) 2010 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/** - @file - - Authentication Plugin API. - - This file defines the API for server authentication plugins. -*/ - -#define MYSQL_PLUGIN_AUTH_INCLUDED - -#include - -#define MYSQL_AUTHENTICATION_INTERFACE_VERSION 0x0100 - -#include - -/* defines for MYSQL_SERVER_AUTH_INFO.password_used */ - -#define PASSWORD_USED_NO 0 -#define PASSWORD_USED_YES 1 -#define PASSWORD_USED_NO_MENTION 2 - - -/** - Provides server plugin access to authentication information -*/ -typedef struct st_mysql_server_auth_info -{ - /** - User name as sent by the client and shown in USER(). - NULL if the client packet with the user name was not received yet. - */ - char *user_name; - - /** - Length of user_name - */ - unsigned int user_name_length; - - /** - A corresponding column value from the mysql.user table for the - matching account name - */ - const char *auth_string; - - /** - Length of auth_string - */ - unsigned long auth_string_length; - - /** - Matching account name as found in the mysql.user table. - A plugin can override it with another name that will be - used by MySQL for authorization, and shown in CURRENT_USER() - */ - char authenticated_as[MYSQL_USERNAME_LENGTH+1]; - - - /** - The unique user name that was used by the plugin to authenticate. - Plugins should put null-terminated UTF-8 here. - Available through the @@EXTERNAL_USER variable. - */ - char external_user[512]; - - /** - This only affects the "Authentication failed. Password used: %s" - error message. has the following values : - 0 : %s will be NO. - 1 : %s will be YES. - 2 : there will be no %s. - Set it as appropriate or ignore at will. - */ - int password_used; - - /** - Set to the name of the connected client host, if it can be resolved, - or to its IP address otherwise. - */ - const char *host_or_ip; - - /** - Length of host_or_ip - */ - unsigned int host_or_ip_length; - -} MYSQL_SERVER_AUTH_INFO; - -/** - Server authentication plugin descriptor -*/ -struct st_mysql_auth -{ - int interface_version; /** version plugin uses */ - /** - A plugin that a client must use for authentication with this server - plugin. Can be NULL to mean "any plugin". - */ - const char *client_auth_plugin; - /** - Function provided by the plugin which should perform authentication (using - the vio functions if necessary) and return 0 if successful. The plugin can - also fill the info.authenticated_as field if a different username should be - used for authorization. - */ - int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info); -}; -#endif - diff --git a/deps/mysqllite/include/mysql/plugin_auth_common.h b/deps/mysqllite/include/mysql/plugin_auth_common.h deleted file mode 100644 index 4ad92d01bfb385..00000000000000 --- a/deps/mysqllite/include/mysql/plugin_auth_common.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef MYSQL_PLUGIN_AUTH_COMMON_INCLUDED -/* Copyright (C) 2010 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/** - @file - - This file defines constants and data structures that are the same for - both client- and server-side authentication plugins. -*/ -#define MYSQL_PLUGIN_AUTH_COMMON_INCLUDED - -/** the max allowed length for a user name */ -#define MYSQL_USERNAME_LENGTH 48 - -/** - return values of the plugin authenticate_user() method. -*/ - -/** - Authentication failed. Additionally, all other CR_xxx values - (libmysql error code) can be used too. - - The client plugin may set the error code and the error message directly - in the MYSQL structure and return CR_ERROR. If a CR_xxx specific error - code was returned, an error message in the MYSQL structure will be - overwritten. If CR_ERROR is returned without setting the error in MYSQL, - CR_UNKNOWN_ERROR will be user. -*/ -#define CR_ERROR 0 -/** - Authentication (client part) was successful. It does not mean that the - authentication as a whole was successful, usually it only means - that the client was able to send the user name and the password to the - server. If CR_OK is returned, the libmysql reads the next packet expecting - it to be one of OK, ERROR, or CHANGE_PLUGIN packets. -*/ -#define CR_OK -1 -/** - Authentication was successful. - It means that the client has done its part successfully and also that - a plugin has read the last packet (one of OK, ERROR, CHANGE_PLUGIN). - In this case, libmysql will not read a packet from the server, - but it will use the data at mysql->net.read_pos. - - A plugin may return this value if the number of roundtrips in the - authentication protocol is not known in advance, and the client plugin - needs to read one packet more to determine if the authentication is finished - or not. -*/ -#define CR_OK_HANDSHAKE_COMPLETE -2 - -typedef struct st_plugin_vio_info -{ - enum { MYSQL_VIO_INVALID, MYSQL_VIO_TCP, MYSQL_VIO_SOCKET, - MYSQL_VIO_PIPE, MYSQL_VIO_MEMORY } protocol; - int socket; /**< it's set, if the protocol is SOCKET or TCP */ -#ifdef _WIN32 - HANDLE handle; /**< it's set, if the protocol is PIPE or MEMORY */ -#endif -} MYSQL_PLUGIN_VIO_INFO; - -/** - Provides plugin access to communication channel -*/ -typedef struct st_plugin_vio -{ - /** - Plugin provides a pointer reference and this function sets it to the - contents of any incoming packet. Returns the packet length, or -1 if - the plugin should terminate. - */ - int (*read_packet)(struct st_plugin_vio *vio, - unsigned char **buf); - - /** - Plugin provides a buffer with data and the length and this - function sends it as a packet. Returns 0 on success, 1 on failure. - */ - int (*write_packet)(struct st_plugin_vio *vio, - const unsigned char *packet, - int packet_len); - - /** - Fills in a st_plugin_vio_info structure, providing the information - about the connection. - */ - void (*info)(struct st_plugin_vio *vio, struct st_plugin_vio_info *info); - -} MYSQL_PLUGIN_VIO; - -#endif - diff --git a/deps/mysqllite/include/mysql/plugin_ftparser.h b/deps/mysqllite/include/mysql/plugin_ftparser.h deleted file mode 100644 index 7f9bde3a6a0aae..00000000000000 --- a/deps/mysqllite/include/mysql/plugin_ftparser.h +++ /dev/null @@ -1,211 +0,0 @@ -/* Copyright (C) 2005 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _my_plugin_ftparser_h -#define _my_plugin_ftparser_h -#include "plugin.h" - -/************************************************************************* - API for Full-text parser plugin. (MYSQL_FTPARSER_PLUGIN) -*/ - -#define MYSQL_FTPARSER_INTERFACE_VERSION 0x0100 - -/* Parsing modes. Set in MYSQL_FTPARSER_PARAM::mode */ -enum enum_ftparser_mode -{ -/* - Fast and simple mode. This mode is used for indexing, and natural - language queries. - - The parser is expected to return only those words that go into the - index. Stopwords or too short/long words should not be returned. The - 'boolean_info' argument of mysql_add_word() does not have to be set. -*/ - MYSQL_FTPARSER_SIMPLE_MODE= 0, - -/* - Parse with stopwords mode. This mode is used in boolean searches for - "phrase matching." - - The parser is not allowed to ignore words in this mode. Every word - should be returned, including stopwords and words that are too short - or long. The 'boolean_info' argument of mysql_add_word() does not - have to be set. -*/ - MYSQL_FTPARSER_WITH_STOPWORDS= 1, - -/* - Parse in boolean mode. This mode is used to parse a boolean query string. - - The parser should provide a valid MYSQL_FTPARSER_BOOLEAN_INFO - structure in the 'boolean_info' argument to mysql_add_word(). - Usually that means that the parser should recognize boolean operators - in the parsing stream and set appropriate fields in - MYSQL_FTPARSER_BOOLEAN_INFO structure accordingly. As for - MYSQL_FTPARSER_WITH_STOPWORDS mode, no word should be ignored. - Instead, use FT_TOKEN_STOPWORD for the token type of such a word. -*/ - MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2 -}; - -/* - Token types for boolean mode searching (used for the type member of - MYSQL_FTPARSER_BOOLEAN_INFO struct) - - FT_TOKEN_EOF: End of data. - FT_TOKEN_WORD: Regular word. - FT_TOKEN_LEFT_PAREN: Left parenthesis (start of group/sub-expression). - FT_TOKEN_RIGHT_PAREN: Right parenthesis (end of group/sub-expression). - FT_TOKEN_STOPWORD: Stopword. -*/ - -enum enum_ft_token_type -{ - FT_TOKEN_EOF= 0, - FT_TOKEN_WORD= 1, - FT_TOKEN_LEFT_PAREN= 2, - FT_TOKEN_RIGHT_PAREN= 3, - FT_TOKEN_STOPWORD= 4 -}; - -/* - This structure is used in boolean search mode only. It conveys - boolean-mode metadata to the MySQL search engine for every word in - the search query. A valid instance of this structure must be filled - in by the plugin parser and passed as an argument in the call to - mysql_add_word (the callback function in the MYSQL_FTPARSER_PARAM - structure) when a query is parsed in boolean mode. - - type: The token type. Should be one of the enum_ft_token_type values. - - yesno: Whether the word must be present for a match to occur: - >0 Must be present - <0 Must not be present - 0 Neither; the word is optional but its presence increases the relevance - With the default settings of the ft_boolean_syntax system variable, - >0 corresponds to the '+' operator, <0 corrresponds to the '-' operator, - and 0 means neither operator was used. - - weight_adjust: A weighting factor that determines how much a match - for the word counts. Positive values increase, negative - decrease the - relative word's importance in the query. - - wasign: The sign of the word's weight in the query. If it's non-negative - the match for the word will increase document relevance, if it's - negative - decrease (the word becomes a "noise word", the less of it the - better). - - trunc: Corresponds to the '*' operator in the default setting of the - ft_boolean_syntax system variable. -*/ - -typedef struct st_mysql_ftparser_boolean_info -{ - enum enum_ft_token_type type; - int yesno; - int weight_adjust; - char wasign; - char trunc; - /* These are parser state and must be removed. */ - char prev; - char *quot; -} MYSQL_FTPARSER_BOOLEAN_INFO; - -/* - The following flag means that buffer with a string (document, word) - may be overwritten by the caller before the end of the parsing (that is - before st_mysql_ftparser::deinit() call). If one needs the string - to survive between two successive calls of the parsing function, she - needs to save a copy of it. The flag may be set by MySQL before calling - st_mysql_ftparser::parse(), or it may be set by a plugin before calling - st_mysql_ftparser_param::mysql_parse() or - st_mysql_ftparser_param::mysql_add_word(). -*/ -#define MYSQL_FTFLAGS_NEED_COPY 1 - -/* - An argument of the full-text parser plugin. This structure is - filled in by MySQL server and passed to the parsing function of the - plugin as an in/out parameter. - - mysql_parse: A pointer to the built-in parser implementation of the - server. It's set by the server and can be used by the parser plugin - to invoke the MySQL default parser. If plugin's role is to extract - textual data from .doc, .pdf or .xml content, it might extract - plaintext from the content, and then pass the text to the default - MySQL parser to be parsed. - - mysql_add_word: A server callback to add a new word. When parsing - a document, the server sets this to point at a function that adds - the word to MySQL full-text index. When parsing a search query, - this function will add the new word to the list of words to search - for. The boolean_info argument can be NULL for all cases except - when mode is MYSQL_FTPARSER_FULL_BOOLEAN_INFO. - - ftparser_state: A generic pointer. The plugin can set it to point - to information to be used internally for its own purposes. - - mysql_ftparam: This is set by the server. It is used by MySQL functions - called via mysql_parse() and mysql_add_word() callback. The plugin - should not modify it. - - cs: Information about the character set of the document or query string. - - doc: A pointer to the document or query string to be parsed. - - length: Length of the document or query string, in bytes. - - flags: See MYSQL_FTFLAGS_* constants above. - - mode: The parsing mode. With boolean operators, with stopwords, or - nothing. See enum_ftparser_mode above. -*/ - -typedef struct st_mysql_ftparser_param -{ - int (*mysql_parse)(struct st_mysql_ftparser_param *, - char *doc, int doc_len); - int (*mysql_add_word)(struct st_mysql_ftparser_param *, - char *word, int word_len, - MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); - void *ftparser_state; - void *mysql_ftparam; - struct charset_info_st *cs; - char *doc; - int length; - int flags; - enum enum_ftparser_mode mode; -} MYSQL_FTPARSER_PARAM; - -/* - Full-text parser descriptor. - - interface_version is, e.g., MYSQL_FTPARSER_INTERFACE_VERSION. - The parsing, initialization, and deinitialization functions are - invoked per SQL statement for which the parser is used. -*/ - -struct st_mysql_ftparser -{ - int interface_version; - int (*parse)(MYSQL_FTPARSER_PARAM *param); - int (*init)(MYSQL_FTPARSER_PARAM *param); - int (*deinit)(MYSQL_FTPARSER_PARAM *param); -}; - - -#endif - diff --git a/deps/mysqllite/include/mysql/psi/mysql_file.h b/deps/mysqllite/include/mysql/psi/mysql_file.h deleted file mode 100644 index 6fc6689c47d7e0..00000000000000 --- a/deps/mysqllite/include/mysql/psi/mysql_file.h +++ /dev/null @@ -1,1434 +0,0 @@ -/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ - -#ifndef MYSQL_FILE_H -#define MYSQL_FILE_H - -#include - -/* For strlen() */ -#include -/* For MY_STAT */ -#include -/* For my_chsize */ -#include - -/** - @file mysql/psi/mysql_file.h - Instrumentation helpers for mysys file io. - This header file provides the necessary declarations - to use the mysys file API with the performance schema instrumentation. - In some compilers (SunStudio), 'static inline' functions, when declared - but not used, are not optimized away (because they are unused) by default, - so that including a static inline function from a header file does - create unwanted dependencies, causing unresolved symbols at link time. - Other compilers, like gcc, optimize these dependencies by default. - - Since the instrumented APIs declared here are wrapper on top - of mysys file io APIs, including mysql/psi/mysql_file.h assumes that - the dependency on my_sys already exists. -*/ - -#include "mysql/psi/psi.h" - -/** - @defgroup File_instrumentation File Instrumentation - @ingroup Instrumentation_interface - @{ -*/ - -/** - @def mysql_file_fgets(P1, P2, F) - Instrumented fgets. - @c mysql_file_fgets is a replacement for @c fgets. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_fgets(P1, P2, F) \ - inline_mysql_file_fgets(__FILE__, __LINE__, P1, P2, F) -#else - #define mysql_file_fgets(P1, P2, F) \ - inline_mysql_file_fgets(P1, P2, F) -#endif - -/** - @def mysql_file_fgetc(F) - Instrumented fgetc. - @c mysql_file_fgetc is a replacement for @c fgetc. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_fgetc(F) inline_mysql_file_fgetc(__FILE__, __LINE__, F) -#else - #define mysql_file_fgetc(F) inline_mysql_file_fgetc(F) -#endif - -/** - @def mysql_file_fputs(P1, F) - Instrumented fputs. - @c mysql_file_fputs is a replacement for @c fputs. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_fputs(P1, F) \ - inline_mysql_file_fputs(__FILE__, __LINE__, P1, F) -#else - #define mysql_file_fputs(P1, F)\ - inline_mysql_file_fputs(P1, F) -#endif - -/** - @def mysql_file_fputc(P1, F) - Instrumented fputc. - @c mysql_file_fputc is a replacement for @c fputc. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_fputc(P1, F) \ - inline_mysql_file_fputc(__FILE__, __LINE__, P1, F) -#else - #define mysql_file_fputc(P1, F) \ - inline_mysql_file_fputc(P1, F) -#endif - -/** - @def mysql_file_fprintf - Instrumented fprintf. - @c mysql_file_fprintf is a replacement for @c fprintf. -*/ -#define mysql_file_fprintf inline_mysql_file_fprintf - -/** - @def mysql_file_vfprintf(F, P1, P2) - Instrumented vfprintf. - @c mysql_file_vfprintf is a replacement for @c vfprintf. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_vfprintf(F, P1, P2) \ - inline_mysql_file_vfprintf(__FILE__, __LINE__, F, P1, P2) -#else - #define mysql_file_vfprintf(F, P1, P2) \ - inline_mysql_file_vfprintf(F, P1, P2) -#endif - -/** - @def mysql_file_fflush(F, P1, P2) - Instrumented fflush. - @c mysql_file_fflush is a replacement for @c fflush. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_fflush(F) \ - inline_mysql_file_fflush(__FILE__, __LINE__, F) -#else - #define mysql_file_fflush(F) \ - inline_mysql_file_fflush(F) -#endif - -/** - @def mysql_file_feof(F) - Instrumented feof. - @c mysql_file_feof is a replacement for @c feof. -*/ -#define mysql_file_feof(F) inline_mysql_file_feof(F) - -/** - @def mysql_file_fstat(FN, S, FL) - Instrumented fstat. - @c mysql_file_fstat is a replacement for @c my_fstat. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_fstat(FN, S, FL) \ - inline_mysql_file_fstat(__FILE__, __LINE__, FN, S, FL) -#else - #define mysql_file_fstat(FN, S, FL) \ - inline_mysql_file_fstat(FN, S, FL) -#endif - -/** - @def mysql_file_stat(K, FN, S, FL) - Instrumented stat. - @c mysql_file_stat is a replacement for @c my_stat. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_stat(K, FN, S, FL) \ - inline_mysql_file_stat(K, __FILE__, __LINE__, FN, S, FL) -#else - #define mysql_file_stat(K, FN, S, FL) \ - inline_mysql_file_stat(FN, S, FL) -#endif - -/** - @def mysql_file_chsize(F, P1, P2, P3) - Instrumented chsize. - @c mysql_file_chsize is a replacement for @c my_chsize. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_chsize(F, P1, P2, P3) \ - inline_mysql_file_chsize(__FILE__, __LINE__, F, P1, P2, P3) -#else - #define mysql_file_chsize(F, P1, P2, P3) \ - inline_mysql_file_chsize(F, P1, P2, P3) -#endif - -/** - @def mysql_file_fopen(K, N, F1, F2) - Instrumented fopen. - @c mysql_file_fopen is a replacement for @c my_fopen. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_fopen(K, N, F1, F2) \ - inline_mysql_file_fopen(K, __FILE__, __LINE__, N, F1, F2) -#else - #define mysql_file_fopen(K, N, F1, F2) \ - inline_mysql_file_fopen(N, F1, F2) -#endif - -/** - @def mysql_file_fclose(FD, FL) - Instrumented fclose. - @c mysql_file_fclose is a replacement for @c my_fclose. - Without the instrumentation, this call will have the same behavior as the - undocumented and possibly platform specific my_fclose(NULL, ...) behavior. - With the instrumentation, mysql_fclose(NULL, ...) will safely return 0, - which is an extension compared to my_fclose and is therefore compliant. - mysql_fclose is on purpose *not* implementing - @code DBUG_ASSERT(file != NULL) @endcode, - since doing so could introduce regressions. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_fclose(FD, FL) \ - inline_mysql_file_fclose(__FILE__, __LINE__, FD, FL) -#else - #define mysql_file_fclose(FD, FL) \ - inline_mysql_file_fclose(FD, FL) -#endif - -/** - @def mysql_file_fread(FD, P1, P2, P3) - Instrumented fread. - @c mysql_file_fread is a replacement for @c my_fread. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_fread(FD, P1, P2, P3) \ - inline_mysql_file_fread(__FILE__, __LINE__, FD, P1, P2, P3) -#else - #define mysql_file_fread(FD, P1, P2, P3) \ - inline_mysql_file_fread(FD, P1, P2, P3) -#endif - -/** - @def mysql_file_fwrite(FD, P1, P2, P3) - Instrumented fwrite. - @c mysql_file_fwrite is a replacement for @c my_fwrite. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_fwrite(FD, P1, P2, P3) \ - inline_mysql_file_fwrite(__FILE__, __LINE__, FD, P1, P2, P3) -#else - #define mysql_file_fwrite(FD, P1, P2, P3) \ - inline_mysql_file_fwrite(FD, P1, P2, P3) -#endif - -/** - @def mysql_file_fseek(FD, P, W, F) - Instrumented fseek. - @c mysql_file_fseek is a replacement for @c my_fseek. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_fseek(FD, P, W, F) \ - inline_mysql_file_fseek(__FILE__, __LINE__, FD, P, W, F) -#else - #define mysql_file_fseek(FD, P, W, F) \ - inline_mysql_file_fseek(FD, P, W, F) -#endif - -/** - @def mysql_file_ftell(FD, F) - Instrumented ftell. - @c mysql_file_ftell is a replacement for @c my_ftell. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_ftell(FD, F) \ - inline_mysql_file_ftell(__FILE__, __LINE__, FD, F) -#else - #define mysql_file_ftell(FD, F) \ - inline_mysql_file_ftell(FD, F) -#endif - -/** - @def mysql_file_create(K, N, F1, F2, F3) - Instrumented create. - @c mysql_file_create is a replacement for @c my_create. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_create(K, N, F1, F2, F3) \ - inline_mysql_file_create(K, __FILE__, __LINE__, N, F1, F2, F3) -#else - #define mysql_file_create(K, N, F1, F2, F3) \ - inline_mysql_file_create(N, F1, F2, F3) -#endif - -/** - @def mysql_file_create_temp(K, T, D, P, M, F) - Instrumented create_temp_file. - @c mysql_file_create_temp is a replacement for @c create_temp_file. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_create_temp(K, T, D, P, M, F) \ - inline_mysql_file_create_temp(K, T, D, P, M, F) -#else - #define mysql_file_create_temp(K, T, D, P, M, F) \ - inline_mysql_file_create_temp(T, D, P, M, F) -#endif - -/** - @def mysql_file_open(K, N, F1, F2) - Instrumented open. - @c mysql_file_open is a replacement for @c my_open. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_open(K, N, F1, F2) \ - inline_mysql_file_open(K, __FILE__, __LINE__, N, F1, F2) -#else - #define mysql_file_open(K, N, F1, F2) \ - inline_mysql_file_open(N, F1, F2) -#endif - -/** - @def mysql_file_close(FD, F) - Instrumented close. - @c mysql_file_close is a replacement for @c my_close. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_close(FD, F) \ - inline_mysql_file_close(__FILE__, __LINE__, FD, F) -#else - #define mysql_file_close(FD, F) \ - inline_mysql_file_close(FD, F) -#endif - -/** - @def mysql_file_read(FD, B, S, F) - Instrumented read. - @c mysql_read is a replacement for @c my_read. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_read(FD, B, S, F) \ - inline_mysql_file_read(__FILE__, __LINE__, FD, B, S, F) -#else - #define mysql_file_read(FD, B, S, F) \ - inline_mysql_file_read(FD, B, S, F) -#endif - -/** - @def mysql_file_write(FD, B, S, F) - Instrumented write. - @c mysql_file_write is a replacement for @c my_write. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_write(FD, B, S, F) \ - inline_mysql_file_write(__FILE__, __LINE__, FD, B, S, F) -#else - #define mysql_file_write(FD, B, S, F) \ - inline_mysql_file_write(FD, B, S, F) -#endif - -/** - @def mysql_file_pread(FD, B, S, O, F) - Instrumented pread. - @c mysql_pread is a replacement for @c my_pread. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_pread(FD, B, S, O, F) \ - inline_mysql_file_pread(__FILE__, __LINE__, FD, B, S, O, F) -#else - #define mysql_file_pread(FD, B, S, O, F) \ - inline_mysql_file_pread(FD, B, S, O, F) -#endif - -/** - @def mysql_file_pwrite(FD, B, S, O, F) - Instrumented pwrite. - @c mysql_file_pwrite is a replacement for @c my_pwrite. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_pwrite(FD, B, S, O, F) \ - inline_mysql_file_pwrite(__FILE__, __LINE__, FD, B, S, O, F) -#else - #define mysql_file_pwrite(FD, B, S, O, F) \ - inline_mysql_file_pwrite(FD, B, S, O, F) -#endif - -/** - @def mysql_file_seek(FD, P, W, F) - Instrumented seek. - @c mysql_file_seek is a replacement for @c my_seek. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_seek(FD, P, W, F) \ - inline_mysql_file_seek(__FILE__, __LINE__, FD, P, W, F) -#else - #define mysql_file_seek(FD, P, W, F) \ - inline_mysql_file_seek(FD, P, W, F) -#endif - -/** - @def mysql_file_tell(FD, F) - Instrumented tell. - @c mysql_file_tell is a replacement for @c my_tell. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_tell(FD, F) \ - inline_mysql_file_tell(__FILE__, __LINE__, FD, F) -#else - #define mysql_file_tell(FD, F) \ - inline_mysql_file_tell(FD, F) -#endif - -/** - @def mysql_file_delete(K, P1, P2) - Instrumented delete. - @c mysql_file_delete is a replacement for @c my_delete. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_delete(K, P1, P2) \ - inline_mysql_file_delete(K, __FILE__, __LINE__, P1, P2) -#else - #define mysql_file_delete(K, P1, P2) \ - inline_mysql_file_delete(P1, P2) -#endif - -/** - @def mysql_file_rename(K, P1, P2, P3) - Instrumented rename. - @c mysql_file_rename is a replacement for @c my_rename. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_rename(K, P1, P2, P3) \ - inline_mysql_file_rename(K, __FILE__, __LINE__, P1, P2, P3) -#else - #define mysql_file_rename(K, P1, P2, P3) \ - inline_mysql_file_rename(P1, P2, P3) -#endif - -/** - @def mysql_file_create_with_symlink(K, P1, P2, P3, P4, P5) - Instrumented create with symbolic link. - @c mysql_file_create_with_symlink is a replacement - for @c my_create_with_symlink. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_create_with_symlink(K, P1, P2, P3, P4, P5) \ - inline_mysql_file_create_with_symlink(K, __FILE__, __LINE__, \ - P1, P2, P3, P4, P5) -#else - #define mysql_file_create_with_symlink(K, P1, P2, P3, P4, P5) \ - inline_mysql_file_create_with_symlink(P1, P2, P3, P4, P5) -#endif - -/** - @def mysql_file_delete_with_symlink(K, P1, P2) - Instrumented delete with symbolic link. - @c mysql_file_delete_with_symlink is a replacement - for @c my_delete_with_symlink. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_delete_with_symlink(K, P1, P2) \ - inline_mysql_file_delete_with_symlink(K, __FILE__, __LINE__, P1, P2) -#else - #define mysql_file_delete_with_symlink(K, P1, P2) \ - inline_mysql_file_delete_with_symlink(P1, P2) -#endif - -/** - @def mysql_file_rename_with_symlink(K, P1, P2, P3) - Instrumented rename with symbolic link. - @c mysql_file_rename_with_symlink is a replacement - for @c my_rename_with_symlink. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_rename_with_symlink(K, P1, P2, P3) \ - inline_mysql_file_rename_with_symlink(K, __FILE__, __LINE__, P1, P2, P3) -#else - #define mysql_file_rename_with_symlink(K, P1, P2, P3) \ - inline_mysql_file_rename_with_symlink(P1, P2, P3) -#endif - -/** - @def mysql_file_sync(P1, P2) - Instrumented file sync. - @c mysql_file_sync is a replacement for @c my_sync. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_file_sync(P1, P2) \ - inline_mysql_file_sync(__FILE__, __LINE__, P1, P2) -#else - #define mysql_file_sync(P1, P2) \ - inline_mysql_file_sync(P1, P2) -#endif - -/** - An instrumented FILE structure. - @sa MYSQL_FILE -*/ -struct st_mysql_file -{ - /** The real file. */ - FILE *m_file; - /** - The instrumentation hook. - Note that this hook is not conditionally defined, - for binary compatibility of the @c MYSQL_FILE interface. - */ - struct PSI_file *m_psi; -}; - -/** - Type of an instrumented file. - @c MYSQL_FILE is a drop-in replacement for @c FILE. - @sa mysql_file_open -*/ -typedef struct st_mysql_file MYSQL_FILE; - -static inline char * -inline_mysql_file_fgets( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - char *str, int size, MYSQL_FILE *file) -{ - char *result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server && file->m_psi)) - { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_READ); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) size, src_file, src_line); - } -#endif - result= fgets(str, size, file->m_file); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, result ? strlen(result) : 0); -#endif - return result; -} - -static inline int -inline_mysql_file_fgetc( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - MYSQL_FILE *file) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server && file->m_psi)) - { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_READ); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 1, src_file, src_line); - } -#endif - result= fgetc(file->m_file); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 1); -#endif - return result; -} - -static inline int -inline_mysql_file_fputs( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - const char *str, MYSQL_FILE *file) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - size_t bytes= 0; - if (likely(PSI_server && file->m_psi)) - { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_WRITE); - if (likely(locker != NULL)) - { - bytes= str ? strlen(str) : 0; - PSI_server->start_file_wait(locker, bytes, src_file, src_line); - } - } -#endif - result= fputs(str, file->m_file); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, bytes); -#endif - return result; -} - -static inline int -inline_mysql_file_fputc( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - char c, MYSQL_FILE *file) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server && file->m_psi)) - { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_WRITE); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 1, src_file, src_line); - } -#endif - result= fputc(c, file->m_file); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 1); -#endif - return result; -} - -static inline int -inline_mysql_file_fprintf(MYSQL_FILE *file, const char *format, ...) -{ - /* - TODO: figure out how to pass src_file and src_line from the caller. - */ - int result; - va_list args; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server && file->m_psi)) - { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_WRITE); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, __FILE__, __LINE__); - } -#endif - va_start(args, format); - result= vfprintf(file->m_file, format, args); - va_end(args); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) result); -#endif - return result; -} - -static inline int -inline_mysql_file_vfprintf( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - MYSQL_FILE *file, const char *format, va_list args) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server && file->m_psi)) - { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_WRITE); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); - } -#endif - result= vfprintf(file->m_file, format, args); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) result); -#endif - return result; -} - -static inline int -inline_mysql_file_fflush( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - MYSQL_FILE *file) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server && file->m_psi)) - { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_FLUSH); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); - } -#endif - result= fflush(file->m_file); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif - return result; -} - -static inline int inline_mysql_file_feof(MYSQL_FILE *file) -{ - /* Not instrumented, there is no wait involved */ - return feof(file->m_file); -} - -static inline int -inline_mysql_file_fstat( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - int filenr, MY_STAT *stat_area, myf flags) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_descriptor_locker(&state, filenr, - PSI_FILE_FSTAT); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); - } -#endif - result= my_fstat(filenr, stat_area, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif - return result; -} - -static inline MY_STAT * -inline_mysql_file_stat( -#ifdef HAVE_PSI_INTERFACE - PSI_file_key key, const char *src_file, uint src_line, -#endif - const char *path, MY_STAT *stat_area, myf flags) -{ - MY_STAT *result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_name_locker(&state, - key, PSI_FILE_STAT, - path, &locker); - if (likely(locker != NULL)) - PSI_server->start_file_open_wait(locker, src_file, src_line); - } -#endif - result= my_stat(path, stat_area, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif - return result; -} - -static inline int -inline_mysql_file_chsize( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - File file, my_off_t newlength, int filler, myf flags) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_descriptor_locker(&state, file, - PSI_FILE_CHSIZE); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) newlength, src_file, - src_line); - } -#endif - result= my_chsize(file, newlength, filler, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) newlength); -#endif - return result; -} - -static inline MYSQL_FILE* -inline_mysql_file_fopen( -#ifdef HAVE_PSI_INTERFACE - PSI_file_key key, const char *src_file, uint src_line, -#endif - const char *filename, int flags, myf myFlags) -{ - MYSQL_FILE *that; - that= (MYSQL_FILE*) my_malloc(sizeof(MYSQL_FILE), MYF(MY_WME)); - if (likely(that != NULL)) - { - that->m_psi= NULL; - { -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_name_locker - (&state, key, PSI_FILE_STREAM_OPEN, filename, that); - if (likely(locker != NULL)) - that->m_psi= PSI_server->start_file_open_wait(locker, src_file, - src_line); - } -#endif - that->m_file= my_fopen(filename, flags, myFlags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_open_wait(locker); -#endif - if (unlikely(that->m_file == NULL)) - { - my_free(that); - return NULL; - } - } - } - return that; -} - -static inline int -inline_mysql_file_fclose( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - MYSQL_FILE *file, myf flags) -{ - int result= 0; - if (likely(file != NULL)) - { -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - DBUG_ASSERT(file != NULL); - if (likely(PSI_server && file->m_psi)) - { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_STREAM_CLOSE); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); - } -#endif - result= my_fclose(file->m_file, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif - my_free(file); - } - return result; -} - -static inline size_t -inline_mysql_file_fread( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - MYSQL_FILE *file, uchar *buffer, size_t count, myf flags) -{ - size_t result= 0; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server && file->m_psi)) - { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_READ); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, count, src_file, src_line); - } -#endif - result= my_fread(file->m_file, buffer, count, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - { - size_t bytes_read; - if (flags & (MY_NABP | MY_FNABP)) - bytes_read= (result == 0) ? count : 0; - else - bytes_read= (result != MY_FILE_ERROR) ? result : 0; - PSI_server->end_file_wait(locker, bytes_read); - } -#endif - return result; -} - -static inline size_t -inline_mysql_file_fwrite( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - MYSQL_FILE *file, const uchar *buffer, size_t count, myf flags) -{ - size_t result= 0; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server && file->m_psi)) - { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_WRITE); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, count, src_file, src_line); - } -#endif - result= my_fwrite(file->m_file, buffer, count, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - { - size_t bytes_written; - if (flags & (MY_NABP | MY_FNABP)) - bytes_written= (result == 0) ? count : 0; - else - bytes_written= (result != MY_FILE_ERROR) ? result : 0; - PSI_server->end_file_wait(locker, bytes_written); - } -#endif - return result; -} - -static inline my_off_t -inline_mysql_file_fseek( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - MYSQL_FILE *file, my_off_t pos, int whence, myf flags) -{ - my_off_t result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server && file->m_psi)) - { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_SEEK); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); - } -#endif - result= my_fseek(file->m_file, pos, whence, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif - return result; -} - -static inline my_off_t -inline_mysql_file_ftell( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - MYSQL_FILE *file, myf flags) -{ - my_off_t result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server && file->m_psi)) - { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_TELL); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); - } -#endif - result= my_ftell(file->m_file, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif - return result; -} - -static inline File -inline_mysql_file_create( -#ifdef HAVE_PSI_INTERFACE - PSI_file_key key, const char *src_file, uint src_line, -#endif - const char *filename, int create_flags, int access_flags, myf myFlags) -{ - File file; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_name_locker(&state, key, PSI_FILE_CREATE, - filename, &locker); - if (likely(locker != NULL)) - PSI_server->start_file_open_wait(locker, src_file, src_line); - } -#endif - file= my_create(filename, create_flags, access_flags, myFlags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_open_wait_and_bind_to_descriptor(locker, file); -#endif - return file; -} - -static inline File -inline_mysql_file_create_temp( -#ifdef HAVE_PSI_INTERFACE - PSI_file_key key, -#endif - char *to, const char *dir, const char *pfx, int mode, myf myFlags) -{ - File file; - /* - TODO: This event is instrumented, but not timed. - The problem is that the file name is now known - before the create_temp_file call. - */ - file= create_temp_file(to, dir, pfx, mode, myFlags); -#ifdef HAVE_PSI_INTERFACE - if (likely(PSI_server != NULL)) - PSI_server->create_file(key, to, file); -#endif - return file; -} - -static inline File -inline_mysql_file_open( -#ifdef HAVE_PSI_INTERFACE - PSI_file_key key, const char *src_file, uint src_line, -#endif - const char *filename, int flags, myf myFlags) -{ - File file; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_name_locker(&state, key, PSI_FILE_OPEN, - filename, &locker); - if (likely(locker != NULL)) - PSI_server->start_file_open_wait(locker, src_file, src_line); - } -#endif - file= my_open(filename, flags, myFlags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_open_wait_and_bind_to_descriptor(locker, file); -#endif - return file; -} - -static inline int -inline_mysql_file_close( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - File file, myf flags) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_descriptor_locker(&state, file, - PSI_FILE_CLOSE); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); - } -#endif - result= my_close(file, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif - return result; -} - -static inline size_t -inline_mysql_file_read( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - File file, uchar *buffer, size_t count, myf flags) -{ - size_t result= 0; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_descriptor_locker(&state, file, - PSI_FILE_READ); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, count, src_file, src_line); - } -#endif - result= my_read(file, buffer, count, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - { - size_t bytes_read; - if (flags & (MY_NABP | MY_FNABP)) - bytes_read= (result == 0) ? count : 0; - else - bytes_read= (result != MY_FILE_ERROR) ? result : 0; - PSI_server->end_file_wait(locker, bytes_read); - } -#endif - return result; -} - -static inline size_t -inline_mysql_file_write( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - File file, const uchar *buffer, size_t count, myf flags) -{ - size_t result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_descriptor_locker(&state, file, - PSI_FILE_WRITE); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, count, src_file, src_line); - } -#endif - result= my_write(file, buffer, count, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - { - size_t bytes_written; - if (flags & (MY_NABP | MY_FNABP)) - bytes_written= (result == 0) ? count : 0; - else - bytes_written= (result != MY_FILE_ERROR) ? result : 0; - PSI_server->end_file_wait(locker, bytes_written); - } -#endif - return result; -} - -static inline size_t -inline_mysql_file_pread( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - File file, uchar *buffer, size_t count, my_off_t offset, myf flags) -{ - size_t result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_descriptor_locker(&state, file, PSI_FILE_READ); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, count, src_file, src_line); - } -#endif - result= my_pread(file, buffer, count, offset, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - { - size_t bytes_read; - if (flags & (MY_NABP | MY_FNABP)) - bytes_read= (result == 0) ? count : 0; - else - bytes_read= (result != MY_FILE_ERROR) ? result : 0; - PSI_server->end_file_wait(locker, bytes_read); - } -#endif - return result; -} - -static inline size_t -inline_mysql_file_pwrite( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - File file, const uchar *buffer, size_t count, my_off_t offset, myf flags) -{ - size_t result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_descriptor_locker(&state, file, - PSI_FILE_WRITE); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, count, src_file, src_line); - } -#endif - result= my_pwrite(file, buffer, count, offset, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - { - size_t bytes_written; - if (flags & (MY_NABP | MY_FNABP)) - bytes_written= (result == 0) ? count : 0; - else - bytes_written= (result != MY_FILE_ERROR) ? result : 0; - PSI_server->end_file_wait(locker, bytes_written); - } -#endif - return result; -} - -static inline my_off_t -inline_mysql_file_seek( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - File file, my_off_t pos, int whence, myf flags) -{ - my_off_t result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_descriptor_locker(&state, file, PSI_FILE_SEEK); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); - } -#endif - result= my_seek(file, pos, whence, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif - return result; -} - -static inline my_off_t -inline_mysql_file_tell( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - File file, myf flags) -{ - my_off_t result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_descriptor_locker(&state, file, PSI_FILE_TELL); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); - } -#endif - result= my_tell(file, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif - return result; -} - -static inline int -inline_mysql_file_delete( -#ifdef HAVE_PSI_INTERFACE - PSI_file_key key, const char *src_file, uint src_line, -#endif - const char *name, myf flags) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_name_locker(&state, key, PSI_FILE_DELETE, - name, &locker); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); - } -#endif - result= my_delete(name, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif - return result; -} - -static inline int -inline_mysql_file_rename( -#ifdef HAVE_PSI_INTERFACE - PSI_file_key key, const char *src_file, uint src_line, -#endif - const char *from, const char *to, myf flags) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_name_locker(&state, key, PSI_FILE_RENAME, - to, &locker); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); - } -#endif - result= my_rename(from, to, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif - return result; -} - -static inline File -inline_mysql_file_create_with_symlink( -#ifdef HAVE_PSI_INTERFACE - PSI_file_key key, const char *src_file, uint src_line, -#endif - const char *linkname, const char *filename, int create_flags, - int access_flags, myf flags) -{ - File file; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_name_locker(&state, key, PSI_FILE_CREATE, - filename, &locker); - if (likely(locker != NULL)) - PSI_server->start_file_open_wait(locker, src_file, src_line); - } -#endif - file= my_create_with_symlink(linkname, filename, create_flags, access_flags, - flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_open_wait_and_bind_to_descriptor(locker, file); -#endif - return file; -} - -static inline int -inline_mysql_file_delete_with_symlink( -#ifdef HAVE_PSI_INTERFACE - PSI_file_key key, const char *src_file, uint src_line, -#endif - const char *name, myf flags) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_name_locker(&state, key, PSI_FILE_DELETE, - name, &locker); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); - } -#endif - result= my_delete_with_symlink(name, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif - return result; -} - -static inline int -inline_mysql_file_rename_with_symlink( -#ifdef HAVE_PSI_INTERFACE - PSI_file_key key, const char *src_file, uint src_line, -#endif - const char *from, const char *to, myf flags) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_name_locker(&state, key, PSI_FILE_RENAME, - to, &locker); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); - } -#endif - result= my_rename_with_symlink(from, to, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif - return result; -} - -static inline int -inline_mysql_file_sync( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - File fd, myf flags) -{ - int result= 0; -#ifdef HAVE_PSI_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - if (likely(PSI_server != NULL)) - { - locker= PSI_server->get_thread_file_descriptor_locker(&state, fd, PSI_FILE_SYNC); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); - } -#endif - result= my_sync(fd, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif - return result; -} - -/** @} (end of group File_instrumentation) */ - -#endif - diff --git a/deps/mysqllite/include/mysql/psi/mysql_thread.h b/deps/mysqllite/include/mysql/psi/mysql_thread.h deleted file mode 100644 index 5b8ea3dc5dcae4..00000000000000 --- a/deps/mysqllite/include/mysql/psi/mysql_thread.h +++ /dev/null @@ -1,1071 +0,0 @@ -/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ - -#ifndef MYSQL_THREAD_H -#define MYSQL_THREAD_H - -/** - @file mysql/psi/mysql_thread.h - Instrumentation helpers for mysys threads, mutexes, - read write locks and conditions. - This header file provides the necessary declarations - to use the mysys thread API with the performance schema instrumentation. - In some compilers (SunStudio), 'static inline' functions, when declared - but not used, are not optimized away (because they are unused) by default, - so that including a static inline function from a header file does - create unwanted dependencies, causing unresolved symbols at link time. - Other compilers, like gcc, optimize these dependencies by default. - - Since the instrumented APIs declared here are wrapper on top - of my_pthread / safemutex / etc APIs, - including mysql/psi/mysql_thread.h assumes that - the dependency on my_pthread and safemutex already exists. -*/ -/* - Note: there are several orthogonal dimensions here. - - Dimension 1: Instrumentation - HAVE_PSI_INTERFACE is defined when the instrumentation is compiled in. - This may happen both in debug or production builds. - - Dimension 2: Debug - SAFE_MUTEX is defined when debug is compiled in. - This may happen both with and without instrumentation. - - Dimension 3: Platform - Mutexes are implemented with one of: - - the pthread library - - fast mutexes - - window apis - This is implemented by various macro definitions in my_pthread.h - - This causes complexity with '#ifdef'-ery that can't be avoided. -*/ - -#include "mysql/psi/psi.h" - -/** - @defgroup Thread_instrumentation Thread Instrumentation - @ingroup Instrumentation_interface - @{ -*/ - -/** - An instrumented mutex structure. - @sa mysql_mutex_t -*/ -struct st_mysql_mutex -{ - /** The real mutex. */ - pthread_mutex_t m_mutex; - /** - The instrumentation hook. - Note that this hook is not conditionally defined, - for binary compatibility of the @c mysql_mutex_t interface. - */ - struct PSI_mutex *m_psi; -}; - -/** - Type of an instrumented mutex. - @c mysql_mutex_t is a drop-in replacement for @c pthread_mutex_t. - @sa mysql_mutex_assert_owner - @sa mysql_mutex_assert_not_owner - @sa mysql_mutex_init - @sa mysql_mutex_lock - @sa mysql_mutex_unlock - @sa mysql_mutex_destroy -*/ -typedef struct st_mysql_mutex mysql_mutex_t; - -/** - An instrumented rwlock structure. - @sa mysql_rwlock_t -*/ -struct st_mysql_rwlock -{ - /** The real rwlock */ - rw_lock_t m_rwlock; - /** - The instrumentation hook. - Note that this hook is not conditionally defined, - for binary compatibility of the @c mysql_rwlock_t interface. - */ - struct PSI_rwlock *m_psi; -}; - -/** - An instrumented prlock structure. - @sa mysql_prlock_t -*/ -struct st_mysql_prlock -{ - /** The real prlock */ - rw_pr_lock_t m_prlock; - /** - The instrumentation hook. - Note that this hook is not conditionally defined, - for binary compatibility of the @c mysql_rwlock_t interface. - */ - struct PSI_rwlock *m_psi; -}; - -/** - Type of an instrumented rwlock. - @c mysql_rwlock_t is a drop-in replacement for @c pthread_rwlock_t. - @sa mysql_rwlock_init - @sa mysql_rwlock_rdlock - @sa mysql_rwlock_tryrdlock - @sa mysql_rwlock_wrlock - @sa mysql_rwlock_trywrlock - @sa mysql_rwlock_unlock - @sa mysql_rwlock_destroy -*/ -typedef struct st_mysql_rwlock mysql_rwlock_t; - -/** - Type of an instrumented prlock. - A prlock is a read write lock that 'prefers readers' (pr). - @c mysql_prlock_t is a drop-in replacement for @c rw_pr_lock_t. - @sa mysql_prlock_init - @sa mysql_prlock_rdlock - @sa mysql_prlock_wrlock - @sa mysql_prlock_unlock - @sa mysql_prlock_destroy -*/ -typedef struct st_mysql_prlock mysql_prlock_t; - -/** - An instrumented cond structure. - @sa mysql_cond_t -*/ -struct st_mysql_cond -{ - /** The real condition */ - pthread_cond_t m_cond; - /** - The instrumentation hook. - Note that this hook is not conditionally defined, - for binary compatibility of the @c mysql_cond_t interface. - */ - struct PSI_cond *m_psi; -}; - -/** - Type of an instrumented condition. - @c mysql_cond_t is a drop-in replacement for @c pthread_cond_t. - @sa mysql_cond_init - @sa mysql_cond_wait - @sa mysql_cond_timedwait - @sa mysql_cond_signal - @sa mysql_cond_broadcast - @sa mysql_cond_destroy -*/ -typedef struct st_mysql_cond mysql_cond_t; - -/* - Consider the following code: - static inline void foo() { bar(); } - when foo() is never called. - - With gcc, foo() is a local static function, so the dependencies - are optimized away at compile time, and there is no dependency on bar(). - With other compilers (HP, Sun Studio), the function foo() implementation - is compiled, and bar() needs to be present to link. - - Due to the existing header dependencies in MySQL code, this header file - is sometime used when it is not needed, which in turn cause link failures - on some platforms. - The proper fix would be to cut these extra dependencies in the calling code. - DISABLE_MYSQL_THREAD_H is a work around to limit dependencies. - DISABLE_MYSQL_PRLOCK_H is similar, and is used to disable specifically - the prlock wrappers. -*/ -#ifndef DISABLE_MYSQL_THREAD_H - -/** - @def mysql_mutex_assert_owner(M) - Wrapper, to use safe_mutex_assert_owner with instrumented mutexes. - @c mysql_mutex_assert_owner is a drop-in replacement - for @c safe_mutex_assert_owner. -*/ -#define mysql_mutex_assert_owner(M) \ - safe_mutex_assert_owner(&(M)->m_mutex) - -/** - @def mysql_mutex_assert_not_owner(M) - Wrapper, to use safe_mutex_assert_not_owner with instrumented mutexes. - @c mysql_mutex_assert_not_owner is a drop-in replacement - for @c safe_mutex_assert_not_owner. -*/ -#define mysql_mutex_assert_not_owner(M) \ - safe_mutex_assert_not_owner(&(M)->m_mutex) - -/** Wrappers for instrumented prlock objects. */ - -#define mysql_prlock_assert_write_owner(M) \ - rw_pr_lock_assert_write_owner(&(M)->m_prlock) - -#define mysql_prlock_assert_not_write_owner(M) \ - rw_pr_lock_assert_not_write_owner(&(M)->m_prlock) - -/** - @def mysql_mutex_init(K, M, A) - Instrumented mutex_init. - @c mysql_mutex_init is a replacement for @c pthread_mutex_init. - @param K The PSI_mutex_key for this instrumented mutex - @param M The mutex to initialize - @param A Mutex attributes -*/ - -#ifdef HAVE_PSI_INTERFACE - #ifdef SAFE_MUTEX - #define mysql_mutex_init(K, M, A) \ - inline_mysql_mutex_init(K, M, A, __FILE__, __LINE__) - #else - #define mysql_mutex_init(K, M, A) \ - inline_mysql_mutex_init(K, M, A) - #endif -#else - #ifdef SAFE_MUTEX - #define mysql_mutex_init(K, M, A) \ - inline_mysql_mutex_init(M, A, __FILE__, __LINE__) - #else - #define mysql_mutex_init(K, M, A) \ - inline_mysql_mutex_init(M, A) - #endif -#endif - -/** - @def mysql_mutex_destroy(M) - Instrumented mutex_destroy. - @c mysql_mutex_destroy is a drop-in replacement - for @c pthread_mutex_destroy. -*/ -#ifdef SAFE_MUTEX - #define mysql_mutex_destroy(M) \ - inline_mysql_mutex_destroy(M, __FILE__, __LINE__) -#else - #define mysql_mutex_destroy(M) \ - inline_mysql_mutex_destroy(M) -#endif - -/** - @def mysql_mutex_lock(M) - Instrumented mutex_lock. - @c mysql_mutex_lock is a drop-in replacement for @c pthread_mutex_lock. - @param M The mutex to lock -*/ - -#if defined(SAFE_MUTEX) || defined (HAVE_PSI_INTERFACE) - #define mysql_mutex_lock(M) \ - inline_mysql_mutex_lock(M, __FILE__, __LINE__) -#else - #define mysql_mutex_lock(M) \ - inline_mysql_mutex_lock(M) -#endif - -/** - @def mysql_mutex_trylock(M) - Instrumented mutex_lock. - @c mysql_mutex_trylock is a drop-in replacement - for @c pthread_mutex_trylock. -*/ - -#if defined(SAFE_MUTEX) || defined (HAVE_PSI_INTERFACE) - #define mysql_mutex_trylock(M) \ - inline_mysql_mutex_trylock(M, __FILE__, __LINE__) -#else - #define mysql_mutex_trylock(M) \ - inline_mysql_mutex_trylock(M) -#endif - -/** - @def mysql_mutex_unlock(M) - Instrumented mutex_unlock. - @c mysql_mutex_unlock is a drop-in replacement for @c pthread_mutex_unlock. -*/ -#ifdef SAFE_MUTEX - #define mysql_mutex_unlock(M) \ - inline_mysql_mutex_unlock(M, __FILE__, __LINE__) -#else - #define mysql_mutex_unlock(M) \ - inline_mysql_mutex_unlock(M) -#endif - -/** - @def mysql_rwlock_init(K, RW) - Instrumented rwlock_init. - @c mysql_rwlock_init is a replacement for @c pthread_rwlock_init. - Note that pthread_rwlockattr_t is not supported in MySQL. - @param K The PSI_rwlock_key for this instrumented rwlock - @param RW The rwlock to initialize -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_rwlock_init(K, RW) inline_mysql_rwlock_init(K, RW) -#else - #define mysql_rwlock_init(K, RW) inline_mysql_rwlock_init(RW) -#endif - -/** - @def mysql_prlock_init(K, RW) - Instrumented rw_pr_init. - @c mysql_prlock_init is a replacement for @c rw_pr_init. - @param K The PSI_rwlock_key for this instrumented prlock - @param RW The prlock to initialize -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_prlock_init(K, RW) inline_mysql_prlock_init(K, RW) -#else - #define mysql_prlock_init(K, RW) inline_mysql_prlock_init(RW) -#endif - -/** - @def mysql_rwlock_destroy(RW) - Instrumented rwlock_destroy. - @c mysql_rwlock_destroy is a drop-in replacement - for @c pthread_rwlock_destroy. -*/ -#define mysql_rwlock_destroy(RW) inline_mysql_rwlock_destroy(RW) - -/** - @def mysql_prlock_destroy(RW) - Instrumented rw_pr_destroy. - @c mysql_prlock_destroy is a drop-in replacement - for @c rw_pr_destroy. -*/ -#define mysql_prlock_destroy(RW) inline_mysql_prlock_destroy(RW) - -/** - @def mysql_rwlock_rdlock(RW) - Instrumented rwlock_rdlock. - @c mysql_rwlock_rdlock is a drop-in replacement - for @c pthread_rwlock_rdlock. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_rwlock_rdlock(RW) \ - inline_mysql_rwlock_rdlock(RW, __FILE__, __LINE__) -#else - #define mysql_rwlock_rdlock(RW) \ - inline_mysql_rwlock_rdlock(RW) -#endif - -/** - @def mysql_prlock_rdlock(RW) - Instrumented rw_pr_rdlock. - @c mysql_prlock_rdlock is a drop-in replacement - for @c rw_pr_rdlock. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_prlock_rdlock(RW) \ - inline_mysql_prlock_rdlock(RW, __FILE__, __LINE__) -#else - #define mysql_prlock_rdlock(RW) \ - inline_mysql_prlock_rdlock(RW) -#endif - -/** - @def mysql_rwlock_wrlock(RW) - Instrumented rwlock_wrlock. - @c mysql_rwlock_wrlock is a drop-in replacement - for @c pthread_rwlock_wrlock. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_rwlock_wrlock(RW) \ - inline_mysql_rwlock_wrlock(RW, __FILE__, __LINE__) -#else - #define mysql_rwlock_wrlock(RW) \ - inline_mysql_rwlock_wrlock(RW) -#endif - -/** - @def mysql_prlock_wrlock(RW) - Instrumented rw_pr_wrlock. - @c mysql_prlock_wrlock is a drop-in replacement - for @c rw_pr_wrlock. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_prlock_wrlock(RW) \ - inline_mysql_prlock_wrlock(RW, __FILE__, __LINE__) -#else - #define mysql_prlock_wrlock(RW) \ - inline_mysql_prlock_wrlock(RW) -#endif - -/** - @def mysql_rwlock_tryrdlock(RW) - Instrumented rwlock_tryrdlock. - @c mysql_rwlock_tryrdlock is a drop-in replacement - for @c pthread_rwlock_tryrdlock. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_rwlock_tryrdlock(RW) \ - inline_mysql_rwlock_tryrdlock(RW, __FILE__, __LINE__) -#else - #define mysql_rwlock_tryrdlock(RW) \ - inline_mysql_rwlock_tryrdlock(RW) -#endif - -/** - @def mysql_rwlock_trywrlock(RW) - Instrumented rwlock_trywrlock. - @c mysql_rwlock_trywrlock is a drop-in replacement - for @c pthread_rwlock_trywrlock. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_rwlock_trywrlock(RW) \ - inline_mysql_rwlock_trywrlock(RW, __FILE__, __LINE__) -#else - #define mysql_rwlock_trywrlock(RW) \ - inline_mysql_rwlock_trywrlock(RW) -#endif - -/** - @def mysql_rwlock_unlock(RW) - Instrumented rwlock_unlock. - @c mysql_rwlock_unlock is a drop-in replacement - for @c pthread_rwlock_unlock. -*/ -#define mysql_rwlock_unlock(RW) inline_mysql_rwlock_unlock(RW) - -/** - @def mysql_prlock_unlock(RW) - Instrumented rw_pr_unlock. - @c mysql_prlock_unlock is a drop-in replacement - for @c rw_pr_unlock. -*/ -#define mysql_prlock_unlock(RW) inline_mysql_prlock_unlock(RW) - -/** - @def mysql_cond_init(K, C, A) - Instrumented cond_init. - @c mysql_cond_init is a replacement for @c pthread_cond_init. - @param C The cond to initialize - @param K The PSI_cond_key for this instrumented cond - @param A Condition attributes -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_cond_init(K, C, A) inline_mysql_cond_init(K, C, A) -#else - #define mysql_cond_init(K, C, A) inline_mysql_cond_init(C, A) -#endif - -/** - @def mysql_cond_destroy(C) - Instrumented cond_destroy. - @c mysql_cond_destroy is a drop-in replacement for @c pthread_cond_destroy. -*/ -#define mysql_cond_destroy(C) inline_mysql_cond_destroy(C) - -/** - @def mysql_cond_wait(C) - Instrumented cond_wait. - @c mysql_cond_wait is a drop-in replacement for @c pthread_cond_wait. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_cond_wait(C, M) \ - inline_mysql_cond_wait(C, M, __FILE__, __LINE__) -#else - #define mysql_cond_wait(C, M) \ - inline_mysql_cond_wait(C, M) -#endif - -/** - @def mysql_cond_timedwait(C, M, W) - Instrumented cond_timedwait. - @c mysql_cond_timedwait is a drop-in replacement - for @c pthread_cond_timedwait. -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_cond_timedwait(C, M, W) \ - inline_mysql_cond_timedwait(C, M, W, __FILE__, __LINE__) -#else - #define mysql_cond_timedwait(C, M, W) \ - inline_mysql_cond_timedwait(C, M, W) -#endif - -/** - @def mysql_cond_signal(C) - Instrumented cond_signal. - @c mysql_cond_signal is a drop-in replacement for @c pthread_cond_signal. -*/ -#define mysql_cond_signal(C) inline_mysql_cond_signal(C) - -/** - @def mysql_cond_broadcast(C) - Instrumented cond_broadcast. - @c mysql_cond_broadcast is a drop-in replacement - for @c pthread_cond_broadcast. -*/ -#define mysql_cond_broadcast(C) inline_mysql_cond_broadcast(C) - - -/** - @def mysql_thread_create(K, P1, P2, P3, P4) - Instrumented pthread_create. - This function creates both the thread instrumentation and a thread. - @c mysql_thread_create is a replacement for @c pthread_create. - The parameter P4 (or, if it is NULL, P1) will be used as the - instrumented thread "indentity". - Providing a P1 / P4 parameter with a different value for each call - will on average improve performances, since this thread identity value - is used internally to randomize access to data and prevent contention. - This is optional, and the improvement is not guaranteed, only statistical. - @param K The PSI_thread_key for this instrumented thread - @param P1 pthread_create parameter 1 - @param P2 pthread_create parameter 2 - @param P3 pthread_create parameter 3 - @param P4 pthread_create parameter 4 -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_thread_create(K, P1, P2, P3, P4) \ - inline_mysql_thread_create(K, P1, P2, P3, P4) -#else - #define mysql_thread_create(K, P1, P2, P3, P4) \ - pthread_create(P1, P2, P3, P4) -#endif - -/** - @def mysql_thread_set_psi_id(I) - Set the thread indentifier for the instrumentation. - @param I The thread identifier -*/ -#ifdef HAVE_PSI_INTERFACE - #define mysql_thread_set_psi_id(I) inline_mysql_thread_set_psi_id(I) -#else - #define mysql_thread_set_psi_id(I) do {} while (0) -#endif - -static inline int inline_mysql_mutex_init( -#ifdef HAVE_PSI_INTERFACE - PSI_mutex_key key, -#endif - mysql_mutex_t *that, - const pthread_mutexattr_t *attr -#ifdef SAFE_MUTEX - , const char *src_file, uint src_line -#endif - ) -{ -#ifdef HAVE_PSI_INTERFACE - that->m_psi= PSI_server ? PSI_server->init_mutex(key, &that->m_mutex) - : NULL; -#else - that->m_psi= NULL; -#endif -#ifdef SAFE_MUTEX - return safe_mutex_init(&that->m_mutex, attr, src_file, src_line); -#else - return pthread_mutex_init(&that->m_mutex, attr); -#endif -} - -static inline int inline_mysql_mutex_destroy( - mysql_mutex_t *that -#ifdef SAFE_MUTEX - , const char *src_file, uint src_line -#endif - ) -{ -#ifdef HAVE_PSI_INTERFACE - if (likely(PSI_server && that->m_psi)) - { - PSI_server->destroy_mutex(that->m_psi); - that->m_psi= NULL; - } -#endif -#ifdef SAFE_MUTEX - return safe_mutex_destroy(&that->m_mutex, src_file, src_line); -#else - return pthread_mutex_destroy(&that->m_mutex); -#endif -} - -static inline int inline_mysql_mutex_lock( - mysql_mutex_t *that -#if defined(SAFE_MUTEX) || defined (HAVE_PSI_INTERFACE) - , const char *src_file, uint src_line -#endif - ) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_mutex_locker *locker= NULL; - PSI_mutex_locker_state state; - if (likely(PSI_server && that->m_psi)) - { - locker= PSI_server->get_thread_mutex_locker(&state, that->m_psi, PSI_MUTEX_LOCK); - if (likely(locker != NULL)) - PSI_server->start_mutex_wait(locker, src_file, src_line); - } -#endif -#ifdef SAFE_MUTEX - result= safe_mutex_lock(&that->m_mutex, FALSE, src_file, src_line); -#else - result= pthread_mutex_lock(&that->m_mutex); -#endif -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_mutex_wait(locker, result); -#endif - return result; -} - -static inline int inline_mysql_mutex_trylock( - mysql_mutex_t *that -#if defined(SAFE_MUTEX) || defined (HAVE_PSI_INTERFACE) - , const char *src_file, uint src_line -#endif - ) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_mutex_locker *locker= NULL; - PSI_mutex_locker_state state; - if (likely(PSI_server && that->m_psi)) - { - locker= PSI_server->get_thread_mutex_locker(&state, that->m_psi, PSI_MUTEX_TRYLOCK); - if (likely(locker != NULL)) - PSI_server->start_mutex_wait(locker, src_file, src_line); - } -#endif -#ifdef SAFE_MUTEX - result= safe_mutex_lock(&that->m_mutex, TRUE, src_file, src_line); -#else - result= pthread_mutex_trylock(&that->m_mutex); -#endif -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_mutex_wait(locker, result); -#endif - return result; -} - -static inline int inline_mysql_mutex_unlock( - mysql_mutex_t *that -#ifdef SAFE_MUTEX - , const char *src_file, uint src_line -#endif - ) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - if (likely(PSI_server && that->m_psi)) - PSI_server->unlock_mutex(that->m_psi); -#endif -#ifdef SAFE_MUTEX - result= safe_mutex_unlock(&that->m_mutex, src_file, src_line); -#else - result= pthread_mutex_unlock(&that->m_mutex); -#endif - return result; -} - -static inline int inline_mysql_rwlock_init( -#ifdef HAVE_PSI_INTERFACE - PSI_rwlock_key key, -#endif - mysql_rwlock_t *that) -{ -#ifdef HAVE_PSI_INTERFACE - that->m_psi= (PSI_server ? PSI_server->init_rwlock(key, &that->m_rwlock) - : NULL); -#else - that->m_psi= NULL; -#endif - /* - pthread_rwlockattr_t is not used in MySQL. - */ - return my_rwlock_init(&that->m_rwlock, NULL); -} - -#ifndef DISABLE_MYSQL_PRLOCK_H -static inline int inline_mysql_prlock_init( -#ifdef HAVE_PSI_INTERFACE - PSI_rwlock_key key, -#endif - mysql_prlock_t *that) -{ -#ifdef HAVE_PSI_INTERFACE - that->m_psi= (PSI_server ? PSI_server->init_rwlock(key, &that->m_prlock) - : NULL); -#else - that->m_psi= NULL; -#endif - return rw_pr_init(&that->m_prlock); -} -#endif - -static inline int inline_mysql_rwlock_destroy( - mysql_rwlock_t *that) -{ -#ifdef HAVE_PSI_INTERFACE - if (likely(PSI_server && that->m_psi)) - { - PSI_server->destroy_rwlock(that->m_psi); - that->m_psi= NULL; - } -#endif - return rwlock_destroy(&that->m_rwlock); -} - -#ifndef DISABLE_MYSQL_PRLOCK_H -static inline int inline_mysql_prlock_destroy( - mysql_prlock_t *that) -{ -#ifdef HAVE_PSI_INTERFACE - if (likely(PSI_server && that->m_psi)) - { - PSI_server->destroy_rwlock(that->m_psi); - that->m_psi= NULL; - } -#endif - return rw_pr_destroy(&that->m_prlock); -} -#endif - -static inline int inline_mysql_rwlock_rdlock( - mysql_rwlock_t *that -#ifdef HAVE_PSI_INTERFACE - , const char *src_file, uint src_line -#endif - ) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_rwlock_locker *locker= NULL; - PSI_rwlock_locker_state state; - if (likely(PSI_server && that->m_psi)) - { - locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, - PSI_RWLOCK_READLOCK); - if (likely(locker != NULL)) - PSI_server->start_rwlock_rdwait(locker, src_file, src_line); - } -#endif - result= rw_rdlock(&that->m_rwlock); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_rwlock_rdwait(locker, result); -#endif - return result; -} - -#ifndef DISABLE_MYSQL_PRLOCK_H -static inline int inline_mysql_prlock_rdlock( - mysql_prlock_t *that -#ifdef HAVE_PSI_INTERFACE - , const char *src_file, uint src_line -#endif - ) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_rwlock_locker *locker= NULL; - PSI_rwlock_locker_state state; - if (likely(PSI_server && that->m_psi)) - { - locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, - PSI_RWLOCK_READLOCK); - if (likely(locker != NULL)) - PSI_server->start_rwlock_rdwait(locker, src_file, src_line); - } -#endif - result= rw_pr_rdlock(&that->m_prlock); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_rwlock_rdwait(locker, result); -#endif - return result; -} -#endif - -static inline int inline_mysql_rwlock_wrlock( - mysql_rwlock_t *that -#ifdef HAVE_PSI_INTERFACE - , const char *src_file, uint src_line -#endif - ) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_rwlock_locker *locker= NULL; - PSI_rwlock_locker_state state; - if (likely(PSI_server && that->m_psi)) - { - locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, - PSI_RWLOCK_WRITELOCK); - if (likely(locker != NULL)) - PSI_server->start_rwlock_wrwait(locker, src_file, src_line); - } -#endif - result= rw_wrlock(&that->m_rwlock); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_rwlock_wrwait(locker, result); -#endif - return result; -} - -#ifndef DISABLE_MYSQL_PRLOCK_H -static inline int inline_mysql_prlock_wrlock( - mysql_prlock_t *that -#ifdef HAVE_PSI_INTERFACE - , const char *src_file, uint src_line -#endif - ) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_rwlock_locker *locker= NULL; - PSI_rwlock_locker_state state; - if (likely(PSI_server && that->m_psi)) - { - locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, - PSI_RWLOCK_WRITELOCK); - if (likely(locker != NULL)) - PSI_server->start_rwlock_wrwait(locker, src_file, src_line); - } -#endif - result= rw_pr_wrlock(&that->m_prlock); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_rwlock_wrwait(locker, result); -#endif - return result; -} -#endif - -static inline int inline_mysql_rwlock_tryrdlock( - mysql_rwlock_t *that -#ifdef HAVE_PSI_INTERFACE - , const char *src_file, uint src_line -#endif - ) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_rwlock_locker *locker= NULL; - PSI_rwlock_locker_state state; - if (likely(PSI_server && that->m_psi)) - { - locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, - PSI_RWLOCK_TRYREADLOCK); - if (likely(locker != NULL)) - PSI_server->start_rwlock_rdwait(locker, src_file, src_line); - } -#endif - result= rw_tryrdlock(&that->m_rwlock); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_rwlock_rdwait(locker, result); -#endif - return result; -} - -static inline int inline_mysql_rwlock_trywrlock( - mysql_rwlock_t *that -#ifdef HAVE_PSI_INTERFACE - , const char *src_file, uint src_line -#endif - ) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_rwlock_locker *locker= NULL; - PSI_rwlock_locker_state state; - if (likely(PSI_server && that->m_psi)) - { - locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, - PSI_RWLOCK_TRYWRITELOCK); - if (likely(locker != NULL)) - PSI_server->start_rwlock_wrwait(locker, src_file, src_line); - } -#endif - result= rw_trywrlock(&that->m_rwlock); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_rwlock_wrwait(locker, result); -#endif - return result; -} - -static inline int inline_mysql_rwlock_unlock( - mysql_rwlock_t *that) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - if (likely(PSI_server && that->m_psi)) - PSI_server->unlock_rwlock(that->m_psi); -#endif - result= rw_unlock(&that->m_rwlock); - return result; -} - -#ifndef DISABLE_MYSQL_PRLOCK_H -static inline int inline_mysql_prlock_unlock( - mysql_prlock_t *that) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - if (likely(PSI_server && that->m_psi)) - PSI_server->unlock_rwlock(that->m_psi); -#endif - result= rw_pr_unlock(&that->m_prlock); - return result; -} -#endif - -static inline int inline_mysql_cond_init( -#ifdef HAVE_PSI_INTERFACE - PSI_cond_key key, -#endif - mysql_cond_t *that, - const pthread_condattr_t *attr) -{ -#ifdef HAVE_PSI_INTERFACE - that->m_psi= (PSI_server ? PSI_server->init_cond(key, &that->m_cond) - : NULL); -#else - that->m_psi= NULL; -#endif - return pthread_cond_init(&that->m_cond, attr); -} - -static inline int inline_mysql_cond_destroy( - mysql_cond_t *that) -{ -#ifdef HAVE_PSI_INTERFACE - if (likely(PSI_server && that->m_psi)) - { - PSI_server->destroy_cond(that->m_psi); - that->m_psi= NULL; - } -#endif - return pthread_cond_destroy(&that->m_cond); -} - -static inline int inline_mysql_cond_wait( - mysql_cond_t *that, - mysql_mutex_t *mutex -#ifdef HAVE_PSI_INTERFACE - , const char *src_file, uint src_line -#endif - ) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_cond_locker *locker= NULL; - PSI_cond_locker_state state; - if (likely(PSI_server && that->m_psi)) - { - locker= PSI_server->get_thread_cond_locker(&state, that->m_psi, mutex->m_psi, - PSI_COND_WAIT); - if (likely(locker != NULL)) - PSI_server->start_cond_wait(locker, src_file, src_line); - } -#endif - result= pthread_cond_wait(&that->m_cond, &mutex->m_mutex); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_cond_wait(locker, result); -#endif - return result; -} - -static inline int inline_mysql_cond_timedwait( - mysql_cond_t *that, - mysql_mutex_t *mutex, - struct timespec *abstime -#ifdef HAVE_PSI_INTERFACE - , const char *src_file, uint src_line -#endif - ) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_cond_locker *locker= NULL; - PSI_cond_locker_state state; - if (likely(PSI_server && that->m_psi)) - { - locker= PSI_server->get_thread_cond_locker(&state, that->m_psi, mutex->m_psi, - PSI_COND_TIMEDWAIT); - if (likely(locker != NULL)) - PSI_server->start_cond_wait(locker, src_file, src_line); - } -#endif - result= pthread_cond_timedwait(&that->m_cond, &mutex->m_mutex, abstime); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_cond_wait(locker, result); -#endif - return result; -} - -static inline int inline_mysql_cond_signal( - mysql_cond_t *that) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - if (likely(PSI_server && that->m_psi)) - PSI_server->signal_cond(that->m_psi); -#endif - result= pthread_cond_signal(&that->m_cond); - return result; -} - -static inline int inline_mysql_cond_broadcast( - mysql_cond_t *that) -{ - int result; -#ifdef HAVE_PSI_INTERFACE - if (likely(PSI_server && that->m_psi)) - PSI_server->broadcast_cond(that->m_psi); -#endif - result= pthread_cond_broadcast(&that->m_cond); - return result; -} - -#ifdef HAVE_PSI_INTERFACE -static inline int inline_mysql_thread_create( - PSI_thread_key key, - pthread_t *thread, const pthread_attr_t *attr, - void *(*start_routine)(void*), void *arg) -{ - int result; - if (likely(PSI_server != NULL)) - result= PSI_server->spawn_thread(key, thread, attr, start_routine, arg); - else - result= pthread_create(thread, attr, start_routine, arg); - return result; -} - -static inline void inline_mysql_thread_set_psi_id(ulong id) -{ - if (likely(PSI_server != NULL)) - { - struct PSI_thread *psi= PSI_server->get_thread(); - if (likely(psi != NULL)) - PSI_server->set_thread_id(psi, id); - } -} -#endif - -#endif /* DISABLE_MYSQL_THREAD_H */ - -/** @} (end of group Thread_instrumentation) */ - -#endif - diff --git a/deps/mysqllite/include/mysql/psi/psi.h b/deps/mysqllite/include/mysql/psi/psi.h deleted file mode 100644 index 562e4a80fd5860..00000000000000 --- a/deps/mysqllite/include/mysql/psi/psi.h +++ /dev/null @@ -1,1312 +0,0 @@ -/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ - -#ifndef MYSQL_PERFORMANCE_SCHEMA_INTERFACE_H -#define MYSQL_PERFORMANCE_SCHEMA_INTERFACE_H - -#ifndef _global_h -/* - Make sure a .c or .cc file contains an include to my_global.h first. - When this include is missing, all the #ifdef HAVE_XXX have no effect, - and the resulting binary won't build, or won't link, - or will crash at runtime - since various structures will have different binary definitions. -*/ -#error "You must include my_global.h in the code for the build to be correct." -#endif - -C_MODE_START - -/** - @file mysql/psi/psi.h - Performance schema instrumentation interface. - - @defgroup Instrumentation_interface Instrumentation Interface - @ingroup Performance_schema - @{ -*/ - -/** - Interface for an instrumented mutex. - This is an opaque structure. -*/ -struct PSI_mutex; - -/** - Interface for an instrumented rwlock. - This is an opaque structure. -*/ -struct PSI_rwlock; - -/** - Interface for an instrumented condition. - This is an opaque structure. -*/ -struct PSI_cond; - -/** - Interface for an instrumented table share. - This is an opaque structure. -*/ -struct PSI_table_share; - -/** - Interface for an instrumented table handle. - This is an opaque structure. -*/ -struct PSI_table; - -/** - Interface for an instrumented thread. - This is an opaque structure. -*/ -struct PSI_thread; - -/** - Interface for an instrumented file handle. - This is an opaque structure. -*/ -struct PSI_file; - -/** Entry point for the performance schema interface. */ -struct PSI_bootstrap -{ - /** - ABI interface finder. - Calling this method with an interface version number returns either - an instance of the ABI for this version, or NULL. - @param version the interface version number to find - @return a versioned interface (PSI_v1, PSI_v2 or PSI) - @sa PSI_VERSION_1 - @sa PSI_v1 - @sa PSI_VERSION_2 - @sa PSI_v2 - @sa PSI_CURRENT_VERSION - @sa PSI - */ - void* (*get_interface)(int version); -}; - -#ifdef HAVE_PSI_INTERFACE - -/** - @def PSI_VERSION_1 - Performance Schema Interface number for version 1. - This version is supported. -*/ -#define PSI_VERSION_1 1 - -/** - @def PSI_VERSION_2 - Performance Schema Interface number for version 2. - This version is not implemented, it's a placeholder. -*/ -#define PSI_VERSION_2 2 - -/** - @def PSI_CURRENT_VERSION - Performance Schema Interface number for the most recent version. - The most current version is @c PSI_VERSION_1 -*/ -#define PSI_CURRENT_VERSION 1 - -#ifndef USE_PSI_2 -#ifndef USE_PSI_1 -#define USE_PSI_1 -#endif -#endif - -/** - Interface for an instrumented mutex operation. - This is an opaque structure. -*/ -struct PSI_mutex_locker; - -/** - Interface for an instrumented rwlock operation. - This is an opaque structure. -*/ - -struct PSI_rwlock_locker; -/** - Interface for an instrumented condition operation. - This is an opaque structure. -*/ - -struct PSI_cond_locker; - -/** - Interface for an instrumented file operation. - This is an opaque structure. -*/ -struct PSI_file_locker; - -/** Operation performed on an instrumented mutex. */ -enum PSI_mutex_operation -{ - /** Lock. */ - PSI_MUTEX_LOCK= 0, - /** Lock attempt. */ - PSI_MUTEX_TRYLOCK= 1 -}; - -/** Operation performed on an instrumented rwlock. */ -enum PSI_rwlock_operation -{ - /** Read lock. */ - PSI_RWLOCK_READLOCK= 0, - /** Write lock. */ - PSI_RWLOCK_WRITELOCK= 1, - /** Read lock attempt. */ - PSI_RWLOCK_TRYREADLOCK= 2, - /** Write lock attempt. */ - PSI_RWLOCK_TRYWRITELOCK= 3 -}; - -/** Operation performed on an instrumented condition. */ -enum PSI_cond_operation -{ - /** Wait. */ - PSI_COND_WAIT= 0, - /** Wait, with timeout. */ - PSI_COND_TIMEDWAIT= 1 -}; - -/** Operation performed on an instrumented file. */ -enum PSI_file_operation -{ - /** File creation, as in @c create(). */ - PSI_FILE_CREATE= 0, - /** Temporary file creation, as in @c create_temp_file(). */ - PSI_FILE_CREATE_TMP= 1, - /** File open, as in @c open(). */ - PSI_FILE_OPEN= 2, - /** File open, as in @c fopen(). */ - PSI_FILE_STREAM_OPEN= 3, - /** File close, as in @c close(). */ - PSI_FILE_CLOSE= 4, - /** File close, as in @c fclose(). */ - PSI_FILE_STREAM_CLOSE= 5, - /** - Generic file read, such as @c fgets(), @c fgetc(), @c fread(), @c read(), - @c pread(). - */ - PSI_FILE_READ= 6, - /** - Generic file write, such as @c fputs(), @c fputc(), @c fprintf(), - @c vfprintf(), @c fwrite(), @c write(), @c pwrite(). - */ - PSI_FILE_WRITE= 7, - /** Generic file seek, such as @c fseek() or @c seek(). */ - PSI_FILE_SEEK= 8, - /** Generic file tell, such as @c ftell() or @c tell(). */ - PSI_FILE_TELL= 9, - /** File flush, as in @c fflush(). */ - PSI_FILE_FLUSH= 10, - /** File stat, as in @c stat(). */ - PSI_FILE_STAT= 11, - /** File stat, as in @c fstat(). */ - PSI_FILE_FSTAT= 12, - /** File chsize, as in @c my_chsize(). */ - PSI_FILE_CHSIZE= 13, - /** File delete, such as @c my_delete() or @c my_delete_with_symlink(). */ - PSI_FILE_DELETE= 14, - /** File rename, such as @c my_rename() or @c my_rename_with_symlink(). */ - PSI_FILE_RENAME= 15, - /** File sync, as in @c fsync() or @c my_sync(). */ - PSI_FILE_SYNC= 16 -}; - -/** - Interface for an instrumented table operation. - This is an opaque structure. -*/ -struct PSI_table_locker; - -/** - Instrumented mutex key. - To instrument a mutex, a mutex key must be obtained using @c register_mutex. - Using a zero key always disable the instrumentation. -*/ -typedef unsigned int PSI_mutex_key; - -/** - Instrumented rwlock key. - To instrument a rwlock, a rwlock key must be obtained - using @c register_rwlock. - Using a zero key always disable the instrumentation. -*/ -typedef unsigned int PSI_rwlock_key; - -/** - Instrumented cond key. - To instrument a condition, a condition key must be obtained - using @c register_cond. - Using a zero key always disable the instrumentation. -*/ -typedef unsigned int PSI_cond_key; - -/** - Instrumented thread key. - To instrument a thread, a thread key must be obtained - using @c register_thread. - Using a zero key always disable the instrumentation. -*/ -typedef unsigned int PSI_thread_key; - -/** - Instrumented file key. - To instrument a file, a file key must be obtained using @c register_file. - Using a zero key always disable the instrumentation. -*/ -typedef unsigned int PSI_file_key; - -/** - @def USE_PSI_1 - Define USE_PSI_1 to use the interface version 1. -*/ - -/** - @def USE_PSI_2 - Define USE_PSI_2 to use the interface version 2. -*/ - -/** - @def HAVE_PSI_1 - Define HAVE_PSI_1 if the interface version 1 needs to be compiled in. -*/ - -/** - @def HAVE_PSI_2 - Define HAVE_PSI_2 if the interface version 2 needs to be compiled in. -*/ - -/** - Global flag. - This flag indicate that an instrumentation point is a global variable, - or a singleton. -*/ -#define PSI_FLAG_GLOBAL (1 << 0) - -#ifdef USE_PSI_1 -#define HAVE_PSI_1 -#endif - -#ifdef HAVE_PSI_1 - -/** - @defgroup Group_PSI_v1 Application Binary Interface, version 1 - @ingroup Instrumentation_interface - @{ -*/ - -/** - Mutex information. - @since PSI_VERSION_1 - This structure is used to register an instrumented mutex. -*/ -struct PSI_mutex_info_v1 -{ - /** - Pointer to the key assigned to the registered mutex. - */ - PSI_mutex_key *m_key; - /** - The name of the mutex to register. - */ - const char *m_name; - /** - The flags of the mutex to register. - @sa PSI_FLAG_GLOBAL - */ - int m_flags; -}; - -/** - Rwlock information. - @since PSI_VERSION_1 - This structure is used to register an instrumented rwlock. -*/ -struct PSI_rwlock_info_v1 -{ - /** - Pointer to the key assigned to the registered rwlock. - */ - PSI_rwlock_key *m_key; - /** - The name of the rwlock to register. - */ - const char *m_name; - /** - The flags of the rwlock to register. - @sa PSI_FLAG_GLOBAL - */ - int m_flags; -}; - -/** - Condition information. - @since PSI_VERSION_1 - This structure is used to register an instrumented cond. -*/ -struct PSI_cond_info_v1 -{ - /** - Pointer to the key assigned to the registered cond. - */ - PSI_cond_key *m_key; - /** - The name of the cond to register. - */ - const char *m_name; - /** - The flags of the cond to register. - @sa PSI_FLAG_GLOBAL - */ - int m_flags; -}; - -/** - Thread instrument information. - @since PSI_VERSION_1 - This structure is used to register an instrumented thread. -*/ -struct PSI_thread_info_v1 -{ - /** - Pointer to the key assigned to the registered thread. - */ - PSI_thread_key *m_key; - /** - The name of the thread instrument to register. - */ - const char *m_name; - /** - The flags of the thread to register. - @sa PSI_FLAG_GLOBAL - */ - int m_flags; -}; - -/** - File instrument information. - @since PSI_VERSION_1 - This structure is used to register an instrumented file. -*/ -struct PSI_file_info_v1 -{ - /** - Pointer to the key assigned to the registered file. - */ - PSI_file_key *m_key; - /** - The name of the file instrument to register. - */ - const char *m_name; - /** - The flags of the file instrument to register. - @sa PSI_FLAG_GLOBAL - */ - int m_flags; -}; - -/** - State data storage for @c get_thread_mutex_locker_v1_t. - This structure provide temporary storage to a mutex locker. - The content of this structure is considered opaque, - the fields are only hints of what an implementation - of the psi interface can use. - This memory is provided by the instrumented code for performance reasons. - @sa get_thread_mutex_locker_v1_t -*/ -struct PSI_mutex_locker_state_v1 -{ - /** Internal state. */ - uint m_flags; - /** Current mutex. */ - struct PSI_mutex *m_mutex; - /** Current thread. */ - struct PSI_thread *m_thread; - /** Timer start. */ - ulonglong m_timer_start; - /** Timer function. */ - ulonglong (*m_timer)(void); - /** Current operation. */ - enum PSI_mutex_operation m_operation; - /** Source file. */ - const char* m_src_file; - /** Source line number. */ - int m_src_line; - /** Internal data. */ - void *m_wait; -}; - -/** - State data storage for @c get_thread_rwlock_locker_v1_t. - This structure provide temporary storage to a rwlock locker. - The content of this structure is considered opaque, - the fields are only hints of what an implementation - of the psi interface can use. - This memory is provided by the instrumented code for performance reasons. - @sa get_thread_rwlock_locker_v1_t -*/ -struct PSI_rwlock_locker_state_v1 -{ - /** Internal state. */ - uint m_flags; - /** Current rwlock. */ - struct PSI_rwlock *m_rwlock; - /** Current thread. */ - struct PSI_thread *m_thread; - /** Timer start. */ - ulonglong m_timer_start; - /** Timer function. */ - ulonglong (*m_timer)(void); - /** Current operation. */ - enum PSI_rwlock_operation m_operation; - /** Source file. */ - const char* m_src_file; - /** Source line number. */ - int m_src_line; - /** Internal data. */ - void *m_wait; -}; - -/** - State data storage for @c get_thread_cond_locker_v1_t. - This structure provide temporary storage to a condition locker. - The content of this structure is considered opaque, - the fields are only hints of what an implementation - of the psi interface can use. - This memory is provided by the instrumented code for performance reasons. - @sa get_thread_cond_locker_v1_t -*/ -struct PSI_cond_locker_state_v1 -{ - /** Internal state. */ - uint m_flags; - /** Current condition. */ - struct PSI_cond *m_cond; - /** Current mutex. */ - struct PSI_mutex *m_mutex; - /** Current thread. */ - struct PSI_thread *m_thread; - /** Timer start. */ - ulonglong m_timer_start; - /** Timer function. */ - ulonglong (*m_timer)(void); - /** Current operation. */ - enum PSI_cond_operation m_operation; - /** Source file. */ - const char* m_src_file; - /** Source line number. */ - int m_src_line; - /** Internal data. */ - void *m_wait; -}; - -/** - State data storage for @c get_thread_file_name_locker_v1_t. - This structure provide temporary storage to a file locker. - The content of this structure is considered opaque, - the fields are only hints of what an implementation - of the psi interface can use. - This memory is provided by the instrumented code for performance reasons. - @sa get_thread_file_name_locker_v1_t - @sa get_thread_file_stream_locker_v1_t - @sa get_thread_file_descriptor_locker_v1_t -*/ -struct PSI_file_locker_state_v1 -{ - /** Internal state. */ - uint m_flags; - /** Current file. */ - struct PSI_file *m_file; - /** Current thread. */ - struct PSI_thread *m_thread; - /** Operation number of bytes. */ - size_t m_number_of_bytes; - /** Timer start. */ - ulonglong m_timer_start; - /** Timer function. */ - ulonglong (*m_timer)(void); - /** Current operation. */ - enum PSI_file_operation m_operation; - /** Source file. */ - const char* m_src_file; - /** Source line number. */ - int m_src_line; - /** Internal data. */ - void *m_wait; -}; - -/** - State data storage for @c get_thread_table_locker_v1_t. - This structure provide temporary storage to a table locker. - The content of this structure is considered opaque, - the fields are only hints of what an implementation - of the psi interface can use. - This memory is provided by the instrumented code for performance reasons. - @sa get_thread_table_locker_v1_t -*/ -struct PSI_table_locker_state_v1 -{ - /** Internal state. */ - uint m_flags; - /** Current table handle. */ - struct PSI_table *m_table; - /** Current table share. */ - struct PSI_table_share *m_table_share; - /** Instrumentation class. */ - void *m_class; - /** Current thread. */ - struct PSI_thread *m_thread; - /** Timer start. */ - ulonglong m_timer_start; - /** Timer function. */ - ulonglong (*m_timer)(void); - /* Current operation (waiting for WL#4895). */ - /* enum PSI_table_operation m_operation; */ - /** Current table io index. */ - uint m_index; - /** Current table lock index. */ - uint m_lock_index; - /** Source file. */ - const char* m_src_file; - /** Source line number. */ - int m_src_line; - /** Internal data. */ - void *m_wait; -}; - -/* Using typedef to make reuse between PSI_v1 and PSI_v2 easier later. */ - -/** - Mutex registration API. - @param category a category name (typically a plugin name) - @param info an array of mutex info to register - @param count the size of the info array -*/ -typedef void (*register_mutex_v1_t) - (const char *category, struct PSI_mutex_info_v1 *info, int count); - -/** - Rwlock registration API. - @param category a category name (typically a plugin name) - @param info an array of rwlock info to register - @param count the size of the info array -*/ -typedef void (*register_rwlock_v1_t) - (const char *category, struct PSI_rwlock_info_v1 *info, int count); - -/** - Cond registration API. - @param category a category name (typically a plugin name) - @param info an array of cond info to register - @param count the size of the info array -*/ -typedef void (*register_cond_v1_t) - (const char *category, struct PSI_cond_info_v1 *info, int count); - -/** - Thread registration API. - @param category a category name (typically a plugin name) - @param info an array of thread info to register - @param count the size of the info array -*/ -typedef void (*register_thread_v1_t) - (const char *category, struct PSI_thread_info_v1 *info, int count); - -/** - File registration API. - @param category a category name (typically a plugin name) - @param info an array of file info to register - @param count the size of the info array -*/ -typedef void (*register_file_v1_t) - (const char *category, struct PSI_file_info_v1 *info, int count); - -/** - Mutex instrumentation initialisation API. - @param key the registered mutex key - @param identity the address of the mutex itself - @return an instrumented mutex -*/ -typedef struct PSI_mutex* (*init_mutex_v1_t) - (PSI_mutex_key key, const void *identity); - -/** - Mutex instrumentation destruction API. - @param mutex the mutex to destroy -*/ -typedef void (*destroy_mutex_v1_t)(struct PSI_mutex *mutex); - -/** - Rwlock instrumentation initialisation API. - @param key the registered rwlock key - @param identity the address of the rwlock itself - @return an instrumented rwlock -*/ -typedef struct PSI_rwlock* (*init_rwlock_v1_t) - (PSI_rwlock_key key, const void *identity); - -/** - Rwlock instrumentation destruction API. - @param rwlock the rwlock to destroy -*/ -typedef void (*destroy_rwlock_v1_t)(struct PSI_rwlock *rwlock); - -/** - Cond instrumentation initialisation API. - @param key the registered key - @param identity the address of the rwlock itself - @return an instrumented cond -*/ -typedef struct PSI_cond* (*init_cond_v1_t) - (PSI_cond_key key, const void *identity); - -/** - Cond instrumentation destruction API. - @param cond the rcond to destroy -*/ -typedef void (*destroy_cond_v1_t)(struct PSI_cond *cond); - -/** - Acquire a table info by name. - @param schema_name name of the table schema - @param schema_name_length length of schema_name - @param table_name name of the table - @param table_name_length length of table_name - @param identity table identity pointer, typically the table share - @return a table info, or NULL if the table is not instrumented -*/ -typedef struct PSI_table_share* (*get_table_share_v1_t) - (const char *schema_name, int schema_name_length, const char *table_name, - int table_name_length, const void *identity); - -/** - Release a table share. - @param info the table share to release -*/ -typedef void (*release_table_share_v1_t)(struct PSI_table_share *share); - -/** - Open an instrumentation table handle. - @param share the table to open - @param identity table handle identity - @return a table handle, or NULL -*/ -typedef struct PSI_table* (*open_table_v1_t) - (struct PSI_table_share *share, const void *identity); - -/** - Close an instrumentation table handle. - Note that the table handle is invalid after this call. - @param table the table handle to close -*/ -typedef void (*close_table_v1_t)(struct PSI_table *table); - -/** - Create a file instrumentation for a created file. - This method does not create the file itself, but is used to notify the - instrumentation interface that a file was just created. - @param key the file instrumentation key for this file - @param name the file name - @param file the file handle -*/ -typedef void (*create_file_v1_t)(PSI_file_key key, const char *name, - File file); - -/** - Spawn a thread. - This method creates a new thread, with instrumentation. - @param key the instrumentation key for this thread - @param thread the resulting thread - @param attr the thread attributes - @param start_routine the thread start routine - @param arg the thread start routine argument -*/ -typedef int (*spawn_thread_v1_t)(PSI_thread_key key, - pthread_t *thread, - const pthread_attr_t *attr, - void *(*start_routine)(void*), void *arg); - -/** - Create instrumentation for a thread. - @param key the registered key - @param identity an address typical of the thread - @return an instrumented thread -*/ -typedef struct PSI_thread* (*new_thread_v1_t) - (PSI_thread_key key, const void *identity, ulong thread_id); - -/** - Assign an id to an instrumented thread. - @param thread the instrumented thread - @param id the id to assign -*/ -typedef void (*set_thread_id_v1_t)(struct PSI_thread *thread, - unsigned long id); - -/** - Get the instrumentation for the running thread. - For this function to return a result, - the thread instrumentation must have been attached to the - running thread using @c set_thread() - @return the instrumentation for the running thread -*/ -typedef struct PSI_thread* (*get_thread_v1_t)(void); - -/** - Attach a thread instrumentation to the running thread. - In case of thread pools, this method should be called when - a worker thread picks a work item and runs it. - Also, this method should be called if the instrumented code does not - keep the pointer returned by @c new_thread() and relies on @c get_thread() - instead. - @param thread the thread instrumentation -*/ -typedef void (*set_thread_v1_t)(struct PSI_thread *thread); - -/** Delete the current thread instrumentation. */ -typedef void (*delete_current_thread_v1_t)(void); - -/** Delete a thread instrumentation. */ -typedef void (*delete_thread_v1_t)(struct PSI_thread *thread); - -/** - Get a mutex instrumentation locker. - @param state data storage for the locker - @param mutex the instrumented mutex to lock - @return a mutex locker, or NULL -*/ -typedef struct PSI_mutex_locker* (*get_thread_mutex_locker_v1_t) - (struct PSI_mutex_locker_state_v1 *state, - struct PSI_mutex *mutex, - enum PSI_mutex_operation op); - -/** - Get a rwlock instrumentation locker. - @param state data storage for the locker - @param rwlock the instrumented rwlock to lock - @return a rwlock locker, or NULL -*/ -typedef struct PSI_rwlock_locker* (*get_thread_rwlock_locker_v1_t) - (struct PSI_rwlock_locker_state_v1 *state, - struct PSI_rwlock *rwlock, - enum PSI_rwlock_operation op); - -/** - Get a cond instrumentation locker. - @param state data storage for the locker - @param cond the instrumented condition to wait on - @param mutex the instrumented mutex associated with the condition - @return a condition locker, or NULL -*/ -typedef struct PSI_cond_locker* (*get_thread_cond_locker_v1_t) - (struct PSI_cond_locker_state_v1 *state, - struct PSI_cond *cond, struct PSI_mutex *mutex, - enum PSI_cond_operation op); - -/** - Get a table instrumentation locker. - @param state data storage for the locker - @param table the instrumented table to lock - @return a table locker, or NULL -*/ -typedef struct PSI_table_locker* (*get_thread_table_locker_v1_t) - (struct PSI_table_locker_state_v1 *state, - struct PSI_table *table); - -/** - Get a file instrumentation locker, for opening or creating a file. - @param state data storage for the locker - @param key the file instrumentation key - @param op the operation to perform - @param name the file name - @param identity a pointer representative of this file. - @return a file locker, or NULL -*/ -typedef struct PSI_file_locker* (*get_thread_file_name_locker_v1_t) - (struct PSI_file_locker_state_v1 *state, - PSI_file_key key, enum PSI_file_operation op, const char *name, - const void *identity); - -/** - Get a file stream instrumentation locker. - @param state data storage for the locker - @param file the file stream to access - @param op the operation to perform - @return a file locker, or NULL -*/ -typedef struct PSI_file_locker* (*get_thread_file_stream_locker_v1_t) - (struct PSI_file_locker_state_v1 *state, - struct PSI_file *file, enum PSI_file_operation op); - -/** - Get a file instrumentation locker. - @param state data storage for the locker - @param file the file descriptor to access - @param op the operation to perform - @return a file locker, or NULL -*/ -typedef struct PSI_file_locker* (*get_thread_file_descriptor_locker_v1_t) - (struct PSI_file_locker_state_v1 *state, - File file, enum PSI_file_operation op); - -/** - Record a mutex instrumentation unlock event. - @param mutex the mutex instrumentation -*/ -typedef void (*unlock_mutex_v1_t) - (struct PSI_mutex *mutex); - -/** - Record a rwlock instrumentation unlock event. - @param rwlock the rwlock instrumentation -*/ -typedef void (*unlock_rwlock_v1_t) - (struct PSI_rwlock *rwlock); - -/** - Record a condition instrumentation signal event. - @param cond the cond instrumentation -*/ -typedef void (*signal_cond_v1_t) - (struct PSI_cond *cond); - -/** - Record a condition instrumentation broadcast event. - @param cond the cond instrumentation -*/ -typedef void (*broadcast_cond_v1_t) - (struct PSI_cond *cond); - -/** - Record a mutex instrumentation wait start event. - @param locker a thread locker for the running thread -*/ -typedef void (*start_mutex_wait_v1_t) - (struct PSI_mutex_locker *locker, const char *src_file, uint src_line); - -/** - Record a mutex instrumentation wait end event. - @param locker a thread locker for the running thread - @param rc the wait operation return code -*/ -typedef void (*end_mutex_wait_v1_t) - (struct PSI_mutex_locker *locker, int rc); - -/** - Record a rwlock instrumentation read wait start event. - @param locker a thread locker for the running thread - @param must must block: 1 for lock, 0 for trylock -*/ -typedef void (*start_rwlock_rdwait_v1_t) - (struct PSI_rwlock_locker *locker, const char *src_file, uint src_line); - -/** - Record a rwlock instrumentation read wait end event. - @param locker a thread locker for the running thread - @param rc the wait operation return code -*/ -typedef void (*end_rwlock_rdwait_v1_t) - (struct PSI_rwlock_locker *locker, int rc); - -/** - Record a rwlock instrumentation write wait start event. - @param locker a thread locker for the running thread - @param must must block: 1 for lock, 0 for trylock -*/ -typedef void (*start_rwlock_wrwait_v1_t) - (struct PSI_rwlock_locker *locker, const char *src_file, uint src_line); - -/** - Record a rwlock instrumentation write wait end event. - @param locker a thread locker for the running thread - @param rc the wait operation return code -*/ -typedef void (*end_rwlock_wrwait_v1_t) - (struct PSI_rwlock_locker *locker, int rc); - -/** - Record a condition instrumentation wait start event. - @param locker a thread locker for the running thread - @param must must block: 1 for wait, 0 for timedwait -*/ -typedef void (*start_cond_wait_v1_t) - (struct PSI_cond_locker *locker, const char *src_file, uint src_line); - -/** - Record a condition instrumentation wait end event. - @param locker a thread locker for the running thread - @param rc the wait operation return code -*/ -typedef void (*end_cond_wait_v1_t) - (struct PSI_cond_locker *locker, int rc); - -/** - Record a table instrumentation wait start event. - @param locker a table locker for the running thread - @param file the source file name - @param line the source line number -*/ -typedef void (*start_table_wait_v1_t) - (struct PSI_table_locker *locker, const char *src_file, uint src_line); - -/** - Record a table instrumentation wait end event. - @param locker a table locker for the running thread -*/ -typedef void (*end_table_wait_v1_t)(struct PSI_table_locker *locker); - -/** - Start a file instrumentation open operation. - @param locker the file locker - @param op the operation to perform - @param src_file the source file name - @param src_line the source line number - @return an instrumented file handle -*/ -typedef struct PSI_file* (*start_file_open_wait_v1_t) - (struct PSI_file_locker *locker, const char *src_file, uint src_line); - -/** - End a file instrumentation open operation, for file streams. - @param locker the file locker. -*/ -typedef void (*end_file_open_wait_v1_t)(struct PSI_file_locker *locker); - -/** - End a file instrumentation open operation, for non stream files. - @param locker the file locker. - @param file the file number assigned by open() or create() for this file. -*/ -typedef void (*end_file_open_wait_and_bind_to_descriptor_v1_t) - (struct PSI_file_locker *locker, File file); - -/** - Record a file instrumentation start event. - @param locker a file locker for the running thread - @param op file operation to be performed - @param count the number of bytes requested, or 0 if not applicable - @param src_file the source file name - @param src_line the source line number -*/ -typedef void (*start_file_wait_v1_t) - (struct PSI_file_locker *locker, size_t count, - const char *src_file, uint src_line); - -/** - Record a file instrumentation end event. - Note that for file close operations, the instrumented file handle - associated with the file (which was provided to obtain a locker) - is invalid after this call. - @param locker a file locker for the running thread - @param count the number of bytes actually used in the operation, - or 0 if not applicable, or -1 if the operation failed - @sa get_thread_file_name_locker - @sa get_thread_file_stream_locker - @sa get_thread_file_descriptor_locker -*/ -typedef void (*end_file_wait_v1_t) - (struct PSI_file_locker *locker, size_t count); - -/** - Performance Schema Interface, version 1. - @since PSI_VERSION_1 -*/ -struct PSI_v1 -{ - /** @sa register_mutex_v1_t. */ - register_mutex_v1_t register_mutex; - /** @sa register_rwlock_v1_t. */ - register_rwlock_v1_t register_rwlock; - /** @sa register_cond_v1_t. */ - register_cond_v1_t register_cond; - /** @sa register_thread_v1_t. */ - register_thread_v1_t register_thread; - /** @sa register_file_v1_t. */ - register_file_v1_t register_file; - /** @sa init_mutex_v1_t. */ - init_mutex_v1_t init_mutex; - /** @sa destroy_mutex_v1_t. */ - destroy_mutex_v1_t destroy_mutex; - /** @sa init_rwlock_v1_t. */ - init_rwlock_v1_t init_rwlock; - /** @sa destroy_rwlock_v1_t. */ - destroy_rwlock_v1_t destroy_rwlock; - /** @sa init_cond_v1_t. */ - init_cond_v1_t init_cond; - /** @sa destroy_cond_v1_t. */ - destroy_cond_v1_t destroy_cond; - /** @sa get_table_share_v1_t. */ - get_table_share_v1_t get_table_share; - /** @sa release_table_share_v1_t. */ - release_table_share_v1_t release_table_share; - /** @sa open_table_v1_t. */ - open_table_v1_t open_table; - /** @sa close_table_v1_t. */ - close_table_v1_t close_table; - /** @sa create_file_v1_t. */ - create_file_v1_t create_file; - /** @sa spawn_thread_v1_t. */ - spawn_thread_v1_t spawn_thread; - /** @sa new_thread_v1_t. */ - new_thread_v1_t new_thread; - /** @sa set_thread_id_v1_t. */ - set_thread_id_v1_t set_thread_id; - /** @sa get_thread_v1_t. */ - get_thread_v1_t get_thread; - /** @sa set_thread_v1_t. */ - set_thread_v1_t set_thread; - /** @sa delete_current_thread_v1_t. */ - delete_current_thread_v1_t delete_current_thread; - /** @sa delete_thread_v1_t. */ - delete_thread_v1_t delete_thread; - /** @sa get_thread_mutex_locker_v1_t. */ - get_thread_mutex_locker_v1_t get_thread_mutex_locker; - /** @sa get_thread_rwlock_locker_v1_t. */ - get_thread_rwlock_locker_v1_t get_thread_rwlock_locker; - /** @sa get_thread_cond_locker_v1_t. */ - get_thread_cond_locker_v1_t get_thread_cond_locker; - /** @sa get_thread_table_locker_v1_t. */ - get_thread_table_locker_v1_t get_thread_table_locker; - /** @sa get_thread_file_name_locker_v1_t. */ - get_thread_file_name_locker_v1_t get_thread_file_name_locker; - /** @sa get_thread_file_stream_locker_v1_t. */ - get_thread_file_stream_locker_v1_t get_thread_file_stream_locker; - /** @sa get_thread_file_descriptor_locker_v1_t. */ - get_thread_file_descriptor_locker_v1_t get_thread_file_descriptor_locker; - /** @sa unlock_mutex_v1_t. */ - unlock_mutex_v1_t unlock_mutex; - /** @sa unlock_rwlock_v1_t. */ - unlock_rwlock_v1_t unlock_rwlock; - /** @sa signal_cond_v1_t. */ - signal_cond_v1_t signal_cond; - /** @sa broadcast_cond_v1_t. */ - broadcast_cond_v1_t broadcast_cond; - /** @sa start_mutex_wait_v1_t. */ - start_mutex_wait_v1_t start_mutex_wait; - /** @sa end_mutex_wait_v1_t. */ - end_mutex_wait_v1_t end_mutex_wait; - /** @sa start_rwlock_rdwait_v1_t. */ - start_rwlock_rdwait_v1_t start_rwlock_rdwait; - /** @sa end_rwlock_rdwait_v1_t. */ - end_rwlock_rdwait_v1_t end_rwlock_rdwait; - /** @sa start_rwlock_wrwait_v1_t. */ - start_rwlock_wrwait_v1_t start_rwlock_wrwait; - /** @sa end_rwlock_wrwait_v1_t. */ - end_rwlock_wrwait_v1_t end_rwlock_wrwait; - /** @sa start_cond_wait_v1_t. */ - start_cond_wait_v1_t start_cond_wait; - /** @sa end_cond_wait_v1_t. */ - end_cond_wait_v1_t end_cond_wait; - /** @sa start_table_wait_v1_t. */ - start_table_wait_v1_t start_table_wait; - /** @sa end_table_wait_v1_t. */ - end_table_wait_v1_t end_table_wait; - /** @sa start_file_open_wait_v1_t. */ - start_file_open_wait_v1_t start_file_open_wait; - /** @sa end_file_open_wait_v1_t. */ - end_file_open_wait_v1_t end_file_open_wait; - /** @sa end_file_open_wait_and_bind_to_descriptor_v1_t. */ - end_file_open_wait_and_bind_to_descriptor_v1_t - end_file_open_wait_and_bind_to_descriptor; - /** @sa start_file_wait_v1_t. */ - start_file_wait_v1_t start_file_wait; - /** @sa end_file_wait_v1_t. */ - end_file_wait_v1_t end_file_wait; -}; - -/** @} (end of group Group_PSI_v1) */ - -#endif /* HAVE_PSI_1 */ - -#ifdef USE_PSI_2 -#define HAVE_PSI_2 -#endif - -#ifdef HAVE_PSI_2 - -/** - @defgroup Group_PSI_v2 Application Binary Interface, version 2 - @ingroup Instrumentation_interface - @{ -*/ - -/** - Performance Schema Interface, version 2. - This is a placeholder, this interface is not defined yet. - @since PSI_VERSION_2 -*/ -struct PSI_v2 -{ - /** Placeholder */ - int placeholder; - /* ... extended interface ... */ -}; - -/** Placeholder */ -struct PSI_mutex_info_v2 -{ - /** Placeholder */ - int placeholder; -}; - -/** Placeholder */ -struct PSI_rwlock_info_v2 -{ - /** Placeholder */ - int placeholder; -}; - -/** Placeholder */ -struct PSI_cond_info_v2 -{ - /** Placeholder */ - int placeholder; -}; - -/** Placeholder */ -struct PSI_thread_info_v2 -{ - /** Placeholder */ - int placeholder; -}; - -/** Placeholder */ -struct PSI_file_info_v2 -{ - /** Placeholder */ - int placeholder; -}; - -struct PSI_mutex_locker_state_v2 -{ - /** Placeholder */ - int placeholder; -}; - -struct PSI_rwlock_locker_state_v2 -{ - /** Placeholder */ - int placeholder; -}; - -struct PSI_cond_locker_state_v2 -{ - /** Placeholder */ - int placeholder; -}; - -struct PSI_file_locker_state_v2 -{ - /** Placeholder */ - int placeholder; -}; - -struct PSI_table_locker_state_v2 -{ - /** Placeholder */ - int placeholder; -}; - -/** @} (end of group Group_PSI_v2) */ - -#endif /* HAVE_PSI_2 */ - -/** - @typedef PSI - The instrumentation interface for the current version. - @sa PSI_CURRENT_VERSION -*/ - -/** - @typedef PSI_mutex_info - The mutex information structure for the current version. -*/ - -/** - @typedef PSI_rwlock_info - The rwlock information structure for the current version. -*/ - -/** - @typedef PSI_cond_info - The cond information structure for the current version. -*/ - -/** - @typedef PSI_thread_info - The thread information structure for the current version. -*/ - -/** - @typedef PSI_file_info - The file information structure for the current version. -*/ - -/* Export the required version */ -#ifdef USE_PSI_1 -typedef struct PSI_v1 PSI; -typedef struct PSI_mutex_info_v1 PSI_mutex_info; -typedef struct PSI_rwlock_info_v1 PSI_rwlock_info; -typedef struct PSI_cond_info_v1 PSI_cond_info; -typedef struct PSI_thread_info_v1 PSI_thread_info; -typedef struct PSI_file_info_v1 PSI_file_info; -typedef struct PSI_mutex_locker_state_v1 PSI_mutex_locker_state; -typedef struct PSI_rwlock_locker_state_v1 PSI_rwlock_locker_state; -typedef struct PSI_cond_locker_state_v1 PSI_cond_locker_state; -typedef struct PSI_file_locker_state_v1 PSI_file_locker_state; -typedef struct PSI_table_locker_state_v1 PSI_table_locker_state; -#endif - -#ifdef USE_PSI_2 -typedef struct PSI_v2 PSI; -typedef struct PSI_mutex_info_v2 PSI_mutex_info; -typedef struct PSI_rwlock_info_v2 PSI_rwlock_info; -typedef struct PSI_cond_info_v2 PSI_cond_info; -typedef struct PSI_thread_info_v2 PSI_thread_info; -typedef struct PSI_file_info_v2 PSI_file_info; -typedef struct PSI_mutex_locker_state_v2 PSI_mutex_locker_state; -typedef struct PSI_rwlock_locker_state_v2 PSI_rwlock_locker_state; -typedef struct PSI_cond_locker_state_v2 PSI_cond_locker_state; -typedef struct PSI_file_locker_state_v2 PSI_file_locker_state; -typedef struct PSI_table_locker_state_v2 PSI_table_locker_state; -#endif - -#else /* HAVE_PSI_INTERFACE */ - -/** - Dummy structure, used to declare PSI_server when no instrumentation - is available. - The content does not matter, since PSI_server will be NULL. -*/ -struct PSI_none -{ - int opaque; -}; -typedef struct PSI_none PSI; - -#endif /* HAVE_PSI_INTERFACE */ - -extern MYSQL_PLUGIN_IMPORT PSI *PSI_server; - -/** @} */ - -C_MODE_END -#endif /* MYSQL_PERFORMANCE_SCHEMA_INTERFACE_H */ - diff --git a/deps/mysqllite/include/mysql/psi/psi_abi_v1.h b/deps/mysqllite/include/mysql/psi/psi_abi_v1.h deleted file mode 100644 index 0f62291696ffba..00000000000000 --- a/deps/mysqllite/include/mysql/psi/psi_abi_v1.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ - -/** - @file mysql/psi/psi_abi_v1.h - ABI check for mysql/psi/psi.h, when using PSI_VERSION_1. - This file is only used to automate detection of changes between versions. - Do not include this file, include mysql/psi/psi.h instead. -*/ -#define USE_PSI_1 -#define HAVE_PSI_INTERFACE -#define _global_h -#include "mysql/psi/psi.h" - diff --git a/deps/mysqllite/include/mysql/psi/psi_abi_v2.h b/deps/mysqllite/include/mysql/psi/psi_abi_v2.h deleted file mode 100644 index 08bca609b41975..00000000000000 --- a/deps/mysqllite/include/mysql/psi/psi_abi_v2.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ - -/** - @file mysql/psi/psi_abi_v1.h - ABI check for mysql/psi/psi.h, when using PSI_VERSION_2. - This file is only used to automate detection of changes between versions. - Do not include this file, include mysql/psi/psi.h instead. -*/ -#define USE_PSI_2 -#define HAVE_PSI_INTERFACE -#define _global_h -#include "mysql/psi/psi.h" - diff --git a/deps/mysqllite/include/mysql/service_my_snprintf.h b/deps/mysqllite/include/mysql/service_my_snprintf.h deleted file mode 100644 index f6b4aa39dc5331..00000000000000 --- a/deps/mysqllite/include/mysql/service_my_snprintf.h +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef MYSQL_SERVICE_MY_SNPRINTF_INCLUDED -/* Copyright (C) 2009 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/** - @file - my_snprintf service - - Portable and limited vsnprintf() implementation. - - This is a portable, limited vsnprintf() implementation, with some - extra features. "Portable" means that it'll produce identical result - on all platforms (for example, on Windows and Linux system printf %e - formats the exponent differently, on different systems %p either - prints leading 0x or not, %s may accept null pointer or crash on - it). "Limited" means that it does not support all the C89 features. - But it supports few extensions, not in any standard. - - my_vsnprintf(to, n, fmt, ap) - - @param[out] to A buffer to store the result in - @param[in] n Store up to n-1 characters, followed by an end 0 - @param[in] fmt printf-like format string - @param[in] ap Arguments - - @return a number of bytes written to a buffer *excluding* terminating '\0' - - @post - The syntax of a format string is generally the same: - % - where everithing but the format is optional. - - Three one-character flags are recognized: - '0' has the standard zero-padding semantics; - '-' is parsed, but silently ignored; - '`' (backtick) is only supported for strings (%s) and means that the - string will be quoted according to MySQL identifier quoting rules. - - Both and can be specified as numbers or '*'. - - can be 'l', 'll', or 'z'. - - Supported formats are 's' (null pointer is accepted, printed as - "(null)"), 'b' (extension, see below), 'c', 'd', 'i', 'u', 'x', 'o', - 'X', 'p' (works as 0x%x). - - Standard syntax for positional arguments $n is supported. - - Extensions: - - Flag '`' (backtick): see above. - - Format 'b': binary buffer, prints exactly bytes from the - argument, without stopping at '\0'. -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef MYSQL_ABI_CHECK -#include -#include -#endif - -extern struct my_snprintf_service_st { - size_t (*my_snprintf_type)(char*, size_t, const char*, ...); - size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); -} *my_snprintf_service; - -#ifdef MYSQL_DYNAMIC_PLUGIN - -#define my_vsnprintf my_snprintf_service->my_vsnprintf_type -#define my_snprintf my_snprintf_service->my_snprintf_type - -#else - -size_t my_snprintf(char* to, size_t n, const char* fmt, ...); -size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap); - -#endif - -#ifdef __cplusplus -} -#endif - -#define MYSQL_SERVICE_MY_SNPRINTF_INCLUDED -#endif - diff --git a/deps/mysqllite/include/mysql/service_thd_alloc.h b/deps/mysqllite/include/mysql/service_thd_alloc.h deleted file mode 100644 index 7061c2bd4d5d31..00000000000000 --- a/deps/mysqllite/include/mysql/service_thd_alloc.h +++ /dev/null @@ -1,130 +0,0 @@ -#ifndef MYSQL_SERVICE_THD_ALLOC_INCLUDED -/* Copyright (C) 2009 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/** - @file - This service provdes functions to allocate memory in a connection local - memory pool. The memory allocated there will be automatically freed at the - end of the statement, don't use it for allocations that should live longer - than that. For short living allocations this is more efficient than - using my_malloc and friends, and automatic "garbage collection" allows not - to think about memory leaks. - - The pool is best for small to medium objects, don't use it for large - allocations - they are better served with my_malloc. -*/ - -#ifndef MYSQL_ABI_CHECK -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -struct st_mysql_lex_string -{ - char *str; - size_t length; -}; -typedef struct st_mysql_lex_string MYSQL_LEX_STRING; - -extern struct thd_alloc_service_st { - void *(*thd_alloc_func)(MYSQL_THD, unsigned int); - void *(*thd_calloc_func)(MYSQL_THD, unsigned int); - char *(*thd_strdup_func)(MYSQL_THD, const char *); - char *(*thd_strmake_func)(MYSQL_THD, const char *, unsigned int); - void *(*thd_memdup_func)(MYSQL_THD, const void*, unsigned int); - MYSQL_LEX_STRING *(*thd_make_lex_string_func)(MYSQL_THD, MYSQL_LEX_STRING *, - const char *, unsigned int, int); -} *thd_alloc_service; - -#ifdef MYSQL_DYNAMIC_PLUGIN - -#define thd_alloc(thd,size) (thd_alloc_service->thd_alloc_func((thd), (size))) - -#define thd_calloc(thd,size) (thd_alloc_service->thd_calloc_func((thd), (size))) - -#define thd_strdup(thd,str) (thd_alloc_service->thd_strdup_func((thd), (str))) - -#define thd_strmake(thd,str,size) \ - (thd_alloc_service->thd_strmake_func((thd), (str), (size))) - -#define thd_memdup(thd,str,size) \ - (thd_alloc_service->thd_memdup_func((thd), (str), (size))) - -#define thd_make_lex_string(thd, lex_str, str, size, allocate_lex_string) \ - (thd_alloc_service->thd_make_lex_string_func((thd), (lex_str), (str), \ - (size), (allocate_lex_string))) - -#else - -/** - Allocate memory in the connection's local memory pool - - @details - When properly used in place of @c my_malloc(), this can significantly - improve concurrency. Don't use this or related functions to allocate - large chunks of memory. Use for temporary storage only. The memory - will be freed automatically at the end of the statement; no explicit - code is required to prevent memory leaks. - - @see alloc_root() -*/ -void *thd_alloc(MYSQL_THD thd, unsigned int size); -/** - @see thd_alloc() -*/ -void *thd_calloc(MYSQL_THD thd, unsigned int size); -/** - @see thd_alloc() -*/ -char *thd_strdup(MYSQL_THD thd, const char *str); -/** - @see thd_alloc() -*/ -char *thd_strmake(MYSQL_THD thd, const char *str, unsigned int size); -/** - @see thd_alloc() -*/ -void *thd_memdup(MYSQL_THD thd, const void* str, unsigned int size); - -/** - Create a LEX_STRING in this connection's local memory pool - - @param thd user thread connection handle - @param lex_str pointer to LEX_STRING object to be initialized - @param str initializer to be copied into lex_str - @param size length of str, in bytes - @param allocate_lex_string flag: if TRUE, allocate new LEX_STRING object, - instead of using lex_str value - @return NULL on failure, or pointer to the LEX_STRING object - - @see thd_alloc() -*/ -MYSQL_LEX_STRING *thd_make_lex_string(MYSQL_THD thd, MYSQL_LEX_STRING *lex_str, - const char *str, unsigned int size, - int allocate_lex_string); - -#endif - -#ifdef __cplusplus -} -#endif - -#define MYSQL_SERVICE_THD_ALLOC_INCLUDED -#endif - diff --git a/deps/mysqllite/include/mysql/service_thd_wait.h b/deps/mysqllite/include/mysql/service_thd_wait.h deleted file mode 100644 index 2a8f5e610a33e5..00000000000000 --- a/deps/mysqllite/include/mysql/service_thd_wait.h +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (C) 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef MYSQL_SERVICE_THD_WAIT_INCLUDED -#define MYSQL_SERVICE_THD_WAIT_INCLUDED - -/** - @file include/mysql/service_thd_wait.h - This service provides functions for plugins and storage engines to report - when they are going to sleep/stall. - - SYNOPSIS - thd_wait_begin() - call just before a wait begins - thd Thread object - Use NULL if the thd is NOT known. - wait_type Type of wait - 1 -- short wait (e.g. for mutex) - 2 -- medium wait (e.g. for disk io) - 3 -- large wait (e.g. for locked row/table) - NOTES - This is used by the threadpool to have better knowledge of which - threads that currently are actively running on CPUs. When a thread - reports that it's going to sleep/stall, the threadpool scheduler is - free to start another thread in the pool most likely. The expected wait - time is simply an indication of how long the wait is expected to - become, the real wait time could be very different. - - thd_wait_end() called immediately after the wait is complete - - thd_wait_end() MUST be called if thd_wait_begin() was called. - - Using thd_wait_...() service is optional but recommended. Using it will - improve performance as the thread pool will be more active at managing the - thread workload. -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum _thd_wait_type_e { - THD_WAIT_MUTEX= 1, - THD_WAIT_DISKIO= 2, - THD_WAIT_ROW_TABLE_LOCK= 3, - THD_WAIT_GLOBAL_LOCK= 4 -} thd_wait_type; - -extern struct thd_wait_service_st { - void (*thd_wait_begin_func)(MYSQL_THD, thd_wait_type); - void (*thd_wait_end_func)(MYSQL_THD); -} *thd_wait_service; - -#ifdef MYSQL_DYNAMIC_PLUGIN - -#define thd_wait_begin(_THD, _WAIT_TYPE) \ - thd_wait_service->thd_wait_begin_func(_THD, _WAIT_TYPE) -#define thd_wait_end(_THD) thd_wait_service->thd_wait_end_func(_THD) - -#else - -void thd_wait_begin(MYSQL_THD thd, thd_wait_type wait_type); -void thd_wait_end(MYSQL_THD thd); - -#endif - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/deps/mysqllite/include/mysql/service_thread_scheduler.h b/deps/mysqllite/include/mysql/service_thread_scheduler.h deleted file mode 100644 index a4396b721bdc3d..00000000000000 --- a/deps/mysqllite/include/mysql/service_thread_scheduler.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright (C) 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#ifndef SERVICE_THREAD_SCHEDULER_INCLUDED -#define SERVICE_THREAD_SCHEDULER_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif - -struct scheduler_functions; - -extern struct my_thread_scheduler_service { - int (*set)(struct scheduler_functions *scheduler); - int (*reset)(); -} *my_thread_scheduler_service; - -#ifdef MYSQL_DYNAMIC_PLUGIN - -#define my_thread_scheduler_set(F) my_thread_scheduler_service->set((F)) -#define my_thread_scheduler_reset() my_thread_scheduler_service->reset() - -#else - -/** - Set the thread scheduler to use for the server. - - @param scheduler Pointer to scheduler callbacks to use. - @retval 0 Scheduler installed correctly. - @retval 1 Invalid value (NULL) used for scheduler. -*/ -int my_thread_scheduler_set(struct scheduler_functions *scheduler); - -/** - Restore the previous thread scheduler. - - @note If no thread scheduler was installed previously with - thd_set_thread_scheduler, this function will report an error. - - @retval 0 Scheduler installed correctly. - @retval 1 No scheduler installed. -*/ -int my_thread_scheduler_reset(); - -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* SERVICE_THREAD_SCHEDULER_INCLUDED */ diff --git a/deps/mysqllite/include/mysql/services.h b/deps/mysqllite/include/mysql/services.h deleted file mode 100644 index 6c67a582fb8d9e..00000000000000 --- a/deps/mysqllite/include/mysql/services.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef MYSQL_SERVICES_INCLUDED -/* Copyright (C) 2009 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include -#include - -#ifdef __cplusplus -} -#endif - -#define MYSQL_SERVICES_INCLUDED -#endif - diff --git a/deps/mysqllite/include/mysql_com.h b/deps/mysqllite/include/mysql_com.h deleted file mode 100644 index f4c023721deca3..00000000000000 --- a/deps/mysqllite/include/mysql_com.h +++ /dev/null @@ -1,572 +0,0 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* -** Common definition between mysql server & client -*/ - -#ifndef _mysql_com_h -#define _mysql_com_h - -#define HOSTNAME_LENGTH 60 -#define SYSTEM_CHARSET_MBMAXLEN 3 -#define NAME_CHAR_LEN 64 /* Field/table name length */ -#define USERNAME_CHAR_LENGTH 16 -#define NAME_LEN (NAME_CHAR_LEN*SYSTEM_CHARSET_MBMAXLEN) -#define USERNAME_LENGTH (USERNAME_CHAR_LENGTH*SYSTEM_CHARSET_MBMAXLEN) - -#define MYSQL_AUTODETECT_CHARSET_NAME "auto" - -#define SERVER_VERSION_LENGTH 60 -#define SQLSTATE_LENGTH 5 - -/* - Maximum length of comments -*/ -#define TABLE_COMMENT_INLINE_MAXLEN 180 /* pre 6.0: 60 characters */ -#define TABLE_COMMENT_MAXLEN 2048 -#define COLUMN_COMMENT_MAXLEN 1024 -#define INDEX_COMMENT_MAXLEN 1024 - -/* - USER_HOST_BUFF_SIZE -- length of string buffer, that is enough to contain - username and hostname parts of the user identifier with trailing zero in - MySQL standard format: - user_name_part@host_name_part\0 -*/ -#define USER_HOST_BUFF_SIZE HOSTNAME_LENGTH + USERNAME_LENGTH + 2 - -#define LOCAL_HOST "localhost" -#define LOCAL_HOST_NAMEDPIPE "." - - -#if defined(__WIN__) && !defined( _CUSTOMCONFIG_) -#define MYSQL_NAMEDPIPE "MySQL" -#define MYSQL_SERVICENAME "MySQL" -#endif /* __WIN__ */ - -/* - You should add new commands to the end of this list, otherwise old - servers won't be able to handle them as 'unsupported'. -*/ - -enum enum_server_command -{ - COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST, - COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN, COM_STATISTICS, - COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING, - COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP, - COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE, - COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE, - COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON, - /* don't forget to update const char *command_name[] in sql_parse.cc */ - - /* Must be last */ - COM_END -}; - - -/* - Length of random string sent by server on handshake; this is also length of - obfuscated password, recieved from client -*/ -#define SCRAMBLE_LENGTH 20 -#define SCRAMBLE_LENGTH_323 8 -/* length of password stored in the db: new passwords are preceeded with '*' */ -#define SCRAMBLED_PASSWORD_CHAR_LENGTH (SCRAMBLE_LENGTH*2+1) -#define SCRAMBLED_PASSWORD_CHAR_LENGTH_323 (SCRAMBLE_LENGTH_323*2) - - -#define NOT_NULL_FLAG 1 /* Field can't be NULL */ -#define PRI_KEY_FLAG 2 /* Field is part of a primary key */ -#define UNIQUE_KEY_FLAG 4 /* Field is part of a unique key */ -#define MULTIPLE_KEY_FLAG 8 /* Field is part of a key */ -#define BLOB_FLAG 16 /* Field is a blob */ -#define UNSIGNED_FLAG 32 /* Field is unsigned */ -#define ZEROFILL_FLAG 64 /* Field is zerofill */ -#define BINARY_FLAG 128 /* Field is binary */ - -/* The following are only sent to new clients */ -#define ENUM_FLAG 256 /* field is an enum */ -#define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */ -#define TIMESTAMP_FLAG 1024 /* Field is a timestamp */ -#define SET_FLAG 2048 /* field is a set */ -#define NO_DEFAULT_VALUE_FLAG 4096 /* Field doesn't have default value */ -#define ON_UPDATE_NOW_FLAG 8192 /* Field is set to NOW on UPDATE */ -#define NUM_FLAG 32768 /* Field is num (for clients) */ -#define PART_KEY_FLAG 16384 /* Intern; Part of some key */ -#define GROUP_FLAG 32768 /* Intern: Group field */ -#define UNIQUE_FLAG 65536 /* Intern: Used by sql_yacc */ -#define BINCMP_FLAG 131072 /* Intern: Used by sql_yacc */ -#define GET_FIXED_FIELDS_FLAG (1 << 18) /* Used to get fields in item tree */ -#define FIELD_IN_PART_FUNC_FLAG (1 << 19)/* Field part of partition func */ -#define FIELD_IN_ADD_INDEX (1<< 20) /* Intern: Field used in ADD INDEX */ -#define FIELD_IS_RENAMED (1<< 21) /* Intern: Field is being renamed */ - -#define REFRESH_GRANT 1 /* Refresh grant tables */ -#define REFRESH_LOG 2 /* Start on new log file */ -#define REFRESH_TABLES 4 /* close all tables */ -#define REFRESH_HOSTS 8 /* Flush host cache */ -#define REFRESH_STATUS 16 /* Flush status variables */ -#define REFRESH_THREADS 32 /* Flush thread cache */ -#define REFRESH_SLAVE 64 /* Reset master info and restart slave - thread */ -#define REFRESH_MASTER 128 /* Remove all bin logs in the index - and truncate the index */ -#define REFRESH_ERROR_LOG 256 /* Rotate only the erorr log */ -#define REFRESH_ENGINE_LOG 512 /* Flush all storage engine logs */ -#define REFRESH_BINARY_LOG 1024 /* Flush the binary log */ -#define REFRESH_RELAY_LOG 2048 /* Flush the relay log */ -#define REFRESH_GENERAL_LOG 4096 /* Flush the general log */ -#define REFRESH_SLOW_LOG 8192 /* Flush the slow query log */ - -/* The following can't be set with mysql_refresh() */ -#define REFRESH_READ_LOCK 16384 /* Lock tables for read */ -#define REFRESH_FAST 32768 /* Intern flag */ - -/* RESET (remove all queries) from query cache */ -#define REFRESH_QUERY_CACHE 65536 -#define REFRESH_QUERY_CACHE_FREE 0x20000L /* pack query cache */ -#define REFRESH_DES_KEY_FILE 0x40000L -#define REFRESH_USER_RESOURCES 0x80000L - -#define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */ -#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */ -#define CLIENT_LONG_FLAG 4 /* Get all column flags */ -#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */ -#define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */ -#define CLIENT_COMPRESS 32 /* Can use compression protocol */ -#define CLIENT_ODBC 64 /* Odbc client */ -#define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */ -#define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */ -#define CLIENT_PROTOCOL_41 512 /* New 4.1 protocol */ -#define CLIENT_INTERACTIVE 1024 /* This is an interactive client */ -#define CLIENT_SSL 2048 /* Switch to SSL after handshake */ -#define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */ -#define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */ -#define CLIENT_RESERVED 16384 /* Old flag for 4.1 protocol */ -#define CLIENT_SECURE_CONNECTION 32768 /* New 4.1 authentication */ -#define CLIENT_MULTI_STATEMENTS (1UL << 16) /* Enable/disable multi-stmt support */ -#define CLIENT_MULTI_RESULTS (1UL << 17) /* Enable/disable multi-results */ -#define CLIENT_PS_MULTI_RESULTS (1UL << 18) /* Multi-results in PS-protocol */ - -#define CLIENT_PLUGIN_AUTH (1UL << 19) /* Client supports plugin authentication */ - -#define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30) -#define CLIENT_REMEMBER_OPTIONS (1UL << 31) - -#ifdef HAVE_COMPRESS -#define CAN_CLIENT_COMPRESS CLIENT_COMPRESS -#else -#define CAN_CLIENT_COMPRESS 0 -#endif - -/* Gather all possible capabilites (flags) supported by the server */ -#define CLIENT_ALL_FLAGS (CLIENT_LONG_PASSWORD | \ - CLIENT_FOUND_ROWS | \ - CLIENT_LONG_FLAG | \ - CLIENT_CONNECT_WITH_DB | \ - CLIENT_NO_SCHEMA | \ - CLIENT_COMPRESS | \ - CLIENT_ODBC | \ - CLIENT_LOCAL_FILES | \ - CLIENT_IGNORE_SPACE | \ - CLIENT_PROTOCOL_41 | \ - CLIENT_INTERACTIVE | \ - CLIENT_SSL | \ - CLIENT_IGNORE_SIGPIPE | \ - CLIENT_TRANSACTIONS | \ - CLIENT_RESERVED | \ - CLIENT_SECURE_CONNECTION | \ - CLIENT_MULTI_STATEMENTS | \ - CLIENT_MULTI_RESULTS | \ - CLIENT_PS_MULTI_RESULTS | \ - CLIENT_SSL_VERIFY_SERVER_CERT | \ - CLIENT_REMEMBER_OPTIONS | \ - CLIENT_PLUGIN_AUTH) - -/* - Switch off the flags that are optional and depending on build flags - If any of the optional flags is supported by the build it will be switched - on before sending to the client during the connection handshake. -*/ -#define CLIENT_BASIC_FLAGS (((CLIENT_ALL_FLAGS & ~CLIENT_SSL) \ - & ~CLIENT_COMPRESS) \ - & ~CLIENT_SSL_VERIFY_SERVER_CERT) - -/** - Is raised when a multi-statement transaction - has been started, either explicitly, by means - of BEGIN or COMMIT AND CHAIN, or - implicitly, by the first transactional - statement, when autocommit=off. -*/ -#define SERVER_STATUS_IN_TRANS 1 -#define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */ -#define SERVER_MORE_RESULTS_EXISTS 8 /* Multi query - next query exists */ -#define SERVER_QUERY_NO_GOOD_INDEX_USED 16 -#define SERVER_QUERY_NO_INDEX_USED 32 -/** - The server was able to fulfill the clients request and opened a - read-only non-scrollable cursor for a query. This flag comes - in reply to COM_STMT_EXECUTE and COM_STMT_FETCH commands. -*/ -#define SERVER_STATUS_CURSOR_EXISTS 64 -/** - This flag is sent when a read-only cursor is exhausted, in reply to - COM_STMT_FETCH command. -*/ -#define SERVER_STATUS_LAST_ROW_SENT 128 -#define SERVER_STATUS_DB_DROPPED 256 /* A database was dropped */ -#define SERVER_STATUS_NO_BACKSLASH_ESCAPES 512 -/** - Sent to the client if after a prepared statement reprepare - we discovered that the new statement returns a different - number of result set columns. -*/ -#define SERVER_STATUS_METADATA_CHANGED 1024 -#define SERVER_QUERY_WAS_SLOW 2048 - -/** - To mark ResultSet containing output parameter values. -*/ -#define SERVER_PS_OUT_PARAMS 4096 - -/** - Server status flags that must be cleared when starting - execution of a new SQL statement. - Flags from this set are only added to the - current server status by the execution engine, but - never removed -- the execution engine expects them - to disappear automagically by the next command. -*/ -#define SERVER_STATUS_CLEAR_SET (SERVER_QUERY_NO_GOOD_INDEX_USED| \ - SERVER_QUERY_NO_INDEX_USED|\ - SERVER_MORE_RESULTS_EXISTS|\ - SERVER_STATUS_METADATA_CHANGED |\ - SERVER_QUERY_WAS_SLOW |\ - SERVER_STATUS_DB_DROPPED |\ - SERVER_STATUS_CURSOR_EXISTS|\ - SERVER_STATUS_LAST_ROW_SENT) - -#define MYSQL_ERRMSG_SIZE 512 -#define NET_READ_TIMEOUT 30 /* Timeout on read */ -#define NET_WRITE_TIMEOUT 60 /* Timeout on write */ -#define NET_WAIT_TIMEOUT 8*60*60 /* Wait for new query */ - -#define ONLY_KILL_QUERY 1 - - -struct st_vio; /* Only C */ -typedef struct st_vio Vio; - -#define MAX_TINYINT_WIDTH 3 /* Max width for a TINY w.o. sign */ -#define MAX_SMALLINT_WIDTH 5 /* Max width for a SHORT w.o. sign */ -#define MAX_MEDIUMINT_WIDTH 8 /* Max width for a INT24 w.o. sign */ -#define MAX_INT_WIDTH 10 /* Max width for a LONG w.o. sign */ -#define MAX_BIGINT_WIDTH 20 /* Max width for a LONGLONG */ -#define MAX_CHAR_WIDTH 255 /* Max length for a CHAR colum */ -#define MAX_BLOB_WIDTH 16777216 /* Default width for blob */ - -typedef struct st_net { -#if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY) - Vio *vio; - unsigned char *buff,*buff_end,*write_pos,*read_pos; - my_socket fd; /* For Perl DBI/dbd */ - /* - The following variable is set if we are doing several queries in one - command ( as in LOAD TABLE ... FROM MASTER ), - and do not want to confuse the client with OK at the wrong time - */ - unsigned long remain_in_buf,length, buf_length, where_b; - unsigned long max_packet,max_packet_size; - unsigned int pkt_nr,compress_pkt_nr; - unsigned int write_timeout, read_timeout, retry_count; - int fcntl; - unsigned int *return_status; - unsigned char reading_or_writing; - char save_char; - my_bool unused1; /* Please remove with the next incompatible ABI change. */ - my_bool unused2; /* Please remove with the next incompatible ABI change */ - my_bool compress; - my_bool unused3; /* Please remove with the next incompatible ABI change. */ - /* - Pointer to query object in query cache, do not equal NULL (0) for - queries in cache that have not stored its results yet - */ -#endif - /* - Unused, please remove with the next incompatible ABI change. - */ - unsigned char *unused; - unsigned int last_errno; - unsigned char error; - my_bool unused4; /* Please remove with the next incompatible ABI change. */ - my_bool unused5; /* Please remove with the next incompatible ABI change. */ - /** Client library error message buffer. Actually belongs to struct MYSQL. */ - char last_error[MYSQL_ERRMSG_SIZE]; - /** Client library sqlstate buffer. Set along with the error message. */ - char sqlstate[SQLSTATE_LENGTH+1]; - void *extension; -#if defined(MYSQL_SERVER) && !defined(EMBEDDED_LIBRARY) - /* - Controls whether a big packet should be skipped. - - Initially set to FALSE by default. Unauthenticated sessions must have - this set to FALSE so that the server can't be tricked to read packets - indefinitely. - */ - my_bool skip_big_packet; -#endif -} NET; - - -#define packet_error (~(unsigned long) 0) - -enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, - MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, - MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, - MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP, - MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24, - MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, - MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR, - MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, - MYSQL_TYPE_BIT, - MYSQL_TYPE_NEWDECIMAL=246, - MYSQL_TYPE_ENUM=247, - MYSQL_TYPE_SET=248, - MYSQL_TYPE_TINY_BLOB=249, - MYSQL_TYPE_MEDIUM_BLOB=250, - MYSQL_TYPE_LONG_BLOB=251, - MYSQL_TYPE_BLOB=252, - MYSQL_TYPE_VAR_STRING=253, - MYSQL_TYPE_STRING=254, - MYSQL_TYPE_GEOMETRY=255 - -}; - -/* For backward compatibility */ -#define CLIENT_MULTI_QUERIES CLIENT_MULTI_STATEMENTS -#define FIELD_TYPE_DECIMAL MYSQL_TYPE_DECIMAL -#define FIELD_TYPE_NEWDECIMAL MYSQL_TYPE_NEWDECIMAL -#define FIELD_TYPE_TINY MYSQL_TYPE_TINY -#define FIELD_TYPE_SHORT MYSQL_TYPE_SHORT -#define FIELD_TYPE_LONG MYSQL_TYPE_LONG -#define FIELD_TYPE_FLOAT MYSQL_TYPE_FLOAT -#define FIELD_TYPE_DOUBLE MYSQL_TYPE_DOUBLE -#define FIELD_TYPE_NULL MYSQL_TYPE_NULL -#define FIELD_TYPE_TIMESTAMP MYSQL_TYPE_TIMESTAMP -#define FIELD_TYPE_LONGLONG MYSQL_TYPE_LONGLONG -#define FIELD_TYPE_INT24 MYSQL_TYPE_INT24 -#define FIELD_TYPE_DATE MYSQL_TYPE_DATE -#define FIELD_TYPE_TIME MYSQL_TYPE_TIME -#define FIELD_TYPE_DATETIME MYSQL_TYPE_DATETIME -#define FIELD_TYPE_YEAR MYSQL_TYPE_YEAR -#define FIELD_TYPE_NEWDATE MYSQL_TYPE_NEWDATE -#define FIELD_TYPE_ENUM MYSQL_TYPE_ENUM -#define FIELD_TYPE_SET MYSQL_TYPE_SET -#define FIELD_TYPE_TINY_BLOB MYSQL_TYPE_TINY_BLOB -#define FIELD_TYPE_MEDIUM_BLOB MYSQL_TYPE_MEDIUM_BLOB -#define FIELD_TYPE_LONG_BLOB MYSQL_TYPE_LONG_BLOB -#define FIELD_TYPE_BLOB MYSQL_TYPE_BLOB -#define FIELD_TYPE_VAR_STRING MYSQL_TYPE_VAR_STRING -#define FIELD_TYPE_STRING MYSQL_TYPE_STRING -#define FIELD_TYPE_CHAR MYSQL_TYPE_TINY -#define FIELD_TYPE_INTERVAL MYSQL_TYPE_ENUM -#define FIELD_TYPE_GEOMETRY MYSQL_TYPE_GEOMETRY -#define FIELD_TYPE_BIT MYSQL_TYPE_BIT - - -/* Shutdown/kill enums and constants */ - -/* Bits for THD::killable. */ -#define MYSQL_SHUTDOWN_KILLABLE_CONNECT (unsigned char)(1 << 0) -#define MYSQL_SHUTDOWN_KILLABLE_TRANS (unsigned char)(1 << 1) -#define MYSQL_SHUTDOWN_KILLABLE_LOCK_TABLE (unsigned char)(1 << 2) -#define MYSQL_SHUTDOWN_KILLABLE_UPDATE (unsigned char)(1 << 3) - -enum mysql_enum_shutdown_level { - /* - We want levels to be in growing order of hardness (because we use number - comparisons). Note that DEFAULT does not respect the growing property, but - it's ok. - */ - SHUTDOWN_DEFAULT = 0, - /* wait for existing connections to finish */ - SHUTDOWN_WAIT_CONNECTIONS= MYSQL_SHUTDOWN_KILLABLE_CONNECT, - /* wait for existing trans to finish */ - SHUTDOWN_WAIT_TRANSACTIONS= MYSQL_SHUTDOWN_KILLABLE_TRANS, - /* wait for existing updates to finish (=> no partial MyISAM update) */ - SHUTDOWN_WAIT_UPDATES= MYSQL_SHUTDOWN_KILLABLE_UPDATE, - /* flush InnoDB buffers and other storage engines' buffers*/ - SHUTDOWN_WAIT_ALL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1), - /* don't flush InnoDB buffers, flush other storage engines' buffers*/ - SHUTDOWN_WAIT_CRITICAL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1) + 1, - /* Now the 2 levels of the KILL command */ -#if MYSQL_VERSION_ID >= 50000 - KILL_QUERY= 254, -#endif - KILL_CONNECTION= 255 -}; - - -enum enum_cursor_type -{ - CURSOR_TYPE_NO_CURSOR= 0, - CURSOR_TYPE_READ_ONLY= 1, - CURSOR_TYPE_FOR_UPDATE= 2, - CURSOR_TYPE_SCROLLABLE= 4 -}; - - -/* options for mysql_set_option */ -enum enum_mysql_set_option -{ - MYSQL_OPTION_MULTI_STATEMENTS_ON, - MYSQL_OPTION_MULTI_STATEMENTS_OFF -}; - -#define net_new_transaction(net) ((net)->pkt_nr=0) - -#ifdef __cplusplus -extern "C" { -#endif - -my_bool my_net_init(NET *net, Vio* vio); -void my_net_local_init(NET *net); -void net_end(NET *net); - void net_clear(NET *net, my_bool clear_buffer); -my_bool net_realloc(NET *net, size_t length); -my_bool net_flush(NET *net); -my_bool my_net_write(NET *net,const unsigned char *packet, size_t len); -my_bool net_write_command(NET *net,unsigned char command, - const unsigned char *header, size_t head_len, - const unsigned char *packet, size_t len); -int net_real_write(NET *net,const unsigned char *packet, size_t len); -unsigned long my_net_read(NET *net); - -#ifdef _global_h -void my_net_set_write_timeout(NET *net, uint timeout); -void my_net_set_read_timeout(NET *net, uint timeout); -#endif - -struct sockaddr; -int my_connect(my_socket s, const struct sockaddr *name, unsigned int namelen, - unsigned int timeout); - -struct rand_struct { - unsigned long seed1,seed2,max_value; - double max_value_dbl; -}; - -#ifdef __cplusplus -} -#endif - - /* The following is for user defined functions */ - -enum Item_result {STRING_RESULT=0, REAL_RESULT, INT_RESULT, ROW_RESULT, - DECIMAL_RESULT}; - -typedef struct st_udf_args -{ - unsigned int arg_count; /* Number of arguments */ - enum Item_result *arg_type; /* Pointer to item_results */ - char **args; /* Pointer to argument */ - unsigned long *lengths; /* Length of string arguments */ - char *maybe_null; /* Set to 1 for all maybe_null args */ - char **attributes; /* Pointer to attribute name */ - unsigned long *attribute_lengths; /* Length of attribute arguments */ - void *extension; -} UDF_ARGS; - - /* This holds information about the result */ - -typedef struct st_udf_init -{ - my_bool maybe_null; /* 1 if function can return NULL */ - unsigned int decimals; /* for real functions */ - unsigned long max_length; /* For string functions */ - char *ptr; /* free pointer for function data */ - my_bool const_item; /* 1 if function always returns the same value */ - void *extension; -} UDF_INIT; -/* - TODO: add a notion for determinism of the UDF. - See Item_udf_func::update_used_tables () -*/ - - /* Constants when using compression */ -#define NET_HEADER_SIZE 4 /* standard header size */ -#define COMP_HEADER_SIZE 3 /* compression header extra size */ - - /* Prototypes to password functions */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - These functions are used for authentication by client and server and - implemented in sql/password.c -*/ - -void randominit(struct rand_struct *, unsigned long seed1, - unsigned long seed2); -double my_rnd(struct rand_struct *); -void create_random_string(char *to, unsigned int length, struct rand_struct *rand_st); - -void hash_password(unsigned long *to, const char *password, unsigned int password_len); -void make_scrambled_password_323(char *to, const char *password); -void scramble_323(char *to, const char *message, const char *password); -my_bool check_scramble_323(const unsigned char *reply, const char *message, - unsigned long *salt); -void get_salt_from_password_323(unsigned long *res, const char *password); -void make_password_from_salt_323(char *to, const unsigned long *salt); - -void make_scrambled_password(char *to, const char *password); -void scramble(char *to, const char *message, const char *password); -my_bool check_scramble(const unsigned char *reply, const char *message, - const unsigned char *hash_stage2); -void get_salt_from_password(unsigned char *res, const char *password); -void make_password_from_salt(char *to, const unsigned char *hash_stage2); -char *octet2hex(char *to, const char *str, unsigned int len); - -/* end of password.c */ - -char *get_tty_password(const char *opt_message); -const char *mysql_errno_to_sqlstate(unsigned int mysql_errno); - -/* Some other useful functions */ - -my_bool my_thread_init(void); -void my_thread_end(void); - -#ifdef _global_h -ulong STDCALL net_field_length(uchar **packet); -my_ulonglong net_field_length_ll(uchar **packet); -uchar *net_store_length(uchar *pkg, ulonglong length); -#endif - -#ifdef __cplusplus -} -#endif - -#define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */ -#define MYSQL_STMT_HEADER 4 -#define MYSQL_LONG_DATA_HEADER 6 - -#define NOT_FIXED_DEC 31 -#endif diff --git a/deps/mysqllite/include/mysql_embed.h b/deps/mysqllite/include/mysql_embed.h deleted file mode 100644 index e860a4486ebced..00000000000000 --- a/deps/mysqllite/include/mysql_embed.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef MYSQL_EMBED_INCLUDED -#define MYSQL_EMBED_INCLUDED - -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Defines that are unique to the embedded version of MySQL */ - -#ifdef EMBEDDED_LIBRARY - -/* Things we don't need in the embedded version of MySQL */ -/* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */ - -#undef HAVE_DLOPEN /* No udf functions */ -#undef HAVE_SMEM /* No shared memory */ -#undef HAVE_NDBCLUSTER_DB /* No NDB cluster */ - -#endif /* EMBEDDED_LIBRARY */ -#endif /* MYSQL_EMBED_INCLUDED */ diff --git a/deps/mysqllite/include/mysql_time.h b/deps/mysqllite/include/mysql_time.h deleted file mode 100644 index 0a3f17a81fbcfb..00000000000000 --- a/deps/mysqllite/include/mysql_time.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2004 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _mysql_time_h_ -#define _mysql_time_h_ - -/* - Time declarations shared between the server and client API: - you should not add anything to this header unless it's used - (and hence should be visible) in mysql.h. - If you're looking for a place to add new time-related declaration, - it's most likely my_time.h. See also "C API Handling of Date - and Time Values" chapter in documentation. -*/ - -enum enum_mysql_timestamp_type -{ - MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1, - MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2 -}; - - -/* - Structure which is used to represent datetime values inside MySQL. - - We assume that values in this structure are normalized, i.e. year <= 9999, - month <= 12, day <= 31, hour <= 23, hour <= 59, hour <= 59. Many functions - in server such as my_system_gmt_sec() or make_time() family of functions - rely on this (actually now usage of make_*() family relies on a bit weaker - restriction). Also functions that produce MYSQL_TIME as result ensure this. - There is one exception to this rule though if this structure holds time - value (time_type == MYSQL_TIMESTAMP_TIME) days and hour member can hold - bigger values. -*/ -typedef struct st_mysql_time -{ - unsigned int year, month, day, hour, minute, second; - unsigned long second_part; - my_bool neg; - enum enum_mysql_timestamp_type time_type; -} MYSQL_TIME; - -#endif /* _mysql_time_h_ */ diff --git a/deps/mysqllite/include/mysqld_ername.h b/deps/mysqllite/include/mysqld_ername.h deleted file mode 100644 index 7697b59d1eb32b..00000000000000 --- a/deps/mysqllite/include/mysqld_ername.h +++ /dev/null @@ -1,708 +0,0 @@ -/* Autogenerated file, please don't edit */ - -{ "ER_HASHCHK", 1000, "hashchk" }, -{ "ER_NISAMCHK", 1001, "isamchk" }, -{ "ER_NO", 1002, "NO" }, -{ "ER_YES", 1003, "YES" }, -{ "ER_CANT_CREATE_FILE", 1004, "Can\'t create file \'%-.200s\' (errno: %d)" }, -{ "ER_CANT_CREATE_TABLE", 1005, "Can\'t create table \'%-.200s\' (errno: %d)" }, -{ "ER_CANT_CREATE_DB", 1006, "Can\'t create database \'%-.192s\' (errno: %d)" }, -{ "ER_DB_CREATE_EXISTS", 1007, "Can\'t create database \'%-.192s\'; database exists" }, -{ "ER_DB_DROP_EXISTS", 1008, "Can\'t drop database \'%-.192s\'; database doesn\'t exist" }, -{ "ER_DB_DROP_DELETE", 1009, "Error dropping database (can\'t delete \'%-.192s\', errno: %d)" }, -{ "ER_DB_DROP_RMDIR", 1010, "Error dropping database (can\'t rmdir \'%-.192s\', errno: %d)" }, -{ "ER_CANT_DELETE_FILE", 1011, "Error on delete of \'%-.192s\' (errno: %d)" }, -{ "ER_CANT_FIND_SYSTEM_REC", 1012, "Can\'t read record in system table" }, -{ "ER_CANT_GET_STAT", 1013, "Can\'t get status of \'%-.200s\' (errno: %d)" }, -{ "ER_CANT_GET_WD", 1014, "Can\'t get working directory (errno: %d)" }, -{ "ER_CANT_LOCK", 1015, "Can\'t lock file (errno: %d)" }, -{ "ER_CANT_OPEN_FILE", 1016, "Can\'t open file: \'%-.200s\' (errno: %d)" }, -{ "ER_FILE_NOT_FOUND", 1017, "Can\'t find file: \'%-.200s\' (errno: %d)" }, -{ "ER_CANT_READ_DIR", 1018, "Can\'t read dir of \'%-.192s\' (errno: %d)" }, -{ "ER_CANT_SET_WD", 1019, "Can\'t change dir to \'%-.192s\' (errno: %d)" }, -{ "ER_CHECKREAD", 1020, "Record has changed since last read in table \'%-.192s\'" }, -{ "ER_DISK_FULL", 1021, "Disk full (%s); waiting for someone to free some space..." }, -{ "ER_DUP_KEY", 1022, "Can\'t write; duplicate key in table \'%-.192s\'" }, -{ "ER_ERROR_ON_CLOSE", 1023, "Error on close of \'%-.192s\' (errno: %d)" }, -{ "ER_ERROR_ON_READ", 1024, "Error reading file \'%-.200s\' (errno: %d)" }, -{ "ER_ERROR_ON_RENAME", 1025, "Error on rename of \'%-.210s\' to \'%-.210s\' (errno: %d)" }, -{ "ER_ERROR_ON_WRITE", 1026, "Error writing file \'%-.200s\' (errno: %d)" }, -{ "ER_FILE_USED", 1027, "\'%-.192s\' is locked against change" }, -{ "ER_FILSORT_ABORT", 1028, "Sort aborted" }, -{ "ER_FORM_NOT_FOUND", 1029, "View \'%-.192s\' doesn\'t exist for \'%-.192s\'" }, -{ "ER_GET_ERRNO", 1030, "Got error %d from storage engine" }, -{ "ER_ILLEGAL_HA", 1031, "Table storage engine for \'%-.192s\' doesn\'t have this option" }, -{ "ER_KEY_NOT_FOUND", 1032, "Can\'t find record in \'%-.192s\'" }, -{ "ER_NOT_FORM_FILE", 1033, "Incorrect information in file: \'%-.200s\'" }, -{ "ER_NOT_KEYFILE", 1034, "Incorrect key file for table \'%-.200s\'; try to repair it" }, -{ "ER_OLD_KEYFILE", 1035, "Old key file for table \'%-.192s\'; repair it!" }, -{ "ER_OPEN_AS_READONLY", 1036, "Table \'%-.192s\' is read only" }, -{ "ER_OUTOFMEMORY", 1037, "Out of memory; restart server and try again (needed %d bytes)" }, -{ "ER_OUT_OF_SORTMEMORY", 1038, "Out of sort memory; increase server sort buffer size" }, -{ "ER_UNEXPECTED_EOF", 1039, "Unexpected EOF found when reading file \'%-.192s\' (errno: %d)" }, -{ "ER_CON_COUNT_ERROR", 1040, "Too many connections" }, -{ "ER_OUT_OF_RESOURCES", 1041, "Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use \'ulimit\' to allow mysqld to use more memory or you can add more swap space" }, -{ "ER_BAD_HOST_ERROR", 1042, "Can\'t get hostname for your address" }, -{ "ER_HANDSHAKE_ERROR", 1043, "Bad handshake" }, -{ "ER_DBACCESS_DENIED_ERROR", 1044, "Access denied for user \'%-.48s\'@\'%-.64s\' to database \'%-.192s\'" }, -{ "ER_ACCESS_DENIED_ERROR", 1045, "Access denied for user \'%-.48s\'@\'%-.64s\' (using password: %s)" }, -{ "ER_NO_DB_ERROR", 1046, "No database selected" }, -{ "ER_UNKNOWN_COM_ERROR", 1047, "Unknown command" }, -{ "ER_BAD_NULL_ERROR", 1048, "Column \'%-.192s\' cannot be null" }, -{ "ER_BAD_DB_ERROR", 1049, "Unknown database \'%-.192s\'" }, -{ "ER_TABLE_EXISTS_ERROR", 1050, "Table \'%-.192s\' already exists" }, -{ "ER_BAD_TABLE_ERROR", 1051, "Unknown table \'%-.100s\'" }, -{ "ER_NON_UNIQ_ERROR", 1052, "Column \'%-.192s\' in %-.192s is ambiguous" }, -{ "ER_SERVER_SHUTDOWN", 1053, "Server shutdown in progress" }, -{ "ER_BAD_FIELD_ERROR", 1054, "Unknown column \'%-.192s\' in \'%-.192s\'" }, -{ "ER_WRONG_FIELD_WITH_GROUP", 1055, "\'%-.192s\' isn\'t in GROUP BY" }, -{ "ER_WRONG_GROUP_FIELD", 1056, "Can\'t group on \'%-.192s\'" }, -{ "ER_WRONG_SUM_SELECT", 1057, "Statement has sum functions and columns in same statement" }, -{ "ER_WRONG_VALUE_COUNT", 1058, "Column count doesn\'t match value count" }, -{ "ER_TOO_LONG_IDENT", 1059, "Identifier name \'%-.100s\' is too long" }, -{ "ER_DUP_FIELDNAME", 1060, "Duplicate column name \'%-.192s\'" }, -{ "ER_DUP_KEYNAME", 1061, "Duplicate key name \'%-.192s\'" }, -{ "ER_DUP_ENTRY", 1062, "Duplicate entry \'%-.192s\' for key %d" }, -{ "ER_WRONG_FIELD_SPEC", 1063, "Incorrect column specifier for column \'%-.192s\'" }, -{ "ER_PARSE_ERROR", 1064, "%s near \'%-.80s\' at line %d" }, -{ "ER_EMPTY_QUERY", 1065, "Query was empty" }, -{ "ER_NONUNIQ_TABLE", 1066, "Not unique table/alias: \'%-.192s\'" }, -{ "ER_INVALID_DEFAULT", 1067, "Invalid default value for \'%-.192s\'" }, -{ "ER_MULTIPLE_PRI_KEY", 1068, "Multiple primary key defined" }, -{ "ER_TOO_MANY_KEYS", 1069, "Too many keys specified; max %d keys allowed" }, -{ "ER_TOO_MANY_KEY_PARTS", 1070, "Too many key parts specified; max %d parts allowed" }, -{ "ER_TOO_LONG_KEY", 1071, "Specified key was too long; max key length is %d bytes" }, -{ "ER_KEY_COLUMN_DOES_NOT_EXITS", 1072, "Key column \'%-.192s\' doesn\'t exist in table" }, -{ "ER_BLOB_USED_AS_KEY", 1073, "BLOB column \'%-.192s\' can\'t be used in key specification with the used table type" }, -{ "ER_TOO_BIG_FIELDLENGTH", 1074, "Column length too big for column \'%-.192s\' (max = %lu); use BLOB or TEXT instead" }, -{ "ER_WRONG_AUTO_KEY", 1075, "Incorrect table definition; there can be only one auto column and it must be defined as a key" }, -{ "ER_READY", 1076, "%s: ready for connections.\nVersion: \'%s\' socket: \'%s\' port: %d" }, -{ "ER_NORMAL_SHUTDOWN", 1077, "%s: Normal shutdown\n" }, -{ "ER_GOT_SIGNAL", 1078, "%s: Got signal %d. Aborting!\n" }, -{ "ER_SHUTDOWN_COMPLETE", 1079, "%s: Shutdown complete\n" }, -{ "ER_FORCING_CLOSE", 1080, "%s: Forcing close of thread %ld user: \'%-.48s\'\n" }, -{ "ER_IPSOCK_ERROR", 1081, "Can\'t create IP socket" }, -{ "ER_NO_SUCH_INDEX", 1082, "Table \'%-.192s\' has no index like the one used in CREATE INDEX; recreate the table" }, -{ "ER_WRONG_FIELD_TERMINATORS", 1083, "Field separator argument is not what is expected; check the manual" }, -{ "ER_BLOBS_AND_NO_TERMINATED", 1084, "You can\'t use fixed rowlength with BLOBs; please use \'fields terminated by\'" }, -{ "ER_TEXTFILE_NOT_READABLE", 1085, "The file \'%-.128s\' must be in the database directory or be readable by all" }, -{ "ER_FILE_EXISTS_ERROR", 1086, "File \'%-.200s\' already exists" }, -{ "ER_LOAD_INFO", 1087, "Records: %ld Deleted: %ld Skipped: %ld Warnings: %ld" }, -{ "ER_ALTER_INFO", 1088, "Records: %ld Duplicates: %ld" }, -{ "ER_WRONG_SUB_KEY", 1089, "Incorrect prefix key; the used key part isn\'t a string, the used length is longer than the key part, or the storage engine doesn\'t support unique prefix keys" }, -{ "ER_CANT_REMOVE_ALL_FIELDS", 1090, "You can\'t delete all columns with ALTER TABLE; use DROP TABLE instead" }, -{ "ER_CANT_DROP_FIELD_OR_KEY", 1091, "Can\'t DROP \'%-.192s\'; check that column/key exists" }, -{ "ER_INSERT_INFO", 1092, "Records: %ld Duplicates: %ld Warnings: %ld" }, -{ "ER_UPDATE_TABLE_USED", 1093, "You can\'t specify target table \'%-.192s\' for update in FROM clause" }, -{ "ER_NO_SUCH_THREAD", 1094, "Unknown thread id: %lu" }, -{ "ER_KILL_DENIED_ERROR", 1095, "You are not owner of thread %lu" }, -{ "ER_NO_TABLES_USED", 1096, "No tables used" }, -{ "ER_TOO_BIG_SET", 1097, "Too many strings for column %-.192s and SET" }, -{ "ER_NO_UNIQUE_LOGFILE", 1098, "Can\'t generate a unique log-filename %-.200s.(1-999)\n" }, -{ "ER_TABLE_NOT_LOCKED_FOR_WRITE", 1099, "Table \'%-.192s\' was locked with a READ lock and can\'t be updated" }, -{ "ER_TABLE_NOT_LOCKED", 1100, "Table \'%-.192s\' was not locked with LOCK TABLES" }, -{ "ER_BLOB_CANT_HAVE_DEFAULT", 1101, "BLOB/TEXT column \'%-.192s\' can\'t have a default value" }, -{ "ER_WRONG_DB_NAME", 1102, "Incorrect database name \'%-.100s\'" }, -{ "ER_WRONG_TABLE_NAME", 1103, "Incorrect table name \'%-.100s\'" }, -{ "ER_TOO_BIG_SELECT", 1104, "The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay" }, -{ "ER_UNKNOWN_ERROR", 1105, "Unknown error" }, -{ "ER_UNKNOWN_PROCEDURE", 1106, "Unknown procedure \'%-.192s\'" }, -{ "ER_WRONG_PARAMCOUNT_TO_PROCEDURE", 1107, "Incorrect parameter count to procedure \'%-.192s\'" }, -{ "ER_WRONG_PARAMETERS_TO_PROCEDURE", 1108, "Incorrect parameters to procedure \'%-.192s\'" }, -{ "ER_UNKNOWN_TABLE", 1109, "Unknown table \'%-.192s\' in %-.32s" }, -{ "ER_FIELD_SPECIFIED_TWICE", 1110, "Column \'%-.192s\' specified twice" }, -{ "ER_INVALID_GROUP_FUNC_USE", 1111, "Invalid use of group function" }, -{ "ER_UNSUPPORTED_EXTENSION", 1112, "Table \'%-.192s\' uses an extension that doesn\'t exist in this MySQL version" }, -{ "ER_TABLE_MUST_HAVE_COLUMNS", 1113, "A table must have at least 1 column" }, -{ "ER_RECORD_FILE_FULL", 1114, "The table \'%-.192s\' is full" }, -{ "ER_UNKNOWN_CHARACTER_SET", 1115, "Unknown character set: \'%-.64s\'" }, -{ "ER_TOO_MANY_TABLES", 1116, "Too many tables; MySQL can only use %d tables in a join" }, -{ "ER_TOO_MANY_FIELDS", 1117, "Too many columns" }, -{ "ER_TOO_BIG_ROWSIZE", 1118, "Row size too large. The maximum row size for the used table type, not counting BLOBs, is %ld. You have to change some columns to TEXT or BLOBs" }, -{ "ER_STACK_OVERRUN", 1119, "Thread stack overrun: Used: %ld of a %ld stack. Use \'mysqld --thread_stack=#\' to specify a bigger stack if needed" }, -{ "ER_WRONG_OUTER_JOIN", 1120, "Cross dependency found in OUTER JOIN; examine your ON conditions" }, -{ "ER_NULL_COLUMN_IN_INDEX", 1121, "Table handler doesn\'t support NULL in given index. Please change column \'%-.192s\' to be NOT NULL or use another handler" }, -{ "ER_CANT_FIND_UDF", 1122, "Can\'t load function \'%-.192s\'" }, -{ "ER_CANT_INITIALIZE_UDF", 1123, "Can\'t initialize function \'%-.192s\'; %-.80s" }, -{ "ER_UDF_NO_PATHS", 1124, "No paths allowed for shared library" }, -{ "ER_UDF_EXISTS", 1125, "Function \'%-.192s\' already exists" }, -{ "ER_CANT_OPEN_LIBRARY", 1126, "Can\'t open shared library \'%-.192s\' (errno: %d %-.128s)" }, -{ "ER_CANT_FIND_DL_ENTRY", 1127, "Can\'t find symbol \'%-.128s\' in library" }, -{ "ER_FUNCTION_NOT_DEFINED", 1128, "Function \'%-.192s\' is not defined" }, -{ "ER_HOST_IS_BLOCKED", 1129, "Host \'%-.64s\' is blocked because of many connection errors; unblock with \'mysqladmin flush-hosts\'" }, -{ "ER_HOST_NOT_PRIVILEGED", 1130, "Host \'%-.64s\' is not allowed to connect to this MySQL server" }, -{ "ER_PASSWORD_ANONYMOUS_USER", 1131, "You are using MySQL as an anonymous user and anonymous users are not allowed to change passwords" }, -{ "ER_PASSWORD_NOT_ALLOWED", 1132, "You must have privileges to update tables in the mysql database to be able to change passwords for others" }, -{ "ER_PASSWORD_NO_MATCH", 1133, "Can\'t find any matching row in the user table" }, -{ "ER_UPDATE_INFO", 1134, "Rows matched: %ld Changed: %ld Warnings: %ld" }, -{ "ER_CANT_CREATE_THREAD", 1135, "Can\'t create a new thread (errno %d); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug" }, -{ "ER_WRONG_VALUE_COUNT_ON_ROW", 1136, "Column count doesn\'t match value count at row %ld" }, -{ "ER_CANT_REOPEN_TABLE", 1137, "Can\'t reopen table: \'%-.192s\'" }, -{ "ER_INVALID_USE_OF_NULL", 1138, "Invalid use of NULL value" }, -{ "ER_REGEXP_ERROR", 1139, "Got error \'%-.64s\' from regexp" }, -{ "ER_MIX_OF_GROUP_FUNC_AND_FIELDS", 1140, "Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause" }, -{ "ER_NONEXISTING_GRANT", 1141, "There is no such grant defined for user \'%-.48s\' on host \'%-.64s\'" }, -{ "ER_TABLEACCESS_DENIED_ERROR", 1142, "%-.16s command denied to user \'%-.48s\'@\'%-.64s\' for table \'%-.192s\'" }, -{ "ER_COLUMNACCESS_DENIED_ERROR", 1143, "%-.16s command denied to user \'%-.48s\'@\'%-.64s\' for column \'%-.192s\' in table \'%-.192s\'" }, -{ "ER_ILLEGAL_GRANT_FOR_TABLE", 1144, "Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used" }, -{ "ER_GRANT_WRONG_HOST_OR_USER", 1145, "The host or user argument to GRANT is too long" }, -{ "ER_NO_SUCH_TABLE", 1146, "Table \'%-.192s.%-.192s\' doesn\'t exist" }, -{ "ER_NONEXISTING_TABLE_GRANT", 1147, "There is no such grant defined for user \'%-.48s\' on host \'%-.64s\' on table \'%-.192s\'" }, -{ "ER_NOT_ALLOWED_COMMAND", 1148, "The used command is not allowed with this MySQL version" }, -{ "ER_SYNTAX_ERROR", 1149, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use" }, -{ "ER_DELAYED_CANT_CHANGE_LOCK", 1150, "Delayed insert thread couldn\'t get requested lock for table %-.192s" }, -{ "ER_TOO_MANY_DELAYED_THREADS", 1151, "Too many delayed threads in use" }, -{ "ER_ABORTING_CONNECTION", 1152, "Aborted connection %ld to db: \'%-.192s\' user: \'%-.48s\' (%-.64s)" }, -{ "ER_NET_PACKET_TOO_LARGE", 1153, "Got a packet bigger than \'max_allowed_packet\' bytes" }, -{ "ER_NET_READ_ERROR_FROM_PIPE", 1154, "Got a read error from the connection pipe" }, -{ "ER_NET_FCNTL_ERROR", 1155, "Got an error from fcntl()" }, -{ "ER_NET_PACKETS_OUT_OF_ORDER", 1156, "Got packets out of order" }, -{ "ER_NET_UNCOMPRESS_ERROR", 1157, "Couldn\'t uncompress communication packet" }, -{ "ER_NET_READ_ERROR", 1158, "Got an error reading communication packets" }, -{ "ER_NET_READ_INTERRUPTED", 1159, "Got timeout reading communication packets" }, -{ "ER_NET_ERROR_ON_WRITE", 1160, "Got an error writing communication packets" }, -{ "ER_NET_WRITE_INTERRUPTED", 1161, "Got timeout writing communication packets" }, -{ "ER_TOO_LONG_STRING", 1162, "Result string is longer than \'max_allowed_packet\' bytes" }, -{ "ER_TABLE_CANT_HANDLE_BLOB", 1163, "The used table type doesn\'t support BLOB/TEXT columns" }, -{ "ER_TABLE_CANT_HANDLE_AUTO_INCREMENT", 1164, "The used table type doesn\'t support AUTO_INCREMENT columns" }, -{ "ER_DELAYED_INSERT_TABLE_LOCKED", 1165, "INSERT DELAYED can\'t be used with table \'%-.192s\' because it is locked with LOCK TABLES" }, -{ "ER_WRONG_COLUMN_NAME", 1166, "Incorrect column name \'%-.100s\'" }, -{ "ER_WRONG_KEY_COLUMN", 1167, "The used storage engine can\'t index column \'%-.192s\'" }, -{ "ER_WRONG_MRG_TABLE", 1168, "Unable to open underlying table which is differently defined or of non-MyISAM type or doesn\'t exist" }, -{ "ER_DUP_UNIQUE", 1169, "Can\'t write, because of unique constraint, to table \'%-.192s\'" }, -{ "ER_BLOB_KEY_WITHOUT_LENGTH", 1170, "BLOB/TEXT column \'%-.192s\' used in key specification without a key length" }, -{ "ER_PRIMARY_CANT_HAVE_NULL", 1171, "All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead" }, -{ "ER_TOO_MANY_ROWS", 1172, "Result consisted of more than one row" }, -{ "ER_REQUIRES_PRIMARY_KEY", 1173, "This table type requires a primary key" }, -{ "ER_NO_RAID_COMPILED", 1174, "This version of MySQL is not compiled with RAID support" }, -{ "ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE", 1175, "You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column" }, -{ "ER_KEY_DOES_NOT_EXITS", 1176, "Key \'%-.192s\' doesn\'t exist in table \'%-.192s\'" }, -{ "ER_CHECK_NO_SUCH_TABLE", 1177, "Can\'t open table" }, -{ "ER_CHECK_NOT_IMPLEMENTED", 1178, "The storage engine for the table doesn\'t support %s" }, -{ "ER_CANT_DO_THIS_DURING_AN_TRANSACTION", 1179, "You are not allowed to execute this command in a transaction" }, -{ "ER_ERROR_DURING_COMMIT", 1180, "Got error %d during COMMIT" }, -{ "ER_ERROR_DURING_ROLLBACK", 1181, "Got error %d during ROLLBACK" }, -{ "ER_ERROR_DURING_FLUSH_LOGS", 1182, "Got error %d during FLUSH_LOGS" }, -{ "ER_ERROR_DURING_CHECKPOINT", 1183, "Got error %d during CHECKPOINT" }, -{ "ER_NEW_ABORTING_CONNECTION", 1184, "Aborted connection %ld to db: \'%-.192s\' user: \'%-.48s\' host: \'%-.64s\' (%-.64s)" }, -{ "ER_DUMP_NOT_IMPLEMENTED", 1185, "The storage engine for the table does not support binary table dump" }, -{ "ER_FLUSH_MASTER_BINLOG_CLOSED", 1186, "Binlog closed, cannot RESET MASTER" }, -{ "ER_INDEX_REBUILD", 1187, "Failed rebuilding the index of dumped table \'%-.192s\'" }, -{ "ER_MASTER", 1188, "Error from master: \'%-.64s\'" }, -{ "ER_MASTER_NET_READ", 1189, "Net error reading from master" }, -{ "ER_MASTER_NET_WRITE", 1190, "Net error writing to master" }, -{ "ER_FT_MATCHING_KEY_NOT_FOUND", 1191, "Can\'t find FULLTEXT index matching the column list" }, -{ "ER_LOCK_OR_ACTIVE_TRANSACTION", 1192, "Can\'t execute the given command because you have active locked tables or an active transaction" }, -{ "ER_UNKNOWN_SYSTEM_VARIABLE", 1193, "Unknown system variable \'%-.64s\'" }, -{ "ER_CRASHED_ON_USAGE", 1194, "Table \'%-.192s\' is marked as crashed and should be repaired" }, -{ "ER_CRASHED_ON_REPAIR", 1195, "Table \'%-.192s\' is marked as crashed and last (automatic?) repair failed" }, -{ "ER_WARNING_NOT_COMPLETE_ROLLBACK", 1196, "Some non-transactional changed tables couldn\'t be rolled back" }, -{ "ER_TRANS_CACHE_FULL", 1197, "Multi-statement transaction required more than \'max_binlog_cache_size\' bytes of storage; increase this mysqld variable and try again" }, -{ "ER_SLAVE_MUST_STOP", 1198, "This operation cannot be performed with a running slave; run STOP SLAVE first" }, -{ "ER_SLAVE_NOT_RUNNING", 1199, "This operation requires a running slave; configure slave and do START SLAVE" }, -{ "ER_BAD_SLAVE", 1200, "The server is not configured as slave; fix in config file or with CHANGE MASTER TO" }, -{ "ER_MASTER_INFO", 1201, "Could not initialize master info structure; more error messages can be found in the MySQL error log" }, -{ "ER_SLAVE_THREAD", 1202, "Could not create slave thread; check system resources" }, -{ "ER_TOO_MANY_USER_CONNECTIONS", 1203, "User %-.64s already has more than \'max_user_connections\' active connections" }, -{ "ER_SET_CONSTANTS_ONLY", 1204, "You may only use constant expressions with SET" }, -{ "ER_LOCK_WAIT_TIMEOUT", 1205, "Lock wait timeout exceeded; try restarting transaction" }, -{ "ER_LOCK_TABLE_FULL", 1206, "The total number of locks exceeds the lock table size" }, -{ "ER_READ_ONLY_TRANSACTION", 1207, "Update locks cannot be acquired during a READ UNCOMMITTED transaction" }, -{ "ER_DROP_DB_WITH_READ_LOCK", 1208, "DROP DATABASE not allowed while thread is holding global read lock" }, -{ "ER_CREATE_DB_WITH_READ_LOCK", 1209, "CREATE DATABASE not allowed while thread is holding global read lock" }, -{ "ER_WRONG_ARGUMENTS", 1210, "Incorrect arguments to %s" }, -{ "ER_NO_PERMISSION_TO_CREATE_USER", 1211, "\'%-.48s\'@\'%-.64s\' is not allowed to create new users" }, -{ "ER_UNION_TABLES_IN_DIFFERENT_DIR", 1212, "Incorrect table definition; all MERGE tables must be in the same database" }, -{ "ER_LOCK_DEADLOCK", 1213, "Deadlock found when trying to get lock; try restarting transaction" }, -{ "ER_TABLE_CANT_HANDLE_FT", 1214, "The used table type doesn\'t support FULLTEXT indexes" }, -{ "ER_CANNOT_ADD_FOREIGN", 1215, "Cannot add foreign key constraint" }, -{ "ER_NO_REFERENCED_ROW", 1216, "Cannot add or update a child row: a foreign key constraint fails" }, -{ "ER_ROW_IS_REFERENCED", 1217, "Cannot delete or update a parent row: a foreign key constraint fails" }, -{ "ER_CONNECT_TO_MASTER", 1218, "Error connecting to master: %-.128s" }, -{ "ER_QUERY_ON_MASTER", 1219, "Error running query on master: %-.128s" }, -{ "ER_ERROR_WHEN_EXECUTING_COMMAND", 1220, "Error when executing command %s: %-.128s" }, -{ "ER_WRONG_USAGE", 1221, "Incorrect usage of %s and %s" }, -{ "ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT", 1222, "The used SELECT statements have a different number of columns" }, -{ "ER_CANT_UPDATE_WITH_READLOCK", 1223, "Can\'t execute the query because you have a conflicting read lock" }, -{ "ER_MIXING_NOT_ALLOWED", 1224, "Mixing of transactional and non-transactional tables is disabled" }, -{ "ER_DUP_ARGUMENT", 1225, "Option \'%s\' used twice in statement" }, -{ "ER_USER_LIMIT_REACHED", 1226, "User \'%-.64s\' has exceeded the \'%s\' resource (current value: %ld)" }, -{ "ER_SPECIFIC_ACCESS_DENIED_ERROR", 1227, "Access denied; you need (at least one of) the %-.128s privilege(s) for this operation" }, -{ "ER_LOCAL_VARIABLE", 1228, "Variable \'%-.64s\' is a SESSION variable and can\'t be used with SET GLOBAL" }, -{ "ER_GLOBAL_VARIABLE", 1229, "Variable \'%-.64s\' is a GLOBAL variable and should be set with SET GLOBAL" }, -{ "ER_NO_DEFAULT", 1230, "Variable \'%-.64s\' doesn\'t have a default value" }, -{ "ER_WRONG_VALUE_FOR_VAR", 1231, "Variable \'%-.64s\' can\'t be set to the value of \'%-.200s\'" }, -{ "ER_WRONG_TYPE_FOR_VAR", 1232, "Incorrect argument type to variable \'%-.64s\'" }, -{ "ER_VAR_CANT_BE_READ", 1233, "Variable \'%-.64s\' can only be set, not read" }, -{ "ER_CANT_USE_OPTION_HERE", 1234, "Incorrect usage/placement of \'%s\'" }, -{ "ER_NOT_SUPPORTED_YET", 1235, "This version of MySQL doesn\'t yet support \'%s\'" }, -{ "ER_MASTER_FATAL_ERROR_READING_BINLOG", 1236, "Got fatal error %d from master when reading data from binary log: \'%-.128s\'" }, -{ "ER_SLAVE_IGNORED_TABLE", 1237, "Slave SQL thread ignored the query because of replicate-*-table rules" }, -{ "ER_INCORRECT_GLOBAL_LOCAL_VAR", 1238, "Variable \'%-.192s\' is a %s variable" }, -{ "ER_WRONG_FK_DEF", 1239, "Incorrect foreign key definition for \'%-.192s\': %s" }, -{ "ER_KEY_REF_DO_NOT_MATCH_TABLE_REF", 1240, "Key reference and table reference don\'t match" }, -{ "ER_OPERAND_COLUMNS", 1241, "Operand should contain %d column(s)" }, -{ "ER_SUBQUERY_NO_1_ROW", 1242, "Subquery returns more than 1 row" }, -{ "ER_UNKNOWN_STMT_HANDLER", 1243, "Unknown prepared statement handler (%.*s) given to %s" }, -{ "ER_CORRUPT_HELP_DB", 1244, "Help database is corrupt or does not exist" }, -{ "ER_CYCLIC_REFERENCE", 1245, "Cyclic reference on subqueries" }, -{ "ER_AUTO_CONVERT", 1246, "Converting column \'%s\' from %s to %s" }, -{ "ER_ILLEGAL_REFERENCE", 1247, "Reference \'%-.64s\' not supported (%s)" }, -{ "ER_DERIVED_MUST_HAVE_ALIAS", 1248, "Every derived table must have its own alias" }, -{ "ER_SELECT_REDUCED", 1249, "Select %u was reduced during optimization" }, -{ "ER_TABLENAME_NOT_ALLOWED_HERE", 1250, "Table \'%-.192s\' from one of the SELECTs cannot be used in %-.32s" }, -{ "ER_NOT_SUPPORTED_AUTH_MODE", 1251, "Client does not support authentication protocol requested by server; consider upgrading MySQL client" }, -{ "ER_SPATIAL_CANT_HAVE_NULL", 1252, "All parts of a SPATIAL index must be NOT NULL" }, -{ "ER_COLLATION_CHARSET_MISMATCH", 1253, "COLLATION \'%s\' is not valid for CHARACTER SET \'%s\'" }, -{ "ER_SLAVE_WAS_RUNNING", 1254, "Slave is already running" }, -{ "ER_SLAVE_WAS_NOT_RUNNING", 1255, "Slave already has been stopped" }, -{ "ER_TOO_BIG_FOR_UNCOMPRESS", 1256, "Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)" }, -{ "ER_ZLIB_Z_MEM_ERROR", 1257, "ZLIB: Not enough memory" }, -{ "ER_ZLIB_Z_BUF_ERROR", 1258, "ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)" }, -{ "ER_ZLIB_Z_DATA_ERROR", 1259, "ZLIB: Input data corrupted" }, -{ "ER_CUT_VALUE_GROUP_CONCAT", 1260, "Row %u was cut by GROUP_CONCAT()" }, -{ "ER_WARN_TOO_FEW_RECORDS", 1261, "Row %ld doesn\'t contain data for all columns" }, -{ "ER_WARN_TOO_MANY_RECORDS", 1262, "Row %ld was truncated; it contained more data than there were input columns" }, -{ "ER_WARN_NULL_TO_NOTNULL", 1263, "Column set to default value; NULL supplied to NOT NULL column \'%s\' at row %ld" }, -{ "ER_WARN_DATA_OUT_OF_RANGE", 1264, "Out of range value for column \'%s\' at row %ld" }, -{ "WARN_DATA_TRUNCATED", 1265, "Data truncated for column \'%s\' at row %ld" }, -{ "ER_WARN_USING_OTHER_HANDLER", 1266, "Using storage engine %s for table \'%s\'" }, -{ "ER_CANT_AGGREGATE_2COLLATIONS", 1267, "Illegal mix of collations (%s,%s) and (%s,%s) for operation \'%s\'" }, -{ "ER_DROP_USER", 1268, "Cannot drop one or more of the requested users" }, -{ "ER_REVOKE_GRANTS", 1269, "Can\'t revoke all privileges for one or more of the requested users" }, -{ "ER_CANT_AGGREGATE_3COLLATIONS", 1270, "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation \'%s\'" }, -{ "ER_CANT_AGGREGATE_NCOLLATIONS", 1271, "Illegal mix of collations for operation \'%s\'" }, -{ "ER_VARIABLE_IS_NOT_STRUCT", 1272, "Variable \'%-.64s\' is not a variable component (can\'t be used as XXXX.variable_name)" }, -{ "ER_UNKNOWN_COLLATION", 1273, "Unknown collation: \'%-.64s\'" }, -{ "ER_SLAVE_IGNORED_SSL_PARAMS", 1274, "SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started" }, -{ "ER_SERVER_IS_IN_SECURE_AUTH_MODE", 1275, "Server is running in --secure-auth mode, but \'%s\'@\'%s\' has a password in the old format; please change the password to the new format" }, -{ "ER_WARN_FIELD_RESOLVED", 1276, "Field or reference \'%-.192s%s%-.192s%s%-.192s\' of SELECT #%d was resolved in SELECT #%d" }, -{ "ER_BAD_SLAVE_UNTIL_COND", 1277, "Incorrect parameter or combination of parameters for START SLAVE UNTIL" }, -{ "ER_MISSING_SKIP_SLAVE", 1278, "It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave\'s mysqld restart" }, -{ "ER_UNTIL_COND_IGNORED", 1279, "SQL thread is not to be started so UNTIL options are ignored" }, -{ "ER_WRONG_NAME_FOR_INDEX", 1280, "Incorrect index name \'%-.100s\'" }, -{ "ER_WRONG_NAME_FOR_CATALOG", 1281, "Incorrect catalog name \'%-.100s\'" }, -{ "ER_WARN_QC_RESIZE", 1282, "Query cache failed to set size %lu; new query cache size is %lu" }, -{ "ER_BAD_FT_COLUMN", 1283, "Column \'%-.192s\' cannot be part of FULLTEXT index" }, -{ "ER_UNKNOWN_KEY_CACHE", 1284, "Unknown key cache \'%-.100s\'" }, -{ "ER_WARN_HOSTNAME_WONT_WORK", 1285, "MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work" }, -{ "ER_UNKNOWN_STORAGE_ENGINE", 1286, "Unknown storage engine \'%s\'" }, -{ "ER_WARN_DEPRECATED_SYNTAX", 1287, "\'%s\' is deprecated and will be removed in a future release. Please use %s instead" }, -{ "ER_NON_UPDATABLE_TABLE", 1288, "The target table %-.100s of the %s is not updatable" }, -{ "ER_FEATURE_DISABLED", 1289, "The \'%s\' feature is disabled; you need MySQL built with \'%s\' to have it working" }, -{ "ER_OPTION_PREVENTS_STATEMENT", 1290, "The MySQL server is running with the %s option so it cannot execute this statement" }, -{ "ER_DUPLICATED_VALUE_IN_TYPE", 1291, "Column \'%-.100s\' has duplicated value \'%-.64s\' in %s" }, -{ "ER_TRUNCATED_WRONG_VALUE", 1292, "Truncated incorrect %-.32s value: \'%-.128s\'" }, -{ "ER_TOO_MUCH_AUTO_TIMESTAMP_COLS", 1293, "Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause" }, -{ "ER_INVALID_ON_UPDATE", 1294, "Invalid ON UPDATE clause for \'%-.192s\' column" }, -{ "ER_UNSUPPORTED_PS", 1295, "This command is not supported in the prepared statement protocol yet" }, -{ "ER_GET_ERRMSG", 1296, "Got error %d \'%-.100s\' from %s" }, -{ "ER_GET_TEMPORARY_ERRMSG", 1297, "Got temporary error %d \'%-.100s\' from %s" }, -{ "ER_UNKNOWN_TIME_ZONE", 1298, "Unknown or incorrect time zone: \'%-.64s\'" }, -{ "ER_WARN_INVALID_TIMESTAMP", 1299, "Invalid TIMESTAMP value in column \'%s\' at row %ld" }, -{ "ER_INVALID_CHARACTER_STRING", 1300, "Invalid %s character string: \'%.64s\'" }, -{ "ER_WARN_ALLOWED_PACKET_OVERFLOWED", 1301, "Result of %s() was larger than max_allowed_packet (%ld) - truncated" }, -{ "ER_CONFLICTING_DECLARATIONS", 1302, "Conflicting declarations: \'%s%s\' and \'%s%s\'" }, -{ "ER_SP_NO_RECURSIVE_CREATE", 1303, "Can\'t create a %s from within another stored routine" }, -{ "ER_SP_ALREADY_EXISTS", 1304, "%s %s already exists" }, -{ "ER_SP_DOES_NOT_EXIST", 1305, "%s %s does not exist" }, -{ "ER_SP_DROP_FAILED", 1306, "Failed to DROP %s %s" }, -{ "ER_SP_STORE_FAILED", 1307, "Failed to CREATE %s %s" }, -{ "ER_SP_LILABEL_MISMATCH", 1308, "%s with no matching label: %s" }, -{ "ER_SP_LABEL_REDEFINE", 1309, "Redefining label %s" }, -{ "ER_SP_LABEL_MISMATCH", 1310, "End-label %s without match" }, -{ "ER_SP_UNINIT_VAR", 1311, "Referring to uninitialized variable %s" }, -{ "ER_SP_BADSELECT", 1312, "PROCEDURE %s can\'t return a result set in the given context" }, -{ "ER_SP_BADRETURN", 1313, "RETURN is only allowed in a FUNCTION" }, -{ "ER_SP_BADSTATEMENT", 1314, "%s is not allowed in stored procedures" }, -{ "ER_UPDATE_LOG_DEPRECATED_IGNORED", 1315, "The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been ignored. This option will be removed in MySQL 5.6." }, -{ "ER_UPDATE_LOG_DEPRECATED_TRANSLATED", 1316, "The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been translated to SET SQL_LOG_BIN. This option will be removed in MySQL 5.6." }, -{ "ER_QUERY_INTERRUPTED", 1317, "Query execution was interrupted" }, -{ "ER_SP_WRONG_NO_OF_ARGS", 1318, "Incorrect number of arguments for %s %s; expected %u, got %u" }, -{ "ER_SP_COND_MISMATCH", 1319, "Undefined CONDITION: %s" }, -{ "ER_SP_NORETURN", 1320, "No RETURN found in FUNCTION %s" }, -{ "ER_SP_NORETURNEND", 1321, "FUNCTION %s ended without RETURN" }, -{ "ER_SP_BAD_CURSOR_QUERY", 1322, "Cursor statement must be a SELECT" }, -{ "ER_SP_BAD_CURSOR_SELECT", 1323, "Cursor SELECT must not have INTO" }, -{ "ER_SP_CURSOR_MISMATCH", 1324, "Undefined CURSOR: %s" }, -{ "ER_SP_CURSOR_ALREADY_OPEN", 1325, "Cursor is already open" }, -{ "ER_SP_CURSOR_NOT_OPEN", 1326, "Cursor is not open" }, -{ "ER_SP_UNDECLARED_VAR", 1327, "Undeclared variable: %s" }, -{ "ER_SP_WRONG_NO_OF_FETCH_ARGS", 1328, "Incorrect number of FETCH variables" }, -{ "ER_SP_FETCH_NO_DATA", 1329, "No data - zero rows fetched, selected, or processed" }, -{ "ER_SP_DUP_PARAM", 1330, "Duplicate parameter: %s" }, -{ "ER_SP_DUP_VAR", 1331, "Duplicate variable: %s" }, -{ "ER_SP_DUP_COND", 1332, "Duplicate condition: %s" }, -{ "ER_SP_DUP_CURS", 1333, "Duplicate cursor: %s" }, -{ "ER_SP_CANT_ALTER", 1334, "Failed to ALTER %s %s" }, -{ "ER_SP_SUBSELECT_NYI", 1335, "Subquery value not supported" }, -{ "ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG", 1336, "%s is not allowed in stored function or trigger" }, -{ "ER_SP_VARCOND_AFTER_CURSHNDLR", 1337, "Variable or condition declaration after cursor or handler declaration" }, -{ "ER_SP_CURSOR_AFTER_HANDLER", 1338, "Cursor declaration after handler declaration" }, -{ "ER_SP_CASE_NOT_FOUND", 1339, "Case not found for CASE statement" }, -{ "ER_FPARSER_TOO_BIG_FILE", 1340, "Configuration file \'%-.192s\' is too big" }, -{ "ER_FPARSER_BAD_HEADER", 1341, "Malformed file type header in file \'%-.192s\'" }, -{ "ER_FPARSER_EOF_IN_COMMENT", 1342, "Unexpected end of file while parsing comment \'%-.200s\'" }, -{ "ER_FPARSER_ERROR_IN_PARAMETER", 1343, "Error while parsing parameter \'%-.192s\' (line: \'%-.192s\')" }, -{ "ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER", 1344, "Unexpected end of file while skipping unknown parameter \'%-.192s\'" }, -{ "ER_VIEW_NO_EXPLAIN", 1345, "EXPLAIN/SHOW can not be issued; lacking privileges for underlying table" }, -{ "ER_FRM_UNKNOWN_TYPE", 1346, "File \'%-.192s\' has unknown type \'%-.64s\' in its header" }, -{ "ER_WRONG_OBJECT", 1347, "\'%-.192s.%-.192s\' is not %s" }, -{ "ER_NONUPDATEABLE_COLUMN", 1348, "Column \'%-.192s\' is not updatable" }, -{ "ER_VIEW_SELECT_DERIVED", 1349, "View\'s SELECT contains a subquery in the FROM clause" }, -{ "ER_VIEW_SELECT_CLAUSE", 1350, "View\'s SELECT contains a \'%s\' clause" }, -{ "ER_VIEW_SELECT_VARIABLE", 1351, "View\'s SELECT contains a variable or parameter" }, -{ "ER_VIEW_SELECT_TMPTABLE", 1352, "View\'s SELECT refers to a temporary table \'%-.192s\'" }, -{ "ER_VIEW_WRONG_LIST", 1353, "View\'s SELECT and view\'s field list have different column counts" }, -{ "ER_WARN_VIEW_MERGE", 1354, "View merge algorithm can\'t be used here for now (assumed undefined algorithm)" }, -{ "ER_WARN_VIEW_WITHOUT_KEY", 1355, "View being updated does not have complete key of underlying table in it" }, -{ "ER_VIEW_INVALID", 1356, "View \'%-.192s.%-.192s\' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them" }, -{ "ER_SP_NO_DROP_SP", 1357, "Can\'t drop or alter a %s from within another stored routine" }, -{ "ER_SP_GOTO_IN_HNDLR", 1358, "GOTO is not allowed in a stored procedure handler" }, -{ "ER_TRG_ALREADY_EXISTS", 1359, "Trigger already exists" }, -{ "ER_TRG_DOES_NOT_EXIST", 1360, "Trigger does not exist" }, -{ "ER_TRG_ON_VIEW_OR_TEMP_TABLE", 1361, "Trigger\'s \'%-.192s\' is view or temporary table" }, -{ "ER_TRG_CANT_CHANGE_ROW", 1362, "Updating of %s row is not allowed in %strigger" }, -{ "ER_TRG_NO_SUCH_ROW_IN_TRG", 1363, "There is no %s row in %s trigger" }, -{ "ER_NO_DEFAULT_FOR_FIELD", 1364, "Field \'%-.192s\' doesn\'t have a default value" }, -{ "ER_DIVISION_BY_ZERO", 1365, "Division by 0" }, -{ "ER_TRUNCATED_WRONG_VALUE_FOR_FIELD", 1366, "Incorrect %-.32s value: \'%-.128s\' for column \'%.192s\' at row %ld" }, -{ "ER_ILLEGAL_VALUE_FOR_TYPE", 1367, "Illegal %s \'%-.192s\' value found during parsing" }, -{ "ER_VIEW_NONUPD_CHECK", 1368, "CHECK OPTION on non-updatable view \'%-.192s.%-.192s\'" }, -{ "ER_VIEW_CHECK_FAILED", 1369, "CHECK OPTION failed \'%-.192s.%-.192s\'" }, -{ "ER_PROCACCESS_DENIED_ERROR", 1370, "%-.16s command denied to user \'%-.48s\'@\'%-.64s\' for routine \'%-.192s\'" }, -{ "ER_RELAY_LOG_FAIL", 1371, "Failed purging old relay logs: %s" }, -{ "ER_PASSWD_LENGTH", 1372, "Password hash should be a %d-digit hexadecimal number" }, -{ "ER_UNKNOWN_TARGET_BINLOG", 1373, "Target log not found in binlog index" }, -{ "ER_IO_ERR_LOG_INDEX_READ", 1374, "I/O error reading log index file" }, -{ "ER_BINLOG_PURGE_PROHIBITED", 1375, "Server configuration does not permit binlog purge" }, -{ "ER_FSEEK_FAIL", 1376, "Failed on fseek()" }, -{ "ER_BINLOG_PURGE_FATAL_ERR", 1377, "Fatal error during log purge" }, -{ "ER_LOG_IN_USE", 1378, "A purgeable log is in use, will not purge" }, -{ "ER_LOG_PURGE_UNKNOWN_ERR", 1379, "Unknown error during log purge" }, -{ "ER_RELAY_LOG_INIT", 1380, "Failed initializing relay log position: %s" }, -{ "ER_NO_BINARY_LOGGING", 1381, "You are not using binary logging" }, -{ "ER_RESERVED_SYNTAX", 1382, "The \'%-.64s\' syntax is reserved for purposes internal to the MySQL server" }, -{ "ER_WSAS_FAILED", 1383, "WSAStartup Failed" }, -{ "ER_DIFF_GROUPS_PROC", 1384, "Can\'t handle procedures with different groups yet" }, -{ "ER_NO_GROUP_FOR_PROC", 1385, "Select must have a group with this procedure" }, -{ "ER_ORDER_WITH_PROC", 1386, "Can\'t use ORDER clause with this procedure" }, -{ "ER_LOGGING_PROHIBIT_CHANGING_OF", 1387, "Binary logging and replication forbid changing the global server %s" }, -{ "ER_NO_FILE_MAPPING", 1388, "Can\'t map file: %-.200s, errno: %d" }, -{ "ER_WRONG_MAGIC", 1389, "Wrong magic in %-.64s" }, -{ "ER_PS_MANY_PARAM", 1390, "Prepared statement contains too many placeholders" }, -{ "ER_KEY_PART_0", 1391, "Key part \'%-.192s\' length cannot be 0" }, -{ "ER_VIEW_CHECKSUM", 1392, "View text checksum failed" }, -{ "ER_VIEW_MULTIUPDATE", 1393, "Can not modify more than one base table through a join view \'%-.192s.%-.192s\'" }, -{ "ER_VIEW_NO_INSERT_FIELD_LIST", 1394, "Can not insert into join view \'%-.192s.%-.192s\' without fields list" }, -{ "ER_VIEW_DELETE_MERGE_VIEW", 1395, "Can not delete from join view \'%-.192s.%-.192s\'" }, -{ "ER_CANNOT_USER", 1396, "Operation %s failed for %.256s" }, -{ "ER_XAER_NOTA", 1397, "XAER_NOTA: Unknown XID" }, -{ "ER_XAER_INVAL", 1398, "XAER_INVAL: Invalid arguments (or unsupported command)" }, -{ "ER_XAER_RMFAIL", 1399, "XAER_RMFAIL: The command cannot be executed when global transaction is in the %.64s state" }, -{ "ER_XAER_OUTSIDE", 1400, "XAER_OUTSIDE: Some work is done outside global transaction" }, -{ "ER_XAER_RMERR", 1401, "XAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistency" }, -{ "ER_XA_RBROLLBACK", 1402, "XA_RBROLLBACK: Transaction branch was rolled back" }, -{ "ER_NONEXISTING_PROC_GRANT", 1403, "There is no such grant defined for user \'%-.48s\' on host \'%-.64s\' on routine \'%-.192s\'" }, -{ "ER_PROC_AUTO_GRANT_FAIL", 1404, "Failed to grant EXECUTE and ALTER ROUTINE privileges" }, -{ "ER_PROC_AUTO_REVOKE_FAIL", 1405, "Failed to revoke all privileges to dropped routine" }, -{ "ER_DATA_TOO_LONG", 1406, "Data too long for column \'%s\' at row %ld" }, -{ "ER_SP_BAD_SQLSTATE", 1407, "Bad SQLSTATE: \'%s\'" }, -{ "ER_STARTUP", 1408, "%s: ready for connections.\nVersion: \'%s\' socket: \'%s\' port: %d %s" }, -{ "ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR", 1409, "Can\'t load value from file with fixed size rows to variable" }, -{ "ER_CANT_CREATE_USER_WITH_GRANT", 1410, "You are not allowed to create a user with GRANT" }, -{ "ER_WRONG_VALUE_FOR_TYPE", 1411, "Incorrect %-.32s value: \'%-.128s\' for function %-.32s" }, -{ "ER_TABLE_DEF_CHANGED", 1412, "Table definition has changed, please retry transaction" }, -{ "ER_SP_DUP_HANDLER", 1413, "Duplicate handler declared in the same block" }, -{ "ER_SP_NOT_VAR_ARG", 1414, "OUT or INOUT argument %d for routine %s is not a variable or NEW pseudo-variable in BEFORE trigger" }, -{ "ER_SP_NO_RETSET", 1415, "Not allowed to return a result set from a %s" }, -{ "ER_CANT_CREATE_GEOMETRY_OBJECT", 1416, "Cannot get geometry object from data you send to the GEOMETRY field" }, -{ "ER_FAILED_ROUTINE_BREAK_BINLOG", 1417, "A routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changes" }, -{ "ER_BINLOG_UNSAFE_ROUTINE", 1418, "This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)" }, -{ "ER_BINLOG_CREATE_ROUTINE_NEED_SUPER", 1419, "You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)" }, -{ "ER_EXEC_STMT_WITH_OPEN_CURSOR", 1420, "You can\'t execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute it." }, -{ "ER_STMT_HAS_NO_OPEN_CURSOR", 1421, "The statement (%lu) has no open cursor." }, -{ "ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG", 1422, "Explicit or implicit commit is not allowed in stored function or trigger." }, -{ "ER_NO_DEFAULT_FOR_VIEW_FIELD", 1423, "Field of view \'%-.192s.%-.192s\' underlying table doesn\'t have a default value" }, -{ "ER_SP_NO_RECURSION", 1424, "Recursive stored functions and triggers are not allowed." }, -{ "ER_TOO_BIG_SCALE", 1425, "Too big scale %d specified for column \'%-.192s\'. Maximum is %lu." }, -{ "ER_TOO_BIG_PRECISION", 1426, "Too big precision %d specified for column \'%-.192s\'. Maximum is %lu." }, -{ "ER_M_BIGGER_THAN_D", 1427, "For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column \'%-.192s\')." }, -{ "ER_WRONG_LOCK_OF_SYSTEM_TABLE", 1428, "You can\'t combine write-locking of system tables with other tables or lock types" }, -{ "ER_CONNECT_TO_FOREIGN_DATA_SOURCE", 1429, "Unable to connect to foreign data source: %.64s" }, -{ "ER_QUERY_ON_FOREIGN_DATA_SOURCE", 1430, "There was a problem processing the query on the foreign data source. Data source error: %-.64s" }, -{ "ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST", 1431, "The foreign data source you are trying to reference does not exist. Data source error: %-.64s" }, -{ "ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE", 1432, "Can\'t create federated table. The data source connection string \'%-.64s\' is not in the correct format" }, -{ "ER_FOREIGN_DATA_STRING_INVALID", 1433, "The data source connection string \'%-.64s\' is not in the correct format" }, -{ "ER_CANT_CREATE_FEDERATED_TABLE", 1434, "Can\'t create federated table. Foreign data src error: %-.64s" }, -{ "ER_TRG_IN_WRONG_SCHEMA", 1435, "Trigger in wrong schema" }, -{ "ER_STACK_OVERRUN_NEED_MORE", 1436, "Thread stack overrun: %ld bytes used of a %ld byte stack, and %ld bytes needed. Use \'mysqld --thread_stack=#\' to specify a bigger stack." }, -{ "ER_TOO_LONG_BODY", 1437, "Routine body for \'%-.100s\' is too long" }, -{ "ER_WARN_CANT_DROP_DEFAULT_KEYCACHE", 1438, "Cannot drop default keycache" }, -{ "ER_TOO_BIG_DISPLAYWIDTH", 1439, "Display width out of range for column \'%-.192s\' (max = %lu)" }, -{ "ER_XAER_DUPID", 1440, "XAER_DUPID: The XID already exists" }, -{ "ER_DATETIME_FUNCTION_OVERFLOW", 1441, "Datetime function: %-.32s field overflow" }, -{ "ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG", 1442, "Can\'t update table \'%-.192s\' in stored function/trigger because it is already used by statement which invoked this stored function/trigger." }, -{ "ER_VIEW_PREVENT_UPDATE", 1443, "The definition of table \'%-.192s\' prevents operation %.192s on table \'%-.192s\'." }, -{ "ER_PS_NO_RECURSION", 1444, "The prepared statement contains a stored routine call that refers to that same statement. It\'s not allowed to execute a prepared statement in such a recursive manner" }, -{ "ER_SP_CANT_SET_AUTOCOMMIT", 1445, "Not allowed to set autocommit from a stored function or trigger" }, -{ "ER_MALFORMED_DEFINER", 1446, "Definer is not fully qualified" }, -{ "ER_VIEW_FRM_NO_USER", 1447, "View \'%-.192s\'.\'%-.192s\' has no definer information (old table format). Current user is used as definer. Please recreate the view!" }, -{ "ER_VIEW_OTHER_USER", 1448, "You need the SUPER privilege for creation view with \'%-.192s\'@\'%-.192s\' definer" }, -{ "ER_NO_SUCH_USER", 1449, "The user specified as a definer (\'%-.64s\'@\'%-.64s\') does not exist" }, -{ "ER_FORBID_SCHEMA_CHANGE", 1450, "Changing schema from \'%-.192s\' to \'%-.192s\' is not allowed." }, -{ "ER_ROW_IS_REFERENCED_2", 1451, "Cannot delete or update a parent row: a foreign key constraint fails (%.192s)" }, -{ "ER_NO_REFERENCED_ROW_2", 1452, "Cannot add or update a child row: a foreign key constraint fails (%.192s)" }, -{ "ER_SP_BAD_VAR_SHADOW", 1453, "Variable \'%-.64s\' must be quoted with `...`, or renamed" }, -{ "ER_TRG_NO_DEFINER", 1454, "No definer attribute for trigger \'%-.192s\'.\'%-.192s\'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger." }, -{ "ER_OLD_FILE_FORMAT", 1455, "\'%-.192s\' has an old format, you should re-create the \'%s\' object(s)" }, -{ "ER_SP_RECURSION_LIMIT", 1456, "Recursive limit %d (as set by the max_sp_recursion_depth variable) was exceeded for routine %.192s" }, -{ "ER_SP_PROC_TABLE_CORRUPT", 1457, "Failed to load routine %-.192s. The table mysql.proc is missing, corrupt, or contains bad data (internal code %d)" }, -{ "ER_SP_WRONG_NAME", 1458, "Incorrect routine name \'%-.192s\'" }, -{ "ER_TABLE_NEEDS_UPGRADE", 1459, "Table upgrade required. Please do \"REPAIR TABLE `%-.32s`\" or dump/reload to fix it!" }, -{ "ER_SP_NO_AGGREGATE", 1460, "AGGREGATE is not supported for stored functions" }, -{ "ER_MAX_PREPARED_STMT_COUNT_REACHED", 1461, "Can\'t create more than max_prepared_stmt_count statements (current value: %lu)" }, -{ "ER_VIEW_RECURSIVE", 1462, "`%-.192s`.`%-.192s` contains view recursion" }, -{ "ER_NON_GROUPING_FIELD_USED", 1463, "non-grouping field \'%-.192s\' is used in %-.64s clause" }, -{ "ER_TABLE_CANT_HANDLE_SPKEYS", 1464, "The used table type doesn\'t support SPATIAL indexes" }, -{ "ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA", 1465, "Triggers can not be created on system tables" }, -{ "ER_REMOVED_SPACES", 1466, "Leading spaces are removed from name \'%s\'" }, -{ "ER_AUTOINC_READ_FAILED", 1467, "Failed to read auto-increment value from storage engine" }, -{ "ER_USERNAME", 1468, "user name" }, -{ "ER_HOSTNAME", 1469, "host name" }, -{ "ER_WRONG_STRING_LENGTH", 1470, "String \'%-.70s\' is too long for %s (should be no longer than %d)" }, -{ "ER_NON_INSERTABLE_TABLE", 1471, "The target table %-.100s of the %s is not insertable-into" }, -{ "ER_ADMIN_WRONG_MRG_TABLE", 1472, "Table \'%-.64s\' is differently defined or of non-MyISAM type or doesn\'t exist" }, -{ "ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT", 1473, "Too high level of nesting for select" }, -{ "ER_NAME_BECOMES_EMPTY", 1474, "Name \'%-.64s\' has become \'\'" }, -{ "ER_AMBIGUOUS_FIELD_TERM", 1475, "First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY" }, -{ "ER_FOREIGN_SERVER_EXISTS", 1476, "The foreign server, %s, you are trying to create already exists." }, -{ "ER_FOREIGN_SERVER_DOESNT_EXIST", 1477, "The foreign server name you are trying to reference does not exist. Data source error: %-.64s" }, -{ "ER_ILLEGAL_HA_CREATE_OPTION", 1478, "Table storage engine \'%-.64s\' does not support the create option \'%.64s\'" }, -{ "ER_PARTITION_REQUIRES_VALUES_ERROR", 1479, "Syntax error: %-.64s PARTITIONING requires definition of VALUES %-.64s for each partition" }, -{ "ER_PARTITION_WRONG_VALUES_ERROR", 1480, "Only %-.64s PARTITIONING can use VALUES %-.64s in partition definition" }, -{ "ER_PARTITION_MAXVALUE_ERROR", 1481, "MAXVALUE can only be used in last partition definition" }, -{ "ER_PARTITION_SUBPARTITION_ERROR", 1482, "Subpartitions can only be hash partitions and by key" }, -{ "ER_PARTITION_SUBPART_MIX_ERROR", 1483, "Must define subpartitions on all partitions if on one partition" }, -{ "ER_PARTITION_WRONG_NO_PART_ERROR", 1484, "Wrong number of partitions defined, mismatch with previous setting" }, -{ "ER_PARTITION_WRONG_NO_SUBPART_ERROR", 1485, "Wrong number of subpartitions defined, mismatch with previous setting" }, -{ "ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR", 1486, "Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed" }, -{ "ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR", 1487, "Expression in RANGE/LIST VALUES must be constant" }, -{ "ER_FIELD_NOT_FOUND_PART_ERROR", 1488, "Field in list of fields for partition function not found in table" }, -{ "ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR", 1489, "List of fields is only allowed in KEY partitions" }, -{ "ER_INCONSISTENT_PARTITION_INFO_ERROR", 1490, "The partition info in the frm file is not consistent with what can be written into the frm file" }, -{ "ER_PARTITION_FUNC_NOT_ALLOWED_ERROR", 1491, "The %-.192s function returns the wrong type" }, -{ "ER_PARTITIONS_MUST_BE_DEFINED_ERROR", 1492, "For %-.64s partitions each partition must be defined" }, -{ "ER_RANGE_NOT_INCREASING_ERROR", 1493, "VALUES LESS THAN value must be strictly increasing for each partition" }, -{ "ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR", 1494, "VALUES value must be of same type as partition function" }, -{ "ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR", 1495, "Multiple definition of same constant in list partitioning" }, -{ "ER_PARTITION_ENTRY_ERROR", 1496, "Partitioning can not be used stand-alone in query" }, -{ "ER_MIX_HANDLER_ERROR", 1497, "The mix of handlers in the partitions is not allowed in this version of MySQL" }, -{ "ER_PARTITION_NOT_DEFINED_ERROR", 1498, "For the partitioned engine it is necessary to define all %-.64s" }, -{ "ER_TOO_MANY_PARTITIONS_ERROR", 1499, "Too many partitions (including subpartitions) were defined" }, -{ "ER_SUBPARTITION_ERROR", 1500, "It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning" }, -{ "ER_CANT_CREATE_HANDLER_FILE", 1501, "Failed to create specific handler file" }, -{ "ER_BLOB_FIELD_IN_PART_FUNC_ERROR", 1502, "A BLOB field is not allowed in partition function" }, -{ "ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF", 1503, "A %-.192s must include all columns in the table\'s partitioning function" }, -{ "ER_NO_PARTS_ERROR", 1504, "Number of %-.64s = 0 is not an allowed value" }, -{ "ER_PARTITION_MGMT_ON_NONPARTITIONED", 1505, "Partition management on a not partitioned table is not possible" }, -{ "ER_FOREIGN_KEY_ON_PARTITIONED", 1506, "Foreign key clause is not yet supported in conjunction with partitioning" }, -{ "ER_DROP_PARTITION_NON_EXISTENT", 1507, "Error in list of partitions to %-.64s" }, -{ "ER_DROP_LAST_PARTITION", 1508, "Cannot remove all partitions, use DROP TABLE instead" }, -{ "ER_COALESCE_ONLY_ON_HASH_PARTITION", 1509, "COALESCE PARTITION can only be used on HASH/KEY partitions" }, -{ "ER_REORG_HASH_ONLY_ON_SAME_NO", 1510, "REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers" }, -{ "ER_REORG_NO_PARAM_ERROR", 1511, "REORGANIZE PARTITION without parameters can only be used on auto-partitioned tables using HASH PARTITIONs" }, -{ "ER_ONLY_ON_RANGE_LIST_PARTITION", 1512, "%-.64s PARTITION can only be used on RANGE/LIST partitions" }, -{ "ER_ADD_PARTITION_SUBPART_ERROR", 1513, "Trying to Add partition(s) with wrong number of subpartitions" }, -{ "ER_ADD_PARTITION_NO_NEW_PARTITION", 1514, "At least one partition must be added" }, -{ "ER_COALESCE_PARTITION_NO_PARTITION", 1515, "At least one partition must be coalesced" }, -{ "ER_REORG_PARTITION_NOT_EXIST", 1516, "More partitions to reorganize than there are partitions" }, -{ "ER_SAME_NAME_PARTITION", 1517, "Duplicate partition name %-.192s" }, -{ "ER_NO_BINLOG_ERROR", 1518, "It is not allowed to shut off binlog on this command" }, -{ "ER_CONSECUTIVE_REORG_PARTITIONS", 1519, "When reorganizing a set of partitions they must be in consecutive order" }, -{ "ER_REORG_OUTSIDE_RANGE", 1520, "Reorganize of range partitions cannot change total ranges except for last partition where it can extend the range" }, -{ "ER_PARTITION_FUNCTION_FAILURE", 1521, "Partition function not supported in this version for this handler" }, -{ "ER_PART_STATE_ERROR", 1522, "Partition state cannot be defined from CREATE/ALTER TABLE" }, -{ "ER_LIMITED_PART_RANGE", 1523, "The %-.64s handler only supports 32 bit integers in VALUES" }, -{ "ER_PLUGIN_IS_NOT_LOADED", 1524, "Plugin \'%-.192s\' is not loaded" }, -{ "ER_WRONG_VALUE", 1525, "Incorrect %-.32s value: \'%-.128s\'" }, -{ "ER_NO_PARTITION_FOR_GIVEN_VALUE", 1526, "Table has no partition for value %-.64s" }, -{ "ER_FILEGROUP_OPTION_ONLY_ONCE", 1527, "It is not allowed to specify %s more than once" }, -{ "ER_CREATE_FILEGROUP_FAILED", 1528, "Failed to create %s" }, -{ "ER_DROP_FILEGROUP_FAILED", 1529, "Failed to drop %s" }, -{ "ER_TABLESPACE_AUTO_EXTEND_ERROR", 1530, "The handler doesn\'t support autoextend of tablespaces" }, -{ "ER_WRONG_SIZE_NUMBER", 1531, "A size parameter was incorrectly specified, either number or on the form 10M" }, -{ "ER_SIZE_OVERFLOW_ERROR", 1532, "The size number was correct but we don\'t allow the digit part to be more than 2 billion" }, -{ "ER_ALTER_FILEGROUP_FAILED", 1533, "Failed to alter: %s" }, -{ "ER_BINLOG_ROW_LOGGING_FAILED", 1534, "Writing one row to the row-based binary log failed" }, -{ "ER_BINLOG_ROW_WRONG_TABLE_DEF", 1535, "Table definition on master and slave does not match: %s" }, -{ "ER_BINLOG_ROW_RBR_TO_SBR", 1536, "Slave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log events" }, -{ "ER_EVENT_ALREADY_EXISTS", 1537, "Event \'%-.192s\' already exists" }, -{ "ER_EVENT_STORE_FAILED", 1538, "Failed to store event %s. Error code %d from storage engine." }, -{ "ER_EVENT_DOES_NOT_EXIST", 1539, "Unknown event \'%-.192s\'" }, -{ "ER_EVENT_CANT_ALTER", 1540, "Failed to alter event \'%-.192s\'" }, -{ "ER_EVENT_DROP_FAILED", 1541, "Failed to drop %s" }, -{ "ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG", 1542, "INTERVAL is either not positive or too big" }, -{ "ER_EVENT_ENDS_BEFORE_STARTS", 1543, "ENDS is either invalid or before STARTS" }, -{ "ER_EVENT_EXEC_TIME_IN_THE_PAST", 1544, "Event execution time is in the past. Event has been disabled" }, -{ "ER_EVENT_OPEN_TABLE_FAILED", 1545, "Failed to open mysql.event" }, -{ "ER_EVENT_NEITHER_M_EXPR_NOR_M_AT", 1546, "No datetime expression provided" }, -{ "ER_COL_COUNT_DOESNT_MATCH_CORRUPTED", 1547, "Column count of mysql.%s is wrong. Expected %d, found %d. The table is probably corrupted" }, -{ "ER_CANNOT_LOAD_FROM_TABLE", 1548, "Cannot load from mysql.%s. The table is probably corrupted" }, -{ "ER_EVENT_CANNOT_DELETE", 1549, "Failed to delete the event from mysql.event" }, -{ "ER_EVENT_COMPILE_ERROR", 1550, "Error during compilation of event\'s body" }, -{ "ER_EVENT_SAME_NAME", 1551, "Same old and new event name" }, -{ "ER_EVENT_DATA_TOO_LONG", 1552, "Data for column \'%s\' too long" }, -{ "ER_DROP_INDEX_FK", 1553, "Cannot drop index \'%-.192s\': needed in a foreign key constraint" }, -{ "ER_WARN_DEPRECATED_SYNTAX_WITH_VER", 1554, "The syntax \'%s\' is deprecated and will be removed in MySQL %s. Please use %s instead" }, -{ "ER_CANT_WRITE_LOCK_LOG_TABLE", 1555, "You can\'t write-lock a log table. Only read access is possible" }, -{ "ER_CANT_LOCK_LOG_TABLE", 1556, "You can\'t use locks with log tables." }, -{ "ER_FOREIGN_DUPLICATE_KEY", 1557, "Upholding foreign key constraints for table \'%.192s\', entry \'%-.192s\', key %d would lead to a duplicate entry" }, -{ "ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE", 1558, "Column count of mysql.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d. Please use mysql_upgrade to fix this error." }, -{ "ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR", 1559, "Cannot switch out of the row-based binary log format when the session has open temporary tables" }, -{ "ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT", 1560, "Cannot change the binary logging format inside a stored function or trigger" }, -{ "ER_NDB_CANT_SWITCH_BINLOG_FORMAT", 1561, "The NDB cluster engine does not support changing the binlog format on the fly yet" }, -{ "ER_PARTITION_NO_TEMPORARY", 1562, "Cannot create temporary table with partitions" }, -{ "ER_PARTITION_CONST_DOMAIN_ERROR", 1563, "Partition constant is out of partition function domain" }, -{ "ER_PARTITION_FUNCTION_IS_NOT_ALLOWED", 1564, "This partition function is not allowed" }, -{ "ER_DDL_LOG_ERROR", 1565, "Error in DDL log" }, -{ "ER_NULL_IN_VALUES_LESS_THAN", 1566, "Not allowed to use NULL value in VALUES LESS THAN" }, -{ "ER_WRONG_PARTITION_NAME", 1567, "Incorrect partition name" }, -{ "ER_CANT_CHANGE_TX_ISOLATION", 1568, "Transaction isolation level can\'t be changed while a transaction is in progress" }, -{ "ER_DUP_ENTRY_AUTOINCREMENT_CASE", 1569, "ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry \'%-.192s\' for key \'%-.192s\'" }, -{ "ER_EVENT_MODIFY_QUEUE_ERROR", 1570, "Internal scheduler error %d" }, -{ "ER_EVENT_SET_VAR_ERROR", 1571, "Error during starting/stopping of the scheduler. Error code %u" }, -{ "ER_PARTITION_MERGE_ERROR", 1572, "Engine cannot be used in partitioned tables" }, -{ "ER_CANT_ACTIVATE_LOG", 1573, "Cannot activate \'%-.64s\' log" }, -{ "ER_RBR_NOT_AVAILABLE", 1574, "The server was not built with row-based replication" }, -{ "ER_BASE64_DECODE_ERROR", 1575, "Decoding of base64 string failed" }, -{ "ER_EVENT_RECURSION_FORBIDDEN", 1576, "Recursion of EVENT DDL statements is forbidden when body is present" }, -{ "ER_EVENTS_DB_ERROR", 1577, "Cannot proceed because system tables used by Event Scheduler were found damaged at server start" }, -{ "ER_ONLY_INTEGERS_ALLOWED", 1578, "Only integers allowed as number here" }, -{ "ER_UNSUPORTED_LOG_ENGINE", 1579, "This storage engine cannot be used for log tables\"" }, -{ "ER_BAD_LOG_STATEMENT", 1580, "You cannot \'%s\' a log table if logging is enabled" }, -{ "ER_CANT_RENAME_LOG_TABLE", 1581, "Cannot rename \'%s\'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to \'%s\'" }, -{ "ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT", 1582, "Incorrect parameter count in the call to native function \'%-.192s\'" }, -{ "ER_WRONG_PARAMETERS_TO_NATIVE_FCT", 1583, "Incorrect parameters in the call to native function \'%-.192s\'" }, -{ "ER_WRONG_PARAMETERS_TO_STORED_FCT", 1584, "Incorrect parameters in the call to stored function \'%-.192s\'" }, -{ "ER_NATIVE_FCT_NAME_COLLISION", 1585, "This function \'%-.192s\' has the same name as a native function" }, -{ "ER_DUP_ENTRY_WITH_KEY_NAME", 1586, "Duplicate entry \'%-.64s\' for key \'%-.192s\'" }, -{ "ER_BINLOG_PURGE_EMFILE", 1587, "Too many files opened, please execute the command again" }, -{ "ER_EVENT_CANNOT_CREATE_IN_THE_PAST", 1588, "Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation." }, -{ "ER_EVENT_CANNOT_ALTER_IN_THE_PAST", 1589, "Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation." }, -{ "ER_SLAVE_INCIDENT", 1590, "The incident %s occured on the master. Message: %-.64s" }, -{ "ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT", 1591, "Table has no partition for some existing values" }, -{ "ER_BINLOG_UNSAFE_STATEMENT", 1592, "Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. %s" }, -{ "ER_SLAVE_FATAL_ERROR", 1593, "Fatal error: %s" }, -{ "ER_SLAVE_RELAY_LOG_READ_FAILURE", 1594, "Relay log read failure: %s" }, -{ "ER_SLAVE_RELAY_LOG_WRITE_FAILURE", 1595, "Relay log write failure: %s" }, -{ "ER_SLAVE_CREATE_EVENT_FAILURE", 1596, "Failed to create %s" }, -{ "ER_SLAVE_MASTER_COM_FAILURE", 1597, "Master command %s failed: %s" }, -{ "ER_BINLOG_LOGGING_IMPOSSIBLE", 1598, "Binary logging not possible. Message: %s" }, -{ "ER_VIEW_NO_CREATION_CTX", 1599, "View `%-.64s`.`%-.64s` has no creation context" }, -{ "ER_VIEW_INVALID_CREATION_CTX", 1600, "Creation context of view `%-.64s`.`%-.64s\' is invalid" }, -{ "ER_SR_INVALID_CREATION_CTX", 1601, "Creation context of stored routine `%-.64s`.`%-.64s` is invalid" }, -{ "ER_TRG_CORRUPTED_FILE", 1602, "Corrupted TRG file for table `%-.64s`.`%-.64s`" }, -{ "ER_TRG_NO_CREATION_CTX", 1603, "Triggers for table `%-.64s`.`%-.64s` have no creation context" }, -{ "ER_TRG_INVALID_CREATION_CTX", 1604, "Trigger creation context of table `%-.64s`.`%-.64s` is invalid" }, -{ "ER_EVENT_INVALID_CREATION_CTX", 1605, "Creation context of event `%-.64s`.`%-.64s` is invalid" }, -{ "ER_TRG_CANT_OPEN_TABLE", 1606, "Cannot open table for trigger `%-.64s`.`%-.64s`" }, -{ "ER_CANT_CREATE_SROUTINE", 1607, "Cannot create stored routine `%-.64s`. Check warnings" }, -{ "ER_NEVER_USED", 1608, "Ambiguous slave modes combination. %s" }, -{ "ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT", 1609, "The BINLOG statement of type `%s` was not preceded by a format description BINLOG statement." }, -{ "ER_SLAVE_CORRUPT_EVENT", 1610, "Corrupted replication event was detected" }, -{ "ER_LOAD_DATA_INVALID_COLUMN", 1611, "Invalid column reference (%-.64s) in LOAD DATA" }, -{ "ER_LOG_PURGE_NO_FILE", 1612, "Being purged log %s was not found" }, -{ "ER_XA_RBTIMEOUT", 1613, "XA_RBTIMEOUT: Transaction branch was rolled back: took too long" }, -{ "ER_XA_RBDEADLOCK", 1614, "XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected" }, -{ "ER_NEED_REPREPARE", 1615, "Prepared statement needs to be re-prepared" }, -{ "ER_DELAYED_NOT_SUPPORTED", 1616, "DELAYED option not supported for table \'%-.192s\'" }, -{ "WARN_NO_MASTER_INFO", 1617, "The master info structure does not exist" }, -{ "WARN_OPTION_IGNORED", 1618, "<%-.64s> option ignored" }, -{ "WARN_PLUGIN_DELETE_BUILTIN", 1619, "Built-in plugins cannot be deleted" }, -{ "WARN_PLUGIN_BUSY", 1620, "Plugin is busy and will be uninstalled on shutdown" }, -{ "ER_VARIABLE_IS_READONLY", 1621, "%s variable \'%s\' is read-only. Use SET %s to assign the value" }, -{ "ER_WARN_ENGINE_TRANSACTION_ROLLBACK", 1622, "Storage engine %s does not support rollback for this statement. Transaction rolled back and must be restarted" }, -{ "ER_SLAVE_HEARTBEAT_FAILURE", 1623, "Unexpected master\'s heartbeat data: %s" }, -{ "ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE", 1624, "The requested value for the heartbeat period is either negative or exceeds the maximum allowed (%s seconds)." }, -{ "ER_NDB_REPLICATION_SCHEMA_ERROR", 1625, "Bad schema for mysql.ndb_replication table. Message: %-.64s" }, -{ "ER_CONFLICT_FN_PARSE_ERROR", 1626, "Error in parsing conflict function. Message: %-.64s" }, -{ "ER_EXCEPTIONS_WRITE_ERROR", 1627, "Write to exceptions table failed. Message: %-.128s\"" }, -{ "ER_TOO_LONG_TABLE_COMMENT", 1628, "Comment for table \'%-.64s\' is too long (max = %lu)" }, -{ "ER_TOO_LONG_FIELD_COMMENT", 1629, "Comment for field \'%-.64s\' is too long (max = %lu)" }, -{ "ER_FUNC_INEXISTENT_NAME_COLLISION", 1630, "FUNCTION %s does not exist. Check the \'Function Name Parsing and Resolution\' section in the Reference Manual" }, -{ "ER_DATABASE_NAME", 1631, "Database" }, -{ "ER_TABLE_NAME", 1632, "Table" }, -{ "ER_PARTITION_NAME", 1633, "Partition" }, -{ "ER_SUBPARTITION_NAME", 1634, "Subpartition" }, -{ "ER_TEMPORARY_NAME", 1635, "Temporary" }, -{ "ER_RENAMED_NAME", 1636, "Renamed" }, -{ "ER_TOO_MANY_CONCURRENT_TRXS", 1637, "Too many active concurrent transactions" }, -{ "WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED", 1638, "Non-ASCII separator arguments are not fully supported" }, -{ "ER_DEBUG_SYNC_TIMEOUT", 1639, "debug sync point wait timed out" }, -{ "ER_DEBUG_SYNC_HIT_LIMIT", 1640, "debug sync point hit limit reached" }, -{ "ER_DUP_SIGNAL_SET", 1641, "Duplicate condition information item \'%s\'" }, -{ "ER_SIGNAL_WARN", 1642, "Unhandled user-defined warning condition" }, -{ "ER_SIGNAL_NOT_FOUND", 1643, "Unhandled user-defined not found condition" }, -{ "ER_SIGNAL_EXCEPTION", 1644, "Unhandled user-defined exception condition" }, -{ "ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER", 1645, "RESIGNAL when handler not active" }, -{ "ER_SIGNAL_BAD_CONDITION_TYPE", 1646, "SIGNAL/RESIGNAL can only use a CONDITION defined with SQLSTATE" }, -{ "WARN_COND_ITEM_TRUNCATED", 1647, "Data truncated for condition item \'%s\'" }, -{ "ER_COND_ITEM_TOO_LONG", 1648, "Data too long for condition item \'%s\'" }, -{ "ER_UNKNOWN_LOCALE", 1649, "Unknown locale: \'%-.64s\'" }, -{ "ER_SLAVE_IGNORE_SERVER_IDS", 1650, "The requested server id %d clashes with the slave startup option --replicate-same-server-id" }, -{ "ER_QUERY_CACHE_DISABLED", 1651, "Query cache is disabled; restart the server with query_cache_type=1 to enable it" }, -{ "ER_SAME_NAME_PARTITION_FIELD", 1652, "Duplicate partition field name \'%-.192s\'" }, -{ "ER_PARTITION_COLUMN_LIST_ERROR", 1653, "Inconsistency in usage of column lists for partitioning" }, -{ "ER_WRONG_TYPE_COLUMN_VALUE_ERROR", 1654, "Partition column values of incorrect type" }, -{ "ER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR", 1655, "Too many fields in \'%-.192s\'" }, -{ "ER_MAXVALUE_IN_VALUES_IN", 1656, "Cannot use MAXVALUE as value in VALUES IN" }, -{ "ER_TOO_MANY_VALUES_ERROR", 1657, "Cannot have more than one value for this type of %-.64s partitioning" }, -{ "ER_ROW_SINGLE_PARTITION_FIELD_ERROR", 1658, "Row expressions in VALUES IN only allowed for multi-field column partitioning" }, -{ "ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD", 1659, "Field \'%-.192s\' is of a not allowed type for this type of partitioning" }, -{ "ER_PARTITION_FIELDS_TOO_LONG", 1660, "The total length of the partitioning fields is too large" }, -{ "ER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE", 1661, "Cannot execute statement: impossible to write to binary log since both row-incapable engines and statement-incapable engines are involved." }, -{ "ER_BINLOG_ROW_MODE_AND_STMT_ENGINE", 1662, "Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = ROW and at least one table uses a storage engine limited to statement-based logging." }, -{ "ER_BINLOG_UNSAFE_AND_STMT_ENGINE", 1663, "Cannot execute statement: impossible to write to binary log since statement is unsafe, storage engine is limited to statement-based logging, and BINLOG_FORMAT = MIXED. %s" }, -{ "ER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE", 1664, "Cannot execute statement: impossible to write to binary log since statement is in row format and at least one table uses a storage engine limited to statement-based logging." }, -{ "ER_BINLOG_STMT_MODE_AND_ROW_ENGINE", 1665, "Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.%s" }, -{ "ER_BINLOG_ROW_INJECTION_AND_STMT_MODE", 1666, "Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOG_FORMAT = STATEMENT." }, -{ "ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE", 1667, "Cannot execute statement: impossible to write to binary log since more than one engine is involved and at least one engine is self-logging." }, -{ "ER_BINLOG_UNSAFE_LIMIT", 1668, "The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted." }, -{ "ER_BINLOG_UNSAFE_INSERT_DELAYED", 1669, "The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted." }, -{ "ER_BINLOG_UNSAFE_SYSTEM_TABLE", 1670, "The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves." }, -{ "ER_BINLOG_UNSAFE_AUTOINC_COLUMNS", 1671, "Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly." }, -{ "ER_BINLOG_UNSAFE_UDF", 1672, "Statement is unsafe because it uses a UDF which may not return the same value on the slave." }, -{ "ER_BINLOG_UNSAFE_SYSTEM_VARIABLE", 1673, "Statement is unsafe because it uses a system variable that may have a different value on the slave." }, -{ "ER_BINLOG_UNSAFE_SYSTEM_FUNCTION", 1674, "Statement is unsafe because it uses a system function that may return a different value on the slave." }, -{ "ER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS", 1675, "Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction." }, -{ "ER_MESSAGE_AND_STATEMENT", 1676, "%s Statement: %s" }, -{ "ER_SLAVE_CONVERSION_FAILED", 1677, "Column %d of table \'%-.192s.%-.192s\' cannot be converted from type \'%-.32s\' to type \'%-.32s\'" }, -{ "ER_SLAVE_CANT_CREATE_CONVERSION", 1678, "Can\'t create conversion table for table \'%-.192s.%-.192s\'" }, -{ "ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT", 1679, "Cannot modify @@session.binlog_format inside a transaction" }, -{ "ER_PATH_LENGTH", 1680, "The path specified for %.64s is too long." }, -{ "ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT", 1681, "The syntax \'%s\' is deprecated and will be removed in MySQL %s." }, -{ "ER_WRONG_NATIVE_TABLE_STRUCTURE", 1682, "Native table \'%-.64s\'.\'%-.64s\' has the wrong structure" }, -{ "ER_WRONG_PERFSCHEMA_USAGE", 1683, "Invalid performance_schema usage." }, -{ "ER_WARN_I_S_SKIPPED_TABLE", 1684, "Table \'%s\'.\'%s\' was skipped since its definition is being modified by concurrent DDL statement" }, -{ "ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT", 1685, "Cannot modify @@session.binlog_direct_non_transactional_updates inside a transaction" }, -{ "ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT", 1686, "Cannot change the binlog direct flag inside a stored function or trigger" }, -{ "ER_SPATIAL_MUST_HAVE_GEOM_COL", 1687, "A SPATIAL index may only contain a geometrical type column" }, -{ "ER_TOO_LONG_INDEX_COMMENT", 1688, "Comment for index \'%-.64s\' is too long (max = %lu)" }, -{ "ER_LOCK_ABORTED", 1689, "Wait on a lock was aborted due to a pending exclusive lock" }, -{ "ER_DATA_OUT_OF_RANGE", 1690, "%s value is out of range in \'%s\'" }, -{ "ER_WRONG_SPVAR_TYPE_IN_LIMIT", 1691, "A variable of a non-integer type in LIMIT clause" }, -{ "ER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE", 1692, "Mixing self-logging and non-self-logging engines in a statement is unsafe." }, -{ "ER_BINLOG_UNSAFE_MIXED_STATEMENT", 1693, "Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them." }, -{ "ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN", 1694, "Cannot modify @@session.sql_log_bin inside a transaction" }, -{ "ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN", 1695, "Cannot change the sql_log_bin inside a stored function or trigger" }, -{ "ER_FAILED_READ_FROM_PAR_FILE", 1696, "Failed to read from the .par file" }, -{ "ER_VALUES_IS_NOT_INT_TYPE_ERROR", 1697, "VALUES value for partition \'%-.64s\' must have type INT" }, -{ "ER_ACCESS_DENIED_NO_PASSWORD_ERROR", 1698, "Access denied for user \'%-.48s\'@\'%-.64s\'" }, -{ "ER_SET_PASSWORD_AUTH_PLUGIN", 1699, "SET PASSWORD has no significance for users authenticating via plugins" }, -{ "ER_GRANT_PLUGIN_USER_EXISTS", 1700, "GRANT with IDENTIFIED WITH is illegal because the user %-.*s already exists" }, -{ "ER_TRUNCATE_ILLEGAL_FK", 1701, "Cannot truncate a table referenced in a foreign key constraint (%.192s)" }, -{ "ER_PLUGIN_IS_PERMANENT", 1702, "Plugin \'%s\' is force_plus_permanent and can not be unloaded" }, -{ "ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN", 1703, "The requested value for the heartbeat period is less than 1 millisecond. The value is reset to 0, meaning that heartbeating will effectively be disabled." }, -{ "ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX", 1704, "The requested value for the heartbeat period exceeds the value of `slave_net_timeout\' seconds. A sensible value for the period should be less than the timeout." }, -{ "ER_STMT_CACHE_FULL", 1705, "Multi-row statements required more than \'max_binlog_stmt_cache_size\' bytes of storage; increase this mysqld variable and try again" }, diff --git a/deps/mysqllite/include/mysqld_error.h b/deps/mysqllite/include/mysqld_error.h deleted file mode 100644 index b886241cfb4fc5..00000000000000 --- a/deps/mysqllite/include/mysqld_error.h +++ /dev/null @@ -1,710 +0,0 @@ -/* Autogenerated file, please don't edit */ - -#define ER_ERROR_FIRST 1000 -#define ER_HASHCHK 1000 -#define ER_NISAMCHK 1001 -#define ER_NO 1002 -#define ER_YES 1003 -#define ER_CANT_CREATE_FILE 1004 -#define ER_CANT_CREATE_TABLE 1005 -#define ER_CANT_CREATE_DB 1006 -#define ER_DB_CREATE_EXISTS 1007 -#define ER_DB_DROP_EXISTS 1008 -#define ER_DB_DROP_DELETE 1009 -#define ER_DB_DROP_RMDIR 1010 -#define ER_CANT_DELETE_FILE 1011 -#define ER_CANT_FIND_SYSTEM_REC 1012 -#define ER_CANT_GET_STAT 1013 -#define ER_CANT_GET_WD 1014 -#define ER_CANT_LOCK 1015 -#define ER_CANT_OPEN_FILE 1016 -#define ER_FILE_NOT_FOUND 1017 -#define ER_CANT_READ_DIR 1018 -#define ER_CANT_SET_WD 1019 -#define ER_CHECKREAD 1020 -#define ER_DISK_FULL 1021 -#define ER_DUP_KEY 1022 -#define ER_ERROR_ON_CLOSE 1023 -#define ER_ERROR_ON_READ 1024 -#define ER_ERROR_ON_RENAME 1025 -#define ER_ERROR_ON_WRITE 1026 -#define ER_FILE_USED 1027 -#define ER_FILSORT_ABORT 1028 -#define ER_FORM_NOT_FOUND 1029 -#define ER_GET_ERRNO 1030 -#define ER_ILLEGAL_HA 1031 -#define ER_KEY_NOT_FOUND 1032 -#define ER_NOT_FORM_FILE 1033 -#define ER_NOT_KEYFILE 1034 -#define ER_OLD_KEYFILE 1035 -#define ER_OPEN_AS_READONLY 1036 -#define ER_OUTOFMEMORY 1037 -#define ER_OUT_OF_SORTMEMORY 1038 -#define ER_UNEXPECTED_EOF 1039 -#define ER_CON_COUNT_ERROR 1040 -#define ER_OUT_OF_RESOURCES 1041 -#define ER_BAD_HOST_ERROR 1042 -#define ER_HANDSHAKE_ERROR 1043 -#define ER_DBACCESS_DENIED_ERROR 1044 -#define ER_ACCESS_DENIED_ERROR 1045 -#define ER_NO_DB_ERROR 1046 -#define ER_UNKNOWN_COM_ERROR 1047 -#define ER_BAD_NULL_ERROR 1048 -#define ER_BAD_DB_ERROR 1049 -#define ER_TABLE_EXISTS_ERROR 1050 -#define ER_BAD_TABLE_ERROR 1051 -#define ER_NON_UNIQ_ERROR 1052 -#define ER_SERVER_SHUTDOWN 1053 -#define ER_BAD_FIELD_ERROR 1054 -#define ER_WRONG_FIELD_WITH_GROUP 1055 -#define ER_WRONG_GROUP_FIELD 1056 -#define ER_WRONG_SUM_SELECT 1057 -#define ER_WRONG_VALUE_COUNT 1058 -#define ER_TOO_LONG_IDENT 1059 -#define ER_DUP_FIELDNAME 1060 -#define ER_DUP_KEYNAME 1061 -#define ER_DUP_ENTRY 1062 -#define ER_WRONG_FIELD_SPEC 1063 -#define ER_PARSE_ERROR 1064 -#define ER_EMPTY_QUERY 1065 -#define ER_NONUNIQ_TABLE 1066 -#define ER_INVALID_DEFAULT 1067 -#define ER_MULTIPLE_PRI_KEY 1068 -#define ER_TOO_MANY_KEYS 1069 -#define ER_TOO_MANY_KEY_PARTS 1070 -#define ER_TOO_LONG_KEY 1071 -#define ER_KEY_COLUMN_DOES_NOT_EXITS 1072 -#define ER_BLOB_USED_AS_KEY 1073 -#define ER_TOO_BIG_FIELDLENGTH 1074 -#define ER_WRONG_AUTO_KEY 1075 -#define ER_READY 1076 -#define ER_NORMAL_SHUTDOWN 1077 -#define ER_GOT_SIGNAL 1078 -#define ER_SHUTDOWN_COMPLETE 1079 -#define ER_FORCING_CLOSE 1080 -#define ER_IPSOCK_ERROR 1081 -#define ER_NO_SUCH_INDEX 1082 -#define ER_WRONG_FIELD_TERMINATORS 1083 -#define ER_BLOBS_AND_NO_TERMINATED 1084 -#define ER_TEXTFILE_NOT_READABLE 1085 -#define ER_FILE_EXISTS_ERROR 1086 -#define ER_LOAD_INFO 1087 -#define ER_ALTER_INFO 1088 -#define ER_WRONG_SUB_KEY 1089 -#define ER_CANT_REMOVE_ALL_FIELDS 1090 -#define ER_CANT_DROP_FIELD_OR_KEY 1091 -#define ER_INSERT_INFO 1092 -#define ER_UPDATE_TABLE_USED 1093 -#define ER_NO_SUCH_THREAD 1094 -#define ER_KILL_DENIED_ERROR 1095 -#define ER_NO_TABLES_USED 1096 -#define ER_TOO_BIG_SET 1097 -#define ER_NO_UNIQUE_LOGFILE 1098 -#define ER_TABLE_NOT_LOCKED_FOR_WRITE 1099 -#define ER_TABLE_NOT_LOCKED 1100 -#define ER_BLOB_CANT_HAVE_DEFAULT 1101 -#define ER_WRONG_DB_NAME 1102 -#define ER_WRONG_TABLE_NAME 1103 -#define ER_TOO_BIG_SELECT 1104 -#define ER_UNKNOWN_ERROR 1105 -#define ER_UNKNOWN_PROCEDURE 1106 -#define ER_WRONG_PARAMCOUNT_TO_PROCEDURE 1107 -#define ER_WRONG_PARAMETERS_TO_PROCEDURE 1108 -#define ER_UNKNOWN_TABLE 1109 -#define ER_FIELD_SPECIFIED_TWICE 1110 -#define ER_INVALID_GROUP_FUNC_USE 1111 -#define ER_UNSUPPORTED_EXTENSION 1112 -#define ER_TABLE_MUST_HAVE_COLUMNS 1113 -#define ER_RECORD_FILE_FULL 1114 -#define ER_UNKNOWN_CHARACTER_SET 1115 -#define ER_TOO_MANY_TABLES 1116 -#define ER_TOO_MANY_FIELDS 1117 -#define ER_TOO_BIG_ROWSIZE 1118 -#define ER_STACK_OVERRUN 1119 -#define ER_WRONG_OUTER_JOIN 1120 -#define ER_NULL_COLUMN_IN_INDEX 1121 -#define ER_CANT_FIND_UDF 1122 -#define ER_CANT_INITIALIZE_UDF 1123 -#define ER_UDF_NO_PATHS 1124 -#define ER_UDF_EXISTS 1125 -#define ER_CANT_OPEN_LIBRARY 1126 -#define ER_CANT_FIND_DL_ENTRY 1127 -#define ER_FUNCTION_NOT_DEFINED 1128 -#define ER_HOST_IS_BLOCKED 1129 -#define ER_HOST_NOT_PRIVILEGED 1130 -#define ER_PASSWORD_ANONYMOUS_USER 1131 -#define ER_PASSWORD_NOT_ALLOWED 1132 -#define ER_PASSWORD_NO_MATCH 1133 -#define ER_UPDATE_INFO 1134 -#define ER_CANT_CREATE_THREAD 1135 -#define ER_WRONG_VALUE_COUNT_ON_ROW 1136 -#define ER_CANT_REOPEN_TABLE 1137 -#define ER_INVALID_USE_OF_NULL 1138 -#define ER_REGEXP_ERROR 1139 -#define ER_MIX_OF_GROUP_FUNC_AND_FIELDS 1140 -#define ER_NONEXISTING_GRANT 1141 -#define ER_TABLEACCESS_DENIED_ERROR 1142 -#define ER_COLUMNACCESS_DENIED_ERROR 1143 -#define ER_ILLEGAL_GRANT_FOR_TABLE 1144 -#define ER_GRANT_WRONG_HOST_OR_USER 1145 -#define ER_NO_SUCH_TABLE 1146 -#define ER_NONEXISTING_TABLE_GRANT 1147 -#define ER_NOT_ALLOWED_COMMAND 1148 -#define ER_SYNTAX_ERROR 1149 -#define ER_DELAYED_CANT_CHANGE_LOCK 1150 -#define ER_TOO_MANY_DELAYED_THREADS 1151 -#define ER_ABORTING_CONNECTION 1152 -#define ER_NET_PACKET_TOO_LARGE 1153 -#define ER_NET_READ_ERROR_FROM_PIPE 1154 -#define ER_NET_FCNTL_ERROR 1155 -#define ER_NET_PACKETS_OUT_OF_ORDER 1156 -#define ER_NET_UNCOMPRESS_ERROR 1157 -#define ER_NET_READ_ERROR 1158 -#define ER_NET_READ_INTERRUPTED 1159 -#define ER_NET_ERROR_ON_WRITE 1160 -#define ER_NET_WRITE_INTERRUPTED 1161 -#define ER_TOO_LONG_STRING 1162 -#define ER_TABLE_CANT_HANDLE_BLOB 1163 -#define ER_TABLE_CANT_HANDLE_AUTO_INCREMENT 1164 -#define ER_DELAYED_INSERT_TABLE_LOCKED 1165 -#define ER_WRONG_COLUMN_NAME 1166 -#define ER_WRONG_KEY_COLUMN 1167 -#define ER_WRONG_MRG_TABLE 1168 -#define ER_DUP_UNIQUE 1169 -#define ER_BLOB_KEY_WITHOUT_LENGTH 1170 -#define ER_PRIMARY_CANT_HAVE_NULL 1171 -#define ER_TOO_MANY_ROWS 1172 -#define ER_REQUIRES_PRIMARY_KEY 1173 -#define ER_NO_RAID_COMPILED 1174 -#define ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE 1175 -#define ER_KEY_DOES_NOT_EXITS 1176 -#define ER_CHECK_NO_SUCH_TABLE 1177 -#define ER_CHECK_NOT_IMPLEMENTED 1178 -#define ER_CANT_DO_THIS_DURING_AN_TRANSACTION 1179 -#define ER_ERROR_DURING_COMMIT 1180 -#define ER_ERROR_DURING_ROLLBACK 1181 -#define ER_ERROR_DURING_FLUSH_LOGS 1182 -#define ER_ERROR_DURING_CHECKPOINT 1183 -#define ER_NEW_ABORTING_CONNECTION 1184 -#define ER_DUMP_NOT_IMPLEMENTED 1185 -#define ER_FLUSH_MASTER_BINLOG_CLOSED 1186 -#define ER_INDEX_REBUILD 1187 -#define ER_MASTER 1188 -#define ER_MASTER_NET_READ 1189 -#define ER_MASTER_NET_WRITE 1190 -#define ER_FT_MATCHING_KEY_NOT_FOUND 1191 -#define ER_LOCK_OR_ACTIVE_TRANSACTION 1192 -#define ER_UNKNOWN_SYSTEM_VARIABLE 1193 -#define ER_CRASHED_ON_USAGE 1194 -#define ER_CRASHED_ON_REPAIR 1195 -#define ER_WARNING_NOT_COMPLETE_ROLLBACK 1196 -#define ER_TRANS_CACHE_FULL 1197 -#define ER_SLAVE_MUST_STOP 1198 -#define ER_SLAVE_NOT_RUNNING 1199 -#define ER_BAD_SLAVE 1200 -#define ER_MASTER_INFO 1201 -#define ER_SLAVE_THREAD 1202 -#define ER_TOO_MANY_USER_CONNECTIONS 1203 -#define ER_SET_CONSTANTS_ONLY 1204 -#define ER_LOCK_WAIT_TIMEOUT 1205 -#define ER_LOCK_TABLE_FULL 1206 -#define ER_READ_ONLY_TRANSACTION 1207 -#define ER_DROP_DB_WITH_READ_LOCK 1208 -#define ER_CREATE_DB_WITH_READ_LOCK 1209 -#define ER_WRONG_ARGUMENTS 1210 -#define ER_NO_PERMISSION_TO_CREATE_USER 1211 -#define ER_UNION_TABLES_IN_DIFFERENT_DIR 1212 -#define ER_LOCK_DEADLOCK 1213 -#define ER_TABLE_CANT_HANDLE_FT 1214 -#define ER_CANNOT_ADD_FOREIGN 1215 -#define ER_NO_REFERENCED_ROW 1216 -#define ER_ROW_IS_REFERENCED 1217 -#define ER_CONNECT_TO_MASTER 1218 -#define ER_QUERY_ON_MASTER 1219 -#define ER_ERROR_WHEN_EXECUTING_COMMAND 1220 -#define ER_WRONG_USAGE 1221 -#define ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1222 -#define ER_CANT_UPDATE_WITH_READLOCK 1223 -#define ER_MIXING_NOT_ALLOWED 1224 -#define ER_DUP_ARGUMENT 1225 -#define ER_USER_LIMIT_REACHED 1226 -#define ER_SPECIFIC_ACCESS_DENIED_ERROR 1227 -#define ER_LOCAL_VARIABLE 1228 -#define ER_GLOBAL_VARIABLE 1229 -#define ER_NO_DEFAULT 1230 -#define ER_WRONG_VALUE_FOR_VAR 1231 -#define ER_WRONG_TYPE_FOR_VAR 1232 -#define ER_VAR_CANT_BE_READ 1233 -#define ER_CANT_USE_OPTION_HERE 1234 -#define ER_NOT_SUPPORTED_YET 1235 -#define ER_MASTER_FATAL_ERROR_READING_BINLOG 1236 -#define ER_SLAVE_IGNORED_TABLE 1237 -#define ER_INCORRECT_GLOBAL_LOCAL_VAR 1238 -#define ER_WRONG_FK_DEF 1239 -#define ER_KEY_REF_DO_NOT_MATCH_TABLE_REF 1240 -#define ER_OPERAND_COLUMNS 1241 -#define ER_SUBQUERY_NO_1_ROW 1242 -#define ER_UNKNOWN_STMT_HANDLER 1243 -#define ER_CORRUPT_HELP_DB 1244 -#define ER_CYCLIC_REFERENCE 1245 -#define ER_AUTO_CONVERT 1246 -#define ER_ILLEGAL_REFERENCE 1247 -#define ER_DERIVED_MUST_HAVE_ALIAS 1248 -#define ER_SELECT_REDUCED 1249 -#define ER_TABLENAME_NOT_ALLOWED_HERE 1250 -#define ER_NOT_SUPPORTED_AUTH_MODE 1251 -#define ER_SPATIAL_CANT_HAVE_NULL 1252 -#define ER_COLLATION_CHARSET_MISMATCH 1253 -#define ER_SLAVE_WAS_RUNNING 1254 -#define ER_SLAVE_WAS_NOT_RUNNING 1255 -#define ER_TOO_BIG_FOR_UNCOMPRESS 1256 -#define ER_ZLIB_Z_MEM_ERROR 1257 -#define ER_ZLIB_Z_BUF_ERROR 1258 -#define ER_ZLIB_Z_DATA_ERROR 1259 -#define ER_CUT_VALUE_GROUP_CONCAT 1260 -#define ER_WARN_TOO_FEW_RECORDS 1261 -#define ER_WARN_TOO_MANY_RECORDS 1262 -#define ER_WARN_NULL_TO_NOTNULL 1263 -#define ER_WARN_DATA_OUT_OF_RANGE 1264 -#define WARN_DATA_TRUNCATED 1265 -#define ER_WARN_USING_OTHER_HANDLER 1266 -#define ER_CANT_AGGREGATE_2COLLATIONS 1267 -#define ER_DROP_USER 1268 -#define ER_REVOKE_GRANTS 1269 -#define ER_CANT_AGGREGATE_3COLLATIONS 1270 -#define ER_CANT_AGGREGATE_NCOLLATIONS 1271 -#define ER_VARIABLE_IS_NOT_STRUCT 1272 -#define ER_UNKNOWN_COLLATION 1273 -#define ER_SLAVE_IGNORED_SSL_PARAMS 1274 -#define ER_SERVER_IS_IN_SECURE_AUTH_MODE 1275 -#define ER_WARN_FIELD_RESOLVED 1276 -#define ER_BAD_SLAVE_UNTIL_COND 1277 -#define ER_MISSING_SKIP_SLAVE 1278 -#define ER_UNTIL_COND_IGNORED 1279 -#define ER_WRONG_NAME_FOR_INDEX 1280 -#define ER_WRONG_NAME_FOR_CATALOG 1281 -#define ER_WARN_QC_RESIZE 1282 -#define ER_BAD_FT_COLUMN 1283 -#define ER_UNKNOWN_KEY_CACHE 1284 -#define ER_WARN_HOSTNAME_WONT_WORK 1285 -#define ER_UNKNOWN_STORAGE_ENGINE 1286 -#define ER_WARN_DEPRECATED_SYNTAX 1287 -#define ER_NON_UPDATABLE_TABLE 1288 -#define ER_FEATURE_DISABLED 1289 -#define ER_OPTION_PREVENTS_STATEMENT 1290 -#define ER_DUPLICATED_VALUE_IN_TYPE 1291 -#define ER_TRUNCATED_WRONG_VALUE 1292 -#define ER_TOO_MUCH_AUTO_TIMESTAMP_COLS 1293 -#define ER_INVALID_ON_UPDATE 1294 -#define ER_UNSUPPORTED_PS 1295 -#define ER_GET_ERRMSG 1296 -#define ER_GET_TEMPORARY_ERRMSG 1297 -#define ER_UNKNOWN_TIME_ZONE 1298 -#define ER_WARN_INVALID_TIMESTAMP 1299 -#define ER_INVALID_CHARACTER_STRING 1300 -#define ER_WARN_ALLOWED_PACKET_OVERFLOWED 1301 -#define ER_CONFLICTING_DECLARATIONS 1302 -#define ER_SP_NO_RECURSIVE_CREATE 1303 -#define ER_SP_ALREADY_EXISTS 1304 -#define ER_SP_DOES_NOT_EXIST 1305 -#define ER_SP_DROP_FAILED 1306 -#define ER_SP_STORE_FAILED 1307 -#define ER_SP_LILABEL_MISMATCH 1308 -#define ER_SP_LABEL_REDEFINE 1309 -#define ER_SP_LABEL_MISMATCH 1310 -#define ER_SP_UNINIT_VAR 1311 -#define ER_SP_BADSELECT 1312 -#define ER_SP_BADRETURN 1313 -#define ER_SP_BADSTATEMENT 1314 -#define ER_UPDATE_LOG_DEPRECATED_IGNORED 1315 -#define ER_UPDATE_LOG_DEPRECATED_TRANSLATED 1316 -#define ER_QUERY_INTERRUPTED 1317 -#define ER_SP_WRONG_NO_OF_ARGS 1318 -#define ER_SP_COND_MISMATCH 1319 -#define ER_SP_NORETURN 1320 -#define ER_SP_NORETURNEND 1321 -#define ER_SP_BAD_CURSOR_QUERY 1322 -#define ER_SP_BAD_CURSOR_SELECT 1323 -#define ER_SP_CURSOR_MISMATCH 1324 -#define ER_SP_CURSOR_ALREADY_OPEN 1325 -#define ER_SP_CURSOR_NOT_OPEN 1326 -#define ER_SP_UNDECLARED_VAR 1327 -#define ER_SP_WRONG_NO_OF_FETCH_ARGS 1328 -#define ER_SP_FETCH_NO_DATA 1329 -#define ER_SP_DUP_PARAM 1330 -#define ER_SP_DUP_VAR 1331 -#define ER_SP_DUP_COND 1332 -#define ER_SP_DUP_CURS 1333 -#define ER_SP_CANT_ALTER 1334 -#define ER_SP_SUBSELECT_NYI 1335 -#define ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG 1336 -#define ER_SP_VARCOND_AFTER_CURSHNDLR 1337 -#define ER_SP_CURSOR_AFTER_HANDLER 1338 -#define ER_SP_CASE_NOT_FOUND 1339 -#define ER_FPARSER_TOO_BIG_FILE 1340 -#define ER_FPARSER_BAD_HEADER 1341 -#define ER_FPARSER_EOF_IN_COMMENT 1342 -#define ER_FPARSER_ERROR_IN_PARAMETER 1343 -#define ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER 1344 -#define ER_VIEW_NO_EXPLAIN 1345 -#define ER_FRM_UNKNOWN_TYPE 1346 -#define ER_WRONG_OBJECT 1347 -#define ER_NONUPDATEABLE_COLUMN 1348 -#define ER_VIEW_SELECT_DERIVED 1349 -#define ER_VIEW_SELECT_CLAUSE 1350 -#define ER_VIEW_SELECT_VARIABLE 1351 -#define ER_VIEW_SELECT_TMPTABLE 1352 -#define ER_VIEW_WRONG_LIST 1353 -#define ER_WARN_VIEW_MERGE 1354 -#define ER_WARN_VIEW_WITHOUT_KEY 1355 -#define ER_VIEW_INVALID 1356 -#define ER_SP_NO_DROP_SP 1357 -#define ER_SP_GOTO_IN_HNDLR 1358 -#define ER_TRG_ALREADY_EXISTS 1359 -#define ER_TRG_DOES_NOT_EXIST 1360 -#define ER_TRG_ON_VIEW_OR_TEMP_TABLE 1361 -#define ER_TRG_CANT_CHANGE_ROW 1362 -#define ER_TRG_NO_SUCH_ROW_IN_TRG 1363 -#define ER_NO_DEFAULT_FOR_FIELD 1364 -#define ER_DIVISION_BY_ZERO 1365 -#define ER_TRUNCATED_WRONG_VALUE_FOR_FIELD 1366 -#define ER_ILLEGAL_VALUE_FOR_TYPE 1367 -#define ER_VIEW_NONUPD_CHECK 1368 -#define ER_VIEW_CHECK_FAILED 1369 -#define ER_PROCACCESS_DENIED_ERROR 1370 -#define ER_RELAY_LOG_FAIL 1371 -#define ER_PASSWD_LENGTH 1372 -#define ER_UNKNOWN_TARGET_BINLOG 1373 -#define ER_IO_ERR_LOG_INDEX_READ 1374 -#define ER_BINLOG_PURGE_PROHIBITED 1375 -#define ER_FSEEK_FAIL 1376 -#define ER_BINLOG_PURGE_FATAL_ERR 1377 -#define ER_LOG_IN_USE 1378 -#define ER_LOG_PURGE_UNKNOWN_ERR 1379 -#define ER_RELAY_LOG_INIT 1380 -#define ER_NO_BINARY_LOGGING 1381 -#define ER_RESERVED_SYNTAX 1382 -#define ER_WSAS_FAILED 1383 -#define ER_DIFF_GROUPS_PROC 1384 -#define ER_NO_GROUP_FOR_PROC 1385 -#define ER_ORDER_WITH_PROC 1386 -#define ER_LOGGING_PROHIBIT_CHANGING_OF 1387 -#define ER_NO_FILE_MAPPING 1388 -#define ER_WRONG_MAGIC 1389 -#define ER_PS_MANY_PARAM 1390 -#define ER_KEY_PART_0 1391 -#define ER_VIEW_CHECKSUM 1392 -#define ER_VIEW_MULTIUPDATE 1393 -#define ER_VIEW_NO_INSERT_FIELD_LIST 1394 -#define ER_VIEW_DELETE_MERGE_VIEW 1395 -#define ER_CANNOT_USER 1396 -#define ER_XAER_NOTA 1397 -#define ER_XAER_INVAL 1398 -#define ER_XAER_RMFAIL 1399 -#define ER_XAER_OUTSIDE 1400 -#define ER_XAER_RMERR 1401 -#define ER_XA_RBROLLBACK 1402 -#define ER_NONEXISTING_PROC_GRANT 1403 -#define ER_PROC_AUTO_GRANT_FAIL 1404 -#define ER_PROC_AUTO_REVOKE_FAIL 1405 -#define ER_DATA_TOO_LONG 1406 -#define ER_SP_BAD_SQLSTATE 1407 -#define ER_STARTUP 1408 -#define ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR 1409 -#define ER_CANT_CREATE_USER_WITH_GRANT 1410 -#define ER_WRONG_VALUE_FOR_TYPE 1411 -#define ER_TABLE_DEF_CHANGED 1412 -#define ER_SP_DUP_HANDLER 1413 -#define ER_SP_NOT_VAR_ARG 1414 -#define ER_SP_NO_RETSET 1415 -#define ER_CANT_CREATE_GEOMETRY_OBJECT 1416 -#define ER_FAILED_ROUTINE_BREAK_BINLOG 1417 -#define ER_BINLOG_UNSAFE_ROUTINE 1418 -#define ER_BINLOG_CREATE_ROUTINE_NEED_SUPER 1419 -#define ER_EXEC_STMT_WITH_OPEN_CURSOR 1420 -#define ER_STMT_HAS_NO_OPEN_CURSOR 1421 -#define ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG 1422 -#define ER_NO_DEFAULT_FOR_VIEW_FIELD 1423 -#define ER_SP_NO_RECURSION 1424 -#define ER_TOO_BIG_SCALE 1425 -#define ER_TOO_BIG_PRECISION 1426 -#define ER_M_BIGGER_THAN_D 1427 -#define ER_WRONG_LOCK_OF_SYSTEM_TABLE 1428 -#define ER_CONNECT_TO_FOREIGN_DATA_SOURCE 1429 -#define ER_QUERY_ON_FOREIGN_DATA_SOURCE 1430 -#define ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST 1431 -#define ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE 1432 -#define ER_FOREIGN_DATA_STRING_INVALID 1433 -#define ER_CANT_CREATE_FEDERATED_TABLE 1434 -#define ER_TRG_IN_WRONG_SCHEMA 1435 -#define ER_STACK_OVERRUN_NEED_MORE 1436 -#define ER_TOO_LONG_BODY 1437 -#define ER_WARN_CANT_DROP_DEFAULT_KEYCACHE 1438 -#define ER_TOO_BIG_DISPLAYWIDTH 1439 -#define ER_XAER_DUPID 1440 -#define ER_DATETIME_FUNCTION_OVERFLOW 1441 -#define ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG 1442 -#define ER_VIEW_PREVENT_UPDATE 1443 -#define ER_PS_NO_RECURSION 1444 -#define ER_SP_CANT_SET_AUTOCOMMIT 1445 -#define ER_MALFORMED_DEFINER 1446 -#define ER_VIEW_FRM_NO_USER 1447 -#define ER_VIEW_OTHER_USER 1448 -#define ER_NO_SUCH_USER 1449 -#define ER_FORBID_SCHEMA_CHANGE 1450 -#define ER_ROW_IS_REFERENCED_2 1451 -#define ER_NO_REFERENCED_ROW_2 1452 -#define ER_SP_BAD_VAR_SHADOW 1453 -#define ER_TRG_NO_DEFINER 1454 -#define ER_OLD_FILE_FORMAT 1455 -#define ER_SP_RECURSION_LIMIT 1456 -#define ER_SP_PROC_TABLE_CORRUPT 1457 -#define ER_SP_WRONG_NAME 1458 -#define ER_TABLE_NEEDS_UPGRADE 1459 -#define ER_SP_NO_AGGREGATE 1460 -#define ER_MAX_PREPARED_STMT_COUNT_REACHED 1461 -#define ER_VIEW_RECURSIVE 1462 -#define ER_NON_GROUPING_FIELD_USED 1463 -#define ER_TABLE_CANT_HANDLE_SPKEYS 1464 -#define ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA 1465 -#define ER_REMOVED_SPACES 1466 -#define ER_AUTOINC_READ_FAILED 1467 -#define ER_USERNAME 1468 -#define ER_HOSTNAME 1469 -#define ER_WRONG_STRING_LENGTH 1470 -#define ER_NON_INSERTABLE_TABLE 1471 -#define ER_ADMIN_WRONG_MRG_TABLE 1472 -#define ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT 1473 -#define ER_NAME_BECOMES_EMPTY 1474 -#define ER_AMBIGUOUS_FIELD_TERM 1475 -#define ER_FOREIGN_SERVER_EXISTS 1476 -#define ER_FOREIGN_SERVER_DOESNT_EXIST 1477 -#define ER_ILLEGAL_HA_CREATE_OPTION 1478 -#define ER_PARTITION_REQUIRES_VALUES_ERROR 1479 -#define ER_PARTITION_WRONG_VALUES_ERROR 1480 -#define ER_PARTITION_MAXVALUE_ERROR 1481 -#define ER_PARTITION_SUBPARTITION_ERROR 1482 -#define ER_PARTITION_SUBPART_MIX_ERROR 1483 -#define ER_PARTITION_WRONG_NO_PART_ERROR 1484 -#define ER_PARTITION_WRONG_NO_SUBPART_ERROR 1485 -#define ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR 1486 -#define ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR 1487 -#define ER_FIELD_NOT_FOUND_PART_ERROR 1488 -#define ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR 1489 -#define ER_INCONSISTENT_PARTITION_INFO_ERROR 1490 -#define ER_PARTITION_FUNC_NOT_ALLOWED_ERROR 1491 -#define ER_PARTITIONS_MUST_BE_DEFINED_ERROR 1492 -#define ER_RANGE_NOT_INCREASING_ERROR 1493 -#define ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR 1494 -#define ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR 1495 -#define ER_PARTITION_ENTRY_ERROR 1496 -#define ER_MIX_HANDLER_ERROR 1497 -#define ER_PARTITION_NOT_DEFINED_ERROR 1498 -#define ER_TOO_MANY_PARTITIONS_ERROR 1499 -#define ER_SUBPARTITION_ERROR 1500 -#define ER_CANT_CREATE_HANDLER_FILE 1501 -#define ER_BLOB_FIELD_IN_PART_FUNC_ERROR 1502 -#define ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF 1503 -#define ER_NO_PARTS_ERROR 1504 -#define ER_PARTITION_MGMT_ON_NONPARTITIONED 1505 -#define ER_FOREIGN_KEY_ON_PARTITIONED 1506 -#define ER_DROP_PARTITION_NON_EXISTENT 1507 -#define ER_DROP_LAST_PARTITION 1508 -#define ER_COALESCE_ONLY_ON_HASH_PARTITION 1509 -#define ER_REORG_HASH_ONLY_ON_SAME_NO 1510 -#define ER_REORG_NO_PARAM_ERROR 1511 -#define ER_ONLY_ON_RANGE_LIST_PARTITION 1512 -#define ER_ADD_PARTITION_SUBPART_ERROR 1513 -#define ER_ADD_PARTITION_NO_NEW_PARTITION 1514 -#define ER_COALESCE_PARTITION_NO_PARTITION 1515 -#define ER_REORG_PARTITION_NOT_EXIST 1516 -#define ER_SAME_NAME_PARTITION 1517 -#define ER_NO_BINLOG_ERROR 1518 -#define ER_CONSECUTIVE_REORG_PARTITIONS 1519 -#define ER_REORG_OUTSIDE_RANGE 1520 -#define ER_PARTITION_FUNCTION_FAILURE 1521 -#define ER_PART_STATE_ERROR 1522 -#define ER_LIMITED_PART_RANGE 1523 -#define ER_PLUGIN_IS_NOT_LOADED 1524 -#define ER_WRONG_VALUE 1525 -#define ER_NO_PARTITION_FOR_GIVEN_VALUE 1526 -#define ER_FILEGROUP_OPTION_ONLY_ONCE 1527 -#define ER_CREATE_FILEGROUP_FAILED 1528 -#define ER_DROP_FILEGROUP_FAILED 1529 -#define ER_TABLESPACE_AUTO_EXTEND_ERROR 1530 -#define ER_WRONG_SIZE_NUMBER 1531 -#define ER_SIZE_OVERFLOW_ERROR 1532 -#define ER_ALTER_FILEGROUP_FAILED 1533 -#define ER_BINLOG_ROW_LOGGING_FAILED 1534 -#define ER_BINLOG_ROW_WRONG_TABLE_DEF 1535 -#define ER_BINLOG_ROW_RBR_TO_SBR 1536 -#define ER_EVENT_ALREADY_EXISTS 1537 -#define ER_EVENT_STORE_FAILED 1538 -#define ER_EVENT_DOES_NOT_EXIST 1539 -#define ER_EVENT_CANT_ALTER 1540 -#define ER_EVENT_DROP_FAILED 1541 -#define ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG 1542 -#define ER_EVENT_ENDS_BEFORE_STARTS 1543 -#define ER_EVENT_EXEC_TIME_IN_THE_PAST 1544 -#define ER_EVENT_OPEN_TABLE_FAILED 1545 -#define ER_EVENT_NEITHER_M_EXPR_NOR_M_AT 1546 -#define ER_COL_COUNT_DOESNT_MATCH_CORRUPTED 1547 -#define ER_CANNOT_LOAD_FROM_TABLE 1548 -#define ER_EVENT_CANNOT_DELETE 1549 -#define ER_EVENT_COMPILE_ERROR 1550 -#define ER_EVENT_SAME_NAME 1551 -#define ER_EVENT_DATA_TOO_LONG 1552 -#define ER_DROP_INDEX_FK 1553 -#define ER_WARN_DEPRECATED_SYNTAX_WITH_VER 1554 -#define ER_CANT_WRITE_LOCK_LOG_TABLE 1555 -#define ER_CANT_LOCK_LOG_TABLE 1556 -#define ER_FOREIGN_DUPLICATE_KEY 1557 -#define ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE 1558 -#define ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR 1559 -#define ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT 1560 -#define ER_NDB_CANT_SWITCH_BINLOG_FORMAT 1561 -#define ER_PARTITION_NO_TEMPORARY 1562 -#define ER_PARTITION_CONST_DOMAIN_ERROR 1563 -#define ER_PARTITION_FUNCTION_IS_NOT_ALLOWED 1564 -#define ER_DDL_LOG_ERROR 1565 -#define ER_NULL_IN_VALUES_LESS_THAN 1566 -#define ER_WRONG_PARTITION_NAME 1567 -#define ER_CANT_CHANGE_TX_ISOLATION 1568 -#define ER_DUP_ENTRY_AUTOINCREMENT_CASE 1569 -#define ER_EVENT_MODIFY_QUEUE_ERROR 1570 -#define ER_EVENT_SET_VAR_ERROR 1571 -#define ER_PARTITION_MERGE_ERROR 1572 -#define ER_CANT_ACTIVATE_LOG 1573 -#define ER_RBR_NOT_AVAILABLE 1574 -#define ER_BASE64_DECODE_ERROR 1575 -#define ER_EVENT_RECURSION_FORBIDDEN 1576 -#define ER_EVENTS_DB_ERROR 1577 -#define ER_ONLY_INTEGERS_ALLOWED 1578 -#define ER_UNSUPORTED_LOG_ENGINE 1579 -#define ER_BAD_LOG_STATEMENT 1580 -#define ER_CANT_RENAME_LOG_TABLE 1581 -#define ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT 1582 -#define ER_WRONG_PARAMETERS_TO_NATIVE_FCT 1583 -#define ER_WRONG_PARAMETERS_TO_STORED_FCT 1584 -#define ER_NATIVE_FCT_NAME_COLLISION 1585 -#define ER_DUP_ENTRY_WITH_KEY_NAME 1586 -#define ER_BINLOG_PURGE_EMFILE 1587 -#define ER_EVENT_CANNOT_CREATE_IN_THE_PAST 1588 -#define ER_EVENT_CANNOT_ALTER_IN_THE_PAST 1589 -#define ER_SLAVE_INCIDENT 1590 -#define ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT 1591 -#define ER_BINLOG_UNSAFE_STATEMENT 1592 -#define ER_SLAVE_FATAL_ERROR 1593 -#define ER_SLAVE_RELAY_LOG_READ_FAILURE 1594 -#define ER_SLAVE_RELAY_LOG_WRITE_FAILURE 1595 -#define ER_SLAVE_CREATE_EVENT_FAILURE 1596 -#define ER_SLAVE_MASTER_COM_FAILURE 1597 -#define ER_BINLOG_LOGGING_IMPOSSIBLE 1598 -#define ER_VIEW_NO_CREATION_CTX 1599 -#define ER_VIEW_INVALID_CREATION_CTX 1600 -#define ER_SR_INVALID_CREATION_CTX 1601 -#define ER_TRG_CORRUPTED_FILE 1602 -#define ER_TRG_NO_CREATION_CTX 1603 -#define ER_TRG_INVALID_CREATION_CTX 1604 -#define ER_EVENT_INVALID_CREATION_CTX 1605 -#define ER_TRG_CANT_OPEN_TABLE 1606 -#define ER_CANT_CREATE_SROUTINE 1607 -#define ER_NEVER_USED 1608 -#define ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT 1609 -#define ER_SLAVE_CORRUPT_EVENT 1610 -#define ER_LOAD_DATA_INVALID_COLUMN 1611 -#define ER_LOG_PURGE_NO_FILE 1612 -#define ER_XA_RBTIMEOUT 1613 -#define ER_XA_RBDEADLOCK 1614 -#define ER_NEED_REPREPARE 1615 -#define ER_DELAYED_NOT_SUPPORTED 1616 -#define WARN_NO_MASTER_INFO 1617 -#define WARN_OPTION_IGNORED 1618 -#define WARN_PLUGIN_DELETE_BUILTIN 1619 -#define WARN_PLUGIN_BUSY 1620 -#define ER_VARIABLE_IS_READONLY 1621 -#define ER_WARN_ENGINE_TRANSACTION_ROLLBACK 1622 -#define ER_SLAVE_HEARTBEAT_FAILURE 1623 -#define ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE 1624 -#define ER_NDB_REPLICATION_SCHEMA_ERROR 1625 -#define ER_CONFLICT_FN_PARSE_ERROR 1626 -#define ER_EXCEPTIONS_WRITE_ERROR 1627 -#define ER_TOO_LONG_TABLE_COMMENT 1628 -#define ER_TOO_LONG_FIELD_COMMENT 1629 -#define ER_FUNC_INEXISTENT_NAME_COLLISION 1630 -#define ER_DATABASE_NAME 1631 -#define ER_TABLE_NAME 1632 -#define ER_PARTITION_NAME 1633 -#define ER_SUBPARTITION_NAME 1634 -#define ER_TEMPORARY_NAME 1635 -#define ER_RENAMED_NAME 1636 -#define ER_TOO_MANY_CONCURRENT_TRXS 1637 -#define WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED 1638 -#define ER_DEBUG_SYNC_TIMEOUT 1639 -#define ER_DEBUG_SYNC_HIT_LIMIT 1640 -#define ER_DUP_SIGNAL_SET 1641 -#define ER_SIGNAL_WARN 1642 -#define ER_SIGNAL_NOT_FOUND 1643 -#define ER_SIGNAL_EXCEPTION 1644 -#define ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER 1645 -#define ER_SIGNAL_BAD_CONDITION_TYPE 1646 -#define WARN_COND_ITEM_TRUNCATED 1647 -#define ER_COND_ITEM_TOO_LONG 1648 -#define ER_UNKNOWN_LOCALE 1649 -#define ER_SLAVE_IGNORE_SERVER_IDS 1650 -#define ER_QUERY_CACHE_DISABLED 1651 -#define ER_SAME_NAME_PARTITION_FIELD 1652 -#define ER_PARTITION_COLUMN_LIST_ERROR 1653 -#define ER_WRONG_TYPE_COLUMN_VALUE_ERROR 1654 -#define ER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR 1655 -#define ER_MAXVALUE_IN_VALUES_IN 1656 -#define ER_TOO_MANY_VALUES_ERROR 1657 -#define ER_ROW_SINGLE_PARTITION_FIELD_ERROR 1658 -#define ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD 1659 -#define ER_PARTITION_FIELDS_TOO_LONG 1660 -#define ER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE 1661 -#define ER_BINLOG_ROW_MODE_AND_STMT_ENGINE 1662 -#define ER_BINLOG_UNSAFE_AND_STMT_ENGINE 1663 -#define ER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE 1664 -#define ER_BINLOG_STMT_MODE_AND_ROW_ENGINE 1665 -#define ER_BINLOG_ROW_INJECTION_AND_STMT_MODE 1666 -#define ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE 1667 -#define ER_BINLOG_UNSAFE_LIMIT 1668 -#define ER_BINLOG_UNSAFE_INSERT_DELAYED 1669 -#define ER_BINLOG_UNSAFE_SYSTEM_TABLE 1670 -#define ER_BINLOG_UNSAFE_AUTOINC_COLUMNS 1671 -#define ER_BINLOG_UNSAFE_UDF 1672 -#define ER_BINLOG_UNSAFE_SYSTEM_VARIABLE 1673 -#define ER_BINLOG_UNSAFE_SYSTEM_FUNCTION 1674 -#define ER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS 1675 -#define ER_MESSAGE_AND_STATEMENT 1676 -#define ER_SLAVE_CONVERSION_FAILED 1677 -#define ER_SLAVE_CANT_CREATE_CONVERSION 1678 -#define ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT 1679 -#define ER_PATH_LENGTH 1680 -#define ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT 1681 -#define ER_WRONG_NATIVE_TABLE_STRUCTURE 1682 -#define ER_WRONG_PERFSCHEMA_USAGE 1683 -#define ER_WARN_I_S_SKIPPED_TABLE 1684 -#define ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT 1685 -#define ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT 1686 -#define ER_SPATIAL_MUST_HAVE_GEOM_COL 1687 -#define ER_TOO_LONG_INDEX_COMMENT 1688 -#define ER_LOCK_ABORTED 1689 -#define ER_DATA_OUT_OF_RANGE 1690 -#define ER_WRONG_SPVAR_TYPE_IN_LIMIT 1691 -#define ER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE 1692 -#define ER_BINLOG_UNSAFE_MIXED_STATEMENT 1693 -#define ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN 1694 -#define ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN 1695 -#define ER_FAILED_READ_FROM_PAR_FILE 1696 -#define ER_VALUES_IS_NOT_INT_TYPE_ERROR 1697 -#define ER_ACCESS_DENIED_NO_PASSWORD_ERROR 1698 -#define ER_SET_PASSWORD_AUTH_PLUGIN 1699 -#define ER_GRANT_PLUGIN_USER_EXISTS 1700 -#define ER_TRUNCATE_ILLEGAL_FK 1701 -#define ER_PLUGIN_IS_PERMANENT 1702 -#define ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN 1703 -#define ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX 1704 -#define ER_STMT_CACHE_FULL 1705 -#define ER_ERROR_LAST 1705 diff --git a/deps/mysqllite/include/plugin.h b/deps/mysqllite/include/plugin.h deleted file mode 100644 index 7ec68ff5040b67..00000000000000 --- a/deps/mysqllite/include/plugin.h +++ /dev/null @@ -1,633 +0,0 @@ -/* Copyright (C) 2005 MySQL AB, 2009 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _my_plugin_h -#define _my_plugin_h - -/* - On Windows, exports from DLL need to be declared - Also, plugin needs to be declared as extern "C" because MSVC - unlike other compilers, uses C++ mangling for variables not only - for functions. -*/ -#if defined(_MSC_VER) -#if defined(MYSQL_DYNAMIC_PLUGIN) - #ifdef __cplusplus - #define MYSQL_PLUGIN_EXPORT extern "C" __declspec(dllexport) - #else - #define MYSQL_PLUGIN_EXPORT __declspec(dllexport) - #endif -#else /* MYSQL_DYNAMIC_PLUGIN */ - #ifdef __cplusplus - #define MYSQL_PLUGIN_EXPORT extern "C" - #else - #define MYSQL_PLUGIN_EXPORT - #endif -#endif /*MYSQL_DYNAMIC_PLUGIN */ -#else /*_MSC_VER */ -#define MYSQL_PLUGIN_EXPORT -#endif - -#ifdef __cplusplus -class THD; -class Item; -#define MYSQL_THD THD* -#else -#define MYSQL_THD void* -#endif - -#include - -#define MYSQL_XIDDATASIZE 128 -/** - struct st_mysql_xid is binary compatible with the XID structure as - in the X/Open CAE Specification, Distributed Transaction Processing: - The XA Specification, X/Open Company Ltd., 1991. - http://www.opengroup.org/bookstore/catalog/c193.htm - - @see XID in sql/handler.h -*/ -struct st_mysql_xid { - long formatID; - long gtrid_length; - long bqual_length; - char data[MYSQL_XIDDATASIZE]; /* Not \0-terminated */ -}; -typedef struct st_mysql_xid MYSQL_XID; - -/************************************************************************* - Plugin API. Common for all plugin types. -*/ - -#define MYSQL_PLUGIN_INTERFACE_VERSION 0x0102 - -/* - The allowable types of plugins -*/ -#define MYSQL_UDF_PLUGIN 0 /* User-defined function */ -#define MYSQL_STORAGE_ENGINE_PLUGIN 1 /* Storage Engine */ -#define MYSQL_FTPARSER_PLUGIN 2 /* Full-text parser plugin */ -#define MYSQL_DAEMON_PLUGIN 3 /* The daemon/raw plugin type */ -#define MYSQL_INFORMATION_SCHEMA_PLUGIN 4 /* The I_S plugin type */ -#define MYSQL_AUDIT_PLUGIN 5 /* The Audit plugin type */ -#define MYSQL_REPLICATION_PLUGIN 6 /* The replication plugin type */ -#define MYSQL_AUTHENTICATION_PLUGIN 7 /* The authentication plugin type */ -#define MYSQL_MAX_PLUGIN_TYPE_NUM 8 /* The number of plugin types */ - -/* We use the following strings to define licenses for plugins */ -#define PLUGIN_LICENSE_PROPRIETARY 0 -#define PLUGIN_LICENSE_GPL 1 -#define PLUGIN_LICENSE_BSD 2 - -#define PLUGIN_LICENSE_PROPRIETARY_STRING "PROPRIETARY" -#define PLUGIN_LICENSE_GPL_STRING "GPL" -#define PLUGIN_LICENSE_BSD_STRING "BSD" - -/* - Macros for beginning and ending plugin declarations. Between - mysql_declare_plugin and mysql_declare_plugin_end there should - be a st_mysql_plugin struct for each plugin to be declared. -*/ - - -#ifndef MYSQL_DYNAMIC_PLUGIN -#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \ -MYSQL_PLUGIN_EXPORT int VERSION= MYSQL_PLUGIN_INTERFACE_VERSION; \ -MYSQL_PLUGIN_EXPORT int PSIZE= sizeof(struct st_mysql_plugin); \ -MYSQL_PLUGIN_EXPORT struct st_mysql_plugin DECLS[]= { -#else -#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \ -MYSQL_PLUGIN_EXPORT int _mysql_plugin_interface_version_= MYSQL_PLUGIN_INTERFACE_VERSION; \ -MYSQL_PLUGIN_EXPORT int _mysql_sizeof_struct_st_plugin_= sizeof(struct st_mysql_plugin); \ -MYSQL_PLUGIN_EXPORT struct st_mysql_plugin _mysql_plugin_declarations_[]= { -#endif - -#define mysql_declare_plugin(NAME) \ -__MYSQL_DECLARE_PLUGIN(NAME, \ - builtin_ ## NAME ## _plugin_interface_version, \ - builtin_ ## NAME ## _sizeof_struct_st_plugin, \ - builtin_ ## NAME ## _plugin) - -#define mysql_declare_plugin_end ,{0,0,0,0,0,0,0,0,0,0,0,0}} - -/* - declarations for SHOW STATUS support in plugins -*/ -enum enum_mysql_show_type -{ - SHOW_UNDEF, SHOW_BOOL, SHOW_INT, SHOW_LONG, - SHOW_LONGLONG, SHOW_CHAR, SHOW_CHAR_PTR, - SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE, - SHOW_always_last -}; - -struct st_mysql_show_var { - const char *name; - char *value; - enum enum_mysql_show_type type; -}; - -#define SHOW_VAR_FUNC_BUFF_SIZE 1024 -typedef int (*mysql_show_var_func)(MYSQL_THD, struct st_mysql_show_var*, char *); - - -/* - declarations for server variables and command line options -*/ - - -#define PLUGIN_VAR_BOOL 0x0001 -#define PLUGIN_VAR_INT 0x0002 -#define PLUGIN_VAR_LONG 0x0003 -#define PLUGIN_VAR_LONGLONG 0x0004 -#define PLUGIN_VAR_STR 0x0005 -#define PLUGIN_VAR_ENUM 0x0006 -#define PLUGIN_VAR_SET 0x0007 -#define PLUGIN_VAR_UNSIGNED 0x0080 -#define PLUGIN_VAR_THDLOCAL 0x0100 /* Variable is per-connection */ -#define PLUGIN_VAR_READONLY 0x0200 /* Server variable is read only */ -#define PLUGIN_VAR_NOSYSVAR 0x0400 /* Not a server variable */ -#define PLUGIN_VAR_NOCMDOPT 0x0800 /* Not a command line option */ -#define PLUGIN_VAR_NOCMDARG 0x1000 /* No argument for cmd line */ -#define PLUGIN_VAR_RQCMDARG 0x0000 /* Argument required for cmd line */ -#define PLUGIN_VAR_OPCMDARG 0x2000 /* Argument optional for cmd line */ -#define PLUGIN_VAR_MEMALLOC 0x8000 /* String needs memory allocated */ - -struct st_mysql_sys_var; -struct st_mysql_value; - -/* - SYNOPSIS - (*mysql_var_check_func)() - thd thread handle - var dynamic variable being altered - save pointer to temporary storage - value user provided value - RETURN - 0 user provided value is OK and the update func may be called. - any other value indicates error. - - This function should parse the user provided value and store in the - provided temporary storage any data as required by the update func. - There is sufficient space in the temporary storage to store a double. - Note that the update func may not be called if any other error occurs - so any memory allocated should be thread-local so that it may be freed - automatically at the end of the statement. -*/ - -typedef int (*mysql_var_check_func)(MYSQL_THD thd, - struct st_mysql_sys_var *var, - void *save, struct st_mysql_value *value); - -/* - SYNOPSIS - (*mysql_var_update_func)() - thd thread handle - var dynamic variable being altered - var_ptr pointer to dynamic variable - save pointer to temporary storage - RETURN - NONE - - This function should use the validated value stored in the temporary store - and persist it in the provided pointer to the dynamic variable. - For example, strings may require memory to be allocated. -*/ -typedef void (*mysql_var_update_func)(MYSQL_THD thd, - struct st_mysql_sys_var *var, - void *var_ptr, const void *save); - - -/* the following declarations are for internal use only */ - - -#define PLUGIN_VAR_MASK \ - (PLUGIN_VAR_READONLY | PLUGIN_VAR_NOSYSVAR | \ - PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_NOCMDARG | \ - PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC) - -#define MYSQL_PLUGIN_VAR_HEADER \ - int flags; \ - const char *name; \ - const char *comment; \ - mysql_var_check_func check; \ - mysql_var_update_func update - -#define MYSQL_SYSVAR_NAME(name) mysql_sysvar_ ## name -#define MYSQL_SYSVAR(name) \ - ((struct st_mysql_sys_var *)&(MYSQL_SYSVAR_NAME(name))) - -/* - for global variables, the value pointer is the first - element after the header, the default value is the second. - for thread variables, the value offset is the first - element after the header, the default value is the second. -*/ - - -#define DECLARE_MYSQL_SYSVAR_BASIC(name, type) struct { \ - MYSQL_PLUGIN_VAR_HEADER; \ - type *value; \ - const type def_val; \ -} MYSQL_SYSVAR_NAME(name) - -#define DECLARE_MYSQL_SYSVAR_SIMPLE(name, type) struct { \ - MYSQL_PLUGIN_VAR_HEADER; \ - type *value; type def_val; \ - type min_val; type max_val; \ - type blk_sz; \ -} MYSQL_SYSVAR_NAME(name) - -#define DECLARE_MYSQL_SYSVAR_TYPELIB(name, type) struct { \ - MYSQL_PLUGIN_VAR_HEADER; \ - type *value; type def_val; \ - TYPELIB *typelib; \ -} MYSQL_SYSVAR_NAME(name) - -#define DECLARE_THDVAR_FUNC(type) \ - type *(*resolve)(MYSQL_THD thd, int offset) - -#define DECLARE_MYSQL_THDVAR_BASIC(name, type) struct { \ - MYSQL_PLUGIN_VAR_HEADER; \ - int offset; \ - const type def_val; \ - DECLARE_THDVAR_FUNC(type); \ -} MYSQL_SYSVAR_NAME(name) - -#define DECLARE_MYSQL_THDVAR_SIMPLE(name, type) struct { \ - MYSQL_PLUGIN_VAR_HEADER; \ - int offset; \ - type def_val; type min_val; \ - type max_val; type blk_sz; \ - DECLARE_THDVAR_FUNC(type); \ -} MYSQL_SYSVAR_NAME(name) - -#define DECLARE_MYSQL_THDVAR_TYPELIB(name, type) struct { \ - MYSQL_PLUGIN_VAR_HEADER; \ - int offset; \ - type def_val; \ - DECLARE_THDVAR_FUNC(type); \ - TYPELIB *typelib; \ -} MYSQL_SYSVAR_NAME(name) - - -/* - the following declarations are for use by plugin implementors -*/ - -#define MYSQL_SYSVAR_BOOL(name, varname, opt, comment, check, update, def) \ -DECLARE_MYSQL_SYSVAR_BASIC(name, char) = { \ - PLUGIN_VAR_BOOL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def} - -#define MYSQL_SYSVAR_STR(name, varname, opt, comment, check, update, def) \ -DECLARE_MYSQL_SYSVAR_BASIC(name, char *) = { \ - PLUGIN_VAR_STR | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def} - -#define MYSQL_SYSVAR_INT(name, varname, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_SYSVAR_SIMPLE(name, int) = { \ - PLUGIN_VAR_INT | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, min, max, blk } - -#define MYSQL_SYSVAR_UINT(name, varname, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned int) = { \ - PLUGIN_VAR_INT | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, min, max, blk } - -#define MYSQL_SYSVAR_LONG(name, varname, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_SYSVAR_SIMPLE(name, long) = { \ - PLUGIN_VAR_LONG | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, min, max, blk } - -#define MYSQL_SYSVAR_ULONG(name, varname, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long) = { \ - PLUGIN_VAR_LONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, min, max, blk } - -#define MYSQL_SYSVAR_LONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_SYSVAR_SIMPLE(name, long long) = { \ - PLUGIN_VAR_LONGLONG | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, min, max, blk } - -#define MYSQL_SYSVAR_ULONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long long) = { \ - PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, min, max, blk } - -#define MYSQL_SYSVAR_ENUM(name, varname, opt, comment, check, update, def, typelib) \ -DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long) = { \ - PLUGIN_VAR_ENUM | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, typelib } - -#define MYSQL_SYSVAR_SET(name, varname, opt, comment, check, update, def, typelib) \ -DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long long) = { \ - PLUGIN_VAR_SET | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, &varname, def, typelib } - -#define MYSQL_THDVAR_BOOL(name, opt, comment, check, update, def) \ -DECLARE_MYSQL_THDVAR_BASIC(name, char) = { \ - PLUGIN_VAR_BOOL | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, NULL} - -#define MYSQL_THDVAR_STR(name, opt, comment, check, update, def) \ -DECLARE_MYSQL_THDVAR_BASIC(name, char *) = { \ - PLUGIN_VAR_STR | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, NULL} - -#define MYSQL_THDVAR_INT(name, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_THDVAR_SIMPLE(name, int) = { \ - PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, min, max, blk, NULL } - -#define MYSQL_THDVAR_UINT(name, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned int) = { \ - PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, min, max, blk, NULL } - -#define MYSQL_THDVAR_LONG(name, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_THDVAR_SIMPLE(name, long) = { \ - PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, min, max, blk, NULL } - -#define MYSQL_THDVAR_ULONG(name, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long) = { \ - PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, min, max, blk, NULL } - -#define MYSQL_THDVAR_LONGLONG(name, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_THDVAR_SIMPLE(name, long long) = { \ - PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, min, max, blk, NULL } - -#define MYSQL_THDVAR_ULONGLONG(name, opt, comment, check, update, def, min, max, blk) \ -DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long long) = { \ - PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, min, max, blk, NULL } - -#define MYSQL_THDVAR_ENUM(name, opt, comment, check, update, def, typelib) \ -DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long) = { \ - PLUGIN_VAR_ENUM | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, NULL, typelib } - -#define MYSQL_THDVAR_SET(name, opt, comment, check, update, def, typelib) \ -DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long long) = { \ - PLUGIN_VAR_SET | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ - #name, comment, check, update, -1, def, NULL, typelib } - -/* accessor macros */ - -#define SYSVAR(name) \ - (*(MYSQL_SYSVAR_NAME(name).value)) - -/* when thd == null, result points to global value */ -#define THDVAR(thd, name) \ - (*(MYSQL_SYSVAR_NAME(name).resolve(thd, MYSQL_SYSVAR_NAME(name).offset))) - - -/* - Plugin description structure. -*/ - -struct st_mysql_plugin -{ - int type; /* the plugin type (a MYSQL_XXX_PLUGIN value) */ - void *info; /* pointer to type-specific plugin descriptor */ - const char *name; /* plugin name */ - const char *author; /* plugin author (for I_S.PLUGINS) */ - const char *descr; /* general descriptive text (for I_S.PLUGINS) */ - int license; /* the plugin license (PLUGIN_LICENSE_XXX) */ - int (*init)(void *); /* the function to invoke when plugin is loaded */ - int (*deinit)(void *);/* the function to invoke when plugin is unloaded */ - unsigned int version; /* plugin version (for I_S.PLUGINS) */ - struct st_mysql_show_var *status_vars; - struct st_mysql_sys_var **system_vars; - void * __reserved1; /* reserved for dependency checking */ -}; - -/************************************************************************* - API for Full-text parser plugin. (MYSQL_FTPARSER_PLUGIN) -*/ -#include "plugin_ftparser.h" - -/************************************************************************* - API for Storage Engine plugin. (MYSQL_DAEMON_PLUGIN) -*/ - -/* handlertons of different MySQL releases are incompatible */ -#define MYSQL_DAEMON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) - -/* - Here we define only the descriptor structure, that is referred from - st_mysql_plugin. -*/ - -struct st_mysql_daemon -{ - int interface_version; -}; - - -/************************************************************************* - API for I_S plugin. (MYSQL_INFORMATION_SCHEMA_PLUGIN) -*/ - -/* handlertons of different MySQL releases are incompatible */ -#define MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) - -/* - Here we define only the descriptor structure, that is referred from - st_mysql_plugin. -*/ - -struct st_mysql_information_schema -{ - int interface_version; -}; - - -/************************************************************************* - API for Storage Engine plugin. (MYSQL_STORAGE_ENGINE_PLUGIN) -*/ - -/* handlertons of different MySQL releases are incompatible */ -#define MYSQL_HANDLERTON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) - -/* - The real API is in the sql/handler.h - Here we define only the descriptor structure, that is referred from - st_mysql_plugin. -*/ - -struct st_mysql_storage_engine -{ - int interface_version; -}; - -struct handlerton; - - -/* - API for Replication plugin. (MYSQL_REPLICATION_PLUGIN) -*/ - #define MYSQL_REPLICATION_INTERFACE_VERSION 0x0100 - - /** - Replication plugin descriptor - */ - struct Mysql_replication { - int interface_version; - }; - -/************************************************************************* - st_mysql_value struct for reading values from mysqld. - Used by server variables framework to parse user-provided values. - Will be used for arguments when implementing UDFs. - - Note that val_str() returns a string in temporary memory - that will be freed at the end of statement. Copy the string - if you need it to persist. -*/ - -#define MYSQL_VALUE_TYPE_STRING 0 -#define MYSQL_VALUE_TYPE_REAL 1 -#define MYSQL_VALUE_TYPE_INT 2 - -struct st_mysql_value -{ - int (*value_type)(struct st_mysql_value *); - const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length); - int (*val_real)(struct st_mysql_value *, double *realbuf); - int (*val_int)(struct st_mysql_value *, long long *intbuf); - int (*is_unsigned)(struct st_mysql_value *); -}; - - -/************************************************************************* - Miscellaneous functions for plugin implementors -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -int thd_in_lock_tables(const MYSQL_THD thd); -int thd_tablespace_op(const MYSQL_THD thd); -long long thd_test_options(const MYSQL_THD thd, long long test_options); -int thd_sql_command(const MYSQL_THD thd); -const char *thd_proc_info(MYSQL_THD thd, const char *info); -void **thd_ha_data(const MYSQL_THD thd, const struct handlerton *hton); -void thd_storage_lock_wait(MYSQL_THD thd, long long value); -int thd_tx_isolation(const MYSQL_THD thd); -char *thd_security_context(MYSQL_THD thd, char *buffer, unsigned int length, - unsigned int max_query_len); -/* Increments the row counter, see THD::row_count */ -void thd_inc_row_count(MYSQL_THD thd); - -/** - Create a temporary file. - - @details - The temporary file is created in a location specified by the mysql - server configuration (--tmpdir option). The caller does not need to - delete the file, it will be deleted automatically. - - @param prefix prefix for temporary file name - @retval -1 error - @retval >= 0 a file handle that can be passed to dup or my_close -*/ -int mysql_tmpfile(const char *prefix); - -/** - Check the killed state of a connection - - @details - In MySQL support for the KILL statement is cooperative. The KILL - statement only sets a "killed" flag. This function returns the value - of that flag. A thread should check it often, especially inside - time-consuming loops, and gracefully abort the operation if it is - non-zero. - - @param thd user thread connection handle - @retval 0 the connection is active - @retval 1 the connection has been killed -*/ -int thd_killed(const MYSQL_THD thd); - - -/** - Return the thread id of a user thread - - @param thd user thread connection handle - @return thread id -*/ -unsigned long thd_get_thread_id(const MYSQL_THD thd); - -/** - Get the XID for this connection's transaction - - @param thd user thread connection handle - @param xid location where identifier is stored -*/ -void thd_get_xid(const MYSQL_THD thd, MYSQL_XID *xid); - -/** - Invalidate the query cache for a given table. - - @param thd user thread connection handle - @param key databasename\\0tablename\\0 - @param key_length length of key in bytes, including the NUL bytes - @param using_trx flag: TRUE if using transactions, FALSE otherwise -*/ -void mysql_query_cache_invalidate4(MYSQL_THD thd, - const char *key, unsigned int key_length, - int using_trx); - - -/** - Provide a handler data getter to simplify coding -*/ -void *thd_get_ha_data(const MYSQL_THD thd, const struct handlerton *hton); - - -/** - Provide a handler data setter to simplify coding - - @details - Set ha_data pointer (storage engine per-connection information). - - To avoid unclean deactivation (uninstall) of storage engine plugin - in the middle of transaction, additional storage engine plugin - lock is acquired. - - If ha_data is not null and storage engine plugin was not locked - by thd_set_ha_data() in this connection before, storage engine - plugin gets locked. - - If ha_data is null and storage engine plugin was locked by - thd_set_ha_data() in this connection before, storage engine - plugin lock gets released. - - If handlerton::close_connection() didn't reset ha_data, server does - it immediately after calling handlerton::close_connection(). -*/ -void thd_set_ha_data(MYSQL_THD thd, const struct handlerton *hton, - const void *ha_data); -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/deps/mysqllite/include/plugin_audit.h b/deps/mysqllite/include/plugin_audit.h deleted file mode 100644 index 8811c832949d8b..00000000000000 --- a/deps/mysqllite/include/plugin_audit.h +++ /dev/null @@ -1,138 +0,0 @@ -/* Copyright (C) 2007 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _my_audit_h -#define _my_audit_h - -/************************************************************************* - API for Audit plugin. (MYSQL_AUDIT_PLUGIN) -*/ - -#include "plugin.h" - -#define MYSQL_AUDIT_CLASS_MASK_SIZE 1 - -#define MYSQL_AUDIT_INTERFACE_VERSION 0x0200 - -/* - The first word in every event class struct indicates the specific - class of the event. -*/ -struct mysql_event -{ - unsigned int event_class; -}; - - -/************************************************************************* - AUDIT CLASS : GENERAL - - LOG events occurs before emitting to the general query log. - ERROR events occur before transmitting errors to the user. - RESULT events occur after transmitting a resultset to the user. - STATUS events occur after transmitting a resultset or errors - to the user. -*/ - -#define MYSQL_AUDIT_GENERAL_CLASS 0 -#define MYSQL_AUDIT_GENERAL_CLASSMASK (1 << MYSQL_AUDIT_GENERAL_CLASS) -#define MYSQL_AUDIT_GENERAL_LOG 0 -#define MYSQL_AUDIT_GENERAL_ERROR 1 -#define MYSQL_AUDIT_GENERAL_RESULT 2 -#define MYSQL_AUDIT_GENERAL_STATUS 3 - -struct mysql_event_general -{ - unsigned int event_class; - unsigned int event_subclass; - int general_error_code; - unsigned long general_thread_id; - const char *general_user; - unsigned int general_user_length; - const char *general_command; - unsigned int general_command_length; - const char *general_query; - unsigned int general_query_length; - struct charset_info_st *general_charset; - unsigned long long general_time; - unsigned long long general_rows; -}; - - -/* - AUDIT CLASS : CONNECTION - - CONNECT occurs after authentication phase is completed. - DISCONNECT occurs after connection is terminated. - CHANGE_USER occurs after COM_CHANGE_USER RPC is completed. -*/ - -#define MYSQL_AUDIT_CONNECTION_CLASS 1 -#define MYSQL_AUDIT_CONNECTION_CLASSMASK (1 << MYSQL_AUDIT_CONNECTION_CLASS) -#define MYSQL_AUDIT_CONNECTION_CONNECT 0 -#define MYSQL_AUDIT_CONNECTION_DISCONNECT 1 -#define MYSQL_AUDIT_CONNECTION_CHANGE_USER 2 - -struct mysql_event_connection -{ - unsigned int event_class; - unsigned int event_subclass; - int status; - unsigned long thread_id; - const char *user; - unsigned int user_length; - const char *priv_user; - unsigned int priv_user_length; - const char *external_user; - unsigned int external_user_length; - const char *proxy_user; - unsigned int proxy_user_length; - const char *host; - unsigned int host_length; - const char *ip; - unsigned int ip_length; - const char *database; - unsigned int database_length; -}; - - -/************************************************************************* - Here we define the descriptor structure, that is referred from - st_mysql_plugin. - - release_thd() event occurs when the event class consumer is to be - disassociated from the specified THD. This would typically occur - before some operation which may require sleeping - such as when - waiting for the next query from the client. - - event_notify() is invoked whenever an event occurs which is of any - class for which the plugin has interest. The first word of the - mysql_event argument indicates the specific event class and the - remainder of the structure is as required for that class. - - class_mask is an array of bits used to indicate what event classes - that this plugin wants to receive. -*/ - -struct st_mysql_audit -{ - int interface_version; - void (*release_thd)(MYSQL_THD); - void (*event_notify)(MYSQL_THD, const struct mysql_event *); - unsigned long class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE]; -}; - - -#endif diff --git a/deps/mysqllite/include/plugin_ftparser.h b/deps/mysqllite/include/plugin_ftparser.h deleted file mode 100644 index 7f9bde3a6a0aae..00000000000000 --- a/deps/mysqllite/include/plugin_ftparser.h +++ /dev/null @@ -1,211 +0,0 @@ -/* Copyright (C) 2005 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _my_plugin_ftparser_h -#define _my_plugin_ftparser_h -#include "plugin.h" - -/************************************************************************* - API for Full-text parser plugin. (MYSQL_FTPARSER_PLUGIN) -*/ - -#define MYSQL_FTPARSER_INTERFACE_VERSION 0x0100 - -/* Parsing modes. Set in MYSQL_FTPARSER_PARAM::mode */ -enum enum_ftparser_mode -{ -/* - Fast and simple mode. This mode is used for indexing, and natural - language queries. - - The parser is expected to return only those words that go into the - index. Stopwords or too short/long words should not be returned. The - 'boolean_info' argument of mysql_add_word() does not have to be set. -*/ - MYSQL_FTPARSER_SIMPLE_MODE= 0, - -/* - Parse with stopwords mode. This mode is used in boolean searches for - "phrase matching." - - The parser is not allowed to ignore words in this mode. Every word - should be returned, including stopwords and words that are too short - or long. The 'boolean_info' argument of mysql_add_word() does not - have to be set. -*/ - MYSQL_FTPARSER_WITH_STOPWORDS= 1, - -/* - Parse in boolean mode. This mode is used to parse a boolean query string. - - The parser should provide a valid MYSQL_FTPARSER_BOOLEAN_INFO - structure in the 'boolean_info' argument to mysql_add_word(). - Usually that means that the parser should recognize boolean operators - in the parsing stream and set appropriate fields in - MYSQL_FTPARSER_BOOLEAN_INFO structure accordingly. As for - MYSQL_FTPARSER_WITH_STOPWORDS mode, no word should be ignored. - Instead, use FT_TOKEN_STOPWORD for the token type of such a word. -*/ - MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2 -}; - -/* - Token types for boolean mode searching (used for the type member of - MYSQL_FTPARSER_BOOLEAN_INFO struct) - - FT_TOKEN_EOF: End of data. - FT_TOKEN_WORD: Regular word. - FT_TOKEN_LEFT_PAREN: Left parenthesis (start of group/sub-expression). - FT_TOKEN_RIGHT_PAREN: Right parenthesis (end of group/sub-expression). - FT_TOKEN_STOPWORD: Stopword. -*/ - -enum enum_ft_token_type -{ - FT_TOKEN_EOF= 0, - FT_TOKEN_WORD= 1, - FT_TOKEN_LEFT_PAREN= 2, - FT_TOKEN_RIGHT_PAREN= 3, - FT_TOKEN_STOPWORD= 4 -}; - -/* - This structure is used in boolean search mode only. It conveys - boolean-mode metadata to the MySQL search engine for every word in - the search query. A valid instance of this structure must be filled - in by the plugin parser and passed as an argument in the call to - mysql_add_word (the callback function in the MYSQL_FTPARSER_PARAM - structure) when a query is parsed in boolean mode. - - type: The token type. Should be one of the enum_ft_token_type values. - - yesno: Whether the word must be present for a match to occur: - >0 Must be present - <0 Must not be present - 0 Neither; the word is optional but its presence increases the relevance - With the default settings of the ft_boolean_syntax system variable, - >0 corresponds to the '+' operator, <0 corrresponds to the '-' operator, - and 0 means neither operator was used. - - weight_adjust: A weighting factor that determines how much a match - for the word counts. Positive values increase, negative - decrease the - relative word's importance in the query. - - wasign: The sign of the word's weight in the query. If it's non-negative - the match for the word will increase document relevance, if it's - negative - decrease (the word becomes a "noise word", the less of it the - better). - - trunc: Corresponds to the '*' operator in the default setting of the - ft_boolean_syntax system variable. -*/ - -typedef struct st_mysql_ftparser_boolean_info -{ - enum enum_ft_token_type type; - int yesno; - int weight_adjust; - char wasign; - char trunc; - /* These are parser state and must be removed. */ - char prev; - char *quot; -} MYSQL_FTPARSER_BOOLEAN_INFO; - -/* - The following flag means that buffer with a string (document, word) - may be overwritten by the caller before the end of the parsing (that is - before st_mysql_ftparser::deinit() call). If one needs the string - to survive between two successive calls of the parsing function, she - needs to save a copy of it. The flag may be set by MySQL before calling - st_mysql_ftparser::parse(), or it may be set by a plugin before calling - st_mysql_ftparser_param::mysql_parse() or - st_mysql_ftparser_param::mysql_add_word(). -*/ -#define MYSQL_FTFLAGS_NEED_COPY 1 - -/* - An argument of the full-text parser plugin. This structure is - filled in by MySQL server and passed to the parsing function of the - plugin as an in/out parameter. - - mysql_parse: A pointer to the built-in parser implementation of the - server. It's set by the server and can be used by the parser plugin - to invoke the MySQL default parser. If plugin's role is to extract - textual data from .doc, .pdf or .xml content, it might extract - plaintext from the content, and then pass the text to the default - MySQL parser to be parsed. - - mysql_add_word: A server callback to add a new word. When parsing - a document, the server sets this to point at a function that adds - the word to MySQL full-text index. When parsing a search query, - this function will add the new word to the list of words to search - for. The boolean_info argument can be NULL for all cases except - when mode is MYSQL_FTPARSER_FULL_BOOLEAN_INFO. - - ftparser_state: A generic pointer. The plugin can set it to point - to information to be used internally for its own purposes. - - mysql_ftparam: This is set by the server. It is used by MySQL functions - called via mysql_parse() and mysql_add_word() callback. The plugin - should not modify it. - - cs: Information about the character set of the document or query string. - - doc: A pointer to the document or query string to be parsed. - - length: Length of the document or query string, in bytes. - - flags: See MYSQL_FTFLAGS_* constants above. - - mode: The parsing mode. With boolean operators, with stopwords, or - nothing. See enum_ftparser_mode above. -*/ - -typedef struct st_mysql_ftparser_param -{ - int (*mysql_parse)(struct st_mysql_ftparser_param *, - char *doc, int doc_len); - int (*mysql_add_word)(struct st_mysql_ftparser_param *, - char *word, int word_len, - MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); - void *ftparser_state; - void *mysql_ftparam; - struct charset_info_st *cs; - char *doc; - int length; - int flags; - enum enum_ftparser_mode mode; -} MYSQL_FTPARSER_PARAM; - -/* - Full-text parser descriptor. - - interface_version is, e.g., MYSQL_FTPARSER_INTERFACE_VERSION. - The parsing, initialization, and deinitialization functions are - invoked per SQL statement for which the parser is used. -*/ - -struct st_mysql_ftparser -{ - int interface_version; - int (*parse)(MYSQL_FTPARSER_PARAM *param); - int (*init)(MYSQL_FTPARSER_PARAM *param); - int (*deinit)(MYSQL_FTPARSER_PARAM *param); -}; - - -#endif - diff --git a/deps/mysqllite/include/sql_common.h b/deps/mysqllite/include/sql_common.h deleted file mode 100644 index a9a3168b69168d..00000000000000 --- a/deps/mysqllite/include/sql_common.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef SQL_COMMON_INCLUDED -#define SQL_COMMON_INCLUDED - -/* Copyright (C) 2003-2004, 2006 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#define SQL_COMMON_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -extern const char *unknown_sqlstate; -extern const char *cant_connect_sqlstate; -extern const char *not_error_sqlstate; - -struct st_mysql_options_extention { - char *plugin_dir; - char *default_auth; -}; - -typedef struct st_mysql_methods -{ - my_bool (*read_query_result)(MYSQL *mysql); - my_bool (*advanced_command)(MYSQL *mysql, - enum enum_server_command command, - const unsigned char *header, - unsigned long header_length, - const unsigned char *arg, - unsigned long arg_length, - my_bool skip_check, - MYSQL_STMT *stmt); - MYSQL_DATA *(*read_rows)(MYSQL *mysql,MYSQL_FIELD *mysql_fields, - unsigned int fields); - MYSQL_RES * (*use_result)(MYSQL *mysql); - void (*fetch_lengths)(unsigned long *to, - MYSQL_ROW column, unsigned int field_count); - void (*flush_use_result)(MYSQL *mysql, my_bool flush_all_results); - int (*read_change_user_result)(MYSQL *mysql); -#if !defined(MYSQL_SERVER) || defined(EMBEDDED_LIBRARY) - MYSQL_FIELD * (*list_fields)(MYSQL *mysql); - my_bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt); - int (*stmt_execute)(MYSQL_STMT *stmt); - int (*read_binary_rows)(MYSQL_STMT *stmt); - int (*unbuffered_fetch)(MYSQL *mysql, char **row); - void (*free_embedded_thd)(MYSQL *mysql); - const char *(*read_statistics)(MYSQL *mysql); - my_bool (*next_result)(MYSQL *mysql); - int (*read_rows_from_cursor)(MYSQL_STMT *stmt); -#endif -} MYSQL_METHODS; - -#define simple_command(mysql, command, arg, length, skip_check) \ - (*(mysql)->methods->advanced_command)(mysql, command, 0, \ - 0, arg, length, skip_check, NULL) -#define stmt_command(mysql, command, arg, length, stmt) \ - (*(mysql)->methods->advanced_command)(mysql, command, 0, \ - 0, arg, length, 1, stmt) - -extern CHARSET_INFO *default_client_charset_info; -MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, - my_bool default_value, uint server_capabilities); -void free_rows(MYSQL_DATA *cur); -void free_old_query(MYSQL *mysql); -void end_server(MYSQL *mysql); -my_bool mysql_reconnect(MYSQL *mysql); -void mysql_read_default_options(struct st_mysql_options *options, - const char *filename,const char *group); -my_bool -cli_advanced_command(MYSQL *mysql, enum enum_server_command command, - const unsigned char *header, ulong header_length, - const unsigned char *arg, ulong arg_length, - my_bool skip_check, MYSQL_STMT *stmt); -unsigned long cli_safe_read(MYSQL *mysql); -void net_clear_error(NET *net); -void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net); -void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate, - const char *err); -void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate); -void set_mysql_extended_error(MYSQL *mysql, int errcode, const char *sqlstate, - const char *format, ...); - -/* client side of the pluggable authentication */ -struct st_plugin_vio_info; -void mpvio_info(Vio *vio, struct st_plugin_vio_info *info); -int run_plugin_auth(MYSQL *mysql, char *data, uint data_len, - const char *data_plugin, const char *db); -int mysql_client_plugin_init(); -void mysql_client_plugin_deinit(); -struct st_mysql_client_plugin; -extern struct st_mysql_client_plugin *mysql_client_builtins[]; - -#ifdef __cplusplus -} -#endif - -#define protocol_41(A) ((A)->server_capabilities & CLIENT_PROTOCOL_41) - -#endif /* SQL_COMMON_INCLUDED */ diff --git a/deps/mysqllite/include/sql_state.h b/deps/mysqllite/include/sql_state.h deleted file mode 100644 index edd6f694bd96de..00000000000000 --- a/deps/mysqllite/include/sql_state.h +++ /dev/null @@ -1,220 +0,0 @@ -/* Autogenerated file, please don't edit */ - -{ ER_DUP_KEY ,"23000", "" }, -{ ER_OUTOFMEMORY ,"HY001", "S1001" }, -{ ER_OUT_OF_SORTMEMORY ,"HY001", "S1001" }, -{ ER_CON_COUNT_ERROR ,"08004", "" }, -{ ER_BAD_HOST_ERROR ,"08S01", "" }, -{ ER_HANDSHAKE_ERROR ,"08S01", "" }, -{ ER_DBACCESS_DENIED_ERROR ,"42000", "" }, -{ ER_ACCESS_DENIED_ERROR ,"28000", "" }, -{ ER_NO_DB_ERROR ,"3D000", "" }, -{ ER_UNKNOWN_COM_ERROR ,"08S01", "" }, -{ ER_BAD_NULL_ERROR ,"23000", "" }, -{ ER_BAD_DB_ERROR ,"42000", "" }, -{ ER_TABLE_EXISTS_ERROR ,"42S01", "" }, -{ ER_BAD_TABLE_ERROR ,"42S02", "" }, -{ ER_NON_UNIQ_ERROR ,"23000", "" }, -{ ER_SERVER_SHUTDOWN ,"08S01", "" }, -{ ER_BAD_FIELD_ERROR ,"42S22", "S0022" }, -{ ER_WRONG_FIELD_WITH_GROUP ,"42000", "S1009" }, -{ ER_WRONG_GROUP_FIELD ,"42000", "S1009" }, -{ ER_WRONG_SUM_SELECT ,"42000", "S1009" }, -{ ER_WRONG_VALUE_COUNT ,"21S01", "" }, -{ ER_TOO_LONG_IDENT ,"42000", "S1009" }, -{ ER_DUP_FIELDNAME ,"42S21", "S1009" }, -{ ER_DUP_KEYNAME ,"42000", "S1009" }, -{ ER_DUP_ENTRY ,"23000", "S1009" }, -{ ER_WRONG_FIELD_SPEC ,"42000", "S1009" }, -{ ER_PARSE_ERROR ,"42000", "s1009" }, -{ ER_EMPTY_QUERY ,"42000", "" }, -{ ER_NONUNIQ_TABLE ,"42000", "S1009" }, -{ ER_INVALID_DEFAULT ,"42000", "S1009" }, -{ ER_MULTIPLE_PRI_KEY ,"42000", "S1009" }, -{ ER_TOO_MANY_KEYS ,"42000", "S1009" }, -{ ER_TOO_MANY_KEY_PARTS ,"42000", "S1009" }, -{ ER_TOO_LONG_KEY ,"42000", "S1009" }, -{ ER_KEY_COLUMN_DOES_NOT_EXITS ,"42000", "S1009" }, -{ ER_BLOB_USED_AS_KEY ,"42000", "S1009" }, -{ ER_TOO_BIG_FIELDLENGTH ,"42000", "S1009" }, -{ ER_WRONG_AUTO_KEY ,"42000", "S1009" }, -{ ER_FORCING_CLOSE ,"08S01", "" }, -{ ER_IPSOCK_ERROR ,"08S01", "" }, -{ ER_NO_SUCH_INDEX ,"42S12", "S1009" }, -{ ER_WRONG_FIELD_TERMINATORS ,"42000", "S1009" }, -{ ER_BLOBS_AND_NO_TERMINATED ,"42000", "S1009" }, -{ ER_CANT_REMOVE_ALL_FIELDS ,"42000", "" }, -{ ER_CANT_DROP_FIELD_OR_KEY ,"42000", "" }, -{ ER_BLOB_CANT_HAVE_DEFAULT ,"42000", "" }, -{ ER_WRONG_DB_NAME ,"42000", "" }, -{ ER_WRONG_TABLE_NAME ,"42000", "" }, -{ ER_TOO_BIG_SELECT ,"42000", "" }, -{ ER_UNKNOWN_PROCEDURE ,"42000", "" }, -{ ER_WRONG_PARAMCOUNT_TO_PROCEDURE ,"42000", "" }, -{ ER_UNKNOWN_TABLE ,"42S02", "" }, -{ ER_FIELD_SPECIFIED_TWICE ,"42000", "" }, -{ ER_UNSUPPORTED_EXTENSION ,"42000", "" }, -{ ER_TABLE_MUST_HAVE_COLUMNS ,"42000", "" }, -{ ER_UNKNOWN_CHARACTER_SET ,"42000", "" }, -{ ER_TOO_BIG_ROWSIZE ,"42000", "" }, -{ ER_WRONG_OUTER_JOIN ,"42000", "" }, -{ ER_NULL_COLUMN_IN_INDEX ,"42000", "" }, -{ ER_PASSWORD_ANONYMOUS_USER ,"42000", "" }, -{ ER_PASSWORD_NOT_ALLOWED ,"42000", "" }, -{ ER_PASSWORD_NO_MATCH ,"42000", "" }, -{ ER_WRONG_VALUE_COUNT_ON_ROW ,"21S01", "" }, -{ ER_INVALID_USE_OF_NULL ,"22004", "" }, -{ ER_REGEXP_ERROR ,"42000", "" }, -{ ER_MIX_OF_GROUP_FUNC_AND_FIELDS ,"42000", "" }, -{ ER_NONEXISTING_GRANT ,"42000", "" }, -{ ER_TABLEACCESS_DENIED_ERROR ,"42000", "" }, -{ ER_COLUMNACCESS_DENIED_ERROR ,"42000", "" }, -{ ER_ILLEGAL_GRANT_FOR_TABLE ,"42000", "" }, -{ ER_GRANT_WRONG_HOST_OR_USER ,"42000", "" }, -{ ER_NO_SUCH_TABLE ,"42S02", "" }, -{ ER_NONEXISTING_TABLE_GRANT ,"42000", "" }, -{ ER_NOT_ALLOWED_COMMAND ,"42000", "" }, -{ ER_SYNTAX_ERROR ,"42000", "" }, -{ ER_ABORTING_CONNECTION ,"08S01", "" }, -{ ER_NET_PACKET_TOO_LARGE ,"08S01", "" }, -{ ER_NET_READ_ERROR_FROM_PIPE ,"08S01", "" }, -{ ER_NET_FCNTL_ERROR ,"08S01", "" }, -{ ER_NET_PACKETS_OUT_OF_ORDER ,"08S01", "" }, -{ ER_NET_UNCOMPRESS_ERROR ,"08S01", "" }, -{ ER_NET_READ_ERROR ,"08S01", "" }, -{ ER_NET_READ_INTERRUPTED ,"08S01", "" }, -{ ER_NET_ERROR_ON_WRITE ,"08S01", "" }, -{ ER_NET_WRITE_INTERRUPTED ,"08S01", "" }, -{ ER_TOO_LONG_STRING ,"42000", "" }, -{ ER_TABLE_CANT_HANDLE_BLOB ,"42000", "" }, -{ ER_TABLE_CANT_HANDLE_AUTO_INCREMENT ,"42000", "" }, -{ ER_WRONG_COLUMN_NAME ,"42000", "" }, -{ ER_WRONG_KEY_COLUMN ,"42000", "" }, -{ ER_DUP_UNIQUE ,"23000", "" }, -{ ER_BLOB_KEY_WITHOUT_LENGTH ,"42000", "" }, -{ ER_PRIMARY_CANT_HAVE_NULL ,"42000", "" }, -{ ER_TOO_MANY_ROWS ,"42000", "" }, -{ ER_REQUIRES_PRIMARY_KEY ,"42000", "" }, -{ ER_KEY_DOES_NOT_EXITS ,"42000", "S1009" }, -{ ER_CHECK_NO_SUCH_TABLE ,"42000", "" }, -{ ER_CHECK_NOT_IMPLEMENTED ,"42000", "" }, -{ ER_CANT_DO_THIS_DURING_AN_TRANSACTION ,"25000", "" }, -{ ER_NEW_ABORTING_CONNECTION ,"08S01", "" }, -{ ER_MASTER_NET_READ ,"08S01", "" }, -{ ER_MASTER_NET_WRITE ,"08S01", "" }, -{ ER_TOO_MANY_USER_CONNECTIONS ,"42000", "" }, -{ ER_READ_ONLY_TRANSACTION ,"25000", "" }, -{ ER_NO_PERMISSION_TO_CREATE_USER ,"42000", "" }, -{ ER_LOCK_DEADLOCK ,"40001", "" }, -{ ER_NO_REFERENCED_ROW ,"23000", "" }, -{ ER_ROW_IS_REFERENCED ,"23000", "" }, -{ ER_CONNECT_TO_MASTER ,"08S01", "" }, -{ ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT ,"21000", "" }, -{ ER_USER_LIMIT_REACHED ,"42000", "" }, -{ ER_SPECIFIC_ACCESS_DENIED_ERROR ,"42000", "" }, -{ ER_NO_DEFAULT ,"42000", "" }, -{ ER_WRONG_VALUE_FOR_VAR ,"42000", "" }, -{ ER_WRONG_TYPE_FOR_VAR ,"42000", "" }, -{ ER_CANT_USE_OPTION_HERE ,"42000", "" }, -{ ER_NOT_SUPPORTED_YET ,"42000", "" }, -{ ER_WRONG_FK_DEF ,"42000", "" }, -{ ER_OPERAND_COLUMNS ,"21000", "" }, -{ ER_SUBQUERY_NO_1_ROW ,"21000", "" }, -{ ER_ILLEGAL_REFERENCE ,"42S22", "" }, -{ ER_DERIVED_MUST_HAVE_ALIAS ,"42000", "" }, -{ ER_SELECT_REDUCED ,"01000", "" }, -{ ER_TABLENAME_NOT_ALLOWED_HERE ,"42000", "" }, -{ ER_NOT_SUPPORTED_AUTH_MODE ,"08004", "" }, -{ ER_SPATIAL_CANT_HAVE_NULL ,"42000", "" }, -{ ER_COLLATION_CHARSET_MISMATCH ,"42000", "" }, -{ ER_WARN_TOO_FEW_RECORDS ,"01000", "" }, -{ ER_WARN_TOO_MANY_RECORDS ,"01000", "" }, -{ ER_WARN_NULL_TO_NOTNULL ,"22004", "" }, -{ ER_WARN_DATA_OUT_OF_RANGE ,"22003", "" }, -{ WARN_DATA_TRUNCATED ,"01000", "" }, -{ ER_WRONG_NAME_FOR_INDEX ,"42000", "" }, -{ ER_WRONG_NAME_FOR_CATALOG ,"42000", "" }, -{ ER_UNKNOWN_STORAGE_ENGINE ,"42000", "" }, -{ ER_TRUNCATED_WRONG_VALUE ,"22007", "" }, -{ ER_SP_NO_RECURSIVE_CREATE ,"2F003", "" }, -{ ER_SP_ALREADY_EXISTS ,"42000", "" }, -{ ER_SP_DOES_NOT_EXIST ,"42000", "" }, -{ ER_SP_LILABEL_MISMATCH ,"42000", "" }, -{ ER_SP_LABEL_REDEFINE ,"42000", "" }, -{ ER_SP_LABEL_MISMATCH ,"42000", "" }, -{ ER_SP_UNINIT_VAR ,"01000", "" }, -{ ER_SP_BADSELECT ,"0A000", "" }, -{ ER_SP_BADRETURN ,"42000", "" }, -{ ER_SP_BADSTATEMENT ,"0A000", "" }, -{ ER_UPDATE_LOG_DEPRECATED_IGNORED ,"42000", "" }, -{ ER_UPDATE_LOG_DEPRECATED_TRANSLATED ,"42000", "" }, -{ ER_QUERY_INTERRUPTED ,"70100", "" }, -{ ER_SP_WRONG_NO_OF_ARGS ,"42000", "" }, -{ ER_SP_COND_MISMATCH ,"42000", "" }, -{ ER_SP_NORETURN ,"42000", "" }, -{ ER_SP_NORETURNEND ,"2F005", "" }, -{ ER_SP_BAD_CURSOR_QUERY ,"42000", "" }, -{ ER_SP_BAD_CURSOR_SELECT ,"42000", "" }, -{ ER_SP_CURSOR_MISMATCH ,"42000", "" }, -{ ER_SP_CURSOR_ALREADY_OPEN ,"24000", "" }, -{ ER_SP_CURSOR_NOT_OPEN ,"24000", "" }, -{ ER_SP_UNDECLARED_VAR ,"42000", "" }, -{ ER_SP_FETCH_NO_DATA ,"02000", "" }, -{ ER_SP_DUP_PARAM ,"42000", "" }, -{ ER_SP_DUP_VAR ,"42000", "" }, -{ ER_SP_DUP_COND ,"42000", "" }, -{ ER_SP_DUP_CURS ,"42000", "" }, -{ ER_SP_SUBSELECT_NYI ,"0A000", "" }, -{ ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG ,"0A000", "" }, -{ ER_SP_VARCOND_AFTER_CURSHNDLR ,"42000", "" }, -{ ER_SP_CURSOR_AFTER_HANDLER ,"42000", "" }, -{ ER_SP_CASE_NOT_FOUND ,"20000", "" }, -{ ER_DIVISION_BY_ZERO ,"22012", "" }, -{ ER_ILLEGAL_VALUE_FOR_TYPE ,"22007", "" }, -{ ER_PROCACCESS_DENIED_ERROR ,"42000", "" }, -{ ER_XAER_NOTA ,"XAE04", "" }, -{ ER_XAER_INVAL ,"XAE05", "" }, -{ ER_XAER_RMFAIL ,"XAE07", "" }, -{ ER_XAER_OUTSIDE ,"XAE09", "" }, -{ ER_XAER_RMERR ,"XAE03", "" }, -{ ER_XA_RBROLLBACK ,"XA100", "" }, -{ ER_NONEXISTING_PROC_GRANT ,"42000", "" }, -{ ER_DATA_TOO_LONG ,"22001", "" }, -{ ER_SP_BAD_SQLSTATE ,"42000", "" }, -{ ER_CANT_CREATE_USER_WITH_GRANT ,"42000", "" }, -{ ER_SP_DUP_HANDLER ,"42000", "" }, -{ ER_SP_NOT_VAR_ARG ,"42000", "" }, -{ ER_SP_NO_RETSET ,"0A000", "" }, -{ ER_CANT_CREATE_GEOMETRY_OBJECT ,"22003", "" }, -{ ER_TOO_BIG_SCALE ,"42000", "S1009" }, -{ ER_TOO_BIG_PRECISION ,"42000", "S1009" }, -{ ER_M_BIGGER_THAN_D ,"42000", "S1009" }, -{ ER_TOO_LONG_BODY ,"42000", "S1009" }, -{ ER_TOO_BIG_DISPLAYWIDTH ,"42000", "S1009" }, -{ ER_XAER_DUPID ,"XAE08", "" }, -{ ER_DATETIME_FUNCTION_OVERFLOW ,"22008", "" }, -{ ER_ROW_IS_REFERENCED_2 ,"23000", "" }, -{ ER_NO_REFERENCED_ROW_2 ,"23000", "" }, -{ ER_SP_BAD_VAR_SHADOW ,"42000", "" }, -{ ER_SP_WRONG_NAME ,"42000", "" }, -{ ER_SP_NO_AGGREGATE ,"42000", "" }, -{ ER_MAX_PREPARED_STMT_COUNT_REACHED ,"42000", "" }, -{ ER_NON_GROUPING_FIELD_USED ,"42000", "" }, -{ ER_FOREIGN_DUPLICATE_KEY ,"23000", "S1009" }, -{ ER_CANT_CHANGE_TX_ISOLATION ,"25001", "" }, -{ ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT ,"42000", "" }, -{ ER_WRONG_PARAMETERS_TO_NATIVE_FCT ,"42000", "" }, -{ ER_WRONG_PARAMETERS_TO_STORED_FCT ,"42000", "" }, -{ ER_DUP_ENTRY_WITH_KEY_NAME ,"23000", "S1009" }, -{ ER_XA_RBTIMEOUT ,"XA106", "" }, -{ ER_XA_RBDEADLOCK ,"XA102", "" }, -{ ER_FUNC_INEXISTENT_NAME_COLLISION ,"42000", "" }, -{ ER_DUP_SIGNAL_SET ,"42000", "" }, -{ ER_SIGNAL_WARN ,"01000", "" }, -{ ER_SIGNAL_NOT_FOUND ,"02000", "" }, -{ ER_SIGNAL_EXCEPTION ,"HY000", "" }, -{ ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER ,"0K000", "" }, -{ ER_SPATIAL_MUST_HAVE_GEOM_COL ,"42000", "" }, -{ ER_DATA_OUT_OF_RANGE ,"22003", "" }, -{ ER_ACCESS_DENIED_NO_PASSWORD_ERROR ,"28000", "" }, -{ ER_TRUNCATE_ILLEGAL_FK ,"42000", "" }, diff --git a/deps/mysqllite/include/sslopt-case.h b/deps/mysqllite/include/sslopt-case.h deleted file mode 100644 index 3b64a225fe2092..00000000000000 --- a/deps/mysqllite/include/sslopt-case.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef SSLOPT_CASE_INCLUDED -#define SSLOPT_CASE_INCLUDED - -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - case OPT_SSL_KEY: - case OPT_SSL_CERT: - case OPT_SSL_CA: - case OPT_SSL_CAPATH: - case OPT_SSL_CIPHER: - /* - Enable use of SSL if we are using any ssl option - One can disable SSL later by using --skip-ssl or --ssl=0 - */ - opt_use_ssl= 1; - break; -#endif -#endif /* SSLOPT_CASE_INCLUDED */ diff --git a/deps/mysqllite/include/sslopt-longopts.h b/deps/mysqllite/include/sslopt-longopts.h deleted file mode 100644 index 5315b2e12b1428..00000000000000 --- a/deps/mysqllite/include/sslopt-longopts.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef SSLOPT_LONGOPTS_INCLUDED -#define SSLOPT_LONGOPTS_INCLUDED - -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - - {"ssl", OPT_SSL_SSL, - "Enable SSL for connection (automatically enabled with other flags).", - &opt_use_ssl, &opt_use_ssl, 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0}, - {"ssl-ca", OPT_SSL_CA, - "CA file in PEM format (check OpenSSL docs, implies --ssl).", - &opt_ssl_ca, &opt_ssl_ca, 0, GET_STR, REQUIRED_ARG, - 0, 0, 0, 0, 0, 0}, - {"ssl-capath", OPT_SSL_CAPATH, - "CA directory (check OpenSSL docs, implies --ssl).", - &opt_ssl_capath, &opt_ssl_capath, 0, GET_STR, REQUIRED_ARG, - 0, 0, 0, 0, 0, 0}, - {"ssl-cert", OPT_SSL_CERT, "X509 cert in PEM format (implies --ssl).", - &opt_ssl_cert, &opt_ssl_cert, 0, GET_STR, REQUIRED_ARG, - 0, 0, 0, 0, 0, 0}, - {"ssl-cipher", OPT_SSL_CIPHER, "SSL cipher to use (implies --ssl).", - &opt_ssl_cipher, &opt_ssl_cipher, 0, GET_STR, REQUIRED_ARG, - 0, 0, 0, 0, 0, 0}, - {"ssl-key", OPT_SSL_KEY, "X509 key in PEM format (implies --ssl).", - &opt_ssl_key, &opt_ssl_key, 0, GET_STR, REQUIRED_ARG, - 0, 0, 0, 0, 0, 0}, -#ifdef MYSQL_CLIENT - {"ssl-verify-server-cert", OPT_SSL_VERIFY_SERVER_CERT, - "Verify server's \"Common Name\" in its cert against hostname used " - "when connecting. This option is disabled by default.", - &opt_ssl_verify_server_cert, &opt_ssl_verify_server_cert, - 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0}, -#endif -#endif /* HAVE_OPENSSL */ -#endif /* SSLOPT_LONGOPTS_INCLUDED */ diff --git a/deps/mysqllite/include/sslopt-vars.h b/deps/mysqllite/include/sslopt-vars.h deleted file mode 100644 index d0eec3b6d74314..00000000000000 --- a/deps/mysqllite/include/sslopt-vars.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef SSLOPT_VARS_INCLUDED -#define SSLOPT_VARS_INCLUDED - -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) -#ifdef SSL_VARS_NOT_STATIC -#define SSL_STATIC -#else -#define SSL_STATIC static -#endif -SSL_STATIC my_bool opt_use_ssl = 0; -SSL_STATIC char *opt_ssl_ca = 0; -SSL_STATIC char *opt_ssl_capath = 0; -SSL_STATIC char *opt_ssl_cert = 0; -SSL_STATIC char *opt_ssl_cipher = 0; -SSL_STATIC char *opt_ssl_key = 0; -#ifdef MYSQL_CLIENT -SSL_STATIC my_bool opt_ssl_verify_server_cert= 0; -#endif -#endif -#endif /* SSLOPT_VARS_INCLUDED */ diff --git a/deps/mysqllite/include/typelib.h b/deps/mysqllite/include/typelib.h deleted file mode 100644 index 3badb14c96eed7..00000000000000 --- a/deps/mysqllite/include/typelib.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#ifndef _typelib_h -#define _typelib_h - -#include "my_alloc.h" - -typedef struct st_typelib { /* Different types saved here */ - unsigned int count; /* How many types */ - const char *name; /* Name of typelib */ - const char **type_names; - unsigned int *type_lengths; -} TYPELIB; - -extern my_ulonglong find_typeset(char *x, TYPELIB *typelib,int *error_position); -extern int find_type_or_exit(const char *x, TYPELIB *typelib, - const char *option); -extern int find_type(char *x, const TYPELIB *typelib, unsigned int full_name); -extern void make_type(char *to,unsigned int nr,TYPELIB *typelib); -extern const char *get_type(TYPELIB *typelib,unsigned int nr); -extern TYPELIB *copy_typelib(MEM_ROOT *root, TYPELIB *from); - -extern TYPELIB sql_protocol_typelib; - -my_ulonglong find_set_from_flags(const TYPELIB *lib, unsigned int default_name, - my_ulonglong cur_set, my_ulonglong default_set, - const char *str, unsigned int length, - char **err_pos, unsigned int *err_len); - -#endif /* _typelib_h */ diff --git a/deps/mysqllite/libmysql/client_settings.h b/deps/mysqllite/libmysql/client_settings.h deleted file mode 100644 index c5a08ce1fcc32f..00000000000000 --- a/deps/mysqllite/libmysql/client_settings.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2003-2005 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef CLIENT_SETTINGS_INCLUDED -#define CLIENT_SETTINGS_INCLUDED -#else -#error You have already included an client_settings.h and it should not be included twice -#endif /* CLIENT_SETTINGS_INCLUDED */ - -extern uint mysql_port; -extern char * mysql_unix_port; - -#define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | \ - CLIENT_LONG_FLAG | \ - CLIENT_TRANSACTIONS | \ - CLIENT_PROTOCOL_41 | \ - CLIENT_SECURE_CONNECTION | \ - CLIENT_MULTI_RESULTS | \ - CLIENT_PS_MULTI_RESULTS | \ - CLIENT_PLUGIN_AUTH) - -sig_handler my_pipe_sig_handler(int sig); -void read_user_name(char *name); -my_bool handle_local_infile(MYSQL *mysql, const char *net_filename); - -void mysql_read_default_options(struct st_mysql_options *options, - const char *filename,const char *group); -void mysql_detach_stmt_list(LIST **stmt_list, const char *func_name); -MYSQL * STDCALL -cli_mysql_real_connect(MYSQL *mysql,const char *host, const char *user, - const char *passwd, const char *db, - uint port, const char *unix_socket,ulong client_flag); - -void cli_mysql_close(MYSQL *mysql); - -MYSQL_FIELD * cli_list_fields(MYSQL *mysql); -my_bool cli_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt); -MYSQL_DATA * cli_read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields, - uint fields); -int cli_stmt_execute(MYSQL_STMT *stmt); -int cli_read_binary_rows(MYSQL_STMT *stmt); -int cli_unbuffered_fetch(MYSQL *mysql, char **row); -const char * cli_read_statistics(MYSQL *mysql); -int cli_read_change_user_result(MYSQL *mysql); - -#ifdef EMBEDDED_LIBRARY -int init_embedded_server(int argc, char **argv, char **groups); -void end_embedded_server(); -#endif /*EMBEDDED_LIBRARY*/ - -C_MODE_START -extern int mysql_init_character_set(MYSQL *mysql); -C_MODE_END diff --git a/deps/mysqllite/libmysql/errmsg.c b/deps/mysqllite/libmysql/errmsg.c deleted file mode 100644 index b99b3f2de303ae..00000000000000 --- a/deps/mysqllite/libmysql/errmsg.c +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright (C) 2000-2004 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation. - - There are special exceptions to the terms and conditions of the GPL as it - is applied to this software. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Error messages for MySQL clients */ -/* (Error messages for the daemon are in share/language/errmsg.sys) */ - -#include -#include -#include "errmsg.h" - -const char *client_errors[]= -{ - "Unknown MySQL error", - "Can't create UNIX socket (%d)", - "Can't connect to local MySQL server through socket '%-.100s' (%d)", - "Can't connect to MySQL server on '%-.100s' (%d)", - "Can't create TCP/IP socket (%d)", - "Unknown MySQL server host '%-.100s' (%d)", - "MySQL server has gone away", - "Protocol mismatch; server version = %d, client version = %d", - "MySQL client ran out of memory", - "Wrong host info", - "Localhost via UNIX socket", - "%-.100s via TCP/IP", - "Error in server handshake", - "Lost connection to MySQL server during query", - "Commands out of sync; you can't run this command now", - "Named pipe: %-.32s", - "Can't wait for named pipe to host: %-.64s pipe: %-.32s (%lu)", - "Can't open named pipe to host: %-.64s pipe: %-.32s (%lu)", - "Can't set state of named pipe to host: %-.64s pipe: %-.32s (%lu)", - "Can't initialize character set %-.32s (path: %-.100s)", - "Got packet bigger than 'max_allowed_packet' bytes", - "Embedded server", - "Error on SHOW SLAVE STATUS:", - "Error on SHOW SLAVE HOSTS:", - "Error connecting to slave:", - "Error connecting to master:", - "SSL connection error", - "Malformed packet", - "This client library is licensed only for use with MySQL servers having '%s' license", - "Invalid use of null pointer", - "Statement not prepared", - "No data supplied for parameters in prepared statement", - "Data truncated", - "No parameters exist in the statement", - "Invalid parameter number", - "Can't send long data for non-string/non-binary data types (parameter: %d)", - "Using unsupported buffer type: %d (parameter: %d)", - "Shared memory: %-.100s", - "Can't open shared memory; client could not create request event (%lu)", - "Can't open shared memory; no answer event received from server (%lu)", - "Can't open shared memory; server could not allocate file mapping (%lu)", - "Can't open shared memory; server could not get pointer to file mapping (%lu)", - "Can't open shared memory; client could not allocate file mapping (%lu)", - "Can't open shared memory; client could not get pointer to file mapping (%lu)", - "Can't open shared memory; client could not create %s event (%lu)", - "Can't open shared memory; no answer from server (%lu)", - "Can't open shared memory; cannot send request event to server (%lu)", - "Wrong or unknown protocol", - "Invalid connection handle", - "Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)", - "Row retrieval was canceled by mysql_stmt_close() call", - "Attempt to read column without prior row fetch", - "Prepared statement contains no metadata", - "Attempt to read a row while there is no result set associated with the statement", - "This feature is not implemented yet", - "Lost connection to MySQL server at '%s', system error: %d", - "Statement closed indirectly because of a preceeding %s() call", - "The number of columns in the result set differs from the number of bound buffers. You must reset the statement, rebind the result set columns, and execute the statement again", - "This handle is already connected. Use a separate handle for each connection.", - "Authentication plugin '%s' cannot be loaded: %s", - "" -}; - -const char** get_client_errmsgs() -{ - return client_errors; -} - -/* - Register client error messages for use with my_error(). - - SYNOPSIS - init_client_errs() - - RETURN - void -*/ - -void init_client_errs(void) -{ - (void) my_error_register(get_client_errmsgs, CR_ERROR_FIRST, CR_ERROR_LAST); -} - - -/* - Unregister client error messages. - - SYNOPSIS - finish_client_errs() - - RETURN - void -*/ - -void finish_client_errs(void) -{ - (void) my_error_unregister(CR_ERROR_FIRST, CR_ERROR_LAST); -} diff --git a/deps/mysqllite/libmysql/get_password.c b/deps/mysqllite/libmysql/get_password.c deleted file mode 100644 index 455b4b3c8f197a..00000000000000 --- a/deps/mysqllite/libmysql/get_password.c +++ /dev/null @@ -1,209 +0,0 @@ -/* Copyright (C) 2000-2004 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation. - - There are special exceptions to the terms and conditions of the GPL as it - is applied to this software. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* -** Ask for a password from tty -** This is an own file to avoid conflicts with curses -*/ -#include -#include -#include "mysql.h" -#include -#include - -#if defined(HAVE_BROKEN_GETPASS) && !defined(HAVE_GETPASSPHRASE) -#undef HAVE_GETPASS -#endif - -#ifdef HAVE_GETPASS -#ifdef HAVE_PWD_H -#include -#endif /* HAVE_PWD_H */ -#else /* ! HAVE_GETPASS */ -#if !defined(__WIN__) -#include -#ifdef HAVE_TERMIOS_H /* For tty-password */ -#include -#define TERMIO struct termios -#else -#ifdef HAVE_TERMIO_H /* For tty-password */ -#include -#define TERMIO struct termio -#else -#include -#define TERMIO struct sgttyb -#endif -#endif -#ifdef alpha_linux_port -#include /* QQ; Fix this in configure */ -#include -#endif -#else -#include -#endif /* __WIN__ */ -#endif /* HAVE_GETPASS */ - -#ifdef HAVE_GETPASSPHRASE /* For Solaris */ -#define getpass(A) getpassphrase(A) -#endif - -#if defined(__WIN__) -/* were just going to fake it here and get input from the keyboard */ -char *get_tty_password(const char *opt_message) -{ - char to[80]; - char *pos=to,*end=to+sizeof(to)-1; - int i=0; - DBUG_ENTER("get_tty_password"); - _cputs(opt_message ? opt_message : "Enter password: "); - for (;;) - { - char tmp; - tmp=_getch(); - if (tmp == '\b' || (int) tmp == 127) - { - if (pos != to) - { - _cputs("\b \b"); - pos--; - continue; - } - } - if (tmp == '\n' || tmp == '\r' || tmp == 3) - break; - if (iscntrl(tmp) || pos == end) - continue; - _cputs("*"); - *(pos++) = tmp; - } - while (pos != to && isspace(pos[-1]) == ' ') - pos--; /* Allow dummy space at end */ - *pos=0; - _cputs("\n"); - DBUG_RETURN(my_strdup(to,MYF(MY_FAE))); -} - -#else - -#ifndef HAVE_GETPASS -/* - Can't use fgets, because readline will get confused - length is max number of chars in to, not counting \0 - to will not include the eol characters. -*/ - -static void get_password(char *to,uint length,int fd, my_bool echo) -{ - char *pos=to,*end=to+length; - - for (;;) - { - char tmp; - if (my_read(fd,&tmp,1,MYF(0)) != 1) - break; - if (tmp == '\b' || (int) tmp == 127) - { - if (pos != to) - { - if (echo) - { - fputs("\b \b",stdout); - fflush(stdout); - } - pos--; - continue; - } - } - if (tmp == '\n' || tmp == '\r' || tmp == 3) - break; - if (iscntrl(tmp) || pos == end) - continue; - if (echo) - { - fputc('*',stdout); - fflush(stdout); - } - *(pos++) = tmp; - } - while (pos != to && isspace(pos[-1]) == ' ') - pos--; /* Allow dummy space at end */ - *pos=0; - return; -} -#endif /* ! HAVE_GETPASS */ - - -char *get_tty_password(const char *opt_message) -{ -#ifdef HAVE_GETPASS - char *passbuff; -#else /* ! HAVE_GETPASS */ - TERMIO org,tmp; -#endif /* HAVE_GETPASS */ - char buff[80]; - - DBUG_ENTER("get_tty_password"); - -#ifdef HAVE_GETPASS - passbuff = getpass(opt_message ? opt_message : "Enter password: "); - - /* copy the password to buff and clear original (static) buffer */ - strnmov(buff, passbuff, sizeof(buff) - 1); -#ifdef _PASSWORD_LEN - memset(passbuff, 0, _PASSWORD_LEN); -#endif -#else - if (isatty(fileno(stdout))) - { - fputs(opt_message ? opt_message : "Enter password: ",stdout); - fflush(stdout); - } -#if defined(HAVE_TERMIOS_H) - tcgetattr(fileno(stdin), &org); - tmp = org; - tmp.c_lflag &= ~(ECHO | ISIG | ICANON); - tmp.c_cc[VMIN] = 1; - tmp.c_cc[VTIME] = 0; - tcsetattr(fileno(stdin), TCSADRAIN, &tmp); - get_password(buff, sizeof(buff)-1, fileno(stdin), isatty(fileno(stdout))); - tcsetattr(fileno(stdin), TCSADRAIN, &org); -#elif defined(HAVE_TERMIO_H) - ioctl(fileno(stdin), (int) TCGETA, &org); - tmp=org; - tmp.c_lflag &= ~(ECHO | ISIG | ICANON); - tmp.c_cc[VMIN] = 1; - tmp.c_cc[VTIME]= 0; - ioctl(fileno(stdin),(int) TCSETA, &tmp); - get_password(buff,sizeof(buff)-1,fileno(stdin),isatty(fileno(stdout))); - ioctl(fileno(stdin),(int) TCSETA, &org); -#else - gtty(fileno(stdin), &org); - tmp=org; - tmp.sg_flags &= ~ECHO; - tmp.sg_flags |= RAW; - stty(fileno(stdin), &tmp); - get_password(buff,sizeof(buff)-1,fileno(stdin),isatty(fileno(stdout))); - stty(fileno(stdin), &org); -#endif - if (isatty(fileno(stdout))) - fputc('\n',stdout); -#endif /* HAVE_GETPASS */ - - DBUG_RETURN(my_strdup(buff,MYF(MY_FAE))); -} -#endif /*__WIN__*/ diff --git a/deps/mysqllite/libmysql/libmysql.c b/deps/mysqllite/libmysql/libmysql.c deleted file mode 100644 index 3af9165de8c444..00000000000000 --- a/deps/mysqllite/libmysql/libmysql.c +++ /dev/null @@ -1,4832 +0,0 @@ -/* Copyright (C) 2000-2004 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation. - - There are special exceptions to the terms and conditions of the GPL as it - is applied to this software. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include -#include -#include -#include -#include -#include "mysql.h" -#include "mysql_version.h" -#include "mysqld_error.h" -#include "errmsg.h" -#include -#include -#include -#include -#ifdef HAVE_PWD_H -#include -#endif -#if !defined(__WIN__) -#include -#include -#include -#include -#ifdef HAVE_SELECT_H -#include -#endif -#ifdef HAVE_SYS_SELECT_H -#include -#endif -#endif /* !defined(__WIN__) */ -#ifdef HAVE_POLL -#include -#endif -#ifdef HAVE_SYS_UN_H -#include -#endif -#if !defined(__WIN__) -#include /* because of signal() */ -#endif -#ifndef INADDR_NONE -#define INADDR_NONE -1 -#endif - -#include -#include "client_settings.h" - -#undef net_buffer_length -#undef max_allowed_packet - -ulong net_buffer_length=8192; -ulong max_allowed_packet= 1024L*1024L*1024L; - - -#ifdef EMBEDDED_LIBRARY -#undef net_flush -my_bool net_flush(NET *net); -#endif - -#if defined(__WIN__) -/* socket_errno is defined in my_global.h for all platforms */ -#define perror(A) -#else -#include -#define SOCKET_ERROR -1 -#endif /* __WIN__ */ - -/* - If allowed through some configuration, then this needs to - be changed -*/ -#define MAX_LONG_DATA_LENGTH 8192 -#define unsigned_field(A) ((A)->flags & UNSIGNED_FLAG) - -static void append_wild(char *to,char *end,const char *wild); -sig_handler my_pipe_sig_handler(int sig); - -static my_bool mysql_client_init= 0; -static my_bool org_my_init_done= 0; - - -/* - Initialize the MySQL client library - - SYNOPSIS - mysql_server_init() - - NOTES - Should be called before doing any other calls to the MySQL - client library to initialize thread specific variables etc. - It's called by mysql_init() to ensure that things will work for - old not threaded applications that doesn't call mysql_server_init() - directly. - - RETURN - 0 ok - 1 could not initialize environment (out of memory or thread keys) -*/ - -int STDCALL mysql_server_init(int argc __attribute__((unused)), - char **argv __attribute__((unused)), - char **groups __attribute__((unused))) -{ - int result= 0; - if (!mysql_client_init) - { - mysql_client_init=1; - org_my_init_done=my_init_done; - if (my_init()) /* Will init threads */ - return 1; - init_client_errs(); - if (mysql_client_plugin_init()) - return 1; - if (!mysql_port) - { - char *env; - struct servent *serv_ptr __attribute__((unused)); - - mysql_port = MYSQL_PORT; - - /* - if builder specifically requested a default port, use that - (even if it coincides with our factory default). - only if they didn't do we check /etc/services (and, failing - on that, fall back to the factory default of 3306). - either default can be overridden by the environment variable - MYSQL_TCP_PORT, which in turn can be overridden with command - line options. - */ - -#if MYSQL_PORT_DEFAULT == 0 - if ((serv_ptr= getservbyname("mysql", "tcp"))) - mysql_port= (uint) ntohs((ushort) serv_ptr->s_port); -#endif - if ((env= getenv("MYSQL_TCP_PORT"))) - mysql_port=(uint) atoi(env); - } - - if (!mysql_unix_port) - { - char *env; -#ifdef __WIN__ - mysql_unix_port = (char*) MYSQL_NAMEDPIPE; -#else - mysql_unix_port = (char*) MYSQL_UNIX_ADDR; -#endif - if ((env = getenv("MYSQL_UNIX_PORT"))) - mysql_unix_port = env; - } - mysql_debug(NullS); -#if defined(SIGPIPE) && !defined(__WIN__) - (void) signal(SIGPIPE, SIG_IGN); -#endif -#ifdef EMBEDDED_LIBRARY - if (argc > -1) - result= init_embedded_server(argc, argv, groups); -#endif - } - else - result= (int)my_thread_init(); /* Init if new thread */ - return result; -} - - -/* - Free all memory and resources used by the client library - - NOTES - When calling this there should not be any other threads using - the library. - - To make things simpler when used with windows dll's (which calls this - function automaticly), it's safe to call this function multiple times. -*/ - - -void STDCALL mysql_server_end() -{ - if (!mysql_client_init) - return; - - mysql_client_plugin_deinit(); - -#ifdef EMBEDDED_LIBRARY - end_embedded_server(); -#endif - finish_client_errs(); - vio_end(); - - /* If library called my_init(), free memory allocated by it */ - if (!org_my_init_done) - { - my_end(0); - } - else - { - free_charsets(); - mysql_thread_end(); - } - - mysql_client_init= org_my_init_done= 0; -} - -static MYSQL_PARAMETERS mysql_internal_parameters= -{&max_allowed_packet, &net_buffer_length, 0}; - -MYSQL_PARAMETERS *STDCALL mysql_get_parameters(void) -{ - return &mysql_internal_parameters; -} - -my_bool STDCALL mysql_thread_init() -{ - return my_thread_init(); -} - -void STDCALL mysql_thread_end() -{ - my_thread_end(); -} - - -/* - Expand wildcard to a sql string -*/ - -static void -append_wild(char *to, char *end, const char *wild) -{ - end-=5; /* Some extra */ - if (wild && wild[0]) - { - to=strmov(to," like '"); - while (*wild && to < end) - { - if (*wild == '\\' || *wild == '\'') - *to++='\\'; - *to++= *wild++; - } - if (*wild) /* Too small buffer */ - *to++='%'; /* Nicer this way */ - to[0]='\''; - to[1]=0; - } -} - - -/************************************************************************** - Init debugging if MYSQL_DEBUG environment variable is found -**************************************************************************/ - -void STDCALL -mysql_debug(const char *debug __attribute__((unused))) -{ -#ifndef DBUG_OFF - char *env; - if (debug) - { - DBUG_PUSH(debug); - } - else if ((env = getenv("MYSQL_DEBUG"))) - { - DBUG_PUSH(env); -#if !defined(_WINVER) && !defined(WINVER) - puts("\n-------------------------------------------------------"); - puts("MYSQL_DEBUG found. libmysql started with the following:"); - puts(env); - puts("-------------------------------------------------------\n"); -#else - { - char buff[80]; - buff[sizeof(buff)-1]= 0; - strxnmov(buff,sizeof(buff)-1,"libmysql: ", env, NullS); - MessageBox((HWND) 0,"Debugging variable MYSQL_DEBUG used",buff,MB_OK); - } -#endif - } -#endif -} - - -/************************************************************************** - Ignore SIGPIPE handler - ARGSUSED -**************************************************************************/ - -sig_handler -my_pipe_sig_handler(int sig __attribute__((unused))) -{ - DBUG_PRINT("info",("Hit by signal %d",sig)); -#ifdef SIGNAL_HANDLER_RESET_ON_DELIVERY - (void) signal(SIGPIPE, my_pipe_sig_handler); -#endif -} - - -/************************************************************************** - Connect to sql server - If host == 0 then use localhost -**************************************************************************/ - -#ifdef USE_OLD_FUNCTIONS -MYSQL * STDCALL -mysql_connect(MYSQL *mysql,const char *host, - const char *user, const char *passwd) -{ - MYSQL *res; - mysql=mysql_init(mysql); /* Make it thread safe */ - { - DBUG_ENTER("mysql_connect"); - if (!(res=mysql_real_connect(mysql,host,user,passwd,NullS,0,NullS,0))) - { - if (mysql->free_me) - my_free(mysql); - } - mysql->reconnect= 1; - DBUG_RETURN(res); - } -} -#endif - - -/************************************************************************** - Change user and database -**************************************************************************/ - -my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, - const char *passwd, const char *db) -{ - int rc; - CHARSET_INFO *saved_cs= mysql->charset; - char *saved_user= mysql->user; - char *saved_passwd= mysql->passwd; - char *saved_db= mysql->db; - - DBUG_ENTER("mysql_change_user"); - - /* Get the connection-default character set. */ - - if (mysql_init_character_set(mysql)) - { - mysql->charset= saved_cs; - DBUG_RETURN(TRUE); - } - - /* Use an empty string instead of NULL. */ - - mysql->user= (char*)(user ? user : ""); - mysql->passwd= (char*)(passwd ? passwd : ""); - mysql->db= 0; - - rc= run_plugin_auth(mysql, 0, 0, 0, db); - - /* - The server will close all statements no matter was the attempt - to change user successful or not. - */ - mysql_detach_stmt_list(&mysql->stmts, "mysql_change_user"); - if (rc == 0) - { - /* Free old connect information */ - my_free(saved_user); - my_free(saved_passwd); - my_free(saved_db); - - /* alloc new connect information */ - mysql->user= my_strdup(mysql->user, MYF(MY_WME)); - mysql->passwd= my_strdup(mysql->passwd, MYF(MY_WME)); - mysql->db= db ? my_strdup(db, MYF(MY_WME)) : 0; - } - else - { - mysql->charset= saved_cs; - mysql->user= saved_user; - mysql->passwd= saved_passwd; - mysql->db= saved_db; - } - - DBUG_RETURN(rc); -} - -#if defined(HAVE_GETPWUID) && defined(NO_GETPWUID_DECL) -struct passwd *getpwuid(uid_t); -char* getlogin(void); -#endif - -#if !defined(__WIN__) - -void read_user_name(char *name) -{ - DBUG_ENTER("read_user_name"); - if (geteuid() == 0) - (void) strmov(name,"root"); /* allow use of surun */ - else - { -#ifdef HAVE_GETPWUID - struct passwd *skr; - const char *str; - if ((str=getlogin()) == NULL) - { - if ((skr=getpwuid(geteuid())) != NULL) - str=skr->pw_name; - else if (!(str=getenv("USER")) && !(str=getenv("LOGNAME")) && - !(str=getenv("LOGIN"))) - str="UNKNOWN_USER"; - } - (void) strmake(name,str,USERNAME_LENGTH); -#elif HAVE_CUSERID - (void) cuserid(name); -#else - strmov(name,"UNKNOWN_USER"); -#endif - } - DBUG_VOID_RETURN; -} - -#else /* If Windows */ - -void read_user_name(char *name) -{ - char *str=getenv("USER"); /* ODBC will send user variable */ - strmake(name,str ? str : "ODBC", USERNAME_LENGTH); -} - -#endif - -my_bool handle_local_infile(MYSQL *mysql, const char *net_filename) -{ - my_bool result= 1; - uint packet_length=MY_ALIGN(mysql->net.max_packet-16,IO_SIZE); - NET *net= &mysql->net; - int readcount; - void *li_ptr; /* pass state to local_infile functions */ - char *buf; /* buffer to be filled by local_infile_read */ - struct st_mysql_options *options= &mysql->options; - DBUG_ENTER("handle_local_infile"); - - /* check that we've got valid callback functions */ - if (!(options->local_infile_init && - options->local_infile_read && - options->local_infile_end && - options->local_infile_error)) - { - /* if any of the functions is invalid, set the default */ - mysql_set_local_infile_default(mysql); - } - - /* copy filename into local memory and allocate read buffer */ - if (!(buf=my_malloc(packet_length, MYF(0)))) - { - set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate); - DBUG_RETURN(1); - } - - /* initialize local infile (open file, usually) */ - if ((*options->local_infile_init)(&li_ptr, net_filename, - options->local_infile_userdata)) - { - (void) my_net_write(net,(const uchar*) "",0); /* Server needs one packet */ - net_flush(net); - strmov(net->sqlstate, unknown_sqlstate); - net->last_errno= - (*options->local_infile_error)(li_ptr, - net->last_error, - sizeof(net->last_error)-1); - goto err; - } - - /* read blocks of data from local infile callback */ - while ((readcount = - (*options->local_infile_read)(li_ptr, buf, - packet_length)) > 0) - { - if (my_net_write(net, (uchar*) buf, readcount)) - { - DBUG_PRINT("error", - ("Lost connection to MySQL server during LOAD DATA of local file")); - set_mysql_error(mysql, CR_SERVER_LOST, unknown_sqlstate); - goto err; - } - } - - /* Send empty packet to mark end of file */ - if (my_net_write(net, (const uchar*) "", 0) || net_flush(net)) - { - set_mysql_error(mysql, CR_SERVER_LOST, unknown_sqlstate); - goto err; - } - - if (readcount < 0) - { - net->last_errno= - (*options->local_infile_error)(li_ptr, - net->last_error, - sizeof(net->last_error)-1); - goto err; - } - - result=0; /* Ok */ - -err: - /* free up memory allocated with _init, usually */ - (*options->local_infile_end)(li_ptr); - my_free(buf); - DBUG_RETURN(result); -} - - -/**************************************************************************** - Default handlers for LOAD LOCAL INFILE -****************************************************************************/ - -typedef struct st_default_local_infile -{ - int fd; - int error_num; - const char *filename; - char error_msg[LOCAL_INFILE_ERROR_LEN]; -} default_local_infile_data; - - -/* - Open file for LOAD LOCAL INFILE - - SYNOPSIS - default_local_infile_init() - ptr Store pointer to internal data here - filename File name to open. This may be in unix format ! - - - NOTES - Even if this function returns an error, the load data interface - guarantees that default_local_infile_end() is called. - - RETURN - 0 ok - 1 error -*/ - -static int default_local_infile_init(void **ptr, const char *filename, - void *userdata __attribute__ ((unused))) -{ - default_local_infile_data *data; - char tmp_name[FN_REFLEN]; - - if (!(*ptr= data= ((default_local_infile_data *) - my_malloc(sizeof(default_local_infile_data), MYF(0))))) - return 1; /* out of memory */ - - data->error_msg[0]= 0; - data->error_num= 0; - data->filename= filename; - - fn_format(tmp_name, filename, "", "", MY_UNPACK_FILENAME); - if ((data->fd = my_open(tmp_name, O_RDONLY, MYF(0))) < 0) - { - data->error_num= my_errno; - my_snprintf(data->error_msg, sizeof(data->error_msg)-1, - EE(EE_FILENOTFOUND), tmp_name, data->error_num); - return 1; - } - return 0; /* ok */ -} - - -/* - Read data for LOAD LOCAL INFILE - - SYNOPSIS - default_local_infile_read() - ptr Points to handle allocated by _init - buf Read data here - buf_len Ammount of data to read - - RETURN - > 0 number of bytes read - == 0 End of data - < 0 Error -*/ - -static int default_local_infile_read(void *ptr, char *buf, uint buf_len) -{ - int count; - default_local_infile_data*data = (default_local_infile_data *) ptr; - - if ((count= (int) my_read(data->fd, (uchar *) buf, buf_len, MYF(0))) < 0) - { - data->error_num= EE_READ; /* the errmsg for not entire file read */ - my_snprintf(data->error_msg, sizeof(data->error_msg)-1, - EE(EE_READ), - data->filename, my_errno); - } - return count; -} - - -/* - Read data for LOAD LOCAL INFILE - - SYNOPSIS - default_local_infile_end() - ptr Points to handle allocated by _init - May be NULL if _init failed! - - RETURN -*/ - -static void default_local_infile_end(void *ptr) -{ - default_local_infile_data *data= (default_local_infile_data *) ptr; - if (data) /* If not error on open */ - { - if (data->fd >= 0) - my_close(data->fd, MYF(MY_WME)); - my_free(ptr); - } -} - - -/* - Return error from LOAD LOCAL INFILE - - SYNOPSIS - default_local_infile_end() - ptr Points to handle allocated by _init - May be NULL if _init failed! - error_msg Store error text here - error_msg_len Max lenght of error_msg - - RETURN - error message number -*/ - -static int -default_local_infile_error(void *ptr, char *error_msg, uint error_msg_len) -{ - default_local_infile_data *data = (default_local_infile_data *) ptr; - if (data) /* If not error on open */ - { - strmake(error_msg, data->error_msg, error_msg_len); - return data->error_num; - } - /* This can only happen if we got error on malloc of handle */ - strmov(error_msg, ER(CR_OUT_OF_MEMORY)); - return CR_OUT_OF_MEMORY; -} - - -void -mysql_set_local_infile_handler(MYSQL *mysql, - int (*local_infile_init)(void **, const char *, - void *), - int (*local_infile_read)(void *, char *, uint), - void (*local_infile_end)(void *), - int (*local_infile_error)(void *, char *, uint), - void *userdata) -{ - mysql->options.local_infile_init= local_infile_init; - mysql->options.local_infile_read= local_infile_read; - mysql->options.local_infile_end= local_infile_end; - mysql->options.local_infile_error= local_infile_error; - mysql->options.local_infile_userdata = userdata; -} - - -void mysql_set_local_infile_default(MYSQL *mysql) -{ - mysql->options.local_infile_init= default_local_infile_init; - mysql->options.local_infile_read= default_local_infile_read; - mysql->options.local_infile_end= default_local_infile_end; - mysql->options.local_infile_error= default_local_infile_error; -} - - -/************************************************************************** - Do a query. If query returned rows, free old rows. - Read data by mysql_store_result or by repeat call of mysql_fetch_row -**************************************************************************/ - -int STDCALL -mysql_query(MYSQL *mysql, const char *query) -{ - return mysql_real_query(mysql,query, (uint) strlen(query)); -} - - -/************************************************************************** - Return next field of the query results -**************************************************************************/ - -MYSQL_FIELD * STDCALL -mysql_fetch_field(MYSQL_RES *result) -{ - if (result->current_field >= result->field_count) - return(NULL); - return &result->fields[result->current_field++]; -} - - -/************************************************************************** - Move to a specific row and column -**************************************************************************/ - -void STDCALL -mysql_data_seek(MYSQL_RES *result, my_ulonglong row) -{ - MYSQL_ROWS *tmp=0; - DBUG_PRINT("info",("mysql_data_seek(%ld)",(long) row)); - if (result->data) - for (tmp=result->data->data; row-- && tmp ; tmp = tmp->next) ; - result->current_row=0; - result->data_cursor = tmp; -} - - -/************************************************************************* - put the row or field cursor one a position one got from mysql_row_tell() - This doesn't restore any data. The next mysql_fetch_row or - mysql_fetch_field will return the next row or field after the last used -*************************************************************************/ - -MYSQL_ROW_OFFSET STDCALL -mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET row) -{ - MYSQL_ROW_OFFSET return_value=result->data_cursor; - result->current_row= 0; - result->data_cursor= row; - return return_value; -} - - -MYSQL_FIELD_OFFSET STDCALL -mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET field_offset) -{ - MYSQL_FIELD_OFFSET return_value=result->current_field; - result->current_field=field_offset; - return return_value; -} - - -/***************************************************************************** - List all databases -*****************************************************************************/ - -MYSQL_RES * STDCALL -mysql_list_dbs(MYSQL *mysql, const char *wild) -{ - char buff[255]; - DBUG_ENTER("mysql_list_dbs"); - - append_wild(strmov(buff,"show databases"),buff+sizeof(buff),wild); - if (mysql_query(mysql,buff)) - DBUG_RETURN(0); - DBUG_RETURN (mysql_store_result(mysql)); -} - - -/***************************************************************************** - List all tables in a database - If wild is given then only the tables matching wild is returned -*****************************************************************************/ - -MYSQL_RES * STDCALL -mysql_list_tables(MYSQL *mysql, const char *wild) -{ - char buff[255]; - DBUG_ENTER("mysql_list_tables"); - - append_wild(strmov(buff,"show tables"),buff+sizeof(buff),wild); - if (mysql_query(mysql,buff)) - DBUG_RETURN(0); - DBUG_RETURN (mysql_store_result(mysql)); -} - - -MYSQL_FIELD *cli_list_fields(MYSQL *mysql) -{ - MYSQL_DATA *query; - if (!(query= cli_read_rows(mysql,(MYSQL_FIELD*) 0, - protocol_41(mysql) ? 8 : 6))) - return NULL; - - mysql->field_count= (uint) query->rows; - return unpack_fields(query,&mysql->field_alloc, - mysql->field_count, 1, mysql->server_capabilities); -} - - -/************************************************************************** - List all fields in a table - If wild is given then only the fields matching wild is returned - Instead of this use query: - show fields in 'table' like "wild" -**************************************************************************/ - -MYSQL_RES * STDCALL -mysql_list_fields(MYSQL *mysql, const char *table, const char *wild) -{ - MYSQL_RES *result; - MYSQL_FIELD *fields; - char buff[258],*end; - DBUG_ENTER("mysql_list_fields"); - DBUG_PRINT("enter",("table: '%s' wild: '%s'",table,wild ? wild : "")); - - end=strmake(strmake(buff, table,128)+1,wild ? wild : "",128); - free_old_query(mysql); - if (simple_command(mysql, COM_FIELD_LIST, (uchar*) buff, - (ulong) (end-buff), 1) || - !(fields= (*mysql->methods->list_fields)(mysql))) - DBUG_RETURN(NULL); - - if (!(result = (MYSQL_RES *) my_malloc(sizeof(MYSQL_RES), - MYF(MY_WME | MY_ZEROFILL)))) - DBUG_RETURN(NULL); - - result->methods= mysql->methods; - result->field_alloc=mysql->field_alloc; - mysql->fields=0; - result->field_count = mysql->field_count; - result->fields= fields; - result->eof=1; - DBUG_RETURN(result); -} - -/* List all running processes (threads) in server */ - -MYSQL_RES * STDCALL -mysql_list_processes(MYSQL *mysql) -{ - MYSQL_DATA *fields; - uint field_count; - uchar *pos; - DBUG_ENTER("mysql_list_processes"); - - LINT_INIT(fields); - if (simple_command(mysql,COM_PROCESS_INFO,0,0,0)) - DBUG_RETURN(0); - free_old_query(mysql); - pos=(uchar*) mysql->net.read_pos; - field_count=(uint) net_field_length(&pos); - if (!(fields = (*mysql->methods->read_rows)(mysql,(MYSQL_FIELD*) 0, - protocol_41(mysql) ? 7 : 5))) - DBUG_RETURN(NULL); - if (!(mysql->fields=unpack_fields(fields,&mysql->field_alloc,field_count,0, - mysql->server_capabilities))) - DBUG_RETURN(0); - mysql->status=MYSQL_STATUS_GET_RESULT; - mysql->field_count=field_count; - DBUG_RETURN(mysql_store_result(mysql)); -} - - -#ifdef USE_OLD_FUNCTIONS -int STDCALL -mysql_create_db(MYSQL *mysql, const char *db) -{ - DBUG_ENTER("mysql_createdb"); - DBUG_PRINT("enter",("db: %s",db)); - DBUG_RETURN(simple_command(mysql,COM_CREATE_DB,db, (ulong) strlen(db),0)); -} - - -int STDCALL -mysql_drop_db(MYSQL *mysql, const char *db) -{ - DBUG_ENTER("mysql_drop_db"); - DBUG_PRINT("enter",("db: %s",db)); - DBUG_RETURN(simple_command(mysql,COM_DROP_DB,db,(ulong) strlen(db),0)); -} -#endif - - -int STDCALL -mysql_shutdown(MYSQL *mysql, enum mysql_enum_shutdown_level shutdown_level) -{ - uchar level[1]; - DBUG_ENTER("mysql_shutdown"); - level[0]= (uchar) shutdown_level; - DBUG_RETURN(simple_command(mysql, COM_SHUTDOWN, level, 1, 0)); -} - - -int STDCALL -mysql_refresh(MYSQL *mysql,uint options) -{ - uchar bits[1]; - DBUG_ENTER("mysql_refresh"); - bits[0]= (uchar) options; - DBUG_RETURN(simple_command(mysql, COM_REFRESH, bits, 1, 0)); -} - - -int STDCALL -mysql_kill(MYSQL *mysql,ulong pid) -{ - uchar buff[4]; - DBUG_ENTER("mysql_kill"); - int4store(buff,pid); - DBUG_RETURN(simple_command(mysql,COM_PROCESS_KILL,buff,sizeof(buff),0)); -} - - -int STDCALL -mysql_set_server_option(MYSQL *mysql, enum enum_mysql_set_option option) -{ - uchar buff[2]; - DBUG_ENTER("mysql_set_server_option"); - int2store(buff, (uint) option); - DBUG_RETURN(simple_command(mysql, COM_SET_OPTION, buff, sizeof(buff), 0)); -} - - -int STDCALL -mysql_dump_debug_info(MYSQL *mysql) -{ - DBUG_ENTER("mysql_dump_debug_info"); - DBUG_RETURN(simple_command(mysql,COM_DEBUG,0,0,0)); -} - - -const char *cli_read_statistics(MYSQL *mysql) -{ - mysql->net.read_pos[mysql->packet_length]=0; /* End of stat string */ - if (!mysql->net.read_pos[0]) - { - set_mysql_error(mysql, CR_WRONG_HOST_INFO, unknown_sqlstate); - return mysql->net.last_error; - } - return (char*) mysql->net.read_pos; -} - - -const char * STDCALL -mysql_stat(MYSQL *mysql) -{ - DBUG_ENTER("mysql_stat"); - if (simple_command(mysql,COM_STATISTICS,0,0,0)) - DBUG_RETURN(mysql->net.last_error); - DBUG_RETURN((*mysql->methods->read_statistics)(mysql)); -} - - -int STDCALL -mysql_ping(MYSQL *mysql) -{ - int res; - DBUG_ENTER("mysql_ping"); - res= simple_command(mysql,COM_PING,0,0,0); - if (res == CR_SERVER_LOST && mysql->reconnect) - res= simple_command(mysql,COM_PING,0,0,0); - DBUG_RETURN(res); -} - - -const char * STDCALL -mysql_get_server_info(MYSQL *mysql) -{ - return((char*) mysql->server_version); -} - - -const char * STDCALL -mysql_get_host_info(MYSQL *mysql) -{ - return(mysql->host_info); -} - - -uint STDCALL -mysql_get_proto_info(MYSQL *mysql) -{ - return (mysql->protocol_version); -} - -const char * STDCALL -mysql_get_client_info(void) -{ - return (char*) MYSQL_SERVER_VERSION; -} - -ulong STDCALL mysql_get_client_version(void) -{ - return MYSQL_VERSION_ID; -} - -my_bool STDCALL mysql_eof(MYSQL_RES *res) -{ - return res->eof; -} - -MYSQL_FIELD * STDCALL mysql_fetch_field_direct(MYSQL_RES *res,uint fieldnr) -{ - return &(res)->fields[fieldnr]; -} - -MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res) -{ - return (res)->fields; -} - -MYSQL_ROW_OFFSET STDCALL mysql_row_tell(MYSQL_RES *res) -{ - return res->data_cursor; -} - -MYSQL_FIELD_OFFSET STDCALL mysql_field_tell(MYSQL_RES *res) -{ - return (res)->current_field; -} - -/* MYSQL */ - -unsigned int STDCALL mysql_field_count(MYSQL *mysql) -{ - return mysql->field_count; -} - -my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql) -{ - return mysql->affected_rows; -} - -my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql) -{ - return mysql->insert_id; -} - -const char *STDCALL mysql_sqlstate(MYSQL *mysql) -{ - return mysql ? mysql->net.sqlstate : cant_connect_sqlstate; -} - -uint STDCALL mysql_warning_count(MYSQL *mysql) -{ - return mysql->warning_count; -} - -const char *STDCALL mysql_info(MYSQL *mysql) -{ - return mysql->info; -} - -ulong STDCALL mysql_thread_id(MYSQL *mysql) -{ - return (mysql)->thread_id; -} - -const char * STDCALL mysql_character_set_name(MYSQL *mysql) -{ - return mysql->charset->csname; -} - -void STDCALL mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *csinfo) -{ - csinfo->number = mysql->charset->number; - csinfo->state = mysql->charset->state; - csinfo->csname = mysql->charset->csname; - csinfo->name = mysql->charset->name; - csinfo->comment = mysql->charset->comment; - csinfo->mbminlen = mysql->charset->mbminlen; - csinfo->mbmaxlen = mysql->charset->mbmaxlen; - - if (mysql->options.charset_dir) - csinfo->dir = mysql->options.charset_dir; - else - csinfo->dir = charsets_dir; -} - -uint STDCALL mysql_thread_safe(void) -{ - return 1; -} - - -my_bool STDCALL mysql_embedded(void) -{ -#ifdef EMBEDDED_LIBRARY - return 1; -#else - return 0; -#endif -} - -/**************************************************************************** - Some support functions -****************************************************************************/ - -/* - Functions called my my_net_init() to set some application specific variables -*/ - -void my_net_local_init(NET *net) -{ - net->max_packet= (uint) net_buffer_length; - my_net_set_read_timeout(net, CLIENT_NET_READ_TIMEOUT); - my_net_set_write_timeout(net, CLIENT_NET_WRITE_TIMEOUT); - net->retry_count= 1; - net->max_packet_size= max(net_buffer_length, max_allowed_packet); -} - -/* - This function is used to create HEX string that you - can use in a SQL statement in of the either ways: - INSERT INTO blob_column VALUES (0xAABBCC); (any MySQL version) - INSERT INTO blob_column VALUES (X'AABBCC'); (4.1 and higher) - - The string in "from" is encoded to a HEX string. - The result is placed in "to" and a terminating null byte is appended. - - The string pointed to by "from" must be "length" bytes long. - You must allocate the "to" buffer to be at least length*2+1 bytes long. - Each character needs two bytes, and you need room for the terminating - null byte. When mysql_hex_string() returns, the contents of "to" will - be a null-terminated string. The return value is the length of the - encoded string, not including the terminating null character. - - The return value does not contain any leading 0x or a leading X' and - trailing '. The caller must supply whichever of those is desired. -*/ - -ulong STDCALL -mysql_hex_string(char *to, const char *from, ulong length) -{ - char *to0= to; - const char *end; - - for (end= from + length; from < end; from++) - { - *to++= _dig_vec_upper[((unsigned char) *from) >> 4]; - *to++= _dig_vec_upper[((unsigned char) *from) & 0x0F]; - } - *to= '\0'; - return (ulong) (to-to0); -} - -/* - Add escape characters to a string (blob?) to make it suitable for a insert - to should at least have place for length*2+1 chars - Returns the length of the to string -*/ - -ulong STDCALL -mysql_escape_string(char *to,const char *from,ulong length) -{ - return (uint) escape_string_for_mysql(default_charset_info, to, 0, from, length); -} - -ulong STDCALL -mysql_real_escape_string(MYSQL *mysql, char *to,const char *from, - ulong length) -{ - if (mysql->server_status & SERVER_STATUS_NO_BACKSLASH_ESCAPES) - return (uint) escape_quotes_for_mysql(mysql->charset, to, 0, from, length); - return (uint) escape_string_for_mysql(mysql->charset, to, 0, from, length); -} - -void STDCALL -myodbc_remove_escape(MYSQL *mysql,char *name) -{ - char *to; -#ifdef USE_MB - my_bool use_mb_flag=use_mb(mysql->charset); - char *UNINIT_VAR(end); - if (use_mb_flag) - for (end=name; *end ; end++) ; -#endif - - for (to=name ; *name ; name++) - { -#ifdef USE_MB - int l; - if (use_mb_flag && (l = my_ismbchar( mysql->charset, name , end ) ) ) - { - while (l--) - *to++ = *name++; - name--; - continue; - } -#endif - if (*name == '\\' && name[1]) - name++; - *to++= *name; - } - *to=0; -} - -/******************************************************************** - Implementation of new client API for 4.1 version. - - mysql_stmt_* are real prototypes used by applications. - - To make API work in embedded library all functions performing - real I/O are prefixed with 'cli_' (abbreviated from 'Call Level - Interface'). This functions are invoked via pointers set in - MYSQL::methods structure. Embedded counterparts, prefixed with - 'emb_' reside in libmysqld/lib_sql.cc. -*********************************************************************/ - -/******************* Declarations ***********************************/ - -/* Default number of rows fetched per one COM_STMT_FETCH command. */ - -#define DEFAULT_PREFETCH_ROWS (ulong) 1 - -/* - These functions are called by function pointer MYSQL_STMT::read_row_func. - Each function corresponds to one of the read methods: - - mysql_stmt_fetch without prior mysql_stmt_store_result, - - mysql_stmt_fetch when result is stored, - - mysql_stmt_fetch when there are no rows (always returns MYSQL_NO_DATA) -*/ - -static int stmt_read_row_unbuffered(MYSQL_STMT *stmt, unsigned char **row); -static int stmt_read_row_buffered(MYSQL_STMT *stmt, unsigned char **row); -static int stmt_read_row_from_cursor(MYSQL_STMT *stmt, unsigned char **row); -static int stmt_read_row_no_data(MYSQL_STMT *stmt, unsigned char **row); -static int stmt_read_row_no_result_set(MYSQL_STMT *stmt, unsigned char **row); - -/* - This function is used in mysql_stmt_store_result if - STMT_ATTR_UPDATE_MAX_LENGTH attribute is set. -*/ -static void stmt_update_metadata(MYSQL_STMT *stmt, MYSQL_ROWS *data); -static my_bool setup_one_fetch_function(MYSQL_BIND *, MYSQL_FIELD *field); - -/* Auxilary function used to reset statement handle. */ - -#define RESET_SERVER_SIDE 1 -#define RESET_LONG_DATA 2 -#define RESET_STORE_RESULT 4 -#define RESET_CLEAR_ERROR 8 - -static my_bool reset_stmt_handle(MYSQL_STMT *stmt, uint flags); - -/* - Maximum sizes of MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, MYSQL_TYPE_DATETIME - values stored in network buffer. -*/ - -/* 1 (length) + 2 (year) + 1 (month) + 1 (day) */ -#define MAX_DATE_REP_LENGTH 5 - -/* - 1 (length) + 1 (is negative) + 4 (day count) + 1 (hour) - + 1 (minute) + 1 (seconds) + 4 (microseconds) -*/ -#define MAX_TIME_REP_LENGTH 13 - -/* - 1 (length) + 2 (year) + 1 (month) + 1 (day) + - 1 (hour) + 1 (minute) + 1 (second) + 4 (microseconds) -*/ -#define MAX_DATETIME_REP_LENGTH 12 - -#define MAX_DOUBLE_STRING_REP_LENGTH 331 - -/* A macro to check truncation errors */ - -#define IS_TRUNCATED(value, is_unsigned, min, max, umax) \ - ((is_unsigned) ? (((value) > (umax) || (value) < 0) ? 1 : 0) : \ - (((value) > (max) || (value) < (min)) ? 1 : 0)) - -#define BIND_RESULT_DONE 1 -/* - We report truncations only if at least one of MYSQL_BIND::error - pointers is set. In this case stmt->bind_result_done |-ed with - this flag. -*/ -#define REPORT_DATA_TRUNCATION 2 - -/**************** Misc utility functions ****************************/ - -/* - Reallocate the NET package to have at least length bytes available. - - SYNPOSIS - my_realloc_str() - net The NET structure to modify. - length Ensure that net->buff has space for at least - this number of bytes. - - RETURN VALUES - 0 Success. - 1 Error, i.e. out of memory or requested packet size is bigger - than max_allowed_packet. The error code is stored in net->last_errno. -*/ - -static my_bool my_realloc_str(NET *net, ulong length) -{ - ulong buf_length= (ulong) (net->write_pos - net->buff); - my_bool res=0; - DBUG_ENTER("my_realloc_str"); - if (buf_length + length > net->max_packet) - { - res= net_realloc(net, buf_length + length); - if (res) - { - strmov(net->sqlstate, unknown_sqlstate); - strmov(net->last_error, ER(net->last_errno)); - } - net->write_pos= net->buff+ buf_length; - } - DBUG_RETURN(res); -} - - -static void stmt_clear_error(MYSQL_STMT *stmt) -{ - if (stmt->last_errno) - { - stmt->last_errno= 0; - stmt->last_error[0]= '\0'; - strmov(stmt->sqlstate, not_error_sqlstate); - } -} - -/** - Set statement error code, sqlstate, and error message - from given errcode and sqlstate. -*/ - -void set_stmt_error(MYSQL_STMT * stmt, int errcode, - const char *sqlstate, const char *err) -{ - DBUG_ENTER("set_stmt_error"); - DBUG_PRINT("enter", ("error: %d '%s'", errcode, ER(errcode))); - DBUG_ASSERT(stmt != 0); - - if (err == 0) - err= ER(errcode); - - stmt->last_errno= errcode; - strmov(stmt->last_error, ER(errcode)); - strmov(stmt->sqlstate, sqlstate); - - DBUG_VOID_RETURN; -} - - -/** - Set statement error code, sqlstate, and error message from NET. - - @param stmt a statement handle. Copy the error here. - @param net mysql->net. Source of the error. -*/ - -void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net) -{ - DBUG_ENTER("set_stmt_errmsg"); - DBUG_PRINT("enter", ("error: %d/%s '%s'", - net->last_errno, - net->sqlstate, - net->last_error)); - DBUG_ASSERT(stmt != 0); - - stmt->last_errno= net->last_errno; - if (net->last_error && net->last_error[0]) - strmov(stmt->last_error, net->last_error); - strmov(stmt->sqlstate, net->sqlstate); - - DBUG_VOID_RETURN; -} - -/* - Read and unpack server reply to COM_STMT_PREPARE command (sent from - mysql_stmt_prepare). - - SYNOPSIS - cli_read_prepare_result() - mysql connection handle - stmt statement handle - - RETURN VALUES - 0 ok - 1 error -*/ - -my_bool cli_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt) -{ - uchar *pos; - uint field_count, param_count; - ulong packet_length; - MYSQL_DATA *fields_data; - DBUG_ENTER("cli_read_prepare_result"); - - if ((packet_length= cli_safe_read(mysql)) == packet_error) - DBUG_RETURN(1); - mysql->warning_count= 0; - - pos= (uchar*) mysql->net.read_pos; - stmt->stmt_id= uint4korr(pos+1); pos+= 5; - /* Number of columns in result set */ - field_count= uint2korr(pos); pos+= 2; - /* Number of placeholders in the statement */ - param_count= uint2korr(pos); pos+= 2; - if (packet_length >= 12) - mysql->warning_count= uint2korr(pos+1); - - if (param_count != 0) - { - MYSQL_DATA *param_data; - - /* skip parameters data: we don't support it yet */ - if (!(param_data= (*mysql->methods->read_rows)(mysql, (MYSQL_FIELD*)0, 7))) - DBUG_RETURN(1); - free_rows(param_data); - } - - if (field_count != 0) - { - if (!(mysql->server_status & SERVER_STATUS_AUTOCOMMIT)) - mysql->server_status|= SERVER_STATUS_IN_TRANS; - - if (!(fields_data= (*mysql->methods->read_rows)(mysql,(MYSQL_FIELD*)0,7))) - DBUG_RETURN(1); - if (!(stmt->fields= unpack_fields(fields_data,&stmt->mem_root, - field_count,0, - mysql->server_capabilities))) - DBUG_RETURN(1); - } - stmt->field_count= field_count; - stmt->param_count= (ulong) param_count; - DBUG_PRINT("exit",("field_count: %u param_count: %u warning_count: %u", - field_count, param_count, (uint) mysql->warning_count)); - - DBUG_RETURN(0); -} - - -/* - Allocate memory and init prepared statement structure. - - SYNOPSIS - mysql_stmt_init() - mysql connection handle - - DESCRIPTION - This is an entry point of the new API. Returned handle stands for - a server-side prepared statement. Memory for this structure (~700 - bytes) is allocated using 'malloc'. Once created, the handle can be - reused many times. Created statement handle is bound to connection - handle provided to this call: its lifetime is limited by lifetime - of connection. - 'mysql_stmt_init()' is a pure local call, server side structure is - created only in mysql_stmt_prepare. - Next steps you may want to make: - - set a statement attribute (mysql_stmt_attr_set()), - - prepare statement handle with a query (mysql_stmt_prepare()), - - close statement handle and free its memory (mysql_stmt_close()), - - reset statement with mysql_stmt_reset() (a no-op which will - just return). - Behaviour of the rest of API calls on this statement is not defined yet - (though we're working on making each wrong call sequence return - error). - - RETURN VALUE - statement structure upon success and NULL if out of - memory -*/ - -MYSQL_STMT * STDCALL -mysql_stmt_init(MYSQL *mysql) -{ - MYSQL_STMT *stmt; - DBUG_ENTER("mysql_stmt_init"); - - if (!(stmt= (MYSQL_STMT *) my_malloc(sizeof(MYSQL_STMT), - MYF(MY_WME | MY_ZEROFILL)))) - { - set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate); - DBUG_RETURN(0); - } - - init_alloc_root(&stmt->mem_root, 2048, 2048); - init_alloc_root(&stmt->result.alloc, 4096, 4096); - stmt->result.alloc.min_malloc= sizeof(MYSQL_ROWS); - mysql->stmts= list_add(mysql->stmts, &stmt->list); - stmt->list.data= stmt; - stmt->state= MYSQL_STMT_INIT_DONE; - stmt->mysql= mysql; - stmt->read_row_func= stmt_read_row_no_result_set; - stmt->prefetch_rows= DEFAULT_PREFETCH_ROWS; - strmov(stmt->sqlstate, not_error_sqlstate); - /* The rest of statement members was bzeroed inside malloc */ - - DBUG_RETURN(stmt); -} - - -/* - Prepare server side statement with query. - - SYNOPSIS - mysql_stmt_prepare() - stmt statement handle - query statement to prepare - length statement length - - DESCRIPTION - Associate statement with statement handle. This is done both on - client and server sides. At this point the server parses given query - and creates an internal structure to represent it. - Next steps you may want to make: - - find out if this statement returns a result set by - calling mysql_stmt_field_count(), and get result set metadata - with mysql_stmt_result_metadata(), - - if query contains placeholders, bind input parameters to placeholders - using mysql_stmt_bind_param(), - - otherwise proceed directly to mysql_stmt_execute(). - - IMPLEMENTATION NOTES - - if this is a re-prepare of the statement, first close previous data - structure on the server and free old statement data - - then send the query to server and get back number of placeholders, - number of columns in result set (if any), and result set metadata. - At the same time allocate memory for input and output parameters - to have less checks in mysql_stmt_bind_{param, result}. - - RETURN VALUES - 0 success - !0 error -*/ - -int STDCALL -mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length) -{ - MYSQL *mysql= stmt->mysql; - DBUG_ENTER("mysql_stmt_prepare"); - - if (!mysql) - { - /* mysql can be reset in mysql_close called from mysql_reconnect */ - set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate, NULL); - DBUG_RETURN(1); - } - - /* - Reset the last error in any case: that would clear the statement - if the previous prepare failed. - */ - stmt->last_errno= 0; - stmt->last_error[0]= '\0'; - - if ((int) stmt->state > (int) MYSQL_STMT_INIT_DONE) - { - /* This is second prepare with another statement */ - uchar buff[MYSQL_STMT_HEADER]; /* 4 bytes - stmt id */ - - if (reset_stmt_handle(stmt, RESET_LONG_DATA | RESET_STORE_RESULT)) - DBUG_RETURN(1); - /* - These members must be reset for API to - function in case of error or misuse. - */ - stmt->bind_param_done= stmt->bind_result_done= FALSE; - stmt->param_count= stmt->field_count= 0; - free_root(&stmt->mem_root, MYF(MY_KEEP_PREALLOC)); - - int4store(buff, stmt->stmt_id); - - /* - Close statement in server - - If there was a 'use' result from another statement, or from - mysql_use_result it won't be freed in mysql_stmt_free_result and - we should get 'Commands out of sync' here. - */ - stmt->state= MYSQL_STMT_INIT_DONE; - if (stmt_command(mysql, COM_STMT_CLOSE, buff, 4, stmt)) - { - set_stmt_errmsg(stmt, &mysql->net); - DBUG_RETURN(1); - } - } - - if (stmt_command(mysql, COM_STMT_PREPARE, (const uchar*) query, length, stmt)) - { - set_stmt_errmsg(stmt, &mysql->net); - DBUG_RETURN(1); - } - - if ((*mysql->methods->read_prepare_result)(mysql, stmt)) - { - set_stmt_errmsg(stmt, &mysql->net); - DBUG_RETURN(1); - } - - /* - alloc_root will return valid address even in case when param_count - and field_count are zero. Thus we should never rely on stmt->bind - or stmt->params when checking for existence of placeholders or - result set. - */ - if (!(stmt->params= (MYSQL_BIND *) alloc_root(&stmt->mem_root, - sizeof(MYSQL_BIND)* - (stmt->param_count + - stmt->field_count)))) - { - set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate, NULL); - DBUG_RETURN(1); - } - stmt->bind= stmt->params + stmt->param_count; - stmt->state= MYSQL_STMT_PREPARE_DONE; - DBUG_PRINT("info", ("Parameter count: %u", stmt->param_count)); - DBUG_RETURN(0); -} - -/* - Get result set metadata from reply to mysql_stmt_execute. - This is used mainly for SHOW commands, as metadata for these - commands is sent only with result set. - To be removed when all commands will fully support prepared mode. -*/ - -static void alloc_stmt_fields(MYSQL_STMT *stmt) -{ - MYSQL_FIELD *fields, *field, *end; - MEM_ROOT *alloc= &stmt->mem_root; - MYSQL *mysql= stmt->mysql; - - DBUG_ASSERT(mysql->field_count); - - stmt->field_count= mysql->field_count; - - /* - Get the field information for non-select statements - like SHOW and DESCRIBE commands - */ - if (!(stmt->fields= (MYSQL_FIELD *) alloc_root(alloc, - sizeof(MYSQL_FIELD) * - stmt->field_count)) || - !(stmt->bind= (MYSQL_BIND *) alloc_root(alloc, - sizeof(MYSQL_BIND) * - stmt->field_count))) - { - set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate, NULL); - return; - } - - for (fields= mysql->fields, end= fields+stmt->field_count, - field= stmt->fields; - field && fields < end; fields++, field++) - { - *field= *fields; /* To copy all numeric parts. */ - field->catalog= strmake_root(alloc, fields->catalog, - fields->catalog_length); - field->db= strmake_root(alloc, fields->db, fields->db_length); - field->table= strmake_root(alloc, fields->table, fields->table_length); - field->org_table= strmake_root(alloc, fields->org_table, - fields->org_table_length); - field->name= strmake_root(alloc, fields->name, fields->name_length); - field->org_name= strmake_root(alloc, fields->org_name, - fields->org_name_length); - field->def= fields->def ? strmake_root(alloc, fields->def, - fields->def_length) : 0; - field->def_length= field->def ? fields->def_length : 0; - field->extension= 0; /* Avoid dangling links. */ - field->max_length= 0; /* max_length is set in mysql_stmt_store_result() */ - } -} - - -/** - Update result set columns metadata if it was sent again in - reply to COM_STMT_EXECUTE. - - @note If the new field count is different from the original one, - an error is set and no update is performed. -*/ - -static void update_stmt_fields(MYSQL_STMT *stmt) -{ - MYSQL_FIELD *field= stmt->mysql->fields; - MYSQL_FIELD *field_end= field + stmt->field_count; - MYSQL_FIELD *stmt_field= stmt->fields; - MYSQL_BIND *my_bind= stmt->bind_result_done ? stmt->bind : 0; - - if (stmt->field_count != stmt->mysql->field_count) - { - /* - The tables used in the statement were altered, - and the query now returns a different number of columns. - There is no way to continue without reallocating the bind - array: - - if the number of columns increased, mysql_stmt_fetch() - will write beyond allocated memory - - if the number of columns decreased, some user-bound - buffers will be left unassigned without user knowing - that. - */ - set_stmt_error(stmt, CR_NEW_STMT_METADATA, unknown_sqlstate, NULL); - return; - } - - for (; field < field_end; ++field, ++stmt_field) - { - stmt_field->charsetnr= field->charsetnr; - stmt_field->length = field->length; - stmt_field->type = field->type; - stmt_field->flags = field->flags; - stmt_field->decimals = field->decimals; - if (my_bind) - { - /* Ignore return value: it should be 0 if bind_result succeeded. */ - (void) setup_one_fetch_function(my_bind++, stmt_field); - } - } -} - -/* - Returns prepared statement metadata in the form of a result set. - - SYNOPSIS - mysql_stmt_result_metadata() - stmt statement handle - - DESCRIPTION - This function should be used after mysql_stmt_execute(). - You can safely check that prepared statement has a result set by calling - mysql_stmt_field_count(): if number of fields is not zero, you can call - this function to get fields metadata. - Next steps you may want to make: - - find out number of columns in result set by calling - mysql_num_fields(res) (the same value is returned by - mysql_stmt_field_count()) - - fetch metadata for any column with mysql_fetch_field, - mysql_fetch_field_direct, mysql_fetch_fields, mysql_field_seek. - - free returned MYSQL_RES structure with mysql_free_result. - - proceed to binding of output parameters. - - RETURN - NULL statement contains no result set or out of memory. - In the latter case you can retreive error message - with mysql_stmt_error. - MYSQL_RES a result set with no rows -*/ - -MYSQL_RES * STDCALL -mysql_stmt_result_metadata(MYSQL_STMT *stmt) -{ - MYSQL_RES *result; - DBUG_ENTER("mysql_stmt_result_metadata"); - - /* - stmt->fields is only defined if stmt->field_count is not null; - stmt->field_count is initialized in prepare. - */ - if (!stmt->field_count) - DBUG_RETURN(0); - - if (!(result=(MYSQL_RES*) my_malloc(sizeof(*result), - MYF(MY_WME | MY_ZEROFILL)))) - { - set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate, NULL); - DBUG_RETURN(0); - } - - result->methods= stmt->mysql->methods; - result->eof= 1; /* Marker for buffered */ - result->fields= stmt->fields; - result->field_count= stmt->field_count; - /* The rest of members of 'result' was bzeroed inside malloc */ - DBUG_RETURN(result); -} - - -/* - Returns parameter columns meta information in the form of - result set. - - SYNOPSYS - mysql_stmt_param_metadata() - stmt statement handle - - DESCRIPTION - This function can be called after you prepared the statement handle - with mysql_stmt_prepare(). - XXX: not implemented yet. - - RETURN - MYSQL_RES on success, 0 if there is no metadata. - Currently this function always returns 0. -*/ - -MYSQL_RES * STDCALL -mysql_stmt_param_metadata(MYSQL_STMT *stmt) -{ - DBUG_ENTER("mysql_stmt_param_metadata"); - - if (!stmt->param_count) - DBUG_RETURN(0); - - /* - TODO: Fix this when server sends the information. - Till then keep a dummy prototype. - */ - DBUG_RETURN(0); -} - - -/* Store type of parameter in network buffer. */ - -static void store_param_type(unsigned char **pos, MYSQL_BIND *param) -{ - uint typecode= param->buffer_type | (param->is_unsigned ? 32768 : 0); - int2store(*pos, typecode); - *pos+= 2; -} - - -/* - Functions to store parameter data in network packet. - - SYNOPSIS - store_param_xxx() - net MySQL NET connection - param MySQL bind param - - DESCRIPTION - These funtions are invoked from mysql_stmt_execute() by - MYSQL_BIND::store_param_func pointer. This pointer is set once per - many executions in mysql_stmt_bind_param(). The caller must ensure - that network buffer have enough capacity to store parameter - (MYSQL_BIND::buffer_length contains needed number of bytes). -*/ - -static void store_param_tinyint(NET *net, MYSQL_BIND *param) -{ - *(net->write_pos++)= *(uchar *) param->buffer; -} - -static void store_param_short(NET *net, MYSQL_BIND *param) -{ - short value= *(short*) param->buffer; - int2store(net->write_pos,value); - net->write_pos+=2; -} - -static void store_param_int32(NET *net, MYSQL_BIND *param) -{ - int32 value= *(int32*) param->buffer; - int4store(net->write_pos,value); - net->write_pos+=4; -} - -static void store_param_int64(NET *net, MYSQL_BIND *param) -{ - longlong value= *(longlong*) param->buffer; - int8store(net->write_pos,value); - net->write_pos+= 8; -} - -static void store_param_float(NET *net, MYSQL_BIND *param) -{ - float value= *(float*) param->buffer; - float4store(net->write_pos, value); - net->write_pos+= 4; -} - -static void store_param_double(NET *net, MYSQL_BIND *param) -{ - double value= *(double*) param->buffer; - float8store(net->write_pos, value); - net->write_pos+= 8; -} - -static void store_param_time(NET *net, MYSQL_BIND *param) -{ - MYSQL_TIME *tm= (MYSQL_TIME *) param->buffer; - char buff[MAX_TIME_REP_LENGTH], *pos; - uint length; - - pos= buff+1; - pos[0]= tm->neg ? 1: 0; - int4store(pos+1, tm->day); - pos[5]= (uchar) tm->hour; - pos[6]= (uchar) tm->minute; - pos[7]= (uchar) tm->second; - int4store(pos+8, tm->second_part); - if (tm->second_part) - length= 12; - else if (tm->hour || tm->minute || tm->second || tm->day) - length= 8; - else - length= 0; - buff[0]= (char) length++; - memcpy((char *)net->write_pos, buff, length); - net->write_pos+= length; -} - -static void net_store_datetime(NET *net, MYSQL_TIME *tm) -{ - char buff[MAX_DATETIME_REP_LENGTH], *pos; - uint length; - - pos= buff+1; - - int2store(pos, tm->year); - pos[2]= (uchar) tm->month; - pos[3]= (uchar) tm->day; - pos[4]= (uchar) tm->hour; - pos[5]= (uchar) tm->minute; - pos[6]= (uchar) tm->second; - int4store(pos+7, tm->second_part); - if (tm->second_part) - length= 11; - else if (tm->hour || tm->minute || tm->second) - length= 7; - else if (tm->year || tm->month || tm->day) - length= 4; - else - length= 0; - buff[0]= (char) length++; - memcpy((char *)net->write_pos, buff, length); - net->write_pos+= length; -} - -static void store_param_date(NET *net, MYSQL_BIND *param) -{ - MYSQL_TIME tm= *((MYSQL_TIME *) param->buffer); - tm.hour= tm.minute= tm.second= tm.second_part= 0; - net_store_datetime(net, &tm); -} - -static void store_param_datetime(NET *net, MYSQL_BIND *param) -{ - MYSQL_TIME *tm= (MYSQL_TIME *) param->buffer; - net_store_datetime(net, tm); -} - -static void store_param_str(NET *net, MYSQL_BIND *param) -{ - /* param->length is always set in mysql_stmt_bind_param */ - ulong length= *param->length; - uchar *to= net_store_length(net->write_pos, length); - memcpy(to, param->buffer, length); - net->write_pos= to+length; -} - - -/* - Mark if the parameter is NULL. - - SYNOPSIS - store_param_null() - net MySQL NET connection - param MySQL bind param - - DESCRIPTION - A data package starts with a string of bits where we set a bit - if a parameter is NULL. Unlike bit string in result set row, here - we don't have reserved bits for OK/error packet. -*/ - -static void store_param_null(NET *net, MYSQL_BIND *param) -{ - uint pos= param->param_number; - net->buff[pos/8]|= (uchar) (1 << (pos & 7)); -} - - -/* - Store one parameter in network packet: data is read from - client buffer and saved in network packet by means of one - of store_param_xxxx functions. -*/ - -static my_bool store_param(MYSQL_STMT *stmt, MYSQL_BIND *param) -{ - NET *net= &stmt->mysql->net; - DBUG_ENTER("store_param"); - DBUG_PRINT("enter",("type: %d buffer: 0x%lx length: %lu is_null: %d", - param->buffer_type, - (long) (param->buffer ? param->buffer : NullS), - *param->length, *param->is_null)); - - if (*param->is_null) - store_param_null(net, param); - else - { - /* - Param->length should ALWAYS point to the correct length for the type - Either to the length pointer given by the user or param->buffer_length - */ - if ((my_realloc_str(net, *param->length))) - { - set_stmt_errmsg(stmt, net); - DBUG_RETURN(1); - } - (*param->store_param_func)(net, param); - } - DBUG_RETURN(0); -} - - -/* - Auxilary function to send COM_STMT_EXECUTE packet to server and read reply. - Used from cli_stmt_execute, which is in turn used by mysql_stmt_execute. -*/ - -static my_bool execute(MYSQL_STMT *stmt, char *packet, ulong length) -{ - MYSQL *mysql= stmt->mysql; - NET *net= &mysql->net; - uchar buff[4 /* size of stmt id */ + - 5 /* execution flags */]; - my_bool res; - DBUG_ENTER("execute"); - DBUG_DUMP("packet", (uchar *) packet, length); - - int4store(buff, stmt->stmt_id); /* Send stmt id to server */ - buff[4]= (char) stmt->flags; - int4store(buff+5, 1); /* iteration count */ - - res= test(cli_advanced_command(mysql, COM_STMT_EXECUTE, buff, sizeof(buff), - (uchar*) packet, length, 1, stmt) || - (*mysql->methods->read_query_result)(mysql)); - stmt->affected_rows= mysql->affected_rows; - stmt->server_status= mysql->server_status; - stmt->insert_id= mysql->insert_id; - if (res) - { - /* - Don't set stmt error if stmt->mysql is NULL, as the error in this case - has already been set by mysql_prune_stmt_list(). - */ - if (stmt->mysql) - set_stmt_errmsg(stmt, net); - DBUG_RETURN(1); - } - else if (mysql->status == MYSQL_STATUS_GET_RESULT) - stmt->mysql->status= MYSQL_STATUS_STATEMENT_GET_RESULT; - DBUG_RETURN(0); -} - - -int cli_stmt_execute(MYSQL_STMT *stmt) -{ - DBUG_ENTER("cli_stmt_execute"); - - if (stmt->param_count) - { - MYSQL *mysql= stmt->mysql; - NET *net= &mysql->net; - MYSQL_BIND *param, *param_end; - char *param_data; - ulong length; - uint null_count; - my_bool result; - - if (!stmt->bind_param_done) - { - set_stmt_error(stmt, CR_PARAMS_NOT_BOUND, unknown_sqlstate, NULL); - DBUG_RETURN(1); - } - if (mysql->status != MYSQL_STATUS_READY || - mysql->server_status & SERVER_MORE_RESULTS_EXISTS) - { - set_stmt_error(stmt, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate, NULL); - DBUG_RETURN(1); - } - - net_clear(net, 1); /* Sets net->write_pos */ - /* Reserve place for null-marker bytes */ - null_count= (stmt->param_count+7) /8; - if (my_realloc_str(net, null_count + 1)) - { - set_stmt_errmsg(stmt, net); - DBUG_RETURN(1); - } - bzero((char*) net->write_pos, null_count); - net->write_pos+= null_count; - param_end= stmt->params + stmt->param_count; - - /* In case if buffers (type) altered, indicate to server */ - *(net->write_pos)++= (uchar) stmt->send_types_to_server; - if (stmt->send_types_to_server) - { - if (my_realloc_str(net, 2 * stmt->param_count)) - { - set_stmt_errmsg(stmt, net); - DBUG_RETURN(1); - } - /* - Store types of parameters in first in first package - that is sent to the server. - */ - for (param= stmt->params; param < param_end ; param++) - store_param_type(&net->write_pos, param); - } - - for (param= stmt->params; param < param_end; param++) - { - /* check if mysql_stmt_send_long_data() was used */ - if (param->long_data_used) - param->long_data_used= 0; /* Clear for next execute call */ - else if (store_param(stmt, param)) - DBUG_RETURN(1); - } - length= (ulong) (net->write_pos - net->buff); - /* TODO: Look into avoding the following memdup */ - if (!(param_data= my_memdup(net->buff, length, MYF(0)))) - { - set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate, NULL); - DBUG_RETURN(1); - } - result= execute(stmt, param_data, length); - stmt->send_types_to_server=0; - my_free(param_data); - DBUG_RETURN(result); - } - DBUG_RETURN((int) execute(stmt,0,0)); -} - -/* - Read one row from buffered result set. Result set is created by prior - call to mysql_stmt_store_result(). - SYNOPSIS - stmt_read_row_buffered() - - RETURN VALUE - 0 - success; *row is set to valid row pointer (row data - is stored in result set buffer) - MYSQL_NO_DATA - end of result set. *row is set to NULL -*/ - -static int stmt_read_row_buffered(MYSQL_STMT *stmt, unsigned char **row) -{ - if (stmt->data_cursor) - { - *row= (uchar *) stmt->data_cursor->data; - stmt->data_cursor= stmt->data_cursor->next; - return 0; - } - *row= 0; - return MYSQL_NO_DATA; -} - -/* - Read one row from network: unbuffered non-cursor fetch. - If last row was read, or error occured, erase this statement - from record pointing to object unbuffered fetch is performed from. - - SYNOPSIS - stmt_read_row_unbuffered() - stmt statement handle - row pointer to write pointer to row data; - - RETURN VALUE - 0 - success; *row contains valid address of a row; - row data is stored in network buffer - 1 - error; error code is written to - stmt->last_{errno,error}; *row is not changed - MYSQL_NO_DATA - end of file was read from network; - *row is set to NULL -*/ - -static int stmt_read_row_unbuffered(MYSQL_STMT *stmt, unsigned char **row) -{ - int rc= 1; - MYSQL *mysql= stmt->mysql; - /* - This function won't be called if stmt->field_count is zero - or execution wasn't done: this is ensured by mysql_stmt_execute. - */ - if (!mysql) - { - set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate, NULL); - return 1; - } - if (mysql->status != MYSQL_STATUS_STATEMENT_GET_RESULT) - { - set_stmt_error(stmt, stmt->unbuffered_fetch_cancelled ? - CR_FETCH_CANCELED : CR_COMMANDS_OUT_OF_SYNC, - unknown_sqlstate, NULL); - goto error; - } - if ((*mysql->methods->unbuffered_fetch)(mysql, (char**) row)) - { - set_stmt_errmsg(stmt, &mysql->net); - /* - If there was an error, there are no more pending rows: - reset statement status to not hang up in following - mysql_stmt_close (it will try to flush result set before - closing the statement). - */ - mysql->status= MYSQL_STATUS_READY; - goto error; - } - if (!*row) - { - mysql->status= MYSQL_STATUS_READY; - rc= MYSQL_NO_DATA; - goto error; - } - return 0; -error: - if (mysql->unbuffered_fetch_owner == &stmt->unbuffered_fetch_cancelled) - mysql->unbuffered_fetch_owner= 0; - return rc; -} - - -/* - Fetch statement row using server side cursor. - - SYNOPSIS - stmt_read_row_from_cursor() - - RETURN VALUE - 0 success - 1 error - MYSQL_NO_DATA end of data -*/ - -static int -stmt_read_row_from_cursor(MYSQL_STMT *stmt, unsigned char **row) -{ - if (stmt->data_cursor) - return stmt_read_row_buffered(stmt, row); - if (stmt->server_status & SERVER_STATUS_LAST_ROW_SENT) - stmt->server_status &= ~SERVER_STATUS_LAST_ROW_SENT; - else - { - MYSQL *mysql= stmt->mysql; - NET *net= &mysql->net; - MYSQL_DATA *result= &stmt->result; - uchar buff[4 /* statement id */ + - 4 /* number of rows to fetch */]; - - free_root(&result->alloc, MYF(MY_KEEP_PREALLOC)); - result->data= NULL; - result->rows= 0; - /* Send row request to the server */ - int4store(buff, stmt->stmt_id); - int4store(buff + 4, stmt->prefetch_rows); /* number of rows to fetch */ - if ((*mysql->methods->advanced_command)(mysql, COM_STMT_FETCH, - buff, sizeof(buff), (uchar*) 0, 0, - 1, stmt)) - { - /* - Don't set stmt error if stmt->mysql is NULL, as the error in this case - has already been set by mysql_prune_stmt_list(). - */ - if (stmt->mysql) - set_stmt_errmsg(stmt, net); - return 1; - } - if ((*mysql->methods->read_rows_from_cursor)(stmt)) - return 1; - stmt->server_status= mysql->server_status; - - stmt->data_cursor= result->data; - return stmt_read_row_buffered(stmt, row); - } - *row= 0; - return MYSQL_NO_DATA; -} - - -/* - Default read row function to not SIGSEGV in client in - case of wrong sequence of API calls. -*/ - -static int -stmt_read_row_no_data(MYSQL_STMT *stmt __attribute__((unused)), - unsigned char **row __attribute__((unused))) -{ - return MYSQL_NO_DATA; -} - -static int -stmt_read_row_no_result_set(MYSQL_STMT *stmt __attribute__((unused)), - unsigned char **row __attribute__((unused))) -{ - set_stmt_error(stmt, CR_NO_RESULT_SET, unknown_sqlstate, NULL); - return 1; -} - - -/* - Get/set statement attributes - - SYNOPSIS - mysql_stmt_attr_get() - mysql_stmt_attr_set() - - attr_type statement attribute - value cast to const void * pointer to value. - - RETURN VALUE - 0 success - !0 wrong attribute type -*/ - -my_bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt, - enum enum_stmt_attr_type attr_type, - const void *value) -{ - switch (attr_type) { - case STMT_ATTR_UPDATE_MAX_LENGTH: - stmt->update_max_length= value ? *(const my_bool*) value : 0; - break; - case STMT_ATTR_CURSOR_TYPE: - { - ulong cursor_type; - cursor_type= value ? *(ulong*) value : 0UL; - if (cursor_type > (ulong) CURSOR_TYPE_READ_ONLY) - goto err_not_implemented; - stmt->flags= cursor_type; - break; - } - case STMT_ATTR_PREFETCH_ROWS: - { - ulong prefetch_rows= value ? *(ulong*) value : DEFAULT_PREFETCH_ROWS; - if (value == 0) - return TRUE; - stmt->prefetch_rows= prefetch_rows; - break; - } - default: - goto err_not_implemented; - } - return FALSE; -err_not_implemented: - set_stmt_error(stmt, CR_NOT_IMPLEMENTED, unknown_sqlstate, NULL); - return TRUE; -} - - -my_bool STDCALL mysql_stmt_attr_get(MYSQL_STMT *stmt, - enum enum_stmt_attr_type attr_type, - void *value) -{ - switch (attr_type) { - case STMT_ATTR_UPDATE_MAX_LENGTH: - *(my_bool*) value= stmt->update_max_length; - break; - case STMT_ATTR_CURSOR_TYPE: - *(ulong*) value= stmt->flags; - break; - case STMT_ATTR_PREFETCH_ROWS: - *(ulong*) value= stmt->prefetch_rows; - break; - default: - return TRUE; - } - return FALSE; -} - - -/** - Update statement result set metadata from with the new field - information sent during statement execute. - - @pre mysql->field_count is not zero - - @retval TRUE if error: out of memory or the new - result set has a different number of columns - @retval FALSE success -*/ - -static void reinit_result_set_metadata(MYSQL_STMT *stmt) -{ - /* Server has sent result set metadata */ - if (stmt->field_count == 0) - { - /* - This is 'SHOW'/'EXPLAIN'-like query. Current implementation of - prepared statements can't send result set metadata for these queries - on prepare stage. Read it now. - */ - alloc_stmt_fields(stmt); - } - else - { - /* - Update result set metadata if it for some reason changed between - prepare and execute, i.e.: - - in case of 'SELECT ?' we don't know column type unless data was - supplied to mysql_stmt_execute, so updated column type is sent - now. - - if data dictionary changed between prepare and execute, for - example a table used in the query was altered. - Note, that now (4.1.3) we always send metadata in reply to - COM_STMT_EXECUTE (even if it is not necessary), so either this or - previous branch always works. - TODO: send metadata only when it's really necessary and add a warning - 'Metadata changed' when it's sent twice. - */ - update_stmt_fields(stmt); - } -} - - -static void prepare_to_fetch_result(MYSQL_STMT *stmt) -{ - if (stmt->server_status & SERVER_STATUS_CURSOR_EXISTS) - { - stmt->mysql->status= MYSQL_STATUS_READY; - stmt->read_row_func= stmt_read_row_from_cursor; - } - else if (stmt->flags & CURSOR_TYPE_READ_ONLY) - { - /* - This is a single-row result set, a result set with no rows, EXPLAIN, - SHOW VARIABLES, or some other command which either a) bypasses the - cursors framework in the server and writes rows directly to the - network or b) is more efficient if all (few) result set rows are - precached on client and server's resources are freed. - */ - mysql_stmt_store_result(stmt); - } - else - { - stmt->mysql->unbuffered_fetch_owner= &stmt->unbuffered_fetch_cancelled; - stmt->unbuffered_fetch_cancelled= FALSE; - stmt->read_row_func= stmt_read_row_unbuffered; - } -} - - -/* - Send placeholders data to server (if there are placeholders) - and execute prepared statement. - - SYNOPSIS - mysql_stmt_execute() - stmt statement handle. The handle must be created - with mysql_stmt_init() and prepared with - mysql_stmt_prepare(). If there are placeholders - in the statement they must be bound to local - variables with mysql_stmt_bind_param(). - - DESCRIPTION - This function will automatically flush pending result - set (if there is one), send parameters data to the server - and read result of statement execution. - If previous result set was cached with mysql_stmt_store_result() - it will also be freed in the beginning of this call. - The server can return 3 types of responses to this command: - - error, can be retrieved with mysql_stmt_error() - - ok, no result set pending. In this case we just update - stmt->insert_id and stmt->affected_rows. - - the query returns a result set: there could be 0 .. N - rows in it. In this case the server can also send updated - result set metadata. - - Next steps you may want to make: - - find out if there is result set with mysql_stmt_field_count(). - If there is one: - - optionally, cache entire result set on client to unblock - connection with mysql_stmt_store_result() - - bind client variables to result set columns and start read rows - with mysql_stmt_fetch(). - - reset statement with mysql_stmt_reset() or close it with - mysql_stmt_close() - Otherwise: - - find out last insert id and number of affected rows with - mysql_stmt_insert_id(), mysql_stmt_affected_rows() - - RETURN - 0 success - 1 error, message can be retrieved with mysql_stmt_error(). -*/ - -int STDCALL mysql_stmt_execute(MYSQL_STMT *stmt) -{ - MYSQL *mysql= stmt->mysql; - DBUG_ENTER("mysql_stmt_execute"); - - if (!mysql) - { - /* Error is already set in mysql_detatch_stmt_list */ - DBUG_RETURN(1); - } - - if (reset_stmt_handle(stmt, RESET_STORE_RESULT | RESET_CLEAR_ERROR)) - DBUG_RETURN(1); - /* - No need to check for stmt->state: if the statement wasn't - prepared we'll get 'unknown statement handler' error from server. - */ - if (mysql->methods->stmt_execute(stmt)) - DBUG_RETURN(1); - stmt->state= MYSQL_STMT_EXECUTE_DONE; - if (mysql->field_count) - { - reinit_result_set_metadata(stmt); - prepare_to_fetch_result(stmt); - } - DBUG_RETURN(test(stmt->last_errno)); -} - - -/* - Return total parameters count in the statement -*/ - -ulong STDCALL mysql_stmt_param_count(MYSQL_STMT * stmt) -{ - DBUG_ENTER("mysql_stmt_param_count"); - DBUG_RETURN(stmt->param_count); -} - -/* - Return total affected rows from the last statement -*/ - -my_ulonglong STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt) -{ - return stmt->affected_rows; -} - - -/* - Returns the number of result columns for the most recent query - run on this statement. -*/ - -unsigned int STDCALL mysql_stmt_field_count(MYSQL_STMT *stmt) -{ - return stmt->field_count; -} - -/* - Return last inserted id for auto_increment columns. - - SYNOPSIS - mysql_stmt_insert_id() - stmt statement handle - - DESCRIPTION - Current implementation of this call has a caveat: stmt->insert_id is - unconditionally updated from mysql->insert_id in the end of each - mysql_stmt_execute(). This works OK if mysql->insert_id contains new - value (sent in reply to mysql_stmt_execute()), otherwise stmt->insert_id - value gets undefined, as it's updated from some arbitrary value saved in - connection structure during some other call. -*/ - -my_ulonglong STDCALL mysql_stmt_insert_id(MYSQL_STMT *stmt) -{ - return stmt->insert_id; -} - - -static my_bool int_is_null_true= 1; /* Used for MYSQL_TYPE_NULL */ -static my_bool int_is_null_false= 0; - - -/* - Set up input data buffers for a statement. - - SYNOPSIS - mysql_stmt_bind_param() - stmt statement handle - The statement must be prepared with mysql_stmt_prepare(). - my_bind Array of mysql_stmt_param_count() bind parameters. - This function doesn't check that size of this argument - is >= mysql_stmt_field_count(): it's user's responsibility. - - DESCRIPTION - Use this call after mysql_stmt_prepare() to bind user variables to - placeholders. - Each element of bind array stands for a placeholder. Placeholders - are counted from 0. For example statement - 'INSERT INTO t (a, b) VALUES (?, ?)' - contains two placeholders, and for such statement you should supply - bind array of two elements (MYSQL_BIND bind[2]). - - By properly initializing bind array you can bind virtually any - C language type to statement's placeholders: - First, it's strongly recommended to always zero-initialize entire - bind structure before setting its members. This will both shorten - your application code and make it robust to future extensions of - MYSQL_BIND structure. - Then you need to assign typecode of your application buffer to - MYSQL_BIND::buffer_type. The following typecodes with their - correspondence to C language types are supported: - MYSQL_TYPE_TINY for 8-bit integer variables. Normally it's - 'signed char' and 'unsigned char'; - MYSQL_TYPE_SHORT for 16-bit signed and unsigned variables. This - is usually 'short' and 'unsigned short'; - MYSQL_TYPE_LONG for 32-bit signed and unsigned variables. It - corresponds to 'int' and 'unsigned int' on - vast majority of platforms. On IA-32 and some - other 32-bit systems you can also use 'long' - here; - MYSQL_TYPE_LONGLONG 64-bit signed or unsigned integer. Stands for - '[unsigned] long long' on most platforms; - MYSQL_TYPE_FLOAT 32-bit floating point type, 'float' on most - systems; - MYSQL_TYPE_DOUBLE 64-bit floating point type, 'double' on most - systems; - MYSQL_TYPE_TIME broken-down time stored in MYSQL_TIME - structure - MYSQL_TYPE_DATE date stored in MYSQL_TIME structure - MYSQL_TYPE_DATETIME datetime stored in MYSQL_TIME structure See - more on how to use these types for sending - dates and times below; - MYSQL_TYPE_STRING character string, assumed to be in - character-set-client. If character set of - client is not equal to character set of - column, value for this placeholder will be - converted to destination character set before - insert. - MYSQL_TYPE_BLOB sequence of bytes. This sequence is assumed to - be in binary character set (which is the same - as no particular character set), and is never - converted to any other character set. See also - notes about supplying string/blob length - below. - MYSQL_TYPE_NULL special typecode for binding nulls. - These C/C++ types are not supported yet by the API: long double, - bool. - - As you can see from the list above, it's responsibility of - application programmer to ensure that chosen typecode properly - corresponds to host language type. For example on all platforms - where we build MySQL packages (as of MySQL 4.1.4) int is a 32-bit - type. So for int you can always assume that proper typecode is - MYSQL_TYPE_LONG (however queer it sounds, the name is legacy of the - old MySQL API). In contrary sizeof(long) can be 4 or 8 8-bit bytes, - depending on platform. - - TODO: provide client typedefs for each integer and floating point - typecode, i. e. int8, uint8, float32, etc. - - Once typecode was set, it's necessary to assign MYSQL_BIND::buffer - to point to the buffer of given type. Finally, additional actions - may be taken for some types or use cases: - - Binding integer types. - For integer types you might also need to set MYSQL_BIND::is_unsigned - member. Set it to TRUE when binding unsigned char, unsigned short, - unsigned int, unsigned long, unsigned long long. - - Binding floating point types. - For floating point types you just need to set - MYSQL_BIND::buffer_type and MYSQL_BIND::buffer. The rest of the - members should be zero-initialized. - - Binding NULLs. - You might have a column always NULL, never NULL, or sometimes - NULL. For an always NULL column set MYSQL_BIND::buffer_type to - MYSQL_TYPE_NULL. The rest of the members just need to be - zero-initialized. For never NULL columns set - MYSQL_BIND::is_null to 0, or this has already been done if you - zero-initialized the entire structure. If you set - MYSQL_TYPE::is_null to point to an application buffer of type - 'my_bool', then this buffer will be checked on each execution: - this way you can set the buffer to TRUE, or any non-0 value for - NULLs, and to FALSE or 0 for not NULL data. - - Binding text strings and sequences of bytes. - For strings, in addition to MYSQL_BIND::buffer_type and - MYSQL_BIND::buffer you need to set MYSQL_BIND::length or - MYSQL_BIND::buffer_length. If 'length' is set, 'buffer_length' - is ignored. 'buffer_length' member should be used when size of - string doesn't change between executions. If you want to vary - buffer length for each value, set 'length' to point to an - application buffer of type 'unsigned long' and set this long to - length of the string before each mysql_stmt_execute(). - - Binding dates and times. - For binding dates and times prepared statements API provides - clients with MYSQL_TIME structure. A pointer to instance of this - structure should be assigned to MYSQL_BIND::buffer whenever - MYSQL_TYPE_TIME, MYSQL_TYPE_DATE, MYSQL_TYPE_DATETIME typecodes - are used. When typecode is MYSQL_TYPE_TIME, only members - 'hour', 'minute', 'second' and 'neg' (is time offset negative) - are used. These members only will be sent to the server. - MYSQL_TYPE_DATE implies use of 'year', 'month', 'day', 'neg'. - MYSQL_TYPE_DATETIME utilizes both parts of MYSQL_TIME structure. - You don't have to set MYSQL_TIME::time_type member: it's not - used when sending data to the server, typecode information is - enough. 'second_part' member can hold microsecond precision of - time value, but now it's only supported on protocol level: you - can't store microsecond in a column, or use in temporal - calculations. However, if you send a time value with microsecond - part for 'SELECT ?', statement, you'll get it back unchanged - from the server. - - Data conversion. - If conversion from host language type to data representation, - corresponding to SQL type, is required it's done on the server. - Data truncation is possible when conversion is lossy. For - example, if you supply MYSQL_TYPE_DATETIME value out of valid - SQL type TIMESTAMP range, the same conversion will be applied as - if this value would have been sent as string in the old - protocol. TODO: document how the server will behave in case of - truncation/data loss. - - After variables were bound, you can repeatedly set/change their - values and mysql_stmt_execute() the statement. - - See also: mysql_stmt_send_long_data() for sending long text/blob - data in pieces, examples in tests/mysql_client_test.c. - Next steps you might want to make: - - execute statement with mysql_stmt_execute(), - - reset statement using mysql_stmt_reset() or reprepare it with - another query using mysql_stmt_prepare() - - close statement with mysql_stmt_close(). - - IMPLEMENTATION - The function copies given bind array to internal storage of the - statement, and sets up typecode-specific handlers to perform - serialization of bound data. This means that although you don't need - to call this routine after each assignment to bind buffers, you - need to call it each time you change parameter typecodes, or other - members of MYSQL_BIND array. - This is a pure local call. Data types of client buffers are sent - along with buffers' data at first execution of the statement. - - RETURN - 0 success - 1 error, can be retrieved with mysql_stmt_error. -*/ - -my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *my_bind) -{ - uint count=0; - MYSQL_BIND *param, *end; - DBUG_ENTER("mysql_stmt_bind_param"); - - if (!stmt->param_count) - { - if ((int) stmt->state < (int) MYSQL_STMT_PREPARE_DONE) - { - set_stmt_error(stmt, CR_NO_PREPARE_STMT, unknown_sqlstate, NULL); - DBUG_RETURN(1); - } - DBUG_RETURN(0); - } - - /* Allocated on prepare */ - memcpy((char*) stmt->params, (char*) my_bind, - sizeof(MYSQL_BIND) * stmt->param_count); - - for (param= stmt->params, end= param+stmt->param_count; - param < end ; - param++) - { - param->param_number= count++; - param->long_data_used= 0; - - /* If param->is_null is not set, then the value can never be NULL */ - if (!param->is_null) - param->is_null= &int_is_null_false; - - /* Setup data copy functions for the different supported types */ - switch (param->buffer_type) { - case MYSQL_TYPE_NULL: - param->is_null= &int_is_null_true; - break; - case MYSQL_TYPE_TINY: - /* Force param->length as this is fixed for this type */ - param->length= ¶m->buffer_length; - param->buffer_length= 1; - param->store_param_func= store_param_tinyint; - break; - case MYSQL_TYPE_SHORT: - param->length= ¶m->buffer_length; - param->buffer_length= 2; - param->store_param_func= store_param_short; - break; - case MYSQL_TYPE_LONG: - param->length= ¶m->buffer_length; - param->buffer_length= 4; - param->store_param_func= store_param_int32; - break; - case MYSQL_TYPE_LONGLONG: - param->length= ¶m->buffer_length; - param->buffer_length= 8; - param->store_param_func= store_param_int64; - break; - case MYSQL_TYPE_FLOAT: - param->length= ¶m->buffer_length; - param->buffer_length= 4; - param->store_param_func= store_param_float; - break; - case MYSQL_TYPE_DOUBLE: - param->length= ¶m->buffer_length; - param->buffer_length= 8; - param->store_param_func= store_param_double; - break; - case MYSQL_TYPE_TIME: - param->store_param_func= store_param_time; - param->buffer_length= MAX_TIME_REP_LENGTH; - break; - case MYSQL_TYPE_DATE: - param->store_param_func= store_param_date; - param->buffer_length= MAX_DATE_REP_LENGTH; - break; - case MYSQL_TYPE_DATETIME: - case MYSQL_TYPE_TIMESTAMP: - param->store_param_func= store_param_datetime; - param->buffer_length= MAX_DATETIME_REP_LENGTH; - break; - case MYSQL_TYPE_TINY_BLOB: - case MYSQL_TYPE_MEDIUM_BLOB: - case MYSQL_TYPE_LONG_BLOB: - case MYSQL_TYPE_BLOB: - case MYSQL_TYPE_VARCHAR: - case MYSQL_TYPE_VAR_STRING: - case MYSQL_TYPE_STRING: - case MYSQL_TYPE_DECIMAL: - case MYSQL_TYPE_NEWDECIMAL: - param->store_param_func= store_param_str; - /* - For variable length types user must set either length or - buffer_length. - */ - break; - default: - strmov(stmt->sqlstate, unknown_sqlstate); - sprintf(stmt->last_error, - ER(stmt->last_errno= CR_UNSUPPORTED_PARAM_TYPE), - param->buffer_type, count); - DBUG_RETURN(1); - } - /* - If param->length is not given, change it to point to buffer_length. - This way we can always use *param->length to get the length of data - */ - if (!param->length) - param->length= ¶m->buffer_length; - } - /* We have to send/resend type information to MySQL */ - stmt->send_types_to_server= TRUE; - stmt->bind_param_done= TRUE; - DBUG_RETURN(0); -} - - -/******************************************************************** - Long data implementation -*********************************************************************/ - -/* - Send long data in pieces to the server - - SYNOPSIS - mysql_stmt_send_long_data() - stmt Statement handler - param_number Parameter number (0 - N-1) - data Data to send to server - length Length of data to send (may be 0) - - DESCRIPTION - This call can be used repeatedly to send long data in pieces - for any string/binary placeholder. Data supplied for - a placeholder is saved at server side till execute, and then - used instead of value from MYSQL_BIND object. More precisely, - if long data for a parameter was supplied, MYSQL_BIND object - corresponding to this parameter is not sent to server. In the - end of execution long data states of placeholders are reset, - so next time values of such placeholders will be taken again - from MYSQL_BIND array. - The server does not reply to this call: if there was an error - in data handling (which now only can happen if server run out - of memory) it would be returned in reply to - mysql_stmt_execute(). - You should choose type of long data carefully if you care - about character set conversions performed by server when the - statement is executed. No conversion is performed at all for - MYSQL_TYPE_BLOB and other binary typecodes. For - MYSQL_TYPE_STRING and the rest of text placeholders data is - converted from client character set to character set of - connection. If these character sets are different, this - conversion may require additional memory at server, equal to - total size of supplied pieces. - - RETURN VALUES - 0 ok - 1 error -*/ - -my_bool STDCALL -mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number, - const char *data, ulong length) -{ - MYSQL_BIND *param; - DBUG_ENTER("mysql_stmt_send_long_data"); - DBUG_ASSERT(stmt != 0); - DBUG_PRINT("enter",("param no: %d data: 0x%lx, length : %ld", - param_number, (long) data, length)); - - /* - We only need to check for stmt->param_count, if it's not null - prepare was done. - */ - if (param_number >= stmt->param_count) - { - set_stmt_error(stmt, CR_INVALID_PARAMETER_NO, unknown_sqlstate, NULL); - DBUG_RETURN(1); - } - - param= stmt->params+param_number; - if (!IS_LONGDATA(param->buffer_type)) - { - /* Long data handling should be used only for string/binary types */ - strmov(stmt->sqlstate, unknown_sqlstate); - sprintf(stmt->last_error, ER(stmt->last_errno= CR_INVALID_BUFFER_USE), - param->param_number); - DBUG_RETURN(1); - } - - /* - Send long data packet if there is data or we're sending long data - for the first time. - */ - if (length || param->long_data_used == 0) - { - MYSQL *mysql= stmt->mysql; - /* Packet header: stmt id (4 bytes), param no (2 bytes) */ - uchar buff[MYSQL_LONG_DATA_HEADER]; - - int4store(buff, stmt->stmt_id); - int2store(buff + 4, param_number); - param->long_data_used= 1; - - /* - Note that we don't get any ok packet from the server in this case - This is intentional to save bandwidth. - */ - if ((*mysql->methods->advanced_command)(mysql, COM_STMT_SEND_LONG_DATA, - buff, sizeof(buff), (uchar*) data, - length, 1, stmt)) - { - /* - Don't set stmt error if stmt->mysql is NULL, as the error in this case - has already been set by mysql_prune_stmt_list(). - */ - if (stmt->mysql) - set_stmt_errmsg(stmt, &mysql->net); - DBUG_RETURN(1); - } - } - DBUG_RETURN(0); -} - - -/******************************************************************** - Fetch and conversion of result set rows (binary protocol). -*********************************************************************/ - -/* - Read date, (time, datetime) value from network buffer and store it - in MYSQL_TIME structure. - - SYNOPSIS - read_binary_{date,time,datetime}() - tm MYSQL_TIME structure to fill - pos pointer to current position in network buffer. - These functions increase pos to point to the beginning of the - next column. - - Auxiliary functions to read time (date, datetime) values from network - buffer and store in MYSQL_TIME structure. Jointly used by conversion - and no-conversion fetching. -*/ - -static void read_binary_time(MYSQL_TIME *tm, uchar **pos) -{ - /* net_field_length will set pos to the first byte of data */ - uint length= net_field_length(pos); - - if (length) - { - uchar *to= *pos; - tm->neg= to[0]; - - tm->day= (ulong) sint4korr(to+1); - tm->hour= (uint) to[5]; - tm->minute= (uint) to[6]; - tm->second= (uint) to[7]; - tm->second_part= (length > 8) ? (ulong) sint4korr(to+8) : 0; - tm->year= tm->month= 0; - if (tm->day) - { - /* Convert days to hours at once */ - tm->hour+= tm->day*24; - tm->day= 0; - } - tm->time_type= MYSQL_TIMESTAMP_TIME; - - *pos+= length; - } - else - set_zero_time(tm, MYSQL_TIMESTAMP_TIME); -} - -static void read_binary_datetime(MYSQL_TIME *tm, uchar **pos) -{ - uint length= net_field_length(pos); - - if (length) - { - uchar *to= *pos; - - tm->neg= 0; - tm->year= (uint) sint2korr(to); - tm->month= (uint) to[2]; - tm->day= (uint) to[3]; - - if (length > 4) - { - tm->hour= (uint) to[4]; - tm->minute= (uint) to[5]; - tm->second= (uint) to[6]; - } - else - tm->hour= tm->minute= tm->second= 0; - tm->second_part= (length > 7) ? (ulong) sint4korr(to+7) : 0; - tm->time_type= MYSQL_TIMESTAMP_DATETIME; - - *pos+= length; - } - else - set_zero_time(tm, MYSQL_TIMESTAMP_DATETIME); -} - -static void read_binary_date(MYSQL_TIME *tm, uchar **pos) -{ - uint length= net_field_length(pos); - - if (length) - { - uchar *to= *pos; - tm->year = (uint) sint2korr(to); - tm->month= (uint) to[2]; - tm->day= (uint) to[3]; - - tm->hour= tm->minute= tm->second= 0; - tm->second_part= 0; - tm->neg= 0; - tm->time_type= MYSQL_TIMESTAMP_DATE; - - *pos+= length; - } - else - set_zero_time(tm, MYSQL_TIMESTAMP_DATE); -} - - -/* - Convert string to supplied buffer of any type. - - SYNOPSIS - fetch_string_with_conversion() - param output buffer descriptor - value column data - length data length -*/ - -static void fetch_string_with_conversion(MYSQL_BIND *param, char *value, - uint length) -{ - char *buffer= (char *)param->buffer; - int err= 0; - char *endptr= value + length; - - /* - This function should support all target buffer types: the rest - of conversion functions can delegate conversion to it. - */ - switch (param->buffer_type) { - case MYSQL_TYPE_NULL: /* do nothing */ - break; - case MYSQL_TYPE_TINY: - { - longlong data= my_strtoll10(value, &endptr, &err); - *param->error= (IS_TRUNCATED(data, param->is_unsigned, - INT_MIN8, INT_MAX8, UINT_MAX8) || err > 0); - *buffer= (uchar) data; - break; - } - case MYSQL_TYPE_SHORT: - { - longlong data= my_strtoll10(value, &endptr, &err); - *param->error= (IS_TRUNCATED(data, param->is_unsigned, - INT_MIN16, INT_MAX16, UINT_MAX16) || err > 0); - shortstore(buffer, (short) data); - break; - } - case MYSQL_TYPE_LONG: - { - longlong data= my_strtoll10(value, &endptr, &err); - *param->error= (IS_TRUNCATED(data, param->is_unsigned, - INT_MIN32, INT_MAX32, UINT_MAX32) || err > 0); - longstore(buffer, (int32) data); - break; - } - case MYSQL_TYPE_LONGLONG: - { - longlong data= my_strtoll10(value, &endptr, &err); - *param->error= param->is_unsigned ? err != 0 : - (err > 0 || (err == 0 && data < 0)); - longlongstore(buffer, data); - break; - } - case MYSQL_TYPE_FLOAT: - { - double data= my_strntod(&my_charset_latin1, value, length, &endptr, &err); - float fdata= (float) data; - *param->error= (fdata != data) | test(err); - floatstore(buffer, fdata); - break; - } - case MYSQL_TYPE_DOUBLE: - { - double data= my_strntod(&my_charset_latin1, value, length, &endptr, &err); - *param->error= test(err); - doublestore(buffer, data); - break; - } - case MYSQL_TYPE_TIME: - { - MYSQL_TIME *tm= (MYSQL_TIME *)buffer; - str_to_time(value, length, tm, &err); - *param->error= test(err); - break; - } - case MYSQL_TYPE_DATE: - case MYSQL_TYPE_DATETIME: - case MYSQL_TYPE_TIMESTAMP: - { - MYSQL_TIME *tm= (MYSQL_TIME *)buffer; - (void) str_to_datetime(value, length, tm, TIME_FUZZY_DATE, &err); - *param->error= test(err) && (param->buffer_type == MYSQL_TYPE_DATE && - tm->time_type != MYSQL_TIMESTAMP_DATE); - break; - } - case MYSQL_TYPE_TINY_BLOB: - case MYSQL_TYPE_MEDIUM_BLOB: - case MYSQL_TYPE_LONG_BLOB: - case MYSQL_TYPE_BLOB: - case MYSQL_TYPE_DECIMAL: - case MYSQL_TYPE_NEWDECIMAL: - default: - { - /* - Copy column data to the buffer taking into account offset, - data length and buffer length. - */ - char *start= value + param->offset; - char *end= value + length; - ulong copy_length; - if (start < end) - { - copy_length= end - start; - /* We've got some data beyond offset: copy up to buffer_length bytes */ - if (param->buffer_length) - memcpy(buffer, start, min(copy_length, param->buffer_length)); - } - else - copy_length= 0; - if (copy_length < param->buffer_length) - buffer[copy_length]= '\0'; - *param->error= copy_length > param->buffer_length; - /* - param->length will always contain length of entire column; - number of copied bytes may be way different: - */ - *param->length= length; - break; - } - } -} - - -/* - Convert integer value to client buffer of any type. - - SYNOPSIS - fetch_long_with_conversion() - param output buffer descriptor - field column metadata - value column data -*/ - -static void fetch_long_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field, - longlong value, my_bool is_unsigned) -{ - char *buffer= (char *)param->buffer; - - switch (param->buffer_type) { - case MYSQL_TYPE_NULL: /* do nothing */ - break; - case MYSQL_TYPE_TINY: - *param->error= IS_TRUNCATED(value, param->is_unsigned, - INT_MIN8, INT_MAX8, UINT_MAX8); - *(uchar *)param->buffer= (uchar) value; - break; - case MYSQL_TYPE_SHORT: - *param->error= IS_TRUNCATED(value, param->is_unsigned, - INT_MIN16, INT_MAX16, UINT_MAX16); - shortstore(buffer, (short) value); - break; - case MYSQL_TYPE_LONG: - *param->error= IS_TRUNCATED(value, param->is_unsigned, - INT_MIN32, INT_MAX32, UINT_MAX32); - longstore(buffer, (int32) value); - break; - case MYSQL_TYPE_LONGLONG: - longlongstore(buffer, value); - *param->error= param->is_unsigned != is_unsigned && value < 0; - break; - case MYSQL_TYPE_FLOAT: - { - /* - We need to mark the local variable volatile to - workaround Intel FPU executive precision feature. - (See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323 for details) - */ - volatile float data; - if (is_unsigned) - { - data= (float) ulonglong2double(value); - *param->error= ((ulonglong) value) != ((ulonglong) data); - } - else - { - data= (float)value; - *param->error= value != ((longlong) data); - } - floatstore(buffer, data); - break; - } - case MYSQL_TYPE_DOUBLE: - { - volatile double data; - if (is_unsigned) - { - data= ulonglong2double(value); - *param->error= ((ulonglong) value) != ((ulonglong) data); - } - else - { - data= (double)value; - *param->error= value != ((longlong) data); - } - doublestore(buffer, data); - break; - } - case MYSQL_TYPE_TIME: - case MYSQL_TYPE_DATE: - case MYSQL_TYPE_TIMESTAMP: - case MYSQL_TYPE_DATETIME: - { - int error; - value= number_to_datetime(value, (MYSQL_TIME *) buffer, TIME_FUZZY_DATE, - &error); - *param->error= test(error); - break; - } - default: - { - uchar buff[22]; /* Enough for longlong */ - uchar *end= (uchar*) longlong10_to_str(value, (char*) buff, - is_unsigned ? 10: -10); - /* Resort to string conversion which supports all typecodes */ - uint length= (uint) (end-buff); - - if (field->flags & ZEROFILL_FLAG && length < field->length && - field->length < 21) - { - bmove_upp(buff+field->length,buff+length, length); - bfill(buff, field->length - length,'0'); - length= field->length; - } - fetch_string_with_conversion(param, (char*) buff, length); - break; - } - } -} - -/* - Convert double/float column to supplied buffer of any type. - - SYNOPSIS - fetch_float_with_conversion() - param output buffer descriptor - field column metadata - value column data - type either MY_GCVT_ARG_FLOAT or MY_GCVT_ARG_DOUBLE. - Affects the maximum number of significant digits - returned by my_gcvt(). -*/ - -static void fetch_float_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field, - double value, my_gcvt_arg_type type) -{ - char *buffer= (char *)param->buffer; - double val64 = (value < 0 ? -floor(-value) : floor(value)); - - switch (param->buffer_type) { - case MYSQL_TYPE_NULL: /* do nothing */ - break; - case MYSQL_TYPE_TINY: - /* - We need to _store_ data in the buffer before the truncation check to - workaround Intel FPU executive precision feature. - (See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323 for details) - Sic: AFAIU it does not guarantee to work. - */ - if (param->is_unsigned) - *buffer= (uint8) value; - else - *buffer= (int8) value; - *param->error= val64 != (param->is_unsigned ? (double)((uint8) *buffer) : - (double)((int8) *buffer)); - break; - case MYSQL_TYPE_SHORT: - if (param->is_unsigned) - { - ushort data= (ushort) value; - shortstore(buffer, data); - } - else - { - short data= (short) value; - shortstore(buffer, data); - } - *param->error= val64 != (param->is_unsigned ? (double) (*(ushort*) buffer): - (double) (*(short*) buffer)); - break; - case MYSQL_TYPE_LONG: - if (param->is_unsigned) - { - uint32 data= (uint32) value; - longstore(buffer, data); - } - else - { - int32 data= (int32) value; - longstore(buffer, data); - } - *param->error= val64 != (param->is_unsigned ? (double) (*(uint32*) buffer): - (double) (*(int32*) buffer)); - break; - case MYSQL_TYPE_LONGLONG: - if (param->is_unsigned) - { - ulonglong data= (ulonglong) value; - longlongstore(buffer, data); - } - else - { - longlong data= (longlong) value; - longlongstore(buffer, data); - } - *param->error= val64 != (param->is_unsigned ? - ulonglong2double(*(ulonglong*) buffer) : - (double) (*(longlong*) buffer)); - break; - case MYSQL_TYPE_FLOAT: - { - float data= (float) value; - floatstore(buffer, data); - *param->error= (*(float*) buffer) != value; - break; - } - case MYSQL_TYPE_DOUBLE: - { - doublestore(buffer, value); - break; - } - default: - { - /* - Resort to fetch_string_with_conversion: this should handle - floating point -> string conversion nicely, honor all typecodes - and param->offset possibly set in mysql_stmt_fetch_column - */ - char buff[FLOATING_POINT_BUFFER]; - size_t len; - if (field->decimals >= NOT_FIXED_DEC) - len= my_gcvt(value, type, - (int) min(sizeof(buff)-1, param->buffer_length), - buff, NULL); - else - len= my_fcvt(value, (int) field->decimals, buff, NULL); - - if (field->flags & ZEROFILL_FLAG && len < field->length && - field->length < MAX_DOUBLE_STRING_REP_LENGTH - 1) - { - bmove_upp((uchar*) buff + field->length, (uchar*) buff + len, - len); - bfill((char*) buff, field->length - len, '0'); - len= field->length; - } - fetch_string_with_conversion(param, buff, len); - - break; - } - } -} - - -/* - Fetch time/date/datetime to supplied buffer of any type - - SYNOPSIS - param output buffer descriptor - time column data -*/ - -static void fetch_datetime_with_conversion(MYSQL_BIND *param, - MYSQL_FIELD *field, - MYSQL_TIME *my_time) -{ - switch (param->buffer_type) { - case MYSQL_TYPE_NULL: /* do nothing */ - break; - case MYSQL_TYPE_DATE: - *(MYSQL_TIME *)(param->buffer)= *my_time; - *param->error= my_time->time_type != MYSQL_TIMESTAMP_DATE; - break; - case MYSQL_TYPE_TIME: - *(MYSQL_TIME *)(param->buffer)= *my_time; - *param->error= my_time->time_type != MYSQL_TIMESTAMP_TIME; - break; - case MYSQL_TYPE_DATETIME: - case MYSQL_TYPE_TIMESTAMP: - *(MYSQL_TIME *)(param->buffer)= *my_time; - /* No error: time and date are compatible with datetime */ - break; - case MYSQL_TYPE_YEAR: - shortstore(param->buffer, my_time->year); - *param->error= 1; - break; - case MYSQL_TYPE_FLOAT: - case MYSQL_TYPE_DOUBLE: - { - ulonglong value= TIME_to_ulonglong(my_time); - fetch_float_with_conversion(param, field, - ulonglong2double(value), MY_GCVT_ARG_DOUBLE); - break; - } - case MYSQL_TYPE_TINY: - case MYSQL_TYPE_SHORT: - case MYSQL_TYPE_INT24: - case MYSQL_TYPE_LONG: - case MYSQL_TYPE_LONGLONG: - { - longlong value= (longlong) TIME_to_ulonglong(my_time); - fetch_long_with_conversion(param, field, value, TRUE); - break; - } - default: - { - /* - Convert time value to string and delegate the rest to - fetch_string_with_conversion: - */ - char buff[MAX_DATE_STRING_REP_LENGTH]; - uint length= my_TIME_to_str(my_time, buff); - /* Resort to string conversion */ - fetch_string_with_conversion(param, (char *)buff, length); - break; - } - } -} - - -/* - Fetch and convert result set column to output buffer. - - SYNOPSIS - fetch_result_with_conversion() - param output buffer descriptor - field column metadata - row points to a column of result set tuple in binary format - - DESCRIPTION - This is a fallback implementation of column fetch used - if column and output buffer types do not match. - Increases tuple pointer to point at the next column within the - tuple. -*/ - -static void fetch_result_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field, - uchar **row) -{ - enum enum_field_types field_type= field->type; - uint field_is_unsigned= field->flags & UNSIGNED_FLAG; - - switch (field_type) { - case MYSQL_TYPE_TINY: - { - uchar value= **row; - /* sic: we need to cast to 'signed char' as 'char' may be unsigned */ - longlong data= field_is_unsigned ? (longlong) value : - (longlong) (signed char) value; - fetch_long_with_conversion(param, field, data, 0); - *row+= 1; - break; - } - case MYSQL_TYPE_SHORT: - case MYSQL_TYPE_YEAR: - { - short value= sint2korr(*row); - longlong data= field_is_unsigned ? (longlong) (unsigned short) value : - (longlong) value; - fetch_long_with_conversion(param, field, data, 0); - *row+= 2; - break; - } - case MYSQL_TYPE_INT24: /* mediumint is sent as 4 bytes int */ - case MYSQL_TYPE_LONG: - { - int32 value= sint4korr(*row); - longlong data= field_is_unsigned ? (longlong) (uint32) value : - (longlong) value; - fetch_long_with_conversion(param, field, data, 0); - *row+= 4; - break; - } - case MYSQL_TYPE_LONGLONG: - { - longlong value= (longlong)sint8korr(*row); - fetch_long_with_conversion(param, field, value, - field->flags & UNSIGNED_FLAG); - *row+= 8; - break; - } - case MYSQL_TYPE_FLOAT: - { - float value; - float4get(value,*row); - fetch_float_with_conversion(param, field, value, MY_GCVT_ARG_FLOAT); - *row+= 4; - break; - } - case MYSQL_TYPE_DOUBLE: - { - double value; - float8get(value,*row); - fetch_float_with_conversion(param, field, value, MY_GCVT_ARG_DOUBLE); - *row+= 8; - break; - } - case MYSQL_TYPE_DATE: - { - MYSQL_TIME tm; - - read_binary_date(&tm, row); - fetch_datetime_with_conversion(param, field, &tm); - break; - } - case MYSQL_TYPE_TIME: - { - MYSQL_TIME tm; - - read_binary_time(&tm, row); - fetch_datetime_with_conversion(param, field, &tm); - break; - } - case MYSQL_TYPE_DATETIME: - case MYSQL_TYPE_TIMESTAMP: - { - MYSQL_TIME tm; - - read_binary_datetime(&tm, row); - fetch_datetime_with_conversion(param, field, &tm); - break; - } - default: - { - ulong length= net_field_length(row); - fetch_string_with_conversion(param, (char*) *row, length); - *row+= length; - break; - } - } -} - - -/* - Functions to fetch data to application buffers without conversion. - - All functions have the following characteristics: - - SYNOPSIS - fetch_result_xxx() - param MySQL bind param - pos Row value - - DESCRIPTION - These are no-conversion functions, used in binary protocol to store - rows in application buffers. A function used only if type of binary data - is compatible with type of application buffer. - - RETURN - none -*/ - -static void fetch_result_tinyint(MYSQL_BIND *param, MYSQL_FIELD *field, - uchar **row) -{ - my_bool field_is_unsigned= test(field->flags & UNSIGNED_FLAG); - uchar data= **row; - *(uchar *)param->buffer= data; - *param->error= param->is_unsigned != field_is_unsigned && data > INT_MAX8; - (*row)++; -} - -static void fetch_result_short(MYSQL_BIND *param, MYSQL_FIELD *field, - uchar **row) -{ - my_bool field_is_unsigned= test(field->flags & UNSIGNED_FLAG); - ushort data= (ushort) sint2korr(*row); - shortstore(param->buffer, data); - *param->error= param->is_unsigned != field_is_unsigned && data > INT_MAX16; - *row+= 2; -} - -static void fetch_result_int32(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), - uchar **row) -{ - my_bool field_is_unsigned= test(field->flags & UNSIGNED_FLAG); - uint32 data= (uint32) sint4korr(*row); - longstore(param->buffer, data); - *param->error= param->is_unsigned != field_is_unsigned && data > INT_MAX32; - *row+= 4; -} - -static void fetch_result_int64(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), - uchar **row) -{ - my_bool field_is_unsigned= test(field->flags & UNSIGNED_FLAG); - ulonglong data= (ulonglong) sint8korr(*row); - *param->error= param->is_unsigned != field_is_unsigned && data > LONGLONG_MAX; - longlongstore(param->buffer, data); - *row+= 8; -} - -static void fetch_result_float(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), - uchar **row) -{ - float value; - float4get(value,*row); - floatstore(param->buffer, value); - *row+= 4; -} - -static void fetch_result_double(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), - uchar **row) -{ - double value; - float8get(value,*row); - doublestore(param->buffer, value); - *row+= 8; -} - -static void fetch_result_time(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), - uchar **row) -{ - MYSQL_TIME *tm= (MYSQL_TIME *)param->buffer; - read_binary_time(tm, row); -} - -static void fetch_result_date(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), - uchar **row) -{ - MYSQL_TIME *tm= (MYSQL_TIME *)param->buffer; - read_binary_date(tm, row); -} - -static void fetch_result_datetime(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), - uchar **row) -{ - MYSQL_TIME *tm= (MYSQL_TIME *)param->buffer; - read_binary_datetime(tm, row); -} - -static void fetch_result_bin(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), - uchar **row) -{ - ulong length= net_field_length(row); - ulong copy_length= min(length, param->buffer_length); - memcpy(param->buffer, (char *)*row, copy_length); - *param->length= length; - *param->error= copy_length < length; - *row+= length; -} - -static void fetch_result_str(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), - uchar **row) -{ - ulong length= net_field_length(row); - ulong copy_length= min(length, param->buffer_length); - memcpy(param->buffer, (char *)*row, copy_length); - /* Add an end null if there is room in the buffer */ - if (copy_length != param->buffer_length) - ((uchar *)param->buffer)[copy_length]= '\0'; - *param->length= length; /* return total length */ - *param->error= copy_length < length; - *row+= length; -} - - -/* - functions to calculate max lengths for strings during - mysql_stmt_store_result() -*/ - -static void skip_result_fixed(MYSQL_BIND *param, - MYSQL_FIELD *field __attribute__((unused)), - uchar **row) - -{ - (*row)+= param->pack_length; -} - - -static void skip_result_with_length(MYSQL_BIND *param __attribute__((unused)), - MYSQL_FIELD *field __attribute__((unused)), - uchar **row) - -{ - ulong length= net_field_length(row); - (*row)+= length; -} - - -static void skip_result_string(MYSQL_BIND *param __attribute__((unused)), - MYSQL_FIELD *field, - uchar **row) - -{ - ulong length= net_field_length(row); - (*row)+= length; - if (field->max_length < length) - field->max_length= length; -} - - -/* - Check that two field types are binary compatible i. e. - have equal representation in the binary protocol and - require client-side buffers of the same type. - - SYNOPSIS - is_binary_compatible() - type1 parameter type supplied by user - type2 field type, obtained from result set metadata - - RETURN - TRUE or FALSE -*/ - -static my_bool is_binary_compatible(enum enum_field_types type1, - enum enum_field_types type2) -{ - static const enum enum_field_types - range1[]= { MYSQL_TYPE_SHORT, MYSQL_TYPE_YEAR, MYSQL_TYPE_NULL }, - range2[]= { MYSQL_TYPE_INT24, MYSQL_TYPE_LONG, MYSQL_TYPE_NULL }, - range3[]= { MYSQL_TYPE_DATETIME, MYSQL_TYPE_TIMESTAMP, MYSQL_TYPE_NULL }, - range4[]= { MYSQL_TYPE_ENUM, MYSQL_TYPE_SET, MYSQL_TYPE_TINY_BLOB, - MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, MYSQL_TYPE_BLOB, - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_STRING, MYSQL_TYPE_GEOMETRY, - MYSQL_TYPE_DECIMAL, MYSQL_TYPE_NULL }; - static const enum enum_field_types - *range_list[]= { range1, range2, range3, range4 }, - **range_list_end= range_list + sizeof(range_list)/sizeof(*range_list); - const enum enum_field_types **range, *type; - - if (type1 == type2) - return TRUE; - for (range= range_list; range != range_list_end; ++range) - { - /* check that both type1 and type2 are in the same range */ - my_bool type1_found= FALSE, type2_found= FALSE; - for (type= *range; *type != MYSQL_TYPE_NULL; type++) - { - type1_found|= type1 == *type; - type2_found|= type2 == *type; - } - if (type1_found || type2_found) - return type1_found && type2_found; - } - return FALSE; -} - - -/* - Setup a fetch function for one column of a result set. - - SYNOPSIS - setup_one_fetch_function() - param output buffer descriptor - field column descriptor - - DESCRIPTION - When user binds result set buffers or when result set - metadata is changed, we need to setup fetch (and possibly - conversion) functions for all columns of the result set. - In addition to that here we set up skip_result function, used - to update result set metadata in case when - STMT_ATTR_UPDATE_MAX_LENGTH attribute is set. - Notice that while fetch_result is chosen depending on both - field->type and param->type, skip_result depends on field->type - only. - - RETURN - TRUE fetch function for this typecode was not found (typecode - is not supported by the client library) - FALSE success -*/ - -static my_bool setup_one_fetch_function(MYSQL_BIND *param, MYSQL_FIELD *field) -{ - DBUG_ENTER("setup_one_fetch_function"); - - /* Setup data copy functions for the different supported types */ - switch (param->buffer_type) { - case MYSQL_TYPE_NULL: /* for dummy binds */ - /* - It's not binary compatible with anything the server can return: - no need to setup fetch_result, as it'll be reset anyway - */ - *param->length= 0; - break; - case MYSQL_TYPE_TINY: - param->fetch_result= fetch_result_tinyint; - *param->length= 1; - break; - case MYSQL_TYPE_SHORT: - case MYSQL_TYPE_YEAR: - param->fetch_result= fetch_result_short; - *param->length= 2; - break; - case MYSQL_TYPE_INT24: - case MYSQL_TYPE_LONG: - param->fetch_result= fetch_result_int32; - *param->length= 4; - break; - case MYSQL_TYPE_LONGLONG: - param->fetch_result= fetch_result_int64; - *param->length= 8; - break; - case MYSQL_TYPE_FLOAT: - param->fetch_result= fetch_result_float; - *param->length= 4; - break; - case MYSQL_TYPE_DOUBLE: - param->fetch_result= fetch_result_double; - *param->length= 8; - break; - case MYSQL_TYPE_TIME: - param->fetch_result= fetch_result_time; - *param->length= sizeof(MYSQL_TIME); - break; - case MYSQL_TYPE_DATE: - param->fetch_result= fetch_result_date; - *param->length= sizeof(MYSQL_TIME); - break; - case MYSQL_TYPE_DATETIME: - case MYSQL_TYPE_TIMESTAMP: - param->fetch_result= fetch_result_datetime; - *param->length= sizeof(MYSQL_TIME); - break; - case MYSQL_TYPE_TINY_BLOB: - case MYSQL_TYPE_MEDIUM_BLOB: - case MYSQL_TYPE_LONG_BLOB: - case MYSQL_TYPE_BLOB: - case MYSQL_TYPE_BIT: - DBUG_ASSERT(param->buffer_length != 0); - param->fetch_result= fetch_result_bin; - break; - case MYSQL_TYPE_VAR_STRING: - case MYSQL_TYPE_STRING: - case MYSQL_TYPE_DECIMAL: - case MYSQL_TYPE_NEWDECIMAL: - case MYSQL_TYPE_NEWDATE: - DBUG_ASSERT(param->buffer_length != 0); - param->fetch_result= fetch_result_str; - break; - default: - DBUG_PRINT("error", ("Unknown param->buffer_type: %u", - (uint) param->buffer_type)); - DBUG_RETURN(TRUE); - } - if (! is_binary_compatible(param->buffer_type, field->type)) - param->fetch_result= fetch_result_with_conversion; - - /* Setup skip_result functions (to calculate max_length) */ - param->skip_result= skip_result_fixed; - switch (field->type) { - case MYSQL_TYPE_NULL: /* for dummy binds */ - param->pack_length= 0; - field->max_length= 0; - break; - case MYSQL_TYPE_TINY: - param->pack_length= 1; - field->max_length= 4; /* as in '-127' */ - break; - case MYSQL_TYPE_YEAR: - case MYSQL_TYPE_SHORT: - param->pack_length= 2; - field->max_length= 6; /* as in '-32767' */ - break; - case MYSQL_TYPE_INT24: - field->max_length= 9; /* as in '16777216' or in '-8388607' */ - param->pack_length= 4; - break; - case MYSQL_TYPE_LONG: - field->max_length= 11; /* '-2147483647' */ - param->pack_length= 4; - break; - case MYSQL_TYPE_LONGLONG: - field->max_length= 21; /* '18446744073709551616' */ - param->pack_length= 8; - break; - case MYSQL_TYPE_FLOAT: - param->pack_length= 4; - field->max_length= MAX_DOUBLE_STRING_REP_LENGTH; - break; - case MYSQL_TYPE_DOUBLE: - param->pack_length= 8; - field->max_length= MAX_DOUBLE_STRING_REP_LENGTH; - break; - case MYSQL_TYPE_TIME: - field->max_length= 15; /* 19:23:48.123456 */ - param->skip_result= skip_result_with_length; - break; - case MYSQL_TYPE_DATE: - field->max_length= 10; /* 2003-11-11 */ - param->skip_result= skip_result_with_length; - break; - case MYSQL_TYPE_DATETIME: - case MYSQL_TYPE_TIMESTAMP: - param->skip_result= skip_result_with_length; - field->max_length= MAX_DATE_STRING_REP_LENGTH; - break; - case MYSQL_TYPE_DECIMAL: - case MYSQL_TYPE_NEWDECIMAL: - case MYSQL_TYPE_ENUM: - case MYSQL_TYPE_SET: - case MYSQL_TYPE_GEOMETRY: - case MYSQL_TYPE_TINY_BLOB: - case MYSQL_TYPE_MEDIUM_BLOB: - case MYSQL_TYPE_LONG_BLOB: - case MYSQL_TYPE_BLOB: - case MYSQL_TYPE_VAR_STRING: - case MYSQL_TYPE_STRING: - case MYSQL_TYPE_BIT: - case MYSQL_TYPE_NEWDATE: - param->skip_result= skip_result_string; - break; - default: - DBUG_PRINT("error", ("Unknown field->type: %u", (uint) field->type)); - DBUG_RETURN(TRUE); - } - DBUG_RETURN(FALSE); -} - - -/* - Setup the bind buffers for resultset processing -*/ - -my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *my_bind) -{ - MYSQL_BIND *param, *end; - MYSQL_FIELD *field; - ulong bind_count= stmt->field_count; - uint param_count= 0; - DBUG_ENTER("mysql_stmt_bind_result"); - DBUG_PRINT("enter",("field_count: %lu", bind_count)); - - if (!bind_count) - { - int errorcode= (int) stmt->state < (int) MYSQL_STMT_PREPARE_DONE ? - CR_NO_PREPARE_STMT : CR_NO_STMT_METADATA; - set_stmt_error(stmt, errorcode, unknown_sqlstate, NULL); - DBUG_RETURN(1); - } - - /* - We only need to check that stmt->field_count - if it is not null - stmt->bind was initialized in mysql_stmt_prepare - stmt->bind overlaps with bind if mysql_stmt_bind_param - is called from mysql_stmt_store_result. - */ - - if (stmt->bind != my_bind) - memcpy((char*) stmt->bind, (char*) my_bind, - sizeof(MYSQL_BIND) * bind_count); - - for (param= stmt->bind, end= param + bind_count, field= stmt->fields ; - param < end ; - param++, field++) - { - DBUG_PRINT("info",("buffer_type: %u field_type: %u", - (uint) param->buffer_type, (uint) field->type)); - /* - Set param->is_null to point to a dummy variable if it's not set. - This is to make the execute code easier - */ - if (!param->is_null) - param->is_null= ¶m->is_null_value; - - if (!param->length) - param->length= ¶m->length_value; - - if (!param->error) - param->error= ¶m->error_value; - - param->param_number= param_count++; - param->offset= 0; - - if (setup_one_fetch_function(param, field)) - { - strmov(stmt->sqlstate, unknown_sqlstate); - sprintf(stmt->last_error, - ER(stmt->last_errno= CR_UNSUPPORTED_PARAM_TYPE), - field->type, param_count); - DBUG_RETURN(1); - } - } - stmt->bind_result_done= BIND_RESULT_DONE; - if (stmt->mysql->options.report_data_truncation) - stmt->bind_result_done|= REPORT_DATA_TRUNCATION; - - DBUG_RETURN(0); -} - - -/* - Fetch row data to bind buffers -*/ - -static int stmt_fetch_row(MYSQL_STMT *stmt, uchar *row) -{ - MYSQL_BIND *my_bind, *end; - MYSQL_FIELD *field; - uchar *null_ptr, bit; - int truncation_count= 0; - /* - Precondition: if stmt->field_count is zero or row is NULL, read_row_* - function must return no data. - */ - DBUG_ASSERT(stmt->field_count); - DBUG_ASSERT(row); - - if (!stmt->bind_result_done) - { - /* If output parameters were not bound we should just return success */ - return 0; - } - - null_ptr= row; - row+= (stmt->field_count+9)/8; /* skip null bits */ - bit= 4; /* first 2 bits are reserved */ - - /* Copy complete row to application buffers */ - for (my_bind= stmt->bind, end= my_bind + stmt->field_count, - field= stmt->fields ; - my_bind < end ; - my_bind++, field++) - { - *my_bind->error= 0; - if (*null_ptr & bit) - { - /* - We should set both row_ptr and is_null to be able to see - nulls in mysql_stmt_fetch_column. This is because is_null may point - to user data which can be overwritten between mysql_stmt_fetch and - mysql_stmt_fetch_column, and in this case nullness of column will be - lost. See mysql_stmt_fetch_column for details. - */ - my_bind->row_ptr= NULL; - *my_bind->is_null= 1; - } - else - { - *my_bind->is_null= 0; - my_bind->row_ptr= row; - (*my_bind->fetch_result)(my_bind, field, &row); - truncation_count+= *my_bind->error; - } - if (!((bit<<=1) & 255)) - { - bit= 1; /* To next uchar */ - null_ptr++; - } - } - if (truncation_count && (stmt->bind_result_done & REPORT_DATA_TRUNCATION)) - return MYSQL_DATA_TRUNCATED; - return 0; -} - - -int cli_unbuffered_fetch(MYSQL *mysql, char **row) -{ - if (packet_error == cli_safe_read(mysql)) - return 1; - - *row= ((mysql->net.read_pos[0] == 254) ? NULL : - (char*) (mysql->net.read_pos+1)); - return 0; -} - - -/* - Fetch and return row data to bound buffers, if any -*/ - -int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt) -{ - int rc; - uchar *row; - DBUG_ENTER("mysql_stmt_fetch"); - - if ((rc= (*stmt->read_row_func)(stmt, &row)) || - ((rc= stmt_fetch_row(stmt, row)) && rc != MYSQL_DATA_TRUNCATED)) - { - stmt->state= MYSQL_STMT_PREPARE_DONE; /* XXX: this is buggy */ - stmt->read_row_func= (rc == MYSQL_NO_DATA) ? - stmt_read_row_no_data : stmt_read_row_no_result_set; - } - else - { - /* This is to know in mysql_stmt_fetch_column that data was fetched */ - stmt->state= MYSQL_STMT_FETCH_DONE; - } - DBUG_RETURN(rc); -} - - -/* - Fetch data for one specified column data - - SYNOPSIS - mysql_stmt_fetch_column() - stmt Prepared statement handler - my_bind Where data should be placed. Should be filled in as - when calling mysql_stmt_bind_result() - column Column to fetch (first column is 0) - ulong offset Offset in result data (to fetch blob in pieces) - This is normally 0 - RETURN - 0 ok - 1 error -*/ - -int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *my_bind, - uint column, ulong offset) -{ - MYSQL_BIND *param= stmt->bind+column; - DBUG_ENTER("mysql_stmt_fetch_column"); - - if ((int) stmt->state < (int) MYSQL_STMT_FETCH_DONE) - { - set_stmt_error(stmt, CR_NO_DATA, unknown_sqlstate, NULL); - return 1; - } - if (column >= stmt->field_count) - { - set_stmt_error(stmt, CR_INVALID_PARAMETER_NO, unknown_sqlstate, NULL); - DBUG_RETURN(1); - } - - if (!my_bind->error) - my_bind->error= &my_bind->error_value; - *my_bind->error= 0; - if (param->row_ptr) - { - MYSQL_FIELD *field= stmt->fields+column; - uchar *row= param->row_ptr; - my_bind->offset= offset; - if (my_bind->is_null) - *my_bind->is_null= 0; - if (my_bind->length) /* Set the length if non char/binary types */ - *my_bind->length= *param->length; - else - my_bind->length= ¶m->length_value; /* Needed for fetch_result() */ - fetch_result_with_conversion(my_bind, field, &row); - } - else - { - if (my_bind->is_null) - *my_bind->is_null= 1; - } - DBUG_RETURN(0); -} - - -/* - Read all rows of data from server (binary format) -*/ - -int cli_read_binary_rows(MYSQL_STMT *stmt) -{ - ulong pkt_len; - uchar *cp; - MYSQL *mysql= stmt->mysql; - MYSQL_DATA *result= &stmt->result; - MYSQL_ROWS *cur, **prev_ptr= &result->data; - NET *net; - - DBUG_ENTER("cli_read_binary_rows"); - - if (!mysql) - { - set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate, NULL); - DBUG_RETURN(1); - } - - net = &mysql->net; - - while ((pkt_len= cli_safe_read(mysql)) != packet_error) - { - cp= net->read_pos; - if (cp[0] != 254 || pkt_len >= 8) - { - if (!(cur= (MYSQL_ROWS*) alloc_root(&result->alloc, - sizeof(MYSQL_ROWS) + pkt_len - 1))) - { - set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate, NULL); - goto err; - } - cur->data= (MYSQL_ROW) (cur+1); - *prev_ptr= cur; - prev_ptr= &cur->next; - memcpy((char *) cur->data, (char *) cp+1, pkt_len-1); - cur->length= pkt_len; /* To allow us to do sanity checks */ - result->rows++; - } - else - { - /* end of data */ - *prev_ptr= 0; - mysql->warning_count= uint2korr(cp+1); - mysql->server_status= uint2korr(cp+3); - DBUG_PRINT("info",("status: %u warning_count: %u", - mysql->server_status, mysql->warning_count)); - DBUG_RETURN(0); - } - } - set_stmt_errmsg(stmt, net); - -err: - DBUG_RETURN(1); -} - - -/* - Update meta data for statement - - SYNOPSIS - stmt_update_metadata() - stmt Statement handler - row Binary data - - NOTES - Only updates MYSQL_FIELD->max_length for strings -*/ - -static void stmt_update_metadata(MYSQL_STMT *stmt, MYSQL_ROWS *data) -{ - MYSQL_BIND *my_bind, *end; - MYSQL_FIELD *field; - uchar *null_ptr, bit; - uchar *row= (uchar*) data->data; -#ifndef DBUG_OFF - uchar *row_end= row + data->length; -#endif - - null_ptr= row; - row+= (stmt->field_count+9)/8; /* skip null bits */ - bit= 4; /* first 2 bits are reserved */ - - /* Go through all fields and calculate metadata */ - for (my_bind= stmt->bind, end= my_bind + stmt->field_count, field= stmt->fields ; - my_bind < end ; - my_bind++, field++) - { - if (!(*null_ptr & bit)) - (*my_bind->skip_result)(my_bind, field, &row); - DBUG_ASSERT(row <= row_end); - if (!((bit<<=1) & 255)) - { - bit= 1; /* To next uchar */ - null_ptr++; - } - } -} - - -/* - Store or buffer the binary results to stmt -*/ - -int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt) -{ - MYSQL *mysql= stmt->mysql; - MYSQL_DATA *result= &stmt->result; - DBUG_ENTER("mysql_stmt_store_result"); - - if (!mysql) - { - /* mysql can be reset in mysql_close called from mysql_reconnect */ - set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate, NULL); - DBUG_RETURN(1); - } - - if (!stmt->field_count) - DBUG_RETURN(0); - - if ((int) stmt->state < (int) MYSQL_STMT_EXECUTE_DONE) - { - set_stmt_error(stmt, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate, NULL); - DBUG_RETURN(1); - } - - if (stmt->last_errno) - { - /* An attempt to use an invalid statement handle. */ - DBUG_RETURN(1); - } - - if (mysql->status == MYSQL_STATUS_READY && - stmt->server_status & SERVER_STATUS_CURSOR_EXISTS) - { - /* - Server side cursor exist, tell server to start sending the rows - */ - NET *net= &mysql->net; - uchar buff[4 /* statement id */ + - 4 /* number of rows to fetch */]; - - /* Send row request to the server */ - int4store(buff, stmt->stmt_id); - int4store(buff + 4, (int)~0); /* number of rows to fetch */ - if (cli_advanced_command(mysql, COM_STMT_FETCH, buff, sizeof(buff), - (uchar*) 0, 0, 1, stmt)) - { - /* - Don't set stmt error if stmt->mysql is NULL, as the error in this case - has already been set by mysql_prune_stmt_list(). - */ - if (stmt->mysql) - set_stmt_errmsg(stmt, net); - DBUG_RETURN(1); - } - } - else if (mysql->status != MYSQL_STATUS_STATEMENT_GET_RESULT) - { - set_stmt_error(stmt, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate, NULL); - DBUG_RETURN(1); - } - - if (stmt->update_max_length && !stmt->bind_result_done) - { - /* - We must initalize the bind structure to be able to calculate - max_length - */ - MYSQL_BIND *my_bind, *end; - MYSQL_FIELD *field; - bzero((char*) stmt->bind, sizeof(*stmt->bind)* stmt->field_count); - - for (my_bind= stmt->bind, end= my_bind + stmt->field_count, - field= stmt->fields; - my_bind < end ; - my_bind++, field++) - { - my_bind->buffer_type= MYSQL_TYPE_NULL; - my_bind->buffer_length=1; - } - - if (mysql_stmt_bind_result(stmt, stmt->bind)) - DBUG_RETURN(1); - stmt->bind_result_done= 0; /* No normal bind done */ - } - - if ((*mysql->methods->read_binary_rows)(stmt)) - { - free_root(&result->alloc, MYF(MY_KEEP_PREALLOC)); - result->data= NULL; - result->rows= 0; - mysql->status= MYSQL_STATUS_READY; - DBUG_RETURN(1); - } - - /* Assert that if there was a cursor, all rows have been fetched */ - DBUG_ASSERT(mysql->status != MYSQL_STATUS_READY || - (mysql->server_status & SERVER_STATUS_LAST_ROW_SENT)); - - if (stmt->update_max_length) - { - MYSQL_ROWS *cur= result->data; - for(; cur; cur=cur->next) - stmt_update_metadata(stmt, cur); - } - - stmt->data_cursor= result->data; - mysql->affected_rows= stmt->affected_rows= result->rows; - stmt->read_row_func= stmt_read_row_buffered; - mysql->unbuffered_fetch_owner= 0; /* set in stmt_execute */ - mysql->status= MYSQL_STATUS_READY; /* server is ready */ - DBUG_RETURN(0); /* Data buffered, must be fetched with mysql_stmt_fetch() */ -} - - -/* - Seek to desired row in the statement result set -*/ - -MYSQL_ROW_OFFSET STDCALL -mysql_stmt_row_seek(MYSQL_STMT *stmt, MYSQL_ROW_OFFSET row) -{ - MYSQL_ROW_OFFSET offset= stmt->data_cursor; - DBUG_ENTER("mysql_stmt_row_seek"); - - stmt->data_cursor= row; - DBUG_RETURN(offset); -} - - -/* - Return the current statement row cursor position -*/ - -MYSQL_ROW_OFFSET STDCALL -mysql_stmt_row_tell(MYSQL_STMT *stmt) -{ - DBUG_ENTER("mysql_stmt_row_tell"); - - DBUG_RETURN(stmt->data_cursor); -} - - -/* - Move the stmt result set data cursor to specified row -*/ - -void STDCALL -mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong row) -{ - MYSQL_ROWS *tmp= stmt->result.data; - DBUG_ENTER("mysql_stmt_data_seek"); - DBUG_PRINT("enter",("row id to seek: %ld",(long) row)); - - for (; tmp && row; --row, tmp= tmp->next) - ; - stmt->data_cursor= tmp; - if (!row && tmp) - { - /* Rewind the counter */ - stmt->read_row_func= stmt_read_row_buffered; - stmt->state= MYSQL_STMT_EXECUTE_DONE; - } - DBUG_VOID_RETURN; -} - - -/* - Return total rows the current statement result set -*/ - -my_ulonglong STDCALL mysql_stmt_num_rows(MYSQL_STMT *stmt) -{ - DBUG_ENTER("mysql_stmt_num_rows"); - - DBUG_RETURN(stmt->result.rows); -} - - -/* - Free the client side memory buffers, reset long data state - on client if necessary, and reset the server side statement if - this has been requested. -*/ - -static my_bool reset_stmt_handle(MYSQL_STMT *stmt, uint flags) -{ - /* If statement hasn't been prepared there is nothing to reset */ - if ((int) stmt->state > (int) MYSQL_STMT_INIT_DONE) - { - MYSQL *mysql= stmt->mysql; - MYSQL_DATA *result= &stmt->result; - - /* - Reset stored result set if so was requested or it's a part - of cursor fetch. - */ - if (flags & RESET_STORE_RESULT) - { - /* Result buffered */ - free_root(&result->alloc, MYF(MY_KEEP_PREALLOC)); - result->data= NULL; - result->rows= 0; - stmt->data_cursor= NULL; - } - if (flags & RESET_LONG_DATA) - { - MYSQL_BIND *param= stmt->params, *param_end= param + stmt->param_count; - /* Clear long_data_used flags */ - for (; param < param_end; param++) - param->long_data_used= 0; - } - stmt->read_row_func= stmt_read_row_no_result_set; - if (mysql) - { - if ((int) stmt->state > (int) MYSQL_STMT_PREPARE_DONE) - { - if (mysql->unbuffered_fetch_owner == &stmt->unbuffered_fetch_cancelled) - mysql->unbuffered_fetch_owner= 0; - if (stmt->field_count && mysql->status != MYSQL_STATUS_READY) - { - /* There is a result set and it belongs to this statement */ - (*mysql->methods->flush_use_result)(mysql, FALSE); - if (mysql->unbuffered_fetch_owner) - *mysql->unbuffered_fetch_owner= TRUE; - mysql->status= MYSQL_STATUS_READY; - } - } - if (flags & RESET_SERVER_SIDE) - { - /* - Reset the server side statement and close the server side - cursor if it exists. - */ - uchar buff[MYSQL_STMT_HEADER]; /* packet header: 4 bytes for stmt id */ - int4store(buff, stmt->stmt_id); - if ((*mysql->methods->advanced_command)(mysql, COM_STMT_RESET, buff, - sizeof(buff), 0, 0, 0, stmt)) - { - set_stmt_errmsg(stmt, &mysql->net); - stmt->state= MYSQL_STMT_INIT_DONE; - return 1; - } - } - } - if (flags & RESET_CLEAR_ERROR) - stmt_clear_error(stmt); - stmt->state= MYSQL_STMT_PREPARE_DONE; - } - return 0; -} - -my_bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt) -{ - DBUG_ENTER("mysql_stmt_free_result"); - - /* Free the client side and close the server side cursor if there is one */ - DBUG_RETURN(reset_stmt_handle(stmt, RESET_LONG_DATA | RESET_STORE_RESULT | - RESET_CLEAR_ERROR)); -} - -/******************************************************************** - statement error handling and close -*********************************************************************/ - -/* - Close the statement handle by freeing all alloced resources - - SYNOPSIS - mysql_stmt_close() - stmt Statement handle - - RETURN VALUES - 0 ok - 1 error -*/ - -my_bool STDCALL mysql_stmt_close(MYSQL_STMT *stmt) -{ - MYSQL *mysql= stmt->mysql; - int rc= 0; - DBUG_ENTER("mysql_stmt_close"); - - free_root(&stmt->result.alloc, MYF(0)); - free_root(&stmt->mem_root, MYF(0)); - - if (mysql) - { - mysql->stmts= list_delete(mysql->stmts, &stmt->list); - /* - Clear NET error state: if the following commands come through - successfully, connection will still be usable for other commands. - */ - net_clear_error(&mysql->net); - if ((int) stmt->state > (int) MYSQL_STMT_INIT_DONE) - { - uchar buff[MYSQL_STMT_HEADER]; /* 4 bytes - stmt id */ - - if (mysql->unbuffered_fetch_owner == &stmt->unbuffered_fetch_cancelled) - mysql->unbuffered_fetch_owner= 0; - if (mysql->status != MYSQL_STATUS_READY) - { - /* - Flush result set of the connection. If it does not belong - to this statement, set a warning. - */ - (*mysql->methods->flush_use_result)(mysql, TRUE); - if (mysql->unbuffered_fetch_owner) - *mysql->unbuffered_fetch_owner= TRUE; - mysql->status= MYSQL_STATUS_READY; - } - int4store(buff, stmt->stmt_id); - if ((rc= stmt_command(mysql, COM_STMT_CLOSE, buff, 4, stmt))) - { - set_stmt_errmsg(stmt, &mysql->net); - } - } - } - - my_free(stmt); - - DBUG_RETURN(test(rc)); -} - -/* - Reset the statement buffers in server -*/ - -my_bool STDCALL mysql_stmt_reset(MYSQL_STMT *stmt) -{ - DBUG_ENTER("mysql_stmt_reset"); - DBUG_ASSERT(stmt != 0); - if (!stmt->mysql) - { - /* mysql can be reset in mysql_close called from mysql_reconnect */ - set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate, NULL); - DBUG_RETURN(1); - } - /* Reset the client and server sides of the prepared statement */ - DBUG_RETURN(reset_stmt_handle(stmt, - RESET_SERVER_SIDE | RESET_LONG_DATA | - RESET_CLEAR_ERROR)); -} - -/* - Return statement error code -*/ - -uint STDCALL mysql_stmt_errno(MYSQL_STMT * stmt) -{ - DBUG_ENTER("mysql_stmt_errno"); - DBUG_RETURN(stmt->last_errno); -} - -const char *STDCALL mysql_stmt_sqlstate(MYSQL_STMT * stmt) -{ - DBUG_ENTER("mysql_stmt_sqlstate"); - DBUG_RETURN(stmt->sqlstate); -} - -/* - Return statement error message -*/ - -const char *STDCALL mysql_stmt_error(MYSQL_STMT * stmt) -{ - DBUG_ENTER("mysql_stmt_error"); - DBUG_RETURN(stmt->last_error); -} - - -/******************************************************************** - Transactional APIs -*********************************************************************/ - -/* - Commit the current transaction -*/ - -my_bool STDCALL mysql_commit(MYSQL * mysql) -{ - DBUG_ENTER("mysql_commit"); - DBUG_RETURN((my_bool) mysql_real_query(mysql, "commit", 6)); -} - -/* - Rollback the current transaction -*/ - -my_bool STDCALL mysql_rollback(MYSQL * mysql) -{ - DBUG_ENTER("mysql_rollback"); - DBUG_RETURN((my_bool) mysql_real_query(mysql, "rollback", 8)); -} - - -/* - Set autocommit to either true or false -*/ - -my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode) -{ - DBUG_ENTER("mysql_autocommit"); - DBUG_PRINT("enter", ("mode : %d", auto_mode)); - - DBUG_RETURN((my_bool) mysql_real_query(mysql, auto_mode ? - "set autocommit=1":"set autocommit=0", - 16)); -} - - -/******************************************************************** - Multi query execution + SPs APIs -*********************************************************************/ - -/* - Returns true/false to indicate whether any more query results exist - to be read using mysql_next_result() -*/ - -my_bool STDCALL mysql_more_results(MYSQL *mysql) -{ - my_bool res; - DBUG_ENTER("mysql_more_results"); - - res= ((mysql->server_status & SERVER_MORE_RESULTS_EXISTS) ? 1: 0); - DBUG_PRINT("exit",("More results exists ? %d", res)); - DBUG_RETURN(res); -} - - -/* - Reads and returns the next query results -*/ -int STDCALL mysql_next_result(MYSQL *mysql) -{ - DBUG_ENTER("mysql_next_result"); - - if (mysql->status != MYSQL_STATUS_READY) - { - set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate); - DBUG_RETURN(1); - } - - net_clear_error(&mysql->net); - mysql->affected_rows= ~(my_ulonglong) 0; - - if (mysql->server_status & SERVER_MORE_RESULTS_EXISTS) - DBUG_RETURN((*mysql->methods->next_result)(mysql)); - - DBUG_RETURN(-1); /* No more results */ -} - - -int STDCALL mysql_stmt_next_result(MYSQL_STMT *stmt) -{ - MYSQL *mysql= stmt->mysql; - int rc; - DBUG_ENTER("mysql_stmt_next_result"); - - if (!mysql) - DBUG_RETURN(1); - - if (stmt->last_errno) - DBUG_RETURN(stmt->last_errno); - - if (mysql->server_status & SERVER_MORE_RESULTS_EXISTS) - { - if (reset_stmt_handle(stmt, RESET_STORE_RESULT)) - DBUG_RETURN(1); - } - - rc= mysql_next_result(mysql); - - if (rc) - { - set_stmt_errmsg(stmt, &mysql->net); - DBUG_RETURN(rc); - } - - if (mysql->status == MYSQL_STATUS_GET_RESULT) - mysql->status= MYSQL_STATUS_STATEMENT_GET_RESULT; - - stmt->state= MYSQL_STMT_EXECUTE_DONE; - stmt->bind_result_done= FALSE; - - if (mysql->field_count) - { - alloc_stmt_fields(stmt); - prepare_to_fetch_result(stmt); - } - else - { - stmt->field_count= mysql->field_count; - } - - DBUG_RETURN(0); -} - - -MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql) -{ - return (*mysql->methods->use_result)(mysql); -} - -my_bool STDCALL mysql_read_query_result(MYSQL *mysql) -{ - return (*mysql->methods->read_query_result)(mysql); -} - diff --git a/deps/mysqllite/libmysql/libmysql_exports.def b/deps/mysqllite/libmysql/libmysql_exports.def deleted file mode 100644 index b871320f3a38a1..00000000000000 --- a/deps/mysqllite/libmysql/libmysql_exports.def +++ /dev/null @@ -1,107 +0,0 @@ -EXPORTS - load_defaults - mysql_thread_end - mysql_thread_init - myodbc_remove_escape - mysql_affected_rows - mysql_autocommit - mysql_stmt_bind_param - mysql_stmt_bind_result - mysql_change_user - mysql_character_set_name - mysql_close - mysql_commit - mysql_data_seek - mysql_debug - mysql_dump_debug_info - mysql_eof - mysql_errno - mysql_error - mysql_escape_string - mysql_hex_string - mysql_stmt_execute - mysql_stmt_fetch - mysql_stmt_fetch_column - mysql_fetch_field - mysql_fetch_field_direct - mysql_fetch_fields - mysql_fetch_lengths - mysql_fetch_row - mysql_field_count - mysql_field_seek - mysql_field_tell - mysql_free_result - mysql_get_client_info - mysql_get_host_info - mysql_get_proto_info - mysql_get_server_info - mysql_get_client_version - mysql_get_ssl_cipher - mysql_info - mysql_init - mysql_insert_id - mysql_kill - mysql_set_server_option - mysql_list_dbs - mysql_list_fields - mysql_list_processes - mysql_list_tables - mysql_more_results - mysql_next_result - mysql_num_fields - mysql_num_rows - mysql_options - mysql_stmt_param_count - mysql_stmt_param_metadata - mysql_ping - mysql_stmt_result_metadata - mysql_query - mysql_read_query_result - mysql_real_connect - mysql_real_escape_string - mysql_real_query - mysql_refresh - mysql_rollback - mysql_row_seek - mysql_row_tell - mysql_select_db - mysql_stmt_send_long_data - mysql_send_query - mysql_shutdown - mysql_ssl_set - mysql_stat - mysql_stmt_affected_rows - mysql_stmt_close - mysql_stmt_reset - mysql_stmt_data_seek - mysql_stmt_errno - mysql_stmt_error - mysql_stmt_free_result - mysql_stmt_num_rows - mysql_stmt_row_seek - mysql_stmt_row_tell - mysql_stmt_store_result - mysql_store_result - mysql_thread_id - mysql_thread_safe - mysql_use_result - mysql_warning_count - mysql_stmt_sqlstate - mysql_sqlstate - mysql_get_server_version - mysql_stmt_prepare - mysql_stmt_init - mysql_stmt_insert_id - mysql_stmt_attr_get - mysql_stmt_attr_set - mysql_stmt_field_count - mysql_set_local_infile_default - mysql_set_local_infile_handler - mysql_embedded - mysql_server_init - mysql_server_end - mysql_set_character_set - mysql_get_character_set_info - mysql_stmt_next_result - - diff --git a/deps/mysqllite/mysys/ChangeLog b/deps/mysqllite/mysys/ChangeLog deleted file mode 100644 index 7a426106667761..00000000000000 --- a/deps/mysqllite/mysys/ChangeLog +++ /dev/null @@ -1,221 +0,0 @@ -2000-02-16 Michael Widenius - -* Added an extra argument to the compare routine for queues to allow - more advanced key compare functions. - -2000-02-10 Michael Widenius - -* Added THR_READ_NO_INSERT lock privilege to thr_lock. - -1999-08-21 Michael Widenius - -* Fix that '-1.49 or -1.49' is true -* Allow negative hexadecimal numbers (like -0x0f). -* Fixed problem with auto_increment on float and double. - -Wed Dec 17 02:13:58 1997 - -* Faster flush of keycache. - -Sat Dec 2 21:36:20 1995 Michael Widenius (monty@bitch) - - * array.c push_element & alloc_element. - -Wed Mar 3 00:54:20 1993 Michael Widenius (monty@bitch) - - * Removed automatic O_TRUNC from my_create. - -Wed Oct 28 02:10:56 1992 Michael Widenius (monty@bitch) - - * Enabled ASNYNC_IO on SUN. - -Mon Aug 31 23:51:13 1992 Michael Widenius (monty@bitch) - - * Changed tree_insert to return element if ok. - * Added new define tree_set_pointer(). - * Chagned delete_queue() to not free if allready freed. - -Mon Aug 17 01:46:36 1992 Michael Widenius (monty@bitch) - - * Added ny cashing-rutine mf_iocash for quicker io. - -Wed Aug 12 13:41:18 1992 Michael Widenius (monty@bitch) - - * Added new function get_copy_of_memory for combined malloc/copy. - * Splitted my_malloc to three files. - -Thu Jan 23 22:02:37 1992 Michael Widenius (monty at LYNX) - - * Added range-checks and aligned checks on ptrs to - safe_malloc:free and safe_malloc:realloc to catch more - error nicely without core-dumps. - -Wed Nov 13 01:52:18 1991 Michael Widenius (monty at LYNX) - - * Added use of mysys as a shared library. - -Sat Nov 9 14:38:21 1991 Michael Widenius (monty at LYNX) - - * Added expand of ~username to unpack_dirname. - -Tue Sep 17 21:15:08 1991 Michael Widenius (monty at LYNX) - - * Don't free null-pointers if passed to my_free - -Fri May 17 20:11:27 1991 Michael Widenius (monty at LYNX) - - * Changed all char * to string. (Can't change const char * because - of bug in C-definition. - -Tue Apr 30 01:32:56 1991 Michael Widenius (monty at LYNX) - - * my_path now examines environment for posix variable "_" if - progname is given and has no path. - -Mon Apr 22 16:12:56 1991 Michael Widenius (monty at LYNX) - - * Added function my_load_path() to fix path to a hard-path. - -Mon Apr 15 22:08:58 1991 Michael Widenius (monty at LYNX) - - * Added more info on DBUG-stream when freeing unallocated data. - -Wed Apr 3 18:41:28 1991 Michael Widenius (monty at LYNX) - - * Added global flag sf_malloc_no_sanity to make it possibly - to avoid sanity-checks in right code with uses malloc a lot. - -Tue Mar 26 15:09:45 1991 Mikael WIDENIUS (monty at panther) - - * Made soundex look nicer - -Sat Mar 23 10:49:49 1991 Michael Widenius (monty at LYNX) - - * Added init of alarm variables to skip some warnings from gcc. - -Tue Mar 5 16:50:34 1991 Michael Widenius (monty at LYNX) - - * Our qsort now only test if compare() function returns >= 0 - and is optimized for compare() returning > 0. - -Fri Nov 23 23:53:46 1990 Michael Widenius (monty at LYNX) - - * Added function my_set_alarm_variable to get a variable set - on some time. - my_alarm.h added for functions who want to print stat after - a given time or after a number of loops. - Changed my_lock to use new function and use defines in my_alarm.h - -Mon Oct 1 13:16:15 1990 Michael Widenius (monty at LYNX) - - * Added use of asynchronic io in read_cash_record(). - * Added write_cash and flush_write_cash to record cashing. - -Sun Sep 16 22:05:25 1990 Michael Widenius (monty at LYNX) - - * Added optional alarm to my_lock if one has FCNTL_LOCK. Added new - defines to my_sys.h. - -Mon Aug 27 22:20:38 1990 Michael Widenius (monty at lynx) - - * my_end() now can print output about executed program. - * Added parameter-defines for my_end in my_sys.h - -Sun Apr 1 23:29:47 1990 Monty (monty at monty) - - * Changed mf_keydisk.c to have separate functions for read and write. - Read can now return pointer to intern key-buffer to skip - unessessary memcpy-s. - -Fri Mar 23 23:03:39 1990 Monty (monty at monty) - - * function test_if_hard_pathname() added in dirname.c - * my_getwd now only saves changed current dir if dir is a - hard pathname. - * changed my_path() to use test_if_hard_pathname() - -Thu Mar 1 14:47:59 1990 Monty (monty at monty) - - * New function my_path(). - -Sat Feb 24 02:54:35 1990 Monty (monty at monty) - - * Added print of my_progname in my_mess.c - -Sun Feb 11 17:55:58 1990 David Axmark (davida at isil) - - * Concatenated libarys my_func and my_sys because of to much - crosswise dependencies. - * Fixed varagrs code in mf_fixadr.c - -Mon Dec 4 17:36:16 1989 Monty (monty at monty) - - * Changed safemalloc() to use my_message() if out of memory and - to check MY_WME if we want this error-messages. - * Changed my_setwd() to use dos_setdrive() insted of system(). - -Wed Oct 25 02:56:07 1989 Monty (monty at monty) - - * Changed my_mktmp1() to work like tempnam() with default dirname. - * Changed name of my_mktmp1.c to my_tempnam.c - -Thu Oct 19 16:39:27 1989 David Axmark (davida at isil) - - * Removed libary mysysnc. Instead added a hook to my_error that - can call my_message if needed. - -Thu Oct 5 01:33:29 1989 David Axmark (davida at isil) - - * Use MY_SEEK_{SET,CUR,END} as arguments to my_seek - - * Added a a array of structs that holds properties of open files. - Removed include file extras.h - -Wed Jun 21 01:34:04 1989 Monty (monty at monty) - - * Added two new malloc-functions: my_once_alloc() and - my_once_free(). These give easyer and quicker startup. - -Mon May 22 14:03:44 1989 Monty (monty at monty) - - * Fixed my_getwd and my_setwd so they work. - * Added extern variabel curr_char[] with is set to current - directory after my_getwd() or my_setwd(); - -Mon Jan 23 03:38:50 1989 Monty (monty at monty) - - * Changed my_chsize to check if NO_CHSIZE is defined. If new file - should be shorter it fills unused part with null. - * Changed my_lock to not check for arg 0 (Functions should use - LK_TO_EOF to lock all file. - -Tue Dec 6 15:09:44 1988 Monty (monty at monty) - - * Added DBUG_PRINT if error in my_seek. - -Mon Dec 5 15:58:48 1988 Monty (monty at monty) - - * Added DBUG_PRINT if not all byte read/written in my_read(), - my_fread(), my_write() and my_fwrite(); - -Sat Dec 3 01:48:03 1988 Monty (monty at monty) - - * Fixed bug in Makefile; quick did't work. - * Changed safemalloc to use bmove, bfill and memcpy when handling - memoryblocks. - -Fri Dec 2 03:29:21 1988 Monty (monty at monty) - - * Added more defines under MEMORY in my_func.h - * Added functions to llib-lmysys. - * Removed RCS/* files and installed ewerything as stable. - (Because errors in old RCS-files. - -Wed Nov 9 00:32:33 1988 Monty (monty at monty) - - * Changed realloc for MSDOS; Previous version freed old block on - * error, new version (of compiler) dosn't. - -Wed Oct 26 21:07:27 1988 Monty (monty at monty) - - * Fixed missing updateing of my_stream_opened; diff --git a/deps/mysqllite/mysys/array.c b/deps/mysqllite/mysys/array.c deleted file mode 100644 index 70c7a59aa3a4d5..00000000000000 --- a/deps/mysqllite/mysys/array.c +++ /dev/null @@ -1,383 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Handling of arrays that can grow dynamicly. */ - -#include "mysys_priv.h" -#include "m_string.h" - -/* - Initiate dynamic array - - SYNOPSIS - init_dynamic_array2() - array Pointer to an array - element_size Size of element - init_buffer Initial buffer pointer - init_alloc Number of initial elements - alloc_increment Increment for adding new elements - - DESCRIPTION - init_dynamic_array() initiates array and allocate space for - init_alloc eilements. - Array is usable even if space allocation failed, hence, the - function never returns TRUE. - Static buffers must begin immediately after the array structure. - - RETURN VALUE - FALSE Ok -*/ - -my_bool init_dynamic_array2(DYNAMIC_ARRAY *array, uint element_size, - void *init_buffer, uint init_alloc, - uint alloc_increment) -{ - DBUG_ENTER("init_dynamic_array"); - if (!alloc_increment) - { - alloc_increment=max((8192-MALLOC_OVERHEAD)/element_size,16); - if (init_alloc > 8 && alloc_increment > init_alloc * 2) - alloc_increment=init_alloc*2; - } - - if (!init_alloc) - { - init_alloc=alloc_increment; - init_buffer= 0; - } - array->elements=0; - array->max_element=init_alloc; - array->alloc_increment=alloc_increment; - array->size_of_element=element_size; - if ((array->buffer= init_buffer)) - DBUG_RETURN(FALSE); - /* - Since the dynamic array is usable even if allocation fails here malloc - should not throw an error - */ - if (!(array->buffer= (uchar*) my_malloc(element_size*init_alloc, MYF(0)))) - array->max_element=0; - DBUG_RETURN(FALSE); -} - -my_bool init_dynamic_array(DYNAMIC_ARRAY *array, uint element_size, - uint init_alloc, uint alloc_increment) -{ - /* placeholder to preserve ABI */ - return my_init_dynamic_array_ci(array, element_size, init_alloc, - alloc_increment); -} -/* - Insert element at the end of array. Allocate memory if needed. - - SYNOPSIS - insert_dynamic() - array - element - - RETURN VALUE - TRUE Insert failed - FALSE Ok -*/ - -my_bool insert_dynamic(DYNAMIC_ARRAY *array, uchar* element) -{ - uchar* buffer; - if (array->elements == array->max_element) - { /* Call only when nessesary */ - if (!(buffer=alloc_dynamic(array))) - return TRUE; - } - else - { - buffer=array->buffer+(array->elements * array->size_of_element); - array->elements++; - } - memcpy(buffer,element,(size_t) array->size_of_element); - return FALSE; -} - - -/* - Alloc space for next element(s) - - SYNOPSIS - alloc_dynamic() - array - - DESCRIPTION - alloc_dynamic() checks if there is empty space for at least - one element if not tries to allocate space for alloc_increment - elements at the end of array. - - RETURN VALUE - pointer Pointer to empty space for element - 0 Error -*/ - -uchar *alloc_dynamic(DYNAMIC_ARRAY *array) -{ - if (array->elements == array->max_element) - { - char *new_ptr; - if (array->buffer == (uchar *)(array + 1)) - { - /* - In this senerio, the buffer is statically preallocated, - so we have to create an all-new malloc since we overflowed - */ - if (!(new_ptr= (char *) my_malloc((array->max_element+ - array->alloc_increment) * - array->size_of_element, - MYF(MY_WME)))) - return 0; - memcpy(new_ptr, array->buffer, - array->elements * array->size_of_element); - } - else - if (!(new_ptr=(char*) my_realloc(array->buffer,(array->max_element+ - array->alloc_increment)* - array->size_of_element, - MYF(MY_WME | MY_ALLOW_ZERO_PTR)))) - return 0; - array->buffer= (uchar*) new_ptr; - array->max_element+=array->alloc_increment; - } - return array->buffer+(array->elements++ * array->size_of_element); -} - - -/* - Pop last element from array. - - SYNOPSIS - pop_dynamic() - array - - RETURN VALUE - pointer Ok - 0 Array is empty -*/ - -uchar *pop_dynamic(DYNAMIC_ARRAY *array) -{ - if (array->elements) - return array->buffer+(--array->elements * array->size_of_element); - return 0; -} - -/* - Replace element in array with given element and index - - SYNOPSIS - set_dynamic() - array - element Element to be inserted - idx Index where element is to be inserted - - DESCRIPTION - set_dynamic() replaces element in array. - If idx > max_element insert new element. Allocate memory if needed. - - RETURN VALUE - TRUE Idx was out of range and allocation of new memory failed - FALSE Ok -*/ - -my_bool set_dynamic(DYNAMIC_ARRAY *array, uchar* element, uint idx) -{ - if (idx >= array->elements) - { - if (idx >= array->max_element && allocate_dynamic(array, idx)) - return TRUE; - bzero((uchar*) (array->buffer+array->elements*array->size_of_element), - (idx - array->elements)*array->size_of_element); - array->elements=idx+1; - } - memcpy(array->buffer+(idx * array->size_of_element),element, - (size_t) array->size_of_element); - return FALSE; -} - - -/* - Ensure that dynamic array has enough elements - - SYNOPSIS - allocate_dynamic() - array - max_elements Numbers of elements that is needed - - NOTES - Any new allocated element are NOT initialized - - RETURN VALUE - FALSE Ok - TRUE Allocation of new memory failed -*/ - -my_bool allocate_dynamic(DYNAMIC_ARRAY *array, uint max_elements) -{ - if (max_elements >= array->max_element) - { - uint size; - uchar *new_ptr; - size= (max_elements + array->alloc_increment)/array->alloc_increment; - size*= array->alloc_increment; - if (array->buffer == (uchar *)(array + 1)) - { - /* - In this senerio, the buffer is statically preallocated, - so we have to create an all-new malloc since we overflowed - */ - if (!(new_ptr= (uchar *) my_malloc(size * - array->size_of_element, - MYF(MY_WME)))) - return 0; - memcpy(new_ptr, array->buffer, - array->elements * array->size_of_element); - } - else - - - if (!(new_ptr= (uchar*) my_realloc(array->buffer,size* - array->size_of_element, - MYF(MY_WME | MY_ALLOW_ZERO_PTR)))) - return TRUE; - array->buffer= new_ptr; - array->max_element= size; - } - return FALSE; -} - - -/* - Get an element from array by given index - - SYNOPSIS - get_dynamic() - array - uchar* Element to be returned. If idx > elements contain zeroes. - idx Index of element wanted. -*/ - -void get_dynamic(DYNAMIC_ARRAY *array, uchar* element, uint idx) -{ - if (idx >= array->elements) - { - DBUG_PRINT("warning",("To big array idx: %d, array size is %d", - idx,array->elements)); - bzero(element,array->size_of_element); - return; - } - memcpy(element,array->buffer+idx*array->size_of_element, - (size_t) array->size_of_element); -} - - -/* - Empty array by freeing all memory - - SYNOPSIS - delete_dynamic() - array Array to be deleted -*/ - -void delete_dynamic(DYNAMIC_ARRAY *array) -{ - /* - Just mark as empty if we are using a static buffer - */ - if (array->buffer == (uchar *)(array + 1)) - array->elements= 0; - else - if (array->buffer) - { - my_free(array->buffer); - array->buffer=0; - array->elements=array->max_element=0; - } -} - -/* - Delete element by given index - - SYNOPSIS - delete_dynamic_element() - array - idx Index of element to be deleted -*/ - -void delete_dynamic_element(DYNAMIC_ARRAY *array, uint idx) -{ - char *ptr= (char*) array->buffer+array->size_of_element*idx; - array->elements--; - memmove(ptr,ptr+array->size_of_element, - (array->elements-idx)*array->size_of_element); -} - - -/* - Free unused memory - - SYNOPSIS - freeze_size() - array Array to be freed - -*/ - -void freeze_size(DYNAMIC_ARRAY *array) -{ - uint elements=max(array->elements,1); - - /* - Do nothing if we are using a static buffer - */ - if (array->buffer == (uchar *)(array + 1)) - return; - - if (array->buffer && array->max_element != elements) - { - array->buffer=(uchar*) my_realloc(array->buffer, - elements*array->size_of_element, - MYF(MY_WME)); - array->max_element=elements; - } -} - - -/* - Get the index of a dynamic element - - SYNOPSIS - get_index_dynamic() - array Array - element Whose element index - -*/ - -int get_index_dynamic(DYNAMIC_ARRAY *array, uchar* element) -{ - size_t ret; - if (array->buffer > element) - return -1; - - ret= (element - array->buffer) / array->size_of_element; - if (ret > array->elements) - return -1; - - return ret; - -} diff --git a/deps/mysqllite/mysys/base64.c b/deps/mysqllite/mysys/base64.c deleted file mode 100644 index ab66715c929aea..00000000000000 --- a/deps/mysqllite/mysys/base64.c +++ /dev/null @@ -1,311 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include /* strchr() */ -#include /* my_isspace() */ -#include - -#ifndef MAIN - -static char base64_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz" - "0123456789+/"; - - -int -base64_needed_encoded_length(int length_of_data) -{ - int nb_base64_chars; - nb_base64_chars= (length_of_data + 2) / 3 * 4; - - return - nb_base64_chars + /* base64 char incl padding */ - (nb_base64_chars - 1)/ 76 + /* newlines */ - 1; /* NUL termination of string */ -} - - -int -base64_needed_decoded_length(int length_of_encoded_data) -{ - return (int) ceil(length_of_encoded_data * 3 / 4); -} - - -/* - Encode a data as base64. - - Note: We require that dst is pre-allocated to correct size. - See base64_needed_encoded_length(). -*/ - -int -base64_encode(const void *src, size_t src_len, char *dst) -{ - const unsigned char *s= (const unsigned char*)src; - size_t i= 0; - size_t len= 0; - - for (; i < src_len; len += 4) - { - unsigned c; - - if (len == 76) - { - len= 0; - *dst++= '\n'; - } - - c= s[i++]; - c <<= 8; - - if (i < src_len) - c += s[i]; - c <<= 8; - i++; - - if (i < src_len) - c += s[i]; - i++; - - *dst++= base64_table[(c >> 18) & 0x3f]; - *dst++= base64_table[(c >> 12) & 0x3f]; - - if (i > (src_len + 1)) - *dst++= '='; - else - *dst++= base64_table[(c >> 6) & 0x3f]; - - if (i > src_len) - *dst++= '='; - else - *dst++= base64_table[(c >> 0) & 0x3f]; - } - *dst= '\0'; - - return 0; -} - - -static inline uint -pos(unsigned char c) -{ - return (uint) (strchr(base64_table, c) - base64_table); -} - - -#define SKIP_SPACE(src, i, size) \ -{ \ - while (i < size && my_isspace(&my_charset_latin1, * src)) \ - { \ - i++; \ - src++; \ - } \ - if (i == size) \ - { \ - break; \ - } \ -} - - -/* - Decode a base64 string - - SYNOPSIS - base64_decode() - src Pointer to base64-encoded string - len Length of string at 'src' - dst Pointer to location where decoded data will be stored - end_ptr Pointer to variable that will refer to the character - after the end of the encoded data that were decoded. Can - be NULL. - - DESCRIPTION - - The base64-encoded data in the range ['src','*end_ptr') will be - decoded and stored starting at 'dst'. The decoding will stop - after 'len' characters have been read from 'src', or when padding - occurs in the base64-encoded data. In either case: if 'end_ptr' is - non-null, '*end_ptr' will be set to point to the character after - the last read character, even in the presence of error. - - NOTE - We require that 'dst' is pre-allocated to correct size. - - SEE ALSO - base64_needed_decoded_length(). - - RETURN VALUE - Number of bytes written at 'dst' or -1 in case of failure -*/ -int -base64_decode(const char *src_base, size_t len, - void *dst, const char **end_ptr) -{ - char b[3]; - size_t i= 0; - char *dst_base= (char *)dst; - char const *src= src_base; - char *d= dst_base; - size_t j; - - while (i < len) - { - unsigned c= 0; - size_t mark= 0; - - SKIP_SPACE(src, i, len); - - c += pos(*src++); - c <<= 6; - i++; - - SKIP_SPACE(src, i, len); - - c += pos(*src++); - c <<= 6; - i++; - - SKIP_SPACE(src, i, len); - - if (*src != '=') - c += pos(*src++); - else - { - src += 2; /* There should be two bytes padding */ - i= len; - mark= 2; - c <<= 6; - goto end; - } - c <<= 6; - i++; - - SKIP_SPACE(src, i, len); - - if (*src != '=') - c += pos(*src++); - else - { - src += 1; /* There should be one byte padding */ - i= len; - mark= 1; - goto end; - } - i++; - - end: - b[0]= (c >> 16) & 0xff; - b[1]= (c >> 8) & 0xff; - b[2]= (c >> 0) & 0xff; - - for (j=0; j<3-mark; j++) - *d++= b[j]; - } - - if (end_ptr != NULL) - *end_ptr= src; - - /* - The variable 'i' is set to 'len' when padding has been read, so it - does not actually reflect the number of bytes read from 'src'. - */ - return i != len ? -1 : (int) (d - dst_base); -} - - -#else /* MAIN */ - -#define require(b) { \ - if (!(b)) { \ - printf("Require failed at %s:%d\n", __FILE__, __LINE__); \ - abort(); \ - } \ -} - - -int -main(void) -{ - int i; - size_t j; - size_t k, l; - size_t dst_len; - size_t needed_length; - - for (i= 0; i < 500; i++) - { - /* Create source data */ - const size_t src_len= rand() % 1000 + 1; - - char * src= (char *) malloc(src_len); - char * s= src; - char * str; - char * dst; - - require(src); - for (j= 0; jname; cs++) - add_compiled_collation(cs); - - return FALSE; -} diff --git a/deps/mysqllite/mysys/charset.c b/deps/mysqllite/mysys/charset.c deleted file mode 100644 index 167d6b8ff6e572..00000000000000 --- a/deps/mysqllite/mysys/charset.c +++ /dev/null @@ -1,937 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include -#include -#include -#include - - -/* - The code below implements this functionality: - - - Initializing charset related structures - - Loading dynamic charsets - - Searching for a proper CHARSET_INFO - using charset name, collation name or collation ID - - Setting server default character set -*/ - -my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2) -{ - return ((cs1 == cs2) || !strcmp(cs1->csname,cs2->csname)); -} - - -static uint -get_collation_number_internal(const char *name) -{ - CHARSET_INFO **cs; - for (cs= all_charsets; - cs < all_charsets + array_elements(all_charsets); - cs++) - { - if ( cs[0] && cs[0]->name && - !my_strcasecmp(&my_charset_latin1, cs[0]->name, name)) - return cs[0]->number; - } - return 0; -} - - -static my_bool init_state_maps(CHARSET_INFO *cs) -{ - uint i; - uchar *state_map; - uchar *ident_map; - - if (!(cs->state_map= (uchar*) my_once_alloc(256, MYF(MY_WME)))) - return 1; - - if (!(cs->ident_map= (uchar*) my_once_alloc(256, MYF(MY_WME)))) - return 1; - - state_map= cs->state_map; - ident_map= cs->ident_map; - - /* Fill state_map with states to get a faster parser */ - for (i=0; i < 256 ; i++) - { - if (my_isalpha(cs,i)) - state_map[i]=(uchar) MY_LEX_IDENT; - else if (my_isdigit(cs,i)) - state_map[i]=(uchar) MY_LEX_NUMBER_IDENT; -#if defined(USE_MB) && defined(USE_MB_IDENT) - else if (my_mbcharlen(cs, i)>1) - state_map[i]=(uchar) MY_LEX_IDENT; -#endif - else if (my_isspace(cs,i)) - state_map[i]=(uchar) MY_LEX_SKIP; - else - state_map[i]=(uchar) MY_LEX_CHAR; - } - state_map[(uchar)'_']=state_map[(uchar)'$']=(uchar) MY_LEX_IDENT; - state_map[(uchar)'\'']=(uchar) MY_LEX_STRING; - state_map[(uchar)'.']=(uchar) MY_LEX_REAL_OR_POINT; - state_map[(uchar)'>']=state_map[(uchar)'=']=state_map[(uchar)'!']= (uchar) MY_LEX_CMP_OP; - state_map[(uchar)'<']= (uchar) MY_LEX_LONG_CMP_OP; - state_map[(uchar)'&']=state_map[(uchar)'|']=(uchar) MY_LEX_BOOL; - state_map[(uchar)'#']=(uchar) MY_LEX_COMMENT; - state_map[(uchar)';']=(uchar) MY_LEX_SEMICOLON; - state_map[(uchar)':']=(uchar) MY_LEX_SET_VAR; - state_map[0]=(uchar) MY_LEX_EOL; - state_map[(uchar)'\\']= (uchar) MY_LEX_ESCAPE; - state_map[(uchar)'/']= (uchar) MY_LEX_LONG_COMMENT; - state_map[(uchar)'*']= (uchar) MY_LEX_END_LONG_COMMENT; - state_map[(uchar)'@']= (uchar) MY_LEX_USER_END; - state_map[(uchar) '`']= (uchar) MY_LEX_USER_VARIABLE_DELIMITER; - state_map[(uchar)'"']= (uchar) MY_LEX_STRING_OR_DELIMITER; - - /* - Create a second map to make it faster to find identifiers - */ - for (i=0; i < 256 ; i++) - { - ident_map[i]= (uchar) (state_map[i] == MY_LEX_IDENT || - state_map[i] == MY_LEX_NUMBER_IDENT); - } - - /* Special handling of hex and binary strings */ - state_map[(uchar)'x']= state_map[(uchar)'X']= (uchar) MY_LEX_IDENT_OR_HEX; - state_map[(uchar)'b']= state_map[(uchar)'B']= (uchar) MY_LEX_IDENT_OR_BIN; - state_map[(uchar)'n']= state_map[(uchar)'N']= (uchar) MY_LEX_IDENT_OR_NCHAR; - return 0; -} - - -static void simple_cs_init_functions(CHARSET_INFO *cs) -{ - if (cs->state & MY_CS_BINSORT) - cs->coll= &my_collation_8bit_bin_handler; - else - cs->coll= &my_collation_8bit_simple_ci_handler; - - cs->cset= &my_charset_8bit_handler; -} - - - -static int cs_copy_data(CHARSET_INFO *to, CHARSET_INFO *from) -{ - to->number= from->number ? from->number : to->number; - - if (from->csname) - if (!(to->csname= my_once_strdup(from->csname,MYF(MY_WME)))) - goto err; - - if (from->name) - if (!(to->name= my_once_strdup(from->name,MYF(MY_WME)))) - goto err; - - if (from->comment) - if (!(to->comment= my_once_strdup(from->comment,MYF(MY_WME)))) - goto err; - - if (from->ctype) - { - if (!(to->ctype= (uchar*) my_once_memdup((char*) from->ctype, - MY_CS_CTYPE_TABLE_SIZE, - MYF(MY_WME)))) - goto err; - if (init_state_maps(to)) - goto err; - } - if (from->to_lower) - if (!(to->to_lower= (uchar*) my_once_memdup((char*) from->to_lower, - MY_CS_TO_LOWER_TABLE_SIZE, - MYF(MY_WME)))) - goto err; - - if (from->to_upper) - if (!(to->to_upper= (uchar*) my_once_memdup((char*) from->to_upper, - MY_CS_TO_UPPER_TABLE_SIZE, - MYF(MY_WME)))) - goto err; - if (from->sort_order) - { - if (!(to->sort_order= (uchar*) my_once_memdup((char*) from->sort_order, - MY_CS_SORT_ORDER_TABLE_SIZE, - MYF(MY_WME)))) - goto err; - - } - if (from->tab_to_uni) - { - uint sz= MY_CS_TO_UNI_TABLE_SIZE*sizeof(uint16); - if (!(to->tab_to_uni= (uint16*) my_once_memdup((char*)from->tab_to_uni, - sz, MYF(MY_WME)))) - goto err; - } - if (from->tailoring) - if (!(to->tailoring= my_once_strdup(from->tailoring,MYF(MY_WME)))) - goto err; - - return 0; - -err: - return 1; -} - - - -static my_bool simple_cs_is_full(CHARSET_INFO *cs) -{ - return ((cs->csname && cs->tab_to_uni && cs->ctype && cs->to_upper && - cs->to_lower) && - (cs->number && cs->name && - (cs->sort_order || (cs->state & MY_CS_BINSORT) ))); -} - - -static void -copy_uca_collation(CHARSET_INFO *to, CHARSET_INFO *from) -{ - to->cset= from->cset; - to->coll= from->coll; - to->strxfrm_multiply= from->strxfrm_multiply; - to->min_sort_char= from->min_sort_char; - to->max_sort_char= from->max_sort_char; - to->mbminlen= from->mbminlen; - to->mbmaxlen= from->mbmaxlen; - to->state|= MY_CS_AVAILABLE | MY_CS_LOADED | - MY_CS_STRNXFRM | MY_CS_UNICODE; -} - - -static int add_collation(CHARSET_INFO *cs) -{ - if (cs->name && (cs->number || - (cs->number=get_collation_number_internal(cs->name))) && - cs->number < array_elements(all_charsets)) - { - if (!all_charsets[cs->number]) - { - if (!(all_charsets[cs->number]= - (CHARSET_INFO*) my_once_alloc(sizeof(CHARSET_INFO),MYF(0)))) - return MY_XML_ERROR; - bzero((void*)all_charsets[cs->number],sizeof(CHARSET_INFO)); - } - - if (cs->primary_number == cs->number) - cs->state |= MY_CS_PRIMARY; - - if (cs->binary_number == cs->number) - cs->state |= MY_CS_BINSORT; - - all_charsets[cs->number]->state|= cs->state; - - if (!(all_charsets[cs->number]->state & MY_CS_COMPILED)) - { - CHARSET_INFO *newcs= all_charsets[cs->number]; - if (cs_copy_data(all_charsets[cs->number],cs)) - return MY_XML_ERROR; - - newcs->caseup_multiply= newcs->casedn_multiply= 1; - - if (!strcmp(cs->csname,"ucs2") ) - { -#if defined(HAVE_CHARSET_ucs2) && defined(HAVE_UCA_COLLATIONS) - copy_uca_collation(newcs, &my_charset_ucs2_unicode_ci); - newcs->state|= MY_CS_AVAILABLE | MY_CS_LOADED | MY_CS_NONASCII; -#endif - } - else if (!strcmp(cs->csname, "utf8") || !strcmp(cs->csname, "utf8mb3")) - { -#if defined (HAVE_CHARSET_utf8) && defined(HAVE_UCA_COLLATIONS) - copy_uca_collation(newcs, &my_charset_utf8_unicode_ci); - newcs->ctype= my_charset_utf8_unicode_ci.ctype; - if (init_state_maps(newcs)) - return MY_XML_ERROR; -#endif - } - else if (!strcmp(cs->csname, "utf8mb4")) - { -#if defined (HAVE_CHARSET_utf8mb4) && defined(HAVE_UCA_COLLATIONS) - copy_uca_collation(newcs, &my_charset_utf8mb4_unicode_ci); - newcs->ctype= my_charset_utf8mb4_unicode_ci.ctype; - newcs->state|= MY_CS_AVAILABLE | MY_CS_LOADED; -#endif - } - else if (!strcmp(cs->csname, "utf16")) - { -#if defined (HAVE_CHARSET_utf16) && defined(HAVE_UCA_COLLATIONS) - copy_uca_collation(newcs, &my_charset_utf16_unicode_ci); - newcs->state|= MY_CS_AVAILABLE | MY_CS_LOADED | MY_CS_NONASCII; -#endif - } - else if (!strcmp(cs->csname, "utf32")) - { -#if defined (HAVE_CHARSET_utf32) && defined(HAVE_UCA_COLLATIONS) - copy_uca_collation(newcs, &my_charset_utf32_unicode_ci); - newcs->state|= MY_CS_AVAILABLE | MY_CS_LOADED | MY_CS_NONASCII; -#endif - } - else - { - uchar *sort_order= all_charsets[cs->number]->sort_order; - simple_cs_init_functions(all_charsets[cs->number]); - newcs->mbminlen= 1; - newcs->mbmaxlen= 1; - if (simple_cs_is_full(all_charsets[cs->number])) - { - all_charsets[cs->number]->state |= MY_CS_LOADED; - } - all_charsets[cs->number]->state|= MY_CS_AVAILABLE; - - /* - Check if case sensitive sort order: A < a < B. - We need MY_CS_FLAG for regex library, and for - case sensitivity flag for 5.0 client protocol, - to support isCaseSensitive() method in JDBC driver - */ - if (sort_order && sort_order['A'] < sort_order['a'] && - sort_order['a'] < sort_order['B']) - all_charsets[cs->number]->state|= MY_CS_CSSORT; - - if (my_charset_is_8bit_pure_ascii(all_charsets[cs->number])) - all_charsets[cs->number]->state|= MY_CS_PUREASCII; - if (!my_charset_is_ascii_compatible(cs)) - all_charsets[cs->number]->state|= MY_CS_NONASCII; - } - } - else - { - /* - We need the below to make get_charset_name() - and get_charset_number() working even if a - character set has not been really incompiled. - The above functions are used for example - in error message compiler extra/comp_err.c. - If a character set was compiled, this information - will get lost and overwritten in add_compiled_collation(). - */ - CHARSET_INFO *dst= all_charsets[cs->number]; - dst->number= cs->number; - if (cs->comment) - if (!(dst->comment= my_once_strdup(cs->comment,MYF(MY_WME)))) - return MY_XML_ERROR; - if (cs->csname) - if (!(dst->csname= my_once_strdup(cs->csname,MYF(MY_WME)))) - return MY_XML_ERROR; - if (cs->name) - if (!(dst->name= my_once_strdup(cs->name,MYF(MY_WME)))) - return MY_XML_ERROR; - } - cs->number= 0; - cs->primary_number= 0; - cs->binary_number= 0; - cs->name= NULL; - cs->state= 0; - cs->sort_order= NULL; - cs->state= 0; - } - return MY_XML_OK; -} - - -#define MY_MAX_ALLOWED_BUF 1024*1024 -#define MY_CHARSET_INDEX "Index.xml" - -const char *charsets_dir= NULL; - - -static my_bool my_read_charset_file(const char *filename, myf myflags) -{ - uchar *buf; - int fd; - size_t len, tmp_len; - MY_STAT stat_info; - - if (!my_stat(filename, &stat_info, MYF(myflags)) || - ((len= (uint)stat_info.st_size) > MY_MAX_ALLOWED_BUF) || - !(buf= (uchar*) my_malloc(len,myflags))) - return TRUE; - - if ((fd= mysql_file_open(key_file_charset, filename, O_RDONLY, myflags)) < 0) - goto error; - tmp_len= mysql_file_read(fd, buf, len, myflags); - mysql_file_close(fd, myflags); - if (tmp_len != len) - goto error; - - if (my_parse_charset_xml((char*) buf,len,add_collation)) - { -#ifdef NOT_YET - printf("ERROR at line %d pos %d '%s'\n", - my_xml_error_lineno(&p)+1, - my_xml_error_pos(&p), - my_xml_error_string(&p)); -#endif - } - - my_free(buf); - return FALSE; - -error: - my_free(buf); - return TRUE; -} - - -char *get_charsets_dir(char *buf) -{ - const char *sharedir= SHAREDIR; - char *res; - DBUG_ENTER("get_charsets_dir"); - - if (charsets_dir != NULL) - strmake(buf, charsets_dir, FN_REFLEN-1); - else - { - if (test_if_hard_path(sharedir) || - is_prefix(sharedir, DEFAULT_CHARSET_HOME)) - strxmov(buf, sharedir, "/", CHARSET_DIR, NullS); - else - strxmov(buf, DEFAULT_CHARSET_HOME, "/", sharedir, "/", CHARSET_DIR, - NullS); - } - res= convert_dirname(buf,buf,NullS); - DBUG_PRINT("info",("charsets dir: '%s'", buf)); - DBUG_RETURN(res); -} - -CHARSET_INFO *all_charsets[MY_ALL_CHARSETS_SIZE]={NULL}; -CHARSET_INFO *default_charset_info = &my_charset_latin1; - -void add_compiled_collation(CHARSET_INFO *cs) -{ - all_charsets[cs->number]= cs; - cs->state|= MY_CS_AVAILABLE; -} - -static void *cs_alloc(size_t size) -{ - return my_once_alloc(size, MYF(MY_WME)); -} - - -static my_pthread_once_t charsets_initialized= MY_PTHREAD_ONCE_INIT; -static my_pthread_once_t charsets_template= MY_PTHREAD_ONCE_INIT; - -static void init_available_charsets(void) -{ - char fname[FN_REFLEN + sizeof(MY_CHARSET_INDEX)]; - CHARSET_INFO **cs; - - bzero(&all_charsets,sizeof(all_charsets)); - init_compiled_charsets(MYF(0)); - - /* Copy compiled charsets */ - for (cs=all_charsets; - cs < all_charsets+array_elements(all_charsets)-1 ; - cs++) - { - if (*cs) - { - if (cs[0]->ctype) - if (init_state_maps(*cs)) - *cs= NULL; - } - } - - strmov(get_charsets_dir(fname), MY_CHARSET_INDEX); - my_read_charset_file(fname, MYF(0)); -} - - -void free_charsets(void) -{ - charsets_initialized= charsets_template; -} - - -static const char* -get_collation_name_alias(const char *name, char *buf, size_t bufsize) -{ - if (!strncasecmp(name, "utf8mb3_", 8)) - { - my_snprintf(buf, bufsize, "utf8_%s", name + 8); - return buf; - } - return NULL; -} - - -uint get_collation_number(const char *name) -{ - uint id; - char alias[64]; - my_pthread_once(&charsets_initialized, init_available_charsets); - if ((id= get_collation_number_internal(name))) - return id; - if ((name= get_collation_name_alias(name, alias, sizeof(alias)))) - return get_collation_number_internal(name); - return 0; -} - - -static uint -get_charset_number_internal(const char *charset_name, uint cs_flags) -{ - CHARSET_INFO **cs; - - for (cs= all_charsets; - cs < all_charsets + array_elements(all_charsets); - cs++) - { - if ( cs[0] && cs[0]->csname && (cs[0]->state & cs_flags) && - !my_strcasecmp(&my_charset_latin1, cs[0]->csname, charset_name)) - return cs[0]->number; - } - return 0; -} - - -static const char* -get_charset_name_alias(const char *name) -{ - if (!my_strcasecmp(&my_charset_latin1, name, "utf8mb3")) - return "utf8"; - return NULL; -} - - -uint get_charset_number(const char *charset_name, uint cs_flags) -{ - uint id; - my_pthread_once(&charsets_initialized, init_available_charsets); - if ((id= get_charset_number_internal(charset_name, cs_flags))) - return id; - if ((charset_name= get_charset_name_alias(charset_name))) - return get_charset_number_internal(charset_name, cs_flags); - return 0; -} - - -const char *get_charset_name(uint charset_number) -{ - CHARSET_INFO *cs; - my_pthread_once(&charsets_initialized, init_available_charsets); - - cs=all_charsets[charset_number]; - if (cs && (cs->number == charset_number) && cs->name ) - return (char*) cs->name; - - return (char*) "?"; /* this mimics find_type() */ -} - - -static CHARSET_INFO *get_internal_charset(uint cs_number, myf flags) -{ - char buf[FN_REFLEN]; - CHARSET_INFO *cs; - - if ((cs= all_charsets[cs_number])) - { - if (cs->state & MY_CS_READY) /* if CS is already initialized */ - return cs; - - /* - To make things thread safe we are not allowing other threads to interfere - while we may changing the cs_info_table - */ - mysql_mutex_lock(&THR_LOCK_charset); - - if (!(cs->state & (MY_CS_COMPILED|MY_CS_LOADED))) /* if CS is not in memory */ - { - strxmov(get_charsets_dir(buf), cs->csname, ".xml", NullS); - my_read_charset_file(buf,flags); - } - - if (cs->state & MY_CS_AVAILABLE) - { - if (!(cs->state & MY_CS_READY)) - { - if ((cs->cset->init && cs->cset->init(cs, cs_alloc)) || - (cs->coll->init && cs->coll->init(cs, cs_alloc))) - cs= NULL; - else - cs->state|= MY_CS_READY; - } - } - else - cs= NULL; - - mysql_mutex_unlock(&THR_LOCK_charset); - } - return cs; -} - - -CHARSET_INFO *get_charset(uint cs_number, myf flags) -{ - CHARSET_INFO *cs; - if (cs_number == default_charset_info->number) - return default_charset_info; - - my_pthread_once(&charsets_initialized, init_available_charsets); - - if (!cs_number || cs_number > array_elements(all_charsets)) - return NULL; - - cs=get_internal_charset(cs_number, flags); - - if (!cs && (flags & MY_WME)) - { - char index_file[FN_REFLEN + sizeof(MY_CHARSET_INDEX)], cs_string[23]; - strmov(get_charsets_dir(index_file),MY_CHARSET_INDEX); - cs_string[0]='#'; - int10_to_str(cs_number, cs_string+1, 10); - my_error(EE_UNKNOWN_CHARSET, MYF(ME_BELL), cs_string, index_file); - } - return cs; -} - -CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags) -{ - uint cs_number; - CHARSET_INFO *cs; - my_pthread_once(&charsets_initialized, init_available_charsets); - - cs_number=get_collation_number(cs_name); - cs= cs_number ? get_internal_charset(cs_number,flags) : NULL; - - if (!cs && (flags & MY_WME)) - { - char index_file[FN_REFLEN + sizeof(MY_CHARSET_INDEX)]; - strmov(get_charsets_dir(index_file),MY_CHARSET_INDEX); - my_error(EE_UNKNOWN_COLLATION, MYF(ME_BELL), cs_name, index_file); - } - - return cs; -} - - -CHARSET_INFO *get_charset_by_csname(const char *cs_name, - uint cs_flags, - myf flags) -{ - uint cs_number; - CHARSET_INFO *cs; - DBUG_ENTER("get_charset_by_csname"); - DBUG_PRINT("enter",("name: '%s'", cs_name)); - - my_pthread_once(&charsets_initialized, init_available_charsets); - - cs_number= get_charset_number(cs_name, cs_flags); - cs= cs_number ? get_internal_charset(cs_number, flags) : NULL; - - if (!cs && (flags & MY_WME)) - { - char index_file[FN_REFLEN + sizeof(MY_CHARSET_INDEX)]; - strmov(get_charsets_dir(index_file),MY_CHARSET_INDEX); - my_error(EE_UNKNOWN_CHARSET, MYF(ME_BELL), cs_name, index_file); - } - - DBUG_RETURN(cs); -} - - -/** - Resolve character set by the character set name (utf8, latin1, ...). - - The function tries to resolve character set by the specified name. If - there is character set with the given name, it is assigned to the "cs" - parameter and FALSE is returned. If there is no such character set, - "default_cs" is assigned to the "cs" and TRUE is returned. - - @param[in] cs_name Character set name. - @param[in] default_cs Default character set. - @param[out] cs Variable to store character set. - - @return FALSE if character set was resolved successfully; TRUE if there - is no character set with given name. -*/ - -my_bool resolve_charset(const char *cs_name, - CHARSET_INFO *default_cs, - CHARSET_INFO **cs) -{ - *cs= get_charset_by_csname(cs_name, MY_CS_PRIMARY, MYF(0)); - - if (*cs == NULL) - { - *cs= default_cs; - return TRUE; - } - - return FALSE; -} - - -/** - Resolve collation by the collation name (utf8_general_ci, ...). - - The function tries to resolve collation by the specified name. If there - is collation with the given name, it is assigned to the "cl" parameter - and FALSE is returned. If there is no such collation, "default_cl" is - assigned to the "cl" and TRUE is returned. - - @param[out] cl Variable to store collation. - @param[in] cl_name Collation name. - @param[in] default_cl Default collation. - - @return FALSE if collation was resolved successfully; TRUE if there is no - collation with given name. -*/ - -my_bool resolve_collation(const char *cl_name, - CHARSET_INFO *default_cl, - CHARSET_INFO **cl) -{ - *cl= get_charset_by_name(cl_name, MYF(0)); - - if (*cl == NULL) - { - *cl= default_cl; - return TRUE; - } - - return FALSE; -} - - -/* - Escape string with backslashes (\) - - SYNOPSIS - escape_string_for_mysql() - charset_info Charset of the strings - to Buffer for escaped string - to_length Length of destination buffer, or 0 - from The string to escape - length The length of the string to escape - - DESCRIPTION - This escapes the contents of a string by adding backslashes before special - characters, and turning others into specific escape sequences, such as - turning newlines into \n and null bytes into \0. - - NOTE - To maintain compatibility with the old C API, to_length may be 0 to mean - "big enough" - - RETURN VALUES - (size_t) -1 The escaped string did not fit in the to buffer - # The length of the escaped string -*/ - -size_t escape_string_for_mysql(CHARSET_INFO *charset_info, - char *to, size_t to_length, - const char *from, size_t length) -{ - const char *to_start= to; - const char *end, *to_end=to_start + (to_length ? to_length-1 : 2*length); - my_bool overflow= FALSE; -#ifdef USE_MB - my_bool use_mb_flag= use_mb(charset_info); -#endif - for (end= from + length; from < end; from++) - { - char escape= 0; -#ifdef USE_MB - int tmp_length; - if (use_mb_flag && (tmp_length= my_ismbchar(charset_info, from, end))) - { - if (to + tmp_length > to_end) - { - overflow= TRUE; - break; - } - while (tmp_length--) - *to++= *from++; - from--; - continue; - } - /* - If the next character appears to begin a multi-byte character, we - escape that first byte of that apparent multi-byte character. (The - character just looks like a multi-byte character -- if it were actually - a multi-byte character, it would have been passed through in the test - above.) - - Without this check, we can create a problem by converting an invalid - multi-byte character into a valid one. For example, 0xbf27 is not - a valid GBK character, but 0xbf5c is. (0x27 = ', 0x5c = \) - */ - if (use_mb_flag && (tmp_length= my_mbcharlen(charset_info, *from)) > 1) - escape= *from; - else -#endif - switch (*from) { - case 0: /* Must be escaped for 'mysql' */ - escape= '0'; - break; - case '\n': /* Must be escaped for logs */ - escape= 'n'; - break; - case '\r': - escape= 'r'; - break; - case '\\': - escape= '\\'; - break; - case '\'': - escape= '\''; - break; - case '"': /* Better safe than sorry */ - escape= '"'; - break; - case '\032': /* This gives problems on Win32 */ - escape= 'Z'; - break; - } - if (escape) - { - if (to + 2 > to_end) - { - overflow= TRUE; - break; - } - *to++= '\\'; - *to++= escape; - } - else - { - if (to + 1 > to_end) - { - overflow= TRUE; - break; - } - *to++= *from; - } - } - *to= 0; - return overflow ? (size_t) -1 : (size_t) (to - to_start); -} - - -#ifdef BACKSLASH_MBTAIL -static CHARSET_INFO *fs_cset_cache= NULL; - -CHARSET_INFO *fs_character_set() -{ - if (!fs_cset_cache) - { - char buf[10]= "cp"; - GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE, - buf+2, sizeof(buf)-3); - /* - We cannot call get_charset_by_name here - because fs_character_set() is executed before - LOCK_THD_charset mutex initialization, which - is used inside get_charset_by_name. - As we're now interested in cp932 only, - let's just detect it using strcmp(). - */ - fs_cset_cache= !strcmp(buf, "cp932") ? - &my_charset_cp932_japanese_ci : &my_charset_bin; - } - return fs_cset_cache; -} -#endif - -/* - Escape apostrophes by doubling them up - - SYNOPSIS - escape_quotes_for_mysql() - charset_info Charset of the strings - to Buffer for escaped string - to_length Length of destination buffer, or 0 - from The string to escape - length The length of the string to escape - - DESCRIPTION - This escapes the contents of a string by doubling up any apostrophes that - it contains. This is used when the NO_BACKSLASH_ESCAPES SQL_MODE is in - effect on the server. - - NOTE - To be consistent with escape_string_for_mysql(), to_length may be 0 to - mean "big enough" - - RETURN VALUES - ~0 The escaped string did not fit in the to buffer - >=0 The length of the escaped string -*/ - -size_t escape_quotes_for_mysql(CHARSET_INFO *charset_info, - char *to, size_t to_length, - const char *from, size_t length) -{ - const char *to_start= to; - const char *end, *to_end=to_start + (to_length ? to_length-1 : 2*length); - my_bool overflow= FALSE; -#ifdef USE_MB - my_bool use_mb_flag= use_mb(charset_info); -#endif - for (end= from + length; from < end; from++) - { -#ifdef USE_MB - int tmp_length; - if (use_mb_flag && (tmp_length= my_ismbchar(charset_info, from, end))) - { - if (to + tmp_length > to_end) - { - overflow= TRUE; - break; - } - while (tmp_length--) - *to++= *from++; - from--; - continue; - } - /* - We don't have the same issue here with a non-multi-byte character being - turned into a multi-byte character by the addition of an escaping - character, because we are only escaping the ' character with itself. - */ -#endif - if (*from == '\'') - { - if (to + 2 > to_end) - { - overflow= TRUE; - break; - } - *to++= '\''; - *to++= '\''; - } - else - { - if (to + 1 > to_end) - { - overflow= TRUE; - break; - } - *to++= *from; - } - } - *to= 0; - return overflow ? (ulong)~0 : (ulong) (to - to_start); -} diff --git a/deps/mysqllite/mysys/checksum.c b/deps/mysqllite/mysys/checksum.c deleted file mode 100644 index a96ea31ea0eae6..00000000000000 --- a/deps/mysqllite/mysys/checksum.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include -#include -#include - -/* - Calculate a long checksum for a memoryblock. - - SYNOPSIS - my_checksum() - crc start value for crc - pos pointer to memory block - length length of the block -*/ - -ha_checksum my_checksum(ha_checksum crc, const uchar *pos, size_t length) -{ - return (ha_checksum)crc32((uint)crc, pos, (uint)length); -} - diff --git a/deps/mysqllite/mysys/default.c b/deps/mysqllite/mysys/default.c deleted file mode 100644 index 75eb4709e1e219..00000000000000 --- a/deps/mysqllite/mysys/default.c +++ /dev/null @@ -1,1217 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/**************************************************************************** - Add all options from files named "group".cnf from the default_directories - before the command line arguments. - On Windows defaults will also search in the Windows directory for a file - called 'group'.ini - As long as the program uses the last argument for conflicting - options one only have to add a call to "load_defaults" to enable - use of default values. - pre- and end 'blank space' are removed from options and values. The - following escape sequences are recognized in values: \b \t \n \r \\ - - The following arguments are handled automaticly; If used, they must be - first argument on the command line! - --no-defaults ; no options are read. - --defaults-file=full-path-to-default-file ; Only this file will be read. - --defaults-extra-file=full-path-to-default-file ; Read this file before ~/ - --defaults-group-suffix ; Also read groups with concat(group, suffix) - --print-defaults ; Print the modified command line and exit -****************************************************************************/ - -#include "mysys_priv.h" -#include "m_string.h" -#include "m_ctype.h" -#include -#ifdef __WIN__ -#include -#endif - -/** - arguments separator - - load_defaults() loads arguments from config file and put them - before the arguments from command line, this separator is used to - separate the arguments loaded from config file and arguments user - provided on command line. - - Options with value loaded from config file are always in the form - '--option=value', while for command line options, the value can be - given as the next argument. Thus we used a separator so that - handle_options() can distinguish them. - - Note: any other places that does not need to distinguish them - should skip the separator. - - The content of arguments separator does not matter, one should only - check the pointer, use "----args-separator----" here to ease debug - if someone misused it. - - See BUG#25192 -*/ -const char *args_separator= "----args-separator----"; -const char *my_defaults_file=0; -const char *my_defaults_group_suffix=0; -const char *my_defaults_extra_file=0; - -static char my_defaults_file_buffer[FN_REFLEN]; -static char my_defaults_extra_file_buffer[FN_REFLEN]; - -static my_bool defaults_already_read= FALSE; - -/* Which directories are searched for options (and in which order) */ - -#define MAX_DEFAULT_DIRS 6 -#define DEFAULT_DIRS_SIZE (MAX_DEFAULT_DIRS + 1) /* Terminate with NULL */ -static const char **default_directories = NULL; - -#ifdef __WIN__ -static const char *f_extensions[]= { ".ini", ".cnf", 0 }; -#define NEWLINE "\r\n" -#else -static const char *f_extensions[]= { ".cnf", 0 }; -#define NEWLINE "\n" -#endif - -static int handle_default_option(void *in_ctx, const char *group_name, - const char *option); - -/* - This structure defines the context that we pass to callback - function 'handle_default_option' used in search_default_file - to process each option. This context is used if search_default_file - was called from load_defaults. -*/ - -struct handle_option_ctx -{ - MEM_ROOT *alloc; - DYNAMIC_ARRAY *args; - TYPELIB *group; -}; - -static int search_default_file(Process_option_func func, void *func_ctx, - const char *dir, const char *config_file); -static int search_default_file_with_ext(Process_option_func func, - void *func_ctx, - const char *dir, const char *ext, - const char *config_file, int recursion_level); - - -/** - Create the list of default directories. - - @param alloc MEM_ROOT where the list of directories is stored - - @details - The directories searched, in order, are: - - Windows: GetSystemWindowsDirectory() - - Windows: GetWindowsDirectory() - - Windows: C:/ - - Windows: Directory above where the executable is located - - Unix: /etc/ - - Unix: /etc/mysql/ - - Unix: --sysconfdir= (compile-time option) - - ALL: getenv(DEFAULT_HOME_ENV) - - ALL: --defaults-extra-file= (run-time option) - - Unix: ~/ - - On all systems, if a directory is already in the list, it will be moved - to the end of the list. This avoids reading defaults files multiple times, - while ensuring the correct precedence. - - @retval NULL Failure (out of memory, probably) - @retval other Pointer to NULL-terminated array of default directories -*/ - -static const char **init_default_directories(MEM_ROOT *alloc); - - -static char *remove_end_comment(char *ptr); - - -/* - Expand a file name so that the current working directory is added if - the name is relative. - - RETURNS - 0 All OK - 2 Out of memory or path to long - 3 Not able to get working directory - */ - -static int -fn_expand(const char *filename, char *result_buf) -{ - char dir[FN_REFLEN]; - const int flags= MY_UNPACK_FILENAME | MY_SAFE_PATH | MY_RELATIVE_PATH; - DBUG_ENTER("fn_expand"); - DBUG_PRINT("enter", ("filename: %s, result_buf: 0x%lx", - filename, (unsigned long) result_buf)); - if (my_getwd(dir, sizeof(dir), MYF(0))) - DBUG_RETURN(3); - DBUG_PRINT("debug", ("dir: %s", dir)); - if (fn_format(result_buf, filename, dir, NULL, flags) == NULL) - DBUG_RETURN(2); - DBUG_PRINT("return", ("result: %s", result_buf)); - DBUG_RETURN(0); -} - -/* - Process config files in default directories. - - SYNOPSIS - my_search_option_files() - conf_file Basename for configuration file to search for. - If this is a path, then only this file is read. - argc Pointer to argc of original program - argv Pointer to argv of original program - args_used Pointer to variable for storing the number of - arguments used. - func Pointer to the function to process options - func_ctx It's context. Usually it is the structure to - store additional options. - DESCRIPTION - Process the default options from argc & argv - Read through each found config file looks and calls 'func' to process - each option. - - NOTES - --defaults-group-suffix is only processed if we are called from - load_defaults(). - - - RETURN - 0 ok - 1 given cinf_file doesn't exist - 2 out of memory - 3 Can't get current working directory - - The global variable 'my_defaults_group_suffix' is updated with value for - --defaults_group_suffix -*/ - -int my_search_option_files(const char *conf_file, int *argc, char ***argv, - uint *args_used, Process_option_func func, - void *func_ctx, const char **default_directories) -{ - const char **dirs, *forced_default_file, *forced_extra_defaults; - int error= 0; - DBUG_ENTER("my_search_option_files"); - - /* Check if we want to force the use a specific default file */ - *args_used+= get_defaults_options(*argc - *args_used, *argv + *args_used, - (char **) &forced_default_file, - (char **) &forced_extra_defaults, - (char **) &my_defaults_group_suffix); - - if (! my_defaults_group_suffix) - my_defaults_group_suffix= getenv(STRINGIFY_ARG(DEFAULT_GROUP_SUFFIX_ENV)); - - if (forced_extra_defaults && !defaults_already_read) - { - int error= fn_expand(forced_extra_defaults, my_defaults_extra_file_buffer); - if (error) - DBUG_RETURN(error); - my_defaults_extra_file= my_defaults_extra_file_buffer; - } - - if (forced_default_file && !defaults_already_read) - { - int error= fn_expand(forced_default_file, my_defaults_file_buffer); - if (error) - DBUG_RETURN(error); - my_defaults_file= my_defaults_file_buffer; - } - - defaults_already_read= TRUE; - - /* - We can only handle 'defaults-group-suffix' if we are called from - load_defaults() as otherwise we can't know the type of 'func_ctx' - */ - - if (my_defaults_group_suffix && func == handle_default_option) - { - /* Handle --defaults-group-suffix= */ - uint i; - const char **extra_groups; - const size_t instance_len= strlen(my_defaults_group_suffix); - struct handle_option_ctx *ctx= (struct handle_option_ctx*) func_ctx; - char *ptr; - TYPELIB *group= ctx->group; - - if (!(extra_groups= - (const char**)alloc_root(ctx->alloc, - (2*group->count+1)*sizeof(char*)))) - DBUG_RETURN(2); - - for (i= 0; i < group->count; i++) - { - size_t len; - extra_groups[i]= group->type_names[i]; /** copy group */ - - len= strlen(extra_groups[i]); - if (!(ptr= alloc_root(ctx->alloc, (uint) (len+instance_len+1)))) - DBUG_RETURN(2); - - extra_groups[i+group->count]= ptr; - - /** Construct new group */ - memcpy(ptr, extra_groups[i], len); - memcpy(ptr+len, my_defaults_group_suffix, instance_len+1); - } - - group->count*= 2; - group->type_names= extra_groups; - group->type_names[group->count]= 0; - } - - if (my_defaults_file) - { - if ((error= search_default_file_with_ext(func, func_ctx, "", "", - my_defaults_file, 0)) < 0) - goto err; - if (error > 0) - { - fprintf(stderr, "Could not open required defaults file: %s\n", - my_defaults_file); - goto err; - } - } - else if (dirname_length(conf_file)) - { - if ((error= search_default_file(func, func_ctx, NullS, conf_file)) < 0) - goto err; - } - else - { - for (dirs= default_directories ; *dirs; dirs++) - { - if (**dirs) - { - if (search_default_file(func, func_ctx, *dirs, conf_file) < 0) - goto err; - } - else if (my_defaults_extra_file) - { - if ((error= search_default_file_with_ext(func, func_ctx, "", "", - my_defaults_extra_file, 0)) < 0) - goto err; /* Fatal error */ - if (error > 0) - { - fprintf(stderr, "Could not open required defaults file: %s\n", - my_defaults_extra_file); - goto err; - } - } - } - } - - DBUG_RETURN(0); - -err: - fprintf(stderr,"Fatal error in defaults handling. Program aborted\n"); - DBUG_RETURN(1); -} - - -/* - The option handler for load_defaults. - - SYNOPSIS - handle_deault_option() - in_ctx Handler context. In this case it is a - handle_option_ctx structure. - group_name The name of the group the option belongs to. - option The very option to be processed. It is already - prepared to be used in argv (has -- prefix). If it - is NULL, we are handling a new group (section). - - DESCRIPTION - This handler checks whether a group is one of the listed and adds an option - to the array if yes. Some other handler can record, for instance, all - groups and their options, not knowing in advance the names and amount of - groups. - - RETURN - 0 - ok - 1 - error occured -*/ - -static int handle_default_option(void *in_ctx, const char *group_name, - const char *option) -{ - char *tmp; - struct handle_option_ctx *ctx= (struct handle_option_ctx *) in_ctx; - - if (!option) - return 0; - - if (find_type((char *)group_name, ctx->group, 3)) - { - if (!(tmp= alloc_root(ctx->alloc, strlen(option) + 1))) - return 1; - if (insert_dynamic(ctx->args, (uchar*) &tmp)) - return 1; - strmov(tmp, option); - } - - return 0; -} - - -/* - Gets options from the command line - - SYNOPSIS - get_defaults_options() - argc Pointer to argc of original program - argv Pointer to argv of original program - defaults --defaults-file option - extra_defaults --defaults-extra-file option - - RETURN - # Number of arguments used from *argv - defaults and extra_defaults will be set to option of the appropriate - items of argv array, or to NULL if there are no such options -*/ - -int get_defaults_options(int argc, char **argv, - char **defaults, - char **extra_defaults, - char **group_suffix) -{ - int org_argc= argc, prev_argc= 0; - *defaults= *extra_defaults= *group_suffix= 0; - - while (argc >= 2 && argc != prev_argc) - { - /* Skip program name or previously handled argument */ - argv++; - prev_argc= argc; /* To check if we found */ - if (!*defaults && is_prefix(*argv,"--defaults-file=")) - { - *defaults= *argv + sizeof("--defaults-file=")-1; - argc--; - continue; - } - if (!*extra_defaults && is_prefix(*argv,"--defaults-extra-file=")) - { - *extra_defaults= *argv + sizeof("--defaults-extra-file=")-1; - argc--; - continue; - } - if (!*group_suffix && is_prefix(*argv, "--defaults-group-suffix=")) - { - *group_suffix= *argv + sizeof("--defaults-group-suffix=")-1; - argc--; - continue; - } - } - return org_argc - argc; -} - -/* - Wrapper around my_load_defaults() for interface compatibility. - - SYNOPSIS - load_defaults() - conf_file Basename for configuration file to search for. - If this is a path, then only this file is read. - groups Which [group] entrys to read. - Points to an null terminated array of pointers - argc Pointer to argc of original program - argv Pointer to argv of original program - - NOTES - - This function is NOT thread-safe as it uses a global pointer internally. - See also notes for my_load_defaults(). - - RETURN - 0 ok - 1 The given conf_file didn't exists -*/ -int load_defaults(const char *conf_file, const char **groups, - int *argc, char ***argv) -{ - return my_load_defaults(conf_file, groups, argc, argv, &default_directories); -} - -/* - Read options from configurations files - - SYNOPSIS - my_load_defaults() - conf_file Basename for configuration file to search for. - If this is a path, then only this file is read. - groups Which [group] entrys to read. - Points to an null terminated array of pointers - argc Pointer to argc of original program - argv Pointer to argv of original program - default_directories Pointer to a location where a pointer to the list - of default directories will be stored - - IMPLEMENTATION - - Read options from configuration files and put them BEFORE the arguments - that are already in argc and argv. This way the calling program can - easily command line options override options in configuration files - - NOTES - In case of fatal error, the function will print a warning and do - exit(1) - - To free used memory one should call free_defaults() with the argument - that was put in *argv - - RETURN - - If successful, 0 is returned. If 'default_directories' is not NULL, - a pointer to the array of default directory paths is stored to a location - it points to. That stored value must be passed to my_search_option_files() - later. - - - 1 is returned if the given conf_file didn't exist. In this case, the - value pointed to by default_directories is undefined. -*/ - - -int my_load_defaults(const char *conf_file, const char **groups, - int *argc, char ***argv, const char ***default_directories) -{ - DYNAMIC_ARRAY args; - TYPELIB group; - my_bool found_print_defaults= 0; - uint args_used= 0; - int error= 0; - MEM_ROOT alloc; - char *ptr,**res; - struct handle_option_ctx ctx; - const char **dirs; - DBUG_ENTER("load_defaults"); - - init_alloc_root(&alloc,512,0); - if ((dirs= init_default_directories(&alloc)) == NULL) - goto err; - /* - Check if the user doesn't want any default option processing - --no-defaults is always the first option - */ - if (*argc >= 2 && !strcmp(argv[0][1],"--no-defaults")) - { - /* remove the --no-defaults argument and return only the other arguments */ - uint i; - if (!(ptr=(char*) alloc_root(&alloc,sizeof(alloc)+ - (*argc + 1)*sizeof(char*)))) - goto err; - res= (char**) (ptr+sizeof(alloc)); - res[0]= **argv; /* Copy program name */ - /* set arguments separator */ - res[1]= (char *)args_separator; - for (i=2 ; i < (uint) *argc ; i++) - res[i]=argv[0][i]; - res[i]=0; /* End pointer */ - *argv=res; - *(MEM_ROOT*) ptr= alloc; /* Save alloc root for free */ - if (default_directories) - *default_directories= dirs; - DBUG_RETURN(0); - } - - group.count=0; - group.name= "defaults"; - group.type_names= groups; - - for (; *groups ; groups++) - group.count++; - - if (my_init_dynamic_array(&args, sizeof(char*),*argc, 32)) - goto err; - - ctx.alloc= &alloc; - ctx.args= &args; - ctx.group= &group; - - if ((error= my_search_option_files(conf_file, argc, argv, &args_used, - handle_default_option, (void *) &ctx, - dirs))) - { - free_root(&alloc,MYF(0)); - DBUG_RETURN(error); - } - /* - Here error contains <> 0 only if we have a fully specified conf_file - or a forced default file - */ - if (!(ptr=(char*) alloc_root(&alloc,sizeof(alloc)+ - (args.elements + *argc + 1 + 1) *sizeof(char*)))) - goto err; - res= (char**) (ptr+sizeof(alloc)); - - /* copy name + found arguments + command line arguments to new array */ - res[0]= argv[0][0]; /* Name MUST be set, even by embedded library */ - memcpy((uchar*) (res+1), args.buffer, args.elements*sizeof(char*)); - /* Skip --defaults-xxx options */ - (*argc)-= args_used; - (*argv)+= args_used; - - /* - Check if we wan't to see the new argument list - This options must always be the last of the default options - */ - if (*argc >= 2 && !strcmp(argv[0][1],"--print-defaults")) - { - found_print_defaults=1; - --*argc; ++*argv; /* skip argument */ - } - - /* set arguments separator for arguments from config file and - command line */ - res[args.elements+1]= (char *)args_separator; - - if (*argc) - memcpy((uchar*) (res+1+args.elements+1), (char*) ((*argv)+1), - (*argc-1)*sizeof(char*)); - res[args.elements+ *argc+1]=0; /* last null */ - - (*argc)+=args.elements+1; - *argv= (char**) res; - *(MEM_ROOT*) ptr= alloc; /* Save alloc root for free */ - delete_dynamic(&args); - if (found_print_defaults) - { - int i; - printf("%s would have been started with the following arguments:\n", - **argv); - for (i=1 ; i < *argc ; i++) - if ((*argv)[i] != args_separator) /* skip arguments separator */ - printf("%s ", (*argv)[i]); - puts(""); - exit(0); - } - - if (default_directories) - *default_directories= dirs; - - DBUG_RETURN(0); - - err: - fprintf(stderr,"Fatal error in defaults handling. Program aborted\n"); - exit(1); - return 0; /* Keep compiler happy */ -} - - -void free_defaults(char **argv) -{ - MEM_ROOT ptr; - memcpy(&ptr, ((char *) argv) - sizeof(ptr), sizeof(ptr)); - free_root(&ptr,MYF(0)); -} - - -static int search_default_file(Process_option_func opt_handler, - void *handler_ctx, - const char *dir, - const char *config_file) -{ - char **ext; - const char *empty_list[]= { "", 0 }; - my_bool have_ext= fn_ext(config_file)[0] != 0; - const char **exts_to_use= have_ext ? empty_list : f_extensions; - - for (ext= (char**) exts_to_use; *ext; ext++) - { - int error; - if ((error= search_default_file_with_ext(opt_handler, handler_ctx, - dir, *ext, - config_file, 0)) < 0) - return error; - } - return 0; -} - - -/* - Skip over keyword and get argument after keyword - - SYNOPSIS - get_argument() - keyword Include directive keyword - kwlen Length of keyword - ptr Pointer to the keword in the line under process - line line number - - RETURN - 0 error - # Returns pointer to the argument after the keyword. -*/ - -static char *get_argument(const char *keyword, size_t kwlen, - char *ptr, char *name, uint line) -{ - char *end; - - /* Skip over "include / includedir keyword" and following whitespace */ - - for (ptr+= kwlen - 1; - my_isspace(&my_charset_latin1, ptr[0]); - ptr++) - {} - - /* - Trim trailing whitespace from directory name - The -1 below is for the newline added by fgets() - Note that my_isspace() is true for \r and \n - */ - for (end= ptr + strlen(ptr) - 1; - my_isspace(&my_charset_latin1, *(end - 1)); - end--) - {} - end[0]= 0; /* Cut off end space */ - - /* Print error msg if there is nothing after !include* directive */ - if (end <= ptr) - { - fprintf(stderr, - "error: Wrong '!%s' directive in config file: %s at line %d\n", - keyword, name, line); - return 0; - } - return ptr; -} - - -/* - Open a configuration file (if exists) and read given options from it - - SYNOPSIS - search_default_file_with_ext() - opt_handler Option handler function. It is used to process - every separate option. - handler_ctx Pointer to the structure to store actual - parameters of the function. - dir directory to read - ext Extension for configuration file - config_file Name of configuration file - group groups to read - recursion_level the level of recursion, got while processing - "!include" or "!includedir" - - RETURN - 0 Success - -1 Fatal error, abort - 1 File not found (Warning) -*/ - -static int search_default_file_with_ext(Process_option_func opt_handler, - void *handler_ctx, - const char *dir, - const char *ext, - const char *config_file, - int recursion_level) -{ - char name[FN_REFLEN + 10], buff[4096], curr_gr[4096], *ptr, *end, **tmp_ext; - char *value, option[4096+2], tmp[FN_REFLEN]; - static const char includedir_keyword[]= "includedir"; - static const char include_keyword[]= "include"; - const int max_recursion_level= 10; - MYSQL_FILE *fp; - uint line=0; - my_bool found_group=0; - uint i; - MY_DIR *search_dir; - FILEINFO *search_file; - - if ((dir ? strlen(dir) : 0 )+strlen(config_file) >= FN_REFLEN-3) - return 0; /* Ignore wrong paths */ - if (dir) - { - end=convert_dirname(name, dir, NullS); - if (dir[0] == FN_HOMELIB) /* Add . to filenames in home */ - *end++='.'; - strxmov(end,config_file,ext,NullS); - } - else - { - strmov(name,config_file); - } - fn_format(name,name,"","",4); -#if !defined(__WIN__) - { - MY_STAT stat_info; - if (!my_stat(name,&stat_info,MYF(0))) - return 1; - /* - Ignore world-writable regular files. - This is mainly done to protect us to not read a file created by - the mysqld server, but the check is still valid in most context. - */ - if ((stat_info.st_mode & S_IWOTH) && - (stat_info.st_mode & S_IFMT) == S_IFREG) - { - fprintf(stderr, "Warning: World-writable config file '%s' is ignored\n", - name); - return 0; - } - } -#endif - if (!(fp= mysql_file_fopen(key_file_cnf, name, O_RDONLY, MYF(0)))) - return 1; /* Ignore wrong files */ - - while (mysql_file_fgets(buff, sizeof(buff) - 1, fp)) - { - line++; - /* Ignore comment and empty lines */ - for (ptr= buff; my_isspace(&my_charset_latin1, *ptr); ptr++) - {} - - if (*ptr == '#' || *ptr == ';' || !*ptr) - continue; - - /* Configuration File Directives */ - if ((*ptr == '!')) - { - if (recursion_level >= max_recursion_level) - { - for (end= ptr + strlen(ptr) - 1; - my_isspace(&my_charset_latin1, *(end - 1)); - end--) - {} - end[0]= 0; - fprintf(stderr, - "Warning: skipping '%s' directive as maximum include" - "recursion level was reached in file %s at line %d\n", - ptr, name, line); - continue; - } - - /* skip over `!' and following whitespace */ - for (++ptr; my_isspace(&my_charset_latin1, ptr[0]); ptr++) - {} - - if ((!strncmp(ptr, includedir_keyword, - sizeof(includedir_keyword) - 1)) && - my_isspace(&my_charset_latin1, ptr[sizeof(includedir_keyword) - 1])) - { - if (!(ptr= get_argument(includedir_keyword, - sizeof(includedir_keyword), - ptr, name, line))) - goto err; - - if (!(search_dir= my_dir(ptr, MYF(MY_WME)))) - goto err; - - for (i= 0; i < (uint) search_dir->number_off_files; i++) - { - search_file= search_dir->dir_entry + i; - ext= fn_ext(search_file->name); - - /* check extension */ - for (tmp_ext= (char**) f_extensions; *tmp_ext; tmp_ext++) - { - if (!strcmp(ext, *tmp_ext)) - break; - } - - if (*tmp_ext) - { - fn_format(tmp, search_file->name, ptr, "", - MY_UNPACK_FILENAME | MY_SAFE_PATH); - - search_default_file_with_ext(opt_handler, handler_ctx, "", "", tmp, - recursion_level + 1); - } - } - - my_dirend(search_dir); - } - else if ((!strncmp(ptr, include_keyword, sizeof(include_keyword) - 1)) && - my_isspace(&my_charset_latin1, ptr[sizeof(include_keyword)-1])) - { - if (!(ptr= get_argument(include_keyword, - sizeof(include_keyword), ptr, - name, line))) - goto err; - - search_default_file_with_ext(opt_handler, handler_ctx, "", "", ptr, - recursion_level + 1); - } - - continue; - } - - if (*ptr == '[') /* Group name */ - { - found_group=1; - if (!(end=(char *) strchr(++ptr,']'))) - { - fprintf(stderr, - "error: Wrong group definition in config file: %s at line %d\n", - name,line); - goto err; - } - /* Remove end space */ - for ( ; my_isspace(&my_charset_latin1,end[-1]) ; end--) ; - end[0]=0; - - strmake(curr_gr, ptr, min((size_t) (end-ptr)+1, sizeof(curr_gr)-1)); - - /* signal that a new group is found */ - opt_handler(handler_ctx, curr_gr, NULL); - - continue; - } - if (!found_group) - { - fprintf(stderr, - "error: Found option without preceding group in config file: %s at line: %d\n", - name,line); - goto err; - } - - - end= remove_end_comment(ptr); - if ((value= strchr(ptr, '='))) - end= value; /* Option without argument */ - for ( ; my_isspace(&my_charset_latin1,end[-1]) ; end--) ; - if (!value) - { - strmake(strmov(option,"--"),ptr, (size_t) (end-ptr)); - if (opt_handler(handler_ctx, curr_gr, option)) - goto err; - } - else - { - /* Remove pre- and end space */ - char *value_end; - for (value++ ; my_isspace(&my_charset_latin1,*value); value++) ; - value_end=strend(value); - /* - We don't have to test for value_end >= value as we know there is - an '=' before - */ - for ( ; my_isspace(&my_charset_latin1,value_end[-1]) ; value_end--) ; - if (value_end < value) /* Empty string */ - value_end=value; - - /* remove quotes around argument */ - if ((*value == '\"' || *value == '\'') && /* First char is quote */ - (value + 1 < value_end ) && /* String is longer than 1 */ - *value == value_end[-1] ) /* First char is equal to last char */ - { - value++; - value_end--; - } - ptr=strnmov(strmov(option,"--"),ptr,(size_t) (end-ptr)); - *ptr++= '='; - - for ( ; value != value_end; value++) - { - if (*value == '\\' && value != value_end-1) - { - switch(*++value) { - case 'n': - *ptr++='\n'; - break; - case 't': - *ptr++= '\t'; - break; - case 'r': - *ptr++ = '\r'; - break; - case 'b': - *ptr++ = '\b'; - break; - case 's': - *ptr++= ' '; /* space */ - break; - case '\"': - *ptr++= '\"'; - break; - case '\'': - *ptr++= '\''; - break; - case '\\': - *ptr++= '\\'; - break; - default: /* Unknown; Keep '\' */ - *ptr++= '\\'; - *ptr++= *value; - break; - } - } - else - *ptr++= *value; - } - *ptr=0; - if (opt_handler(handler_ctx, curr_gr, option)) - goto err; - } - } - mysql_file_fclose(fp, MYF(0)); - return(0); - - err: - mysql_file_fclose(fp, MYF(0)); - return -1; /* Fatal error */ -} - - -static char *remove_end_comment(char *ptr) -{ - char quote= 0; /* we are inside quote marks */ - char escape= 0; /* symbol is protected by escape chagacter */ - - for (; *ptr; ptr++) - { - if ((*ptr == '\'' || *ptr == '\"') && !escape) - { - if (!quote) - quote= *ptr; - else if (quote == *ptr) - quote= 0; - } - /* We are not inside a string */ - if (!quote && *ptr == '#') - { - *ptr= 0; - return ptr; - } - escape= (quote && *ptr == '\\' && !escape); - } - return ptr; -} - - -void my_print_default_files(const char *conf_file) -{ - const char *empty_list[]= { "", 0 }; - my_bool have_ext= fn_ext(conf_file)[0] != 0; - const char **exts_to_use= have_ext ? empty_list : f_extensions; - char name[FN_REFLEN], **ext; - - puts("\nDefault options are read from the following files in the given order:"); - - if (dirname_length(conf_file)) - fputs(conf_file,stdout); - else - { - const char **dirs; - MEM_ROOT alloc; - init_alloc_root(&alloc,512,0); - - if ((dirs= init_default_directories(&alloc)) == NULL) - { - fputs("Internal error initializing default directories list", stdout); - } - else - { - for ( ; *dirs; dirs++) - { - for (ext= (char**) exts_to_use; *ext; ext++) - { - const char *pos; - char *end; - if (**dirs) - pos= *dirs; - else if (my_defaults_extra_file) - pos= my_defaults_extra_file; - else - continue; - end= convert_dirname(name, pos, NullS); - if (name[0] == FN_HOMELIB) /* Add . to filenames in home */ - *end++= '.'; - strxmov(end, conf_file, *ext, " ", NullS); - fputs(name, stdout); - } - } - } - - free_root(&alloc, MYF(0)); - } - puts(""); -} - -void print_defaults(const char *conf_file, const char **groups) -{ - const char **groups_save= groups; - my_print_default_files(conf_file); - - fputs("The following groups are read:",stdout); - for ( ; *groups ; groups++) - { - fputc(' ',stdout); - fputs(*groups,stdout); - } - - if (my_defaults_group_suffix) - { - groups= groups_save; - for ( ; *groups ; groups++) - { - fputc(' ',stdout); - fputs(*groups,stdout); - fputs(my_defaults_group_suffix,stdout); - } - } - puts("\nThe following options may be given as the first argument:\n\ ---print-defaults Print the program argument list and exit.\n\ ---no-defaults Don't read default options from any option file.\n\ ---defaults-file=# Only read default options from the given file #.\n\ ---defaults-extra-file=# Read this file after the global files are read."); -} - - -static int add_directory(MEM_ROOT *alloc, const char *dir, const char **dirs) -{ - char buf[FN_REFLEN]; - size_t len; - char *p; - my_bool err __attribute__((unused)); - - len= normalize_dirname(buf, dir); - if (!(p= strmake_root(alloc, buf, len))) - return 1; /* Failure */ - /* Should never fail if DEFAULT_DIRS_SIZE is correct size */ - err= array_append_string_unique(p, dirs, DEFAULT_DIRS_SIZE); - DBUG_ASSERT(err == FALSE); - - return 0; -} - - -#ifdef __WIN__ -/* - This wrapper for GetSystemWindowsDirectory() will dynamically bind to the - function if it is available, emulate it on NT4 Terminal Server by stripping - the \SYSTEM32 from the end of the results of GetSystemDirectory(), or just - return GetSystemDirectory(). - */ - -typedef UINT (WINAPI *GET_SYSTEM_WINDOWS_DIRECTORY)(LPSTR, UINT); - -static size_t my_get_system_windows_directory(char *buffer, size_t size) -{ - size_t count; - GET_SYSTEM_WINDOWS_DIRECTORY - func_ptr= (GET_SYSTEM_WINDOWS_DIRECTORY) - GetProcAddress(GetModuleHandle("kernel32.dll"), - "GetSystemWindowsDirectoryA"); - - if (func_ptr) - return func_ptr(buffer, (uint) size); - - /* - Windows NT 4.0 Terminal Server Edition: - To retrieve the shared Windows directory, call GetSystemDirectory and - trim the "System32" element from the end of the returned path. - */ - count= GetSystemDirectory(buffer, (uint) size); - if (count > 8 && stricmp(buffer+(count-8), "\\System32") == 0) - { - count-= 8; - buffer[count] = '\0'; - } - return count; -} - - -static const char *my_get_module_parent(char *buf, size_t size) -{ - char *last= NULL; - char *end; - if (!GetModuleFileName(NULL, buf, (DWORD) size)) - return NULL; - end= strend(buf); - - /* - Look for the second-to-last \ in the filename, but hang on - to a pointer after the last \ in case we're in the root of - a drive. - */ - for ( ; end > buf; end--) - { - if (*end == FN_LIBCHAR) - { - if (last) - { - /* Keep the last '\' as this works both with D:\ and a directory */ - end[1]= 0; - break; - } - last= end; - } - } - - return buf; -} -#endif /* __WIN__ */ - - -static const char **init_default_directories(MEM_ROOT *alloc) -{ - const char **dirs; - char *env; - int errors= 0; - - dirs= (const char **)alloc_root(alloc, DEFAULT_DIRS_SIZE * sizeof(char *)); - if (dirs == NULL) - return NULL; - bzero((char *) dirs, DEFAULT_DIRS_SIZE * sizeof(char *)); - -#ifdef __WIN__ - - { - char fname_buffer[FN_REFLEN]; - if (my_get_system_windows_directory(fname_buffer, sizeof(fname_buffer))) - errors += add_directory(alloc, fname_buffer, dirs); - - if (GetWindowsDirectory(fname_buffer, sizeof(fname_buffer))) - errors += add_directory(alloc, fname_buffer, dirs); - - errors += add_directory(alloc, "C:/", dirs); - - if (my_get_module_parent(fname_buffer, sizeof(fname_buffer)) != NULL) - errors += add_directory(alloc, fname_buffer, dirs); - } - -#else - - errors += add_directory(alloc, "/etc/", dirs); - errors += add_directory(alloc, "/etc/mysql/", dirs); - -#if defined(DEFAULT_SYSCONFDIR) - if (DEFAULT_SYSCONFDIR[0]) - errors += add_directory(alloc, DEFAULT_SYSCONFDIR, dirs); -#endif /* DEFAULT_SYSCONFDIR */ - -#endif - - if ((env= getenv(STRINGIFY_ARG(DEFAULT_HOME_ENV)))) - errors += add_directory(alloc, env, dirs); - - /* Placeholder for --defaults-extra-file= */ - errors += add_directory(alloc, "", dirs); - -#if !defined(__WIN__) - errors += add_directory(alloc, "~/", dirs); -#endif - - return (errors > 0 ? NULL : dirs); -} diff --git a/deps/mysqllite/mysys/errors.c b/deps/mysqllite/mysys/errors.c deleted file mode 100644 index c74ed292906c7c..00000000000000 --- a/deps/mysqllite/mysys/errors.c +++ /dev/null @@ -1,119 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" - -#ifndef SHARED_LIBRARY - -const char *globerrs[GLOBERRS]= -{ - "Can't create/write to file '%s' (Errcode: %d)", - "Error reading file '%s' (Errcode: %d)", - "Error writing file '%s' (Errcode: %d)", - "Error on close of '%s' (Errcode: %d)", - "Out of memory (Needed %u bytes)", - "Error on delete of '%s' (Errcode: %d)", - "Error on rename of '%s' to '%s' (Errcode: %d)", - "", - "Unexpected eof found when reading file '%s' (Errcode: %d)", - "Can't lock file (Errcode: %d)", - "Can't unlock file (Errcode: %d)", - "Can't read dir of '%s' (Errcode: %d)", - "Can't get stat of '%s' (Errcode: %d)", - "Can't change size of file (Errcode: %d)", - "Can't open stream from handle (Errcode: %d)", - "Can't get working dirctory (Errcode: %d)", - "Can't change dir to '%s' (Errcode: %d)", - "Warning: '%s' had %d links", - "Warning: %d files and %d streams is left open\n", - "Disk is full writing '%s' (Errcode: %d). Waiting for someone to free space... (Expect up to %d secs delay for server to continue after freeing disk space)", - "Can't create directory '%s' (Errcode: %d)", - "Character set '%s' is not a compiled character set and is not specified in the '%s' file", - "Out of resources when opening file '%s' (Errcode: %d)", - "Can't read value for symlink '%s' (Error %d)", - "Can't create symlink '%s' pointing at '%s' (Error %d)", - "Error on realpath() on '%s' (Error %d)", - "Can't sync file '%s' to disk (Errcode: %d)", - "Collation '%s' is not a compiled collation and is not specified in the '%s' file", - "File '%s' not found (Errcode: %d)", - "File '%s' (fileno: %d) was not closed", - "Can't change ownership of the file '%s' (Errcode: %d)", - "Can't change permissions of the file '%s' (Errcode: %d)", - "Can't seek in file '%s' (Errcode: %d)" -}; - -void init_glob_errs(void) -{ - /* This is now done statically. */ -} - -#else - -void init_glob_errs() -{ - EE(EE_CANTCREATEFILE) = "Can't create/write to file '%s' (Errcode: %d)"; - EE(EE_READ) = "Error reading file '%s' (Errcode: %d)"; - EE(EE_WRITE) = "Error writing file '%s' (Errcode: %d)"; - EE(EE_BADCLOSE) = "Error on close of '%'s (Errcode: %d)"; - EE(EE_OUTOFMEMORY) = "Out of memory (Needed %u bytes)"; - EE(EE_DELETE) = "Error on delete of '%s' (Errcode: %d)"; - EE(EE_LINK) = "Error on rename of '%s' to '%s' (Errcode: %d)"; - EE(EE_EOFERR) = "Unexpected eof found when reading file '%s' (Errcode: %d)"; - EE(EE_CANTLOCK) = "Can't lock file (Errcode: %d)"; - EE(EE_CANTUNLOCK) = "Can't unlock file (Errcode: %d)"; - EE(EE_DIR) = "Can't read dir of '%s' (Errcode: %d)"; - EE(EE_STAT) = "Can't get stat of '%s' (Errcode: %d)"; - EE(EE_CANT_CHSIZE) = "Can't change size of file (Errcode: %d)"; - EE(EE_CANT_OPEN_STREAM)= "Can't open stream from handle (Errcode: %d)"; - EE(EE_GETWD) = "Can't get working directory (Errcode: %d)"; - EE(EE_SETWD) = "Can't change dir to '%s' (Errcode: %d)"; - EE(EE_LINK_WARNING) = "Warning: '%s' had %d links"; - EE(EE_OPEN_WARNING) = "Warning: %d files and %d streams is left open\n"; - EE(EE_DISK_FULL) = "Disk is full writing '%s'. Waiting for someone to free space..."; - EE(EE_CANT_MKDIR) ="Can't create directory '%s' (Errcode: %d)"; - EE(EE_UNKNOWN_CHARSET)= "Character set '%s' is not a compiled character set and is not specified in the %s file"; - EE(EE_OUT_OF_FILERESOURCES)="Out of resources when opening file '%s' (Errcode: %d)"; - EE(EE_CANT_READLINK)= "Can't read value for symlink '%s' (Error %d)"; - EE(EE_CANT_SYMLINK)= "Can't create symlink '%s' pointing at '%s' (Error %d)"; - EE(EE_REALPATH)= "Error on realpath() on '%s' (Error %d)"; - EE(EE_SYNC)= "Can't sync file '%s' to disk (Errcode: %d)"; - EE(EE_UNKNOWN_COLLATION)= "Collation '%s' is not a compiled collation and is not specified in the %s file"; - EE(EE_FILENOTFOUND) = "File '%s' not found (Errcode: %d)"; - EE(EE_FILE_NOT_CLOSED) = "File '%s' (fileno: %d) was not closed"; - EE(EE_CHANGE_OWNERSHIP) = "Can't change ownership of the file '%s' (Errcode: %d)"; - EE(EE_CHANGE_PERMISSIONS) = "Can't change permissions of the file '%s' (Errcode: %d)"; - EE(EE_CANT_SEEK) = "Can't seek in file '%s' (Errcode: %d)"; -} -#endif - -void wait_for_free_space(const char *filename, int errors) -{ - if (errors == 0) - my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH), - filename,my_errno,MY_WAIT_FOR_USER_TO_FIX_PANIC); - if (!(errors % MY_WAIT_GIVE_USER_A_MESSAGE)) - my_printf_error(EE_DISK_FULL, - "Retry in %d secs. Message reprinted in %d secs", - MYF(ME_BELL | ME_NOREFRESH), - MY_WAIT_FOR_USER_TO_FIX_PANIC, - MY_WAIT_GIVE_USER_A_MESSAGE * MY_WAIT_FOR_USER_TO_FIX_PANIC ); - (void) sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC); -} - -const char **get_global_errmsgs() -{ - return globerrs; -} diff --git a/deps/mysqllite/mysys/hash.c b/deps/mysqllite/mysys/hash.c deleted file mode 100644 index f54ac1a4abbf61..00000000000000 --- a/deps/mysqllite/mysys/hash.c +++ /dev/null @@ -1,769 +0,0 @@ -/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* The hash functions used for saveing keys */ -/* One of key_length or key_length_offset must be given */ -/* Key length of 0 isn't allowed */ - -#include "mysys_priv.h" -#include -#include -#include "hash.h" - -#define NO_RECORD ((uint) -1) -#define LOWFIND 1 -#define LOWUSED 2 -#define HIGHFIND 4 -#define HIGHUSED 8 - -typedef struct st_hash_info { - uint next; /* index to next key */ - uchar *data; /* data for current entry */ -} HASH_LINK; - -static uint my_hash_mask(my_hash_value_type hashnr, - size_t buffmax, size_t maxlength); -static void movelink(HASH_LINK *array,uint pos,uint next_link,uint newlink); -static int hashcmp(const HASH *hash, HASH_LINK *pos, const uchar *key, - size_t length); - -static my_hash_value_type calc_hash(const HASH *hash, - const uchar *key, size_t length) -{ - ulong nr1=1, nr2=4; - hash->charset->coll->hash_sort(hash->charset,(uchar*) key,length,&nr1,&nr2); - return (my_hash_value_type)nr1; -} - -/** - @brief Initialize the hash - - @details - - Initialize the hash, by defining and giving valid values for - its elements. The failure to allocate memory for the - hash->array element will not result in a fatal failure. The - dynamic array that is part of the hash will allocate memory - as required during insertion. - - @param[in,out] hash The hash that is initialized - @param[in] charset The charater set information - @param[in] size The hash size - @param[in] key_offest The key offset for the hash - @param[in] key_length The length of the key used in - the hash - @param[in] get_key get the key for the hash - @param[in] free_element pointer to the function that - does cleanup - @return inidicates success or failure of initialization - @retval 0 success - @retval 1 failure -*/ -my_bool -_my_hash_init(HASH *hash, uint growth_size, CHARSET_INFO *charset, - ulong size, size_t key_offset, size_t key_length, - my_hash_get_key get_key, - void (*free_element)(void*), uint flags) -{ - DBUG_ENTER("my_hash_init"); - DBUG_PRINT("enter",("hash: 0x%lx size: %u", (long) hash, (uint) size)); - - hash->records=0; - hash->key_offset=key_offset; - hash->key_length=key_length; - hash->blength=1; - hash->get_key=get_key; - hash->free=free_element; - hash->flags=flags; - hash->charset=charset; - DBUG_RETURN(my_init_dynamic_array_ci(&hash->array, - sizeof(HASH_LINK), size, growth_size)); -} - - -/* - Call hash->free on all elements in hash. - - SYNOPSIS - my_hash_free_elements() - hash hash table - - NOTES: - Sets records to 0 -*/ - -static inline void my_hash_free_elements(HASH *hash) -{ - if (hash->free) - { - HASH_LINK *data=dynamic_element(&hash->array,0,HASH_LINK*); - HASH_LINK *end= data + hash->records; - while (data < end) - (*hash->free)((data++)->data); - } - hash->records=0; -} - - -/* - Free memory used by hash. - - SYNOPSIS - my_hash_free() - hash the hash to delete elements of - - NOTES: Hash can't be reused without calling my_hash_init again. -*/ - -void my_hash_free(HASH *hash) -{ - DBUG_ENTER("my_hash_free"); - DBUG_PRINT("enter",("hash: 0x%lx", (long) hash)); - - my_hash_free_elements(hash); - hash->free= 0; - delete_dynamic(&hash->array); - hash->blength= 0; - DBUG_VOID_RETURN; -} - - -/* - Delete all elements from the hash (the hash itself is to be reused). - - SYNOPSIS - my_hash_reset() - hash the hash to delete elements of -*/ - -void my_hash_reset(HASH *hash) -{ - DBUG_ENTER("my_hash_reset"); - DBUG_PRINT("enter",("hash: 0x%lxd", (long) hash)); - - my_hash_free_elements(hash); - reset_dynamic(&hash->array); - /* Set row pointers so that the hash can be reused at once */ - hash->blength= 1; - DBUG_VOID_RETURN; -} - -/* some helper functions */ - -/* - This function is char* instead of uchar* as HPUX11 compiler can't - handle inline functions that are not defined as native types -*/ - -static inline char* -my_hash_key(const HASH *hash, const uchar *record, size_t *length, - my_bool first) -{ - if (hash->get_key) - return (char*) (*hash->get_key)(record,length,first); - *length=hash->key_length; - return (char*) record+hash->key_offset; -} - - /* Calculate pos according to keys */ - -static uint my_hash_mask(my_hash_value_type hashnr, size_t buffmax, - size_t maxlength) -{ - if ((hashnr & (buffmax-1)) < maxlength) return (hashnr & (buffmax-1)); - return (hashnr & ((buffmax >> 1) -1)); -} - -static uint my_hash_rec_mask(const HASH *hash, HASH_LINK *pos, - size_t buffmax, size_t maxlength) -{ - size_t length; - uchar *key= (uchar*) my_hash_key(hash, pos->data, &length, 0); - return my_hash_mask(calc_hash(hash, key, length), buffmax, maxlength); -} - - - -/* for compilers which can not handle inline */ -static -#if !defined(__USLC__) && !defined(__sgi) -inline -#endif -my_hash_value_type rec_hashnr(HASH *hash,const uchar *record) -{ - size_t length; - uchar *key= (uchar*) my_hash_key(hash, record, &length, 0); - return calc_hash(hash,key,length); -} - - -uchar* my_hash_search(const HASH *hash, const uchar *key, size_t length) -{ - HASH_SEARCH_STATE state; - return my_hash_first(hash, key, length, &state); -} - -uchar* my_hash_search_using_hash_value(const HASH *hash, - my_hash_value_type hash_value, - const uchar *key, - size_t length) -{ - HASH_SEARCH_STATE state; - return my_hash_first_from_hash_value(hash, hash_value, - key, length, &state); -} - -my_hash_value_type my_calc_hash(const HASH *hash, - const uchar *key, size_t length) -{ - return calc_hash(hash, key, length ? length : hash->key_length); -} - - -/* - Search after a record based on a key - - NOTE - Assigns the number of the found record to HASH_SEARCH_STATE state -*/ - -uchar* my_hash_first(const HASH *hash, const uchar *key, size_t length, - HASH_SEARCH_STATE *current_record) -{ - uchar *res; - if (my_hash_inited(hash)) - res= my_hash_first_from_hash_value(hash, - calc_hash(hash, key, length ? length : hash->key_length), - key, length, current_record); - else - res= 0; - return res; -} - - -uchar* my_hash_first_from_hash_value(const HASH *hash, - my_hash_value_type hash_value, - const uchar *key, - size_t length, - HASH_SEARCH_STATE *current_record) -{ - HASH_LINK *pos; - uint flag,idx; - DBUG_ENTER("my_hash_first_from_hash_value"); - - flag=1; - if (hash->records) - { - idx= my_hash_mask(hash_value, - hash->blength, hash->records); - do - { - pos= dynamic_element(&hash->array,idx,HASH_LINK*); - if (!hashcmp(hash,pos,key,length)) - { - DBUG_PRINT("exit",("found key at %d",idx)); - *current_record= idx; - DBUG_RETURN (pos->data); - } - if (flag) - { - flag=0; /* Reset flag */ - if (my_hash_rec_mask(hash, pos, hash->blength, hash->records) != idx) - break; /* Wrong link */ - } - } - while ((idx=pos->next) != NO_RECORD); - } - *current_record= NO_RECORD; - DBUG_RETURN(0); -} - - /* Get next record with identical key */ - /* Can only be called if previous calls was my_hash_search */ - -uchar* my_hash_next(const HASH *hash, const uchar *key, size_t length, - HASH_SEARCH_STATE *current_record) -{ - HASH_LINK *pos; - uint idx; - - if (*current_record != NO_RECORD) - { - HASH_LINK *data=dynamic_element(&hash->array,0,HASH_LINK*); - for (idx=data[*current_record].next; idx != NO_RECORD ; idx=pos->next) - { - pos=data+idx; - if (!hashcmp(hash,pos,key,length)) - { - *current_record= idx; - return pos->data; - } - } - *current_record= NO_RECORD; - } - return 0; -} - - - /* Change link from pos to new_link */ - -static void movelink(HASH_LINK *array,uint find,uint next_link,uint newlink) -{ - HASH_LINK *old_link; - do - { - old_link=array+next_link; - } - while ((next_link=old_link->next) != find); - old_link->next= newlink; - return; -} - -/* - Compare a key in a record to a whole key. Return 0 if identical - - SYNOPSIS - hashcmp() - hash hash table - pos position of hash record to use in comparison - key key for comparison - length length of key - - NOTES: - If length is 0, comparison is done using the length of the - record being compared against. - - RETURN - = 0 key of record == key - != 0 key of record != key - */ - -static int hashcmp(const HASH *hash, HASH_LINK *pos, const uchar *key, - size_t length) -{ - size_t rec_keylength; - uchar *rec_key= (uchar*) my_hash_key(hash, pos->data, &rec_keylength, 1); - return ((length && length != rec_keylength) || - my_strnncoll(hash->charset, (uchar*) rec_key, rec_keylength, - (uchar*) key, rec_keylength)); -} - - - /* Write a hash-key to the hash-index */ - -my_bool my_hash_insert(HASH *info, const uchar *record) -{ - int flag; - size_t idx,halfbuff,first_index; - my_hash_value_type hash_nr; - uchar *UNINIT_VAR(ptr_to_rec),*UNINIT_VAR(ptr_to_rec2); - HASH_LINK *data,*empty,*UNINIT_VAR(gpos),*UNINIT_VAR(gpos2),*pos; - - if (HASH_UNIQUE & info->flags) - { - uchar *key= (uchar*) my_hash_key(info, record, &idx, 1); - if (my_hash_search(info, key, idx)) - return(TRUE); /* Duplicate entry */ - } - - flag=0; - if (!(empty=(HASH_LINK*) alloc_dynamic(&info->array))) - return(TRUE); /* No more memory */ - - data=dynamic_element(&info->array,0,HASH_LINK*); - halfbuff= info->blength >> 1; - - idx=first_index=info->records-halfbuff; - if (idx != info->records) /* If some records */ - { - do - { - pos=data+idx; - hash_nr=rec_hashnr(info,pos->data); - if (flag == 0) /* First loop; Check if ok */ - if (my_hash_mask(hash_nr, info->blength, info->records) != first_index) - break; - if (!(hash_nr & halfbuff)) - { /* Key will not move */ - if (!(flag & LOWFIND)) - { - if (flag & HIGHFIND) - { - flag=LOWFIND | HIGHFIND; - /* key shall be moved to the current empty position */ - gpos=empty; - ptr_to_rec=pos->data; - empty=pos; /* This place is now free */ - } - else - { - flag=LOWFIND | LOWUSED; /* key isn't changed */ - gpos=pos; - ptr_to_rec=pos->data; - } - } - else - { - if (!(flag & LOWUSED)) - { - /* Change link of previous LOW-key */ - gpos->data=ptr_to_rec; - gpos->next= (uint) (pos-data); - flag= (flag & HIGHFIND) | (LOWFIND | LOWUSED); - } - gpos=pos; - ptr_to_rec=pos->data; - } - } - else - { /* key will be moved */ - if (!(flag & HIGHFIND)) - { - flag= (flag & LOWFIND) | HIGHFIND; - /* key shall be moved to the last (empty) position */ - gpos2 = empty; empty=pos; - ptr_to_rec2=pos->data; - } - else - { - if (!(flag & HIGHUSED)) - { - /* Change link of previous hash-key and save */ - gpos2->data=ptr_to_rec2; - gpos2->next=(uint) (pos-data); - flag= (flag & LOWFIND) | (HIGHFIND | HIGHUSED); - } - gpos2=pos; - ptr_to_rec2=pos->data; - } - } - } - while ((idx=pos->next) != NO_RECORD); - - if ((flag & (LOWFIND | LOWUSED)) == LOWFIND) - { - gpos->data=ptr_to_rec; - gpos->next=NO_RECORD; - } - if ((flag & (HIGHFIND | HIGHUSED)) == HIGHFIND) - { - gpos2->data=ptr_to_rec2; - gpos2->next=NO_RECORD; - } - } - /* Check if we are at the empty position */ - - idx= my_hash_mask(rec_hashnr(info, record), info->blength, info->records + 1); - pos=data+idx; - if (pos == empty) - { - pos->data=(uchar*) record; - pos->next=NO_RECORD; - } - else - { - /* Check if more records in same hash-nr family */ - empty[0]=pos[0]; - gpos= data + my_hash_rec_mask(info, pos, info->blength, info->records + 1); - if (pos == gpos) - { - pos->data=(uchar*) record; - pos->next=(uint) (empty - data); - } - else - { - pos->data=(uchar*) record; - pos->next=NO_RECORD; - movelink(data,(uint) (pos-data),(uint) (gpos-data),(uint) (empty-data)); - } - } - if (++info->records == info->blength) - info->blength+= info->blength; - return(0); -} - - -/****************************************************************************** -** Remove one record from hash-table. The record with the same record -** ptr is removed. -** if there is a free-function it's called for record if found -******************************************************************************/ - -my_bool my_hash_delete(HASH *hash, uchar *record) -{ - uint blength,pos2,idx,empty_index; - my_hash_value_type pos_hashnr, lastpos_hashnr; - HASH_LINK *data,*lastpos,*gpos,*pos,*pos3,*empty; - DBUG_ENTER("my_hash_delete"); - if (!hash->records) - DBUG_RETURN(1); - - blength=hash->blength; - data=dynamic_element(&hash->array,0,HASH_LINK*); - /* Search after record with key */ - pos= data + my_hash_mask(rec_hashnr(hash, record), blength, hash->records); - gpos = 0; - - while (pos->data != record) - { - gpos=pos; - if (pos->next == NO_RECORD) - DBUG_RETURN(1); /* Key not found */ - pos=data+pos->next; - } - - if ( --(hash->records) < hash->blength >> 1) hash->blength>>=1; - lastpos=data+hash->records; - - /* Remove link to record */ - empty=pos; empty_index=(uint) (empty-data); - if (gpos) - gpos->next=pos->next; /* unlink current ptr */ - else if (pos->next != NO_RECORD) - { - empty=data+(empty_index=pos->next); - pos->data=empty->data; - pos->next=empty->next; - } - - if (empty == lastpos) /* last key at wrong pos or no next link */ - goto exit; - - /* Move the last key (lastpos) */ - lastpos_hashnr=rec_hashnr(hash,lastpos->data); - /* pos is where lastpos should be */ - pos= data + my_hash_mask(lastpos_hashnr, hash->blength, hash->records); - if (pos == empty) /* Move to empty position. */ - { - empty[0]=lastpos[0]; - goto exit; - } - pos_hashnr=rec_hashnr(hash,pos->data); - /* pos3 is where the pos should be */ - pos3= data + my_hash_mask(pos_hashnr, hash->blength, hash->records); - if (pos != pos3) - { /* pos is on wrong posit */ - empty[0]=pos[0]; /* Save it here */ - pos[0]=lastpos[0]; /* This should be here */ - movelink(data,(uint) (pos-data),(uint) (pos3-data),empty_index); - goto exit; - } - pos2= my_hash_mask(lastpos_hashnr, blength, hash->records + 1); - if (pos2 == my_hash_mask(pos_hashnr, blength, hash->records + 1)) - { /* Identical key-positions */ - if (pos2 != hash->records) - { - empty[0]=lastpos[0]; - movelink(data,(uint) (lastpos-data),(uint) (pos-data),empty_index); - goto exit; - } - idx= (uint) (pos-data); /* Link pos->next after lastpos */ - } - else idx= NO_RECORD; /* Different positions merge */ - - empty[0]=lastpos[0]; - movelink(data,idx,empty_index,pos->next); - pos->next=empty_index; - -exit: - (void) pop_dynamic(&hash->array); - if (hash->free) - (*hash->free)((uchar*) record); - DBUG_RETURN(0); -} - - /* - Update keys when record has changed. - This is much more efficent than using a delete & insert. - */ - -my_bool my_hash_update(HASH *hash, uchar *record, uchar *old_key, - size_t old_key_length) -{ - uint new_index,new_pos_index,blength,records; - size_t idx,empty; - HASH_LINK org_link,*data,*previous,*pos; - DBUG_ENTER("my_hash_update"); - - if (HASH_UNIQUE & hash->flags) - { - HASH_SEARCH_STATE state; - uchar *found, *new_key= (uchar*) my_hash_key(hash, record, &idx, 1); - if ((found= my_hash_first(hash, new_key, idx, &state))) - { - do - { - if (found != record) - DBUG_RETURN(1); /* Duplicate entry */ - } - while ((found= my_hash_next(hash, new_key, idx, &state))); - } - } - - data=dynamic_element(&hash->array,0,HASH_LINK*); - blength=hash->blength; records=hash->records; - - /* Search after record with key */ - - idx= my_hash_mask(calc_hash(hash, old_key, (old_key_length ? - old_key_length : - hash->key_length)), - blength, records); - new_index= my_hash_mask(rec_hashnr(hash, record), blength, records); - if (idx == new_index) - DBUG_RETURN(0); /* Nothing to do (No record check) */ - previous=0; - for (;;) - { - - if ((pos= data+idx)->data == record) - break; - previous=pos; - if ((idx=pos->next) == NO_RECORD) - DBUG_RETURN(1); /* Not found in links */ - } - org_link= *pos; - empty=idx; - - /* Relink record from current chain */ - - if (!previous) - { - if (pos->next != NO_RECORD) - { - empty=pos->next; - *pos= data[pos->next]; - } - } - else - previous->next=pos->next; /* unlink pos */ - - /* Move data to correct position */ - if (new_index == empty) - { - /* - At this point record is unlinked from the old chain, thus it holds - random position. By the chance this position is equal to position - for the first element in the new chain. That means updated record - is the only record in the new chain. - */ - if (empty != idx) - { - /* - Record was moved while unlinking it from the old chain. - Copy data to a new position. - */ - data[empty]= org_link; - } - data[empty].next= NO_RECORD; - DBUG_RETURN(0); - } - pos=data+new_index; - new_pos_index= my_hash_rec_mask(hash, pos, blength, records); - if (new_index != new_pos_index) - { /* Other record in wrong position */ - data[empty] = *pos; - movelink(data,new_index,new_pos_index,empty); - org_link.next=NO_RECORD; - data[new_index]= org_link; - } - else - { /* Link in chain at right position */ - org_link.next=data[new_index].next; - data[empty]=org_link; - data[new_index].next=empty; - } - DBUG_RETURN(0); -} - - -uchar *my_hash_element(HASH *hash, ulong idx) -{ - if (idx < hash->records) - return dynamic_element(&hash->array,idx,HASH_LINK*)->data; - return 0; -} - - -/* - Replace old row with new row. This should only be used when key - isn't changed -*/ - -void my_hash_replace(HASH *hash, HASH_SEARCH_STATE *current_record, - uchar *new_row) -{ - if (*current_record != NO_RECORD) /* Safety */ - dynamic_element(&hash->array, *current_record, HASH_LINK*)->data= new_row; -} - - -#ifndef DBUG_OFF - -my_bool my_hash_check(HASH *hash) -{ - int error; - uint i,rec_link,found,max_links,seek,links,idx; - uint records,blength; - HASH_LINK *data,*hash_info; - - records=hash->records; blength=hash->blength; - data=dynamic_element(&hash->array,0,HASH_LINK*); - error=0; - - for (i=found=max_links=seek=0 ; i < records ; i++) - { - if (my_hash_rec_mask(hash, data + i, blength, records) == i) - { - found++; seek++; links=1; - for (idx=data[i].next ; - idx != NO_RECORD && found < records + 1; - idx=hash_info->next) - { - if (idx >= records) - { - DBUG_PRINT("error", - ("Found pointer outside array to %d from link starting at %d", - idx,i)); - error=1; - } - hash_info=data+idx; - seek+= ++links; - if ((rec_link= my_hash_rec_mask(hash, hash_info, - blength, records)) != i) - { - DBUG_PRINT("error", ("Record in wrong link at %d: Start %d " - "Record: 0x%lx Record-link %d", - idx, i, (long) hash_info->data, rec_link)); - error=1; - } - else - found++; - } - if (links > max_links) max_links=links; - } - } - if (found != records) - { - DBUG_PRINT("error",("Found %u of %u records", found, records)); - error=1; - } - if (records) - DBUG_PRINT("info", - ("records: %u seeks: %d max links: %d hitrate: %.2f", - records,seek,max_links,(float) seek / (float) records)); - return error; -} -#endif diff --git a/deps/mysqllite/mysys/lf_alloc-pin.c b/deps/mysqllite/mysys/lf_alloc-pin.c deleted file mode 100644 index 4ed01ac8083187..00000000000000 --- a/deps/mysqllite/mysys/lf_alloc-pin.c +++ /dev/null @@ -1,527 +0,0 @@ -/* QQ: TODO multi-pinbox */ -/* Copyright (C) 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - wait-free concurrent allocator based on pinning addresses - - It works as follows: every thread (strictly speaking - every CPU, but - it's too difficult to do) has a small array of pointers. They're called - "pins". Before using an object its address must be stored in this array - (pinned). When an object is no longer necessary its address must be - removed from this array (unpinned). When a thread wants to free() an - object it scans all pins of all threads to see if somebody has this - object pinned. If yes - the object is not freed (but stored in a - "purgatory"). To reduce the cost of a single free() pins are not scanned - on every free() but only added to (thread-local) purgatory. On every - LF_PURGATORY_SIZE free() purgatory is scanned and all unpinned objects - are freed. - - Pins are used to solve ABA problem. To use pins one must obey - a pinning protocol: - - 1. Let's assume that PTR is a shared pointer to an object. Shared means - that any thread may modify it anytime to point to a different object - and free the old object. Later the freed object may be potentially - allocated by another thread. If we're unlucky that other thread may - set PTR to point to this object again. This is ABA problem. - 2. Create a local pointer LOCAL_PTR. - 3. Pin the PTR in a loop: - do - { - LOCAL_PTR= PTR; - pin(PTR, PIN_NUMBER); - } while (LOCAL_PTR != PTR) - 4. It is guaranteed that after the loop has ended, LOCAL_PTR - points to an object (or NULL, if PTR may be NULL), that - will never be freed. It is not guaranteed though - that LOCAL_PTR == PTR (as PTR can change any time) - 5. When done working with the object, remove the pin: - unpin(PIN_NUMBER) - 6. When copying pins (as in the list traversing loop: - pin(CUR, 1); - while () - { - do // standard - { // pinning - NEXT=CUR->next; // loop - pin(NEXT, 0); // see #3 - } while (NEXT != CUR->next); // above - ... - ... - CUR=NEXT; - pin(CUR, 1); // copy pin[0] to pin[1] - } - which keeps CUR address constantly pinned), note than pins may be - copied only upwards (!!!), that is pin[N] to pin[M], M > N. - 7. Don't keep the object pinned longer than necessary - the number of - pins you have is limited (and small), keeping an object pinned - prevents its reuse and cause unnecessary mallocs. - - Explanations: - - 3. The loop is important. The following can occur: - thread1> LOCAL_PTR= PTR - thread2> free(PTR); PTR=0; - thread1> pin(PTR, PIN_NUMBER); - now thread1 cannot access LOCAL_PTR, even if it's pinned, - because it points to a freed memory. That is, it *must* - verify that it has indeed pinned PTR, the shared pointer. - - 6. When a thread wants to free some LOCAL_PTR, and it scans - all lists of pins to see whether it's pinned, it does it - upwards, from low pin numbers to high. Thus another thread - must copy an address from one pin to another in the same - direction - upwards, otherwise the scanning thread may - miss it. - - Implementation details: - - Pins are given away from a "pinbox". Pinbox is stack-based allocator. - It used dynarray for storing pins, new elements are allocated by dynarray - as necessary, old are pushed in the stack for reuse. ABA is solved by - versioning a pointer - because we use an array, a pointer to pins is 16 bit, - upper 16 bits are used for a version. - - It is assumed that pins belong to a THD and are not transferable - between THD's (LF_PINS::stack_ends_here being a primary reason - for this limitation). -*/ -#include -#include -#include - -#define LF_PINBOX_MAX_PINS 65536 - -static void _lf_pinbox_real_free(LF_PINS *pins); - -/* - Initialize a pinbox. Normally called from lf_alloc_init. - See the latter for details. -*/ -void lf_pinbox_init(LF_PINBOX *pinbox, uint free_ptr_offset, - lf_pinbox_free_func *free_func, void *free_func_arg) -{ - DBUG_ASSERT(free_ptr_offset % sizeof(void *) == 0); - compile_time_assert(sizeof(LF_PINS) == 64); - lf_dynarray_init(&pinbox->pinarray, sizeof(LF_PINS)); - pinbox->pinstack_top_ver= 0; - pinbox->pins_in_array= 0; - pinbox->free_ptr_offset= free_ptr_offset; - pinbox->free_func= free_func; - pinbox->free_func_arg= free_func_arg; -} - -void lf_pinbox_destroy(LF_PINBOX *pinbox) -{ - lf_dynarray_destroy(&pinbox->pinarray); -} - -/* - Get pins from a pinbox. Usually called via lf_alloc_get_pins() or - lf_hash_get_pins(). - - SYNOPSYS - pinbox - - - DESCRIPTION - get a new LF_PINS structure from a stack of unused pins, - or allocate a new one out of dynarray. - - NOTE - It is assumed that pins belong to a thread and are not transferable - between threads. -*/ -LF_PINS *_lf_pinbox_get_pins(LF_PINBOX *pinbox) -{ - uint32 pins, next, top_ver; - LF_PINS *el; - /* - We have an array of max. 64k elements. - The highest index currently allocated is pinbox->pins_in_array. - Freed elements are in a lifo stack, pinstack_top_ver. - pinstack_top_ver is 32 bits; 16 low bits are the index in the - array, to the first element of the list. 16 high bits are a version - (every time the 16 low bits are updated, the 16 high bits are - incremented). Versioniong prevents the ABA problem. - */ - top_ver= pinbox->pinstack_top_ver; - do - { - if (!(pins= top_ver % LF_PINBOX_MAX_PINS)) - { - /* the stack of free elements is empty */ - pins= my_atomic_add32((int32 volatile*) &pinbox->pins_in_array, 1)+1; - if (unlikely(pins >= LF_PINBOX_MAX_PINS)) - return 0; - /* - note that the first allocated element has index 1 (pins==1). - index 0 is reserved to mean "NULL pointer" - */ - el= (LF_PINS *)_lf_dynarray_lvalue(&pinbox->pinarray, pins); - if (unlikely(!el)) - return 0; - break; - } - el= (LF_PINS *)_lf_dynarray_value(&pinbox->pinarray, pins); - next= el->link; - } while (!my_atomic_cas32((int32 volatile*) &pinbox->pinstack_top_ver, - (int32*) &top_ver, - top_ver-pins+next+LF_PINBOX_MAX_PINS)); - /* - set el->link to the index of el in the dynarray (el->link has two usages: - - if element is allocated, it's its own index - - if element is free, it's its next element in the free stack - */ - el->link= pins; - el->purgatory_count= 0; - el->pinbox= pinbox; - el->stack_ends_here= & my_thread_var->stack_ends_here; - return el; -} - -/* - Put pins back to a pinbox. Usually called via lf_alloc_put_pins() or - lf_hash_put_pins(). - - DESCRIPTION - empty the purgatory (XXX deadlock warning below!), - push LF_PINS structure to a stack -*/ -void _lf_pinbox_put_pins(LF_PINS *pins) -{ - LF_PINBOX *pinbox= pins->pinbox; - uint32 top_ver, nr; - nr= pins->link; -#ifdef MY_LF_EXTRA_DEBUG - { - int i; - for (i= 0; i < LF_PINBOX_PINS; i++) - DBUG_ASSERT(pins->pin[i] == 0); - } -#endif - /* - XXX this will deadlock if other threads will wait for - the caller to do something after _lf_pinbox_put_pins(), - and they would have pinned addresses that the caller wants to free. - Thus: only free pins when all work is done and nobody can wait for you!!! - */ - while (pins->purgatory_count) - { - _lf_pinbox_real_free(pins); - if (pins->purgatory_count) - { - my_atomic_rwlock_wrunlock(&pins->pinbox->pinarray.lock); - pthread_yield(); - my_atomic_rwlock_wrlock(&pins->pinbox->pinarray.lock); - } - } - top_ver= pinbox->pinstack_top_ver; - do - { - pins->link= top_ver % LF_PINBOX_MAX_PINS; - } while (!my_atomic_cas32((int32 volatile*) &pinbox->pinstack_top_ver, - (int32*) &top_ver, - top_ver-pins->link+nr+LF_PINBOX_MAX_PINS)); - return; -} - -static int ptr_cmp(void **a, void **b) -{ - return *a < *b ? -1 : *a == *b ? 0 : 1; -} - -#define add_to_purgatory(PINS, ADDR) \ - do \ - { \ - *(void **)((char *)(ADDR)+(PINS)->pinbox->free_ptr_offset)= \ - (PINS)->purgatory; \ - (PINS)->purgatory= (ADDR); \ - (PINS)->purgatory_count++; \ - } while (0) - -/* - Free an object allocated via pinbox allocator - - DESCRIPTION - add an object to purgatory. if necessary, call _lf_pinbox_real_free() - to actually free something. -*/ -void _lf_pinbox_free(LF_PINS *pins, void *addr) -{ - add_to_purgatory(pins, addr); - if (pins->purgatory_count % LF_PURGATORY_SIZE) - _lf_pinbox_real_free(pins); -} - -struct st_harvester { - void **granary; - int npins; -}; - -/* - callback for _lf_dynarray_iterate: - scan all pins of all threads and accumulate all pins -*/ -static int harvest_pins(LF_PINS *el, struct st_harvester *hv) -{ - int i; - LF_PINS *el_end= el+min(hv->npins, LF_DYNARRAY_LEVEL_LENGTH); - for (; el < el_end; el++) - { - for (i= 0; i < LF_PINBOX_PINS; i++) - { - void *p= el->pin[i]; - if (p) - *hv->granary++= p; - } - } - /* - hv->npins may become negative below, but it means that - we're on the last dynarray page and harvest_pins() won't be - called again. We don't bother to make hv->npins() correct - (that is 0) in this case. - */ - hv->npins-= LF_DYNARRAY_LEVEL_LENGTH; - return 0; -} - -/* - callback for _lf_dynarray_iterate: - scan all pins of all threads and see if addr is present there -*/ -static int match_pins(LF_PINS *el, void *addr) -{ - int i; - LF_PINS *el_end= el+LF_DYNARRAY_LEVEL_LENGTH; - for (; el < el_end; el++) - for (i= 0; i < LF_PINBOX_PINS; i++) - if (el->pin[i] == addr) - return 1; - return 0; -} - -#if STACK_DIRECTION < 0 -#define available_stack_size(CUR,END) (long) ((char*)(CUR) - (char*)(END)) -#else -#define available_stack_size(CUR,END) (long) ((char*)(END) - (char*)(CUR)) -#endif - -#define next_node(P, X) (*((uchar * volatile *)(((uchar *)(X)) + (P)->free_ptr_offset))) -#define anext_node(X) next_node(&allocator->pinbox, (X)) - -/* - Scan the purgatory and free everything that can be freed -*/ -static void _lf_pinbox_real_free(LF_PINS *pins) -{ - int npins, alloca_size; - void *list, **addr; - void *first= NULL, *last= NULL; - LF_PINBOX *pinbox= pins->pinbox; - - npins= pinbox->pins_in_array+1; - -#ifdef HAVE_ALLOCA - alloca_size= sizeof(void *)*LF_PINBOX_PINS*npins; - /* create a sorted list of pinned addresses, to speed up searches */ - if (available_stack_size(&pinbox, *pins->stack_ends_here) > alloca_size) - { - struct st_harvester hv; - addr= (void **) alloca(alloca_size); - hv.granary= addr; - hv.npins= npins; - /* scan the dynarray and accumulate all pinned addresses */ - _lf_dynarray_iterate(&pinbox->pinarray, - (lf_dynarray_func)harvest_pins, &hv); - - npins= hv.granary-addr; - /* and sort them */ - if (npins) - qsort(addr, npins, sizeof(void *), (qsort_cmp)ptr_cmp); - } - else -#endif - addr= 0; - - list= pins->purgatory; - pins->purgatory= 0; - pins->purgatory_count= 0; - while (list) - { - void *cur= list; - list= *(void **)((char *)cur+pinbox->free_ptr_offset); - if (npins) - { - if (addr) /* use binary search */ - { - void **a, **b, **c; - for (a= addr, b= addr+npins-1, c= a+(b-a)/2; (b-a) > 1; c= a+(b-a)/2) - if (cur == *c) - a= b= c; - else if (cur > *c) - a= c; - else - b= c; - if (cur == *a || cur == *b) - goto found; - } - else /* no alloca - no cookie. linear search here */ - { - if (_lf_dynarray_iterate(&pinbox->pinarray, - (lf_dynarray_func)match_pins, cur)) - goto found; - } - } - /* not pinned - freeing */ - if (last) - last= next_node(pinbox, last)= (uchar *)cur; - else - first= last= (uchar *)cur; - continue; -found: - /* pinned - keeping */ - add_to_purgatory(pins, cur); - } - if (last) - pinbox->free_func(first, last, pinbox->free_func_arg); -} - -/* lock-free memory allocator for fixed-size objects */ - -LF_REQUIRE_PINS(1) - -/* - callback for _lf_pinbox_real_free to free a list of unpinned objects - - add it back to the allocator stack - - DESCRIPTION - 'first' and 'last' are the ends of the linked list of nodes: - first->el->el->....->el->last. Use first==last to free only one element. -*/ -static void alloc_free(uchar *first, - uchar volatile *last, - LF_ALLOCATOR *allocator) -{ - /* - we need a union here to access type-punned pointer reliably. - otherwise gcc -fstrict-aliasing will not see 'tmp' changed in the loop - */ - union { uchar * node; void *ptr; } tmp; - tmp.node= allocator->top; - do - { - anext_node(last)= tmp.node; - } while (!my_atomic_casptr((void **)(char *)&allocator->top, - (void **)&tmp.ptr, first) && LF_BACKOFF); -} - -/* - initialize lock-free allocator - - SYNOPSYS - allocator - - size a size of an object to allocate - free_ptr_offset an offset inside the object to a sizeof(void *) - memory that is guaranteed to be unused after - the object is put in the purgatory. Unused by ANY - thread, not only the purgatory owner. - This memory will be used to link waiting-to-be-freed - objects in a purgatory list. -*/ -void lf_alloc_init(LF_ALLOCATOR *allocator, uint size, uint free_ptr_offset) -{ - lf_pinbox_init(&allocator->pinbox, free_ptr_offset, - (lf_pinbox_free_func *)alloc_free, allocator); - allocator->top= 0; - allocator->mallocs= 0; - allocator->element_size= size; - DBUG_ASSERT(size >= sizeof(void*) + free_ptr_offset); -} - -/* - destroy the allocator, free everything that's in it - - NOTE - As every other init/destroy function here and elsewhere it - is not thread safe. No, this function is no different, ensure - that no thread needs the allocator before destroying it. - We are not responsible for any damage that may be caused by - accessing the allocator when it is being or has been destroyed. - Oh yes, and don't put your cat in a microwave. -*/ -void lf_alloc_destroy(LF_ALLOCATOR *allocator) -{ - uchar *node= allocator->top; - while (node) - { - uchar *tmp= anext_node(node); - my_free(node); - node= tmp; - } - lf_pinbox_destroy(&allocator->pinbox); - allocator->top= 0; -} - -/* - Allocate and return an new object. - - DESCRIPTION - Pop an unused object from the stack or malloc it is the stack is empty. - pin[0] is used, it's removed on return. -*/ -void *_lf_alloc_new(LF_PINS *pins) -{ - LF_ALLOCATOR *allocator= (LF_ALLOCATOR *)(pins->pinbox->free_func_arg); - uchar *node; - for (;;) - { - do - { - node= allocator->top; - _lf_pin(pins, 0, node); - } while (node != allocator->top && LF_BACKOFF); - if (!node) - { - node= (void *)my_malloc(allocator->element_size, MYF(MY_WME)); -#ifdef MY_LF_EXTRA_DEBUG - if (likely(node != 0)) - my_atomic_add32(&allocator->mallocs, 1); -#endif - break; - } - if (my_atomic_casptr((void **)(char *)&allocator->top, - (void *)&node, anext_node(node))) - break; - } - _lf_unpin(pins, 0); - return node; -} - -/* - count the number of objects in a pool. - - NOTE - This is NOT thread-safe !!! -*/ -uint lf_alloc_pool_count(LF_ALLOCATOR *allocator) -{ - uint i; - uchar *node; - for (node= allocator->top, i= 0; node; node= anext_node(node), i++) - /* no op */; - return i; -} - diff --git a/deps/mysqllite/mysys/lf_dynarray.c b/deps/mysqllite/mysys/lf_dynarray.c deleted file mode 100644 index 0941c8762bb8f6..00000000000000 --- a/deps/mysqllite/mysys/lf_dynarray.c +++ /dev/null @@ -1,207 +0,0 @@ -/* Copyright (C) 2006 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Analog of DYNAMIC_ARRAY that never reallocs - (so no pointer into the array may ever become invalid). - - Memory is allocated in non-contiguous chunks. - This data structure is not space efficient for sparse arrays. - - Every element is aligned to sizeof(element) boundary - (to avoid false sharing if element is big enough). - - LF_DYNARRAY is a recursive structure. On the zero level - LF_DYNARRAY::level[0] it's an array of LF_DYNARRAY_LEVEL_LENGTH elements, - on the first level it's an array of LF_DYNARRAY_LEVEL_LENGTH pointers - to arrays of elements, on the second level it's an array of pointers - to arrays of pointers to arrays of elements. And so on. - - With four levels the number of elements is limited to 4311810304 - (but as in all functions index is uint, the real limit is 2^32-1) - - Actually, it's wait-free, not lock-free ;-) -*/ - -#include -#include -#include -#include - -void lf_dynarray_init(LF_DYNARRAY *array, uint element_size) -{ - bzero(array, sizeof(*array)); - array->size_of_element= element_size; - my_atomic_rwlock_init(&array->lock); -} - -static void recursive_free(void **alloc, int level) -{ - if (!alloc) - return; - - if (level) - { - int i; - for (i= 0; i < LF_DYNARRAY_LEVEL_LENGTH; i++) - recursive_free(alloc[i], level-1); - my_free(alloc); - } - else - my_free(alloc[-1]); -} - -void lf_dynarray_destroy(LF_DYNARRAY *array) -{ - int i; - for (i= 0; i < LF_DYNARRAY_LEVELS; i++) - recursive_free(array->level[i], i); - my_atomic_rwlock_destroy(&array->lock); -} - -static const ulong dynarray_idxes_in_prev_levels[LF_DYNARRAY_LEVELS]= -{ - 0, /* +1 here to to avoid -1's below */ - LF_DYNARRAY_LEVEL_LENGTH, - LF_DYNARRAY_LEVEL_LENGTH * LF_DYNARRAY_LEVEL_LENGTH + - LF_DYNARRAY_LEVEL_LENGTH, - LF_DYNARRAY_LEVEL_LENGTH * LF_DYNARRAY_LEVEL_LENGTH * - LF_DYNARRAY_LEVEL_LENGTH + LF_DYNARRAY_LEVEL_LENGTH * - LF_DYNARRAY_LEVEL_LENGTH + LF_DYNARRAY_LEVEL_LENGTH -}; - -static const ulong dynarray_idxes_in_prev_level[LF_DYNARRAY_LEVELS]= -{ - 0, /* +1 here to to avoid -1's below */ - LF_DYNARRAY_LEVEL_LENGTH, - LF_DYNARRAY_LEVEL_LENGTH * LF_DYNARRAY_LEVEL_LENGTH, - LF_DYNARRAY_LEVEL_LENGTH * LF_DYNARRAY_LEVEL_LENGTH * - LF_DYNARRAY_LEVEL_LENGTH, -}; - -/* - Returns a valid lvalue pointer to the element number 'idx'. - Allocates memory if necessary. -*/ -void *_lf_dynarray_lvalue(LF_DYNARRAY *array, uint idx) -{ - void * ptr, * volatile * ptr_ptr= 0; - int i; - - for (i= LF_DYNARRAY_LEVELS-1; idx < dynarray_idxes_in_prev_levels[i]; i--) - /* no-op */; - ptr_ptr= &array->level[i]; - idx-= dynarray_idxes_in_prev_levels[i]; - for (; i > 0; i--) - { - if (!(ptr= *ptr_ptr)) - { - void *alloc= my_malloc(LF_DYNARRAY_LEVEL_LENGTH * sizeof(void *), - MYF(MY_WME|MY_ZEROFILL)); - if (unlikely(!alloc)) - return(NULL); - if (my_atomic_casptr(ptr_ptr, &ptr, alloc)) - ptr= alloc; - else - my_free(alloc); - } - ptr_ptr= ((void **)ptr) + idx / dynarray_idxes_in_prev_level[i]; - idx%= dynarray_idxes_in_prev_level[i]; - } - if (!(ptr= *ptr_ptr)) - { - uchar *alloc, *data; - alloc= my_malloc(LF_DYNARRAY_LEVEL_LENGTH * array->size_of_element + - max(array->size_of_element, sizeof(void *)), - MYF(MY_WME|MY_ZEROFILL)); - if (unlikely(!alloc)) - return(NULL); - /* reserve the space for free() address */ - data= alloc + sizeof(void *); - { /* alignment */ - intptr mod= ((intptr)data) % array->size_of_element; - if (mod) - data+= array->size_of_element - mod; - } - ((void **)data)[-1]= alloc; /* free() will need the original pointer */ - if (my_atomic_casptr(ptr_ptr, &ptr, data)) - ptr= data; - else - my_free(alloc); - } - return ((uchar*)ptr) + array->size_of_element * idx; -} - -/* - Returns a pointer to the element number 'idx' - or NULL if an element does not exists -*/ -void *_lf_dynarray_value(LF_DYNARRAY *array, uint idx) -{ - void * ptr, * volatile * ptr_ptr= 0; - int i; - - for (i= LF_DYNARRAY_LEVELS-1; idx < dynarray_idxes_in_prev_levels[i]; i--) - /* no-op */; - ptr_ptr= &array->level[i]; - idx-= dynarray_idxes_in_prev_levels[i]; - for (; i > 0; i--) - { - if (!(ptr= *ptr_ptr)) - return(NULL); - ptr_ptr= ((void **)ptr) + idx / dynarray_idxes_in_prev_level[i]; - idx %= dynarray_idxes_in_prev_level[i]; - } - if (!(ptr= *ptr_ptr)) - return(NULL); - return ((uchar*)ptr) + array->size_of_element * idx; -} - -static int recursive_iterate(LF_DYNARRAY *array, void *ptr, int level, - lf_dynarray_func func, void *arg) -{ - int res, i; - if (!ptr) - return 0; - if (!level) - return func(ptr, arg); - for (i= 0; i < LF_DYNARRAY_LEVEL_LENGTH; i++) - if ((res= recursive_iterate(array, ((void **)ptr)[i], level-1, func, arg))) - return res; - return 0; -} - -/* - Calls func(array, arg) on every array of LF_DYNARRAY_LEVEL_LENGTH elements - in lf_dynarray. - - DESCRIPTION - lf_dynarray consists of a set of arrays, LF_DYNARRAY_LEVEL_LENGTH elements - each. _lf_dynarray_iterate() calls user-supplied function on every array - from the set. It is the fastest way to scan the array, faster than - for (i=0; i < N; i++) { func(_lf_dynarray_value(dynarray, i)); } - - NOTE - if func() returns non-zero, the scan is aborted -*/ -int _lf_dynarray_iterate(LF_DYNARRAY *array, lf_dynarray_func func, void *arg) -{ - int i, res; - for (i= 0; i < LF_DYNARRAY_LEVELS; i++) - if ((res= recursive_iterate(array, array->level[i], i, func, arg))) - return res; - return 0; -} - diff --git a/deps/mysqllite/mysys/lf_hash.c b/deps/mysqllite/mysys/lf_hash.c deleted file mode 100644 index e7bf82fc6ca1f6..00000000000000 --- a/deps/mysqllite/mysys/lf_hash.c +++ /dev/null @@ -1,503 +0,0 @@ -/* Copyright (C) 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - extensible hash - - TODO - try to get rid of dummy nodes ? - for non-unique hash, count only _distinct_ values - (but how to do it in lf_hash_delete ?) -*/ -#include -#include -#include -#include -#include - -LF_REQUIRE_PINS(3) - -/* An element of the list */ -typedef struct { - intptr volatile link; /* a pointer to the next element in a listand a flag */ - uint32 hashnr; /* reversed hash number, for sorting */ - const uchar *key; - size_t keylen; - /* - data is stored here, directly after the keylen. - thus the pointer to data is (void*)(slist_element_ptr+1) - */ -} LF_SLIST; - -/* - a structure to pass the context (pointers two the three successive elements - in a list) from lfind to linsert/ldelete -*/ -typedef struct { - intptr volatile *prev; - LF_SLIST *curr, *next; -} CURSOR; - -/* - the last bit in LF_SLIST::link is a "deleted" flag. - the helper macros below convert it to a pure pointer or a pure flag -*/ -#define PTR(V) (LF_SLIST *)((V) & (~(intptr)1)) -#define DELETED(V) ((V) & 1) - -/* - DESCRIPTION - Search for hashnr/key/keylen in the list starting from 'head' and - position the cursor. The list is ORDER BY hashnr, key - - RETURN - 0 - not found - 1 - found - - NOTE - cursor is positioned in either case - pins[0..2] are used, they are NOT removed on return -*/ -static int lfind(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr, - const uchar *key, uint keylen, CURSOR *cursor, LF_PINS *pins) -{ - uint32 cur_hashnr; - const uchar *cur_key; - uint cur_keylen; - intptr link; - -retry: - cursor->prev= (intptr *)head; - do { /* PTR() isn't necessary below, head is a dummy node */ - cursor->curr= (LF_SLIST *)(*cursor->prev); - _lf_pin(pins, 1, cursor->curr); - } while (*cursor->prev != (intptr)cursor->curr && LF_BACKOFF); - for (;;) - { - if (unlikely(!cursor->curr)) - return 0; /* end of the list */ - do { - /* QQ: XXX or goto retry ? */ - link= cursor->curr->link; - cursor->next= PTR(link); - _lf_pin(pins, 0, cursor->next); - } while (link != cursor->curr->link && LF_BACKOFF); - cur_hashnr= cursor->curr->hashnr; - cur_key= cursor->curr->key; - cur_keylen= cursor->curr->keylen; - if (*cursor->prev != (intptr)cursor->curr) - { - (void)LF_BACKOFF; - goto retry; - } - if (!DELETED(link)) - { - if (cur_hashnr >= hashnr) - { - int r= 1; - if (cur_hashnr > hashnr || - (r= my_strnncoll(cs, (uchar*) cur_key, cur_keylen, (uchar*) key, - keylen)) >= 0) - return !r; - } - cursor->prev= &(cursor->curr->link); - _lf_pin(pins, 2, cursor->curr); - } - else - { - /* - we found a deleted node - be nice, help the other thread - and remove this deleted node - */ - if (my_atomic_casptr((void **)cursor->prev, - (void **)&cursor->curr, cursor->next)) - _lf_alloc_free(pins, cursor->curr); - else - { - (void)LF_BACKOFF; - goto retry; - } - } - cursor->curr= cursor->next; - _lf_pin(pins, 1, cursor->curr); - } -} - -/* - DESCRIPTION - insert a 'node' in the list that starts from 'head' in the correct - position (as found by lfind) - - RETURN - 0 - inserted - not 0 - a pointer to a duplicate (not pinned and thus unusable) - - NOTE - it uses pins[0..2], on return all pins are removed. - if there're nodes with the same key value, a new node is added before them. -*/ -static LF_SLIST *linsert(LF_SLIST * volatile *head, CHARSET_INFO *cs, - LF_SLIST *node, LF_PINS *pins, uint flags) -{ - CURSOR cursor; - int res; - - for (;;) - { - if (lfind(head, cs, node->hashnr, node->key, node->keylen, - &cursor, pins) && - (flags & LF_HASH_UNIQUE)) - { - res= 0; /* duplicate found */ - break; - } - else - { - node->link= (intptr)cursor.curr; - DBUG_ASSERT(node->link != (intptr)node); /* no circular references */ - DBUG_ASSERT(cursor.prev != &node->link); /* no circular references */ - if (my_atomic_casptr((void **)cursor.prev, (void **)&cursor.curr, node)) - { - res= 1; /* inserted ok */ - break; - } - } - } - _lf_unpin(pins, 0); - _lf_unpin(pins, 1); - _lf_unpin(pins, 2); - /* - Note that cursor.curr is not pinned here and the pointer is unreliable, - the object may dissapear anytime. But if it points to a dummy node, the - pointer is safe, because dummy nodes are never freed - initialize_bucket() - uses this fact. - */ - return res ? 0 : cursor.curr; -} - -/* - DESCRIPTION - deletes a node as identified by hashnr/keey/keylen from the list - that starts from 'head' - - RETURN - 0 - ok - 1 - not found - - NOTE - it uses pins[0..2], on return all pins are removed. -*/ -static int ldelete(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr, - const uchar *key, uint keylen, LF_PINS *pins) -{ - CURSOR cursor; - int res; - - for (;;) - { - if (!lfind(head, cs, hashnr, key, keylen, &cursor, pins)) - { - res= 1; /* not found */ - break; - } - else - { - /* mark the node deleted */ - if (my_atomic_casptr((void **)&(cursor.curr->link), - (void **)&cursor.next, - (void *)(((intptr)cursor.next) | 1))) - { - /* and remove it from the list */ - if (my_atomic_casptr((void **)cursor.prev, - (void **)&cursor.curr, cursor.next)) - _lf_alloc_free(pins, cursor.curr); - else - { - /* - somebody already "helped" us and removed the node ? - Let's check if we need to help that someone too! - (to ensure the number of "set DELETED flag" actions - is equal to the number of "remove from the list" actions) - */ - lfind(head, cs, hashnr, key, keylen, &cursor, pins); - } - res= 0; - break; - } - } - } - _lf_unpin(pins, 0); - _lf_unpin(pins, 1); - _lf_unpin(pins, 2); - return res; -} - -/* - DESCRIPTION - searches for a node as identified by hashnr/keey/keylen in the list - that starts from 'head' - - RETURN - 0 - not found - node - found - - NOTE - it uses pins[0..2], on return the pin[2] keeps the node found - all other pins are removed. -*/ -static LF_SLIST *lsearch(LF_SLIST * volatile *head, CHARSET_INFO *cs, - uint32 hashnr, const uchar *key, uint keylen, - LF_PINS *pins) -{ - CURSOR cursor; - int res= lfind(head, cs, hashnr, key, keylen, &cursor, pins); - if (res) - _lf_pin(pins, 2, cursor.curr); - _lf_unpin(pins, 0); - _lf_unpin(pins, 1); - return res ? cursor.curr : 0; -} - -static inline const uchar* hash_key(const LF_HASH *hash, - const uchar *record, size_t *length) -{ - if (hash->get_key) - return (*hash->get_key)(record, length, 0); - *length= hash->key_length; - return record + hash->key_offset; -} - -/* - Compute the hash key value from the raw key. - - @note, that the hash value is limited to 2^31, because we need one - bit to distinguish between normal and dummy nodes. -*/ -static inline uint calc_hash(LF_HASH *hash, const uchar *key, uint keylen) -{ - ulong nr1= 1, nr2= 4; - hash->charset->coll->hash_sort(hash->charset, (uchar*) key, keylen, - &nr1, &nr2); - return nr1 & INT_MAX32; -} - -#define MAX_LOAD 1.0 /* average number of elements in a bucket */ - -static int initialize_bucket(LF_HASH *, LF_SLIST * volatile*, uint, LF_PINS *); - -/* - Initializes lf_hash, the arguments are compatible with hash_init - - @note element_size sets both the size of allocated memory block for - lf_alloc and a size of memcpy'ed block size in lf_hash_insert. Typically - they are the same, indeed. But LF_HASH::element_size can be decreased - after lf_hash_init, and then lf_alloc will allocate larger block that - lf_hash_insert will copy over. It is desireable if part of the element - is expensive to initialize - for example if there is a mutex or - DYNAMIC_ARRAY. In this case they should be initialize in the - LF_ALLOCATOR::constructor, and lf_hash_insert should not overwrite them. - See wt_init() for example. -*/ -void lf_hash_init(LF_HASH *hash, uint element_size, uint flags, - uint key_offset, uint key_length, my_hash_get_key get_key, - CHARSET_INFO *charset) -{ - lf_alloc_init(&hash->alloc, sizeof(LF_SLIST)+element_size, - offsetof(LF_SLIST, key)); - lf_dynarray_init(&hash->array, sizeof(LF_SLIST *)); - hash->size= 1; - hash->count= 0; - hash->element_size= element_size; - hash->flags= flags; - hash->charset= charset ? charset : &my_charset_bin; - hash->key_offset= key_offset; - hash->key_length= key_length; - hash->get_key= get_key; - DBUG_ASSERT(get_key ? !key_offset && !key_length : key_length); -} - -void lf_hash_destroy(LF_HASH *hash) -{ - LF_SLIST *el, **head= (LF_SLIST **)_lf_dynarray_value(&hash->array, 0); - - if (unlikely(!head)) - return; - el= *head; - - while (el) - { - intptr next= el->link; - if (el->hashnr & 1) - lf_alloc_direct_free(&hash->alloc, el); /* normal node */ - else - my_free(el); /* dummy node */ - el= (LF_SLIST *)next; - } - lf_alloc_destroy(&hash->alloc); - lf_dynarray_destroy(&hash->array); -} - -/* - DESCRIPTION - inserts a new element to a hash. it will have a _copy_ of - data, not a pointer to it. - - RETURN - 0 - inserted - 1 - didn't (unique key conflict) - -1 - out of memory - - NOTE - see linsert() for pin usage notes -*/ -int lf_hash_insert(LF_HASH *hash, LF_PINS *pins, const void *data) -{ - int csize, bucket, hashnr; - LF_SLIST *node, * volatile *el; - - lf_rwlock_by_pins(pins); - node= (LF_SLIST *)_lf_alloc_new(pins); - if (unlikely(!node)) - return -1; - memcpy(node+1, data, hash->element_size); - node->key= hash_key(hash, (uchar *)(node+1), &node->keylen); - hashnr= calc_hash(hash, node->key, node->keylen); - bucket= hashnr % hash->size; - el= _lf_dynarray_lvalue(&hash->array, bucket); - if (unlikely(!el)) - return -1; - if (*el == NULL && unlikely(initialize_bucket(hash, el, bucket, pins))) - return -1; - node->hashnr= my_reverse_bits(hashnr) | 1; /* normal node */ - if (linsert(el, hash->charset, node, pins, hash->flags)) - { - _lf_alloc_free(pins, node); - lf_rwunlock_by_pins(pins); - return 1; - } - csize= hash->size; - if ((my_atomic_add32(&hash->count, 1)+1.0) / csize > MAX_LOAD) - my_atomic_cas32(&hash->size, &csize, csize*2); - lf_rwunlock_by_pins(pins); - return 0; -} - -/* - DESCRIPTION - deletes an element with the given key from the hash (if a hash is - not unique and there're many elements with this key - the "first" - matching element is deleted) - RETURN - 0 - deleted - 1 - didn't (not found) - -1 - out of memory - NOTE - see ldelete() for pin usage notes -*/ -int lf_hash_delete(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen) -{ - LF_SLIST * volatile *el; - uint bucket, hashnr= calc_hash(hash, (uchar *)key, keylen); - - bucket= hashnr % hash->size; - lf_rwlock_by_pins(pins); - el= _lf_dynarray_lvalue(&hash->array, bucket); - if (unlikely(!el)) - return -1; - /* - note that we still need to initialize_bucket here, - we cannot return "node not found", because an old bucket of that - node may've been split and the node was assigned to a new bucket - that was never accessed before and thus is not initialized. - */ - if (*el == NULL && unlikely(initialize_bucket(hash, el, bucket, pins))) - return -1; - if (ldelete(el, hash->charset, my_reverse_bits(hashnr) | 1, - (uchar *)key, keylen, pins)) - { - lf_rwunlock_by_pins(pins); - return 1; - } - my_atomic_add32(&hash->count, -1); - lf_rwunlock_by_pins(pins); - return 0; -} - -/* - RETURN - a pointer to an element with the given key (if a hash is not unique and - there're many elements with this key - the "first" matching element) - NULL if nothing is found - MY_ERRPTR if OOM - - NOTE - see lsearch() for pin usage notes -*/ -void *lf_hash_search(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen) -{ - LF_SLIST * volatile *el, *found; - uint bucket, hashnr= calc_hash(hash, (uchar *)key, keylen); - - bucket= hashnr % hash->size; - lf_rwlock_by_pins(pins); - el= _lf_dynarray_lvalue(&hash->array, bucket); - if (unlikely(!el)) - return MY_ERRPTR; - if (*el == NULL && unlikely(initialize_bucket(hash, el, bucket, pins))) - return MY_ERRPTR; - found= lsearch(el, hash->charset, my_reverse_bits(hashnr) | 1, - (uchar *)key, keylen, pins); - lf_rwunlock_by_pins(pins); - return found ? found+1 : 0; -} - -static const uchar *dummy_key= (uchar*)""; - -/* - RETURN - 0 - ok - -1 - out of memory -*/ -static int initialize_bucket(LF_HASH *hash, LF_SLIST * volatile *node, - uint bucket, LF_PINS *pins) -{ - uint parent= my_clear_highest_bit(bucket); - LF_SLIST *dummy= (LF_SLIST *)my_malloc(sizeof(LF_SLIST), MYF(MY_WME)); - LF_SLIST **tmp= 0, *cur; - LF_SLIST * volatile *el= _lf_dynarray_lvalue(&hash->array, parent); - if (unlikely(!el || !dummy)) - return -1; - if (*el == NULL && bucket && - unlikely(initialize_bucket(hash, el, parent, pins))) - return -1; - dummy->hashnr= my_reverse_bits(bucket) | 0; /* dummy node */ - dummy->key= dummy_key; - dummy->keylen= 0; - if ((cur= linsert(el, hash->charset, dummy, pins, LF_HASH_UNIQUE))) - { - my_free(dummy); - dummy= cur; - } - my_atomic_casptr((void **)node, (void **)&tmp, dummy); - /* - note that if the CAS above failed (after linsert() succeeded), - it would mean that some other thread has executed linsert() for - the same dummy node, its linsert() failed, it picked up our - dummy node (in "dummy= cur") and executed the same CAS as above. - Which means that even if CAS above failed we don't need to retry, - and we should not free(dummy) - there's no memory leak here - */ - return 0; -} diff --git a/deps/mysqllite/mysys/list.c b/deps/mysqllite/mysys/list.c deleted file mode 100644 index e68fbf519d1852..00000000000000 --- a/deps/mysqllite/mysys/list.c +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Code for handling dubble-linked lists in C -*/ - -#include "mysys_priv.h" -#include - - - - /* Add a element to start of list */ - -LIST *list_add(LIST *root, LIST *element) -{ - DBUG_ENTER("list_add"); - DBUG_PRINT("enter",("root: 0x%lx element: 0x%lx", (long) root, (long) element)); - if (root) - { - if (root->prev) /* If add in mid of list */ - root->prev->next= element; - element->prev=root->prev; - root->prev=element; - } - else - element->prev=0; - element->next=root; - DBUG_RETURN(element); /* New root */ -} - - -LIST *list_delete(LIST *root, LIST *element) -{ - if (element->prev) - element->prev->next=element->next; - else - root=element->next; - if (element->next) - element->next->prev=element->prev; - return root; -} - - -void list_free(LIST *root, uint free_data) -{ - LIST *next; - while (root) - { - next=root->next; - if (free_data) - my_free(root->data); - my_free(root); - root=next; - } -} - - -LIST *list_cons(void *data, LIST *list) -{ - LIST *new_charset=(LIST*) my_malloc(sizeof(LIST),MYF(MY_FAE)); - if (!new_charset) - return 0; - new_charset->data=data; - return list_add(list,new_charset); -} - - -LIST *list_reverse(LIST *root) -{ - LIST *last; - - last=root; - while (root) - { - last=root; - root=root->next; - last->next=last->prev; - last->prev=root; - } - return last; -} - -uint list_length(LIST *list) -{ - uint count; - for (count=0 ; list ; list=list->next, count++) ; - return count; -} - - -int list_walk(LIST *list, list_walk_action action, uchar* argument) -{ - int error=0; - while (list) - { - if ((error = (*action)(list->data,argument))) - return error; - list=list_rest(list); - } - return 0; -} diff --git a/deps/mysqllite/mysys/md5.c b/deps/mysqllite/mysys/md5.c deleted file mode 100644 index 2388cebedc4d7e..00000000000000 --- a/deps/mysqllite/mysys/md5.c +++ /dev/null @@ -1,325 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - * This code implements the MD5 message-digest algorithm. - * The algorithm is due to Ron Rivest. This code was - * written by Colin Plumb in 1993, no copyright is claimed. - * This code is in the public domain; do with it what you wish. - * - * Equivalent code is available from RSA Data Security, Inc. - * This code has been tested against that, and is equivalent, - * except that you don't need to include two pages of legalese - * with every copy. - * - * To compute the message digest of a chunk of bytes, declare an - * MD5Context structure, pass it to MD5Init, call MD5Update as - * needed on buffers full of bytes, and then call MD5Final, which - * will fill a supplied 16-byte array with the digest. - */ - -/* This code was modified in 1997 by Jim Kingdon of Cyclic Software to - not require an integer type which is exactly 32 bits. This work - draws on the changes for the same purpose by Tatu Ylonen - as part of SSH, but since I didn't actually use - that code, there is no copyright issue. I hereby disclaim - copyright in any changes I have made; this code remains in the - public domain. */ - -#include -#include -#include "my_md5.h" - -#include /* for memcpy() and memset() */ - - -static void -my_MD5Transform (cvs_uint32 buf[4], const unsigned char in[64]); - -/* Little-endian byte-swapping routines. Note that these do not - depend on the size of datatypes such as uint32, nor do they require - us to detect the endianness of the machine we are running on. It - is possible they should be macros for speed, but I would be - surprised if they were a performance bottleneck for MD5. */ - -static uint32 getu32 (const unsigned char *addr) -{ - return (((((unsigned long)addr[3] << 8) | addr[2]) << 8) - | addr[1]) << 8 | addr[0]; -} - -static void -putu32 (uint32 data, unsigned char *addr) -{ - addr[0] = (unsigned char)data; - addr[1] = (unsigned char)(data >> 8); - addr[2] = (unsigned char)(data >> 16); - addr[3] = (unsigned char)(data >> 24); -} - -/* - Start MD5 accumulation. Set bit count to 0 and buffer to mysterious - initialization constants. -*/ -void -my_MD5Init (my_MD5Context *ctx) -{ - ctx->buf[0] = 0x67452301; - ctx->buf[1] = 0xefcdab89; - ctx->buf[2] = 0x98badcfe; - ctx->buf[3] = 0x10325476; - - ctx->bits[0] = 0; - ctx->bits[1] = 0; -} - -/* - Update context to reflect the concatenation of another buffer full - of bytes. -*/ -void -my_MD5Update (my_MD5Context *ctx, unsigned char const *buf, unsigned len) -{ - uint32 t; - - /* Update bitcount */ - - t = ctx->bits[0]; - if ((ctx->bits[0] = (t + ((uint32)len << 3)) & 0xffffffff) < t) - ctx->bits[1]++; /* Carry from low to high */ - ctx->bits[1] += len >> 29; - - t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */ - - /* Handle any leading odd-sized chunks */ - - if ( t ) { - unsigned char *p = ctx->in + t; - - t = 64-t; - if (len < t) { - memcpy(p, buf, len); - return; - } - memcpy(p, buf, t); - my_MD5Transform (ctx->buf, ctx->in); - buf += t; - len -= t; - } - - /* Process data in 64-byte chunks */ - - while (len >= 64) { - memcpy(ctx->in, buf, 64); - my_MD5Transform (ctx->buf, ctx->in); - buf += 64; - len -= 64; - } - - /* Handle any remaining bytes of data. */ - - memcpy(ctx->in, buf, len); -} - -/* - Final wrapup - pad to 64-byte boundary with the bit pattern - 1 0* (64-bit count of bits processed, MSB-first) -*/ -void -my_MD5Final (unsigned char digest[16], my_MD5Context *ctx) -{ - unsigned count; - unsigned char *p; - - /* Compute number of bytes mod 64 */ - count = (ctx->bits[0] >> 3) & 0x3F; - - /* Set the first char of padding to 0x80. This is safe since there is - always at least one byte free */ - p = ctx->in + count; - *p++ = 0x80; - - /* Bytes of padding needed to make 64 bytes */ - count = 64 - 1 - count; - - /* Pad out to 56 mod 64 */ - if (count < 8) { - /* Two lots of padding: Pad the first block to 64 bytes */ - memset(p, 0, count); - my_MD5Transform (ctx->buf, ctx->in); - - /* Now fill the next block with 56 bytes */ - memset(ctx->in, 0, 56); - } else { - /* Pad block to 56 bytes */ - memset(p, 0, count-8); - } - - /* Append length in bits and transform */ - putu32(ctx->bits[0], ctx->in + 56); - putu32(ctx->bits[1], ctx->in + 60); - - my_MD5Transform (ctx->buf, ctx->in); - putu32(ctx->buf[0], digest); - putu32(ctx->buf[1], digest + 4); - putu32(ctx->buf[2], digest + 8); - putu32(ctx->buf[3], digest + 12); - memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */ -} - -#ifndef ASM_MD5 - -/* The four core functions - F1 is optimized somewhat */ - -/* #define F1(x, y, z) (x & y | ~x & z) */ -#define F1(x, y, z) (z ^ (x & (y ^ z))) -#define F2(x, y, z) F1(z, x, y) -#define F3(x, y, z) (x ^ y ^ z) -#define F4(x, y, z) (y ^ (x | ~z)) - -/* This is the central step in the MD5 algorithm. */ -#define MD5STEP(f, w, x, y, z, data, s) \ - ( w += f(x, y, z) + data, w &= 0xffffffff, w = w<>(32-s), w += x ) - -/* - * The core of the MD5 algorithm, this alters an existing MD5 hash to - * reflect the addition of 16 longwords of new data. MD5Update blocks - * the data and converts bytes into longwords for this routine. - */ -static void -my_MD5Transform (uint32 buf[4], const unsigned char inraw[64]) -{ - register uint32 a, b, c, d; - uint32 in[16]; - int i; - - for (i = 0; i < 16; ++i) - in[i] = getu32 (inraw + 4 * i); - - a = buf[0]; - b = buf[1]; - c = buf[2]; - d = buf[3]; - - MD5STEP(F1, a, b, c, d, in[ 0]+0xd76aa478, 7); - MD5STEP(F1, d, a, b, c, in[ 1]+0xe8c7b756, 12); - MD5STEP(F1, c, d, a, b, in[ 2]+0x242070db, 17); - MD5STEP(F1, b, c, d, a, in[ 3]+0xc1bdceee, 22); - MD5STEP(F1, a, b, c, d, in[ 4]+0xf57c0faf, 7); - MD5STEP(F1, d, a, b, c, in[ 5]+0x4787c62a, 12); - MD5STEP(F1, c, d, a, b, in[ 6]+0xa8304613, 17); - MD5STEP(F1, b, c, d, a, in[ 7]+0xfd469501, 22); - MD5STEP(F1, a, b, c, d, in[ 8]+0x698098d8, 7); - MD5STEP(F1, d, a, b, c, in[ 9]+0x8b44f7af, 12); - MD5STEP(F1, c, d, a, b, in[10]+0xffff5bb1, 17); - MD5STEP(F1, b, c, d, a, in[11]+0x895cd7be, 22); - MD5STEP(F1, a, b, c, d, in[12]+0x6b901122, 7); - MD5STEP(F1, d, a, b, c, in[13]+0xfd987193, 12); - MD5STEP(F1, c, d, a, b, in[14]+0xa679438e, 17); - MD5STEP(F1, b, c, d, a, in[15]+0x49b40821, 22); - - MD5STEP(F2, a, b, c, d, in[ 1]+0xf61e2562, 5); - MD5STEP(F2, d, a, b, c, in[ 6]+0xc040b340, 9); - MD5STEP(F2, c, d, a, b, in[11]+0x265e5a51, 14); - MD5STEP(F2, b, c, d, a, in[ 0]+0xe9b6c7aa, 20); - MD5STEP(F2, a, b, c, d, in[ 5]+0xd62f105d, 5); - MD5STEP(F2, d, a, b, c, in[10]+0x02441453, 9); - MD5STEP(F2, c, d, a, b, in[15]+0xd8a1e681, 14); - MD5STEP(F2, b, c, d, a, in[ 4]+0xe7d3fbc8, 20); - MD5STEP(F2, a, b, c, d, in[ 9]+0x21e1cde6, 5); - MD5STEP(F2, d, a, b, c, in[14]+0xc33707d6, 9); - MD5STEP(F2, c, d, a, b, in[ 3]+0xf4d50d87, 14); - MD5STEP(F2, b, c, d, a, in[ 8]+0x455a14ed, 20); - MD5STEP(F2, a, b, c, d, in[13]+0xa9e3e905, 5); - MD5STEP(F2, d, a, b, c, in[ 2]+0xfcefa3f8, 9); - MD5STEP(F2, c, d, a, b, in[ 7]+0x676f02d9, 14); - MD5STEP(F2, b, c, d, a, in[12]+0x8d2a4c8a, 20); - - MD5STEP(F3, a, b, c, d, in[ 5]+0xfffa3942, 4); - MD5STEP(F3, d, a, b, c, in[ 8]+0x8771f681, 11); - MD5STEP(F3, c, d, a, b, in[11]+0x6d9d6122, 16); - MD5STEP(F3, b, c, d, a, in[14]+0xfde5380c, 23); - MD5STEP(F3, a, b, c, d, in[ 1]+0xa4beea44, 4); - MD5STEP(F3, d, a, b, c, in[ 4]+0x4bdecfa9, 11); - MD5STEP(F3, c, d, a, b, in[ 7]+0xf6bb4b60, 16); - MD5STEP(F3, b, c, d, a, in[10]+0xbebfbc70, 23); - MD5STEP(F3, a, b, c, d, in[13]+0x289b7ec6, 4); - MD5STEP(F3, d, a, b, c, in[ 0]+0xeaa127fa, 11); - MD5STEP(F3, c, d, a, b, in[ 3]+0xd4ef3085, 16); - MD5STEP(F3, b, c, d, a, in[ 6]+0x04881d05, 23); - MD5STEP(F3, a, b, c, d, in[ 9]+0xd9d4d039, 4); - MD5STEP(F3, d, a, b, c, in[12]+0xe6db99e5, 11); - MD5STEP(F3, c, d, a, b, in[15]+0x1fa27cf8, 16); - MD5STEP(F3, b, c, d, a, in[ 2]+0xc4ac5665, 23); - - MD5STEP(F4, a, b, c, d, in[ 0]+0xf4292244, 6); - MD5STEP(F4, d, a, b, c, in[ 7]+0x432aff97, 10); - MD5STEP(F4, c, d, a, b, in[14]+0xab9423a7, 15); - MD5STEP(F4, b, c, d, a, in[ 5]+0xfc93a039, 21); - MD5STEP(F4, a, b, c, d, in[12]+0x655b59c3, 6); - MD5STEP(F4, d, a, b, c, in[ 3]+0x8f0ccc92, 10); - MD5STEP(F4, c, d, a, b, in[10]+0xffeff47d, 15); - MD5STEP(F4, b, c, d, a, in[ 1]+0x85845dd1, 21); - MD5STEP(F4, a, b, c, d, in[ 8]+0x6fa87e4f, 6); - MD5STEP(F4, d, a, b, c, in[15]+0xfe2ce6e0, 10); - MD5STEP(F4, c, d, a, b, in[ 6]+0xa3014314, 15); - MD5STEP(F4, b, c, d, a, in[13]+0x4e0811a1, 21); - MD5STEP(F4, a, b, c, d, in[ 4]+0xf7537e82, 6); - MD5STEP(F4, d, a, b, c, in[11]+0xbd3af235, 10); - MD5STEP(F4, c, d, a, b, in[ 2]+0x2ad7d2bb, 15); - MD5STEP(F4, b, c, d, a, in[ 9]+0xeb86d391, 21); - - buf[0] += a; - buf[1] += b; - buf[2] += c; - buf[3] += d; -} -#endif - -#ifdef TEST -/* - Simple test program. Can use it to manually run the tests from - RFC1321 for example. -*/ -#include - -int -main (int argc, char **argv) -{ - my_MD5Context context; - unsigned char checksum[16]; - int i; - int j; - - if (argc < 2) - { - fprintf (stderr, "usage: %s string-to-hash\n", argv[0]); - exit (1); - } - for (j = 1; j < argc; ++j) - { - printf ("MD5 (\"%s\") = ", argv[j]); - my_MD5Init (&context); - my_MD5Update (&context, argv[j], strlen (argv[j])); - my_MD5Final (checksum, &context); - for (i = 0; i < 16; i++) - { - printf ("%02x", (unsigned int) checksum[i]); - } - printf ("\n"); - } - return 0; -} -#endif /* TEST */ diff --git a/deps/mysqllite/mysys/mf_arr_appstr.c b/deps/mysqllite/mysys/mf_arr_appstr.c deleted file mode 100644 index 1edbea9df4a544..00000000000000 --- a/deps/mysqllite/mysys/mf_arr_appstr.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2007 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include /* strcmp() */ - - -/** - Append str to array, or move to the end if it already exists - - @param str String to be appended - @param array The array, terminated by a NULL element, all unused elements - pre-initialized to NULL - @param size Size of the array; array must be terminated by a NULL - pointer, so can hold size - 1 elements - - @retval FALSE Success - @retval TRUE Failure, array is full -*/ - -my_bool array_append_string_unique(const char *str, - const char **array, size_t size) -{ - const char **p; - /* end points at the terminating NULL element */ - const char **end= array + size - 1; - DBUG_ASSERT(*end == NULL); - - for (p= array; *p; ++p) - { - if (strcmp(*p, str) == 0) - break; - } - if (p >= end) - return TRUE; /* Array is full */ - - DBUG_ASSERT(*p == NULL || strcmp(*p, str) == 0); - - while (*(p + 1)) - { - *p= *(p + 1); - ++p; - } - - DBUG_ASSERT(p < end); - *p= str; - - return FALSE; /* Success */ -} diff --git a/deps/mysqllite/mysys/mf_cache.c b/deps/mysqllite/mysys/mf_cache.c deleted file mode 100644 index 691532c0d80256..00000000000000 --- a/deps/mysqllite/mysys/mf_cache.c +++ /dev/null @@ -1,121 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Open a temporary file and cache it with io_cache. Delete it on close */ - -#include "mysys_priv.h" -#include -#include "my_static.h" -#include "mysys_err.h" - - /* - Remove an open tempfile so that it doesn't survive - if we crash; If the operating system doesn't support - this, just remember the file name for later removal - */ - -static my_bool cache_remove_open_tmp(IO_CACHE *cache __attribute__((unused)), - const char *name) -{ -#if O_TEMPORARY == 0 -#if !defined(CANT_DELETE_OPEN_FILES) - /* The following should always succeed */ - (void) my_delete(name,MYF(MY_WME | ME_NOINPUT)); -#else - int length; - if (!(cache->file_name= - (char*) my_malloc((length=strlen(name)+1),MYF(MY_WME)))) - { - my_close(cache->file,MYF(0)); - cache->file = -1; - errno=my_errno=ENOMEM; - return 1; - } - memcpy(cache->file_name,name,length); -#endif -#endif /* O_TEMPORARY == 0 */ - return 0; -} - - /* - ** Open tempfile cached by IO_CACHE - ** Should be used when no seeks are done (only reinit_io_buff) - ** Return 0 if cache is inited ok - ** The actual file is created when the IO_CACHE buffer gets filled - ** If dir is not given, use TMPDIR. - */ - -my_bool open_cached_file(IO_CACHE *cache, const char* dir, const char *prefix, - size_t cache_size, myf cache_myflags) -{ - DBUG_ENTER("open_cached_file"); - cache->dir= dir ? my_strdup(dir,MYF(cache_myflags & MY_WME)) : (char*) 0; - cache->prefix= (prefix ? my_strdup(prefix,MYF(cache_myflags & MY_WME)) : - (char*) 0); - cache->file_name=0; - cache->buffer=0; /* Mark that not open */ - if (!init_io_cache(cache,-1,cache_size,WRITE_CACHE,0L,0, - MYF(cache_myflags | MY_NABP))) - { - DBUG_RETURN(0); - } - my_free(cache->dir); - my_free(cache->prefix); - DBUG_RETURN(1); -} - - /* Create the temporary file */ - -my_bool real_open_cached_file(IO_CACHE *cache) -{ - char name_buff[FN_REFLEN]; - int error=1; - DBUG_ENTER("real_open_cached_file"); - if ((cache->file=create_temp_file(name_buff, cache->dir, cache->prefix, - (O_RDWR | O_BINARY | O_TRUNC | - O_TEMPORARY | O_SHORT_LIVED), - MYF(MY_WME))) >= 0) - { - error=0; - cache_remove_open_tmp(cache, name_buff); - } - DBUG_RETURN(error); -} - - -void close_cached_file(IO_CACHE *cache) -{ - DBUG_ENTER("close_cached_file"); - if (my_b_inited(cache)) - { - File file=cache->file; - cache->file= -1; /* Don't flush data */ - (void) end_io_cache(cache); - if (file >= 0) - { - (void) my_close(file,MYF(0)); -#ifdef CANT_DELETE_OPEN_FILES - if (cache->file_name) - { - (void) my_delete(cache->file_name,MYF(MY_WME | ME_NOINPUT)); - my_free(cache->file_name); - } -#endif - } - my_free(cache->dir); - my_free(cache->prefix); - } - DBUG_VOID_RETURN; -} diff --git a/deps/mysqllite/mysys/mf_dirname.c b/deps/mysqllite/mysys/mf_dirname.c deleted file mode 100644 index 5a9440483e4dc8..00000000000000 --- a/deps/mysqllite/mysys/mf_dirname.c +++ /dev/null @@ -1,154 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include - - /* Functions definied in this file */ - -size_t dirname_length(const char *name) -{ - register char *pos, *gpos; -#ifdef BASKSLASH_MBTAIL - CHARSET_INFO *fs= fs_character_set(); -#endif -#ifdef FN_DEVCHAR - if ((pos=(char*)strrchr(name,FN_DEVCHAR)) == 0) -#endif - pos=(char*) name-1; - - gpos= pos++; - for ( ; *pos ; pos++) /* Find last FN_LIBCHAR */ - { -#ifdef BASKSLASH_MBTAIL - uint l; - if (use_mb(fs) && (l= my_ismbchar(fs, pos, pos + 3))) - { - pos+= l - 1; - continue; - } -#endif - if (*pos == FN_LIBCHAR || *pos == '/') - gpos=pos; - } - return (size_t) (gpos+1-(char*) name); -} - - -/* - Gives directory part of filename. Directory ends with '/' - - SYNOPSIS - dirname_part() - to Store directory name here - name Original name - to_length Store length of 'to' here - - RETURN - # Length of directory part in 'name' -*/ - -size_t dirname_part(char *to, const char *name, size_t *to_res_length) -{ - size_t length; - DBUG_ENTER("dirname_part"); - DBUG_PRINT("enter",("'%s'",name)); - - length=dirname_length(name); - *to_res_length= (size_t) (convert_dirname(to, name, name+length) - to); - DBUG_RETURN(length); -} /* dirname */ - - -/* - Convert directory name to use under this system - - SYNPOSIS - convert_dirname() - to Store result here. Must be at least of size - min(FN_REFLEN, strlen(from) + 1) to make room - for adding FN_LIBCHAR at the end. - from Original filename. May be == to - from_end Pointer at end of filename (normally end \0) - - IMPLEMENTATION - If Windows converts '/' to '\' - Adds a FN_LIBCHAR to end if the result string if there isn't one - and the last isn't dev_char. - Copies data from 'from' until ASCII(0) for until from == from_end - If you want to use the whole 'from' string, just send NullS as the - last argument. - - If the result string is larger than FN_REFLEN -1, then it's cut. - - RETURN - Returns pointer to end \0 in to -*/ - -#ifndef FN_DEVCHAR -#define FN_DEVCHAR '\0' /* For easier code */ -#endif - -char *convert_dirname(char *to, const char *from, const char *from_end) -{ - char *to_org=to; -#ifdef BACKSLASH_MBTAIL - CHARSET_INFO *fs= fs_character_set(); -#endif - DBUG_ENTER("convert_dirname"); - - /* We use -2 here, becasue we need place for the last FN_LIBCHAR */ - if (!from_end || (from_end - from) > FN_REFLEN-2) - from_end=from+FN_REFLEN -2; - -#if FN_LIBCHAR != '/' - { - for (; from != from_end && *from ; from++) - { - if (*from == '/') - *to++= FN_LIBCHAR; - else - { -#ifdef BACKSLASH_MBTAIL - uint l; - if (use_mb(fs) && (l= my_ismbchar(fs, from, from + 3))) - { - memmove(to, from, l); - to+= l; - from+= l - 1; - to_org= to; /* Don't look inside mbchar */ - } - else -#endif - { - *to++= *from; - } - } - } - *to=0; - } -#else - /* This is ok even if to == from, becasue we need to cut the string */ - to= strmake(to, from, (size_t) (from_end-from)); -#endif - - /* Add FN_LIBCHAR to the end of directory path */ - if (to != to_org && (to[-1] != FN_LIBCHAR && to[-1] != FN_DEVCHAR)) - { - *to++=FN_LIBCHAR; - *to=0; - } - DBUG_RETURN(to); /* Pointer to end of dir */ -} /* convert_dirname */ diff --git a/deps/mysqllite/mysys/mf_fn_ext.c b/deps/mysqllite/mysys/mf_fn_ext.c deleted file mode 100644 index c872f2993c4cd1..00000000000000 --- a/deps/mysqllite/mysys/mf_fn_ext.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "mysys_priv.h" -#include - -/* - Return a pointer to the extension of the filename. - - SYNOPSIS - fn_ext() - name Name of file - - DESCRIPTION - The extension is defined as everything after the first extension character - (normally '.') after the directory name. - - RETURN VALUES - Pointer to to the extension character. If there isn't any extension, - points at the end ASCII(0) of the filename. -*/ - -char *fn_ext(const char *name) -{ - register const char *pos, *gpos; - DBUG_ENTER("fn_ext"); - DBUG_PRINT("mfunkt",("name: '%s'",name)); - -#if defined(FN_DEVCHAR) || defined(BASKSLASH_MBTAIL) - { - char buff[FN_REFLEN]; - size_t res_length; - gpos= name+ dirname_part(buff,(char*) name, &res_length); - } -#else - if (!(gpos= strrchr(name, FN_LIBCHAR))) - gpos= name; -#endif - pos=strchr(gpos,FN_EXTCHAR); - DBUG_RETURN((char*) (pos ? pos : strend(gpos))); -} /* fn_ext */ diff --git a/deps/mysqllite/mysys/mf_format.c b/deps/mysqllite/mysys/mf_format.c deleted file mode 100644 index 6afa2938fa3aad..00000000000000 --- a/deps/mysqllite/mysys/mf_format.c +++ /dev/null @@ -1,142 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include - -/* - Formats a filename with possible replace of directory of extension - Function can handle the case where 'to' == 'name' - For a description of the flag values, consult my_sys.h - The arguments should be in unix format. -*/ - -char * fn_format(char * to, const char *name, const char *dir, - const char *extension, uint flag) -{ - char dev[FN_REFLEN], buff[FN_REFLEN], *pos, *startpos; - const char *ext; - reg1 size_t length; - size_t dev_length; - DBUG_ENTER("fn_format"); - DBUG_PRINT("enter",("name: %s dir: %s extension: %s flag: %d", - name,dir,extension,flag)); - - /* Copy and skip directory */ - name+=(length=dirname_part(dev, (startpos=(char *) name), &dev_length)); - if (length == 0 || (flag & MY_REPLACE_DIR)) - { - /* Use given directory */ - convert_dirname(dev,dir,NullS); /* Fix to this OS */ - } - else if ((flag & MY_RELATIVE_PATH) && !test_if_hard_path(dev)) - { - /* Put 'dir' before the given path */ - strmake(buff,dev,sizeof(buff)-1); - pos=convert_dirname(dev,dir,NullS); - strmake(pos,buff,sizeof(buff)-1- (int) (pos-dev)); - } - - if (flag & MY_PACK_FILENAME) - pack_dirname(dev,dev); /* Put in ./.. and ~/.. */ - if (flag & MY_UNPACK_FILENAME) - (void) unpack_dirname(dev,dev); /* Replace ~/.. with dir */ - - if (!(flag & MY_APPEND_EXT) && - (pos= (char*) strchr(name,FN_EXTCHAR)) != NullS) - { - if ((flag & MY_REPLACE_EXT) == 0) /* If we should keep old ext */ - { - length=strlength(name); /* Use old extension */ - ext = ""; - } - else - { - length= (size_t) (pos-(char*) name); /* Change extension */ - ext= extension; - } - } - else - { - length=strlength(name); /* No ext, use the now one */ - ext=extension; - } - - if (strlen(dev)+length+strlen(ext) >= FN_REFLEN || length >= FN_LEN ) - { - /* To long path, return original or NULL */ - size_t tmp_length; - if (flag & MY_SAFE_PATH) - DBUG_RETURN(NullS); - tmp_length= strlength(startpos); - DBUG_PRINT("error",("dev: '%s' ext: '%s' length: %u",dev,ext, - (uint) length)); - (void) strmake(to,startpos,min(tmp_length,FN_REFLEN-1)); - } - else - { - if (to == startpos) - { - bmove(buff,(uchar*) name,length); /* Save name for last copy */ - name=buff; - } - pos=strmake(strmov(to,dev),name,length); - (void) strmov(pos,ext); /* Don't convert extension */ - } - /* - If MY_RETURN_REAL_PATH and MY_RESOLVE_SYMLINK is given, only do - realpath if the file is a symbolic link - */ - if (flag & MY_RETURN_REAL_PATH) - (void) my_realpath(to, to, MYF(flag & MY_RESOLVE_SYMLINKS ? - MY_RESOLVE_LINK: 0)); - else if (flag & MY_RESOLVE_SYMLINKS) - { - strmov(buff,to); - (void) my_readlink(to, buff, MYF(0)); - } - DBUG_RETURN(to); -} /* fn_format */ - - -/* - strlength(const string str) - Return length of string with end-space:s not counted. -*/ - -size_t strlength(const char *str) -{ - reg1 const char * pos; - reg2 const char * found; - DBUG_ENTER("strlength"); - - pos= found= str; - - while (*pos) - { - if (*pos != ' ') - { - while (*++pos && *pos != ' ') {}; - if (!*pos) - { - found=pos; /* String ends here */ - break; - } - } - found=pos; - while (*++pos == ' ') {}; - } - DBUG_RETURN((size_t) (found - str)); -} /* strlength */ diff --git a/deps/mysqllite/mysys/mf_getdate.c b/deps/mysqllite/mysys/mf_getdate.c deleted file mode 100644 index 9475bebd107d70..00000000000000 --- a/deps/mysqllite/mysys/mf_getdate.c +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Get date in a printable form: yyyy-mm-dd hh:mm:ss */ - -#include "mysys_priv.h" -#include - -/* - get date as string - - SYNOPSIS - get_date() - to - string where date will be written - flag - format of date: - If flag & GETDATE_TIME Return date and time - If flag & GETDATE_SHORT_DATE Return short date format YYMMDD - If flag & GETDATE_HHMMSSTIME Return time in HHMMDD format. - If flag & GETDATE_GMT Date/time in GMT - If flag & GETDATE_FIXEDLENGTH Return fixed length date/time - date - for conversion -*/ - - -void get_date(register char * to, int flag, time_t date) -{ - reg2 struct tm *start_time; - time_t skr; -#if defined(HAVE_LOCALTIME_R) && defined(_REENTRANT) - struct tm tm_tmp; -#endif - - skr=date ? (time_t) date : my_time(0); -#if defined(HAVE_LOCALTIME_R) && defined(_REENTRANT) - if (flag & GETDATE_GMT) - gmtime_r(&skr,&tm_tmp); - else - localtime_r(&skr,&tm_tmp); - start_time= &tm_tmp; -#else - if (flag & GETDATE_GMT) - start_time= gmtime(&skr); - else - start_time= localtime(&skr); -#endif - if (flag & GETDATE_SHORT_DATE) - sprintf(to,"%02d%02d%02d", - start_time->tm_year % 100, - start_time->tm_mon+1, - start_time->tm_mday); - else - sprintf(to, ((flag & GETDATE_FIXEDLENGTH) ? - "%4d-%02d-%02d" : "%d-%02d-%02d"), - start_time->tm_year+1900, - start_time->tm_mon+1, - start_time->tm_mday); - if (flag & GETDATE_DATE_TIME) - sprintf(strend(to), - ((flag & GETDATE_FIXEDLENGTH) ? - " %02d:%02d:%02d" : " %2d:%02d:%02d"), - start_time->tm_hour, - start_time->tm_min, - start_time->tm_sec); - else if (flag & GETDATE_HHMMSSTIME) - sprintf(strend(to),"%02d%02d%02d", - start_time->tm_hour, - start_time->tm_min, - start_time->tm_sec); -} /* get_date */ diff --git a/deps/mysqllite/mysys/mf_iocache.c b/deps/mysqllite/mysys/mf_iocache.c deleted file mode 100644 index 62e51ffb629fc0..00000000000000 --- a/deps/mysqllite/mysys/mf_iocache.c +++ /dev/null @@ -1,1949 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Cashing of files with only does (sequential) read or writes of fixed- - length records. A read isn't allowed to go over file-length. A read is ok - if it ends at file-length and next read can try to read after file-length - (and get a EOF-error). - Possibly use of asyncronic io. - macros for read and writes for faster io. - Used instead of FILE when reading or writing whole files. - This code makes mf_rec_cache obsolete (currently only used by ISAM) - One can change info->pos_in_file to a higher value to skip bytes in file if - also info->read_pos is set to info->read_end. - If called through open_cached_file(), then the temporary file will - only be created if a write exeeds the file buffer or if one calls - my_b_flush_io_cache(). - - If one uses SEQ_READ_APPEND, then two buffers are allocated, one for - reading and another for writing. Reads are first done from disk and - then done from the write buffer. This is an efficient way to read - from a log file when one is writing to it at the same time. - For this to work, the file has to be opened in append mode! - Note that when one uses SEQ_READ_APPEND, one MUST write using - my_b_append ! This is needed because we need to lock the mutex - every time we access the write buffer. - -TODO: - When one SEQ_READ_APPEND and we are reading and writing at the same time, - each time the write buffer gets full and it's written to disk, we will - always do a disk read to read a part of the buffer from disk to the - read buffer. - This should be fixed so that when we do a my_b_flush_io_cache() and - we have been reading the write buffer, we should transfer the rest of the - write buffer to the read buffer before we start to reuse it. -*/ - -#include "mysys_priv.h" -#include -#ifdef HAVE_AIOWAIT -#include "mysys_err.h" -static void my_aiowait(my_aio_result *result); -#endif -#include - -#define lock_append_buffer(info) \ - mysql_mutex_lock(&(info)->append_buffer_lock) -#define unlock_append_buffer(info) \ - mysql_mutex_unlock(&(info)->append_buffer_lock) - -#define IO_ROUND_UP(X) (((X)+IO_SIZE-1) & ~(IO_SIZE-1)) -#define IO_ROUND_DN(X) ( (X) & ~(IO_SIZE-1)) - -/* - Setup internal pointers inside IO_CACHE - - SYNOPSIS - setup_io_cache() - info IO_CACHE handler - - NOTES - This is called on automaticly on init or reinit of IO_CACHE - It must be called externally if one moves or copies an IO_CACHE - object. -*/ - -void setup_io_cache(IO_CACHE* info) -{ - /* Ensure that my_b_tell() and my_b_bytes_in_cache works */ - if (info->type == WRITE_CACHE) - { - info->current_pos= &info->write_pos; - info->current_end= &info->write_end; - } - else - { - info->current_pos= &info->read_pos; - info->current_end= &info->read_end; - } -} - - -static void -init_functions(IO_CACHE* info) -{ - enum cache_type type= info->type; - switch (type) { - case READ_NET: - /* - Must be initialized by the caller. The problem is that - _my_b_net_read has to be defined in sql directory because of - the dependency on THD, and therefore cannot be visible to - programs that link against mysys but know nothing about THD, such - as myisamchk - */ - break; - case SEQ_READ_APPEND: - info->read_function = _my_b_seq_read; - info->write_function = 0; /* Force a core if used */ - break; - default: - info->read_function = info->share ? _my_b_read_r : _my_b_read; - info->write_function = _my_b_write; - } - - setup_io_cache(info); -} - - -/* - Initialize an IO_CACHE object - - SYNOPSOS - init_io_cache() - info cache handler to initialize - file File that should be associated to to the handler - If == -1 then real_open_cached_file() - will be called when it's time to open file. - cachesize Size of buffer to allocate for read/write - If == 0 then use my_default_record_cache_size - type Type of cache - seek_offset Where cache should start reading/writing - use_async_io Set to 1 of we should use async_io (if avaiable) - cache_myflags Bitmap of differnt flags - MY_WME | MY_FAE | MY_NABP | MY_FNABP | - MY_DONT_CHECK_FILESIZE - - RETURN - 0 ok - # error -*/ - -int init_io_cache(IO_CACHE *info, File file, size_t cachesize, - enum cache_type type, my_off_t seek_offset, - pbool use_async_io, myf cache_myflags) -{ - size_t min_cache; - my_off_t pos; - my_off_t end_of_file= ~(my_off_t) 0; - DBUG_ENTER("init_io_cache"); - DBUG_PRINT("enter",("cache: 0x%lx type: %d pos: %ld", - (ulong) info, (int) type, (ulong) seek_offset)); - - info->file= file; - info->type= TYPE_NOT_SET; /* Don't set it until mutex are created */ - info->pos_in_file= seek_offset; - info->pre_close = info->pre_read = info->post_read = 0; - info->arg = 0; - info->alloced_buffer = 0; - info->buffer=0; - info->seek_not_done= 0; - - if (file >= 0) - { - pos= mysql_file_tell(file, MYF(0)); - if ((pos == (my_off_t) -1) && (my_errno == ESPIPE)) - { - /* - This kind of object doesn't support seek() or tell(). Don't set a - flag that will make us again try to seek() later and fail. - */ - info->seek_not_done= 0; - /* - Additionally, if we're supposed to start somewhere other than the - the beginning of whatever this file is, then somebody made a bad - assumption. - */ - DBUG_ASSERT(seek_offset == 0); - } - else - info->seek_not_done= test(seek_offset != pos); - } - - info->disk_writes= 0; - info->share=0; - - if (!cachesize && !(cachesize= my_default_record_cache_size)) - DBUG_RETURN(1); /* No cache requested */ - min_cache=use_async_io ? IO_SIZE*4 : IO_SIZE*2; - if (type == READ_CACHE || type == SEQ_READ_APPEND) - { /* Assume file isn't growing */ - if (!(cache_myflags & MY_DONT_CHECK_FILESIZE)) - { - /* Calculate end of file to avoid allocating oversized buffers */ - end_of_file= mysql_file_seek(file, 0L, MY_SEEK_END, MYF(0)); - /* Need to reset seek_not_done now that we just did a seek. */ - info->seek_not_done= end_of_file == seek_offset ? 0 : 1; - if (end_of_file < seek_offset) - end_of_file=seek_offset; - /* Trim cache size if the file is very small */ - if ((my_off_t) cachesize > end_of_file-seek_offset+IO_SIZE*2-1) - { - cachesize= (size_t) (end_of_file-seek_offset)+IO_SIZE*2-1; - use_async_io=0; /* No need to use async */ - } - } - } - cache_myflags &= ~MY_DONT_CHECK_FILESIZE; - if (type != READ_NET && type != WRITE_NET) - { - /* Retry allocating memory in smaller blocks until we get one */ - cachesize= ((cachesize + min_cache-1) & ~(min_cache-1)); - for (;;) - { - size_t buffer_block; - /* - Unset MY_WAIT_IF_FULL bit if it is set, to prevent conflict with - MY_ZEROFILL. - */ - myf flags= (myf) (cache_myflags & ~(MY_WME | MY_WAIT_IF_FULL)); - - if (cachesize < min_cache) - cachesize = min_cache; - buffer_block= cachesize; - if (type == SEQ_READ_APPEND) - buffer_block *= 2; - if (cachesize == min_cache) - flags|= (myf) MY_WME; - - if ((info->buffer= (uchar*) my_malloc(buffer_block, flags)) != 0) - { - info->write_buffer=info->buffer; - if (type == SEQ_READ_APPEND) - info->write_buffer = info->buffer + cachesize; - info->alloced_buffer=1; - break; /* Enough memory found */ - } - if (cachesize == min_cache) - DBUG_RETURN(2); /* Can't alloc cache */ - /* Try with less memory */ - cachesize= (cachesize*3/4 & ~(min_cache-1)); - } - } - - DBUG_PRINT("info",("init_io_cache: cachesize = %lu", (ulong) cachesize)); - info->read_length=info->buffer_length=cachesize; - info->myflags=cache_myflags & ~(MY_NABP | MY_FNABP); - info->request_pos= info->read_pos= info->write_pos = info->buffer; - if (type == SEQ_READ_APPEND) - { - info->append_read_pos = info->write_pos = info->write_buffer; - info->write_end = info->write_buffer + info->buffer_length; - mysql_mutex_init(key_IO_CACHE_append_buffer_lock, - &info->append_buffer_lock, MY_MUTEX_INIT_FAST); - } -#if defined(SAFE_MUTEX) - else - { - /* Clear mutex so that safe_mutex will notice that it's not initialized */ - bzero((char*) &info->append_buffer_lock, sizeof(info)); - } -#endif - - if (type == WRITE_CACHE) - info->write_end= - info->buffer+info->buffer_length- (seek_offset & (IO_SIZE-1)); - else - info->read_end=info->buffer; /* Nothing in cache */ - - /* End_of_file may be changed by user later */ - info->end_of_file= end_of_file; - info->error=0; - info->type= type; - init_functions(info); -#ifdef HAVE_AIOWAIT - if (use_async_io && ! my_disable_async_io) - { - DBUG_PRINT("info",("Using async io")); - info->read_length/=2; - info->read_function=_my_b_async_read; - } - info->inited=info->aio_result.pending=0; -#endif - DBUG_RETURN(0); -} /* init_io_cache */ - - /* Wait until current request is ready */ - -#ifdef HAVE_AIOWAIT -static void my_aiowait(my_aio_result *result) -{ - if (result->pending) - { - struct aio_result_t *tmp; - for (;;) - { - if ((int) (tmp=aiowait((struct timeval *) 0)) == -1) - { - if (errno == EINTR) - continue; - DBUG_PRINT("error",("No aio request, error: %d",errno)); - result->pending=0; /* Assume everythings is ok */ - break; - } - ((my_aio_result*) tmp)->pending=0; - if ((my_aio_result*) tmp == result) - break; - } - } - return; -} -#endif - - -/* - Use this to reset cache to re-start reading or to change the type - between READ_CACHE <-> WRITE_CACHE - If we are doing a reinit of a cache where we have the start of the file - in the cache, we are reusing this memory without flushing it to disk. -*/ - -my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type, - my_off_t seek_offset, - pbool use_async_io __attribute__((unused)), - pbool clear_cache) -{ - DBUG_ENTER("reinit_io_cache"); - DBUG_PRINT("enter",("cache: 0x%lx type: %d seek_offset: %lu clear_cache: %d", - (ulong) info, type, (ulong) seek_offset, - (int) clear_cache)); - - /* One can't do reinit with the following types */ - DBUG_ASSERT(type != READ_NET && info->type != READ_NET && - type != WRITE_NET && info->type != WRITE_NET && - type != SEQ_READ_APPEND && info->type != SEQ_READ_APPEND); - - /* If the whole file is in memory, avoid flushing to disk */ - if (! clear_cache && - seek_offset >= info->pos_in_file && - seek_offset <= my_b_tell(info)) - { - /* Reuse current buffer without flushing it to disk */ - uchar *pos; - if (info->type == WRITE_CACHE && type == READ_CACHE) - { - info->read_end=info->write_pos; - info->end_of_file=my_b_tell(info); - /* - Trigger a new seek only if we have a valid - file handle. - */ - info->seek_not_done= (info->file != -1); - } - else if (type == WRITE_CACHE) - { - if (info->type == READ_CACHE) - { - info->write_end=info->write_buffer+info->buffer_length; - info->seek_not_done=1; - } - info->end_of_file = ~(my_off_t) 0; - } - pos=info->request_pos+(seek_offset-info->pos_in_file); - if (type == WRITE_CACHE) - info->write_pos=pos; - else - info->read_pos= pos; -#ifdef HAVE_AIOWAIT - my_aiowait(&info->aio_result); /* Wait for outstanding req */ -#endif - } - else - { - /* - If we change from WRITE_CACHE to READ_CACHE, assume that everything - after the current positions should be ignored - */ - if (info->type == WRITE_CACHE && type == READ_CACHE) - info->end_of_file=my_b_tell(info); - /* flush cache if we want to reuse it */ - if (!clear_cache && my_b_flush_io_cache(info,1)) - DBUG_RETURN(1); - info->pos_in_file=seek_offset; - /* Better to do always do a seek */ - info->seek_not_done=1; - info->request_pos=info->read_pos=info->write_pos=info->buffer; - if (type == READ_CACHE) - { - info->read_end=info->buffer; /* Nothing in cache */ - } - else - { - info->write_end=(info->buffer + info->buffer_length - - (seek_offset & (IO_SIZE-1))); - info->end_of_file= ~(my_off_t) 0; - } - } - info->type=type; - info->error=0; - init_functions(info); - -#ifdef HAVE_AIOWAIT - if (use_async_io && ! my_disable_async_io && - ((ulong) info->buffer_length < - (ulong) (info->end_of_file - seek_offset))) - { - info->read_length=info->buffer_length/2; - info->read_function=_my_b_async_read; - } - info->inited=0; -#endif - DBUG_RETURN(0); -} /* reinit_io_cache */ - - - -/* - Read buffered. - - SYNOPSIS - _my_b_read() - info IO_CACHE pointer - Buffer Buffer to retrieve count bytes from file - Count Number of bytes to read into Buffer - - NOTE - This function is only called from the my_b_read() macro when there - isn't enough characters in the buffer to satisfy the request. - - WARNING - - When changing this function, be careful with handling file offsets - (end-of_file, pos_in_file). Do not cast them to possibly smaller - types than my_off_t unless you can be sure that their value fits. - Same applies to differences of file offsets. - - When changing this function, check _my_b_read_r(). It might need the - same change. - - RETURN - 0 we succeeded in reading all data - 1 Error: couldn't read requested characters. In this case: - If info->error == -1, we got a read error. - Otherwise info->error contains the number of bytes in Buffer. -*/ - -int _my_b_read(register IO_CACHE *info, uchar *Buffer, size_t Count) -{ - size_t length,diff_length,left_length, max_length; - my_off_t pos_in_file; - DBUG_ENTER("_my_b_read"); - - /* If the buffer is not empty yet, copy what is available. */ - if ((left_length= (size_t) (info->read_end-info->read_pos))) - { - DBUG_ASSERT(Count >= left_length); /* User is not using my_b_read() */ - memcpy(Buffer,info->read_pos, left_length); - Buffer+=left_length; - Count-=left_length; - } - - /* pos_in_file always point on where info->buffer was read */ - pos_in_file=info->pos_in_file+ (size_t) (info->read_end - info->buffer); - - /* - Whenever a function which operates on IO_CACHE flushes/writes - some part of the IO_CACHE to disk it will set the property - "seek_not_done" to indicate this to other functions operating - on the IO_CACHE. - */ - if (info->seek_not_done) - { - if ((mysql_file_seek(info->file, pos_in_file, MY_SEEK_SET, MYF(0)) - != MY_FILEPOS_ERROR)) - { - /* No error, reset seek_not_done flag. */ - info->seek_not_done= 0; - } - else - { - /* - If the seek failed and the error number is ESPIPE, it is because - info->file is a pipe or socket or FIFO. We never should have tried - to seek on that. See Bugs#25807 and #22828 for more info. - */ - DBUG_ASSERT(my_errno != ESPIPE); - info->error= -1; - DBUG_RETURN(1); - } - } - - /* - Calculate, how much we are within a IO_SIZE block. Ideally this - should be zero. - */ - diff_length= (size_t) (pos_in_file & (IO_SIZE-1)); - - /* - If more than a block plus the rest of the current block is wanted, - we do read directly, without filling the buffer. - */ - if (Count >= (size_t) (IO_SIZE+(IO_SIZE-diff_length))) - { /* Fill first intern buffer */ - size_t read_length; - if (info->end_of_file <= pos_in_file) - { - /* End of file. Return, what we did copy from the buffer. */ - info->error= (int) left_length; - DBUG_RETURN(1); - } - /* - Crop the wanted count to a multiple of IO_SIZE and subtract, - what we did already read from a block. That way, the read will - end aligned with a block. - */ - length=(Count & (size_t) ~(IO_SIZE-1))-diff_length; - if ((read_length= mysql_file_read(info->file,Buffer, length, info->myflags)) - != length) - { - /* - If we didn't get, what we wanted, we either return -1 for a read - error, or (it's end of file), how much we got in total. - */ - info->error= (read_length == (size_t) -1 ? -1 : - (int) (read_length+left_length)); - DBUG_RETURN(1); - } - Count-=length; - Buffer+=length; - pos_in_file+=length; - left_length+=length; - diff_length=0; - } - - /* - At this point, we want less than one and a partial block. - We will read a full cache, minus the number of bytes, we are - within a block already. So we will reach new alignment. - */ - max_length= info->read_length-diff_length; - /* We will not read past end of file. */ - if (info->type != READ_FIFO && - max_length > (info->end_of_file - pos_in_file)) - max_length= (size_t) (info->end_of_file - pos_in_file); - /* - If there is nothing left to read, - we either are done, or we failed to fulfill the request. - Otherwise, we read max_length into the cache. - */ - if (!max_length) - { - if (Count) - { - /* We couldn't fulfil the request. Return, how much we got. */ - info->error= left_length; - DBUG_RETURN(1); - } - length=0; /* Didn't read any chars */ - } - else if ((length= mysql_file_read(info->file,info->buffer, max_length, - info->myflags)) < Count || - length == (size_t) -1) - { - /* - We got an read error, or less than requested (end of file). - If not a read error, copy, what we got. - */ - if (length != (size_t) -1) - memcpy(Buffer, info->buffer, length); - info->pos_in_file= pos_in_file; - /* For a read error, return -1, otherwise, what we got in total. */ - info->error= length == (size_t) -1 ? -1 : (int) (length+left_length); - info->read_pos=info->read_end=info->buffer; - DBUG_RETURN(1); - } - /* - Count is the remaining number of bytes requested. - length is the amount of data in the cache. - Read Count bytes from the cache. - */ - info->read_pos=info->buffer+Count; - info->read_end=info->buffer+length; - info->pos_in_file=pos_in_file; - memcpy(Buffer, info->buffer, Count); - DBUG_RETURN(0); -} - - -/* - Prepare IO_CACHE for shared use. - - SYNOPSIS - init_io_cache_share() - read_cache A read cache. This will be copied for - every thread after setup. - cshare The share. - write_cache If non-NULL a write cache that is to be - synchronized with the read caches. - num_threads Number of threads sharing the cache - including the write thread if any. - - DESCRIPTION - - The shared cache is used so: One IO_CACHE is initialized with - init_io_cache(). This includes the allocation of a buffer. Then a - share is allocated and init_io_cache_share() is called with the io - cache and the share. Then the io cache is copied for each thread. So - every thread has its own copy of IO_CACHE. But the allocated buffer - is shared because cache->buffer is the same for all caches. - - One thread reads data from the file into the buffer. All threads - read from the buffer, but every thread maintains its own set of - pointers into the buffer. When all threads have used up the buffer - contents, one of the threads reads the next block of data into the - buffer. To accomplish this, each thread enters the cache lock before - accessing the buffer. They wait in lock_io_cache() until all threads - joined the lock. The last thread entering the lock is in charge of - reading from file to buffer. It wakes all threads when done. - - Synchronizing a write cache to the read caches works so: Whenever - the write buffer needs a flush, the write thread enters the lock and - waits for all other threads to enter the lock too. They do this when - they have used up the read buffer. When all threads are in the lock, - the write thread copies the write buffer to the read buffer and - wakes all threads. - - share->running_threads is the number of threads not being in the - cache lock. When entering lock_io_cache() the number is decreased. - When the thread that fills the buffer enters unlock_io_cache() the - number is reset to the number of threads. The condition - running_threads == 0 means that all threads are in the lock. Bumping - up the number to the full count is non-intuitive. But increasing the - number by one for each thread that leaves the lock could lead to a - solo run of one thread. The last thread to join a lock reads from - file to buffer, wakes the other threads, processes the data in the - cache and enters the lock again. If no other thread left the lock - meanwhile, it would think it's the last one again and read the next - block... - - The share has copies of 'error', 'buffer', 'read_end', and - 'pos_in_file' from the thread that filled the buffer. We may not be - able to access this information directly from its cache because the - thread may be removed from the share before the variables could be - copied by all other threads. Or, if a write buffer is synchronized, - it would change its 'pos_in_file' after waking the other threads, - possibly before they could copy its value. - - However, the 'buffer' variable in the share is for a synchronized - write cache. It needs to know where to put the data. Otherwise it - would need access to the read cache of one of the threads that is - not yet removed from the share. - - RETURN - void -*/ - -void init_io_cache_share(IO_CACHE *read_cache, IO_CACHE_SHARE *cshare, - IO_CACHE *write_cache, uint num_threads) -{ - DBUG_ENTER("init_io_cache_share"); - DBUG_PRINT("io_cache_share", ("read_cache: 0x%lx share: 0x%lx " - "write_cache: 0x%lx threads: %u", - (long) read_cache, (long) cshare, - (long) write_cache, num_threads)); - - DBUG_ASSERT(num_threads > 1); - DBUG_ASSERT(read_cache->type == READ_CACHE); - DBUG_ASSERT(!write_cache || (write_cache->type == WRITE_CACHE)); - - mysql_mutex_init(key_IO_CACHE_SHARE_mutex, - &cshare->mutex, MY_MUTEX_INIT_FAST); - mysql_cond_init(key_IO_CACHE_SHARE_cond, &cshare->cond, 0); - mysql_cond_init(key_IO_CACHE_SHARE_cond_writer, &cshare->cond_writer, 0); - - cshare->running_threads= num_threads; - cshare->total_threads= num_threads; - cshare->error= 0; /* Initialize. */ - cshare->buffer= read_cache->buffer; - cshare->read_end= NULL; /* See function comment of lock_io_cache(). */ - cshare->pos_in_file= 0; /* See function comment of lock_io_cache(). */ - cshare->source_cache= write_cache; /* Can be NULL. */ - - read_cache->share= cshare; - read_cache->read_function= _my_b_read_r; - read_cache->current_pos= NULL; - read_cache->current_end= NULL; - - if (write_cache) - write_cache->share= cshare; - - DBUG_VOID_RETURN; -} - - -/* - Remove a thread from shared access to IO_CACHE. - - SYNOPSIS - remove_io_thread() - cache The IO_CACHE to be removed from the share. - - NOTE - - Every thread must do that on exit for not to deadlock other threads. - - The last thread destroys the pthread resources. - - A writer flushes its cache first. - - RETURN - void -*/ - -void remove_io_thread(IO_CACHE *cache) -{ - IO_CACHE_SHARE *cshare= cache->share; - uint total; - DBUG_ENTER("remove_io_thread"); - - /* If the writer goes, it needs to flush the write cache. */ - if (cache == cshare->source_cache) - flush_io_cache(cache); - - mysql_mutex_lock(&cshare->mutex); - DBUG_PRINT("io_cache_share", ("%s: 0x%lx", - (cache == cshare->source_cache) ? - "writer" : "reader", (long) cache)); - - /* Remove from share. */ - total= --cshare->total_threads; - DBUG_PRINT("io_cache_share", ("remaining threads: %u", total)); - - /* Detach from share. */ - cache->share= NULL; - - /* If the writer goes, let the readers know. */ - if (cache == cshare->source_cache) - { - DBUG_PRINT("io_cache_share", ("writer leaves")); - cshare->source_cache= NULL; - } - - /* If all threads are waiting for me to join the lock, wake them. */ - if (!--cshare->running_threads) - { - DBUG_PRINT("io_cache_share", ("the last running thread leaves, wake all")); - mysql_cond_signal(&cshare->cond_writer); - mysql_cond_broadcast(&cshare->cond); - } - - mysql_mutex_unlock(&cshare->mutex); - - if (!total) - { - DBUG_PRINT("io_cache_share", ("last thread removed, destroy share")); - mysql_cond_destroy (&cshare->cond_writer); - mysql_cond_destroy (&cshare->cond); - mysql_mutex_destroy(&cshare->mutex); - } - - DBUG_VOID_RETURN; -} - - -/* - Lock IO cache and wait for all other threads to join. - - SYNOPSIS - lock_io_cache() - cache The cache of the thread entering the lock. - pos File position of the block to read. - Unused for the write thread. - - DESCRIPTION - - Wait for all threads to finish with the current buffer. We want - all threads to proceed in concert. The last thread to join - lock_io_cache() will read the block from file and all threads start - to use it. Then they will join again for reading the next block. - - The waiting threads detect a fresh buffer by comparing - cshare->pos_in_file with the position they want to process next. - Since the first block may start at position 0, we take - cshare->read_end as an additional condition. This variable is - initialized to NULL and will be set after a block of data is written - to the buffer. - - RETURN - 1 OK, lock in place, go ahead and read. - 0 OK, unlocked, another thread did the read. -*/ - -static int lock_io_cache(IO_CACHE *cache, my_off_t pos) -{ - IO_CACHE_SHARE *cshare= cache->share; - DBUG_ENTER("lock_io_cache"); - - /* Enter the lock. */ - mysql_mutex_lock(&cshare->mutex); - cshare->running_threads--; - DBUG_PRINT("io_cache_share", ("%s: 0x%lx pos: %lu running: %u", - (cache == cshare->source_cache) ? - "writer" : "reader", (long) cache, (ulong) pos, - cshare->running_threads)); - - if (cshare->source_cache) - { - /* A write cache is synchronized to the read caches. */ - - if (cache == cshare->source_cache) - { - /* The writer waits until all readers are here. */ - while (cshare->running_threads) - { - DBUG_PRINT("io_cache_share", ("writer waits in lock")); - mysql_cond_wait(&cshare->cond_writer, &cshare->mutex); - } - DBUG_PRINT("io_cache_share", ("writer awoke, going to copy")); - - /* Stay locked. Leave the lock later by unlock_io_cache(). */ - DBUG_RETURN(1); - } - - /* The last thread wakes the writer. */ - if (!cshare->running_threads) - { - DBUG_PRINT("io_cache_share", ("waking writer")); - mysql_cond_signal(&cshare->cond_writer); - } - - /* - Readers wait until the data is copied from the writer. Another - reason to stop waiting is the removal of the write thread. If this - happens, we leave the lock with old data in the buffer. - */ - while ((!cshare->read_end || (cshare->pos_in_file < pos)) && - cshare->source_cache) - { - DBUG_PRINT("io_cache_share", ("reader waits in lock")); - mysql_cond_wait(&cshare->cond, &cshare->mutex); - } - - /* - If the writer was removed from the share while this thread was - asleep, we need to simulate an EOF condition. The writer cannot - reset the share variables as they might still be in use by readers - of the last block. When we awake here then because the last - joining thread signalled us. If the writer is not the last, it - will not signal. So it is safe to clear the buffer here. - */ - if (!cshare->read_end || (cshare->pos_in_file < pos)) - { - DBUG_PRINT("io_cache_share", ("reader found writer removed. EOF")); - cshare->read_end= cshare->buffer; /* Empty buffer. */ - cshare->error= 0; /* EOF is not an error. */ - } - } - else - { - /* - There are read caches only. The last thread arriving in - lock_io_cache() continues with a locked cache and reads the block. - */ - if (!cshare->running_threads) - { - DBUG_PRINT("io_cache_share", ("last thread joined, going to read")); - /* Stay locked. Leave the lock later by unlock_io_cache(). */ - DBUG_RETURN(1); - } - - /* - All other threads wait until the requested block is read by the - last thread arriving. Another reason to stop waiting is the - removal of a thread. If this leads to all threads being in the - lock, we have to continue also. The first of the awaken threads - will then do the read. - */ - while ((!cshare->read_end || (cshare->pos_in_file < pos)) && - cshare->running_threads) - { - DBUG_PRINT("io_cache_share", ("reader waits in lock")); - mysql_cond_wait(&cshare->cond, &cshare->mutex); - } - - /* If the block is not yet read, continue with a locked cache and read. */ - if (!cshare->read_end || (cshare->pos_in_file < pos)) - { - DBUG_PRINT("io_cache_share", ("reader awoke, going to read")); - /* Stay locked. Leave the lock later by unlock_io_cache(). */ - DBUG_RETURN(1); - } - - /* Another thread did read the block already. */ - } - DBUG_PRINT("io_cache_share", ("reader awoke, going to process %u bytes", - (uint) (cshare->read_end ? (size_t) - (cshare->read_end - cshare->buffer) : - 0))); - - /* - Leave the lock. Do not call unlock_io_cache() later. The thread that - filled the buffer did this and marked all threads as running. - */ - mysql_mutex_unlock(&cshare->mutex); - DBUG_RETURN(0); -} - - -/* - Unlock IO cache. - - SYNOPSIS - unlock_io_cache() - cache The cache of the thread leaving the lock. - - NOTE - This is called by the thread that filled the buffer. It marks all - threads as running and awakes them. This must not be done by any - other thread. - - Do not signal cond_writer. Either there is no writer or the writer - is the only one who can call this function. - - The reason for resetting running_threads to total_threads before - waking all other threads is that it could be possible that this - thread is so fast with processing the buffer that it enters the lock - before even one other thread has left it. If every awoken thread - would increase running_threads by one, this thread could think that - he is again the last to join and would not wait for the other - threads to process the data. - - RETURN - void -*/ - -static void unlock_io_cache(IO_CACHE *cache) -{ - IO_CACHE_SHARE *cshare= cache->share; - DBUG_ENTER("unlock_io_cache"); - DBUG_PRINT("io_cache_share", ("%s: 0x%lx pos: %lu running: %u", - (cache == cshare->source_cache) ? - "writer" : "reader", - (long) cache, (ulong) cshare->pos_in_file, - cshare->total_threads)); - - cshare->running_threads= cshare->total_threads; - mysql_cond_broadcast(&cshare->cond); - mysql_mutex_unlock(&cshare->mutex); - DBUG_VOID_RETURN; -} - - -/* - Read from IO_CACHE when it is shared between several threads. - - SYNOPSIS - _my_b_read_r() - cache IO_CACHE pointer - Buffer Buffer to retrieve count bytes from file - Count Number of bytes to read into Buffer - - NOTE - This function is only called from the my_b_read() macro when there - isn't enough characters in the buffer to satisfy the request. - - IMPLEMENTATION - - It works as follows: when a thread tries to read from a file (that - is, after using all the data from the (shared) buffer), it just - hangs on lock_io_cache(), waiting for other threads. When the very - last thread attempts a read, lock_io_cache() returns 1, the thread - does actual IO and unlock_io_cache(), which signals all the waiting - threads that data is in the buffer. - - WARNING - - When changing this function, be careful with handling file offsets - (end-of_file, pos_in_file). Do not cast them to possibly smaller - types than my_off_t unless you can be sure that their value fits. - Same applies to differences of file offsets. (Bug #11527) - - When changing this function, check _my_b_read(). It might need the - same change. - - RETURN - 0 we succeeded in reading all data - 1 Error: can't read requested characters -*/ - -int _my_b_read_r(register IO_CACHE *cache, uchar *Buffer, size_t Count) -{ - my_off_t pos_in_file; - size_t length, diff_length, left_length; - IO_CACHE_SHARE *cshare= cache->share; - DBUG_ENTER("_my_b_read_r"); - - if ((left_length= (size_t) (cache->read_end - cache->read_pos))) - { - DBUG_ASSERT(Count >= left_length); /* User is not using my_b_read() */ - memcpy(Buffer, cache->read_pos, left_length); - Buffer+= left_length; - Count-= left_length; - } - while (Count) - { - size_t cnt, len; - - pos_in_file= cache->pos_in_file + (cache->read_end - cache->buffer); - diff_length= (size_t) (pos_in_file & (IO_SIZE-1)); - length=IO_ROUND_UP(Count+diff_length)-diff_length; - length= ((length <= cache->read_length) ? - length + IO_ROUND_DN(cache->read_length - length) : - length - IO_ROUND_UP(length - cache->read_length)); - if (cache->type != READ_FIFO && - (length > (cache->end_of_file - pos_in_file))) - length= (size_t) (cache->end_of_file - pos_in_file); - if (length == 0) - { - cache->error= (int) left_length; - DBUG_RETURN(1); - } - if (lock_io_cache(cache, pos_in_file)) - { - /* With a synchronized write/read cache we won't come here... */ - DBUG_ASSERT(!cshare->source_cache); - /* - ... unless the writer has gone before this thread entered the - lock. Simulate EOF in this case. It can be distinguished by - cache->file. - */ - if (cache->file < 0) - len= 0; - else - { - /* - Whenever a function which operates on IO_CACHE flushes/writes - some part of the IO_CACHE to disk it will set the property - "seek_not_done" to indicate this to other functions operating - on the IO_CACHE. - */ - if (cache->seek_not_done) - { - if (mysql_file_seek(cache->file, pos_in_file, MY_SEEK_SET, MYF(0)) - == MY_FILEPOS_ERROR) - { - cache->error= -1; - unlock_io_cache(cache); - DBUG_RETURN(1); - } - } - len= mysql_file_read(cache->file, cache->buffer, length, cache->myflags); - } - DBUG_PRINT("io_cache_share", ("read %lu bytes", (ulong) len)); - - cache->read_end= cache->buffer + (len == (size_t) -1 ? 0 : len); - cache->error= (len == length ? 0 : (int) len); - cache->pos_in_file= pos_in_file; - - /* Copy important values to the share. */ - cshare->error= cache->error; - cshare->read_end= cache->read_end; - cshare->pos_in_file= pos_in_file; - - /* Mark all threads as running and wake them. */ - unlock_io_cache(cache); - } - else - { - /* - With a synchronized write/read cache readers always come here. - Copy important values from the share. - */ - cache->error= cshare->error; - cache->read_end= cshare->read_end; - cache->pos_in_file= cshare->pos_in_file; - - len= ((cache->error == -1) ? (size_t) -1 : - (size_t) (cache->read_end - cache->buffer)); - } - cache->read_pos= cache->buffer; - cache->seek_not_done= 0; - if (len == 0 || len == (size_t) -1) - { - DBUG_PRINT("io_cache_share", ("reader error. len %lu left %lu", - (ulong) len, (ulong) left_length)); - cache->error= (int) left_length; - DBUG_RETURN(1); - } - cnt= (len > Count) ? Count : len; - memcpy(Buffer, cache->read_pos, cnt); - Count -= cnt; - Buffer+= cnt; - left_length+= cnt; - cache->read_pos+= cnt; - } - DBUG_RETURN(0); -} - - -/* - Copy data from write cache to read cache. - - SYNOPSIS - copy_to_read_buffer() - write_cache The write cache. - write_buffer The source of data, mostly the cache buffer. - write_length The number of bytes to copy. - - NOTE - The write thread will wait for all read threads to join the cache - lock. Then it copies the data over and wakes the read threads. - - RETURN - void -*/ - -static void copy_to_read_buffer(IO_CACHE *write_cache, - const uchar *write_buffer, size_t write_length) -{ - IO_CACHE_SHARE *cshare= write_cache->share; - - DBUG_ASSERT(cshare->source_cache == write_cache); - /* - write_length is usually less or equal to buffer_length. - It can be bigger if _my_b_write() is called with a big length. - */ - while (write_length) - { - size_t copy_length= min(write_length, write_cache->buffer_length); - int __attribute__((unused)) rc; - - rc= lock_io_cache(write_cache, write_cache->pos_in_file); - /* The writing thread does always have the lock when it awakes. */ - DBUG_ASSERT(rc); - - memcpy(cshare->buffer, write_buffer, copy_length); - - cshare->error= 0; - cshare->read_end= cshare->buffer + copy_length; - cshare->pos_in_file= write_cache->pos_in_file; - - /* Mark all threads as running and wake them. */ - unlock_io_cache(write_cache); - - write_buffer+= copy_length; - write_length-= copy_length; - } -} - - -/* - Do sequential read from the SEQ_READ_APPEND cache. - - We do this in three stages: - - first read from info->buffer - - then if there are still data to read, try the file descriptor - - afterwards, if there are still data to read, try append buffer - - RETURNS - 0 Success - 1 Failed to read -*/ - -int _my_b_seq_read(register IO_CACHE *info, uchar *Buffer, size_t Count) -{ - size_t length, diff_length, left_length, save_count, max_length; - my_off_t pos_in_file; - save_count=Count; - - /* first, read the regular buffer */ - if ((left_length=(size_t) (info->read_end-info->read_pos))) - { - DBUG_ASSERT(Count > left_length); /* User is not using my_b_read() */ - memcpy(Buffer,info->read_pos, left_length); - Buffer+=left_length; - Count-=left_length; - } - lock_append_buffer(info); - - /* pos_in_file always point on where info->buffer was read */ - if ((pos_in_file=info->pos_in_file + - (size_t) (info->read_end - info->buffer)) >= info->end_of_file) - goto read_append_buffer; - - /* - With read-append cache we must always do a seek before we read, - because the write could have moved the file pointer astray - */ - if (mysql_file_seek(info->file, pos_in_file, MY_SEEK_SET, MYF(0)) == MY_FILEPOS_ERROR) - { - info->error= -1; - unlock_append_buffer(info); - return (1); - } - info->seek_not_done=0; - - diff_length= (size_t) (pos_in_file & (IO_SIZE-1)); - - /* now the second stage begins - read from file descriptor */ - if (Count >= (size_t) (IO_SIZE+(IO_SIZE-diff_length))) - { - /* Fill first intern buffer */ - size_t read_length; - - length=(Count & (size_t) ~(IO_SIZE-1))-diff_length; - if ((read_length= mysql_file_read(info->file,Buffer, length, - info->myflags)) == (size_t) -1) - { - info->error= -1; - unlock_append_buffer(info); - return 1; - } - Count-=read_length; - Buffer+=read_length; - pos_in_file+=read_length; - - if (read_length != length) - { - /* - We only got part of data; Read the rest of the data from the - write buffer - */ - goto read_append_buffer; - } - left_length+=length; - diff_length=0; - } - - max_length= info->read_length-diff_length; - if (max_length > (info->end_of_file - pos_in_file)) - max_length= (size_t) (info->end_of_file - pos_in_file); - if (!max_length) - { - if (Count) - goto read_append_buffer; - length=0; /* Didn't read any more chars */ - } - else - { - length= mysql_file_read(info->file,info->buffer, max_length, info->myflags); - if (length == (size_t) -1) - { - info->error= -1; - unlock_append_buffer(info); - return 1; - } - if (length < Count) - { - memcpy(Buffer, info->buffer, length); - Count -= length; - Buffer += length; - - /* - added the line below to make - DBUG_ASSERT(pos_in_file==info->end_of_file) pass. - otherwise this does not appear to be needed - */ - pos_in_file += length; - goto read_append_buffer; - } - } - unlock_append_buffer(info); - info->read_pos=info->buffer+Count; - info->read_end=info->buffer+length; - info->pos_in_file=pos_in_file; - memcpy(Buffer,info->buffer,(size_t) Count); - return 0; - -read_append_buffer: - - /* - Read data from the current write buffer. - Count should never be == 0 here (The code will work even if count is 0) - */ - - { - /* First copy the data to Count */ - size_t len_in_buff = (size_t) (info->write_pos - info->append_read_pos); - size_t copy_len; - size_t transfer_len; - - DBUG_ASSERT(info->append_read_pos <= info->write_pos); - /* - TODO: figure out if the assert below is needed or correct. - */ - DBUG_ASSERT(pos_in_file == info->end_of_file); - copy_len=min(Count, len_in_buff); - memcpy(Buffer, info->append_read_pos, copy_len); - info->append_read_pos += copy_len; - Count -= copy_len; - if (Count) - info->error = save_count - Count; - - /* Fill read buffer with data from write buffer */ - memcpy(info->buffer, info->append_read_pos, - (size_t) (transfer_len=len_in_buff - copy_len)); - info->read_pos= info->buffer; - info->read_end= info->buffer+transfer_len; - info->append_read_pos=info->write_pos; - info->pos_in_file=pos_in_file+copy_len; - info->end_of_file+=len_in_buff; - } - unlock_append_buffer(info); - return Count ? 1 : 0; -} - - -#ifdef HAVE_AIOWAIT - -/* - Read from the IO_CACHE into a buffer and feed asynchronously - from disk when needed. - - SYNOPSIS - _my_b_async_read() - info IO_CACHE pointer - Buffer Buffer to retrieve count bytes from file - Count Number of bytes to read into Buffer - - RETURN VALUE - -1 An error has occurred; my_errno is set. - 0 Success - 1 An error has occurred; IO_CACHE to error state. -*/ - -int _my_b_async_read(register IO_CACHE *info, uchar *Buffer, size_t Count) -{ - size_t length,read_length,diff_length,left_length,use_length,org_Count; - size_t max_length; - my_off_t next_pos_in_file; - uchar *read_buffer; - - memcpy(Buffer,info->read_pos, - (left_length= (size_t) (info->read_end-info->read_pos))); - Buffer+=left_length; - org_Count=Count; - Count-=left_length; - - if (info->inited) - { /* wait for read block */ - info->inited=0; /* No more block to read */ - my_aiowait(&info->aio_result); /* Wait for outstanding req */ - if (info->aio_result.result.aio_errno) - { - if (info->myflags & MY_WME) - my_error(EE_READ, MYF(ME_BELL+ME_WAITTANG), - my_filename(info->file), - info->aio_result.result.aio_errno); - my_errno=info->aio_result.result.aio_errno; - info->error= -1; - return(1); - } - if (! (read_length= (size_t) info->aio_result.result.aio_return) || - read_length == (size_t) -1) - { - my_errno=0; /* For testing */ - info->error= (read_length == (size_t) -1 ? -1 : - (int) (read_length+left_length)); - return(1); - } - info->pos_in_file+= (size_t) (info->read_end - info->request_pos); - - if (info->request_pos != info->buffer) - info->request_pos=info->buffer; - else - info->request_pos=info->buffer+info->read_length; - info->read_pos=info->request_pos; - next_pos_in_file=info->aio_read_pos+read_length; - - /* Check if pos_in_file is changed - (_ni_read_cache may have skipped some bytes) */ - - if (info->aio_read_pos < info->pos_in_file) - { /* Fix if skipped bytes */ - if (info->aio_read_pos + read_length < info->pos_in_file) - { - read_length=0; /* Skip block */ - next_pos_in_file=info->pos_in_file; - } - else - { - my_off_t offset= (info->pos_in_file - info->aio_read_pos); - info->pos_in_file=info->aio_read_pos; /* Whe are here */ - info->read_pos=info->request_pos+offset; - read_length-=offset; /* Bytes left from read_pos */ - } - } -#ifndef DBUG_OFF - if (info->aio_read_pos > info->pos_in_file) - { - my_errno=EINVAL; - return(info->read_length= (size_t) -1); - } -#endif - /* Copy found bytes to buffer */ - length=min(Count,read_length); - memcpy(Buffer,info->read_pos,(size_t) length); - Buffer+=length; - Count-=length; - left_length+=length; - info->read_end=info->rc_pos+read_length; - info->read_pos+=length; - } - else - next_pos_in_file=(info->pos_in_file+ (size_t) - (info->read_end - info->request_pos)); - - /* If reading large blocks, or first read or read with skip */ - if (Count) - { - if (next_pos_in_file == info->end_of_file) - { - info->error=(int) (read_length+left_length); - return 1; - } - - if (mysql_file_seek(info->file, next_pos_in_file, MY_SEEK_SET, MYF(0)) - == MY_FILEPOS_ERROR) - { - info->error= -1; - return (1); - } - - read_length=IO_SIZE*2- (size_t) (next_pos_in_file & (IO_SIZE-1)); - if (Count < read_length) - { /* Small block, read to cache */ - if ((read_length=mysql_file_read(info->file,info->request_pos, - read_length, info->myflags)) == (size_t) -1) - return info->error= -1; - use_length=min(Count,read_length); - memcpy(Buffer,info->request_pos,(size_t) use_length); - info->read_pos=info->request_pos+Count; - info->read_end=info->request_pos+read_length; - info->pos_in_file=next_pos_in_file; /* Start of block in cache */ - next_pos_in_file+=read_length; - - if (Count != use_length) - { /* Didn't find hole block */ - if (info->myflags & (MY_WME | MY_FAE | MY_FNABP) && Count != org_Count) - my_error(EE_EOFERR, MYF(ME_BELL+ME_WAITTANG), - my_filename(info->file),my_errno); - info->error=(int) (read_length+left_length); - return 1; - } - } - else - { /* Big block, don't cache it */ - if ((read_length= mysql_file_read(info->file, Buffer, Count,info->myflags)) - != Count) - { - info->error= read_length == (size_t) -1 ? -1 : read_length+left_length; - return 1; - } - info->read_pos=info->read_end=info->request_pos; - info->pos_in_file=(next_pos_in_file+=Count); - } - } - - /* Read next block with asyncronic io */ - diff_length=(next_pos_in_file & (IO_SIZE-1)); - max_length= info->read_length - diff_length; - if (max_length > info->end_of_file - next_pos_in_file) - max_length= (size_t) (info->end_of_file - next_pos_in_file); - - if (info->request_pos != info->buffer) - read_buffer=info->buffer; - else - read_buffer=info->buffer+info->read_length; - info->aio_read_pos=next_pos_in_file; - if (max_length) - { - info->aio_result.result.aio_errno=AIO_INPROGRESS; /* Marker for test */ - DBUG_PRINT("aioread",("filepos: %ld length: %lu", - (ulong) next_pos_in_file, (ulong) max_length)); - if (aioread(info->file,read_buffer, max_length, - (my_off_t) next_pos_in_file,MY_SEEK_SET, - &info->aio_result.result)) - { /* Skip async io */ - my_errno=errno; - DBUG_PRINT("error",("got error: %d, aio_result: %d from aioread, async skipped", - errno, info->aio_result.result.aio_errno)); - if (info->request_pos != info->buffer) - { - bmove(info->buffer,info->request_pos, - (size_t) (info->read_end - info->read_pos)); - info->request_pos=info->buffer; - info->read_pos-=info->read_length; - info->read_end-=info->read_length; - } - info->read_length=info->buffer_length; /* Use hole buffer */ - info->read_function=_my_b_read; /* Use normal IO_READ next */ - } - else - info->inited=info->aio_result.pending=1; - } - return 0; /* Block read, async in use */ -} /* _my_b_async_read */ -#endif - - -/* Read one byte when buffer is empty */ - -int _my_b_get(IO_CACHE *info) -{ - uchar buff; - IO_CACHE_CALLBACK pre_read,post_read; - if ((pre_read = info->pre_read)) - (*pre_read)(info); - if ((*(info)->read_function)(info,&buff,1)) - return my_b_EOF; - if ((post_read = info->post_read)) - (*post_read)(info); - return (int) (uchar) buff; -} - -/* - Write a byte buffer to IO_CACHE and flush to disk - if IO_CACHE is full. - - RETURN VALUE - 1 On error on write - 0 On success - -1 On error; my_errno contains error code. -*/ - -int _my_b_write(register IO_CACHE *info, const uchar *Buffer, size_t Count) -{ - size_t rest_length,length; - - if (info->pos_in_file+info->buffer_length > info->end_of_file) - { - my_errno=errno=EFBIG; - return info->error = -1; - } - - rest_length= (size_t) (info->write_end - info->write_pos); - memcpy(info->write_pos,Buffer,(size_t) rest_length); - Buffer+=rest_length; - Count-=rest_length; - info->write_pos+=rest_length; - - if (my_b_flush_io_cache(info,1)) - return 1; - if (Count >= IO_SIZE) - { /* Fill first intern buffer */ - length=Count & (size_t) ~(IO_SIZE-1); - if (info->seek_not_done) - { - /* - Whenever a function which operates on IO_CACHE flushes/writes - some part of the IO_CACHE to disk it will set the property - "seek_not_done" to indicate this to other functions operating - on the IO_CACHE. - */ - if (mysql_file_seek(info->file, info->pos_in_file, MY_SEEK_SET, MYF(0))) - { - info->error= -1; - return (1); - } - info->seek_not_done=0; - } - if (mysql_file_write(info->file, Buffer, length, info->myflags | MY_NABP)) - return info->error= -1; - - /* - In case of a shared I/O cache with a writer we normally do direct - write cache to read cache copy. Simulate this here by direct - caller buffer to read cache copy. Do it after the write so that - the cache readers actions on the flushed part can go in parallel - with the write of the extra stuff. copy_to_read_buffer() - synchronizes writer and readers so that after this call the - readers can act on the extra stuff while the writer can go ahead - and prepare the next output. copy_to_read_buffer() relies on - info->pos_in_file. - */ - if (info->share) - copy_to_read_buffer(info, Buffer, length); - - Count-=length; - Buffer+=length; - info->pos_in_file+=length; - } - memcpy(info->write_pos,Buffer,(size_t) Count); - info->write_pos+=Count; - return 0; -} - - -/* - Append a block to the write buffer. - This is done with the buffer locked to ensure that we don't read from - the write buffer before we are ready with it. -*/ - -int my_b_append(register IO_CACHE *info, const uchar *Buffer, size_t Count) -{ - size_t rest_length,length; - - /* - Assert that we cannot come here with a shared cache. If we do one - day, we might need to add a call to copy_to_read_buffer(). - */ - DBUG_ASSERT(!info->share); - - lock_append_buffer(info); - rest_length= (size_t) (info->write_end - info->write_pos); - if (Count <= rest_length) - goto end; - memcpy(info->write_pos, Buffer, rest_length); - Buffer+=rest_length; - Count-=rest_length; - info->write_pos+=rest_length; - if (my_b_flush_io_cache(info,0)) - { - unlock_append_buffer(info); - return 1; - } - if (Count >= IO_SIZE) - { /* Fill first intern buffer */ - length=Count & (size_t) ~(IO_SIZE-1); - if (mysql_file_write(info->file,Buffer, length, info->myflags | MY_NABP)) - { - unlock_append_buffer(info); - return info->error= -1; - } - Count-=length; - Buffer+=length; - info->end_of_file+=length; - } - -end: - memcpy(info->write_pos,Buffer,(size_t) Count); - info->write_pos+=Count; - unlock_append_buffer(info); - return 0; -} - - -int my_b_safe_write(IO_CACHE *info, const uchar *Buffer, size_t Count) -{ - /* - Sasha: We are not writing this with the ? operator to avoid hitting - a possible compiler bug. At least gcc 2.95 cannot deal with - several layers of ternary operators that evaluated comma(,) operator - expressions inside - I do have a test case if somebody wants it - */ - if (info->type == SEQ_READ_APPEND) - return my_b_append(info, Buffer, Count); - return my_b_write(info, Buffer, Count); -} - - -/* - Write a block to disk where part of the data may be inside the record - buffer. As all write calls to the data goes through the cache, - we will never get a seek over the end of the buffer -*/ - -int my_block_write(register IO_CACHE *info, const uchar *Buffer, size_t Count, - my_off_t pos) -{ - size_t length; - int error=0; - - /* - Assert that we cannot come here with a shared cache. If we do one - day, we might need to add a call to copy_to_read_buffer(). - */ - DBUG_ASSERT(!info->share); - - if (pos < info->pos_in_file) - { - /* Of no overlap, write everything without buffering */ - if (pos + Count <= info->pos_in_file) - return mysql_file_pwrite(info->file, Buffer, Count, pos, - info->myflags | MY_NABP); - /* Write the part of the block that is before buffer */ - length= (uint) (info->pos_in_file - pos); - if (mysql_file_pwrite(info->file, Buffer, length, pos, info->myflags | MY_NABP)) - info->error= error= -1; - Buffer+=length; - pos+= length; - Count-= length; -#ifndef HAVE_PREAD - info->seek_not_done=1; -#endif - } - - /* Check if we want to write inside the used part of the buffer.*/ - length= (size_t) (info->write_end - info->buffer); - if (pos < info->pos_in_file + length) - { - size_t offset= (size_t) (pos - info->pos_in_file); - length-=offset; - if (length > Count) - length=Count; - memcpy(info->buffer+offset, Buffer, length); - Buffer+=length; - Count-= length; - /* Fix length of buffer if the new data was larger */ - if (info->buffer+length > info->write_pos) - info->write_pos=info->buffer+length; - if (!Count) - return (error); - } - /* Write at the end of the current buffer; This is the normal case */ - if (_my_b_write(info, Buffer, Count)) - error= -1; - return error; -} - - - /* Flush write cache */ - -#define LOCK_APPEND_BUFFER if (need_append_buffer_lock) \ - lock_append_buffer(info); -#define UNLOCK_APPEND_BUFFER if (need_append_buffer_lock) \ - unlock_append_buffer(info); - -int my_b_flush_io_cache(IO_CACHE *info, - int need_append_buffer_lock __attribute__((unused))) -{ - size_t length; - my_off_t pos_in_file; - my_bool append_cache= (info->type == SEQ_READ_APPEND); - DBUG_ENTER("my_b_flush_io_cache"); - DBUG_PRINT("enter", ("cache: 0x%lx", (long) info)); - - if (!append_cache) - need_append_buffer_lock= 0; - - if (info->type == WRITE_CACHE || append_cache) - { - if (info->file == -1) - { - if (real_open_cached_file(info)) - DBUG_RETURN((info->error= -1)); - } - LOCK_APPEND_BUFFER; - - if ((length=(size_t) (info->write_pos - info->write_buffer))) - { - /* - In case of a shared I/O cache with a writer we do direct write - cache to read cache copy. Do it before the write here so that - the readers can work in parallel with the write. - copy_to_read_buffer() relies on info->pos_in_file. - */ - if (info->share) - copy_to_read_buffer(info, info->write_buffer, length); - - pos_in_file=info->pos_in_file; - /* - If we have append cache, we always open the file with - O_APPEND which moves the pos to EOF automatically on every write - */ - if (!append_cache && info->seek_not_done) - { /* File touched, do seek */ - if (mysql_file_seek(info->file, pos_in_file, MY_SEEK_SET, MYF(0)) == - MY_FILEPOS_ERROR) - { - UNLOCK_APPEND_BUFFER; - DBUG_RETURN((info->error= -1)); - } - if (!append_cache) - info->seek_not_done=0; - } - if (!append_cache) - info->pos_in_file+=length; - info->write_end= (info->write_buffer+info->buffer_length- - ((pos_in_file+length) & (IO_SIZE-1))); - - if (mysql_file_write(info->file,info->write_buffer,length, - info->myflags | MY_NABP)) - info->error= -1; - else - info->error= 0; - if (!append_cache) - { - set_if_bigger(info->end_of_file,(pos_in_file+length)); - } - else - { - info->end_of_file+=(info->write_pos-info->append_read_pos); - DBUG_ASSERT(info->end_of_file == mysql_file_tell(info->file, MYF(0))); - } - - info->append_read_pos=info->write_pos=info->write_buffer; - ++info->disk_writes; - UNLOCK_APPEND_BUFFER; - DBUG_RETURN(info->error); - } - } -#ifdef HAVE_AIOWAIT - else if (info->type != READ_NET) - { - my_aiowait(&info->aio_result); /* Wait for outstanding req */ - info->inited=0; - } -#endif - UNLOCK_APPEND_BUFFER; - DBUG_RETURN(0); -} - -/* - Free an IO_CACHE object - - SYNOPSOS - end_io_cache() - info IO_CACHE Handle to free - - NOTES - It's currently safe to call this if one has called init_io_cache() - on the 'info' object, even if init_io_cache() failed. - This function is also safe to call twice with the same handle. - - RETURN - 0 ok - # Error -*/ - -int end_io_cache(IO_CACHE *info) -{ - int error=0; - IO_CACHE_CALLBACK pre_close; - DBUG_ENTER("end_io_cache"); - DBUG_PRINT("enter",("cache: 0x%lx", (ulong) info)); - - /* - Every thread must call remove_io_thread(). The last one destroys - the share elements. - */ - DBUG_ASSERT(!info->share || !info->share->total_threads); - - if ((pre_close=info->pre_close)) - { - (*pre_close)(info); - info->pre_close= 0; - } - if (info->alloced_buffer) - { - info->alloced_buffer=0; - if (info->file != -1) /* File doesn't exist */ - error= my_b_flush_io_cache(info,1); - my_free(info->buffer); - info->buffer=info->read_pos=(uchar*) 0; - } - if (info->type == SEQ_READ_APPEND) - { - /* Destroy allocated mutex */ - info->type= TYPE_NOT_SET; - mysql_mutex_destroy(&info->append_buffer_lock); - } - DBUG_RETURN(error); -} /* end_io_cache */ - - -/********************************************************************** - Testing of MF_IOCACHE -**********************************************************************/ - -#ifdef MAIN - -#include - -void die(const char* fmt, ...) -{ - va_list va_args; - va_start(va_args,fmt); - fprintf(stderr,"Error:"); - vfprintf(stderr, fmt,va_args); - fprintf(stderr,", errno=%d\n", errno); - exit(1); -} - -int open_file(const char* fname, IO_CACHE* info, int cache_size) -{ - int fd; - if ((fd=my_open(fname,O_CREAT | O_RDWR,MYF(MY_WME))) < 0) - die("Could not open %s", fname); - if (init_io_cache(info, fd, cache_size, SEQ_READ_APPEND, 0,0,MYF(MY_WME))) - die("failed in init_io_cache()"); - return fd; -} - -void close_file(IO_CACHE* info) -{ - end_io_cache(info); - my_close(info->file, MYF(MY_WME)); -} - -int main(int argc, char** argv) -{ - IO_CACHE sra_cache; /* SEQ_READ_APPEND */ - MY_STAT status; - const char* fname="/tmp/iocache.test"; - int cache_size=16384; - char llstr_buf[22]; - int max_block,total_bytes=0; - int i,num_loops=100,error=0; - char *p; - char* block, *block_end; - MY_INIT(argv[0]); - max_block = cache_size*3; - if (!(block=(char*)my_malloc(max_block,MYF(MY_WME)))) - die("Not enough memory to allocate test block"); - block_end = block + max_block; - for (p = block,i=0; p < block_end;i++) - { - *p++ = (char)i; - } - if (my_stat(fname,&status, MYF(0)) && - my_delete(fname,MYF(MY_WME))) - { - die("Delete of %s failed, aborting", fname); - } - open_file(fname,&sra_cache, cache_size); - for (i = 0; i < num_loops; i++) - { - char buf[4]; - int block_size = abs(rand() % max_block); - int4store(buf, block_size); - if (my_b_append(&sra_cache,buf,4) || - my_b_append(&sra_cache, block, block_size)) - die("write failed"); - total_bytes += 4+block_size; - } - close_file(&sra_cache); - my_free(block); - if (!my_stat(fname,&status,MYF(MY_WME))) - die("%s failed to stat, but I had just closed it,\ - wonder how that happened"); - printf("Final size of %s is %s, wrote %d bytes\n",fname, - llstr(status.st_size,llstr_buf), - total_bytes); - my_delete(fname, MYF(MY_WME)); - /* check correctness of tests */ - if (total_bytes != status.st_size) - { - fprintf(stderr,"Not the same number of bytes acutally in file as bytes \ -supposedly written\n"); - error=1; - } - exit(error); - return 0; -} -#endif diff --git a/deps/mysqllite/mysys/mf_iocache2.c b/deps/mysqllite/mysys/mf_iocache2.c deleted file mode 100644 index 8962a037da0629..00000000000000 --- a/deps/mysqllite/mysys/mf_iocache2.c +++ /dev/null @@ -1,472 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - More functions to be used with IO_CACHE files -*/ - -#include "mysys_priv.h" -#include -#include -#include - -/* - Copy contents of an IO_CACHE to a file. - - SYNOPSIS - my_b_copy_to_file() - cache IO_CACHE to copy from - file File to copy to - - DESCRIPTION - Copy the contents of the cache to the file. The cache will be - re-inited to a read cache and will read from the beginning of the - cache. - - If a failure to write fully occurs, the cache is only copied - partially. - - TODO - Make this function solid by handling partial reads from the cache - in a correct manner: it should be atomic. - - RETURN VALUE - 0 All OK - 1 An error occured -*/ -int -my_b_copy_to_file(IO_CACHE *cache, FILE *file) -{ - size_t bytes_in_cache; - DBUG_ENTER("my_b_copy_to_file"); - - /* Reinit the cache to read from the beginning of the cache */ - if (reinit_io_cache(cache, READ_CACHE, 0L, FALSE, FALSE)) - DBUG_RETURN(1); - bytes_in_cache= my_b_bytes_in_cache(cache); - do - { - if (my_fwrite(file, cache->read_pos, bytes_in_cache, - MYF(MY_WME | MY_NABP)) == (size_t) -1) - DBUG_RETURN(1); - cache->read_pos= cache->read_end; - } while ((bytes_in_cache= my_b_fill(cache))); - DBUG_RETURN(0); -} - - -my_off_t my_b_append_tell(IO_CACHE* info) -{ - /* - Sometimes we want to make sure that the variable is not put into - a register in debugging mode so we can see its value in the core - */ -#ifndef DBUG_OFF -# define dbug_volatile volatile -#else -# define dbug_volatile -#endif - - /* - Prevent optimizer from putting res in a register when debugging - we need this to be able to see the value of res when the assert fails - */ - dbug_volatile my_off_t res; - - /* - We need to lock the append buffer mutex to keep flush_io_cache() - from messing with the variables that we need in order to provide the - answer to the question. - */ - mysql_mutex_lock(&info->append_buffer_lock); - -#ifndef DBUG_OFF - /* - Make sure EOF is where we think it is. Note that we cannot just use - my_tell() because we have a reader thread that could have left the - file offset in a non-EOF location - */ - { - volatile my_off_t save_pos; - save_pos = my_tell(info->file,MYF(0)); - my_seek(info->file,(my_off_t)0,MY_SEEK_END,MYF(0)); - /* - Save the value of my_tell in res so we can see it when studying coredump - */ - DBUG_ASSERT(info->end_of_file - (info->append_read_pos-info->write_buffer) - == (res=my_tell(info->file,MYF(0)))); - my_seek(info->file,save_pos,MY_SEEK_SET,MYF(0)); - } -#endif - res = info->end_of_file + (info->write_pos-info->append_read_pos); - mysql_mutex_unlock(&info->append_buffer_lock); - return res; -} - -my_off_t my_b_safe_tell(IO_CACHE *info) -{ - if (unlikely(info->type == SEQ_READ_APPEND)) - return my_b_append_tell(info); - return my_b_tell(info); -} - -/* - Make next read happen at the given position - For write cache, make next write happen at the given position -*/ - -void my_b_seek(IO_CACHE *info,my_off_t pos) -{ - my_off_t offset; - DBUG_ENTER("my_b_seek"); - DBUG_PRINT("enter",("pos: %lu", (ulong) pos)); - - /* - TODO: - Verify that it is OK to do seek in the non-append - area in SEQ_READ_APPEND cache - a) see if this always works - b) see if there is a better way to make it work - */ - if (info->type == SEQ_READ_APPEND) - (void) flush_io_cache(info); - - offset=(pos - info->pos_in_file); - - if (info->type == READ_CACHE || info->type == SEQ_READ_APPEND) - { - /* TODO: explain why this works if pos < info->pos_in_file */ - if ((ulonglong) offset < (ulonglong) (info->read_end - info->buffer)) - { - /* The read is in the current buffer; Reuse it */ - info->read_pos = info->buffer + offset; - DBUG_VOID_RETURN; - } - else - { - /* Force a new read on next my_b_read */ - info->read_pos=info->read_end=info->buffer; - } - } - else if (info->type == WRITE_CACHE) - { - /* If write is in current buffer, reuse it */ - if ((ulonglong) offset < - (ulonglong) (info->write_end - info->write_buffer)) - { - info->write_pos = info->write_buffer + offset; - DBUG_VOID_RETURN; - } - (void) flush_io_cache(info); - /* Correct buffer end so that we write in increments of IO_SIZE */ - info->write_end=(info->write_buffer+info->buffer_length- - (pos & (IO_SIZE-1))); - } - info->pos_in_file=pos; - info->seek_not_done=1; - DBUG_VOID_RETURN; -} - - -/* - Fill buffer of the cache. - - NOTES - This assumes that you have already used all characters in the CACHE, - independent of the read_pos value! - - RETURN - 0 On error or EOF (info->error = -1 on error) - # Number of characters -*/ - - -size_t my_b_fill(IO_CACHE *info) -{ - my_off_t pos_in_file=(info->pos_in_file+ - (size_t) (info->read_end - info->buffer)); - size_t diff_length, length, max_length; - - if (info->seek_not_done) - { /* File touched, do seek */ - if (my_seek(info->file,pos_in_file,MY_SEEK_SET,MYF(0)) == - MY_FILEPOS_ERROR) - { - info->error= 0; - return 0; - } - info->seek_not_done=0; - } - diff_length=(size_t) (pos_in_file & (IO_SIZE-1)); - max_length=(info->read_length-diff_length); - if (max_length >= (info->end_of_file - pos_in_file)) - max_length= (size_t) (info->end_of_file - pos_in_file); - - if (!max_length) - { - info->error= 0; - return 0; /* EOF */ - } - if ((length= my_read(info->file,info->buffer,max_length, - info->myflags)) == (size_t) -1) - { - info->error= -1; - return 0; - } - info->read_pos=info->buffer; - info->read_end=info->buffer+length; - info->pos_in_file=pos_in_file; - return length; -} - - -/* - Read a string ended by '\n' into a buffer of 'max_length' size. - Returns number of characters read, 0 on error. - last byte is set to '\0' - If buffer is full then to[max_length-1] will be set to \0. -*/ - -size_t my_b_gets(IO_CACHE *info, char *to, size_t max_length) -{ - char *start = to; - size_t length; - max_length--; /* Save place for end \0 */ - - /* Calculate number of characters in buffer */ - if (!(length= my_b_bytes_in_cache(info)) && - !(length= my_b_fill(info))) - return 0; - - for (;;) - { - uchar *pos, *end; - if (length > max_length) - length=max_length; - for (pos=info->read_pos,end=pos+length ; pos < end ;) - { - if ((*to++ = *pos++) == '\n') - { - info->read_pos=pos; - *to='\0'; - return (size_t) (to-start); - } - } - if (!(max_length-=length)) - { - /* Found enough charcters; Return found string */ - info->read_pos=pos; - *to='\0'; - return (size_t) (to-start); - } - if (!(length=my_b_fill(info))) - return 0; - } -} - - -my_off_t my_b_filelength(IO_CACHE *info) -{ - if (info->type == WRITE_CACHE) - return my_b_tell(info); - - info->seek_not_done= 1; - return my_seek(info->file, 0L, MY_SEEK_END, MYF(0)); -} - - -/* - Simple printf version. Supports '%s', '%d', '%u', "%ld" and "%lu" - Used for logging in MySQL - returns number of written character, or (size_t) -1 on error -*/ - -size_t my_b_printf(IO_CACHE *info, const char* fmt, ...) -{ - size_t result; - va_list args; - va_start(args,fmt); - result=my_b_vprintf(info, fmt, args); - va_end(args); - return result; -} - - -size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args) -{ - size_t out_length= 0; - uint minimum_width; /* as yet unimplemented */ - uint minimum_width_sign; - uint precision; /* as yet unimplemented for anything but %b */ - my_bool is_zero_padded; - - /* - Store the location of the beginning of a format directive, for the - case where we learn we shouldn't have been parsing a format string - at all, and we don't want to lose the flag/precision/width/size - information. - */ - const char* backtrack; - - for (; *fmt != '\0'; fmt++) - { - /* Copy everything until '%' or end of string */ - const char *start=fmt; - size_t length; - - for (; (*fmt != '\0') && (*fmt != '%'); fmt++) ; - - length= (size_t) (fmt - start); - out_length+=length; - if (my_b_write(info, (const uchar*) start, length)) - goto err; - - if (*fmt == '\0') /* End of format */ - return out_length; - - /* - By this point, *fmt must be a percent; Keep track of this location and - skip over the percent character. - */ - DBUG_ASSERT(*fmt == '%'); - backtrack= fmt; - fmt++; - - is_zero_padded= FALSE; - minimum_width_sign= 1; - minimum_width= 0; - precision= 0; - /* Skip if max size is used (to be compatible with printf) */ - -process_flags: - switch (*fmt) - { - case '-': - minimum_width_sign= -1; fmt++; goto process_flags; - case '0': - is_zero_padded= TRUE; fmt++; goto process_flags; - case '#': - /** @todo Implement "#" conversion flag. */ fmt++; goto process_flags; - case ' ': - /** @todo Implement " " conversion flag. */ fmt++; goto process_flags; - case '+': - /** @todo Implement "+" conversion flag. */ fmt++; goto process_flags; - } - - if (*fmt == '*') - { - precision= (int) va_arg(args, int); - fmt++; - } - else - { - while (my_isdigit(&my_charset_latin1, *fmt)) { - minimum_width=(minimum_width * 10) + (*fmt - '0'); - fmt++; - } - } - minimum_width*= minimum_width_sign; - - if (*fmt == '.') - { - fmt++; - if (*fmt == '*') { - precision= (int) va_arg(args, int); - fmt++; - } - else - { - while (my_isdigit(&my_charset_latin1, *fmt)) { - precision=(precision * 10) + (*fmt - '0'); - fmt++; - } - } - } - - if (*fmt == 's') /* String parameter */ - { - reg2 char *par = va_arg(args, char *); - size_t length2 = strlen(par); - /* TODO: implement precision */ - out_length+= length2; - if (my_b_write(info, (uchar*) par, length2)) - goto err; - } - else if (*fmt == 'b') /* Sized buffer parameter, only precision makes sense */ - { - char *par = va_arg(args, char *); - out_length+= precision; - if (my_b_write(info, (uchar*) par, precision)) - goto err; - } - else if (*fmt == 'd' || *fmt == 'u') /* Integer parameter */ - { - register int iarg; - size_t length2; - char buff[17]; - - iarg = va_arg(args, int); - if (*fmt == 'd') - length2= (size_t) (int10_to_str((long) iarg,buff, -10) - buff); - else - length2= (uint) (int10_to_str((long) (uint) iarg,buff,10)- buff); - - /* minimum width padding */ - if (minimum_width > length2) - { - char *buffz; - - buffz= my_alloca(minimum_width - length2); - if (is_zero_padded) - memset(buffz, '0', minimum_width - length2); - else - memset(buffz, ' ', minimum_width - length2); - my_b_write(info, buffz, minimum_width - length2); - my_afree(buffz); - } - - out_length+= length2; - if (my_b_write(info, (uchar*) buff, length2)) - goto err; - } - else if ((*fmt == 'l' && fmt[1] == 'd') || fmt[1] == 'u') - /* long parameter */ - { - register long iarg; - size_t length2; - char buff[17]; - - iarg = va_arg(args, long); - if (*++fmt == 'd') - length2= (size_t) (int10_to_str(iarg,buff, -10) - buff); - else - length2= (size_t) (int10_to_str(iarg,buff,10)- buff); - out_length+= length2; - if (my_b_write(info, (uchar*) buff, length2)) - goto err; - } - else - { - /* %% or unknown code */ - if (my_b_write(info, (uchar*) backtrack, (size_t) (fmt-backtrack))) - goto err; - out_length+= fmt-backtrack; - } - } - return out_length; - -err: - return (size_t) -1; -} diff --git a/deps/mysqllite/mysys/mf_keycache.c b/deps/mysqllite/mysys/mf_keycache.c deleted file mode 100644 index 42cdea65f34d1c..00000000000000 --- a/deps/mysqllite/mysys/mf_keycache.c +++ /dev/null @@ -1,4523 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/** - @file - These functions handle keyblock cacheing for ISAM and MyISAM tables. - - One cache can handle many files. - It must contain buffers of the same blocksize. - init_key_cache() should be used to init cache handler. - - The free list (free_block_list) is a stack like structure. - When a block is freed by free_block(), it is pushed onto the stack. - When a new block is required it is first tried to pop one from the stack. - If the stack is empty, it is tried to get a never-used block from the pool. - If this is empty too, then a block is taken from the LRU ring, flushing it - to disk, if neccessary. This is handled in find_key_block(). - With the new free list, the blocks can have three temperatures: - hot, warm and cold (which is free). This is remembered in the block header - by the enum BLOCK_TEMPERATURE temperature variable. Remembering the - temperature is neccessary to correctly count the number of warm blocks, - which is required to decide when blocks are allowed to become hot. Whenever - a block is inserted to another (sub-)chain, we take the old and new - temperature into account to decide if we got one more or less warm block. - blocks_unused is the sum of never used blocks in the pool and of currently - free blocks. blocks_used is the number of blocks fetched from the pool and - as such gives the maximum number of in-use blocks at any time. -*/ - -/* - Key Cache Locking - ================= - - All key cache locking is done with a single mutex per key cache: - keycache->cache_lock. This mutex is locked almost all the time - when executing code in this file (mf_keycache.c). - However it is released for I/O and some copy operations. - - The cache_lock is also released when waiting for some event. Waiting - and signalling is done via condition variables. In most cases the - thread waits on its thread->suspend condition variable. Every thread - has a my_thread_var structure, which contains this variable and a - '*next' and '**prev' pointer. These pointers are used to insert the - thread into a wait queue. - - A thread can wait for one block and thus be in one wait queue at a - time only. - - Before starting to wait on its condition variable with - mysql_cond_wait(), the thread enters itself to a specific wait queue - with link_into_queue() (double linked with '*next' + '**prev') or - wait_on_queue() (single linked with '*next'). - - Another thread, when releasing a resource, looks up the waiting thread - in the related wait queue. It sends a signal with - mysql_cond_signal() to the waiting thread. - - NOTE: Depending on the particular wait situation, either the sending - thread removes the waiting thread from the wait queue with - unlink_from_queue() or release_whole_queue() respectively, or the waiting - thread removes itself. - - There is one exception from this locking scheme when one thread wants - to reuse a block for some other address. This works by first marking - the block reserved (status= BLOCK_IN_SWITCH) and then waiting for all - threads that are reading the block to finish. Each block has a - reference to a condition variable (condvar). It holds a reference to - the thread->suspend condition variable for the waiting thread (if such - a thread exists). When that thread is signaled, the reference is - cleared. The number of readers of a block is registered in - block->hash_link->requests. See wait_for_readers() / remove_reader() - for details. This is similar to the above, but it clearly means that - only one thread can wait for a particular block. There is no queue in - this case. Strangely enough block->convar is used for waiting for the - assigned hash_link only. More precisely it is used to wait for all - requests to be unregistered from the assigned hash_link. - - The resize_queue serves two purposes: - 1. Threads that want to do a resize wait there if in_resize is set. - This is not used in the server. The server refuses a second resize - request if one is already active. keycache->in_init is used for the - synchronization. See set_var.cc. - 2. Threads that want to access blocks during resize wait here during - the re-initialization phase. - When the resize is done, all threads on the queue are signalled. - Hypothetical resizers can compete for resizing, and read/write - requests will restart to request blocks from the freshly resized - cache. If the cache has been resized too small, it is disabled and - 'can_be_used' is false. In this case read/write requests bypass the - cache. Since they increment and decrement 'cnt_for_resize_op', the - next resizer can wait on the queue 'waiting_for_resize_cnt' until all - I/O finished. -*/ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include -#include "my_static.h" -#include -#include -#include -#include -#include "probes_mysql.h" - -/* - Some compilation flags have been added specifically for this module - to control the following: - - not to let a thread to yield the control when reading directly - from key cache, which might improve performance in many cases; - to enable this add: - #define SERIALIZED_READ_FROM_CACHE - - to set an upper bound for number of threads simultaneously - using the key cache; this setting helps to determine an optimal - size for hash table and improve performance when the number of - blocks in the key cache much less than the number of threads - accessing it; - to set this number equal to add - #define MAX_THREADS - - to substitute calls of mysql_cond_wait for calls of - mysql_cond_timedwait (wait with timeout set up); - this setting should be used only when you want to trap a deadlock - situation, which theoretically should not happen; - to set timeout equal to seconds add - #define KEYCACHE_TIMEOUT - - to enable the module traps and to send debug information from - key cache module to a special debug log add: - #define KEYCACHE_DEBUG - the name of this debug log file can be set through: - #define KEYCACHE_DEBUG_LOG - if the name is not defined, it's set by default; - if the KEYCACHE_DEBUG flag is not set up and we are in a debug - mode, i.e. when ! defined(DBUG_OFF), the debug information from the - module is sent to the regular debug log. - - Example of the settings: - #define SERIALIZED_READ_FROM_CACHE - #define MAX_THREADS 100 - #define KEYCACHE_TIMEOUT 1 - #define KEYCACHE_DEBUG - #define KEYCACHE_DEBUG_LOG "my_key_cache_debug.log" -*/ - -#define STRUCT_PTR(TYPE, MEMBER, a) \ - (TYPE *) ((char *) (a) - offsetof(TYPE, MEMBER)) - -/* types of condition variables */ -#define COND_FOR_REQUESTED 0 -#define COND_FOR_SAVED 1 -#define COND_FOR_READERS 2 - -typedef mysql_cond_t KEYCACHE_CONDVAR; - -/* descriptor of the page in the key cache block buffer */ -struct st_keycache_page -{ - int file; /* file to which the page belongs to */ - my_off_t filepos; /* position of the page in the file */ -}; - -/* element in the chain of a hash table bucket */ -struct st_hash_link -{ - struct st_hash_link *next, **prev; /* to connect links in the same bucket */ - struct st_block_link *block; /* reference to the block for the page: */ - File file; /* from such a file */ - my_off_t diskpos; /* with such an offset */ - uint requests; /* number of requests for the page */ -}; - -/* simple states of a block */ -#define BLOCK_ERROR 1 /* an error occured when performing file i/o */ -#define BLOCK_READ 2 /* file block is in the block buffer */ -#define BLOCK_IN_SWITCH 4 /* block is preparing to read new page */ -#define BLOCK_REASSIGNED 8 /* blk does not accept requests for old page */ -#define BLOCK_IN_FLUSH 16 /* block is selected for flush */ -#define BLOCK_CHANGED 32 /* block buffer contains a dirty page */ -#define BLOCK_IN_USE 64 /* block is not free */ -#define BLOCK_IN_EVICTION 128 /* block is selected for eviction */ -#define BLOCK_IN_FLUSHWRITE 256 /* block is in write to file */ -#define BLOCK_FOR_UPDATE 512 /* block is selected for buffer modification */ - -/* page status, returned by find_key_block */ -#define PAGE_READ 0 -#define PAGE_TO_BE_READ 1 -#define PAGE_WAIT_TO_BE_READ 2 - -/* block temperature determines in which (sub-)chain the block currently is */ -enum BLOCK_TEMPERATURE { BLOCK_COLD /*free*/ , BLOCK_WARM , BLOCK_HOT }; - -/* key cache block */ -struct st_block_link -{ - struct st_block_link - *next_used, **prev_used; /* to connect links in the LRU chain (ring) */ - struct st_block_link - *next_changed, **prev_changed; /* for lists of file dirty/clean blocks */ - struct st_hash_link *hash_link; /* backward ptr to referring hash_link */ - KEYCACHE_WQUEUE wqueue[2]; /* queues on waiting requests for new/old pages */ - uint requests; /* number of requests for the block */ - uchar *buffer; /* buffer for the block page */ - uint offset; /* beginning of modified data in the buffer */ - uint length; /* end of data in the buffer */ - uint status; /* state of the block */ - enum BLOCK_TEMPERATURE temperature; /* block temperature: cold, warm, hot */ - uint hits_left; /* number of hits left until promotion */ - ulonglong last_hit_time; /* timestamp of the last hit */ - KEYCACHE_CONDVAR *condvar; /* condition variable for 'no readers' event */ -}; - -KEY_CACHE dflt_key_cache_var; -KEY_CACHE *dflt_key_cache= &dflt_key_cache_var; - -#define FLUSH_CACHE 2000 /* sort this many blocks at once */ - -static int flush_all_key_blocks(KEY_CACHE *keycache); - -static void wait_on_queue(KEYCACHE_WQUEUE *wqueue, - mysql_mutex_t *mutex); -static void release_whole_queue(KEYCACHE_WQUEUE *wqueue); - -static void free_block(KEY_CACHE *keycache, BLOCK_LINK *block); -#if !defined(DBUG_OFF) -static void test_key_cache(KEY_CACHE *keycache, - const char *where, my_bool lock); -#endif - -#define KEYCACHE_HASH(f, pos) \ -(((ulong) ((pos) / keycache->key_cache_block_size) + \ - (ulong) (f)) & (keycache->hash_entries-1)) -#define FILE_HASH(f) ((uint) (f) & (CHANGED_BLOCKS_HASH-1)) - -#define DEFAULT_KEYCACHE_DEBUG_LOG "keycache_debug.log" - -#if defined(KEYCACHE_DEBUG) && ! defined(KEYCACHE_DEBUG_LOG) -#define KEYCACHE_DEBUG_LOG DEFAULT_KEYCACHE_DEBUG_LOG -#endif - -#if defined(KEYCACHE_DEBUG_LOG) -static FILE *keycache_debug_log=NULL; -static void keycache_debug_print(const char *fmt,...); -#define KEYCACHE_DEBUG_OPEN \ - if (!keycache_debug_log) \ - { \ - keycache_debug_log= fopen(KEYCACHE_DEBUG_LOG, "w"); \ - (void) setvbuf(keycache_debug_log, NULL, _IOLBF, BUFSIZ); \ - } - -#define KEYCACHE_DEBUG_CLOSE \ - if (keycache_debug_log) \ - { \ - fclose(keycache_debug_log); \ - keycache_debug_log= 0; \ - } -#else -#define KEYCACHE_DEBUG_OPEN -#define KEYCACHE_DEBUG_CLOSE -#endif /* defined(KEYCACHE_DEBUG_LOG) */ - -#if defined(KEYCACHE_DEBUG_LOG) && defined(KEYCACHE_DEBUG) -#define KEYCACHE_DBUG_PRINT(l, m) \ - { if (keycache_debug_log) fprintf(keycache_debug_log, "%s: ", l); \ - keycache_debug_print m; } - -#define KEYCACHE_DBUG_ASSERT(a) \ - { if (! (a) && keycache_debug_log) fclose(keycache_debug_log); \ - assert(a); } -#else -#define KEYCACHE_DBUG_PRINT(l, m) DBUG_PRINT(l, m) -#define KEYCACHE_DBUG_ASSERT(a) DBUG_ASSERT(a) -#endif /* defined(KEYCACHE_DEBUG_LOG) && defined(KEYCACHE_DEBUG) */ - -#if defined(KEYCACHE_DEBUG) || !defined(DBUG_OFF) - -static long keycache_thread_id; -#define KEYCACHE_THREAD_TRACE(l) \ - KEYCACHE_DBUG_PRINT(l,("|thread %ld",keycache_thread_id)) - -#define KEYCACHE_THREAD_TRACE_BEGIN(l) \ - { struct st_my_thread_var *thread_var= my_thread_var; \ - keycache_thread_id= thread_var->id; \ - KEYCACHE_DBUG_PRINT(l,("[thread %ld",keycache_thread_id)) } - -#define KEYCACHE_THREAD_TRACE_END(l) \ - KEYCACHE_DBUG_PRINT(l,("]thread %ld",keycache_thread_id)) -#else -#define KEYCACHE_THREAD_TRACE_BEGIN(l) -#define KEYCACHE_THREAD_TRACE_END(l) -#define KEYCACHE_THREAD_TRACE(l) -#endif /* defined(KEYCACHE_DEBUG) || !defined(DBUG_OFF) */ - -#define BLOCK_NUMBER(b) \ - ((uint) (((char*)(b)-(char *) keycache->block_root)/sizeof(BLOCK_LINK))) -#define HASH_LINK_NUMBER(h) \ - ((uint) (((char*)(h)-(char *) keycache->hash_link_root)/sizeof(HASH_LINK))) - -#if (defined(KEYCACHE_TIMEOUT) && !defined(__WIN__)) || defined(KEYCACHE_DEBUG) -static int keycache_pthread_cond_wait(mysql_cond_t *cond, - mysql_mutex_t *mutex); -#else -#define keycache_pthread_cond_wait(C, M) mysql_cond_wait(C, M) -#endif - -#if defined(KEYCACHE_DEBUG) -static int keycache_pthread_mutex_lock(mysql_mutex_t *mutex); -static void keycache_pthread_mutex_unlock(mysql_mutex_t *mutex); -static int keycache_pthread_cond_signal(mysql_cond_t *cond); -#else -#define keycache_pthread_mutex_lock(M) mysql_mutex_lock(M) -#define keycache_pthread_mutex_unlock(M) mysql_mutex_unlock(M) -#define keycache_pthread_cond_signal(C) mysql_cond_signal(C) -#endif /* defined(KEYCACHE_DEBUG) */ - -#if !defined(DBUG_OFF) -#if defined(inline) -#undef inline -#endif -#define inline /* disabled inline for easier debugging */ -static int fail_block(BLOCK_LINK *block); -static int fail_hlink(HASH_LINK *hlink); -static int cache_empty(KEY_CACHE *keycache); -#endif - -static inline uint next_power(uint value) -{ - return (uint) my_round_up_to_next_power((uint32) value) << 1; -} - - -/* - Initialize a key cache - - SYNOPSIS - init_key_cache() - keycache pointer to a key cache data structure - key_cache_block_size size of blocks to keep cached data - use_mem total memory to use for the key cache - division_limit division limit (may be zero) - age_threshold age threshold (may be zero) - - RETURN VALUE - number of blocks in the key cache, if successful, - 0 - otherwise. - - NOTES. - if keycache->key_cache_inited != 0 we assume that the key cache - is already initialized. This is for now used by myisamchk, but shouldn't - be something that a program should rely on! - - It's assumed that no two threads call this function simultaneously - referring to the same key cache handle. - -*/ - -int init_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, - size_t use_mem, uint division_limit, - uint age_threshold) -{ - ulong blocks, hash_links; - size_t length; - int error; - DBUG_ENTER("init_key_cache"); - DBUG_ASSERT(key_cache_block_size >= 512); - - KEYCACHE_DEBUG_OPEN; - if (keycache->key_cache_inited && keycache->disk_blocks > 0) - { - DBUG_PRINT("warning",("key cache already in use")); - DBUG_RETURN(0); - } - - keycache->global_cache_w_requests= keycache->global_cache_r_requests= 0; - keycache->global_cache_read= keycache->global_cache_write= 0; - keycache->disk_blocks= -1; - if (! keycache->key_cache_inited) - { - keycache->key_cache_inited= 1; - /* - Initialize these variables once only. - Their value must survive re-initialization during resizing. - */ - keycache->in_resize= 0; - keycache->resize_in_flush= 0; - keycache->cnt_for_resize_op= 0; - keycache->waiting_for_resize_cnt.last_thread= NULL; - keycache->in_init= 0; - mysql_mutex_init(key_KEY_CACHE_cache_lock, - &keycache->cache_lock, MY_MUTEX_INIT_FAST); - keycache->resize_queue.last_thread= NULL; - } - - keycache->key_cache_mem_size= use_mem; - keycache->key_cache_block_size= key_cache_block_size; - DBUG_PRINT("info", ("key_cache_block_size: %u", - key_cache_block_size)); - - blocks= (ulong) (use_mem / (sizeof(BLOCK_LINK) + 2 * sizeof(HASH_LINK) + - sizeof(HASH_LINK*) * 5/4 + key_cache_block_size)); - /* It doesn't make sense to have too few blocks (less than 8) */ - if (blocks >= 8) - { - for ( ; ; ) - { - /* Set my_hash_entries to the next bigger 2 power */ - if ((keycache->hash_entries= next_power(blocks)) < blocks * 5/4) - keycache->hash_entries<<= 1; - hash_links= 2 * blocks; -#if defined(MAX_THREADS) - if (hash_links < MAX_THREADS + blocks - 1) - hash_links= MAX_THREADS + blocks - 1; -#endif - while ((length= (ALIGN_SIZE(blocks * sizeof(BLOCK_LINK)) + - ALIGN_SIZE(hash_links * sizeof(HASH_LINK)) + - ALIGN_SIZE(sizeof(HASH_LINK*) * - keycache->hash_entries))) + - ((size_t) blocks * keycache->key_cache_block_size) > use_mem) - blocks--; - /* Allocate memory for cache page buffers */ - if ((keycache->block_mem= - my_large_malloc((size_t) blocks * keycache->key_cache_block_size, - MYF(0)))) - { - /* - Allocate memory for blocks, hash_links and hash entries; - For each block 2 hash links are allocated - */ - if ((keycache->block_root= (BLOCK_LINK*) my_malloc(length, - MYF(0)))) - break; - my_large_free(keycache->block_mem); - keycache->block_mem= 0; - } - if (blocks < 8) - { - my_errno= ENOMEM; - my_error(EE_OUTOFMEMORY, MYF(0), blocks * keycache->key_cache_block_size); - goto err; - } - blocks= blocks / 4*3; - } - keycache->blocks_unused= blocks; - keycache->disk_blocks= (int) blocks; - keycache->hash_links= hash_links; - keycache->hash_root= (HASH_LINK**) ((char*) keycache->block_root + - ALIGN_SIZE(blocks*sizeof(BLOCK_LINK))); - keycache->hash_link_root= (HASH_LINK*) ((char*) keycache->hash_root + - ALIGN_SIZE((sizeof(HASH_LINK*) * - keycache->hash_entries))); - bzero((uchar*) keycache->block_root, - keycache->disk_blocks * sizeof(BLOCK_LINK)); - bzero((uchar*) keycache->hash_root, - keycache->hash_entries * sizeof(HASH_LINK*)); - bzero((uchar*) keycache->hash_link_root, - keycache->hash_links * sizeof(HASH_LINK)); - keycache->hash_links_used= 0; - keycache->free_hash_list= NULL; - keycache->blocks_used= keycache->blocks_changed= 0; - - keycache->global_blocks_changed= 0; - keycache->blocks_available=0; /* For debugging */ - - /* The LRU chain is empty after initialization */ - keycache->used_last= NULL; - keycache->used_ins= NULL; - keycache->free_block_list= NULL; - keycache->keycache_time= 0; - keycache->warm_blocks= 0; - keycache->min_warm_blocks= (division_limit ? - blocks * division_limit / 100 + 1 : - blocks); - keycache->age_threshold= (age_threshold ? - blocks * age_threshold / 100 : - blocks); - - keycache->can_be_used= 1; - - keycache->waiting_for_hash_link.last_thread= NULL; - keycache->waiting_for_block.last_thread= NULL; - DBUG_PRINT("exit", - ("disk_blocks: %d block_root: 0x%lx hash_entries: %d\ - hash_root: 0x%lx hash_links: %d hash_link_root: 0x%lx", - keycache->disk_blocks, (long) keycache->block_root, - keycache->hash_entries, (long) keycache->hash_root, - keycache->hash_links, (long) keycache->hash_link_root)); - bzero((uchar*) keycache->changed_blocks, - sizeof(keycache->changed_blocks[0]) * CHANGED_BLOCKS_HASH); - bzero((uchar*) keycache->file_blocks, - sizeof(keycache->file_blocks[0]) * CHANGED_BLOCKS_HASH); - } - else - { - /* key_buffer_size is specified too small. Disable the cache. */ - keycache->can_be_used= 0; - } - - keycache->blocks= keycache->disk_blocks > 0 ? keycache->disk_blocks : 0; - DBUG_RETURN((int) keycache->disk_blocks); - -err: - error= my_errno; - keycache->disk_blocks= 0; - keycache->blocks= 0; - if (keycache->block_mem) - { - my_large_free((uchar*) keycache->block_mem); - keycache->block_mem= NULL; - } - if (keycache->block_root) - { - my_free(keycache->block_root); - keycache->block_root= NULL; - } - my_errno= error; - keycache->can_be_used= 0; - DBUG_RETURN(0); -} - - -/* - Resize a key cache - - SYNOPSIS - resize_key_cache() - keycache pointer to a key cache data structure - key_cache_block_size size of blocks to keep cached data - use_mem total memory to use for the new key cache - division_limit new division limit (if not zero) - age_threshold new age threshold (if not zero) - - RETURN VALUE - number of blocks in the key cache, if successful, - 0 - otherwise. - - NOTES. - The function first compares the memory size and the block size parameters - with the key cache values. - - If they differ the function free the the memory allocated for the - old key cache blocks by calling the end_key_cache function and - then rebuilds the key cache with new blocks by calling - init_key_cache. - - The function starts the operation only when all other threads - performing operations with the key cache let her to proceed - (when cnt_for_resize=0). -*/ - -int resize_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, - size_t use_mem, uint division_limit, - uint age_threshold) -{ - int blocks; - DBUG_ENTER("resize_key_cache"); - - if (!keycache->key_cache_inited) - DBUG_RETURN(keycache->disk_blocks); - - if(key_cache_block_size == keycache->key_cache_block_size && - use_mem == keycache->key_cache_mem_size) - { - change_key_cache_param(keycache, division_limit, age_threshold); - DBUG_RETURN(keycache->disk_blocks); - } - - keycache_pthread_mutex_lock(&keycache->cache_lock); - - /* - We may need to wait for another thread which is doing a resize - already. This cannot happen in the MySQL server though. It allows - one resizer only. In set_var.cc keycache->in_init is used to block - multiple attempts. - */ - while (keycache->in_resize) - { - /* purecov: begin inspected */ - wait_on_queue(&keycache->resize_queue, &keycache->cache_lock); - /* purecov: end */ - } - - /* - Mark the operation in progress. This blocks other threads from doing - a resize in parallel. It prohibits new blocks to enter the cache. - Read/write requests can bypass the cache during the flush phase. - */ - keycache->in_resize= 1; - - /* Need to flush only if keycache is enabled. */ - if (keycache->can_be_used) - { - /* Start the flush phase. */ - keycache->resize_in_flush= 1; - - if (flush_all_key_blocks(keycache)) - { - /* TODO: if this happens, we should write a warning in the log file ! */ - keycache->resize_in_flush= 0; - blocks= 0; - keycache->can_be_used= 0; - goto finish; - } - DBUG_ASSERT(cache_empty(keycache)); - - /* End the flush phase. */ - keycache->resize_in_flush= 0; - } - - /* - Some direct read/write operations (bypassing the cache) may still be - unfinished. Wait until they are done. If the key cache can be used, - direct I/O is done in increments of key_cache_block_size. That is, - every block is checked if it is in the cache. We need to wait for - pending I/O before re-initializing the cache, because we may change - the block size. Otherwise they could check for blocks at file - positions where the new block division has none. We do also want to - wait for I/O done when (if) the cache was disabled. It must not - run in parallel with normal cache operation. - */ - while (keycache->cnt_for_resize_op) - wait_on_queue(&keycache->waiting_for_resize_cnt, &keycache->cache_lock); - - /* - Free old cache structures, allocate new structures, and initialize - them. Note that the cache_lock mutex and the resize_queue are left - untouched. We do not lose the cache_lock and will release it only at - the end of this function. - */ - end_key_cache(keycache, 0); /* Don't free mutex */ - /* The following will work even if use_mem is 0 */ - blocks= init_key_cache(keycache, key_cache_block_size, use_mem, - division_limit, age_threshold); - -finish: - /* - Mark the resize finished. This allows other threads to start a - resize or to request new cache blocks. - */ - keycache->in_resize= 0; - - /* Signal waiting threads. */ - release_whole_queue(&keycache->resize_queue); - - keycache_pthread_mutex_unlock(&keycache->cache_lock); - DBUG_RETURN(blocks); -} - - -/* - Increment counter blocking resize key cache operation -*/ -static inline void inc_counter_for_resize_op(KEY_CACHE *keycache) -{ - keycache->cnt_for_resize_op++; -} - - -/* - Decrement counter blocking resize key cache operation; - Signal the operation to proceed when counter becomes equal zero -*/ -static inline void dec_counter_for_resize_op(KEY_CACHE *keycache) -{ - if (!--keycache->cnt_for_resize_op) - release_whole_queue(&keycache->waiting_for_resize_cnt); -} - -/* - Change the key cache parameters - - SYNOPSIS - change_key_cache_param() - keycache pointer to a key cache data structure - division_limit new division limit (if not zero) - age_threshold new age threshold (if not zero) - - RETURN VALUE - none - - NOTES. - Presently the function resets the key cache parameters - concerning midpoint insertion strategy - division_limit and - age_threshold. -*/ - -void change_key_cache_param(KEY_CACHE *keycache, uint division_limit, - uint age_threshold) -{ - DBUG_ENTER("change_key_cache_param"); - - keycache_pthread_mutex_lock(&keycache->cache_lock); - if (division_limit) - keycache->min_warm_blocks= (keycache->disk_blocks * - division_limit / 100 + 1); - if (age_threshold) - keycache->age_threshold= (keycache->disk_blocks * - age_threshold / 100); - keycache_pthread_mutex_unlock(&keycache->cache_lock); - DBUG_VOID_RETURN; -} - - -/* - Remove key_cache from memory - - SYNOPSIS - end_key_cache() - keycache key cache handle - cleanup Complete free (Free also mutex for key cache) - - RETURN VALUE - none -*/ - -void end_key_cache(KEY_CACHE *keycache, my_bool cleanup) -{ - DBUG_ENTER("end_key_cache"); - DBUG_PRINT("enter", ("key_cache: 0x%lx", (long) keycache)); - - if (!keycache->key_cache_inited) - DBUG_VOID_RETURN; - - if (keycache->disk_blocks > 0) - { - if (keycache->block_mem) - { - my_large_free((uchar*) keycache->block_mem); - keycache->block_mem= NULL; - my_free(keycache->block_root); - keycache->block_root= NULL; - } - keycache->disk_blocks= -1; - /* Reset blocks_changed to be safe if flush_all_key_blocks is called */ - keycache->blocks_changed= 0; - } - - DBUG_PRINT("status", ("used: %lu changed: %lu w_requests: %lu " - "writes: %lu r_requests: %lu reads: %lu", - keycache->blocks_used, keycache->global_blocks_changed, - (ulong) keycache->global_cache_w_requests, - (ulong) keycache->global_cache_write, - (ulong) keycache->global_cache_r_requests, - (ulong) keycache->global_cache_read)); - - /* - Reset these values to be able to detect a disabled key cache. - See Bug#44068 (RESTORE can disable the MyISAM Key Cache). - */ - keycache->blocks_used= 0; - keycache->blocks_unused= 0; - - if (cleanup) - { - mysql_mutex_destroy(&keycache->cache_lock); - keycache->key_cache_inited= keycache->can_be_used= 0; - KEYCACHE_DEBUG_CLOSE; - } - DBUG_VOID_RETURN; -} /* end_key_cache */ - - -/* - Link a thread into double-linked queue of waiting threads. - - SYNOPSIS - link_into_queue() - wqueue pointer to the queue structure - thread pointer to the thread to be added to the queue - - RETURN VALUE - none - - NOTES. - Queue is represented by a circular list of the thread structures - The list is double-linked of the type (**prev,*next), accessed by - a pointer to the last element. -*/ - -static void link_into_queue(KEYCACHE_WQUEUE *wqueue, - struct st_my_thread_var *thread) -{ - struct st_my_thread_var *last; - - DBUG_ASSERT(!thread->next && !thread->prev); - if (! (last= wqueue->last_thread)) - { - /* Queue is empty */ - thread->next= thread; - thread->prev= &thread->next; - } - else - { - thread->prev= last->next->prev; - last->next->prev= &thread->next; - thread->next= last->next; - last->next= thread; - } - wqueue->last_thread= thread; -} - -/* - Unlink a thread from double-linked queue of waiting threads - - SYNOPSIS - unlink_from_queue() - wqueue pointer to the queue structure - thread pointer to the thread to be removed from the queue - - RETURN VALUE - none - - NOTES. - See NOTES for link_into_queue -*/ - -static void unlink_from_queue(KEYCACHE_WQUEUE *wqueue, - struct st_my_thread_var *thread) -{ - KEYCACHE_DBUG_PRINT("unlink_from_queue", ("thread %ld", thread->id)); - DBUG_ASSERT(thread->next && thread->prev); - if (thread->next == thread) - /* The queue contains only one member */ - wqueue->last_thread= NULL; - else - { - thread->next->prev= thread->prev; - *thread->prev=thread->next; - if (wqueue->last_thread == thread) - wqueue->last_thread= STRUCT_PTR(struct st_my_thread_var, next, - thread->prev); - } - thread->next= NULL; -#if !defined(DBUG_OFF) - /* - This makes it easier to see it's not in a chain during debugging. - And some DBUG_ASSERT() rely on it. - */ - thread->prev= NULL; -#endif -} - - -/* - Add a thread to single-linked queue of waiting threads - - SYNOPSIS - wait_on_queue() - wqueue Pointer to the queue structure. - mutex Cache_lock to acquire after awake. - - RETURN VALUE - none - - NOTES. - Queue is represented by a circular list of the thread structures - The list is single-linked of the type (*next), accessed by a pointer - to the last element. - - The function protects against stray signals by verifying that the - current thread is unlinked from the queue when awaking. However, - since several threads can wait for the same event, it might be - necessary for the caller of the function to check again if the - condition for awake is indeed matched. -*/ - -static void wait_on_queue(KEYCACHE_WQUEUE *wqueue, - mysql_mutex_t *mutex) -{ - struct st_my_thread_var *last; - struct st_my_thread_var *thread= my_thread_var; - - /* Add to queue. */ - DBUG_ASSERT(!thread->next); - DBUG_ASSERT(!thread->prev); /* Not required, but must be true anyway. */ - if (! (last= wqueue->last_thread)) - thread->next= thread; - else - { - thread->next= last->next; - last->next= thread; - } - wqueue->last_thread= thread; - - /* - Wait until thread is removed from queue by the signalling thread. - The loop protects against stray signals. - */ - do - { - KEYCACHE_DBUG_PRINT("wait", ("suspend thread %ld", thread->id)); - keycache_pthread_cond_wait(&thread->suspend, mutex); - } - while (thread->next); -} - - -/* - Remove all threads from queue signaling them to proceed - - SYNOPSIS - release_whole_queue() - wqueue pointer to the queue structure - - RETURN VALUE - none - - NOTES. - See notes for wait_on_queue(). - When removed from the queue each thread is signaled via condition - variable thread->suspend. -*/ - -static void release_whole_queue(KEYCACHE_WQUEUE *wqueue) -{ - struct st_my_thread_var *last; - struct st_my_thread_var *next; - struct st_my_thread_var *thread; - - /* Queue may be empty. */ - if (!(last= wqueue->last_thread)) - return; - - next= last->next; - do - { - thread=next; - KEYCACHE_DBUG_PRINT("release_whole_queue: signal", - ("thread %ld", thread->id)); - /* Signal the thread. */ - keycache_pthread_cond_signal(&thread->suspend); - /* Take thread from queue. */ - next=thread->next; - thread->next= NULL; - } - while (thread != last); - - /* Now queue is definitely empty. */ - wqueue->last_thread= NULL; -} - - -/* - Unlink a block from the chain of dirty/clean blocks -*/ - -static inline void unlink_changed(BLOCK_LINK *block) -{ - DBUG_ASSERT(block->prev_changed && *block->prev_changed == block); - if (block->next_changed) - block->next_changed->prev_changed= block->prev_changed; - *block->prev_changed= block->next_changed; - -#if !defined(DBUG_OFF) - /* - This makes it easier to see it's not in a chain during debugging. - And some DBUG_ASSERT() rely on it. - */ - block->next_changed= NULL; - block->prev_changed= NULL; -#endif -} - - -/* - Link a block into the chain of dirty/clean blocks -*/ - -static inline void link_changed(BLOCK_LINK *block, BLOCK_LINK **phead) -{ - DBUG_ASSERT(!block->next_changed); - DBUG_ASSERT(!block->prev_changed); - block->prev_changed= phead; - if ((block->next_changed= *phead)) - (*phead)->prev_changed= &block->next_changed; - *phead= block; -} - - -/* - Link a block in a chain of clean blocks of a file. - - SYNOPSIS - link_to_file_list() - keycache Key cache handle - block Block to relink - file File to be linked to - unlink If to unlink first - - DESCRIPTION - Unlink a block from whichever chain it is linked in, if it's - asked for, and link it to the chain of clean blocks of the - specified file. - - NOTE - Please do never set/clear BLOCK_CHANGED outside of - link_to_file_list() or link_to_changed_list(). - You would risk to damage correct counting of changed blocks - and to find blocks in the wrong hash. - - RETURN - void -*/ - -static void link_to_file_list(KEY_CACHE *keycache, - BLOCK_LINK *block, int file, - my_bool unlink_block) -{ - DBUG_ASSERT(block->status & BLOCK_IN_USE); - DBUG_ASSERT(block->hash_link && block->hash_link->block == block); - DBUG_ASSERT(block->hash_link->file == file); - if (unlink_block) - unlink_changed(block); - link_changed(block, &keycache->file_blocks[FILE_HASH(file)]); - if (block->status & BLOCK_CHANGED) - { - block->status&= ~BLOCK_CHANGED; - keycache->blocks_changed--; - keycache->global_blocks_changed--; - } -} - - -/* - Re-link a block from the clean chain to the dirty chain of a file. - - SYNOPSIS - link_to_changed_list() - keycache key cache handle - block block to relink - - DESCRIPTION - Unlink a block from the chain of clean blocks of a file - and link it to the chain of dirty blocks of the same file. - - NOTE - Please do never set/clear BLOCK_CHANGED outside of - link_to_file_list() or link_to_changed_list(). - You would risk to damage correct counting of changed blocks - and to find blocks in the wrong hash. - - RETURN - void -*/ - -static void link_to_changed_list(KEY_CACHE *keycache, - BLOCK_LINK *block) -{ - DBUG_ASSERT(block->status & BLOCK_IN_USE); - DBUG_ASSERT(!(block->status & BLOCK_CHANGED)); - DBUG_ASSERT(block->hash_link && block->hash_link->block == block); - - unlink_changed(block); - link_changed(block, - &keycache->changed_blocks[FILE_HASH(block->hash_link->file)]); - block->status|=BLOCK_CHANGED; - keycache->blocks_changed++; - keycache->global_blocks_changed++; -} - - -/* - Link a block to the LRU chain at the beginning or at the end of - one of two parts. - - SYNOPSIS - link_block() - keycache pointer to a key cache data structure - block pointer to the block to link to the LRU chain - hot <-> to link the block into the hot subchain - at_end <-> to link the block at the end of the subchain - - RETURN VALUE - none - - NOTES. - The LRU ring is represented by a circular list of block structures. - The list is double-linked of the type (**prev,*next) type. - The LRU ring is divided into two parts - hot and warm. - There are two pointers to access the last blocks of these two - parts. The beginning of the warm part follows right after the - end of the hot part. - Only blocks of the warm part can be used for eviction. - The first block from the beginning of this subchain is always - taken for eviction (keycache->last_used->next) - - LRU chain: +------+ H O T +------+ - +----| end |----...<----| beg |----+ - | +------+last +------+ | - v<-link in latest hot (new end) | - | link in latest warm (new end)->^ - | +------+ W A R M +------+ | - +----| beg |---->...----| end |----+ - +------+ +------+ins - first for eviction - - It is also possible that the block is selected for eviction and thus - not linked in the LRU ring. -*/ - -static void link_block(KEY_CACHE *keycache, BLOCK_LINK *block, my_bool hot, - my_bool at_end) -{ - BLOCK_LINK *ins; - BLOCK_LINK **pins; - - DBUG_ASSERT((block->status & ~BLOCK_CHANGED) == (BLOCK_READ | BLOCK_IN_USE)); - DBUG_ASSERT(block->hash_link); /*backptr to block NULL from free_block()*/ - DBUG_ASSERT(!block->requests); - DBUG_ASSERT(block->prev_changed && *block->prev_changed == block); - DBUG_ASSERT(!block->next_used); - DBUG_ASSERT(!block->prev_used); - - if (!hot && keycache->waiting_for_block.last_thread) - { - /* Signal that in the LRU warm sub-chain an available block has appeared */ - struct st_my_thread_var *last_thread= - keycache->waiting_for_block.last_thread; - struct st_my_thread_var *first_thread= last_thread->next; - struct st_my_thread_var *next_thread= first_thread; - HASH_LINK *hash_link= (HASH_LINK *) first_thread->opt_info; - struct st_my_thread_var *thread; - do - { - thread= next_thread; - next_thread= thread->next; - /* - We notify about the event all threads that ask - for the same page as the first thread in the queue - */ - if ((HASH_LINK *) thread->opt_info == hash_link) - { - KEYCACHE_DBUG_PRINT("link_block: signal", ("thread %ld", thread->id)); - keycache_pthread_cond_signal(&thread->suspend); - unlink_from_queue(&keycache->waiting_for_block, thread); - block->requests++; - } - } - while (thread != last_thread); - hash_link->block= block; - /* - NOTE: We assigned the block to the hash_link and signalled the - requesting thread(s). But it is possible that other threads runs - first. These threads see the hash_link assigned to a block which - is assigned to another hash_link and not marked BLOCK_IN_SWITCH. - This can be a problem for functions that do not select the block - via its hash_link: flush and free. They do only see a block which - is in a "normal" state and don't know that it will be evicted soon. - - We cannot set BLOCK_IN_SWITCH here because only one of the - requesting threads must handle the eviction. All others must wait - for it to complete. If we set the flag here, the threads would not - know who is in charge of the eviction. Without the flag, the first - thread takes the stick and sets the flag. - - But we need to note in the block that is has been selected for - eviction. It must not be freed. The evicting thread will not - expect the block in the free list. Before freeing we could also - check if block->requests > 1. But I think including another flag - in the check of block->status is slightly more efficient and - probably easier to read. - */ - block->status|= BLOCK_IN_EVICTION; - KEYCACHE_THREAD_TRACE("link_block: after signaling"); -#if defined(KEYCACHE_DEBUG) - KEYCACHE_DBUG_PRINT("link_block", - ("linked,unlinked block %u status=%x #requests=%u #available=%u", - BLOCK_NUMBER(block), block->status, - block->requests, keycache->blocks_available)); -#endif - return; - } - - pins= hot ? &keycache->used_ins : &keycache->used_last; - ins= *pins; - if (ins) - { - ins->next_used->prev_used= &block->next_used; - block->next_used= ins->next_used; - block->prev_used= &ins->next_used; - ins->next_used= block; - if (at_end) - *pins= block; - } - else - { - /* The LRU ring is empty. Let the block point to itself. */ - keycache->used_last= keycache->used_ins= block->next_used= block; - block->prev_used= &block->next_used; - } - KEYCACHE_THREAD_TRACE("link_block"); -#if defined(KEYCACHE_DEBUG) - keycache->blocks_available++; - KEYCACHE_DBUG_PRINT("link_block", - ("linked block %u:%1u status=%x #requests=%u #available=%u", - BLOCK_NUMBER(block), at_end, block->status, - block->requests, keycache->blocks_available)); - KEYCACHE_DBUG_ASSERT((ulong) keycache->blocks_available <= - keycache->blocks_used); -#endif -} - - -/* - Unlink a block from the LRU chain - - SYNOPSIS - unlink_block() - keycache pointer to a key cache data structure - block pointer to the block to unlink from the LRU chain - - RETURN VALUE - none - - NOTES. - See NOTES for link_block -*/ - -static void unlink_block(KEY_CACHE *keycache, BLOCK_LINK *block) -{ - DBUG_ASSERT((block->status & ~BLOCK_CHANGED) == (BLOCK_READ | BLOCK_IN_USE)); - DBUG_ASSERT(block->hash_link); /*backptr to block NULL from free_block()*/ - DBUG_ASSERT(!block->requests); - DBUG_ASSERT(block->prev_changed && *block->prev_changed == block); - DBUG_ASSERT(block->next_used && block->prev_used && - (block->next_used->prev_used == &block->next_used) && - (*block->prev_used == block)); - if (block->next_used == block) - /* The list contains only one member */ - keycache->used_last= keycache->used_ins= NULL; - else - { - block->next_used->prev_used= block->prev_used; - *block->prev_used= block->next_used; - if (keycache->used_last == block) - keycache->used_last= STRUCT_PTR(BLOCK_LINK, next_used, block->prev_used); - if (keycache->used_ins == block) - keycache->used_ins=STRUCT_PTR(BLOCK_LINK, next_used, block->prev_used); - } - block->next_used= NULL; -#if !defined(DBUG_OFF) - /* - This makes it easier to see it's not in a chain during debugging. - And some DBUG_ASSERT() rely on it. - */ - block->prev_used= NULL; -#endif - - KEYCACHE_THREAD_TRACE("unlink_block"); -#if defined(KEYCACHE_DEBUG) - KEYCACHE_DBUG_ASSERT(keycache->blocks_available != 0); - keycache->blocks_available--; - KEYCACHE_DBUG_PRINT("unlink_block", - ("unlinked block %u status=%x #requests=%u #available=%u", - BLOCK_NUMBER(block), block->status, - block->requests, keycache->blocks_available)); -#endif -} - - -/* - Register requests for a block. - - SYNOPSIS - reg_requests() - keycache Pointer to a key cache data structure. - block Pointer to the block to register a request on. - count Number of requests. Always 1. - - NOTE - The first request unlinks the block from the LRU ring. This means - that it is protected against eveiction. - - RETURN - void -*/ -static void reg_requests(KEY_CACHE *keycache, BLOCK_LINK *block, int count) -{ - DBUG_ASSERT(block->status & BLOCK_IN_USE); - DBUG_ASSERT(block->hash_link); - - if (!block->requests) - unlink_block(keycache, block); - block->requests+=count; -} - - -/* - Unregister request for a block - linking it to the LRU chain if it's the last request - - SYNOPSIS - unreg_request() - keycache pointer to a key cache data structure - block pointer to the block to link to the LRU chain - at_end <-> to link the block at the end of the LRU chain - - RETURN VALUE - none - - NOTES. - Every linking to the LRU ring decrements by one a special block - counter (if it's positive). If the at_end parameter is TRUE the block is - added either at the end of warm sub-chain or at the end of hot sub-chain. - It is added to the hot subchain if its counter is zero and number of - blocks in warm sub-chain is not less than some low limit (determined by - the division_limit parameter). Otherwise the block is added to the warm - sub-chain. If the at_end parameter is FALSE the block is always added - at beginning of the warm sub-chain. - Thus a warm block can be promoted to the hot sub-chain when its counter - becomes zero for the first time. - At the same time the block at the very beginning of the hot subchain - might be moved to the beginning of the warm subchain if it stays untouched - for a too long time (this time is determined by parameter age_threshold). - - It is also possible that the block is selected for eviction and thus - not linked in the LRU ring. -*/ - -static void unreg_request(KEY_CACHE *keycache, - BLOCK_LINK *block, int at_end) -{ - DBUG_ASSERT(block->status & (BLOCK_READ | BLOCK_IN_USE)); - DBUG_ASSERT(block->hash_link); /*backptr to block NULL from free_block()*/ - DBUG_ASSERT(block->requests); - DBUG_ASSERT(block->prev_changed && *block->prev_changed == block); - DBUG_ASSERT(!block->next_used); - DBUG_ASSERT(!block->prev_used); - /* - Unregister the request, but do not link erroneous blocks into the - LRU ring. - */ - if (!--block->requests && !(block->status & BLOCK_ERROR)) - { - my_bool hot; - if (block->hits_left) - block->hits_left--; - hot= !block->hits_left && at_end && - keycache->warm_blocks > keycache->min_warm_blocks; - if (hot) - { - if (block->temperature == BLOCK_WARM) - keycache->warm_blocks--; - block->temperature= BLOCK_HOT; - KEYCACHE_DBUG_PRINT("unreg_request", ("#warm_blocks: %lu", - keycache->warm_blocks)); - } - link_block(keycache, block, hot, (my_bool)at_end); - block->last_hit_time= keycache->keycache_time; - keycache->keycache_time++; - /* - At this place, the block might be in the LRU ring or not. If an - evicter was waiting for a block, it was selected for eviction and - not linked in the LRU ring. - */ - - /* - Check if we should link a hot block to the warm block sub-chain. - It is possible that we select the same block as above. But it can - also be another block. In any case a block from the LRU ring is - selected. In other words it works even if the above block was - selected for eviction and not linked in the LRU ring. Since this - happens only if the LRU ring is empty, the block selected below - would be NULL and the rest of the function skipped. - */ - block= keycache->used_ins; - if (block && keycache->keycache_time - block->last_hit_time > - keycache->age_threshold) - { - unlink_block(keycache, block); - link_block(keycache, block, 0, 0); - if (block->temperature != BLOCK_WARM) - { - keycache->warm_blocks++; - block->temperature= BLOCK_WARM; - } - KEYCACHE_DBUG_PRINT("unreg_request", ("#warm_blocks: %lu", - keycache->warm_blocks)); - } - } -} - -/* - Remove a reader of the page in block -*/ - -static void remove_reader(BLOCK_LINK *block) -{ - DBUG_ASSERT(block->status & (BLOCK_READ | BLOCK_IN_USE)); - DBUG_ASSERT(block->hash_link && block->hash_link->block == block); - DBUG_ASSERT(block->prev_changed && *block->prev_changed == block); - DBUG_ASSERT(!block->next_used); - DBUG_ASSERT(!block->prev_used); - DBUG_ASSERT(block->hash_link->requests); - - if (! --block->hash_link->requests && block->condvar) - keycache_pthread_cond_signal(block->condvar); -} - - -/* - Wait until the last reader of the page in block - signals on its termination -*/ - -static void wait_for_readers(KEY_CACHE *keycache, - BLOCK_LINK *block) -{ - struct st_my_thread_var *thread= my_thread_var; - DBUG_ASSERT(block->status & (BLOCK_READ | BLOCK_IN_USE)); - DBUG_ASSERT(!(block->status & (BLOCK_IN_FLUSH | BLOCK_CHANGED))); - DBUG_ASSERT(block->hash_link); - DBUG_ASSERT(block->hash_link->block == block); - /* Linked in file_blocks or changed_blocks hash. */ - DBUG_ASSERT(block->prev_changed && *block->prev_changed == block); - /* Not linked in LRU ring. */ - DBUG_ASSERT(!block->next_used); - DBUG_ASSERT(!block->prev_used); - while (block->hash_link->requests) - { - KEYCACHE_DBUG_PRINT("wait_for_readers: wait", - ("suspend thread %ld block %u", - thread->id, BLOCK_NUMBER(block))); - /* There must be no other waiter. We have no queue here. */ - DBUG_ASSERT(!block->condvar); - block->condvar= &thread->suspend; - keycache_pthread_cond_wait(&thread->suspend, &keycache->cache_lock); - block->condvar= NULL; - } -} - - -/* - Add a hash link to a bucket in the hash_table -*/ - -static inline void link_hash(HASH_LINK **start, HASH_LINK *hash_link) -{ - if (*start) - (*start)->prev= &hash_link->next; - hash_link->next= *start; - hash_link->prev= start; - *start= hash_link; -} - - -/* - Remove a hash link from the hash table -*/ - -static void unlink_hash(KEY_CACHE *keycache, HASH_LINK *hash_link) -{ - KEYCACHE_DBUG_PRINT("unlink_hash", ("fd: %u pos_ %lu #requests=%u", - (uint) hash_link->file,(ulong) hash_link->diskpos, hash_link->requests)); - KEYCACHE_DBUG_ASSERT(hash_link->requests == 0); - if ((*hash_link->prev= hash_link->next)) - hash_link->next->prev= hash_link->prev; - hash_link->block= NULL; - - if (keycache->waiting_for_hash_link.last_thread) - { - /* Signal that a free hash link has appeared */ - struct st_my_thread_var *last_thread= - keycache->waiting_for_hash_link.last_thread; - struct st_my_thread_var *first_thread= last_thread->next; - struct st_my_thread_var *next_thread= first_thread; - KEYCACHE_PAGE *first_page= (KEYCACHE_PAGE *) (first_thread->opt_info); - struct st_my_thread_var *thread; - - hash_link->file= first_page->file; - hash_link->diskpos= first_page->filepos; - do - { - KEYCACHE_PAGE *page; - thread= next_thread; - page= (KEYCACHE_PAGE *) thread->opt_info; - next_thread= thread->next; - /* - We notify about the event all threads that ask - for the same page as the first thread in the queue - */ - if (page->file == hash_link->file && page->filepos == hash_link->diskpos) - { - KEYCACHE_DBUG_PRINT("unlink_hash: signal", ("thread %ld", thread->id)); - keycache_pthread_cond_signal(&thread->suspend); - unlink_from_queue(&keycache->waiting_for_hash_link, thread); - } - } - while (thread != last_thread); - link_hash(&keycache->hash_root[KEYCACHE_HASH(hash_link->file, - hash_link->diskpos)], - hash_link); - return; - } - hash_link->next= keycache->free_hash_list; - keycache->free_hash_list= hash_link; -} - - -/* - Get the hash link for a page -*/ - -static HASH_LINK *get_hash_link(KEY_CACHE *keycache, - int file, my_off_t filepos) -{ - reg1 HASH_LINK *hash_link, **start; -#if defined(KEYCACHE_DEBUG) - int cnt; -#endif - - KEYCACHE_DBUG_PRINT("get_hash_link", ("fd: %u pos: %lu", - (uint) file,(ulong) filepos)); - -restart: - /* - Find the bucket in the hash table for the pair (file, filepos); - start contains the head of the bucket list, - hash_link points to the first member of the list - */ - hash_link= *(start= &keycache->hash_root[KEYCACHE_HASH(file, filepos)]); -#if defined(KEYCACHE_DEBUG) - cnt= 0; -#endif - /* Look for an element for the pair (file, filepos) in the bucket chain */ - while (hash_link && - (hash_link->diskpos != filepos || hash_link->file != file)) - { - hash_link= hash_link->next; -#if defined(KEYCACHE_DEBUG) - cnt++; - if (! (cnt <= keycache->hash_links_used)) - { - int i; - for (i=0, hash_link= *start ; - i < cnt ; i++, hash_link= hash_link->next) - { - KEYCACHE_DBUG_PRINT("get_hash_link", ("fd: %u pos: %lu", - (uint) hash_link->file,(ulong) hash_link->diskpos)); - } - } - KEYCACHE_DBUG_ASSERT(cnt <= keycache->hash_links_used); -#endif - } - if (! hash_link) - { - /* There is no hash link in the hash table for the pair (file, filepos) */ - if (keycache->free_hash_list) - { - hash_link= keycache->free_hash_list; - keycache->free_hash_list= hash_link->next; - } - else if (keycache->hash_links_used < keycache->hash_links) - { - hash_link= &keycache->hash_link_root[keycache->hash_links_used++]; - } - else - { - /* Wait for a free hash link */ - struct st_my_thread_var *thread= my_thread_var; - KEYCACHE_PAGE page; - KEYCACHE_DBUG_PRINT("get_hash_link", ("waiting")); - page.file= file; - page.filepos= filepos; - thread->opt_info= (void *) &page; - link_into_queue(&keycache->waiting_for_hash_link, thread); - KEYCACHE_DBUG_PRINT("get_hash_link: wait", - ("suspend thread %ld", thread->id)); - keycache_pthread_cond_wait(&thread->suspend, - &keycache->cache_lock); - thread->opt_info= NULL; - goto restart; - } - hash_link->file= file; - hash_link->diskpos= filepos; - link_hash(start, hash_link); - } - /* Register the request for the page */ - hash_link->requests++; - - return hash_link; -} - - -/* - Get a block for the file page requested by a keycache read/write operation; - If the page is not in the cache return a free block, if there is none - return the lru block after saving its buffer if the page is dirty. - - SYNOPSIS - - find_key_block() - keycache pointer to a key cache data structure - file handler for the file to read page from - filepos position of the page in the file - init_hits_left how initialize the block counter for the page - wrmode <-> get for writing - page_st out {PAGE_READ,PAGE_TO_BE_READ,PAGE_WAIT_TO_BE_READ} - - RETURN VALUE - Pointer to the found block if successful, 0 - otherwise - - NOTES. - For the page from file positioned at filepos the function checks whether - the page is in the key cache specified by the first parameter. - If this is the case it immediately returns the block. - If not, the function first chooses a block for this page. If there is - no not used blocks in the key cache yet, the function takes the block - at the very beginning of the warm sub-chain. It saves the page in that - block if it's dirty before returning the pointer to it. - The function returns in the page_st parameter the following values: - PAGE_READ - if page already in the block, - PAGE_TO_BE_READ - if it is to be read yet by the current thread - WAIT_TO_BE_READ - if it is to be read by another thread - If an error occurs THE BLOCK_ERROR bit is set in the block status. - It might happen that there are no blocks in LRU chain (in warm part) - - all blocks are unlinked for some read/write operations. Then the function - waits until first of this operations links any block back. -*/ - -static BLOCK_LINK *find_key_block(KEY_CACHE *keycache, - File file, my_off_t filepos, - int init_hits_left, - int wrmode, int *page_st) -{ - HASH_LINK *hash_link; - BLOCK_LINK *block; - int error= 0; - int page_status; - - DBUG_ENTER("find_key_block"); - KEYCACHE_THREAD_TRACE("find_key_block:begin"); - DBUG_PRINT("enter", ("fd: %d pos: %lu wrmode: %d", - file, (ulong) filepos, wrmode)); - KEYCACHE_DBUG_PRINT("find_key_block", ("fd: %d pos: %lu wrmode: %d", - file, (ulong) filepos, - wrmode)); -#if !defined(DBUG_OFF) && defined(EXTRA_DEBUG) - DBUG_EXECUTE("check_keycache2", - test_key_cache(keycache, "start of find_key_block", 0);); -#endif - -restart: - /* - If the flush phase of a resize operation fails, the cache is left - unusable. This will be detected only after "goto restart". - */ - if (!keycache->can_be_used) - DBUG_RETURN(0); - - /* - Find the hash_link for the requested file block (file, filepos). We - do always get a hash_link here. It has registered our request so - that no other thread can use it for another file block until we - release the request (which is done by remove_reader() usually). The - hash_link can have a block assigned to it or not. If there is a - block, it may be assigned to this hash_link or not. In cases where a - block is evicted from the cache, it is taken from the LRU ring and - referenced by the new hash_link. But the block can still be assigned - to its old hash_link for some time if it needs to be flushed first, - or if there are other threads still reading it. - - Summary: - hash_link is always returned. - hash_link->block can be: - - NULL or - - not assigned to this hash_link or - - assigned to this hash_link. If assigned, the block can have - - invalid data (when freshly assigned) or - - valid data. Valid data can be - - changed over the file contents (dirty) or - - not changed (clean). - */ - hash_link= get_hash_link(keycache, file, filepos); - DBUG_ASSERT((hash_link->file == file) && (hash_link->diskpos == filepos)); - - page_status= -1; - if ((block= hash_link->block) && - block->hash_link == hash_link && (block->status & BLOCK_READ)) - { - /* Assigned block with valid (changed or unchanged) contents. */ - page_status= PAGE_READ; - } - /* - else (page_status == -1) - - block == NULL or - - block not assigned to this hash_link or - - block assigned but not yet read from file (invalid data). - */ - - if (keycache->in_resize) - { - /* This is a request during a resize operation */ - - if (!block) - { - struct st_my_thread_var *thread; - - /* - The file block is not in the cache. We don't need it in the - cache: we are going to read or write directly to file. Cancel - the request. We can simply decrement hash_link->requests because - we did not release cache_lock since increasing it. So no other - thread can wait for our request to become released. - */ - if (hash_link->requests == 1) - { - /* - We are the only one to request this hash_link (this file/pos). - Free the hash_link. - */ - hash_link->requests--; - unlink_hash(keycache, hash_link); - DBUG_RETURN(0); - } - - /* - More requests on the hash_link. Someone tries to evict a block - for this hash_link (could have started before resizing started). - This means that the LRU ring is empty. Otherwise a block could - be assigned immediately. Behave like a thread that wants to - evict a block for this file/pos. Add to the queue of threads - waiting for a block. Wait until there is one assigned. - - Refresh the request on the hash-link so that it cannot be reused - for another file/pos. - */ - thread= my_thread_var; - thread->opt_info= (void *) hash_link; - link_into_queue(&keycache->waiting_for_block, thread); - do - { - KEYCACHE_DBUG_PRINT("find_key_block: wait", - ("suspend thread %ld", thread->id)); - keycache_pthread_cond_wait(&thread->suspend, - &keycache->cache_lock); - } while (thread->next); - thread->opt_info= NULL; - /* - A block should now be assigned to the hash_link. But it may - still need to be evicted. Anyway, we should re-check the - situation. page_status must be set correctly. - */ - hash_link->requests--; - goto restart; - } /* end of if (!block) */ - - /* - There is a block for this file/pos in the cache. Register a - request on it. This unlinks it from the LRU ring (if it is there) - and hence protects it against eviction (if not already in - eviction). We need this for returning the block to the caller, for - calling remove_reader() (for debugging purposes), and for calling - free_block(). The only case where we don't need the request is if - the block is in eviction. In that case we have to unregister the - request later. - */ - reg_requests(keycache, block, 1); - - if (page_status != PAGE_READ) - { - /* - - block not assigned to this hash_link or - - block assigned but not yet read from file (invalid data). - - This must be a block in eviction. It will be read soon. We need - to wait here until this happened. Otherwise the caller could - access a wrong block or a block which is in read. While waiting - we cannot lose hash_link nor block. We have registered a request - on the hash_link. Everything can happen to the block but changes - in the hash_link -> block relationship. In other words: - everything can happen to the block but free or another completed - eviction. - - Note that we bahave like a secondary requestor here. We just - cannot return with PAGE_WAIT_TO_BE_READ. This would work for - read requests and writes on dirty blocks that are not in flush - only. Waiting here on COND_FOR_REQUESTED works in all - situations. - */ - DBUG_ASSERT(((block->hash_link != hash_link) && - (block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH))) || - ((block->hash_link == hash_link) && - !(block->status & BLOCK_READ))); - wait_on_queue(&block->wqueue[COND_FOR_REQUESTED], &keycache->cache_lock); - /* - Here we can trust that the block has been assigned to this - hash_link (block->hash_link == hash_link) and read into the - buffer (BLOCK_READ). The worst things possible here are that the - block is in free (BLOCK_REASSIGNED). But the block is still - assigned to the hash_link. The freeing thread waits until we - release our request on the hash_link. The block must not be - again in eviction because we registered an request on it before - starting to wait. - */ - DBUG_ASSERT(block->hash_link == hash_link); - DBUG_ASSERT(block->status & (BLOCK_READ | BLOCK_IN_USE)); - DBUG_ASSERT(!(block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH))); - } - /* - The block is in the cache. Assigned to the hash_link. Valid data. - Note that in case of page_st == PAGE_READ, the block can be marked - for eviction. In any case it can be marked for freeing. - */ - - if (!wrmode) - { - /* A reader can just read the block. */ - *page_st= PAGE_READ; - DBUG_ASSERT((hash_link->file == file) && - (hash_link->diskpos == filepos) && - (block->hash_link == hash_link)); - DBUG_RETURN(block); - } - - /* - This is a writer. No two writers for the same block can exist. - This must be assured by locks outside of the key cache. - */ - DBUG_ASSERT(!(block->status & BLOCK_FOR_UPDATE) || fail_block(block)); - - while (block->status & BLOCK_IN_FLUSH) - { - /* - Wait until the block is flushed to file. Do not release the - request on the hash_link yet to prevent that the block is freed - or reassigned while we wait. While we wait, several things can - happen to the block, including another flush. But the block - cannot be reassigned to another hash_link until we release our - request on it. But it can be marked BLOCK_REASSIGNED from free - or eviction, while they wait for us to release the hash_link. - */ - wait_on_queue(&block->wqueue[COND_FOR_SAVED], &keycache->cache_lock); - /* - If the flush phase failed, the resize could have finished while - we waited here. - */ - if (!keycache->in_resize) - { - remove_reader(block); - unreg_request(keycache, block, 1); - goto restart; - } - DBUG_ASSERT(block->status & (BLOCK_READ | BLOCK_IN_USE)); - DBUG_ASSERT(!(block->status & BLOCK_FOR_UPDATE) || fail_block(block)); - DBUG_ASSERT(block->hash_link == hash_link); - } - - if (block->status & BLOCK_CHANGED) - { - /* - We want to write a block with changed contents. If the cache - block size is bigger than the callers block size (e.g. MyISAM), - the caller may replace part of the block only. Changes of the - other part of the block must be preserved. Since the block has - not yet been selected for flush, we can still add our changes. - */ - *page_st= PAGE_READ; - DBUG_ASSERT((hash_link->file == file) && - (hash_link->diskpos == filepos) && - (block->hash_link == hash_link)); - DBUG_RETURN(block); - } - - /* - This is a write request for a clean block. We do not want to have - new dirty blocks in the cache while resizing. We will free the - block and write directly to file. If the block is in eviction or - in free, we just let it go. - - Unregister from the hash_link. This must be done before freeing - the block. And it must be done if not freeing the block. Because - we could have waited above, we need to call remove_reader(). Other - threads could wait for us to release our request on the hash_link. - */ - remove_reader(block); - - /* If the block is not in eviction and not in free, we can free it. */ - if (!(block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH | - BLOCK_REASSIGNED))) - { - /* - Free block as we are going to write directly to file. - Although we have an exlusive lock for the updated key part, - the control can be yielded by the current thread as we might - have unfinished readers of other key parts in the block - buffer. Still we are guaranteed not to have any readers - of the key part we are writing into until the block is - removed from the cache as we set the BLOCK_REASSIGNED - flag (see the code below that handles reading requests). - */ - free_block(keycache, block); - } - else - { - /* - The block will be evicted/freed soon. Don't touch it in any way. - Unregister the request that we registered above. - */ - unreg_request(keycache, block, 1); - - /* - The block is still assigned to the hash_link (the file/pos that - we are going to write to). Wait until the eviction/free is - complete. Otherwise the direct write could complete before all - readers are done with the block. So they could read outdated - data. - - Since we released our request on the hash_link, it can be reused - for another file/pos. Hence we cannot just check for - block->hash_link == hash_link. As long as the resize is - proceeding the block cannot be reassigned to the same file/pos - again. So we can terminate the loop when the block is no longer - assigned to this file/pos. - */ - do - { - wait_on_queue(&block->wqueue[COND_FOR_SAVED], - &keycache->cache_lock); - /* - If the flush phase failed, the resize could have finished - while we waited here. - */ - if (!keycache->in_resize) - goto restart; - } while (block->hash_link && - (block->hash_link->file == file) && - (block->hash_link->diskpos == filepos)); - } - DBUG_RETURN(0); - } - - if (page_status == PAGE_READ && - (block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH | - BLOCK_REASSIGNED))) - { - /* - This is a request for a block to be removed from cache. The block - is assigned to this hash_link and contains valid data, but is - marked for eviction or to be freed. Possible reasons why it has - not yet been evicted/freed can be a flush before reassignment - (BLOCK_IN_SWITCH), readers of the block have not finished yet - (BLOCK_REASSIGNED), or the evicting thread did not yet awake after - the block has been selected for it (BLOCK_IN_EVICTION). - */ - - KEYCACHE_DBUG_PRINT("find_key_block", - ("request for old page in block %u " - "wrmode: %d block->status: %d", - BLOCK_NUMBER(block), wrmode, block->status)); - /* - Only reading requests can proceed until the old dirty page is flushed, - all others are to be suspended, then resubmitted - */ - if (!wrmode && !(block->status & BLOCK_REASSIGNED)) - { - /* - This is a read request and the block not yet reassigned. We can - register our request and proceed. This unlinks the block from - the LRU ring and protects it against eviction. - */ - reg_requests(keycache, block, 1); - } - else - { - /* - Either this is a write request for a block that is in eviction - or in free. We must not use it any more. Instead we must evict - another block. But we cannot do this before the eviction/free is - done. Otherwise we would find the same hash_link + block again - and again. - - Or this is a read request for a block in eviction/free that does - not require a flush, but waits for readers to finish with the - block. We do not read this block to let the eviction/free happen - as soon as possible. Again we must wait so that we don't find - the same hash_link + block again and again. - */ - DBUG_ASSERT(hash_link->requests); - hash_link->requests--; - KEYCACHE_DBUG_PRINT("find_key_block", - ("request waiting for old page to be saved")); - wait_on_queue(&block->wqueue[COND_FOR_SAVED], &keycache->cache_lock); - KEYCACHE_DBUG_PRINT("find_key_block", - ("request for old page resubmitted")); - /* - The block is no longer assigned to this hash_link. - Get another one. - */ - goto restart; - } - } - else - { - /* - This is a request for a new block or for a block not to be removed. - Either - - block == NULL or - - block not assigned to this hash_link or - - block assigned but not yet read from file, - or - - block assigned with valid (changed or unchanged) data and - - it will not be reassigned/freed. - */ - if (! block) - { - /* No block is assigned to the hash_link yet. */ - if (keycache->blocks_unused) - { - if (keycache->free_block_list) - { - /* There is a block in the free list. */ - block= keycache->free_block_list; - keycache->free_block_list= block->next_used; - block->next_used= NULL; - } - else - { - size_t block_mem_offset; - /* There are some never used blocks, take first of them */ - DBUG_ASSERT(keycache->blocks_used < - (ulong) keycache->disk_blocks); - block= &keycache->block_root[keycache->blocks_used]; - block_mem_offset= - ((size_t) keycache->blocks_used) * keycache->key_cache_block_size; - block->buffer= ADD_TO_PTR(keycache->block_mem, - block_mem_offset, - uchar*); - keycache->blocks_used++; - DBUG_ASSERT(!block->next_used); - } - DBUG_ASSERT(!block->prev_used); - DBUG_ASSERT(!block->next_changed); - DBUG_ASSERT(!block->prev_changed); - DBUG_ASSERT(!block->hash_link); - DBUG_ASSERT(!block->status); - DBUG_ASSERT(!block->requests); - keycache->blocks_unused--; - block->status= BLOCK_IN_USE; - block->length= 0; - block->offset= keycache->key_cache_block_size; - block->requests= 1; - block->temperature= BLOCK_COLD; - block->hits_left= init_hits_left; - block->last_hit_time= 0; - block->hash_link= hash_link; - hash_link->block= block; - link_to_file_list(keycache, block, file, 0); - page_status= PAGE_TO_BE_READ; - KEYCACHE_DBUG_PRINT("find_key_block", - ("got free or never used block %u", - BLOCK_NUMBER(block))); - } - else - { - /* - There are no free blocks and no never used blocks, use a block - from the LRU ring. - */ - - if (! keycache->used_last) - { - /* - The LRU ring is empty. Wait until a new block is added to - it. Several threads might wait here for the same hash_link, - all of them must get the same block. While waiting for a - block, after a block is selected for this hash_link, other - threads can run first before this one awakes. During this - time interval other threads find this hash_link pointing to - the block, which is still assigned to another hash_link. In - this case the block is not marked BLOCK_IN_SWITCH yet, but - it is marked BLOCK_IN_EVICTION. - */ - - struct st_my_thread_var *thread= my_thread_var; - thread->opt_info= (void *) hash_link; - link_into_queue(&keycache->waiting_for_block, thread); - do - { - KEYCACHE_DBUG_PRINT("find_key_block: wait", - ("suspend thread %ld", thread->id)); - keycache_pthread_cond_wait(&thread->suspend, - &keycache->cache_lock); - } - while (thread->next); - thread->opt_info= NULL; - /* Assert that block has a request registered. */ - DBUG_ASSERT(hash_link->block->requests); - /* Assert that block is not in LRU ring. */ - DBUG_ASSERT(!hash_link->block->next_used); - DBUG_ASSERT(!hash_link->block->prev_used); - } - - /* - If we waited above, hash_link->block has been assigned by - link_block(). Otherwise it is still NULL. In the latter case - we need to grab a block from the LRU ring ourselves. - */ - block= hash_link->block; - if (! block) - { - /* Select the last block from the LRU ring. */ - block= keycache->used_last->next_used; - block->hits_left= init_hits_left; - block->last_hit_time= 0; - hash_link->block= block; - /* - Register a request on the block. This unlinks it from the - LRU ring and protects it against eviction. - */ - DBUG_ASSERT(!block->requests); - reg_requests(keycache, block,1); - /* - We do not need to set block->status|= BLOCK_IN_EVICTION here - because we will set block->status|= BLOCK_IN_SWITCH - immediately without releasing the lock in between. This does - also support debugging. When looking at the block, one can - see if the block has been selected by link_block() after the - LRU ring was empty, or if it was grabbed directly from the - LRU ring in this branch. - */ - } - - /* - If we had to wait above, there is a small chance that another - thread grabbed this block for the same file block already. But - in most cases the first condition is true. - */ - if (block->hash_link != hash_link && - ! (block->status & BLOCK_IN_SWITCH) ) - { - /* this is a primary request for a new page */ - block->status|= BLOCK_IN_SWITCH; - - KEYCACHE_DBUG_PRINT("find_key_block", - ("got block %u for new page", BLOCK_NUMBER(block))); - - if (block->status & BLOCK_CHANGED) - { - /* The block contains a dirty page - push it out of the cache */ - - KEYCACHE_DBUG_PRINT("find_key_block", ("block is dirty")); - if (block->status & BLOCK_IN_FLUSH) - { - /* - The block is marked for flush. If we do not wait here, - it could happen that we write the block, reassign it to - another file block, then, before the new owner can read - the new file block, the flusher writes the cache block - (which still has the old contents) to the new file block! - */ - wait_on_queue(&block->wqueue[COND_FOR_SAVED], - &keycache->cache_lock); - /* - The block is marked BLOCK_IN_SWITCH. It should be left - alone except for reading. No free, no write. - */ - DBUG_ASSERT(block->status & (BLOCK_READ | BLOCK_IN_USE)); - DBUG_ASSERT(!(block->status & (BLOCK_REASSIGNED | - BLOCK_CHANGED | - BLOCK_FOR_UPDATE))); - } - else - { - block->status|= BLOCK_IN_FLUSH | BLOCK_IN_FLUSHWRITE; - /* - BLOCK_IN_EVICTION may be true or not. Other flags must - have a fixed value. - */ - DBUG_ASSERT((block->status & ~BLOCK_IN_EVICTION) == - (BLOCK_READ | BLOCK_IN_SWITCH | - BLOCK_IN_FLUSH | BLOCK_IN_FLUSHWRITE | - BLOCK_CHANGED | BLOCK_IN_USE)); - DBUG_ASSERT(block->hash_link); - - keycache_pthread_mutex_unlock(&keycache->cache_lock); - /* - The call is thread safe because only the current - thread might change the block->hash_link value - */ - error= my_pwrite(block->hash_link->file, - block->buffer + block->offset, - block->length - block->offset, - block->hash_link->diskpos + block->offset, - MYF(MY_NABP | MY_WAIT_IF_FULL)); - keycache_pthread_mutex_lock(&keycache->cache_lock); - - /* Block status must not have changed. */ - DBUG_ASSERT((block->status & ~BLOCK_IN_EVICTION) == - (BLOCK_READ | BLOCK_IN_SWITCH | - BLOCK_IN_FLUSH | BLOCK_IN_FLUSHWRITE | - BLOCK_CHANGED | BLOCK_IN_USE) || fail_block(block)); - keycache->global_cache_write++; - } - } - - block->status|= BLOCK_REASSIGNED; - /* - The block comes from the LRU ring. It must have a hash_link - assigned. - */ - DBUG_ASSERT(block->hash_link); - if (block->hash_link) - { - /* - All pending requests for this page must be resubmitted. - This must be done before waiting for readers. They could - wait for the flush to complete. And we must also do it - after the wait. Flushers might try to free the block while - we wait. They would wait until the reassignment is - complete. Also the block status must reflect the correct - situation: The block is not changed nor in flush any more. - Note that we must not change the BLOCK_CHANGED flag - outside of link_to_file_list() so that it is always in the - correct queue and the *blocks_changed counters are - correct. - */ - block->status&= ~(BLOCK_IN_FLUSH | BLOCK_IN_FLUSHWRITE); - link_to_file_list(keycache, block, block->hash_link->file, 1); - release_whole_queue(&block->wqueue[COND_FOR_SAVED]); - /* - The block is still assigned to its old hash_link. - Wait until all pending read requests - for this page are executed - (we could have avoided this waiting, if we had read - a page in the cache in a sweep, without yielding control) - */ - wait_for_readers(keycache, block); - DBUG_ASSERT(block->hash_link && block->hash_link->block == block && - block->prev_changed); - /* The reader must not have been a writer. */ - DBUG_ASSERT(!(block->status & BLOCK_CHANGED)); - - /* Wake flushers that might have found the block in between. */ - release_whole_queue(&block->wqueue[COND_FOR_SAVED]); - - /* Remove the hash link for the old file block from the hash. */ - unlink_hash(keycache, block->hash_link); - - /* - For sanity checks link_to_file_list() asserts that block - and hash_link refer to each other. Hence we need to assign - the hash_link first, but then we would not know if it was - linked before. Hence we would not know if to unlink it. So - unlink it here and call link_to_file_list(..., FALSE). - */ - unlink_changed(block); - } - block->status= error ? BLOCK_ERROR : BLOCK_IN_USE ; - block->length= 0; - block->offset= keycache->key_cache_block_size; - block->hash_link= hash_link; - link_to_file_list(keycache, block, file, 0); - page_status= PAGE_TO_BE_READ; - - KEYCACHE_DBUG_ASSERT(block->hash_link->block == block); - KEYCACHE_DBUG_ASSERT(hash_link->block->hash_link == hash_link); - } - else - { - /* - Either (block->hash_link == hash_link), - or (block->status & BLOCK_IN_SWITCH). - - This is for secondary requests for a new file block only. - Either it is already assigned to the new hash_link meanwhile - (if we had to wait due to empty LRU), or it is already in - eviction by another thread. Since this block has been - grabbed from the LRU ring and attached to this hash_link, - another thread cannot grab the same block from the LRU ring - anymore. If the block is in eviction already, it must become - attached to the same hash_link and as such destined for the - same file block. - */ - KEYCACHE_DBUG_PRINT("find_key_block", - ("block->hash_link: %p hash_link: %p " - "block->status: %u", block->hash_link, - hash_link, block->status )); - page_status= (((block->hash_link == hash_link) && - (block->status & BLOCK_READ)) ? - PAGE_READ : PAGE_WAIT_TO_BE_READ); - } - } - } - else - { - /* - Block is not NULL. This hash_link points to a block. - Either - - block not assigned to this hash_link (yet) or - - block assigned but not yet read from file, - or - - block assigned with valid (changed or unchanged) data and - - it will not be reassigned/freed. - - The first condition means hash_link points to a block in - eviction. This is not necessarily marked by BLOCK_IN_SWITCH yet. - But then it is marked BLOCK_IN_EVICTION. See the NOTE in - link_block(). In both cases it is destined for this hash_link - and its file block address. When this hash_link got its block - address, the block was removed from the LRU ring and cannot be - selected for eviction (for another hash_link) again. - - Register a request on the block. This is another protection - against eviction. - */ - DBUG_ASSERT(((block->hash_link != hash_link) && - (block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH))) || - ((block->hash_link == hash_link) && - !(block->status & BLOCK_READ)) || - ((block->status & BLOCK_READ) && - !(block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH)))); - reg_requests(keycache, block, 1); - KEYCACHE_DBUG_PRINT("find_key_block", - ("block->hash_link: %p hash_link: %p " - "block->status: %u", block->hash_link, - hash_link, block->status )); - page_status= (((block->hash_link == hash_link) && - (block->status & BLOCK_READ)) ? - PAGE_READ : PAGE_WAIT_TO_BE_READ); - } - } - - KEYCACHE_DBUG_ASSERT(page_status != -1); - /* Same assert basically, but be very sure. */ - KEYCACHE_DBUG_ASSERT(block); - /* Assert that block has a request and is not in LRU ring. */ - DBUG_ASSERT(block->requests); - DBUG_ASSERT(!block->next_used); - DBUG_ASSERT(!block->prev_used); - /* Assert that we return the correct block. */ - DBUG_ASSERT((page_status == PAGE_WAIT_TO_BE_READ) || - ((block->hash_link->file == file) && - (block->hash_link->diskpos == filepos))); - *page_st=page_status; - KEYCACHE_DBUG_PRINT("find_key_block", - ("fd: %d pos: %lu block->status: %u page_status: %d", - file, (ulong) filepos, block->status, - page_status)); - -#if !defined(DBUG_OFF) && defined(EXTRA_DEBUG) - DBUG_EXECUTE("check_keycache2", - test_key_cache(keycache, "end of find_key_block",0);); -#endif - KEYCACHE_THREAD_TRACE("find_key_block:end"); - DBUG_RETURN(block); -} - - -/* - Read into a key cache block buffer from disk. - - SYNOPSIS - - read_block() - keycache pointer to a key cache data structure - block block to which buffer the data is to be read - read_length size of data to be read - min_length at least so much data must be read - primary <-> the current thread will read the data - - RETURN VALUE - None - - NOTES. - The function either reads a page data from file to the block buffer, - or waits until another thread reads it. What page to read is determined - by a block parameter - reference to a hash link for this page. - If an error occurs THE BLOCK_ERROR bit is set in the block status. - We do not report error when the size of successfully read - portion is less than read_length, but not less than min_length. -*/ - -static void read_block(KEY_CACHE *keycache, - BLOCK_LINK *block, uint read_length, - uint min_length, my_bool primary) -{ - size_t got_length; - - /* On entry cache_lock is locked */ - - KEYCACHE_THREAD_TRACE("read_block"); - if (primary) - { - /* - This code is executed only by threads that submitted primary - requests. Until block->status contains BLOCK_READ, all other - request for the block become secondary requests. For a primary - request the block must be properly initialized. - */ - DBUG_ASSERT(((block->status & ~BLOCK_FOR_UPDATE) == BLOCK_IN_USE) || - fail_block(block)); - DBUG_ASSERT((block->length == 0) || fail_block(block)); - DBUG_ASSERT((block->offset == keycache->key_cache_block_size) || - fail_block(block)); - DBUG_ASSERT((block->requests > 0) || fail_block(block)); - - KEYCACHE_DBUG_PRINT("read_block", - ("page to be read by primary request")); - - keycache->global_cache_read++; - /* Page is not in buffer yet, is to be read from disk */ - keycache_pthread_mutex_unlock(&keycache->cache_lock); - /* - Here other threads may step in and register as secondary readers. - They will register in block->wqueue[COND_FOR_REQUESTED]. - */ - got_length= my_pread(block->hash_link->file, block->buffer, - read_length, block->hash_link->diskpos, MYF(0)); - keycache_pthread_mutex_lock(&keycache->cache_lock); - /* - The block can now have been marked for free (in case of - FLUSH_RELEASE). Otherwise the state must be unchanged. - */ - DBUG_ASSERT(((block->status & ~(BLOCK_REASSIGNED | - BLOCK_FOR_UPDATE)) == BLOCK_IN_USE) || - fail_block(block)); - DBUG_ASSERT((block->length == 0) || fail_block(block)); - DBUG_ASSERT((block->offset == keycache->key_cache_block_size) || - fail_block(block)); - DBUG_ASSERT((block->requests > 0) || fail_block(block)); - - if (got_length < min_length) - block->status|= BLOCK_ERROR; - else - { - block->status|= BLOCK_READ; - block->length= got_length; - /* - Do not set block->offset here. If this block is marked - BLOCK_CHANGED later, we want to flush only the modified part. So - only a writer may set block->offset down from - keycache->key_cache_block_size. - */ - } - KEYCACHE_DBUG_PRINT("read_block", - ("primary request: new page in cache")); - /* Signal that all pending requests for this page now can be processed */ - release_whole_queue(&block->wqueue[COND_FOR_REQUESTED]); - } - else - { - /* - This code is executed only by threads that submitted secondary - requests. At this point it could happen that the cache block is - not yet assigned to the hash_link for the requested file block. - But at awake from the wait this should be the case. Unfortunately - we cannot assert this here because we do not know the hash_link - for the requested file block nor the file and position. So we have - to assert this in the caller. - */ - KEYCACHE_DBUG_PRINT("read_block", - ("secondary request waiting for new page to be read")); - wait_on_queue(&block->wqueue[COND_FOR_REQUESTED], &keycache->cache_lock); - KEYCACHE_DBUG_PRINT("read_block", - ("secondary request: new page in cache")); - } -} - - -/* - Read a block of data from a cached file into a buffer; - - SYNOPSIS - - key_cache_read() - keycache pointer to a key cache data structure - file handler for the file for the block of data to be read - filepos position of the block of data in the file - level determines the weight of the data - buff buffer to where the data must be placed - length length of the buffer - block_length length of the block in the key cache buffer - return_buffer return pointer to the key cache buffer with the data - - RETURN VALUE - Returns address from where the data is placed if sucessful, 0 - otherwise. - - NOTES. - The function ensures that a block of data of size length from file - positioned at filepos is in the buffers for some key cache blocks. - Then the function either copies the data into the buffer buff, or, - if return_buffer is TRUE, it just returns the pointer to the key cache - buffer with the data. - Filepos must be a multiple of 'block_length', but it doesn't - have to be a multiple of key_cache_block_size; -*/ - -uchar *key_cache_read(KEY_CACHE *keycache, - File file, my_off_t filepos, int level, - uchar *buff, uint length, - uint block_length __attribute__((unused)), - int return_buffer __attribute__((unused))) -{ - my_bool locked_and_incremented= FALSE; - int error=0; - uchar *start= buff; - DBUG_ENTER("key_cache_read"); - DBUG_PRINT("enter", ("fd: %u pos: %lu length: %u", - (uint) file, (ulong) filepos, length)); - - if (keycache->key_cache_inited) - { - /* Key cache is used */ - reg1 BLOCK_LINK *block; - uint read_length; - uint offset; - int page_st; - - if (MYSQL_KEYCACHE_READ_START_ENABLED()) - { - MYSQL_KEYCACHE_READ_START(my_filename(file), length, - (ulong) (keycache->blocks_used * - keycache->key_cache_block_size), - (ulong) (keycache->blocks_unused * - keycache->key_cache_block_size)); - } - - /* - When the key cache is once initialized, we use the cache_lock to - reliably distinguish the cases of normal operation, resizing, and - disabled cache. We always increment and decrement - 'cnt_for_resize_op' so that a resizer can wait for pending I/O. - */ - keycache_pthread_mutex_lock(&keycache->cache_lock); - /* - Cache resizing has two phases: Flushing and re-initializing. In - the flush phase read requests are allowed to bypass the cache for - blocks not in the cache. find_key_block() returns NULL in this - case. - - After the flush phase new I/O requests must wait until the - re-initialization is done. The re-initialization can be done only - if no I/O request is in progress. The reason is that - key_cache_block_size can change. With enabled cache, I/O is done - in chunks of key_cache_block_size. Every chunk tries to use a - cache block first. If the block size changes in the middle, a - block could be missed and old data could be read. - */ - while (keycache->in_resize && !keycache->resize_in_flush) - wait_on_queue(&keycache->resize_queue, &keycache->cache_lock); - /* Register the I/O for the next resize. */ - inc_counter_for_resize_op(keycache); - locked_and_incremented= TRUE; - /* Requested data may not always be aligned to cache blocks. */ - offset= (uint) (filepos % keycache->key_cache_block_size); - /* Read data in key_cache_block_size increments */ - do - { - /* Cache could be disabled in a later iteration. */ - if (!keycache->can_be_used) - { - KEYCACHE_DBUG_PRINT("key_cache_read", ("keycache cannot be used")); - goto no_key_cache; - } - /* Start reading at the beginning of the cache block. */ - filepos-= offset; - /* Do not read beyond the end of the cache block. */ - read_length= length; - set_if_smaller(read_length, keycache->key_cache_block_size-offset); - KEYCACHE_DBUG_ASSERT(read_length > 0); - - if (block_length > keycache->key_cache_block_size || offset) - return_buffer=0; - - /* Request the cache block that matches file/pos. */ - keycache->global_cache_r_requests++; - - MYSQL_KEYCACHE_READ_BLOCK(keycache->key_cache_block_size); - - block=find_key_block(keycache, file, filepos, level, 0, &page_st); - if (!block) - { - /* - This happens only for requests submitted during key cache - resize. The block is not in the cache and shall not go in. - Read directly from file. - */ - keycache->global_cache_read++; - keycache_pthread_mutex_unlock(&keycache->cache_lock); - error= (my_pread(file, (uchar*) buff, read_length, - filepos + offset, MYF(MY_NABP)) != 0); - keycache_pthread_mutex_lock(&keycache->cache_lock); - goto next_block; - } - if (!(block->status & BLOCK_ERROR)) - { - if (page_st != PAGE_READ) - { - MYSQL_KEYCACHE_READ_MISS(); - /* The requested page is to be read into the block buffer */ - read_block(keycache, block, - keycache->key_cache_block_size, read_length+offset, - (my_bool)(page_st == PAGE_TO_BE_READ)); - /* - A secondary request must now have the block assigned to the - requested file block. It does not hurt to check it for - primary requests too. - */ - DBUG_ASSERT(keycache->can_be_used); - DBUG_ASSERT(block->hash_link->file == file); - DBUG_ASSERT(block->hash_link->diskpos == filepos); - DBUG_ASSERT(block->status & (BLOCK_READ | BLOCK_IN_USE)); - } - else if (block->length < read_length + offset) - { - /* - Impossible if nothing goes wrong: - this could only happen if we are using a file with - small key blocks and are trying to read outside the file - */ - my_errno= -1; - block->status|= BLOCK_ERROR; - } - else - { - MYSQL_KEYCACHE_READ_HIT(); - } - } - - /* block status may have added BLOCK_ERROR in the above 'if'. */ - if (!(block->status & BLOCK_ERROR)) - { - { - DBUG_ASSERT(block->status & (BLOCK_READ | BLOCK_IN_USE)); -#if !defined(SERIALIZED_READ_FROM_CACHE) - keycache_pthread_mutex_unlock(&keycache->cache_lock); -#endif - - /* Copy data from the cache buffer */ - memcpy(buff, block->buffer+offset, (size_t) read_length); - -#if !defined(SERIALIZED_READ_FROM_CACHE) - keycache_pthread_mutex_lock(&keycache->cache_lock); - DBUG_ASSERT(block->status & (BLOCK_READ | BLOCK_IN_USE)); -#endif - } - } - - remove_reader(block); - - /* Error injection for coverage testing. */ - DBUG_EXECUTE_IF("key_cache_read_block_error", - block->status|= BLOCK_ERROR;); - - /* Do not link erroneous blocks into the LRU ring, but free them. */ - if (!(block->status & BLOCK_ERROR)) - { - /* - Link the block into the LRU ring if it's the last submitted - request for the block. This enables eviction for the block. - */ - unreg_request(keycache, block, 1); - } - else - { - free_block(keycache, block); - error= 1; - break; - } - - next_block: - buff+= read_length; - filepos+= read_length+offset; - offset= 0; - - } while ((length-= read_length)); - if (MYSQL_KEYCACHE_READ_DONE_ENABLED()) - { - MYSQL_KEYCACHE_READ_DONE((ulong) (keycache->blocks_used * - keycache->key_cache_block_size), - (ulong) (keycache->blocks_unused * - keycache->key_cache_block_size)); - } - goto end; - } - KEYCACHE_DBUG_PRINT("key_cache_read", ("keycache not initialized")); - -no_key_cache: - /* Key cache is not used */ - - keycache->global_cache_r_requests++; - keycache->global_cache_read++; - - if (locked_and_incremented) - keycache_pthread_mutex_unlock(&keycache->cache_lock); - if (my_pread(file, (uchar*) buff, length, filepos, MYF(MY_NABP))) - error= 1; - if (locked_and_incremented) - keycache_pthread_mutex_lock(&keycache->cache_lock); - -end: - if (locked_and_incremented) - { - dec_counter_for_resize_op(keycache); - keycache_pthread_mutex_unlock(&keycache->cache_lock); - } - DBUG_PRINT("exit", ("error: %d", error )); - DBUG_RETURN(error ? (uchar*) 0 : start); -} - - -/* - Insert a block of file data from a buffer into key cache - - SYNOPSIS - key_cache_insert() - keycache pointer to a key cache data structure - file handler for the file to insert data from - filepos position of the block of data in the file to insert - level determines the weight of the data - buff buffer to read data from - length length of the data in the buffer - - NOTES - This is used by MyISAM to move all blocks from a index file to the key - cache - - RETURN VALUE - 0 if a success, 1 - otherwise. -*/ - -int key_cache_insert(KEY_CACHE *keycache, - File file, my_off_t filepos, int level, - uchar *buff, uint length) -{ - int error= 0; - DBUG_ENTER("key_cache_insert"); - DBUG_PRINT("enter", ("fd: %u pos: %lu length: %u", - (uint) file,(ulong) filepos, length)); - - if (keycache->key_cache_inited) - { - /* Key cache is used */ - reg1 BLOCK_LINK *block; - uint read_length; - uint offset; - int page_st; - my_bool locked_and_incremented= FALSE; - - /* - When the keycache is once initialized, we use the cache_lock to - reliably distinguish the cases of normal operation, resizing, and - disabled cache. We always increment and decrement - 'cnt_for_resize_op' so that a resizer can wait for pending I/O. - */ - keycache_pthread_mutex_lock(&keycache->cache_lock); - /* - We do not load index data into a disabled cache nor into an - ongoing resize. - */ - if (!keycache->can_be_used || keycache->in_resize) - goto no_key_cache; - /* Register the pseudo I/O for the next resize. */ - inc_counter_for_resize_op(keycache); - locked_and_incremented= TRUE; - /* Loaded data may not always be aligned to cache blocks. */ - offset= (uint) (filepos % keycache->key_cache_block_size); - /* Load data in key_cache_block_size increments. */ - do - { - /* Cache could be disabled or resizing in a later iteration. */ - if (!keycache->can_be_used || keycache->in_resize) - goto no_key_cache; - /* Start loading at the beginning of the cache block. */ - filepos-= offset; - /* Do not load beyond the end of the cache block. */ - read_length= length; - set_if_smaller(read_length, keycache->key_cache_block_size-offset); - KEYCACHE_DBUG_ASSERT(read_length > 0); - - /* The block has been read by the caller already. */ - keycache->global_cache_read++; - /* Request the cache block that matches file/pos. */ - keycache->global_cache_r_requests++; - block= find_key_block(keycache, file, filepos, level, 0, &page_st); - if (!block) - { - /* - This happens only for requests submitted during key cache - resize. The block is not in the cache and shall not go in. - Stop loading index data. - */ - goto no_key_cache; - } - if (!(block->status & BLOCK_ERROR)) - { - if ((page_st == PAGE_WAIT_TO_BE_READ) || - ((page_st == PAGE_TO_BE_READ) && - (offset || (read_length < keycache->key_cache_block_size)))) - { - /* - Either - - this is a secondary request for a block to be read into the - cache. The block is in eviction. It is not yet assigned to - the requested file block (It does not point to the right - hash_link). So we cannot call remove_reader() on the block. - And we cannot access the hash_link directly here. We need to - wait until the assignment is complete. read_block() executes - the correct wait when called with primary == FALSE. - - Or - - this is a primary request for a block to be read into the - cache and the supplied data does not fill the whole block. - - This function is called on behalf of a LOAD INDEX INTO CACHE - statement, which is a read-only task and allows other - readers. It is possible that a parallel running reader tries - to access this block. If it needs more data than has been - supplied here, it would report an error. To be sure that we - have all data in the block that is available in the file, we - read the block ourselves. - - Though reading again what the caller did read already is an - expensive operation, we need to do this for correctness. - */ - read_block(keycache, block, keycache->key_cache_block_size, - read_length + offset, (page_st == PAGE_TO_BE_READ)); - /* - A secondary request must now have the block assigned to the - requested file block. It does not hurt to check it for - primary requests too. - */ - DBUG_ASSERT(keycache->can_be_used); - DBUG_ASSERT(block->hash_link->file == file); - DBUG_ASSERT(block->hash_link->diskpos == filepos); - DBUG_ASSERT(block->status & (BLOCK_READ | BLOCK_IN_USE)); - } - else if (page_st == PAGE_TO_BE_READ) - { - /* - This is a new block in the cache. If we come here, we have - data for the whole block. - */ - DBUG_ASSERT(block->hash_link->requests); - DBUG_ASSERT(block->status & BLOCK_IN_USE); - DBUG_ASSERT((page_st == PAGE_TO_BE_READ) || - (block->status & BLOCK_READ)); - -#if !defined(SERIALIZED_READ_FROM_CACHE) - keycache_pthread_mutex_unlock(&keycache->cache_lock); - /* - Here other threads may step in and register as secondary readers. - They will register in block->wqueue[COND_FOR_REQUESTED]. - */ -#endif - - /* Copy data from buff */ - memcpy(block->buffer+offset, buff, (size_t) read_length); - -#if !defined(SERIALIZED_READ_FROM_CACHE) - keycache_pthread_mutex_lock(&keycache->cache_lock); - DBUG_ASSERT(block->status & BLOCK_IN_USE); - DBUG_ASSERT((page_st == PAGE_TO_BE_READ) || - (block->status & BLOCK_READ)); -#endif - /* - After the data is in the buffer, we can declare the block - valid. Now other threads do not need to register as - secondary readers any more. They can immediately access the - block. - */ - block->status|= BLOCK_READ; - block->length= read_length+offset; - /* - Do not set block->offset here. If this block is marked - BLOCK_CHANGED later, we want to flush only the modified part. So - only a writer may set block->offset down from - keycache->key_cache_block_size. - */ - KEYCACHE_DBUG_PRINT("key_cache_insert", - ("primary request: new page in cache")); - /* Signal all pending requests. */ - release_whole_queue(&block->wqueue[COND_FOR_REQUESTED]); - } - else - { - /* - page_st == PAGE_READ. The block is in the buffer. All data - must already be present. Blocks are always read with all - data available on file. Assert that the block does not have - less contents than the preloader supplies. If the caller has - data beyond block->length, it means that a file write has - been done while this block was in cache and not extended - with the new data. If the condition is met, we can simply - ignore the block. - */ - DBUG_ASSERT((page_st == PAGE_READ) && - (read_length + offset <= block->length)); - } - - /* - A secondary request must now have the block assigned to the - requested file block. It does not hurt to check it for primary - requests too. - */ - DBUG_ASSERT(block->hash_link->file == file); - DBUG_ASSERT(block->hash_link->diskpos == filepos); - DBUG_ASSERT(block->status & (BLOCK_READ | BLOCK_IN_USE)); - } /* end of if (!(block->status & BLOCK_ERROR)) */ - - remove_reader(block); - - /* Error injection for coverage testing. */ - DBUG_EXECUTE_IF("key_cache_insert_block_error", - block->status|= BLOCK_ERROR; errno=EIO;); - - /* Do not link erroneous blocks into the LRU ring, but free them. */ - if (!(block->status & BLOCK_ERROR)) - { - /* - Link the block into the LRU ring if it's the last submitted - request for the block. This enables eviction for the block. - */ - unreg_request(keycache, block, 1); - } - else - { - free_block(keycache, block); - error= 1; - break; - } - - buff+= read_length; - filepos+= read_length+offset; - offset= 0; - - } while ((length-= read_length)); - - no_key_cache: - if (locked_and_incremented) - dec_counter_for_resize_op(keycache); - keycache_pthread_mutex_unlock(&keycache->cache_lock); - } - DBUG_RETURN(error); -} - - -/* - Write a buffer into a cached file. - - SYNOPSIS - - key_cache_write() - keycache pointer to a key cache data structure - file handler for the file to write data to - filepos position in the file to write data to - level determines the weight of the data - buff buffer with the data - length length of the buffer - dont_write if is 0 then all dirty pages involved in writing - should have been flushed from key cache - - RETURN VALUE - 0 if a success, 1 - otherwise. - - NOTES. - The function copies the data of size length from buff into buffers - for key cache blocks that are assigned to contain the portion of - the file starting with position filepos. - It ensures that this data is flushed to the file if dont_write is FALSE. - Filepos must be a multiple of 'block_length', but it doesn't - have to be a multiple of key_cache_block_size; - - dont_write is always TRUE in the server (info->lock_type is never F_UNLCK). -*/ - -int key_cache_write(KEY_CACHE *keycache, - File file, my_off_t filepos, int level, - uchar *buff, uint length, - uint block_length __attribute__((unused)), - int dont_write) -{ - my_bool locked_and_incremented= FALSE; - int error=0; - DBUG_ENTER("key_cache_write"); - DBUG_PRINT("enter", - ("fd: %u pos: %lu length: %u block_length: %u" - " key_block_length: %u", - (uint) file, (ulong) filepos, length, block_length, - keycache ? keycache->key_cache_block_size : 0)); - - if (!dont_write) - { - /* purecov: begin inspected */ - /* Not used in the server. */ - /* Force writing from buff into disk. */ - keycache->global_cache_w_requests++; - keycache->global_cache_write++; - if (my_pwrite(file, buff, length, filepos, MYF(MY_NABP | MY_WAIT_IF_FULL))) - DBUG_RETURN(1); - /* purecov: end */ - } - -#if !defined(DBUG_OFF) && defined(EXTRA_DEBUG) - DBUG_EXECUTE("check_keycache", - test_key_cache(keycache, "start of key_cache_write", 1);); -#endif - - if (keycache->key_cache_inited) - { - /* Key cache is used */ - reg1 BLOCK_LINK *block; - uint read_length; - uint offset; - int page_st; - - if (MYSQL_KEYCACHE_WRITE_START_ENABLED()) - { - MYSQL_KEYCACHE_WRITE_START(my_filename(file), length, - (ulong) (keycache->blocks_used * - keycache->key_cache_block_size), - (ulong) (keycache->blocks_unused * - keycache->key_cache_block_size)); - } - - /* - When the key cache is once initialized, we use the cache_lock to - reliably distinguish the cases of normal operation, resizing, and - disabled cache. We always increment and decrement - 'cnt_for_resize_op' so that a resizer can wait for pending I/O. - */ - keycache_pthread_mutex_lock(&keycache->cache_lock); - /* - Cache resizing has two phases: Flushing and re-initializing. In - the flush phase write requests can modify dirty blocks that are - not yet in flush. Otherwise they are allowed to bypass the cache. - find_key_block() returns NULL in both cases (clean blocks and - non-cached blocks). - - After the flush phase new I/O requests must wait until the - re-initialization is done. The re-initialization can be done only - if no I/O request is in progress. The reason is that - key_cache_block_size can change. With enabled cache I/O is done in - chunks of key_cache_block_size. Every chunk tries to use a cache - block first. If the block size changes in the middle, a block - could be missed and data could be written below a cached block. - */ - while (keycache->in_resize && !keycache->resize_in_flush) - wait_on_queue(&keycache->resize_queue, &keycache->cache_lock); - /* Register the I/O for the next resize. */ - inc_counter_for_resize_op(keycache); - locked_and_incremented= TRUE; - /* Requested data may not always be aligned to cache blocks. */ - offset= (uint) (filepos % keycache->key_cache_block_size); - /* Write data in key_cache_block_size increments. */ - do - { - /* Cache could be disabled in a later iteration. */ - if (!keycache->can_be_used) - goto no_key_cache; - - MYSQL_KEYCACHE_WRITE_BLOCK(keycache->key_cache_block_size); - /* Start writing at the beginning of the cache block. */ - filepos-= offset; - /* Do not write beyond the end of the cache block. */ - read_length= length; - set_if_smaller(read_length, keycache->key_cache_block_size-offset); - KEYCACHE_DBUG_ASSERT(read_length > 0); - - /* Request the cache block that matches file/pos. */ - keycache->global_cache_w_requests++; - block= find_key_block(keycache, file, filepos, level, 1, &page_st); - if (!block) - { - /* - This happens only for requests submitted during key cache - resize. The block is not in the cache and shall not go in. - Write directly to file. - */ - if (dont_write) - { - /* Used in the server. */ - keycache->global_cache_write++; - keycache_pthread_mutex_unlock(&keycache->cache_lock); - if (my_pwrite(file, (uchar*) buff, read_length, filepos + offset, - MYF(MY_NABP | MY_WAIT_IF_FULL))) - error=1; - keycache_pthread_mutex_lock(&keycache->cache_lock); - } - goto next_block; - } - /* - Prevent block from flushing and from being selected for to be - freed. This must be set when we release the cache_lock. - However, we must not set the status of the block before it is - assigned to this file/pos. - */ - if (page_st != PAGE_WAIT_TO_BE_READ) - block->status|= BLOCK_FOR_UPDATE; - /* - We must read the file block first if it is not yet in the cache - and we do not replace all of its contents. - - In cases where the cache block is big enough to contain (parts - of) index blocks of different indexes, our request can be - secondary (PAGE_WAIT_TO_BE_READ). In this case another thread is - reading the file block. If the read completes after us, it - overwrites our new contents with the old contents. So we have to - wait for the other thread to complete the read of this block. - read_block() takes care for the wait. - */ - if (!(block->status & BLOCK_ERROR) && - ((page_st == PAGE_TO_BE_READ && - (offset || read_length < keycache->key_cache_block_size)) || - (page_st == PAGE_WAIT_TO_BE_READ))) - { - read_block(keycache, block, - offset + read_length >= keycache->key_cache_block_size? - offset : keycache->key_cache_block_size, - offset, (page_st == PAGE_TO_BE_READ)); - DBUG_ASSERT(keycache->can_be_used); - DBUG_ASSERT(block->status & (BLOCK_READ | BLOCK_IN_USE)); - /* - Prevent block from flushing and from being selected for to be - freed. This must be set when we release the cache_lock. - Here we set it in case we could not set it above. - */ - block->status|= BLOCK_FOR_UPDATE; - } - /* - The block should always be assigned to the requested file block - here. It need not be BLOCK_READ when overwriting the whole block. - */ - DBUG_ASSERT(block->hash_link->file == file); - DBUG_ASSERT(block->hash_link->diskpos == filepos); - DBUG_ASSERT(block->status & BLOCK_IN_USE); - DBUG_ASSERT((page_st == PAGE_TO_BE_READ) || (block->status & BLOCK_READ)); - /* - The block to be written must not be marked BLOCK_REASSIGNED. - Otherwise it could be freed in dirty state or reused without - another flush during eviction. It must also not be in flush. - Otherwise the old contens may have been flushed already and - the flusher could clear BLOCK_CHANGED without flushing the - new changes again. - */ - DBUG_ASSERT(!(block->status & BLOCK_REASSIGNED)); - - while (block->status & BLOCK_IN_FLUSHWRITE) - { - /* - Another thread is flushing the block. It was dirty already. - Wait until the block is flushed to file. Otherwise we could - modify the buffer contents just while it is written to file. - An unpredictable file block contents would be the result. - While we wait, several things can happen to the block, - including another flush. But the block cannot be reassigned to - another hash_link until we release our request on it. - */ - wait_on_queue(&block->wqueue[COND_FOR_SAVED], &keycache->cache_lock); - DBUG_ASSERT(keycache->can_be_used); - DBUG_ASSERT(block->status & (BLOCK_READ | BLOCK_IN_USE)); - /* Still must not be marked for free. */ - DBUG_ASSERT(!(block->status & BLOCK_REASSIGNED)); - DBUG_ASSERT(block->hash_link && (block->hash_link->block == block)); - } - - /* - We could perhaps release the cache_lock during access of the - data like in the other functions. Locks outside of the key cache - assure that readers and a writer do not access the same range of - data. Parallel accesses should happen only if the cache block - contains multiple index block(fragment)s. So different parts of - the buffer would be read/written. An attempt to flush during - memcpy() is prevented with BLOCK_FOR_UPDATE. - */ - if (!(block->status & BLOCK_ERROR)) - { -#if !defined(SERIALIZED_READ_FROM_CACHE) - keycache_pthread_mutex_unlock(&keycache->cache_lock); -#endif - memcpy(block->buffer+offset, buff, (size_t) read_length); - -#if !defined(SERIALIZED_READ_FROM_CACHE) - keycache_pthread_mutex_lock(&keycache->cache_lock); -#endif - } - - if (!dont_write) - { - /* Not used in the server. buff has been written to disk at start. */ - if ((block->status & BLOCK_CHANGED) && - (!offset && read_length >= keycache->key_cache_block_size)) - link_to_file_list(keycache, block, block->hash_link->file, 1); - } - else if (! (block->status & BLOCK_CHANGED)) - link_to_changed_list(keycache, block); - block->status|=BLOCK_READ; - /* - Allow block to be selected for to be freed. Since it is marked - BLOCK_CHANGED too, it won't be selected for to be freed without - a flush. - */ - block->status&= ~BLOCK_FOR_UPDATE; - set_if_smaller(block->offset, offset); - set_if_bigger(block->length, read_length+offset); - - /* Threads may be waiting for the changes to be complete. */ - release_whole_queue(&block->wqueue[COND_FOR_REQUESTED]); - - /* - If only a part of the cache block is to be replaced, and the - rest has been read from file, then the cache lock has been - released for I/O and it could be possible that another thread - wants to evict or free the block and waits for it to be - released. So we must not just decrement hash_link->requests, but - also wake a waiting thread. - */ - remove_reader(block); - - /* Error injection for coverage testing. */ - DBUG_EXECUTE_IF("key_cache_write_block_error", - block->status|= BLOCK_ERROR;); - - /* Do not link erroneous blocks into the LRU ring, but free them. */ - if (!(block->status & BLOCK_ERROR)) - { - /* - Link the block into the LRU ring if it's the last submitted - request for the block. This enables eviction for the block. - */ - unreg_request(keycache, block, 1); - } - else - { - /* Pretend a "clean" block to avoid complications. */ - block->status&= ~(BLOCK_CHANGED); - free_block(keycache, block); - error= 1; - break; - } - - next_block: - buff+= read_length; - filepos+= read_length+offset; - offset= 0; - - } while ((length-= read_length)); - goto end; - } - -no_key_cache: - /* Key cache is not used */ - if (dont_write) - { - /* Used in the server. */ - keycache->global_cache_w_requests++; - keycache->global_cache_write++; - if (locked_and_incremented) - keycache_pthread_mutex_unlock(&keycache->cache_lock); - if (my_pwrite(file, (uchar*) buff, length, filepos, - MYF(MY_NABP | MY_WAIT_IF_FULL))) - error=1; - if (locked_and_incremented) - keycache_pthread_mutex_lock(&keycache->cache_lock); - } - -end: - if (locked_and_incremented) - { - dec_counter_for_resize_op(keycache); - keycache_pthread_mutex_unlock(&keycache->cache_lock); - } - - if (MYSQL_KEYCACHE_WRITE_DONE_ENABLED()) - { - MYSQL_KEYCACHE_WRITE_DONE((ulong) (keycache->blocks_used * - keycache->key_cache_block_size), - (ulong) (keycache->blocks_unused * - keycache->key_cache_block_size)); - } - -#if !defined(DBUG_OFF) && defined(EXTRA_DEBUG) - DBUG_EXECUTE("exec", - test_key_cache(keycache, "end of key_cache_write", 1);); -#endif - DBUG_RETURN(error); -} - - -/* - Free block. - - SYNOPSIS - free_block() - keycache Pointer to a key cache data structure - block Pointer to the block to free - - DESCRIPTION - Remove reference to block from hash table. - Remove block from the chain of clean blocks. - Add block to the free list. - - NOTE - Block must not be free (status == 0). - Block must not be in free_block_list. - Block must not be in the LRU ring. - Block must not be in eviction (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH). - Block must not be in free (BLOCK_REASSIGNED). - Block must not be in flush (BLOCK_IN_FLUSH). - Block must not be dirty (BLOCK_CHANGED). - Block must not be in changed_blocks (dirty) hash. - Block must be in file_blocks (clean) hash. - Block must refer to a hash_link. - Block must have a request registered on it. -*/ - -static void free_block(KEY_CACHE *keycache, BLOCK_LINK *block) -{ - KEYCACHE_THREAD_TRACE("free block"); - KEYCACHE_DBUG_PRINT("free_block", - ("block %u to be freed, hash_link %p status: %u", - BLOCK_NUMBER(block), block->hash_link, - block->status)); - /* - Assert that the block is not free already. And that it is in a clean - state. Note that the block might just be assigned to a hash_link and - not yet read (BLOCK_READ may not be set here). In this case a reader - is registered in the hash_link and free_block() will wait for it - below. - */ - DBUG_ASSERT((block->status & BLOCK_IN_USE) && - !(block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH | - BLOCK_REASSIGNED | BLOCK_IN_FLUSH | - BLOCK_CHANGED | BLOCK_FOR_UPDATE))); - /* Assert that the block is in a file_blocks chain. */ - DBUG_ASSERT(block->prev_changed && *block->prev_changed == block); - /* Assert that the block is not in the LRU ring. */ - DBUG_ASSERT(!block->next_used && !block->prev_used); - /* - IMHO the below condition (if()) makes no sense. I can't see how it - could be possible that free_block() is entered with a NULL hash_link - pointer. The only place where it can become NULL is in free_block() - (or before its first use ever, but for those blocks free_block() is - not called). I don't remove the conditional as it cannot harm, but - place an DBUG_ASSERT to confirm my hypothesis. Eventually the - condition (if()) can be removed. - */ - DBUG_ASSERT(block->hash_link && block->hash_link->block == block); - if (block->hash_link) - { - /* - While waiting for readers to finish, new readers might request the - block. But since we set block->status|= BLOCK_REASSIGNED, they - will wait on block->wqueue[COND_FOR_SAVED]. They must be signalled - later. - */ - block->status|= BLOCK_REASSIGNED; - wait_for_readers(keycache, block); - /* - The block must not have been freed by another thread. Repeat some - checks. An additional requirement is that it must be read now - (BLOCK_READ). - */ - DBUG_ASSERT(block->hash_link && block->hash_link->block == block); - DBUG_ASSERT((block->status & (BLOCK_READ | BLOCK_IN_USE | - BLOCK_REASSIGNED)) && - !(block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH | - BLOCK_IN_FLUSH | BLOCK_CHANGED | - BLOCK_FOR_UPDATE))); - DBUG_ASSERT(block->prev_changed && *block->prev_changed == block); - DBUG_ASSERT(!block->prev_used); - /* - Unset BLOCK_REASSIGNED again. If we hand the block to an evicting - thread (through unreg_request() below), other threads must not see - this flag. They could become confused. - */ - block->status&= ~BLOCK_REASSIGNED; - /* - Do not release the hash_link until the block is off all lists. - At least not if we hand it over for eviction in unreg_request(). - */ - } - - /* - Unregister the block request and link the block into the LRU ring. - This enables eviction for the block. If the LRU ring was empty and - threads are waiting for a block, then the block wil be handed over - for eviction immediately. Otherwise we will unlink it from the LRU - ring again, without releasing the lock in between. So decrementing - the request counter and updating statistics are the only relevant - operation in this case. Assert that there are no other requests - registered. - */ - DBUG_ASSERT(block->requests == 1); - unreg_request(keycache, block, 0); - /* - Note that even without releasing the cache lock it is possible that - the block is immediately selected for eviction by link_block() and - thus not added to the LRU ring. In this case we must not touch the - block any more. - */ - if (block->status & BLOCK_IN_EVICTION) - return; - - /* Error blocks are not put into the LRU ring. */ - if (!(block->status & BLOCK_ERROR)) - { - /* Here the block must be in the LRU ring. Unlink it again. */ - DBUG_ASSERT(block->next_used && block->prev_used && - *block->prev_used == block); - unlink_block(keycache, block); - } - if (block->temperature == BLOCK_WARM) - keycache->warm_blocks--; - block->temperature= BLOCK_COLD; - - /* Remove from file_blocks hash. */ - unlink_changed(block); - - /* Remove reference to block from hash table. */ - unlink_hash(keycache, block->hash_link); - block->hash_link= NULL; - - block->status= 0; - block->length= 0; - block->offset= keycache->key_cache_block_size; - KEYCACHE_THREAD_TRACE("free block"); - KEYCACHE_DBUG_PRINT("free_block", ("block is freed")); - - /* Enforced by unlink_changed(), but just to be sure. */ - DBUG_ASSERT(!block->next_changed && !block->prev_changed); - /* Enforced by unlink_block(): not in LRU ring nor in free_block_list. */ - DBUG_ASSERT(!block->next_used && !block->prev_used); - /* Insert the free block in the free list. */ - block->next_used= keycache->free_block_list; - keycache->free_block_list= block; - /* Keep track of the number of currently unused blocks. */ - keycache->blocks_unused++; - - /* All pending requests for this page must be resubmitted. */ - release_whole_queue(&block->wqueue[COND_FOR_SAVED]); -} - - -static int cmp_sec_link(BLOCK_LINK **a, BLOCK_LINK **b) -{ - return (((*a)->hash_link->diskpos < (*b)->hash_link->diskpos) ? -1 : - ((*a)->hash_link->diskpos > (*b)->hash_link->diskpos) ? 1 : 0); -} - - -/* - Flush a portion of changed blocks to disk, - free used blocks if requested -*/ - -static int flush_cached_blocks(KEY_CACHE *keycache, - File file, BLOCK_LINK **cache, - BLOCK_LINK **end, - enum flush_type type) -{ - int error; - int last_errno= 0; - uint count= (uint) (end-cache); - - /* Don't lock the cache during the flush */ - keycache_pthread_mutex_unlock(&keycache->cache_lock); - /* - As all blocks referred in 'cache' are marked by BLOCK_IN_FLUSH - we are guarunteed no thread will change them - */ - my_qsort((uchar*) cache, count, sizeof(*cache), (qsort_cmp) cmp_sec_link); - - keycache_pthread_mutex_lock(&keycache->cache_lock); - /* - Note: Do not break the loop. We have registered a request on every - block in 'cache'. These must be unregistered by free_block() or - unreg_request(). - */ - for ( ; cache != end ; cache++) - { - BLOCK_LINK *block= *cache; - - KEYCACHE_DBUG_PRINT("flush_cached_blocks", - ("block %u to be flushed", BLOCK_NUMBER(block))); - /* - If the block contents is going to be changed, we abandon the flush - for this block. flush_key_blocks_int() will restart its search and - handle the block properly. - */ - if (!(block->status & BLOCK_FOR_UPDATE)) - { - /* Blocks coming here must have a certain status. */ - DBUG_ASSERT(block->hash_link); - DBUG_ASSERT(block->hash_link->block == block); - DBUG_ASSERT(block->hash_link->file == file); - DBUG_ASSERT((block->status & ~BLOCK_IN_EVICTION) == - (BLOCK_READ | BLOCK_IN_FLUSH | BLOCK_CHANGED | BLOCK_IN_USE)); - block->status|= BLOCK_IN_FLUSHWRITE; - keycache_pthread_mutex_unlock(&keycache->cache_lock); - error= my_pwrite(file, block->buffer+block->offset, - block->length - block->offset, - block->hash_link->diskpos+ block->offset, - MYF(MY_NABP | MY_WAIT_IF_FULL)); - keycache_pthread_mutex_lock(&keycache->cache_lock); - keycache->global_cache_write++; - if (error) - { - block->status|= BLOCK_ERROR; - if (!last_errno) - last_errno= errno ? errno : -1; - } - block->status&= ~BLOCK_IN_FLUSHWRITE; - /* Block must not have changed status except BLOCK_FOR_UPDATE. */ - DBUG_ASSERT(block->hash_link); - DBUG_ASSERT(block->hash_link->block == block); - DBUG_ASSERT(block->hash_link->file == file); - DBUG_ASSERT((block->status & ~(BLOCK_FOR_UPDATE | BLOCK_IN_EVICTION)) == - (BLOCK_READ | BLOCK_IN_FLUSH | BLOCK_CHANGED | BLOCK_IN_USE)); - /* - Set correct status and link in right queue for free or later use. - free_block() must not see BLOCK_CHANGED and it may need to wait - for readers of the block. These should not see the block in the - wrong hash. If not freeing the block, we need to have it in the - right queue anyway. - */ - link_to_file_list(keycache, block, file, 1); - } - block->status&= ~BLOCK_IN_FLUSH; - /* - Let to proceed for possible waiting requests to write to the block page. - It might happen only during an operation to resize the key cache. - */ - release_whole_queue(&block->wqueue[COND_FOR_SAVED]); - /* type will never be FLUSH_IGNORE_CHANGED here */ - if (!(type == FLUSH_KEEP || type == FLUSH_FORCE_WRITE) && - !(block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH | - BLOCK_FOR_UPDATE))) - { - /* - Note that a request has been registered against the block in - flush_key_blocks_int(). - */ - free_block(keycache, block); - } - else - { - /* - Link the block into the LRU ring if it's the last submitted - request for the block. This enables eviction for the block. - Note that a request has been registered against the block in - flush_key_blocks_int(). - */ - unreg_request(keycache, block, 1); - } - - } /* end of for ( ; cache != end ; cache++) */ - return last_errno; -} - - -/* - Flush all key blocks for a file to disk, but don't do any mutex locks. - - SYNOPSIS - flush_key_blocks_int() - keycache pointer to a key cache data structure - file handler for the file to flush to - flush_type type of the flush - - NOTES - This function doesn't do any mutex locks because it needs to be called both - from flush_key_blocks and flush_all_key_blocks (the later one does the - mutex lock in the resize_key_cache() function). - - We do only care about changed blocks that exist when the function is - entered. We do not guarantee that all changed blocks of the file are - flushed if more blocks change while this function is running. - - RETURN - 0 ok - 1 error -*/ - -static int flush_key_blocks_int(KEY_CACHE *keycache, - File file, enum flush_type type) -{ - BLOCK_LINK *cache_buff[FLUSH_CACHE],**cache; - int last_errno= 0; - int last_errcnt= 0; - DBUG_ENTER("flush_key_blocks_int"); - DBUG_PRINT("enter",("file: %d blocks_used: %lu blocks_changed: %lu", - file, keycache->blocks_used, keycache->blocks_changed)); - -#if !defined(DBUG_OFF) && defined(EXTRA_DEBUG) - DBUG_EXECUTE("check_keycache", - test_key_cache(keycache, "start of flush_key_blocks", 0);); -#endif - - cache= cache_buff; - if (keycache->disk_blocks > 0 && - (!my_disable_flush_key_blocks || type != FLUSH_KEEP)) - { - /* Key cache exists and flush is not disabled */ - int error= 0; - uint count= FLUSH_CACHE; - BLOCK_LINK **pos,**end; - BLOCK_LINK *first_in_switch= NULL; - BLOCK_LINK *last_in_flush; - BLOCK_LINK *last_for_update; - BLOCK_LINK *block, *next; -#if defined(KEYCACHE_DEBUG) - uint cnt=0; -#endif - - if (type != FLUSH_IGNORE_CHANGED) - { - /* - Count how many key blocks we have to cache to be able - to flush all dirty pages with minimum seek moves - */ - count= 0; - for (block= keycache->changed_blocks[FILE_HASH(file)] ; - block ; - block= block->next_changed) - { - if ((block->hash_link->file == file) && - !(block->status & BLOCK_IN_FLUSH)) - { - count++; - KEYCACHE_DBUG_ASSERT(count<= keycache->blocks_used); - } - } - /* - Allocate a new buffer only if its bigger than the one we have. - Assure that we always have some entries for the case that new - changed blocks appear while we need to wait for something. - */ - if ((count > FLUSH_CACHE) && - !(cache= (BLOCK_LINK**) my_malloc(sizeof(BLOCK_LINK*)*count, - MYF(0)))) - cache= cache_buff; - /* - After a restart there could be more changed blocks than now. - So we should not let count become smaller than the fixed buffer. - */ - if (cache == cache_buff) - count= FLUSH_CACHE; - } - - /* Retrieve the blocks and write them to a buffer to be flushed */ -restart: - last_in_flush= NULL; - last_for_update= NULL; - end= (pos= cache)+count; - for (block= keycache->changed_blocks[FILE_HASH(file)] ; - block ; - block= next) - { -#if defined(KEYCACHE_DEBUG) - cnt++; - KEYCACHE_DBUG_ASSERT(cnt <= keycache->blocks_used); -#endif - next= block->next_changed; - if (block->hash_link->file == file) - { - if (!(block->status & (BLOCK_IN_FLUSH | BLOCK_FOR_UPDATE))) - { - /* - Note: The special handling of BLOCK_IN_SWITCH is obsolete - since we set BLOCK_IN_FLUSH if the eviction includes a - flush. It can be removed in a later version. - */ - if (!(block->status & BLOCK_IN_SWITCH)) - { - /* - We care only for the blocks for which flushing was not - initiated by another thread and which are not in eviction. - Registering a request on the block unlinks it from the LRU - ring and protects against eviction. - */ - reg_requests(keycache, block, 1); - if (type != FLUSH_IGNORE_CHANGED) - { - /* It's not a temporary file */ - if (pos == end) - { - /* - This should happen relatively seldom. Remove the - request because we won't do anything with the block - but restart and pick it again in the next iteration. - */ - unreg_request(keycache, block, 0); - /* - This happens only if there is not enough - memory for the big block - */ - if ((error= flush_cached_blocks(keycache, file, cache, - end,type))) - { - /* Do not loop infinitely trying to flush in vain. */ - if ((last_errno == error) && (++last_errcnt > 5)) - goto err; - last_errno= error; - } - /* - Restart the scan as some other thread might have changed - the changed blocks chain: the blocks that were in switch - state before the flush started have to be excluded - */ - goto restart; - } - /* - Mark the block with BLOCK_IN_FLUSH in order not to let - other threads to use it for new pages and interfere with - our sequence of flushing dirty file pages. We must not - set this flag before actually putting the block on the - write burst array called 'cache'. - */ - block->status|= BLOCK_IN_FLUSH; - /* Add block to the array for a write burst. */ - *pos++= block; - } - else - { - /* It's a temporary file */ - DBUG_ASSERT(!(block->status & BLOCK_REASSIGNED)); - /* - free_block() must not be called with BLOCK_CHANGED. Note - that we must not change the BLOCK_CHANGED flag outside of - link_to_file_list() so that it is always in the correct - queue and the *blocks_changed counters are correct. - */ - link_to_file_list(keycache, block, file, 1); - if (!(block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH))) - { - /* A request has been registered against the block above. */ - free_block(keycache, block); - } - else - { - /* - Link the block into the LRU ring if it's the last - submitted request for the block. This enables eviction - for the block. A request has been registered against - the block above. - */ - unreg_request(keycache, block, 1); - } - } - } - else - { - /* - Link the block into a list of blocks 'in switch'. - - WARNING: Here we introduce a place where a changed block - is not in the changed_blocks hash! This is acceptable for - a BLOCK_IN_SWITCH. Never try this for another situation. - Other parts of the key cache code rely on changed blocks - being in the changed_blocks hash. - */ - unlink_changed(block); - link_changed(block, &first_in_switch); - } - } - else if (type != FLUSH_KEEP) - { - /* - During the normal flush at end of statement (FLUSH_KEEP) we - do not need to ensure that blocks in flush or update by - other threads are flushed. They will be flushed by them - later. In all other cases we must assure that we do not have - any changed block of this file in the cache when this - function returns. - */ - if (block->status & BLOCK_IN_FLUSH) - { - /* Remember the last block found to be in flush. */ - last_in_flush= block; - } - else - { - /* Remember the last block found to be selected for update. */ - last_for_update= block; - } - } - } - } - if (pos != cache) - { - if ((error= flush_cached_blocks(keycache, file, cache, pos, type))) - { - /* Do not loop inifnitely trying to flush in vain. */ - if ((last_errno == error) && (++last_errcnt > 5)) - goto err; - last_errno= error; - } - /* - Do not restart here during the normal flush at end of statement - (FLUSH_KEEP). We have now flushed at least all blocks that were - changed when entering this function. In all other cases we must - assure that we do not have any changed block of this file in the - cache when this function returns. - */ - if (type != FLUSH_KEEP) - goto restart; - } - if (last_in_flush) - { - /* - There are no blocks to be flushed by this thread, but blocks in - flush by other threads. Wait until one of the blocks is flushed. - Re-check the condition for last_in_flush. We may have unlocked - the cache_lock in flush_cached_blocks(). The state of the block - could have changed. - */ - if (last_in_flush->status & BLOCK_IN_FLUSH) - wait_on_queue(&last_in_flush->wqueue[COND_FOR_SAVED], - &keycache->cache_lock); - /* Be sure not to lose a block. They may be flushed in random order. */ - goto restart; - } - if (last_for_update) - { - /* - There are no blocks to be flushed by this thread, but blocks for - update by other threads. Wait until one of the blocks is updated. - Re-check the condition for last_for_update. We may have unlocked - the cache_lock in flush_cached_blocks(). The state of the block - could have changed. - */ - if (last_for_update->status & BLOCK_FOR_UPDATE) - wait_on_queue(&last_for_update->wqueue[COND_FOR_REQUESTED], - &keycache->cache_lock); - /* The block is now changed. Flush it. */ - goto restart; - } - - /* - Wait until the list of blocks in switch is empty. The threads that - are switching these blocks will relink them to clean file chains - while we wait and thus empty the 'first_in_switch' chain. - */ - while (first_in_switch) - { -#if defined(KEYCACHE_DEBUG) - cnt= 0; -#endif - wait_on_queue(&first_in_switch->wqueue[COND_FOR_SAVED], - &keycache->cache_lock); -#if defined(KEYCACHE_DEBUG) - cnt++; - KEYCACHE_DBUG_ASSERT(cnt <= keycache->blocks_used); -#endif - /* - Do not restart here. We have flushed all blocks that were - changed when entering this function and were not marked for - eviction. Other threads have now flushed all remaining blocks in - the course of their eviction. - */ - } - - if (! (type == FLUSH_KEEP || type == FLUSH_FORCE_WRITE)) - { - BLOCK_LINK *last_for_update= NULL; - BLOCK_LINK *last_in_switch= NULL; - uint total_found= 0; - uint found; - - /* - Finally free all clean blocks for this file. - During resize this may be run by two threads in parallel. - */ - do - { - found= 0; - for (block= keycache->file_blocks[FILE_HASH(file)] ; - block ; - block= next) - { - /* Remember the next block. After freeing we cannot get at it. */ - next= block->next_changed; - - /* Changed blocks cannot appear in the file_blocks hash. */ - DBUG_ASSERT(!(block->status & BLOCK_CHANGED)); - if (block->hash_link->file == file) - { - /* We must skip blocks that will be changed. */ - if (block->status & BLOCK_FOR_UPDATE) - { - last_for_update= block; - continue; - } - - /* - We must not free blocks in eviction (BLOCK_IN_EVICTION | - BLOCK_IN_SWITCH) or blocks intended to be freed - (BLOCK_REASSIGNED). - */ - if (!(block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH | - BLOCK_REASSIGNED))) - { - struct st_hash_link *UNINIT_VAR(next_hash_link); - my_off_t UNINIT_VAR(next_diskpos); - File UNINIT_VAR(next_file); - uint UNINIT_VAR(next_status); - uint UNINIT_VAR(hash_requests); - - total_found++; - found++; - KEYCACHE_DBUG_ASSERT(found <= keycache->blocks_used); - - /* - Register a request. This unlinks the block from the LRU - ring and protects it against eviction. This is required - by free_block(). - */ - reg_requests(keycache, block, 1); - - /* - free_block() may need to wait for readers of the block. - This is the moment where the other thread can move the - 'next' block from the chain. free_block() needs to wait - if there are requests for the block pending. - */ - if (next && (hash_requests= block->hash_link->requests)) - { - /* Copy values from the 'next' block and its hash_link. */ - next_status= next->status; - next_hash_link= next->hash_link; - next_diskpos= next_hash_link->diskpos; - next_file= next_hash_link->file; - DBUG_ASSERT(next == next_hash_link->block); - } - - free_block(keycache, block); - /* - If we had to wait and the state of the 'next' block - changed, break the inner loop. 'next' may no longer be - part of the current chain. - - We do not want to break the loop after every free_block(), - not even only after waits. The chain might be quite long - and contain blocks for many files. Traversing it again and - again to find more blocks for this file could become quite - inefficient. - */ - if (next && hash_requests && - ((next_status != next->status) || - (next_hash_link != next->hash_link) || - (next_file != next_hash_link->file) || - (next_diskpos != next_hash_link->diskpos) || - (next != next_hash_link->block))) - break; - } - else - { - last_in_switch= block; - } - } - } /* end for block in file_blocks */ - } while (found); - - /* - If any clean block has been found, we may have waited for it to - become free. In this case it could be possible that another clean - block became dirty. This is possible if the write request existed - before the flush started (BLOCK_FOR_UPDATE). Re-check the hashes. - */ - if (total_found) - goto restart; - - /* - To avoid an infinite loop, wait until one of the blocks marked - for update is updated. - */ - if (last_for_update) - { - /* We did not wait. Block must not have changed status. */ - DBUG_ASSERT(last_for_update->status & BLOCK_FOR_UPDATE); - wait_on_queue(&last_for_update->wqueue[COND_FOR_REQUESTED], - &keycache->cache_lock); - goto restart; - } - - /* - To avoid an infinite loop wait until one of the blocks marked - for eviction is switched. - */ - if (last_in_switch) - { - /* We did not wait. Block must not have changed status. */ - DBUG_ASSERT(last_in_switch->status & (BLOCK_IN_EVICTION | - BLOCK_IN_SWITCH | - BLOCK_REASSIGNED)); - wait_on_queue(&last_in_switch->wqueue[COND_FOR_SAVED], - &keycache->cache_lock); - goto restart; - } - - } /* if (! (type == FLUSH_KEEP || type == FLUSH_FORCE_WRITE)) */ - - } /* if (keycache->disk_blocks > 0 */ - -#ifndef DBUG_OFF - DBUG_EXECUTE("check_keycache", - test_key_cache(keycache, "end of flush_key_blocks", 0);); -#endif -err: - if (cache != cache_buff) - my_free(cache); - if (last_errno) - errno=last_errno; /* Return first error */ - DBUG_RETURN(last_errno != 0); -} - - -/* - Flush all blocks for a file to disk - - SYNOPSIS - - flush_key_blocks() - keycache pointer to a key cache data structure - file handler for the file to flush to - flush_type type of the flush - - RETURN - 0 ok - 1 error -*/ - -int flush_key_blocks(KEY_CACHE *keycache, - File file, enum flush_type type) -{ - int res= 0; - DBUG_ENTER("flush_key_blocks"); - DBUG_PRINT("enter", ("keycache: 0x%lx", (long) keycache)); - - if (!keycache->key_cache_inited) - DBUG_RETURN(0); - - keycache_pthread_mutex_lock(&keycache->cache_lock); - /* While waiting for lock, keycache could have been ended. */ - if (keycache->disk_blocks > 0) - { - inc_counter_for_resize_op(keycache); - res= flush_key_blocks_int(keycache, file, type); - dec_counter_for_resize_op(keycache); - } - keycache_pthread_mutex_unlock(&keycache->cache_lock); - DBUG_RETURN(res); -} - - -/* - Flush all blocks in the key cache to disk. - - SYNOPSIS - flush_all_key_blocks() - keycache pointer to key cache root structure - - DESCRIPTION - - Flushing of the whole key cache is done in two phases. - - 1. Flush all changed blocks, waiting for them if necessary. Loop - until there is no changed block left in the cache. - - 2. Free all clean blocks. Normally this means free all blocks. The - changed blocks were flushed in phase 1 and became clean. However we - may need to wait for blocks that are read by other threads. While we - wait, a clean block could become changed if that operation started - before the resize operation started. To be safe we must restart at - phase 1. - - When we can run through the changed_blocks and file_blocks hashes - without finding a block any more, then we are done. - - Note that we hold keycache->cache_lock all the time unless we need - to wait for something. - - RETURN - 0 OK - != 0 Error -*/ - -static int flush_all_key_blocks(KEY_CACHE *keycache) -{ - BLOCK_LINK *block; - uint total_found; - uint found; - uint idx; - DBUG_ENTER("flush_all_key_blocks"); - - do - { - mysql_mutex_assert_owner(&keycache->cache_lock); - total_found= 0; - - /* - Phase1: Flush all changed blocks, waiting for them if necessary. - Loop until there is no changed block left in the cache. - */ - do - { - found= 0; - /* Step over the whole changed_blocks hash array. */ - for (idx= 0; idx < CHANGED_BLOCKS_HASH; idx++) - { - /* - If an array element is non-empty, use the first block from its - chain to find a file for flush. All changed blocks for this - file are flushed. So the same block will not appear at this - place again with the next iteration. New writes for blocks are - not accepted during the flush. If multiple files share the - same hash bucket, one of them will be flushed per iteration - of the outer loop of phase 1. - */ - if ((block= keycache->changed_blocks[idx])) - { - found++; - /* - Flush dirty blocks but do not free them yet. They can be used - for reading until all other blocks are flushed too. - */ - if (flush_key_blocks_int(keycache, block->hash_link->file, - FLUSH_FORCE_WRITE)) - DBUG_RETURN(1); - } - } - - } while (found); - - /* - Phase 2: Free all clean blocks. Normally this means free all - blocks. The changed blocks were flushed in phase 1 and became - clean. However we may need to wait for blocks that are read by - other threads. While we wait, a clean block could become changed - if that operation started before the resize operation started. To - be safe we must restart at phase 1. - */ - do - { - found= 0; - /* Step over the whole file_blocks hash array. */ - for (idx= 0; idx < CHANGED_BLOCKS_HASH; idx++) - { - /* - If an array element is non-empty, use the first block from its - chain to find a file for flush. All blocks for this file are - freed. So the same block will not appear at this place again - with the next iteration. If multiple files share the - same hash bucket, one of them will be flushed per iteration - of the outer loop of phase 2. - */ - if ((block= keycache->file_blocks[idx])) - { - total_found++; - found++; - if (flush_key_blocks_int(keycache, block->hash_link->file, - FLUSH_RELEASE)) - DBUG_RETURN(1); - } - } - - } while (found); - - /* - If any clean block has been found, we may have waited for it to - become free. In this case it could be possible that another clean - block became dirty. This is possible if the write request existed - before the resize started (BLOCK_FOR_UPDATE). Re-check the hashes. - */ - } while (total_found); - -#ifndef DBUG_OFF - /* Now there should not exist any block any more. */ - for (idx= 0; idx < CHANGED_BLOCKS_HASH; idx++) - { - DBUG_ASSERT(!keycache->changed_blocks[idx]); - DBUG_ASSERT(!keycache->file_blocks[idx]); - } -#endif - - DBUG_RETURN(0); -} - - -/* - Reset the counters of a key cache. - - SYNOPSIS - reset_key_cache_counters() - name the name of a key cache - key_cache pointer to the key kache to be reset - - DESCRIPTION - This procedure is used by process_key_caches() to reset the counters of all - currently used key caches, both the default one and the named ones. - - RETURN - 0 on success (always because it can't fail) -*/ - -int reset_key_cache_counters(const char *name __attribute__((unused)), - KEY_CACHE *key_cache) -{ - DBUG_ENTER("reset_key_cache_counters"); - if (!key_cache->key_cache_inited) - { - DBUG_PRINT("info", ("Key cache %s not initialized.", name)); - DBUG_RETURN(0); - } - DBUG_PRINT("info", ("Resetting counters for key cache %s.", name)); - - key_cache->global_blocks_changed= 0; /* Key_blocks_not_flushed */ - key_cache->global_cache_r_requests= 0; /* Key_read_requests */ - key_cache->global_cache_read= 0; /* Key_reads */ - key_cache->global_cache_w_requests= 0; /* Key_write_requests */ - key_cache->global_cache_write= 0; /* Key_writes */ - DBUG_RETURN(0); -} - - -#ifndef DBUG_OFF -/* - Test if disk-cache is ok -*/ -static void test_key_cache(KEY_CACHE *keycache __attribute__((unused)), - const char *where __attribute__((unused)), - my_bool lock __attribute__((unused))) -{ - /* TODO */ -} -#endif - -#if defined(KEYCACHE_TIMEOUT) - -#define KEYCACHE_DUMP_FILE "keycache_dump.txt" -#define MAX_QUEUE_LEN 100 - - -static void keycache_dump(KEY_CACHE *keycache) -{ - FILE *keycache_dump_file=fopen(KEYCACHE_DUMP_FILE, "w"); - struct st_my_thread_var *last; - struct st_my_thread_var *thread; - BLOCK_LINK *block; - HASH_LINK *hash_link; - KEYCACHE_PAGE *page; - uint i; - - fprintf(keycache_dump_file, "thread:%u\n", thread->id); - - i=0; - thread=last=waiting_for_hash_link.last_thread; - fprintf(keycache_dump_file, "queue of threads waiting for hash link\n"); - if (thread) - do - { - thread=thread->next; - page= (KEYCACHE_PAGE *) thread->opt_info; - fprintf(keycache_dump_file, - "thread:%u, (file,filepos)=(%u,%lu)\n", - thread->id,(uint) page->file,(ulong) page->filepos); - if (++i == MAX_QUEUE_LEN) - break; - } - while (thread != last); - - i=0; - thread=last=waiting_for_block.last_thread; - fprintf(keycache_dump_file, "queue of threads waiting for block\n"); - if (thread) - do - { - thread=thread->next; - hash_link= (HASH_LINK *) thread->opt_info; - fprintf(keycache_dump_file, - "thread:%u hash_link:%u (file,filepos)=(%u,%lu)\n", - thread->id, (uint) HASH_LINK_NUMBER(hash_link), - (uint) hash_link->file,(ulong) hash_link->diskpos); - if (++i == MAX_QUEUE_LEN) - break; - } - while (thread != last); - - for (i=0 ; i< keycache->blocks_used ; i++) - { - int j; - block= &keycache->block_root[i]; - hash_link= block->hash_link; - fprintf(keycache_dump_file, - "block:%u hash_link:%d status:%x #requests=%u waiting_for_readers:%d\n", - i, (int) (hash_link ? HASH_LINK_NUMBER(hash_link) : -1), - block->status, block->requests, block->condvar ? 1 : 0); - for (j=0 ; j < 2; j++) - { - KEYCACHE_WQUEUE *wqueue=&block->wqueue[j]; - thread= last= wqueue->last_thread; - fprintf(keycache_dump_file, "queue #%d\n", j); - if (thread) - { - do - { - thread=thread->next; - fprintf(keycache_dump_file, - "thread:%u\n", thread->id); - if (++i == MAX_QUEUE_LEN) - break; - } - while (thread != last); - } - } - } - fprintf(keycache_dump_file, "LRU chain:"); - block= keycache= used_last; - if (block) - { - do - { - block= block->next_used; - fprintf(keycache_dump_file, - "block:%u, ", BLOCK_NUMBER(block)); - } - while (block != keycache->used_last); - } - fprintf(keycache_dump_file, "\n"); - - fclose(keycache_dump_file); -} - -#endif /* defined(KEYCACHE_TIMEOUT) */ - -#if defined(KEYCACHE_TIMEOUT) && !defined(__WIN__) - - -static int keycache_pthread_cond_wait(mysql_cond_t *cond, - mysql_mutex_t *mutex) -{ - int rc; - struct timeval now; /* time when we started waiting */ - struct timespec timeout; /* timeout value for the wait function */ - struct timezone tz; -#if defined(KEYCACHE_DEBUG) - int cnt=0; -#endif - - /* Get current time */ - gettimeofday(&now, &tz); - /* Prepare timeout value */ - timeout.tv_sec= now.tv_sec + KEYCACHE_TIMEOUT; - /* - timeval uses microseconds. - timespec uses nanoseconds. - 1 nanosecond = 1000 micro seconds - */ - timeout.tv_nsec= now.tv_usec * 1000; - KEYCACHE_THREAD_TRACE_END("started waiting"); -#if defined(KEYCACHE_DEBUG) - cnt++; - if (cnt % 100 == 0) - fprintf(keycache_debug_log, "waiting...\n"); - fflush(keycache_debug_log); -#endif - rc= mysql_cond_timedwait(cond, mutex, &timeout); - KEYCACHE_THREAD_TRACE_BEGIN("finished waiting"); - if (rc == ETIMEDOUT || rc == ETIME) - { -#if defined(KEYCACHE_DEBUG) - fprintf(keycache_debug_log,"aborted by keycache timeout\n"); - fclose(keycache_debug_log); - abort(); -#endif - keycache_dump(); - } - -#if defined(KEYCACHE_DEBUG) - KEYCACHE_DBUG_ASSERT(rc != ETIMEDOUT); -#else - assert(rc != ETIMEDOUT); -#endif - return rc; -} -#else -#if defined(KEYCACHE_DEBUG) -static int keycache_pthread_cond_wait(mysql_cond_t *cond, - mysql_mutex_t *mutex) -{ - int rc; - KEYCACHE_THREAD_TRACE_END("started waiting"); - rc= mysql_cond_wait(cond, mutex); - KEYCACHE_THREAD_TRACE_BEGIN("finished waiting"); - return rc; -} -#endif -#endif /* defined(KEYCACHE_TIMEOUT) && !defined(__WIN__) */ - -#if defined(KEYCACHE_DEBUG) - - -static int keycache_pthread_mutex_lock(mysql_mutex_t *mutex) -{ - int rc; - rc= mysql_mutex_lock(mutex); - KEYCACHE_THREAD_TRACE_BEGIN(""); - return rc; -} - - -static void keycache_pthread_mutex_unlock(mysql_mutex_t *mutex) -{ - KEYCACHE_THREAD_TRACE_END(""); - mysql_mutex_unlock(mutex); -} - - -static int keycache_pthread_cond_signal(mysql_cond_t *cond) -{ - int rc; - KEYCACHE_THREAD_TRACE("signal"); - rc= mysql_cond_signal(cond); - return rc; -} - - -#if defined(KEYCACHE_DEBUG_LOG) - - -static void keycache_debug_print(const char * fmt,...) -{ - va_list args; - va_start(args,fmt); - if (keycache_debug_log) - { - (void) vfprintf(keycache_debug_log, fmt, args); - (void) fputc('\n',keycache_debug_log); - } - va_end(args); -} -#endif /* defined(KEYCACHE_DEBUG_LOG) */ - -#if defined(KEYCACHE_DEBUG_LOG) - - -void keycache_debug_log_close(void) -{ - if (keycache_debug_log) - fclose(keycache_debug_log); -} -#endif /* defined(KEYCACHE_DEBUG_LOG) */ - -#endif /* defined(KEYCACHE_DEBUG) */ - -#if !defined(DBUG_OFF) -#define F_B_PRT(_f_, _v_) DBUG_PRINT("assert_fail", (_f_, _v_)) - -static int fail_block(BLOCK_LINK *block) -{ - F_B_PRT("block->next_used: %lx\n", (ulong) block->next_used); - F_B_PRT("block->prev_used: %lx\n", (ulong) block->prev_used); - F_B_PRT("block->next_changed: %lx\n", (ulong) block->next_changed); - F_B_PRT("block->prev_changed: %lx\n", (ulong) block->prev_changed); - F_B_PRT("block->hash_link: %lx\n", (ulong) block->hash_link); - F_B_PRT("block->status: %u\n", block->status); - F_B_PRT("block->length: %u\n", block->length); - F_B_PRT("block->offset: %u\n", block->offset); - F_B_PRT("block->requests: %u\n", block->requests); - F_B_PRT("block->temperature: %u\n", block->temperature); - return 0; /* Let the assert fail. */ -} - -static int fail_hlink(HASH_LINK *hlink) -{ - F_B_PRT("hlink->next: %lx\n", (ulong) hlink->next); - F_B_PRT("hlink->prev: %lx\n", (ulong) hlink->prev); - F_B_PRT("hlink->block: %lx\n", (ulong) hlink->block); - F_B_PRT("hlink->diskpos: %lu\n", (ulong) hlink->diskpos); - F_B_PRT("hlink->file: %d\n", hlink->file); - return 0; /* Let the assert fail. */ -} - -static int cache_empty(KEY_CACHE *keycache) -{ - int errcnt= 0; - int idx; - if (keycache->disk_blocks <= 0) - return 1; - for (idx= 0; idx < keycache->disk_blocks; idx++) - { - BLOCK_LINK *block= keycache->block_root + idx; - if (block->status || block->requests || block->hash_link) - { - fprintf(stderr, "block index: %u\n", idx); - fail_block(block); - errcnt++; - } - } - for (idx= 0; idx < keycache->hash_links; idx++) - { - HASH_LINK *hash_link= keycache->hash_link_root + idx; - if (hash_link->requests || hash_link->block) - { - fprintf(stderr, "hash_link index: %u\n", idx); - fail_hlink(hash_link); - errcnt++; - } - } - if (errcnt) - { - fprintf(stderr, "blocks: %d used: %lu\n", - keycache->disk_blocks, keycache->blocks_used); - fprintf(stderr, "hash_links: %d used: %d\n", - keycache->hash_links, keycache->hash_links_used); - fprintf(stderr, "\n"); - } - return !errcnt; -} -#endif - diff --git a/deps/mysqllite/mysys/mf_keycaches.c b/deps/mysqllite/mysys/mf_keycaches.c deleted file mode 100644 index 93b7eab4561d24..00000000000000 --- a/deps/mysqllite/mysys/mf_keycaches.c +++ /dev/null @@ -1,361 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Handling of multiple key caches - - The idea is to have a thread safe hash on the table name, - with a default key cache value that is returned if the table name is not in - the cache. -*/ - -#include "mysys_priv.h" -#include -#include -#include - -/***************************************************************************** - General functions to handle SAFE_HASH objects. - - A SAFE_HASH object is used to store the hash, the mutex and default value - needed by the rest of the key cache code. - This is a separate struct to make it easy to later reuse the code for other - purposes - - All entries are linked in a list to allow us to traverse all elements - and delete selected ones. (HASH doesn't allow any easy ways to do this). -*****************************************************************************/ - -/* - Struct to store a key and pointer to object -*/ - -typedef struct st_safe_hash_entry -{ - uchar *key; - uint length; - uchar *data; - struct st_safe_hash_entry *next, **prev; -} SAFE_HASH_ENTRY; - - -typedef struct st_safe_hash_with_default -{ - rw_lock_t mutex; - HASH hash; - uchar *default_value; - SAFE_HASH_ENTRY *root; -} SAFE_HASH; - - -/* - Free a SAFE_HASH_ENTRY - - This function is called by the hash object on delete -*/ - -static void safe_hash_entry_free(SAFE_HASH_ENTRY *entry) -{ - DBUG_ENTER("free_assign_entry"); - my_free(entry); - DBUG_VOID_RETURN; -} - - -/* Get key and length for a SAFE_HASH_ENTRY */ - -static uchar *safe_hash_entry_get(SAFE_HASH_ENTRY *entry, size_t *length, - my_bool not_used __attribute__((unused))) -{ - *length=entry->length; - return (uchar*) entry->key; -} - - -/* - Init a SAFE_HASH object - - SYNOPSIS - safe_hash_init() - hash safe_hash handler - elements Expected max number of elements - default_value default value - - NOTES - In case of error we set hash->default_value to 0 to allow one to call - safe_hash_free on an object that couldn't be initialized. - - RETURN - 0 ok - 1 error -*/ - -static my_bool safe_hash_init(SAFE_HASH *hash, uint elements, - uchar *default_value) -{ - DBUG_ENTER("safe_hash"); - if (my_hash_init(&hash->hash, &my_charset_bin, elements, - 0, 0, (my_hash_get_key) safe_hash_entry_get, - (void (*)(void*)) safe_hash_entry_free, 0)) - { - hash->default_value= 0; - DBUG_RETURN(1); - } - my_rwlock_init(&hash->mutex, 0); - hash->default_value= default_value; - hash->root= 0; - DBUG_RETURN(0); -} - - -/* - Free a SAFE_HASH object - - NOTES - This is safe to call on any object that has been sent to safe_hash_init() -*/ - -static void safe_hash_free(SAFE_HASH *hash) -{ - /* - Test if safe_hash_init succeeded. This will also guard us against multiple - free calls. - */ - if (hash->default_value) - { - my_hash_free(&hash->hash); - rwlock_destroy(&hash->mutex); - hash->default_value=0; - } -} - -/* - Return the value stored for a key or default value if no key -*/ - -static uchar *safe_hash_search(SAFE_HASH *hash, const uchar *key, uint length) -{ - uchar *result; - DBUG_ENTER("safe_hash_search"); - rw_rdlock(&hash->mutex); - result= my_hash_search(&hash->hash, key, length); - rw_unlock(&hash->mutex); - if (!result) - result= hash->default_value; - else - result= ((SAFE_HASH_ENTRY*) result)->data; - DBUG_PRINT("exit",("data: 0x%lx", (long) result)); - DBUG_RETURN(result); -} - - -/* - Associate a key with some data - - SYONOPSIS - safe_hash_set() - hash Hash handle - key key (path to table etc..) - length Length of key - data data to to associate with the data - - NOTES - This can be used both to insert a new entry and change an existing - entry. - If one associates a key with the default key cache, the key is deleted - - RETURN - 0 ok - 1 error (Can only be EOM). In this case my_message() is called. -*/ - -static my_bool safe_hash_set(SAFE_HASH *hash, const uchar *key, uint length, - uchar *data) -{ - SAFE_HASH_ENTRY *entry; - my_bool error= 0; - DBUG_ENTER("safe_hash_set"); - DBUG_PRINT("enter",("key: %.*s data: 0x%lx", length, key, (long) data)); - - rw_wrlock(&hash->mutex); - entry= (SAFE_HASH_ENTRY*) my_hash_search(&hash->hash, key, length); - - if (data == hash->default_value) - { - /* - The key is to be associated with the default entry. In this case - we can just delete the entry (if it existed) from the hash as a - search will return the default entry - */ - if (!entry) /* nothing to do */ - goto end; - /* unlink entry from list */ - if ((*entry->prev= entry->next)) - entry->next->prev= entry->prev; - my_hash_delete(&hash->hash, (uchar*) entry); - goto end; - } - if (entry) - { - /* Entry existed; Just change the pointer to point at the new data */ - entry->data= data; - } - else - { - if (!(entry= (SAFE_HASH_ENTRY *) my_malloc(sizeof(*entry) + length, - MYF(MY_WME)))) - { - error= 1; - goto end; - } - entry->key= (uchar*) (entry +1); - memcpy((char*) entry->key, (char*) key, length); - entry->length= length; - entry->data= data; - /* Link entry to list */ - if ((entry->next= hash->root)) - entry->next->prev= &entry->next; - entry->prev= &hash->root; - hash->root= entry; - if (my_hash_insert(&hash->hash, (uchar*) entry)) - { - /* This can only happen if hash got out of memory */ - my_free(entry); - error= 1; - goto end; - } - } - -end: - rw_unlock(&hash->mutex); - DBUG_RETURN(error); -} - - -/* - Change all entres with one data value to another data value - - SYONOPSIS - safe_hash_change() - hash Hash handle - old_data Old data - new_data Change all 'old_data' to this - - NOTES - We use the linked list to traverse all elements in the hash as - this allows us to delete elements in the case where 'new_data' is the - default value. -*/ - -static void safe_hash_change(SAFE_HASH *hash, uchar *old_data, uchar *new_data) -{ - SAFE_HASH_ENTRY *entry, *next; - DBUG_ENTER("safe_hash_set"); - - rw_wrlock(&hash->mutex); - - for (entry= hash->root ; entry ; entry= next) - { - next= entry->next; - if (entry->data == old_data) - { - if (new_data == hash->default_value) - { - if ((*entry->prev= entry->next)) - entry->next->prev= entry->prev; - my_hash_delete(&hash->hash, (uchar*) entry); - } - else - entry->data= new_data; - } - } - - rw_unlock(&hash->mutex); - DBUG_VOID_RETURN; -} - - -/***************************************************************************** - Functions to handle the key cache objects -*****************************************************************************/ - -/* Variable to store all key cache objects */ -static SAFE_HASH key_cache_hash; - - -my_bool multi_keycache_init(void) -{ - return safe_hash_init(&key_cache_hash, 16, (uchar*) dflt_key_cache); -} - - -void multi_keycache_free(void) -{ - safe_hash_free(&key_cache_hash); -} - -/* - Get a key cache to be used for a specific table. - - SYNOPSIS - multi_key_cache_search() - key key to find (usually table path) - uint length Length of key. - - NOTES - This function is coded in such a way that we will return the - default key cache even if one never called multi_keycache_init. - This will ensure that it works with old MyISAM clients. - - RETURN - key cache to use -*/ - -KEY_CACHE *multi_key_cache_search(uchar *key, uint length) -{ - if (!key_cache_hash.hash.records) - return dflt_key_cache; - return (KEY_CACHE*) safe_hash_search(&key_cache_hash, key, length); -} - - -/* - Assosiate a key cache with a key - - - SYONOPSIS - multi_key_cache_set() - key key (path to table etc..) - length Length of key - key_cache cache to assococite with the table - - NOTES - This can be used both to insert a new entry and change an existing - entry -*/ - - -my_bool multi_key_cache_set(const uchar *key, uint length, - KEY_CACHE *key_cache) -{ - return safe_hash_set(&key_cache_hash, key, length, (uchar*) key_cache); -} - - -void multi_key_cache_change(KEY_CACHE *old_data, - KEY_CACHE *new_data) -{ - safe_hash_change(&key_cache_hash, (uchar*) old_data, (uchar*) new_data); -} diff --git a/deps/mysqllite/mysys/mf_loadpath.c b/deps/mysqllite/mysys/mf_loadpath.c deleted file mode 100644 index 9350babc1768d1..00000000000000 --- a/deps/mysqllite/mysys/mf_loadpath.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include - - /* Returns full load-path for a file. to may be = path */ - /* if path is a hard-path return path */ - /* if path starts with home-dir return path */ - /* if path starts with current dir or parent-dir unpack path */ - /* if there is no path, prepend with own_path_prefix if given */ - /* else unpack path according to current dir */ - -char * my_load_path(char * to, const char *path, - const char *own_path_prefix) -{ - char buff[FN_REFLEN]; - int is_cur; - DBUG_ENTER("my_load_path"); - DBUG_PRINT("enter",("path: %s prefix: %s",path, - own_path_prefix ? own_path_prefix : "")); - - if ((path[0] == FN_HOMELIB && path[1] == FN_LIBCHAR) || - test_if_hard_path(path)) - (void) strnmov(buff, path, FN_REFLEN); - else if ((is_cur=(path[0] == FN_CURLIB && path[1] == FN_LIBCHAR)) || - (is_prefix(path,FN_PARENTDIR)) || - ! own_path_prefix) - { - if (is_cur) - is_cur=2; /* Remove current dir */ - if (! my_getwd(buff,(uint) (FN_REFLEN-strlen(path)+is_cur),MYF(0))) - (void) strncat(buff, path+is_cur, FN_REFLEN-1); - else - (void) strnmov(buff, path, FN_REFLEN); /* Return org file name */ - } - else - (void) strxnmov(buff, FN_REFLEN, own_path_prefix, path, NullS); - strnmov(to, buff, FN_REFLEN); - to[FN_REFLEN-1]= '\0'; - DBUG_PRINT("exit",("to: %s",to)); - DBUG_RETURN(to); -} /* my_load_path */ diff --git a/deps/mysqllite/mysys/mf_pack.c b/deps/mysqllite/mysys/mf_pack.c deleted file mode 100644 index 292cd8c0454a2a..00000000000000 --- a/deps/mysqllite/mysys/mf_pack.c +++ /dev/null @@ -1,460 +0,0 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include -#ifdef HAVE_PWD_H -#include -#endif - -static char * expand_tilde(char **path); - - /* Pack a dirname ; Changes HOME to ~/ and current dev to ./ */ - /* from is a dirname (from dirname() ?) ending with FN_LIBCHAR */ - /* to may be == from */ - -void pack_dirname(char * to, const char *from) -{ - int cwd_err; - size_t d_length,length,UNINIT_VAR(buff_length); - char * start; - char buff[FN_REFLEN]; - DBUG_ENTER("pack_dirname"); - - (void) intern_filename(to,from); /* Change to intern name */ - -#ifdef FN_DEVCHAR - if ((start=strrchr(to,FN_DEVCHAR)) != 0) /* Skip device part */ - start++; - else -#endif - start=to; - - if (!(cwd_err= my_getwd(buff,FN_REFLEN,MYF(0)))) - { - buff_length= strlen(buff); - d_length= (size_t) (start-to); - if ((start == to || - (buff_length == d_length && !memcmp(buff,start,d_length))) && - *start != FN_LIBCHAR && *start) - { /* Put current dir before */ - bchange((uchar*) to, d_length, (uchar*) buff, buff_length, strlen(to)+1); - } - } - - if ((d_length= cleanup_dirname(to,to)) != 0) - { - length=0; - if (home_dir) - { - length= strlen(home_dir); - if (home_dir[length-1] == FN_LIBCHAR) - length--; /* Don't test last '/' */ - } - if (length > 1 && length < d_length) - { /* test if /xx/yy -> ~/yy */ - if (memcmp(to,home_dir,length) == 0 && to[length] == FN_LIBCHAR) - { - to[0]=FN_HOMELIB; /* Filename begins with ~ */ - (void) strmov_overlapp(to+1,to+length); - } - } - if (! cwd_err) - { /* Test if cwd is ~/... */ - if (length > 1 && length < buff_length) - { - if (memcmp(buff,home_dir,length) == 0 && buff[length] == FN_LIBCHAR) - { - buff[0]=FN_HOMELIB; - (void) strmov_overlapp(buff+1,buff+length); - } - } - if (is_prefix(to,buff)) - { - length= strlen(buff); - if (to[length]) - (void) strmov_overlapp(to,to+length); /* Remove everything before */ - else - { - to[0]= FN_CURLIB; /* Put ./ instead of cwd */ - to[1]= FN_LIBCHAR; - to[2]= '\0'; - } - } - } - } - DBUG_PRINT("exit",("to: '%s'",to)); - DBUG_VOID_RETURN; -} /* pack_dirname */ - - -/* - remove unwanted chars from dirname - - SYNOPSIS - cleanup_dirname() - to Store result here - from Dirname to fix. May be same as to - - IMPLEMENTATION - "/../" removes prev dir - "/~/" removes all before ~ - //" is same as "/", except on Win32 at start of a file - "/./" is removed - Unpacks home_dir if "~/.." used - Unpacks current dir if if "./.." used - - RETURN - # length of new name -*/ - -size_t cleanup_dirname(register char *to, const char *from) -{ - reg5 size_t length; - reg2 char * pos; - reg3 char * from_ptr; - reg4 char * start; - char parent[5], /* for "FN_PARENTDIR" */ - buff[FN_REFLEN+1],*end_parentdir; -#ifdef BACKSLASH_MBTAIL - CHARSET_INFO *fs= fs_character_set(); -#endif - DBUG_ENTER("cleanup_dirname"); - DBUG_PRINT("enter",("from: '%s'",from)); - - start=buff; - from_ptr=(char *) from; -#ifdef FN_DEVCHAR - if ((pos=strrchr(from_ptr,FN_DEVCHAR)) != 0) - { /* Skip device part */ - length=(size_t) (pos-from_ptr)+1; - start=strnmov(buff,from_ptr,length); from_ptr+=length; - } -#endif - - parent[0]=FN_LIBCHAR; - length=(size_t) (strmov(parent+1,FN_PARENTDIR)-parent); - for (pos=start ; (*pos= *from_ptr++) != 0 ; pos++) - { -#ifdef BACKSLASH_MBTAIL - uint l; - if (use_mb(fs) && (l= my_ismbchar(fs, from_ptr - 1, from_ptr + 2))) - { - for (l-- ; l ; *++pos= *from_ptr++, l--); - start= pos + 1; /* Don't look inside multi-byte char */ - continue; - } -#endif - if (*pos == '/') - *pos = FN_LIBCHAR; - if (*pos == FN_LIBCHAR) - { - if ((size_t) (pos-start) > length && memcmp(pos-length,parent,length) == 0) - { /* If .../../; skip prev */ - pos-=length; - if (pos != start) - { /* not /../ */ - pos--; - if (*pos == FN_HOMELIB && (pos == start || pos[-1] == FN_LIBCHAR)) - { - if (!home_dir) - { - pos+=length+1; /* Don't unpack ~/.. */ - continue; - } - pos=strmov(buff,home_dir)-1; /* Unpacks ~/.. */ - if (*pos == FN_LIBCHAR) - pos--; /* home ended with '/' */ - } - if (*pos == FN_CURLIB && (pos == start || pos[-1] == FN_LIBCHAR)) - { - if (my_getwd(curr_dir,FN_REFLEN,MYF(0))) - { - pos+=length+1; /* Don't unpack ./.. */ - continue; - } - pos=strmov(buff,curr_dir)-1; /* Unpacks ./.. */ - if (*pos == FN_LIBCHAR) - pos--; /* home ended with '/' */ - } - end_parentdir=pos; - while (pos >= start && *pos != FN_LIBCHAR) /* remove prev dir */ - pos--; - if (pos[1] == FN_HOMELIB || - (pos > start && memcmp(pos, parent, length) == 0)) - { /* Don't remove ~user/ */ - pos=strmov(end_parentdir+1,parent); - *pos=FN_LIBCHAR; - continue; - } - } - } - else if ((size_t) (pos-start) == length-1 && - !memcmp(start,parent+1,length-1)) - start=pos; /* Starts with "../" */ - else if (pos-start > 0 && pos[-1] == FN_LIBCHAR) - { -#ifdef FN_NETWORK_DRIVES - if (pos-start != 1) -#endif - pos--; /* Remove dupplicate '/' */ - } - else if (pos-start > 1 && pos[-1] == FN_CURLIB && pos[-2] == FN_LIBCHAR) - pos-=2; /* Skip /./ */ - else if (pos > buff+1 && pos[-1] == FN_HOMELIB && pos[-2] == FN_LIBCHAR) - { /* Found ..../~/ */ - buff[0]=FN_HOMELIB; - buff[1]=FN_LIBCHAR; - start=buff; pos=buff+1; - } - } - } - (void) strmov(to,buff); - DBUG_PRINT("exit",("to: '%s'",to)); - DBUG_RETURN((size_t) (pos-buff)); -} /* cleanup_dirname */ - - -/* - On system where you don't have symbolic links, the following - code will allow you to create a file: - directory-name.sym that should contain the real path - to the directory. This will be used if the directory name - doesn't exists -*/ - - -my_bool my_use_symdir=0; /* Set this if you want to use symdirs */ - -#ifdef USE_SYMDIR -void symdirget(char *dir) -{ - char buff[FN_REFLEN+1]; - char *pos=strend(dir); - if (dir[0] && pos[-1] != FN_DEVCHAR && my_access(dir, F_OK)) - { - File file; - size_t length; - char temp= *(--pos); /* May be "/" or "\" */ - strmov(pos,".sym"); - file= my_open(dir, O_RDONLY, MYF(0)); - *pos++=temp; *pos=0; /* Restore old filename */ - if (file >= 0) - { - if ((length= my_read(file, buff, sizeof(buff) - 1, MYF(0))) > 0) - { - for (pos= buff + length ; - pos > buff && (iscntrl(pos[-1]) || isspace(pos[-1])) ; - pos --); - - /* Ensure that the symlink ends with the directory symbol */ - if (pos == buff || pos[-1] != FN_LIBCHAR) - *pos++=FN_LIBCHAR; - - strmake(dir,buff, (size_t) (pos-buff)); - } - my_close(file, MYF(0)); - } - } -} -#endif /* USE_SYMDIR */ - - -/** - Convert a directory name to a format which can be compared as strings - - @param to result buffer, FN_REFLEN chars in length; may be == from - @param from 'packed' directory name, in whatever format - @returns size of the normalized name - - @details - - Ensures that last char is FN_LIBCHAR, unless it is FN_DEVCHAR - - Uses cleanup_dirname - - It does *not* expand ~/ (although, see cleanup_dirname). Nor does it do - any case folding. All case-insensitive normalization should be done by - the caller. -*/ - -size_t normalize_dirname(char *to, const char *from) -{ - size_t length; - char buff[FN_REFLEN]; - DBUG_ENTER("normalize_dirname"); - - /* - Despite the name, this actually converts the name to the system's - format (TODO: name this properly). - */ - (void) intern_filename(buff, from); - length= strlen(buff); /* Fix that '/' is last */ - if (length && -#ifdef FN_DEVCHAR - buff[length - 1] != FN_DEVCHAR && -#endif - buff[length - 1] != FN_LIBCHAR && buff[length - 1] != '/') - { - /* we need reserve 2 bytes for the trailing slash and the zero */ - if (length >= sizeof (buff) - 1) - length= sizeof (buff) - 2; - buff[length]= FN_LIBCHAR; - buff[length + 1]= '\0'; - } - - length=cleanup_dirname(to, buff); - - DBUG_RETURN(length); -} - - -/** - Fixes a directory name so that can be used by open() - - @param to Result buffer, FN_REFLEN characters. May be == from - @param from 'Packed' directory name (may contain ~) - - @details - - Uses normalize_dirname() - - Expands ~/... to home_dir/... - - Resolves MySQL's fake "foo.sym" symbolic directory names (if USE_SYMDIR) - - Changes a UNIX filename to system filename (replaces / with \ on windows) - - @returns - Length of new directory name (= length of to) -*/ - -size_t unpack_dirname(char * to, const char *from) -{ - size_t length, h_length; - char buff[FN_REFLEN+1+4],*suffix,*tilde_expansion; - DBUG_ENTER("unpack_dirname"); - - length= normalize_dirname(buff, from); - - if (buff[0] == FN_HOMELIB) - { - suffix=buff+1; tilde_expansion=expand_tilde(&suffix); - if (tilde_expansion) - { - length-= (size_t) (suffix-buff)-1; - if (length+(h_length= strlen(tilde_expansion)) <= FN_REFLEN) - { - if ((h_length > 0) && (tilde_expansion[h_length-1] == FN_LIBCHAR)) - h_length--; - if (buff+h_length < suffix) - bmove(buff+h_length,suffix,length); - else - bmove_upp((uchar*) buff+h_length+length, (uchar*) suffix+length, length); - bmove(buff,tilde_expansion,h_length); - } - } - } -#ifdef USE_SYMDIR - if (my_use_symdir) - symdirget(buff); -#endif - DBUG_RETURN(system_filename(to,buff)); /* Fix for open */ -} /* unpack_dirname */ - - - /* Expand tilde to home or user-directory */ - /* Path is reset to point at FN_LIBCHAR after ~xxx */ - -static char * expand_tilde(char **path) -{ - if (path[0][0] == FN_LIBCHAR) - return home_dir; /* ~/ expanded to home */ -#ifdef HAVE_GETPWNAM - { - char *str,save; - struct passwd *user_entry; - - if (!(str=strchr(*path,FN_LIBCHAR))) - str=strend(*path); - save= *str; *str= '\0'; - user_entry=getpwnam(*path); - *str=save; - endpwent(); - if (user_entry) - { - *path=str; - return user_entry->pw_dir; - } - } -#endif - return (char *) 0; -} - - -/* - Fix filename so it can be used by open, create - - SYNOPSIS - unpack_filename() - to Store result here. Must be at least of size FN_REFLEN. - from Filename in unix format (with ~) - - RETURN - # length of to - - NOTES - to may be == from - ~ will only be expanded if total length < FN_REFLEN -*/ - - -size_t unpack_filename(char * to, const char *from) -{ - size_t length, n_length, buff_length; - char buff[FN_REFLEN]; - DBUG_ENTER("unpack_filename"); - - length=dirname_part(buff, from, &buff_length);/* copy & convert dirname */ - n_length=unpack_dirname(buff,buff); - if (n_length+strlen(from+length) < FN_REFLEN) - { - (void) strmov(buff+n_length,from+length); - length= system_filename(to,buff); /* Fix to usably filename */ - } - else - length= system_filename(to,from); /* Fix to usably filename */ - DBUG_RETURN(length); -} /* unpack_filename */ - - - /* Convert filename (unix standard) to system standard */ - /* Used before system command's like open(), create() .. */ - /* Returns used length of to; total length should be FN_REFLEN */ - -size_t system_filename(char *to, const char *from) -{ - return (size_t) (strmake(to,from,FN_REFLEN-1)-to); -} - - /* Fix a filename to intern (UNIX format) */ - -char *intern_filename(char *to, const char *from) -{ - size_t length, to_length; - char buff[FN_REFLEN]; - if (from == to) - { /* Dirname may destroy from */ - strmov(buff,from); - from=buff; - } - length= dirname_part(to, from, &to_length); /* Copy dirname & fix chars */ - (void) strmov(to + to_length,from+length); - return (to); -} /* intern_filename */ diff --git a/deps/mysqllite/mysys/mf_path.c b/deps/mysqllite/mysys/mf_path.c deleted file mode 100644 index 92cb62e682759b..00000000000000 --- a/deps/mysqllite/mysys/mf_path.c +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include - -static char *find_file_in_path(char *to,const char *name); - - /* Finds where program can find it's files. - pre_pathname is found by first locking at progname (argv[0]). - if progname contains path the path is returned. - else if progname is found in path, return it - else if progname is given and POSIX environment variable "_" is set - then path is taken from "_". - If filename doesn't contain a path append MY_BASEDIR_VERSION or - MY_BASEDIR if defined, else append "/my/running". - own_path_name_part is concatinated to result. - my_path puts result in to and returns to */ - -char * my_path(char * to, const char *progname, - const char *own_pathname_part) -{ - char *start, *end, *prog; - size_t to_length; - DBUG_ENTER("my_path"); - - start=to; /* Return this */ - if (progname && (dirname_part(to, progname, &to_length) || - find_file_in_path(to,progname) || - ((prog=getenv("_")) != 0 && - dirname_part(to, prog, &to_length)))) - { - (void) intern_filename(to,to); - if (!test_if_hard_path(to)) - { - if (!my_getwd(curr_dir,FN_REFLEN,MYF(0))) - bchange((uchar*) to, 0, (uchar*) curr_dir, strlen(curr_dir), strlen(to)+1); - } - } - else - { - if ((end = getenv("MY_BASEDIR_VERSION")) == 0 && - (end = getenv("MY_BASEDIR")) == 0) - { -#ifdef DEFAULT_BASEDIR - end= (char*) DEFAULT_BASEDIR; -#else - end= (char*) "/my/"; -#endif - } - (void) intern_filename(to,end); - to=strend(to); - if (to != start && to[-1] != FN_LIBCHAR) - *to++ = FN_LIBCHAR; - (void) strmov(to,own_pathname_part); - } - DBUG_PRINT("exit",("to: '%s'",start)); - DBUG_RETURN(start); -} /* my_path */ - - - /* test if file without filename is found in path */ - /* Returns to if found and to has dirpart if found, else NullS */ - -#if defined(__WIN__) -#define F_OK 0 -#define PATH_SEP ';' -#define PROGRAM_EXTENSION ".exe" -#else -#define PATH_SEP ':' -#endif - -static char *find_file_in_path(char *to, const char *name) -{ - char *path,*pos,dir[2]; - const char *ext=""; - - if (!(path=getenv("PATH"))) - return NullS; - dir[0]=FN_LIBCHAR; dir[1]=0; -#ifdef PROGRAM_EXTENSION - if (!fn_ext(name)[0]) - ext=PROGRAM_EXTENSION; -#endif - - for (pos=path ; (pos=strchr(pos,PATH_SEP)) ; path= ++pos) - { - if (path != pos) - { - strxmov(strnmov(to,path,(uint) (pos-path)),dir,name,ext,NullS); - if (!access(to,F_OK)) - { - to[(uint) (pos-path)+1]=0; /* Return path only */ - return to; - } - } - } -#ifdef __WIN__ - to[0]=FN_CURLIB; - strxmov(to+1,dir,name,ext,NullS); - if (!access(to,F_OK)) /* Test in current dir */ - { - to[2]=0; /* Leave ".\" */ - return to; - } -#endif - return NullS; /* File not found */ -} diff --git a/deps/mysqllite/mysys/mf_qsort.c b/deps/mysqllite/mysys/mf_qsort.c deleted file mode 100644 index 4b3ecb603a65a1..00000000000000 --- a/deps/mysqllite/mysys/mf_qsort.c +++ /dev/null @@ -1,216 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - qsort implementation optimized for comparison of pointers - Inspired by the qsort implementations by Douglas C. Schmidt, - and Bentley & McIlroy's "Engineering a Sort Function". -*/ - - -#include "mysys_priv.h" -#ifndef SCO -#include -#endif - -/* We need to use qsort with 2 different compare functions */ -#ifdef QSORT_EXTRA_CMP_ARGUMENT -#define CMP(A,B) ((*cmp)(cmp_argument,(A),(B))) -#else -#define CMP(A,B) ((*cmp)((A),(B))) -#endif - -#define SWAP(A, B, size,swap_ptrs) \ -do { \ - if (swap_ptrs) \ - { \ - reg1 char **a = (char**) (A), **b = (char**) (B); \ - char *tmp = *a; *a++ = *b; *b++ = tmp; \ - } \ - else \ - { \ - reg1 char *a = (A), *b = (B); \ - reg3 char *end= a+size; \ - do \ - { \ - char tmp = *a; *a++ = *b; *b++ = tmp; \ - } while (a < end); \ - } \ -} while (0) - -/* Put the median in the middle argument */ -#define MEDIAN(low, mid, high) \ -{ \ - if (CMP(high,low) < 0) \ - SWAP(high, low, size, ptr_cmp); \ - if (CMP(mid, low) < 0) \ - SWAP(mid, low, size, ptr_cmp); \ - else if (CMP(high, mid) < 0) \ - SWAP(mid, high, size, ptr_cmp); \ -} - -/* The following node is used to store ranges to avoid recursive calls */ - -typedef struct st_stack -{ - char *low,*high; -} stack_node; - -#define PUSH(LOW,HIGH) {stack_ptr->low = LOW; stack_ptr++->high = HIGH;} -#define POP(LOW,HIGH) {LOW = (--stack_ptr)->low; HIGH = stack_ptr->high;} - -/* The following stack size is enough for ulong ~0 elements */ -#define STACK_SIZE (8 * sizeof(unsigned long int)) -#define THRESHOLD_FOR_INSERT_SORT 10 -#if defined(QSORT_TYPE_IS_VOID) -#define SORT_RETURN return -#else -#define SORT_RETURN return 0 -#endif - -/**************************************************************************** -** 'standard' quicksort with the following extensions: -** -** Can be compiled with the qsort2_cmp compare function -** Store ranges on stack to avoid recursion -** Use insert sort on small ranges -** Optimize for sorting of pointers (used often by MySQL) -** Use median comparison to find partition element -*****************************************************************************/ - -#ifdef QSORT_EXTRA_CMP_ARGUMENT -qsort_t my_qsort2(void *base_ptr, size_t count, size_t size, qsort2_cmp cmp, - void *cmp_argument) -#else -qsort_t my_qsort(void *base_ptr, size_t count, size_t size, qsort_cmp cmp) -#endif -{ - char *low, *high, *pivot; - stack_node stack[STACK_SIZE], *stack_ptr; - my_bool ptr_cmp; - /* Handle the simple case first */ - /* This will also make the rest of the code simpler */ - if (count <= 1) - SORT_RETURN; - - low = (char*) base_ptr; - high = low+ size * (count - 1); - stack_ptr = stack + 1; -#ifdef HAVE_purify - /* The first element in the stack will be accessed for the last POP */ - stack[0].low=stack[0].high=0; -#endif - pivot = (char *) my_alloca((int) size); - ptr_cmp= size == sizeof(char*) && !((low - (char*) 0)& (sizeof(char*)-1)); - - /* The following loop sorts elements between high and low */ - do - { - char *low_ptr, *high_ptr, *mid; - - count=((size_t) (high - low) / size)+1; - /* If count is small, then an insert sort is faster than qsort */ - if (count < THRESHOLD_FOR_INSERT_SORT) - { - for (low_ptr = low + size; low_ptr <= high; low_ptr += size) - { - char *ptr; - for (ptr = low_ptr; ptr > low && CMP(ptr - size, ptr) > 0; - ptr -= size) - SWAP(ptr, ptr - size, size, ptr_cmp); - } - POP(low, high); - continue; - } - - /* Try to find a good middle element */ - mid= low + size * (count >> 1); - if (count > 40) /* Must be bigger than 24 */ - { - size_t step = size* (count / 8); - MEDIAN(low, low + step, low+step*2); - MEDIAN(mid - step, mid, mid+step); - MEDIAN(high - 2 * step, high-step, high); - /* Put best median in 'mid' */ - MEDIAN(low+step, mid, high-step); - low_ptr = low; - high_ptr = high; - } - else - { - MEDIAN(low, mid, high); - /* The low and high argument are already in sorted against 'pivot' */ - low_ptr = low + size; - high_ptr = high - size; - } - memcpy(pivot, mid, size); - - do - { - while (CMP(low_ptr, pivot) < 0) - low_ptr += size; - while (CMP(pivot, high_ptr) < 0) - high_ptr -= size; - - if (low_ptr < high_ptr) - { - SWAP(low_ptr, high_ptr, size, ptr_cmp); - low_ptr += size; - high_ptr -= size; - } - else - { - if (low_ptr == high_ptr) - { - low_ptr += size; - high_ptr -= size; - } - break; - } - } - while (low_ptr <= high_ptr); - - /* - Prepare for next iteration. - Skip partitions of size 1 as these doesn't have to be sorted - Push the larger partition and sort the smaller one first. - This ensures that the stack is keept small. - */ - - if ((int) (high_ptr - low) <= 0) - { - if ((int) (high - low_ptr) <= 0) - { - POP(low, high); /* Nothing more to sort */ - } - else - low = low_ptr; /* Ignore small left part. */ - } - else if ((int) (high - low_ptr) <= 0) - high = high_ptr; /* Ignore small right part. */ - else if ((high_ptr - low) > (high - low_ptr)) - { - PUSH(low, high_ptr); /* Push larger left part */ - low = low_ptr; - } - else - { - PUSH(low_ptr, high); /* Push larger right part */ - high = high_ptr; - } - } while (stack_ptr > stack); - my_afree(pivot); - SORT_RETURN; -} diff --git a/deps/mysqllite/mysys/mf_qsort2.c b/deps/mysqllite/mysys/mf_qsort2.c deleted file mode 100644 index ca2bd1a49528c0..00000000000000 --- a/deps/mysqllite/mysys/mf_qsort2.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* qsort that sends one extra argument to the compare subrutine */ - -#define QSORT_EXTRA_CMP_ARGUMENT -#include "mf_qsort.c" diff --git a/deps/mysqllite/mysys/mf_radix.c b/deps/mysqllite/mysys/mf_radix.c deleted file mode 100644 index 582ca76b8f82af..00000000000000 --- a/deps/mysqllite/mysys/mf_radix.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Radixsort for pointers to fixed length strings. - A very quick sort for not to long (< 20 char) strings. - Neads a extra buffers of number_of_elements pointers but is - 2-3 times faster than quicksort -*/ - -#include "mysys_priv.h" -#include - - /* Radixsort */ - -void radixsort_for_str_ptr(uchar **base, uint number_of_elements, size_t size_of_element, uchar **buffer) -{ - uchar **end,**ptr,**buffer_ptr; - uint32 *count_ptr,*count_end,count[256]; - int pass; - - end=base+number_of_elements; count_end=count+256; - for (pass=(int) size_of_element-1 ; pass >= 0 ; pass--) - { - bzero((uchar*) count,sizeof(uint32)*256); - for (ptr= base ; ptr < end ; ptr++) - count[ptr[0][pass]]++; - if (count[0] == number_of_elements) - goto next; - for (count_ptr=count+1 ; count_ptr < count_end ; count_ptr++) - { - if (*count_ptr == number_of_elements) - goto next; - (*count_ptr)+= *(count_ptr-1); - } - for (ptr= end ; ptr-- != base ;) - buffer[--count[ptr[0][pass]]]= *ptr; - for (ptr=base, buffer_ptr=buffer ; ptr < end ;) - (*ptr++) = *buffer_ptr++; - next:; - } -} diff --git a/deps/mysqllite/mysys/mf_same.c b/deps/mysqllite/mysys/mf_same.c deleted file mode 100644 index 6738dc8051e81d..00000000000000 --- a/deps/mysqllite/mysys/mf_same.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Kopierar biblioteksstrukturen och extensionen fr}n ett filnamn */ - -#include "mysys_priv.h" -#include - - /* - Copy directory and/or extension between filenames. - (For the meaning of 'flag', check mf_format.c) - 'to' may be equal to 'name'. - Returns 'to'. - */ - -char * fn_same(char *to, const char *name, int flag) -{ - char dev[FN_REFLEN]; - const char *ext; - size_t dev_length; - DBUG_ENTER("fn_same"); - DBUG_PRINT("enter",("to: %s name: %s flag: %d",to,name,flag)); - - if ((ext=strrchr(name+dirname_part(dev, name, &dev_length),FN_EXTCHAR)) == 0) - ext=""; - - DBUG_RETURN(fn_format(to,to,dev,ext,flag)); -} /* fn_same */ diff --git a/deps/mysqllite/mysys/mf_sort.c b/deps/mysqllite/mysys/mf_sort.c deleted file mode 100644 index a3e7465ead0161..00000000000000 --- a/deps/mysqllite/mysys/mf_sort.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Sort of string pointers in string-order with radix or qsort */ - -#include "mysys_priv.h" -#include - -void my_string_ptr_sort(uchar *base, uint items, size_t size) -{ -#if INT_MAX > 65536L - uchar **ptr=0; - - if (size <= 20 && items >= 1000 && items < 100000 && - (ptr= (uchar**) my_malloc(items*sizeof(char*),MYF(0)))) - { - radixsort_for_str_ptr((uchar**) base,items,size,ptr); - my_free(ptr); - } - else -#endif - { - if (size && items) - { - my_qsort2(base,items, sizeof(uchar*), get_ptr_compare(size), - (void*) &size); - } - } -} diff --git a/deps/mysqllite/mysys/mf_soundex.c b/deps/mysqllite/mysys/mf_soundex.c deleted file mode 100644 index fe30d8c81aff3a..00000000000000 --- a/deps/mysqllite/mysys/mf_soundex.c +++ /dev/null @@ -1,105 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/**************************************************************** -* SOUNDEX ALGORITHM in C * -* * -* The basic Algorithm source is taken from EDN Nov. * -* 14, 1985 pg. 36. * -* * -* As a test Those in Illinois will find that the * -* first group of numbers in their drivers license * -* number is the soundex number for their last name. * -* * -* RHW PC-IBBS ID. #1230 * -* * -* As an extension if remove_garbage is set then all non- * -* alpha characters are skipped * -* * -* Note, that this implementation corresponds to the * -* original version of the algorithm, not to the more * -* popular "enhanced" version, described by Knuth. * -****************************************************************/ - -#include "mysys_priv.h" -#include -#include "my_static.h" - -static char get_scode(CHARSET_INFO * cs, char **ptr,pbool remove_garbage); - - /* outputed string is 4 byte long */ - /* out_pntr can be == in_pntr */ - -void soundex(CHARSET_INFO * cs,register char * out_pntr, char * in_pntr, - pbool remove_garbage) -{ - char ch,last_ch; - reg3 char * end; - register uchar *map=cs->to_upper; - - if (remove_garbage) - { - while (*in_pntr && !my_isalpha(cs,*in_pntr)) /* Skip pre-space */ - in_pntr++; - } - *out_pntr++ = map[(uchar)*in_pntr]; /* Copy first letter */ - last_ch = get_scode(cs,&in_pntr,0); /* code of the first letter */ - /* for the first 'double-letter */ - /* check. */ - end=out_pntr+3; /* Loop on input letters until */ - /* end of input (null) or output */ - /* letter code count = 3 */ - - in_pntr++; - while (out_pntr < end && (ch = get_scode(cs,&in_pntr,remove_garbage)) != 0) - { - in_pntr++; - if ((ch != '0') && (ch != last_ch)) /* if not skipped or double */ - { - *out_pntr++ = ch; /* letter, copy to output */ - } /* for next double-letter check */ - last_ch = ch; /* save code of last input letter */ - } - while (out_pntr < end) - *out_pntr++ = '0'; - *out_pntr=0; /* end string */ - return; -} /* soundex */ - - - /* - If alpha, map input letter to soundex code. - If not alpha and remove_garbage is set then skip to next char - else return 0 - */ - -static char get_scode(CHARSET_INFO * cs,char **ptr, pbool remove_garbage) -{ - uchar ch; - - if (remove_garbage) - { - while (**ptr && !my_isalpha(cs,**ptr)) - (*ptr)++; - } - ch=my_toupper(cs,**ptr); - if (ch < 'A' || ch > 'Z') - { - if (my_isalpha(cs,ch)) /* If extended alfa (country spec) */ - return '0'; /* threat as vokal */ - return 0; /* Can't map */ - } - return(soundex_map[ch-'A']); -} /* get_scode */ diff --git a/deps/mysqllite/mysys/mf_tempdir.c b/deps/mysqllite/mysys/mf_tempdir.c deleted file mode 100644 index c84987cfc96318..00000000000000 --- a/deps/mysqllite/mysys/mf_tempdir.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include - -#if defined(__WIN__) -#define DELIM ';' -#else -#define DELIM ':' -#endif - -my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist) -{ - char *end, *copy; - char buff[FN_REFLEN]; - DBUG_ENTER("init_tmpdir"); - DBUG_PRINT("enter", ("pathlist: %s", pathlist ? pathlist : "NULL")); - - mysql_mutex_init(key_TMPDIR_mutex, &tmpdir->mutex, MY_MUTEX_INIT_FAST); - if (my_init_dynamic_array(&tmpdir->full_list, sizeof(char*), 1, 5)) - goto err; - if (!pathlist || !pathlist[0]) - { - /* Get default temporary directory */ - pathlist=getenv("TMPDIR"); /* Use this if possible */ -#if defined(__WIN__) - if (!pathlist) - pathlist=getenv("TEMP"); - if (!pathlist) - pathlist=getenv("TMP"); -#endif - if (!pathlist || !pathlist[0]) - pathlist=(char*) P_tmpdir; - } - do - { - size_t length; - end=strcend(pathlist, DELIM); - strmake(buff, pathlist, (uint) (end-pathlist)); - length= cleanup_dirname(buff, buff); - if (!(copy= my_strndup(buff, length, MYF(MY_WME))) || - insert_dynamic(&tmpdir->full_list, (uchar*) ©)) - DBUG_RETURN(TRUE); - pathlist=end+1; - } - while (*end); - freeze_size(&tmpdir->full_list); - tmpdir->list=(char **)tmpdir->full_list.buffer; - tmpdir->max=tmpdir->full_list.elements-1; - tmpdir->cur=0; - DBUG_RETURN(FALSE); - -err: - delete_dynamic(&tmpdir->full_list); /* Safe to free */ - mysql_mutex_destroy(&tmpdir->mutex); - DBUG_RETURN(TRUE); -} - - -char *my_tmpdir(MY_TMPDIR *tmpdir) -{ - char *dir; - if (!tmpdir->max) - return tmpdir->list[0]; - mysql_mutex_lock(&tmpdir->mutex); - dir=tmpdir->list[tmpdir->cur]; - tmpdir->cur= (tmpdir->cur == tmpdir->max) ? 0 : tmpdir->cur+1; - mysql_mutex_unlock(&tmpdir->mutex); - return dir; -} - -void free_tmpdir(MY_TMPDIR *tmpdir) -{ - uint i; - if (!tmpdir->full_list.elements) - return; - for (i=0; i<=tmpdir->max; i++) - my_free(tmpdir->list[i]); - delete_dynamic(&tmpdir->full_list); - mysql_mutex_destroy(&tmpdir->mutex); -} - diff --git a/deps/mysqllite/mysys/mf_tempfile.c b/deps/mysqllite/mysys/mf_tempfile.c deleted file mode 100644 index e85124fb4c304c..00000000000000 --- a/deps/mysqllite/mysys/mf_tempfile.c +++ /dev/null @@ -1,177 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include -#include "my_static.h" -#include "mysys_err.h" -#include -#ifdef HAVE_PATHS_H -#include -#endif - - - -/* - @brief - Create a temporary file with unique name in a given directory - - @details - create_temp_file - to pointer to buffer where temporary filename will be stored - dir directory where to create the file - prefix prefix the filename with this - mode Flags to use for my_create/my_open - MyFlags Magic flags - - @return - File descriptor of opened file if success - -1 and sets errno if fails. - - @note - The behaviour of this function differs a lot between - implementation, it's main use is to generate a file with - a name that does not already exist. - - When passing O_TEMPORARY flag in "mode" the file should - be automatically deleted - - The implementation using mkstemp should be considered the - reference implementation when adding a new or modifying an - existing one - -*/ - -File create_temp_file(char *to, const char *dir, const char *prefix, - int mode __attribute__((unused)), - myf MyFlags __attribute__((unused))) -{ - File file= -1; -#ifdef __WIN__ - TCHAR path_buf[MAX_PATH-14]; -#endif - - DBUG_ENTER("create_temp_file"); - DBUG_PRINT("enter", ("dir: %s, prefix: %s", dir, prefix)); -#if defined (__WIN__) - - /* - Use GetTempPath to determine path for temporary files. - This is because the documentation for GetTempFileName - has the following to say about this parameter: - "If this parameter is NULL, the function fails." - */ - if (!dir) - { - if(GetTempPath(sizeof(path_buf), path_buf) > 0) - dir = path_buf; - } - /* - Use GetTempFileName to generate a unique filename, create - the file and release it's handle - - uses up to the first three letters from prefix - */ - if (GetTempFileName(dir, prefix, 0, to) == 0) - DBUG_RETURN(-1); - - DBUG_PRINT("info", ("name: %s", to)); - - /* - Open the file without the "open only if file doesn't already exist" - since the file has already been created by GetTempFileName - */ - if ((file= my_open(to, (mode & ~O_EXCL), MyFlags)) < 0) - { - /* Open failed, remove the file created by GetTempFileName */ - int tmp= my_errno; - (void) my_delete(to, MYF(0)); - my_errno= tmp; - } - -#elif defined(HAVE_MKSTEMP) - { - char prefix_buff[30]; - uint pfx_len; - File org_file; - - pfx_len= (uint) (strmov(strnmov(prefix_buff, - prefix ? prefix : "tmp.", - sizeof(prefix_buff)-7),"XXXXXX") - - prefix_buff); - if (!dir && ! (dir =getenv("TMPDIR"))) - dir=P_tmpdir; - if (strlen(dir)+ pfx_len > FN_REFLEN-2) - { - errno=my_errno= ENAMETOOLONG; - DBUG_RETURN(file); - } - strmov(convert_dirname(to,dir,NullS),prefix_buff); - org_file=mkstemp(to); - if (mode & O_TEMPORARY) - (void) my_delete(to, MYF(MY_WME | ME_NOINPUT)); - file=my_register_filename(org_file, to, FILE_BY_MKSTEMP, - EE_CANTCREATEFILE, MyFlags); - /* If we didn't manage to register the name, remove the temp file */ - if (org_file >= 0 && file < 0) - { - int tmp=my_errno; - close(org_file); - (void) my_delete(to, MYF(MY_WME | ME_NOINPUT)); - my_errno=tmp; - } - } -#elif defined(HAVE_TEMPNAM) - { - extern char **environ; - - char *res,**old_env,*temp_env[1]; - if (dir && !dir[0]) - { /* Change empty string to current dir */ - to[0]= FN_CURLIB; - to[1]= 0; - dir=to; - } - - old_env= (char**) environ; - if (dir) - { /* Don't use TMPDIR if dir is given */ - environ=(const char**) temp_env; - temp_env[0]=0; - } - - if ((res=tempnam((char*) dir, (char*) prefix))) - { - strmake(to,res,FN_REFLEN-1); - (*free)(res); - file=my_create(to,0, - (int) (O_RDWR | O_BINARY | O_TRUNC | O_EXCL | O_NOFOLLOW | - O_TEMPORARY | O_SHORT_LIVED), - MYF(MY_WME)); - - } - else - { - DBUG_PRINT("error",("Got error: %d from tempnam",errno)); - } - - environ=(const char**) old_env; - } -#else -#error No implementation found for create_temp_file -#endif - if (file >= 0) - thread_safe_increment(my_tmp_file_created,&THR_LOCK_open); - DBUG_RETURN(file); -} diff --git a/deps/mysqllite/mysys/mf_unixpath.c b/deps/mysqllite/mysys/mf_unixpath.c deleted file mode 100644 index ee81aae4584833..00000000000000 --- a/deps/mysqllite/mysys/mf_unixpath.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include - -/** - Convert filename to unix style filename. - - @remark On Windows, converts '\' to '/'. - - @param to A pathname. -*/ - -void to_unix_path(char *to __attribute__((unused))) -{ -#if FN_LIBCHAR != '/' - { - to--; - while ((to=strchr(to+1,FN_LIBCHAR)) != 0) - *to='/'; - } -#endif -} diff --git a/deps/mysqllite/mysys/mf_wcomp.c b/deps/mysqllite/mysys/mf_wcomp.c deleted file mode 100644 index 4786537d1a5649..00000000000000 --- a/deps/mysqllite/mysys/mf_wcomp.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Funktions for comparing with wild-cards */ - -#include "mysys_priv.h" - - /* Test if a string is "comparable" to a wild-card string */ - /* returns 0 if the strings are "comparable" */ - -char wild_many='*'; -char wild_one='?'; -char wild_prefix=0; /* QQ this can potentially cause a SIGSEGV */ - -int wild_compare(register const char *str, register const char *wildstr, - pbool str_is_pattern) -{ - char cmp; - DBUG_ENTER("wild_compare"); - - while (*wildstr) - { - while (*wildstr && *wildstr != wild_many && *wildstr != wild_one) - { - if (*wildstr == wild_prefix && wildstr[1]) - { - wildstr++; - if (str_is_pattern && *str++ != wild_prefix) - DBUG_RETURN(1); - } - if (*wildstr++ != *str++) - DBUG_RETURN(1); - } - if (! *wildstr ) - DBUG_RETURN(*str != 0); - if (*wildstr++ == wild_one) - { - if (! *str || (str_is_pattern && *str == wild_many)) - DBUG_RETURN(1); /* One char; skip */ - if (*str++ == wild_prefix && str_is_pattern && *str) - str++; - } - else - { /* Found '*' */ - while (str_is_pattern && *str == wild_many) - str++; - for (; *wildstr == wild_many || *wildstr == wild_one; wildstr++) - if (*wildstr == wild_many) - { - while (str_is_pattern && *str == wild_many) - str++; - } - else - { - if (str_is_pattern && *str == wild_prefix && str[1]) - str+=2; - else if (! *str++) - DBUG_RETURN (1); - } - if (!*wildstr) - DBUG_RETURN(0); /* '*' as last char: OK */ - if ((cmp= *wildstr) == wild_prefix && wildstr[1] && !str_is_pattern) - cmp=wildstr[1]; - for (;;str++) - { - while (*str && *str != cmp) - str++; - if (!*str) - DBUG_RETURN (1); - if (wild_compare(str,wildstr,str_is_pattern) == 0) - DBUG_RETURN (0); - } - /* We will never come here */ - } - } - DBUG_RETURN (*str != 0); -} /* wild_compare */ diff --git a/deps/mysqllite/mysys/mulalloc.c b/deps/mysqllite/mysys/mulalloc.c deleted file mode 100644 index f4ca3d9f9ab047..00000000000000 --- a/deps/mysqllite/mysys/mulalloc.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include - -/* - Malloc many pointers at the same time - Only ptr1 can be free'd, and doing this will free all - the memory allocated. ptr2, etc all point inside big allocated - memory area. - - SYNOPSIS - my_multi_malloc() - myFlags Flags - ptr1, length1 Multiple arguments terminated by null ptr - ptr2, length2 ... - ... - NULL -*/ - -void* my_multi_malloc(myf myFlags, ...) -{ - va_list args; - char **ptr,*start,*res; - size_t tot_length,length; - DBUG_ENTER("my_multi_malloc"); - - va_start(args,myFlags); - tot_length=0; - while ((ptr=va_arg(args, char **))) - { - length=va_arg(args,uint); - tot_length+=ALIGN_SIZE(length); - } - va_end(args); - - if (!(start=(char *) my_malloc(tot_length,myFlags))) - DBUG_RETURN(0); /* purecov: inspected */ - - va_start(args,myFlags); - res=start; - while ((ptr=va_arg(args, char **))) - { - *ptr=res; - length=va_arg(args,uint); - res+=ALIGN_SIZE(length); - } - va_end(args); - DBUG_RETURN((void*) start); -} diff --git a/deps/mysqllite/mysys/my_access.c b/deps/mysqllite/mysys/my_access.c deleted file mode 100644 index 210946d50a87c3..00000000000000 --- a/deps/mysqllite/mysys/my_access.c +++ /dev/null @@ -1,201 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include - -#ifdef __WIN__ - -/* - Check a file or path for accessability. - - SYNOPSIS - file_access() - path Path to file - amode Access method - - DESCRIPTION - This function wraps the normal access method because the access - available in MSVCRT> +reports that filenames such as LPT1 and - COM1 are valid (they are but should not be so for us). - - RETURN VALUES - 0 ok - -1 error (We use -1 as my_access is mapped to access on other platforms) -*/ - -int my_access(const char *path, int amode) -{ - WIN32_FILE_ATTRIBUTE_DATA fileinfo; - BOOL result; - - result= GetFileAttributesEx(path, GetFileExInfoStandard, &fileinfo); - if (! result || - (fileinfo.dwFileAttributes & FILE_ATTRIBUTE_READONLY) && (amode & W_OK)) - { - my_errno= errno= EACCES; - return -1; - } - return 0; -} - -#endif /* __WIN__ */ - - -/* - List of file names that causes problem on windows - - NOTE that one can also not have file names of type CON.TXT - - NOTE: it is important to keep "CLOCK$" on the first place, - we skip it in check_if_legal_tablename. -*/ -static const char *reserved_names[]= -{ - "CLOCK$", - "CON", "PRN", "AUX", "NUL", - "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", - "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9", - NullS -}; - -#define MAX_RESERVED_NAME_LENGTH 6 - - -/* - Looks up a null-terminated string in a list, - case insensitively. - - SYNOPSIS - str_list_find() - list list of items - str item to find - - RETURN - 0 ok - 1 reserved file name -*/ -static int str_list_find(const char **list, const char *str) -{ - const char **name; - for (name= list; *name; name++) - { - if (!my_strcasecmp(&my_charset_latin1, *name, str)) - return 1; - } - return 0; -} - - -/* - A map for faster reserved_names lookup, - helps to avoid loops in many cases. - 1 - can be the first letter - 2 - can be the second letter - 4 - can be the third letter -*/ -static char reserved_map[256]= -{ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* !"#$%&'()*+,-./ */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0123456789:;<=>? */ - 0,1,0,1,0,0,0,0,0,0,0,0,7,4,5,2, /* @ABCDEFGHIJKLMNO */ - 3,0,2,0,4,2,0,0,4,0,0,0,0,0,0,0, /* PQRSTUVWXYZ[\]^_ */ - 0,1,0,1,0,0,0,0,0,0,0,0,7,4,5,2, /* bcdefghijklmno */ - 3,0,2,0,4,2,0,0,4,0,0,0,0,0,0,0, /* pqrstuvwxyz{|}~. */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* ................ */ -}; - - -/* - Check if a table name may cause problems - - SYNOPSIS - check_if_legal_tablename - name Table name (without any extensions) - - DESCRIPTION - We don't check 'CLOCK$' because dollar sign is encoded as @0024, - making table file name 'CLOCK@0024', which is safe. - This is why we start lookup from the second element - (i.e. &reserver_name[1]) - - RETURN - 0 ok - 1 reserved file name -*/ - -int check_if_legal_tablename(const char *name) -{ - DBUG_ENTER("check_if_legal_tablename"); - DBUG_RETURN((reserved_map[(uchar) name[0]] & 1) && - (reserved_map[(uchar) name[1]] & 2) && - (reserved_map[(uchar) name[2]] & 4) && - str_list_find(&reserved_names[1], name)); -} - - -#if defined(__WIN__) || defined(__EMX__) - - -/* - Check if a path will access a reserverd file name that may cause problems - - SYNOPSIS - check_if_legal_filename - path Path to file - - RETURN - 0 ok - 1 reserved file name -*/ - -int check_if_legal_filename(const char *path) -{ - const char *end; - const char **reserved_name; - DBUG_ENTER("check_if_legal_filename"); - - path+= dirname_length(path); /* To start of filename */ - if (!(end= strchr(path, FN_EXTCHAR))) - end= strend(path); - if (path == end || (uint) (end - path) > MAX_RESERVED_NAME_LENGTH) - DBUG_RETURN(0); /* Simplify inner loop */ - - for (reserved_name= reserved_names; *reserved_name; reserved_name++) - { - const char *reserved= *reserved_name; /* never empty */ - const char *name= path; - - do - { - if (*reserved != my_toupper(&my_charset_latin1, *name)) - break; - if (++name == end && !reserved[1]) - DBUG_RETURN(1); /* Found wrong path */ - } while (*++reserved); - } - DBUG_RETURN(0); -} - -#endif /* defined(__WIN__) || defined(__EMX__) */ diff --git a/deps/mysqllite/mysys/my_aes.c b/deps/mysqllite/mysys/my_aes.c deleted file mode 100644 index 575d4702deef3b..00000000000000 --- a/deps/mysqllite/mysys/my_aes.c +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright (C) 2002 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -/* - Implementation of AES Encryption for MySQL - Initial version by Peter Zaitsev June 2002 -*/ - - -#include -#include -#include "my_aes.h" - -enum encrypt_dir { AES_ENCRYPT, AES_DECRYPT }; - -#define AES_BLOCK_SIZE 16 /* Block size in bytes */ - -#define AES_BAD_DATA -1 /* If bad data discovered during decoding */ - - -/* The structure for key information */ -typedef struct { - int nr; /* Number of rounds */ - uint32 rk[4*(AES_MAXNR + 1)]; /* key schedule */ -} KEYINSTANCE; - - -/* - This is internal function just keeps joint code of Key generation - - SYNOPSIS - my_aes_create_key() - aes_key Address of Key Instance to be created - direction Direction (are we encoding or decoding) - key Key to use for real key creation - key_length Length of the key - - DESCRIPTION - - RESULT - 0 ok - -1 Error Note: The current impementation never returns this -*/ - -static int my_aes_create_key(KEYINSTANCE *aes_key, - enum encrypt_dir direction, const char *key, - int key_length) -{ - uint8 rkey[AES_KEY_LENGTH/8]; /* The real key to be used for encryption */ - uint8 *rkey_end=rkey+AES_KEY_LENGTH/8; /* Real key boundary */ - uint8 *ptr; /* Start of the real key*/ - const char *sptr; /* Start of the working key */ - const char *key_end=key+key_length; /* Working key boundary*/ - - bzero((char*) rkey,AES_KEY_LENGTH/8); /* Set initial key */ - - for (ptr= rkey, sptr= key; sptr < key_end; ptr++,sptr++) - { - if (ptr == rkey_end) - ptr= rkey; /* Just loop over tmp_key until we used all key */ - *ptr^= (uint8) *sptr; - } -#ifdef AES_USE_KEY_BITS - /* - This block is intended to allow more weak encryption if application - build with libmysqld needs to correspond to export regulations - It should be never used in normal distribution as does not give - any speed improvement. - To get worse security define AES_USE_KEY_BITS to number of bits - you want key to be. It should be divisible by 8 - - WARNING: Changing this value results in changing of enryption for - all key lengths so altering this value will result in impossibility - to decrypt data encrypted with previous value - */ -#define AES_USE_KEY_BYTES (AES_USE_KEY_BITS/8) - /* - To get weaker key we use first AES_USE_KEY_BYTES bytes of created key - and cyclically copy them until we created all required key length - */ - for (ptr= rkey+AES_USE_KEY_BYTES, sptr=rkey ; ptr < rkey_end; - ptr++,sptr++) - { - if (sptr == rkey+AES_USE_KEY_BYTES) - sptr=rkey; - *ptr=*sptr; - } -#endif - if (direction == AES_DECRYPT) - aes_key->nr = rijndaelKeySetupDec(aes_key->rk, rkey, AES_KEY_LENGTH); - else - aes_key->nr = rijndaelKeySetupEnc(aes_key->rk, rkey, AES_KEY_LENGTH); - return 0; -} - - -/* - Crypt buffer with AES encryption algorithm. - - SYNOPSIS - my_aes_encrypt() - source Pointer to data for encryption - source_length Size of encryption data - dest Buffer to place encrypted data (must be large enough) - key Key to be used for encryption - key_length Length of the key. Will handle keys of any length - - RETURN - >= 0 Size of encrypted data - < 0 Error -*/ - -int my_aes_encrypt(const char* source, int source_length, char* dest, - const char* key, int key_length) -{ - KEYINSTANCE aes_key; - uint8 block[AES_BLOCK_SIZE]; /* 128 bit block used for padding */ - int rc; /* result codes */ - int num_blocks; /* number of complete blocks */ - char pad_len; /* pad size for the last block */ - int i; - - if ((rc= my_aes_create_key(&aes_key,AES_ENCRYPT,key,key_length))) - return rc; - - num_blocks = source_length/AES_BLOCK_SIZE; - - for (i = num_blocks; i > 0; i--) /* Encode complete blocks */ - { - rijndaelEncrypt(aes_key.rk, aes_key.nr, (const uint8*) source, - (uint8*) dest); - source+= AES_BLOCK_SIZE; - dest+= AES_BLOCK_SIZE; - } - - /* Encode the rest. We always have incomplete block */ - pad_len = AES_BLOCK_SIZE - (source_length - AES_BLOCK_SIZE*num_blocks); - memcpy(block, source, 16 - pad_len); - bfill(block + AES_BLOCK_SIZE - pad_len, pad_len, pad_len); - rijndaelEncrypt(aes_key.rk, aes_key.nr, block, (uint8*) dest); - return AES_BLOCK_SIZE*(num_blocks + 1); -} - - -/* - DeCrypt buffer with AES encryption algorithm. - - SYNOPSIS - my_aes_decrypt() - source Pointer to data for decryption - source_length Size of encrypted data - dest Buffer to place decrypted data (must be large enough) - key Key to be used for decryption - key_length Length of the key. Will handle keys of any length - - RETURN - >= 0 Size of encrypted data - < 0 Error -*/ - -int my_aes_decrypt(const char *source, int source_length, char *dest, - const char *key, int key_length) -{ - KEYINSTANCE aes_key; - uint8 block[AES_BLOCK_SIZE]; /* 128 bit block used for padding */ - int rc; /* Result codes */ - int num_blocks; /* Number of complete blocks */ - uint pad_len; /* Pad size for the last block */ - int i; - - if ((rc=my_aes_create_key(&aes_key,AES_DECRYPT,key,key_length))) - return rc; - - num_blocks = source_length/AES_BLOCK_SIZE; - - if ((source_length != num_blocks*AES_BLOCK_SIZE) || num_blocks ==0 ) - return AES_BAD_DATA; /* Input size has to be even and at least one block */ - - for (i = num_blocks-1; i > 0; i--) /* Decode all but last blocks */ - { - rijndaelDecrypt(aes_key.rk, aes_key.nr, (const uint8*) source, - (uint8*) dest); - source+= AES_BLOCK_SIZE; - dest+= AES_BLOCK_SIZE; - } - - rijndaelDecrypt(aes_key.rk, aes_key.nr, (const uint8*) source, block); - /* Use last char in the block as size */ - pad_len = (uint) (uchar) block[AES_BLOCK_SIZE-1]; - - if (pad_len > AES_BLOCK_SIZE) - return AES_BAD_DATA; - /* We could also check whole padding but we do not really need this */ - - memcpy(dest, block, AES_BLOCK_SIZE - pad_len); - return AES_BLOCK_SIZE*num_blocks - pad_len; -} - - -/* - Get size of buffer which will be large enough for encrypted data - - SYNOPSIS - my_aes_get_size() - source_length Length of data to be encrypted - - RETURN - Size of buffer required to store encrypted data -*/ - -int my_aes_get_size(int source_length) -{ - return AES_BLOCK_SIZE*(source_length/AES_BLOCK_SIZE)+AES_BLOCK_SIZE; -} diff --git a/deps/mysqllite/mysys/my_alarm.c b/deps/mysqllite/mysys/my_alarm.c deleted file mode 100644 index d6a0da1bd13bb2..00000000000000 --- a/deps/mysqllite/mysys/my_alarm.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Function to set a varible when we got a alarm */ -/* Used by my_lock samt functions in m_alarm.h */ - - -#include "mysys_priv.h" -#include "my_alarm.h" - -#ifdef HAVE_ALARM - - /* ARGSUSED */ -sig_handler my_set_alarm_variable(int signo __attribute__((unused))) -{ - my_have_got_alarm=1; /* Tell program that time expired */ - return; -} - -#endif /* HAVE_ALARM */ diff --git a/deps/mysqllite/mysys/my_alloc.c b/deps/mysqllite/mysys/my_alloc.c deleted file mode 100644 index 903826dd97504c..00000000000000 --- a/deps/mysqllite/mysys/my_alloc.c +++ /dev/null @@ -1,436 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Routines to handle mallocing of results which will be freed the same time */ - -#include -#include -#include -#undef EXTRA_DEBUG -#define EXTRA_DEBUG - - -/* - Initialize memory root - - SYNOPSIS - init_alloc_root() - mem_root - memory root to initialize - block_size - size of chunks (blocks) used for memory allocation - (It is external size of chunk i.e. it should include - memory required for internal structures, thus it - should be no less than ALLOC_ROOT_MIN_BLOCK_SIZE) - pre_alloc_size - if non-0, then size of block that should be - pre-allocated during memory root initialization. - - DESCRIPTION - This function prepares memory root for further use, sets initial size of - chunk for memory allocation and pre-allocates first block if specified. - Altough error can happen during execution of this function if - pre_alloc_size is non-0 it won't be reported. Instead it will be - reported as error in first alloc_root() on this memory root. -*/ - -void init_alloc_root(MEM_ROOT *mem_root, size_t block_size, - size_t pre_alloc_size __attribute__((unused))) -{ - DBUG_ENTER("init_alloc_root"); - DBUG_PRINT("enter",("root: 0x%lx", (long) mem_root)); - - mem_root->free= mem_root->used= mem_root->pre_alloc= 0; - mem_root->min_malloc= 32; - mem_root->block_size= block_size - ALLOC_ROOT_MIN_BLOCK_SIZE; - mem_root->error_handler= 0; - mem_root->block_num= 4; /* We shift this with >>2 */ - mem_root->first_block_usage= 0; - -#if !(defined(HAVE_purify) && defined(EXTRA_DEBUG)) - if (pre_alloc_size) - { - if ((mem_root->free= mem_root->pre_alloc= - (USED_MEM*) my_malloc(pre_alloc_size+ ALIGN_SIZE(sizeof(USED_MEM)), - MYF(0)))) - { - mem_root->free->size= pre_alloc_size+ALIGN_SIZE(sizeof(USED_MEM)); - mem_root->free->left= pre_alloc_size; - mem_root->free->next= 0; - } - } -#endif - DBUG_VOID_RETURN; -} - - -/* - SYNOPSIS - reset_root_defaults() - mem_root memory root to change defaults of - block_size new value of block size. Must be greater or equal - than ALLOC_ROOT_MIN_BLOCK_SIZE (this value is about - 68 bytes and depends on platform and compilation flags) - pre_alloc_size new size of preallocated block. If not zero, - must be equal to or greater than block size, - otherwise means 'no prealloc'. - DESCRIPTION - Function aligns and assigns new value to block size; then it tries to - reuse one of existing blocks as prealloc block, or malloc new one of - requested size. If no blocks can be reused, all unused blocks are freed - before allocation. -*/ - -void reset_root_defaults(MEM_ROOT *mem_root, size_t block_size, - size_t pre_alloc_size __attribute__((unused))) -{ - DBUG_ASSERT(alloc_root_inited(mem_root)); - - mem_root->block_size= block_size - ALLOC_ROOT_MIN_BLOCK_SIZE; -#if !(defined(HAVE_purify) && defined(EXTRA_DEBUG)) - if (pre_alloc_size) - { - size_t size= pre_alloc_size + ALIGN_SIZE(sizeof(USED_MEM)); - if (!mem_root->pre_alloc || mem_root->pre_alloc->size != size) - { - USED_MEM *mem, **prev= &mem_root->free; - /* - Free unused blocks, so that consequent calls - to reset_root_defaults won't eat away memory. - */ - while (*prev) - { - mem= *prev; - if (mem->size == size) - { - /* We found a suitable block, no need to do anything else */ - mem_root->pre_alloc= mem; - return; - } - if (mem->left + ALIGN_SIZE(sizeof(USED_MEM)) == mem->size) - { - /* remove block from the list and free it */ - *prev= mem->next; - my_free(mem); - } - else - prev= &mem->next; - } - /* Allocate new prealloc block and add it to the end of free list */ - if ((mem= (USED_MEM *) my_malloc(size, MYF(0)))) - { - mem->size= size; - mem->left= pre_alloc_size; - mem->next= *prev; - *prev= mem_root->pre_alloc= mem; - } - else - { - mem_root->pre_alloc= 0; - } - } - } - else -#endif - mem_root->pre_alloc= 0; -} - - -void *alloc_root(MEM_ROOT *mem_root, size_t length) -{ -#if defined(HAVE_purify) && defined(EXTRA_DEBUG) - reg1 USED_MEM *next; - DBUG_ENTER("alloc_root"); - DBUG_PRINT("enter",("root: 0x%lx", (long) mem_root)); - - DBUG_ASSERT(alloc_root_inited(mem_root)); - - DBUG_EXECUTE_IF("simulate_out_of_memory", - { - if (mem_root->error_handler) - (*mem_root->error_handler)(); - DBUG_SET("-d,simulate_out_of_memory"); - DBUG_RETURN((void*) 0); /* purecov: inspected */ - }); - - length+=ALIGN_SIZE(sizeof(USED_MEM)); - if (!(next = (USED_MEM*) my_malloc(length,MYF(MY_WME | ME_FATALERROR)))) - { - if (mem_root->error_handler) - (*mem_root->error_handler)(); - DBUG_RETURN((uchar*) 0); /* purecov: inspected */ - } - next->next= mem_root->used; - next->size= length; - mem_root->used= next; - DBUG_PRINT("exit",("ptr: 0x%lx", (long) (((char*) next)+ - ALIGN_SIZE(sizeof(USED_MEM))))); - DBUG_RETURN((uchar*) (((char*) next)+ALIGN_SIZE(sizeof(USED_MEM)))); -#else - size_t get_size, block_size; - uchar* point; - reg1 USED_MEM *next= 0; - reg2 USED_MEM **prev; - DBUG_ENTER("alloc_root"); - DBUG_PRINT("enter",("root: 0x%lx", (long) mem_root)); - DBUG_ASSERT(alloc_root_inited(mem_root)); - - DBUG_EXECUTE_IF("simulate_out_of_memory", - { - /* Avoid reusing an already allocated block */ - if (mem_root->error_handler) - (*mem_root->error_handler)(); - DBUG_SET("-d,simulate_out_of_memory"); - DBUG_RETURN((void*) 0); /* purecov: inspected */ - }); - length= ALIGN_SIZE(length); - if ((*(prev= &mem_root->free)) != NULL) - { - if ((*prev)->left < length && - mem_root->first_block_usage++ >= ALLOC_MAX_BLOCK_USAGE_BEFORE_DROP && - (*prev)->left < ALLOC_MAX_BLOCK_TO_DROP) - { - next= *prev; - *prev= next->next; /* Remove block from list */ - next->next= mem_root->used; - mem_root->used= next; - mem_root->first_block_usage= 0; - } - for (next= *prev ; next && next->left < length ; next= next->next) - prev= &next->next; - } - if (! next) - { /* Time to alloc new block */ - block_size= mem_root->block_size * (mem_root->block_num >> 2); - get_size= length+ALIGN_SIZE(sizeof(USED_MEM)); - get_size= max(get_size, block_size); - - if (!(next = (USED_MEM*) my_malloc(get_size,MYF(MY_WME | ME_FATALERROR)))) - { - if (mem_root->error_handler) - (*mem_root->error_handler)(); - DBUG_RETURN((void*) 0); /* purecov: inspected */ - } - mem_root->block_num++; - next->next= *prev; - next->size= get_size; - next->left= get_size-ALIGN_SIZE(sizeof(USED_MEM)); - *prev=next; - } - - point= (uchar*) ((char*) next+ (next->size-next->left)); - /*TODO: next part may be unneded due to mem_root->first_block_usage counter*/ - if ((next->left-= length) < mem_root->min_malloc) - { /* Full block */ - *prev= next->next; /* Remove block from list */ - next->next= mem_root->used; - mem_root->used= next; - mem_root->first_block_usage= 0; - } - DBUG_PRINT("exit",("ptr: 0x%lx", (ulong) point)); - DBUG_RETURN((void*) point); -#endif -} - - -/* - Allocate many pointers at the same time. - - DESCRIPTION - ptr1, ptr2, etc all point into big allocated memory area. - - SYNOPSIS - multi_alloc_root() - root Memory root - ptr1, length1 Multiple arguments terminated by a NULL pointer - ptr2, length2 ... - ... - NULL - - RETURN VALUE - A pointer to the beginning of the allocated memory block - in case of success or NULL if out of memory. -*/ - -void *multi_alloc_root(MEM_ROOT *root, ...) -{ - va_list args; - char **ptr, *start, *res; - size_t tot_length, length; - DBUG_ENTER("multi_alloc_root"); - - va_start(args, root); - tot_length= 0; - while ((ptr= va_arg(args, char **))) - { - length= va_arg(args, uint); - tot_length+= ALIGN_SIZE(length); - } - va_end(args); - - if (!(start= (char*) alloc_root(root, tot_length))) - DBUG_RETURN(0); /* purecov: inspected */ - - va_start(args, root); - res= start; - while ((ptr= va_arg(args, char **))) - { - *ptr= res; - length= va_arg(args, uint); - res+= ALIGN_SIZE(length); - } - va_end(args); - DBUG_RETURN((void*) start); -} - -#define TRASH_MEM(X) TRASH(((char*)(X) + ((X)->size-(X)->left)), (X)->left) - -/* Mark all data in blocks free for reusage */ - -static inline void mark_blocks_free(MEM_ROOT* root) -{ - reg1 USED_MEM *next; - reg2 USED_MEM **last; - - /* iterate through (partially) free blocks, mark them free */ - last= &root->free; - for (next= root->free; next; next= *(last= &next->next)) - { - next->left= next->size - ALIGN_SIZE(sizeof(USED_MEM)); - TRASH_MEM(next); - } - - /* Combine the free and the used list */ - *last= next=root->used; - - /* now go through the used blocks and mark them free */ - for (; next; next= next->next) - { - next->left= next->size - ALIGN_SIZE(sizeof(USED_MEM)); - TRASH_MEM(next); - } - - /* Now everything is set; Indicate that nothing is used anymore */ - root->used= 0; - root->first_block_usage= 0; -} - - -/* - Deallocate everything used by alloc_root or just move - used blocks to free list if called with MY_USED_TO_FREE - - SYNOPSIS - free_root() - root Memory root - MyFlags Flags for what should be freed: - - MY_MARK_BLOCKS_FREED Don't free blocks, just mark them free - MY_KEEP_PREALLOC If this is not set, then free also the - preallocated block - - NOTES - One can call this function either with root block initialised with - init_alloc_root() or with a bzero()-ed block. - It's also safe to call this multiple times with the same mem_root. -*/ - -void free_root(MEM_ROOT *root, myf MyFlags) -{ - reg1 USED_MEM *next,*old; - DBUG_ENTER("free_root"); - DBUG_PRINT("enter",("root: 0x%lx flags: %u", (long) root, (uint) MyFlags)); - - if (MyFlags & MY_MARK_BLOCKS_FREE) - { - mark_blocks_free(root); - DBUG_VOID_RETURN; - } - if (!(MyFlags & MY_KEEP_PREALLOC)) - root->pre_alloc=0; - - for (next=root->used; next ;) - { - old=next; next= next->next ; - if (old != root->pre_alloc) - my_free(old); - } - for (next=root->free ; next ;) - { - old=next; next= next->next; - if (old != root->pre_alloc) - my_free(old); - } - root->used=root->free=0; - if (root->pre_alloc) - { - root->free=root->pre_alloc; - root->free->left=root->pre_alloc->size-ALIGN_SIZE(sizeof(USED_MEM)); - TRASH_MEM(root->pre_alloc); - root->free->next=0; - } - root->block_num= 4; - root->first_block_usage= 0; - DBUG_VOID_RETURN; -} - -/* - Find block that contains an object and set the pre_alloc to it -*/ - -void set_prealloc_root(MEM_ROOT *root, char *ptr) -{ - USED_MEM *next; - for (next=root->used; next ; next=next->next) - { - if ((char*) next <= ptr && (char*) next + next->size > ptr) - { - root->pre_alloc=next; - return; - } - } - for (next=root->free ; next ; next=next->next) - { - if ((char*) next <= ptr && (char*) next + next->size > ptr) - { - root->pre_alloc=next; - return; - } - } -} - - -char *strdup_root(MEM_ROOT *root, const char *str) -{ - return strmake_root(root, str, strlen(str)); -} - - -char *strmake_root(MEM_ROOT *root, const char *str, size_t len) -{ - char *pos; - if ((pos=alloc_root(root,len+1))) - { - memcpy(pos,str,len); - pos[len]=0; - } - return pos; -} - - -void *memdup_root(MEM_ROOT *root, const void *str, size_t len) -{ - char *pos; - if ((pos=alloc_root(root,len))) - memcpy(pos,str,len); - return pos; -} diff --git a/deps/mysqllite/mysys/my_atomic.c b/deps/mysqllite/mysys/my_atomic.c deleted file mode 100644 index 7cbe15cfb74c64..00000000000000 --- a/deps/mysqllite/mysys/my_atomic.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2006 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include - -#include - -/* - checks that the current build of atomic ops - can run on this machine - - RETURN - ATOMIC_xxx values, see my_atomic.h -*/ -int my_atomic_initialize() -{ - compile_time_assert(sizeof(intptr) == sizeof(void *)); - /* currently the only thing worth checking is SMP/UP issue */ -#ifdef MY_ATOMIC_MODE_DUMMY - return my_getncpus() == 1 ? MY_ATOMIC_OK : MY_ATOMIC_NOT_1CPU; -#else - return MY_ATOMIC_OK; -#endif -} - -#ifdef SAFE_MUTEX -#undef pthread_mutex_init -#undef pthread_mutex_destroy -#undef pthread_mutex_lock -#undef pthread_mutex_unlock - -void plain_pthread_mutex_init(safe_mutex_t *m) -{ - pthread_mutex_init(& m->mutex, NULL); -} - -void plain_pthread_mutex_destroy(safe_mutex_t *m) -{ - pthread_mutex_destroy(& m->mutex); -} - -void plain_pthread_mutex_lock(safe_mutex_t *m) -{ - pthread_mutex_lock(& m->mutex); -} - -void plain_pthread_mutex_unlock(safe_mutex_t *m) -{ - pthread_mutex_unlock(& m->mutex); -} - -#endif - - diff --git a/deps/mysqllite/mysys/my_bit.c b/deps/mysqllite/mysys/my_bit.c deleted file mode 100644 index f072f243765823..00000000000000 --- a/deps/mysqllite/mysys/my_bit.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include - -#include - -const char _my_bits_nbits[256] = { - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8, -}; - -/* - perl -e 'print map{", 0x".unpack H2,pack B8,unpack b8,chr$_}(0..255)' -*/ -const uchar _my_bits_reverse_table[256]={ -0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, -0xB0, 0x70, 0xF0, 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, -0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, -0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, 0x0C, 0x8C, 0x4C, 0xCC, -0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, 0x02, -0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, -0x72, 0xF2, 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, -0xDA, 0x3A, 0xBA, 0x7A, 0xFA, 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, -0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, -0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, 0x01, 0x81, -0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, -0xF1, 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, -0x39, 0xB9, 0x79, 0xF9, 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, -0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, -0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, 0x03, 0x83, 0x43, -0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, -0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, -0xBB, 0x7B, 0xFB, 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, -0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, -0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF -}; - diff --git a/deps/mysqllite/mysys/my_bitmap.c b/deps/mysqllite/mysys/my_bitmap.c deleted file mode 100644 index dc15014121b594..00000000000000 --- a/deps/mysqllite/mysys/my_bitmap.c +++ /dev/null @@ -1,932 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Handling of uchar arrays as large bitmaps. - - API limitations (or, rather asserted safety assumptions, - to encourage correct programming) - - * the internal size is a set of 32 bit words - * the number of bits specified in creation can be any number > 0 - * there are THREAD safe versions of most calls called bitmap_lock_* - - TODO: - Make assembler THREAD safe versions of these using test-and-set instructions - - Original version created by Sergei Golubchik 2001 - 2004. - New version written and test program added and some changes to the interface - was made by Mikael Ronström 2005, with assistance of Tomas Ulin and Mats - Kindahl. -*/ - -#include "mysys_priv.h" -#include -#include -#include - -void create_last_word_mask(MY_BITMAP *map) -{ - /* Get the number of used bits (1..8) in the last byte */ - unsigned int const used= 1U + ((map->n_bits-1U) & 0x7U); - - /* - Create a mask with the upper 'unused' bits set and the lower 'used' - bits clear. The bits within each byte is stored in big-endian order. - */ - unsigned char const mask= (~((1 << used) - 1)) & 255; - - /* - The first bytes are to be set to zero since they represent real bits - in the bitvector. The last bytes are set to 0xFF since they represent - bytes not used by the bitvector. Finally the last byte contains bits - as set by the mask above. - */ - unsigned char *ptr= (unsigned char*)&map->last_word_mask; - - map->last_word_ptr= map->bitmap + no_words_in_map(map)-1; - switch (no_bytes_in_map(map) & 3) { - case 1: - map->last_word_mask= ~0U; - ptr[0]= mask; - return; - case 2: - map->last_word_mask= ~0U; - ptr[0]= 0; - ptr[1]= mask; - return; - case 3: - map->last_word_mask= 0U; - ptr[2]= mask; - ptr[3]= 0xFFU; - return; - case 0: - map->last_word_mask= 0U; - ptr[3]= mask; - return; - } -} - - -static inline void bitmap_lock(MY_BITMAP *map __attribute__((unused))) -{ - if (map->mutex) - mysql_mutex_lock(map->mutex); -} - -static inline void bitmap_unlock(MY_BITMAP *map __attribute__((unused))) -{ - if (map->mutex) - mysql_mutex_unlock(map->mutex); -} - - -my_bool bitmap_init(MY_BITMAP *map, my_bitmap_map *buf, uint n_bits, - my_bool thread_safe __attribute__((unused))) -{ - DBUG_ENTER("bitmap_init"); - if (!buf) - { - uint size_in_bytes= bitmap_buffer_size(n_bits); - uint extra= 0; - - if (thread_safe) - { - size_in_bytes= ALIGN_SIZE(size_in_bytes); - extra= sizeof(mysql_mutex_t); - } - map->mutex= 0; - - if (!(buf= (my_bitmap_map*) my_malloc(size_in_bytes+extra, MYF(MY_WME)))) - DBUG_RETURN(1); - - if (thread_safe) - { - map->mutex= (mysql_mutex_t *) ((char*) buf + size_in_bytes); - mysql_mutex_init(key_BITMAP_mutex, map->mutex, MY_MUTEX_INIT_FAST); - } - - } - - else - { - DBUG_ASSERT(thread_safe == 0); - } - - - map->bitmap= buf; - map->n_bits= n_bits; - create_last_word_mask(map); - bitmap_clear_all(map); - DBUG_RETURN(0); -} - - -void bitmap_free(MY_BITMAP *map) -{ - DBUG_ENTER("bitmap_free"); - if (map->bitmap) - { - if (map->mutex) - mysql_mutex_destroy(map->mutex); - - my_free(map->bitmap); - map->bitmap=0; - } - DBUG_VOID_RETURN; -} - - -/* - test if bit already set and set it if it was not (thread unsafe method) - - SYNOPSIS - bitmap_fast_test_and_set() - MAP bit map struct - BIT bit number - - RETURN - 0 bit was not set - !=0 bit was set -*/ - -my_bool bitmap_fast_test_and_set(MY_BITMAP *map, uint bitmap_bit) -{ - uchar *value= ((uchar*) map->bitmap) + (bitmap_bit / 8); - uchar bit= 1 << ((bitmap_bit) & 7); - uchar res= (*value) & bit; - *value|= bit; - return res; -} - - -/* - test if bit already set and set it if it was not (thread safe method) - - SYNOPSIS - bitmap_fast_test_and_set() - map bit map struct - bitmap_bit bit number - - RETURN - 0 bit was not set - !=0 bit was set -*/ - -my_bool bitmap_test_and_set(MY_BITMAP *map, uint bitmap_bit) -{ - my_bool res; - DBUG_ASSERT(map->bitmap && bitmap_bit < map->n_bits); - bitmap_lock(map); - res= bitmap_fast_test_and_set(map, bitmap_bit); - bitmap_unlock(map); - return res; -} - -/* - test if bit already set and clear it if it was set(thread unsafe method) - - SYNOPSIS - bitmap_fast_test_and_set() - MAP bit map struct - BIT bit number - - RETURN - 0 bit was not set - !=0 bit was set -*/ - -my_bool bitmap_fast_test_and_clear(MY_BITMAP *map, uint bitmap_bit) -{ - uchar *byte= (uchar*) map->bitmap + (bitmap_bit / 8); - uchar bit= 1 << ((bitmap_bit) & 7); - uchar res= (*byte) & bit; - *byte&= ~bit; - return res; -} - - -my_bool bitmap_test_and_clear(MY_BITMAP *map, uint bitmap_bit) -{ - my_bool res; - DBUG_ASSERT(map->bitmap && bitmap_bit < map->n_bits); - bitmap_lock(map); - res= bitmap_fast_test_and_clear(map, bitmap_bit); - bitmap_unlock(map); - return res; -} - - -uint bitmap_set_next(MY_BITMAP *map) -{ - uint bit_found; - DBUG_ASSERT(map->bitmap); - if ((bit_found= bitmap_get_first(map)) != MY_BIT_NONE) - bitmap_set_bit(map, bit_found); - return bit_found; -} - - -void bitmap_set_prefix(MY_BITMAP *map, uint prefix_size) -{ - uint prefix_bytes, prefix_bits, d; - uchar *m= (uchar *)map->bitmap; - - DBUG_ASSERT(map->bitmap && - (prefix_size <= map->n_bits || prefix_size == (uint) ~0)); - set_if_smaller(prefix_size, map->n_bits); - if ((prefix_bytes= prefix_size / 8)) - memset(m, 0xff, prefix_bytes); - m+= prefix_bytes; - if ((prefix_bits= prefix_size & 7)) - *m++= (1 << prefix_bits)-1; - if ((d= no_bytes_in_map(map)-prefix_bytes)) - bzero(m, d); -} - - -my_bool bitmap_is_prefix(const MY_BITMAP *map, uint prefix_size) -{ - uint prefix_bits= prefix_size & 0x7, res; - uchar *m= (uchar*)map->bitmap; - uchar *end_prefix= m+prefix_size/8; - uchar *end; - DBUG_ASSERT(m && prefix_size <= map->n_bits); - end= m+no_bytes_in_map(map); - - while (m < end_prefix) - if (*m++ != 0xff) - return 0; - - *map->last_word_ptr&= ~map->last_word_mask; /*Clear bits*/ - res= 0; - if (prefix_bits && *m++ != (1 << prefix_bits)-1) - goto ret; - - while (m < end) - if (*m++ != 0) - goto ret; - res= 1; -ret: - return res; -} - - -my_bool bitmap_is_set_all(const MY_BITMAP *map) -{ - my_bitmap_map *data_ptr= map->bitmap; - my_bitmap_map *end= map->last_word_ptr; - *map->last_word_ptr |= map->last_word_mask; - for (; data_ptr <= end; data_ptr++) - if (*data_ptr != 0xFFFFFFFF) - return FALSE; - return TRUE; -} - - -my_bool bitmap_is_clear_all(const MY_BITMAP *map) -{ - my_bitmap_map *data_ptr= map->bitmap; - my_bitmap_map *end; - if (*map->last_word_ptr & ~map->last_word_mask) - return FALSE; - end= map->last_word_ptr; - for (; data_ptr < end; data_ptr++) - if (*data_ptr) - return FALSE; - return TRUE; -} - -/* Return TRUE if map1 is a subset of map2 */ - -my_bool bitmap_is_subset(const MY_BITMAP *map1, const MY_BITMAP *map2) -{ - my_bitmap_map *m1= map1->bitmap, *m2= map2->bitmap, *end; - - DBUG_ASSERT(map1->bitmap && map2->bitmap && - map1->n_bits==map2->n_bits); - - end= map1->last_word_ptr; - *map1->last_word_ptr &= ~map1->last_word_mask; - *map2->last_word_ptr &= ~map2->last_word_mask; - while (m1 <= end) - { - if ((*m1++) & ~(*m2++)) - return 0; - } - return 1; -} - -/* True if bitmaps has any common bits */ - -my_bool bitmap_is_overlapping(const MY_BITMAP *map1, const MY_BITMAP *map2) -{ - my_bitmap_map *m1= map1->bitmap, *m2= map2->bitmap, *end; - - DBUG_ASSERT(map1->bitmap && map2->bitmap && - map1->n_bits==map2->n_bits); - - end= map1->last_word_ptr; - *map1->last_word_ptr &= ~map1->last_word_mask; - *map2->last_word_ptr &= ~map2->last_word_mask; - while (m1 <= end) - { - if ((*m1++) & (*m2++)) - return 1; - } - return 0; -} - - -void bitmap_intersect(MY_BITMAP *map, const MY_BITMAP *map2) -{ - my_bitmap_map *to= map->bitmap, *from= map2->bitmap, *end; - uint len= no_words_in_map(map), len2 = no_words_in_map(map2); - - DBUG_ASSERT(map->bitmap && map2->bitmap); - - end= to+min(len,len2); - *map2->last_word_ptr&= ~map2->last_word_mask; /*Clear last bits in map2*/ - while (to < end) - *to++ &= *from++; - - if (len2 < len) - { - end+=len-len2; - while (to < end) - *to++=0; - } -} - - -/* - Set/clear all bits above a bit. - - SYNOPSIS - bitmap_set_above() - map RETURN The bitmap to change. - from_byte The bitmap buffer byte offset to start with. - use_bit The bit value (1/0) to use for all upper bits. - - NOTE - You can only set/clear full bytes. - The function is meant for the situation that you copy a smaller bitmap - to a bigger bitmap. Bitmap lengths are always multiple of eigth (the - size of a byte). Using 'from_byte' saves multiplication and division - by eight during parameter passing. - - RETURN - void -*/ - -void bitmap_set_above(MY_BITMAP *map, uint from_byte, uint use_bit) -{ - uchar use_byte= use_bit ? 0xff : 0; - uchar *to= (uchar *)map->bitmap + from_byte; - uchar *end= (uchar *)map->bitmap + (map->n_bits+7)/8; - - while (to < end) - *to++= use_byte; -} - - -void bitmap_subtract(MY_BITMAP *map, const MY_BITMAP *map2) -{ - my_bitmap_map *to= map->bitmap, *from= map2->bitmap, *end; - DBUG_ASSERT(map->bitmap && map2->bitmap && - map->n_bits==map2->n_bits); - - end= map->last_word_ptr; - - while (to <= end) - *to++ &= ~(*from++); -} - - -void bitmap_union(MY_BITMAP *map, const MY_BITMAP *map2) -{ - my_bitmap_map *to= map->bitmap, *from= map2->bitmap, *end; - - DBUG_ASSERT(map->bitmap && map2->bitmap && - map->n_bits==map2->n_bits); - end= map->last_word_ptr; - - while (to <= end) - *to++ |= *from++; -} - - -void bitmap_xor(MY_BITMAP *map, const MY_BITMAP *map2) -{ - my_bitmap_map *to= map->bitmap, *from= map2->bitmap, *end= map->last_word_ptr; - DBUG_ASSERT(map->bitmap && map2->bitmap && - map->n_bits==map2->n_bits); - while (to <= end) - *to++ ^= *from++; -} - - -void bitmap_invert(MY_BITMAP *map) -{ - my_bitmap_map *to= map->bitmap, *end; - - DBUG_ASSERT(map->bitmap); - end= map->last_word_ptr; - - while (to <= end) - *to++ ^= 0xFFFFFFFF; -} - - -uint bitmap_bits_set(const MY_BITMAP *map) -{ - uchar *m= (uchar*)map->bitmap; - uchar *end= m + no_bytes_in_map(map); - uint res= 0; - - DBUG_ASSERT(map->bitmap); - *map->last_word_ptr&= ~map->last_word_mask; /*Reset last bits to zero*/ - while (m < end) - res+= my_count_bits_ushort(*m++); - return res; -} - - -void bitmap_copy(MY_BITMAP *map, const MY_BITMAP *map2) -{ - my_bitmap_map *to= map->bitmap, *from= map2->bitmap, *end; - - DBUG_ASSERT(map->bitmap && map2->bitmap && - map->n_bits==map2->n_bits); - end= map->last_word_ptr; - while (to <= end) - *to++ = *from++; -} - - -uint bitmap_get_first_set(const MY_BITMAP *map) -{ - uchar *byte_ptr; - uint i,j,k; - my_bitmap_map *data_ptr, *end= map->last_word_ptr; - - DBUG_ASSERT(map->bitmap); - data_ptr= map->bitmap; - *map->last_word_ptr &= ~map->last_word_mask; - - for (i=0; data_ptr <= end; data_ptr++, i++) - { - if (*data_ptr) - { - byte_ptr= (uchar*)data_ptr; - for (j=0; ; j++, byte_ptr++) - { - if (*byte_ptr) - { - for (k=0; ; k++) - { - if (*byte_ptr & (1 << k)) - return (i*32) + (j*8) + k; - } - } - } - } - } - return MY_BIT_NONE; -} - - -uint bitmap_get_first(const MY_BITMAP *map) -{ - uchar *byte_ptr; - uint i,j,k; - my_bitmap_map *data_ptr, *end= map->last_word_ptr; - - DBUG_ASSERT(map->bitmap); - data_ptr= map->bitmap; - *map->last_word_ptr|= map->last_word_mask; - - for (i=0; data_ptr <= end; data_ptr++, i++) - { - if (*data_ptr != 0xFFFFFFFF) - { - byte_ptr= (uchar*)data_ptr; - for (j=0; ; j++, byte_ptr++) - { - if (*byte_ptr != 0xFF) - { - for (k=0; ; k++) - { - if (!(*byte_ptr & (1 << k))) - return (i*32) + (j*8) + k; - } - } - } - } - } - return MY_BIT_NONE; -} - - -uint bitmap_lock_set_next(MY_BITMAP *map) -{ - uint bit_found; - bitmap_lock(map); - bit_found= bitmap_set_next(map); - bitmap_unlock(map); - return bit_found; -} - - -void bitmap_lock_clear_bit(MY_BITMAP *map, uint bitmap_bit) -{ - bitmap_lock(map); - DBUG_ASSERT(map->bitmap && bitmap_bit < map->n_bits); - bitmap_clear_bit(map, bitmap_bit); - bitmap_unlock(map); -} - -#ifdef MAIN - -uint get_rand_bit(uint bitsize) -{ - return (rand() % bitsize); -} - -bool test_set_get_clear_bit(MY_BITMAP *map, uint bitsize) -{ - uint i, test_bit; - uint no_loops= bitsize > 128 ? 128 : bitsize; - for (i=0; i < no_loops; i++) - { - test_bit= get_rand_bit(bitsize); - bitmap_set_bit(map, test_bit); - if (!bitmap_is_set(map, test_bit)) - goto error1; - bitmap_clear_bit(map, test_bit); - if (bitmap_is_set(map, test_bit)) - goto error2; - } - return FALSE; -error1: - printf("Error in set bit, bit %u, bitsize = %u", test_bit, bitsize); - return TRUE; -error2: - printf("Error in clear bit, bit %u, bitsize = %u", test_bit, bitsize); - return TRUE; -} - -bool test_flip_bit(MY_BITMAP *map, uint bitsize) -{ - uint i, test_bit; - uint no_loops= bitsize > 128 ? 128 : bitsize; - for (i=0; i < no_loops; i++) - { - test_bit= get_rand_bit(bitsize); - bitmap_flip_bit(map, test_bit); - if (!bitmap_is_set(map, test_bit)) - goto error1; - bitmap_flip_bit(map, test_bit); - if (bitmap_is_set(map, test_bit)) - goto error2; - } - return FALSE; -error1: - printf("Error in flip bit 1, bit %u, bitsize = %u", test_bit, bitsize); - return TRUE; -error2: - printf("Error in flip bit 2, bit %u, bitsize = %u", test_bit, bitsize); - return TRUE; -} - -bool test_operators(MY_BITMAP *map __attribute__((unused)), - uint bitsize __attribute__((unused))) -{ - return FALSE; -} - -bool test_get_all_bits(MY_BITMAP *map, uint bitsize) -{ - uint i; - bitmap_set_all(map); - if (!bitmap_is_set_all(map)) - goto error1; - if (!bitmap_is_prefix(map, bitsize)) - goto error5; - bitmap_clear_all(map); - if (!bitmap_is_clear_all(map)) - goto error2; - if (!bitmap_is_prefix(map, 0)) - goto error6; - for (i=0; i 128 ? 128 : bitsize; - MY_BITMAP map2_obj, map3_obj; - MY_BITMAP *map2= &map2_obj, *map3= &map3_obj; - my_bitmap_map map2buf[1024]; - my_bitmap_map map3buf[1024]; - bitmap_init(&map2_obj, map2buf, bitsize, FALSE); - bitmap_init(&map3_obj, map3buf, bitsize, FALSE); - bitmap_clear_all(map2); - bitmap_clear_all(map3); - for (i=0; i < no_loops; i++) - { - test_bit1=get_rand_bit(bitsize); - bitmap_set_prefix(map, test_bit1); - test_bit2=get_rand_bit(bitsize); - bitmap_set_prefix(map2, test_bit2); - bitmap_intersect(map, map2); - test_bit3= test_bit2 < test_bit1 ? test_bit2 : test_bit1; - bitmap_set_prefix(map3, test_bit3); - if (!bitmap_cmp(map, map3)) - goto error1; - bitmap_clear_all(map); - bitmap_clear_all(map2); - bitmap_clear_all(map3); - test_bit1=get_rand_bit(bitsize); - test_bit2=get_rand_bit(bitsize); - test_bit3=get_rand_bit(bitsize); - bitmap_set_prefix(map, test_bit1); - bitmap_set_prefix(map2, test_bit2); - test_bit3= test_bit2 > test_bit1 ? test_bit2 : test_bit1; - bitmap_set_prefix(map3, test_bit3); - bitmap_union(map, map2); - if (!bitmap_cmp(map, map3)) - goto error2; - bitmap_clear_all(map); - bitmap_clear_all(map2); - bitmap_clear_all(map3); - test_bit1=get_rand_bit(bitsize); - test_bit2=get_rand_bit(bitsize); - test_bit3=get_rand_bit(bitsize); - bitmap_set_prefix(map, test_bit1); - bitmap_set_prefix(map2, test_bit2); - bitmap_xor(map, map2); - test_bit3= test_bit2 > test_bit1 ? test_bit2 : test_bit1; - test_bit4= test_bit2 < test_bit1 ? test_bit2 : test_bit1; - bitmap_set_prefix(map3, test_bit3); - for (j=0; j < test_bit4; j++) - bitmap_clear_bit(map3, j); - if (!bitmap_cmp(map, map3)) - goto error3; - bitmap_clear_all(map); - bitmap_clear_all(map2); - bitmap_clear_all(map3); - test_bit1=get_rand_bit(bitsize); - test_bit2=get_rand_bit(bitsize); - test_bit3=get_rand_bit(bitsize); - bitmap_set_prefix(map, test_bit1); - bitmap_set_prefix(map2, test_bit2); - bitmap_subtract(map, map2); - if (test_bit2 < test_bit1) - { - bitmap_set_prefix(map3, test_bit1); - for (j=0; j < test_bit2; j++) - bitmap_clear_bit(map3, j); - } - if (!bitmap_cmp(map, map3)) - goto error4; - bitmap_clear_all(map); - bitmap_clear_all(map2); - bitmap_clear_all(map3); - test_bit1=get_rand_bit(bitsize); - bitmap_set_prefix(map, test_bit1); - bitmap_invert(map); - bitmap_set_all(map3); - for (j=0; j < test_bit1; j++) - bitmap_clear_bit(map3, j); - if (!bitmap_cmp(map, map3)) - goto error5; - bitmap_clear_all(map); - bitmap_clear_all(map3); - } - return FALSE; -error1: - printf("intersect error bitsize=%u,size1=%u,size2=%u", bitsize, - test_bit1,test_bit2); - return TRUE; -error2: - printf("union error bitsize=%u,size1=%u,size2=%u", bitsize, - test_bit1,test_bit2); - return TRUE; -error3: - printf("xor error bitsize=%u,size1=%u,size2=%u", bitsize, - test_bit1,test_bit2); - return TRUE; -error4: - printf("subtract error bitsize=%u,size1=%u,size2=%u", bitsize, - test_bit1,test_bit2); - return TRUE; -error5: - printf("invert error bitsize=%u,size=%u", bitsize, - test_bit1); - return TRUE; -} - -bool test_count_bits_set(MY_BITMAP *map, uint bitsize) -{ - uint i, bit_count=0, test_bit; - uint no_loops= bitsize > 128 ? 128 : bitsize; - for (i=0; i < no_loops; i++) - { - test_bit=get_rand_bit(bitsize); - if (!bitmap_is_set(map, test_bit)) - { - bitmap_set_bit(map, test_bit); - bit_count++; - } - } - if (bit_count==0 && bitsize > 0) - goto error1; - if (bitmap_bits_set(map) != bit_count) - goto error2; - return FALSE; -error1: - printf("No bits set bitsize = %u", bitsize); - return TRUE; -error2: - printf("Wrong count of bits set, bitsize = %u", bitsize); - return TRUE; -} - -bool test_get_first_bit(MY_BITMAP *map, uint bitsize) -{ - uint i, test_bit; - uint no_loops= bitsize > 128 ? 128 : bitsize; - for (i=0; i < no_loops; i++) - { - test_bit=get_rand_bit(bitsize); - bitmap_set_bit(map, test_bit); - if (bitmap_get_first_set(map) != test_bit) - goto error1; - bitmap_set_all(map); - bitmap_clear_bit(map, test_bit); - if (bitmap_get_first(map) != test_bit) - goto error2; - bitmap_clear_all(map); - } - return FALSE; -error1: - printf("get_first_set error bitsize=%u,prefix_size=%u",bitsize,test_bit); - return TRUE; -error2: - printf("get_first error bitsize= %u, prefix_size= %u",bitsize,test_bit); - return TRUE; -} - -bool test_get_next_bit(MY_BITMAP *map, uint bitsize) -{ - uint i, j, test_bit; - uint no_loops= bitsize > 128 ? 128 : bitsize; - for (i=0; i < no_loops; i++) - { - test_bit=get_rand_bit(bitsize); - for (j=0; j < test_bit; j++) - bitmap_set_next(map); - if (!bitmap_is_prefix(map, test_bit)) - goto error1; - bitmap_clear_all(map); - } - return FALSE; -error1: - printf("get_next error bitsize= %u, prefix_size= %u", bitsize,test_bit); - return TRUE; -} - -bool test_prefix(MY_BITMAP *map, uint bitsize) -{ - uint i, j, test_bit; - uint no_loops= bitsize > 128 ? 128 : bitsize; - for (i=0; i < no_loops; i++) - { - test_bit=get_rand_bit(bitsize); - bitmap_set_prefix(map, test_bit); - if (!bitmap_is_prefix(map, test_bit)) - goto error1; - bitmap_clear_all(map); - for (j=0; j < test_bit; j++) - bitmap_set_bit(map, j); - if (!bitmap_is_prefix(map, test_bit)) - goto error2; - bitmap_set_all(map); - for (j=bitsize - 1; ~(j-test_bit); j--) - bitmap_clear_bit(map, j); - if (!bitmap_is_prefix(map, test_bit)) - goto error3; - bitmap_clear_all(map); - } - return FALSE; -error1: - printf("prefix1 error bitsize = %u, prefix_size = %u", bitsize,test_bit); - return TRUE; -error2: - printf("prefix2 error bitsize = %u, prefix_size = %u", bitsize,test_bit); - return TRUE; -error3: - printf("prefix3 error bitsize = %u, prefix_size = %u", bitsize,test_bit); - return TRUE; -} - - -bool do_test(uint bitsize) -{ - MY_BITMAP map; - my_bitmap_map buf[1024]; - if (bitmap_init(&map, buf, bitsize, FALSE)) - { - printf("init error for bitsize %d", bitsize); - goto error; - } - if (test_set_get_clear_bit(&map,bitsize)) - goto error; - bitmap_clear_all(&map); - if (test_flip_bit(&map,bitsize)) - goto error; - bitmap_clear_all(&map); - if (test_operators(&map,bitsize)) - goto error; - bitmap_clear_all(&map); - if (test_get_all_bits(&map, bitsize)) - goto error; - bitmap_clear_all(&map); - if (test_compare_operators(&map,bitsize)) - goto error; - bitmap_clear_all(&map); - if (test_count_bits_set(&map,bitsize)) - goto error; - bitmap_clear_all(&map); - if (test_get_first_bit(&map,bitsize)) - goto error; - bitmap_clear_all(&map); - if (test_get_next_bit(&map,bitsize)) - goto error; - if (test_prefix(&map,bitsize)) - goto error; - return FALSE; -error: - printf("\n"); - return TRUE; -} - -int main() -{ - int i; - for (i= 1; i < 4096; i++) - { - printf("Start test for bitsize=%u\n",i); - if (do_test(i)) - return -1; - } - printf("OK\n"); - return 0; -} - -/* - In directory mysys: - make test_bitmap - will build the bitmap tests and ./test_bitmap will execute it -*/ - -#endif diff --git a/deps/mysqllite/mysys/my_chsize.c b/deps/mysqllite/mysys/my_chsize.c deleted file mode 100644 index b9013811b34800..00000000000000 --- a/deps/mysqllite/mysys/my_chsize.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include "m_string.h" - -/* - Change size of file. - - SYNOPSIS - my_chsize() - fd File descriptor - new_length New file size - filler If we don't have truncate, fill up all bytes after - new_length with this character - MyFlags Flags - - DESCRIPTION - my_chsize() truncates file if shorter else fill with the filler character. - The function also changes the file pointer. Usually it points to the end - of the file after execution. - - RETURN VALUE - 0 Ok - 1 Error -*/ -int my_chsize(File fd, my_off_t newlength, int filler, myf MyFlags) -{ - my_off_t oldsize; - uchar buff[IO_SIZE]; - DBUG_ENTER("my_chsize"); - DBUG_PRINT("my",("fd: %d length: %lu MyFlags: %d",fd,(ulong) newlength, - MyFlags)); - - if ((oldsize= my_seek(fd, 0L, MY_SEEK_END, MYF(MY_WME+MY_FAE))) == newlength) - DBUG_RETURN(0); - - DBUG_PRINT("info",("old_size: %ld", (ulong) oldsize)); - - if (oldsize > newlength) - { -#ifdef _WIN32 - if (my_win_chsize(fd, newlength)) - { - my_errno= errno; - goto err; - } - DBUG_RETURN(0); -#elif defined(HAVE_FTRUNCATE) - if (ftruncate(fd, (off_t) newlength)) - { - my_errno= errno; - goto err; - } - DBUG_RETURN(0); -#elif defined(HAVE_CHSIZE) - if (chsize(fd, (off_t) newlength)) - { - my_errno=errno; - goto err; - } - DBUG_RETURN(0); -#else - /* - Fill space between requested length and true length with 'filler' - We should never come here on any modern machine - */ - if (my_seek(fd, newlength, MY_SEEK_SET, MYF(MY_WME+MY_FAE)) - == MY_FILEPOS_ERROR) - { - goto err; - } - swap_variables(my_off_t, newlength, oldsize); -#endif - } - - /* Full file with 'filler' until it's as big as requested */ - bfill(buff, IO_SIZE, filler); - while (newlength-oldsize > IO_SIZE) - { - if (my_write(fd, buff, IO_SIZE, MYF(MY_NABP))) - goto err; - oldsize+= IO_SIZE; - } - if (my_write(fd,buff,(size_t) (newlength-oldsize), MYF(MY_NABP))) - goto err; - DBUG_RETURN(0); - -err: - DBUG_PRINT("error", ("errno: %d", errno)); - if (MyFlags & MY_WME) - my_error(EE_CANT_CHSIZE, MYF(ME_BELL+ME_WAITTANG), my_errno); - DBUG_RETURN(1); -} /* my_chsize */ diff --git a/deps/mysqllite/mysys/my_compress.c b/deps/mysqllite/mysys/my_compress.c deleted file mode 100644 index 360390d376a54f..00000000000000 --- a/deps/mysqllite/mysys/my_compress.c +++ /dev/null @@ -1,264 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Written by Sinisa Milivojevic */ - -#include -#ifdef HAVE_COMPRESS -#include -#ifndef SCO -#include -#endif -#include - -/* - This replaces the packet with a compressed packet - - SYNOPSIS - my_compress() - packet Data to compress. This is is replaced with the compressed data. - len Length of data to compress at 'packet' - complen out: 0 if packet was not compressed - - RETURN - 1 error. 'len' is not changed' - 0 ok. In this case 'len' contains the size of the compressed packet -*/ - -my_bool my_compress(uchar *packet, size_t *len, size_t *complen) -{ - DBUG_ENTER("my_compress"); - if (*len < MIN_COMPRESS_LENGTH) - { - *complen=0; - DBUG_PRINT("note",("Packet too short: Not compressed")); - } - else - { - uchar *compbuf=my_compress_alloc(packet,len,complen); - if (!compbuf) - DBUG_RETURN(*complen ? 0 : 1); - memcpy(packet,compbuf,*len); - my_free(compbuf); - } - DBUG_RETURN(0); -} - - -uchar *my_compress_alloc(const uchar *packet, size_t *len, size_t *complen) -{ - uchar *compbuf; - uLongf tmp_complen; - int res; - *complen= *len * 120 / 100 + 12; - - if (!(compbuf= (uchar *) my_malloc(*complen, MYF(MY_WME)))) - return 0; /* Not enough memory */ - - tmp_complen= (uint) *complen; - res= compress((Bytef*) compbuf, &tmp_complen, (Bytef*) packet, (uLong) *len); - *complen= tmp_complen; - - if (res != Z_OK) - { - my_free(compbuf); - return 0; - } - - if (*complen >= *len) - { - *complen= 0; - my_free(compbuf); - DBUG_PRINT("note",("Packet got longer on compression; Not compressed")); - return 0; - } - /* Store length of compressed packet in *len */ - swap_variables(size_t, *len, *complen); - return compbuf; -} - - -/* - Uncompress packet - - SYNOPSIS - my_uncompress() - packet Compressed data. This is is replaced with the orignal data. - len Length of compressed data - complen Length of the packet buffer (must be enough for the original - data) - - RETURN - 1 error - 0 ok. In this case 'complen' contains the updated size of the - real data. -*/ - -my_bool my_uncompress(uchar *packet, size_t len, size_t *complen) -{ - uLongf tmp_complen; - DBUG_ENTER("my_uncompress"); - - if (*complen) /* If compressed */ - { - uchar *compbuf= (uchar *) my_malloc(*complen,MYF(MY_WME)); - int error; - if (!compbuf) - DBUG_RETURN(1); /* Not enough memory */ - - tmp_complen= (uint) *complen; - error= uncompress((Bytef*) compbuf, &tmp_complen, (Bytef*) packet, - (uLong) len); - *complen= tmp_complen; - if (error != Z_OK) - { /* Probably wrong packet */ - DBUG_PRINT("error",("Can't uncompress packet, error: %d",error)); - my_free(compbuf); - DBUG_RETURN(1); - } - memcpy(packet, compbuf, *complen); - my_free(compbuf); - } - else - *complen= len; - DBUG_RETURN(0); -} - -/* - Internal representation of the frm blob is: - - ver 4 bytes - orglen 4 bytes - complen 4 bytes -*/ - -#define BLOB_HEADER 12 - - -/* - packfrm is a method used to compress the frm file for storage in a - handler. This method was developed for the NDB handler and has been moved - here to serve also other uses. - - SYNOPSIS - packfrm() - data Data reference to frm file data. - len Length of frm file data - out:pack_data Reference to the pointer to the packed frm data - out:pack_len Length of packed frm file data - - NOTES - data is replaced with compressed content - - RETURN VALUES - 0 Success - >0 Failure -*/ - -int packfrm(uchar *data, size_t len, - uchar **pack_data, size_t *pack_len) -{ - int error; - size_t org_len, comp_len, blob_len; - uchar *blob; - DBUG_ENTER("packfrm"); - DBUG_PRINT("enter", ("data: 0x%lx len: %lu", (long) data, (ulong) len)); - - error= 1; - org_len= len; - if (my_compress((uchar*)data, &org_len, &comp_len)) - goto err; - - DBUG_PRINT("info", ("org_len: %lu comp_len: %lu", (ulong) org_len, - (ulong) comp_len)); - DBUG_DUMP("compressed", data, org_len); - - error= 2; - blob_len= BLOB_HEADER + org_len; - if (!(blob= (uchar*) my_malloc(blob_len,MYF(MY_WME)))) - goto err; - - /* Store compressed blob in machine independent format */ - int4store(blob, 1); - int4store(blob+4, (uint32) len); - int4store(blob+8, (uint32) org_len); /* compressed length */ - - /* Copy frm data into blob, already in machine independent format */ - memcpy(blob+BLOB_HEADER, data, org_len); - - *pack_data= blob; - *pack_len= blob_len; - error= 0; - - DBUG_PRINT("exit", ("pack_data: 0x%lx pack_len: %lu", - (long) *pack_data, (ulong) *pack_len)); -err: - DBUG_RETURN(error); - -} - -/* - unpackfrm is a method used to decompress the frm file received from a - handler. This method was developed for the NDB handler and has been moved - here to serve also other uses for other clustered storage engines. - - SYNOPSIS - unpackfrm() - pack_data Data reference to packed frm file data - out:unpack_data Reference to the pointer to the unpacked frm data - out:unpack_len Length of unpacked frm file data - - RETURN VALUES¨ - 0 Success - >0 Failure -*/ - -int unpackfrm(uchar **unpack_data, size_t *unpack_len, - const uchar *pack_data) -{ - uchar *data; - size_t complen, orglen; - ulong ver; - DBUG_ENTER("unpackfrm"); - DBUG_PRINT("enter", ("pack_data: 0x%lx", (long) pack_data)); - - ver= uint4korr(pack_data); - orglen= uint4korr(pack_data+4); - complen= uint4korr(pack_data+8); - - DBUG_PRINT("blob",("ver: %lu complen: %lu orglen: %lu", - ver, (ulong) complen, (ulong) orglen)); - DBUG_DUMP("blob->data", pack_data + BLOB_HEADER, complen); - - if (ver != 1) - DBUG_RETURN(1); - if (!(data= my_malloc(max(orglen, complen), MYF(MY_WME)))) - DBUG_RETURN(2); - memcpy(data, pack_data + BLOB_HEADER, complen); - - if (my_uncompress(data, complen, &orglen)) - { - my_free(data); - DBUG_RETURN(3); - } - - *unpack_data= data; - *unpack_len= orglen; - - DBUG_PRINT("exit", ("frmdata: 0x%lx len: %lu", (long) *unpack_data, - (ulong) *unpack_len)); - DBUG_RETURN(0); -} -#endif /* HAVE_COMPRESS */ diff --git a/deps/mysqllite/mysys/my_conio.c b/deps/mysqllite/mysys/my_conio.c deleted file mode 100644 index 5dbd31193a9d44..00000000000000 --- a/deps/mysqllite/mysys/my_conio.c +++ /dev/null @@ -1,222 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "mysys_priv.h" - -#ifdef __WIN__ - -static HANDLE my_coninpfh= 0; /* console input */ - -/* - functions my_pthread_auto_mutex_lock & my_pthread_auto_mutex_free - are experimental at this moment, they are intended to bring - ability of protecting code sections without necessity to explicitly - initialize synchronization object in one of threads - - if found useful they are to be exported in mysys -*/ - - -/* - int my_pthread_auto_mutex_lock(HANDLE* ph, const char* name, - int id, int time) - NOTES - creates a mutex with given name and tries to lock it time msec. - mutex name is appended with id to allow system wide or process wide - locks. Handle to created mutex returned in ph argument. - - RETURN - 0 thread owns mutex - <>0 error -*/ - -static -int my_pthread_auto_mutex_lock(HANDLE* ph, const char* name, int id, int time) -{ - int res; - char tname[FN_REFLEN]; - - sprintf(tname, "%s-%08X", name, id); - - *ph= CreateMutex(NULL, FALSE, tname); - if (*ph == NULL) - return GetLastError(); - - res= WaitForSingleObject(*ph, time); - - if (res == WAIT_TIMEOUT) - return ERROR_SEM_TIMEOUT; - - if (res == WAIT_FAILED) - return GetLastError(); - - return 0; -} - -/* - int my_pthread_auto_mutex_free(HANDLE* ph) - - NOTES - releases a mutex. - - RETURN - 0 thread released mutex - <>0 error - -*/ -static -int my_pthread_auto_mutex_free(HANDLE* ph) -{ - if (*ph) - { - ReleaseMutex(*ph); - CloseHandle(*ph); - *ph= NULL; - } - - return 0; -} - - -#define pthread_auto_mutex_decl(name) \ - HANDLE __h##name= NULL; - -#define pthread_auto_mutex_lock(name, proc, time) \ - my_pthread_auto_mutex_lock(&__h##name, #name, (proc), (time)) - -#define pthread_auto_mutex_free(name) \ - my_pthread_auto_mutex_free(&__h##name) - - -/* - char* my_cgets() - - NOTES - Replaces _cgets from libc to support input of more than 255 chars. - Reads from the console via ReadConsole into buffer which - should be at least clen characters. - Actual length of string returned in plen. - - WARNING - my_cgets() does NOT check the pushback character buffer (i.e., _chbuf). - Thus, my_cgets() will not return any character that is pushed back by - the _ungetch() call. - - RETURN - string pointer ok - NULL Error - -*/ - -char* my_cgets(char *buffer, size_t clen, size_t* plen) -{ - ULONG state; - char *result; - DWORD plen_res; - CONSOLE_SCREEN_BUFFER_INFO csbi; - - pthread_auto_mutex_decl(my_conio_cs); - - /* lock the console for the current process*/ - if (pthread_auto_mutex_lock(my_conio_cs, GetCurrentProcessId(), INFINITE)) - { - /* can not lock console */ - pthread_auto_mutex_free(my_conio_cs); - return NULL; - } - - /* init console input */ - if (my_coninpfh == 0) - { - /* same handle will be used until process termination */ - my_coninpfh= CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, OPEN_EXISTING, 0, NULL); - } - - if (my_coninpfh == INVALID_HANDLE_VALUE) - { - /* unlock the console */ - pthread_auto_mutex_free(my_conio_cs); - return(NULL); - } - - GetConsoleMode((HANDLE)my_coninpfh, &state); - SetConsoleMode((HANDLE)my_coninpfh, ENABLE_LINE_INPUT | - ENABLE_PROCESSED_INPUT | ENABLE_ECHO_INPUT); - - GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); - - /* - there is no known way to determine allowed buffer size for input - though it is known it should not be more than 64K - so we cut 64K and try first size of screen buffer - if it is still to large we cut half of it and try again - later we may want to cycle from min(clen, 65535) to allowed size - with small decrement to determine exact allowed buffer - */ - clen= min(clen, 65535); - do - { - clen= min(clen, (size_t) csbi.dwSize.X*csbi.dwSize.Y); - if (!ReadConsole((HANDLE)my_coninpfh, (LPVOID)buffer, (DWORD) clen - 1, &plen_res, - NULL)) - { - result= NULL; - clen>>= 1; - } - else - { - result= buffer; - break; - } - } - while (GetLastError() == ERROR_NOT_ENOUGH_MEMORY); - *plen= plen_res; - - /* We go here on error reading the string (Ctrl-C for example) */ - if (!*plen) - result= NULL; /* purecov: inspected */ - - if (result != NULL) - { - if (*plen > 1 && buffer[*plen - 2] == '\r') - { - *plen= *plen - 2; - } - else - { - if (*plen > 0 && buffer[*plen - 1] == '\r') - { - char tmp[3]; - int tmplen= sizeof(tmp); - - *plen= *plen - 1; - /* read /n left in the buffer */ - ReadConsole((HANDLE)my_coninpfh, (LPVOID)tmp, tmplen, &tmplen, NULL); - } - } - buffer[*plen]= '\0'; - } - - SetConsoleMode((HANDLE)my_coninpfh, state); - /* unlock the console */ - pthread_auto_mutex_free(my_conio_cs); - - return result; -} - -#endif /* __WIN__ */ diff --git a/deps/mysqllite/mysys/my_copy.c b/deps/mysqllite/mysys/my_copy.c deleted file mode 100644 index 35324dd4cef17d..00000000000000 --- a/deps/mysqllite/mysys/my_copy.c +++ /dev/null @@ -1,144 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include /* for stat */ -#include -#include "mysys_err.h" -#if defined(HAVE_UTIME_H) -#include -#elif defined(HAVE_SYS_UTIME_H) -#include -#elif !defined(HPUX10) -#include -struct utimbuf { - time_t actime; - time_t modtime; -}; -#endif - - -/* - int my_copy(const char *from, const char *to, myf MyFlags) - - NOTES - Ordinary ownership and accesstimes are copied from 'from-file' - If MyFlags & MY_HOLD_ORIGINAL_MODES is set and to-file exists then - the modes of to-file isn't changed - If MyFlags & MY_DONT_OVERWRITE_FILE is set, we will give an error - if the file existed. - - WARNING - Don't set MY_FNABP or MY_NABP bits on when calling this function ! - - RETURN - 0 ok - # Error - -*/ - -int my_copy(const char *from, const char *to, myf MyFlags) -{ - size_t Count; - my_bool new_file_stat= 0; /* 1 if we could stat "to" */ - int create_flag; - File from_file,to_file; - uchar buff[IO_SIZE]; - MY_STAT stat_buff,new_stat_buff; - DBUG_ENTER("my_copy"); - DBUG_PRINT("my",("from %s to %s MyFlags %d", from, to, MyFlags)); - - from_file=to_file= -1; - DBUG_ASSERT(!(MyFlags & (MY_FNABP | MY_NABP))); /* for my_read/my_write */ - if (MyFlags & MY_HOLD_ORIGINAL_MODES) /* Copy stat if possible */ - new_file_stat= test(my_stat((char*) to, &new_stat_buff, MYF(0))); - - if ((from_file=my_open(from,O_RDONLY | O_SHARE,MyFlags)) >= 0) - { - if (!my_stat(from, &stat_buff, MyFlags)) - { - my_errno=errno; - goto err; - } - if (MyFlags & MY_HOLD_ORIGINAL_MODES && new_file_stat) - stat_buff=new_stat_buff; - create_flag= (MyFlags & MY_DONT_OVERWRITE_FILE) ? O_EXCL : O_TRUNC; - - if ((to_file= my_create(to,(int) stat_buff.st_mode, - O_WRONLY | create_flag | O_BINARY | O_SHARE, - MyFlags)) < 0) - goto err; - - while ((Count=my_read(from_file, buff, sizeof(buff), MyFlags)) != 0) - { - if (Count == (uint) -1 || - my_write(to_file,buff,Count,MYF(MyFlags | MY_NABP))) - goto err; - } - - /* sync the destination file */ - if (MyFlags & MY_SYNC) - { - if (my_sync(to_file, MyFlags)) - goto err; - } - - if (my_close(from_file,MyFlags) | my_close(to_file,MyFlags)) - DBUG_RETURN(-1); /* Error on close */ - - /* Copy modes if possible */ - - if (MyFlags & MY_HOLD_ORIGINAL_MODES && !new_file_stat) - DBUG_RETURN(0); /* File copyed but not stat */ - /* Copy modes */ - if (chmod(to, stat_buff.st_mode & 07777)) - { - my_errno= errno; - if (MyFlags & (MY_FAE+MY_WME)) - my_error(EE_CHANGE_PERMISSIONS, MYF(ME_BELL+ME_WAITTANG), from, errno); - goto err; - } -#if !defined(__WIN__) - /* Copy ownership */ - if (chown(to, stat_buff.st_uid, stat_buff.st_gid)) - { - my_errno= errno; - if (MyFlags & (MY_FAE+MY_WME)) - my_error(EE_CHANGE_OWNERSHIP, MYF(ME_BELL+ME_WAITTANG), from, errno); - goto err; - } -#endif - - if (MyFlags & MY_COPYTIME) - { - struct utimbuf timep; - timep.actime = stat_buff.st_atime; - timep.modtime = stat_buff.st_mtime; - (void) utime((char*) to, &timep); /* last accessed and modified times */ - } - - DBUG_RETURN(0); - } - -err: - if (from_file >= 0) (void) my_close(from_file,MyFlags); - if (to_file >= 0) - { - (void) my_close(to_file, MyFlags); - /* attempt to delete the to-file we've partially written */ - (void) my_delete(to, MyFlags); - } - DBUG_RETURN(-1); -} /* my_copy */ diff --git a/deps/mysqllite/mysys/my_create.c b/deps/mysqllite/mysys/my_create.c deleted file mode 100644 index 49529f9b7b5783..00000000000000 --- a/deps/mysqllite/mysys/my_create.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include -#include "mysys_err.h" -#include -#include -#if defined(_WIN32) -#include -#endif - - /* - ** Create a new file - ** Arguments: - ** Path-name of file - ** Read | write on file (umask value) - ** Read & Write on open file - ** Special flags - */ - - -File my_create(const char *FileName, int CreateFlags, int access_flags, - myf MyFlags) -{ - int fd, rc; - DBUG_ENTER("my_create"); - DBUG_PRINT("my",("Name: '%s' CreateFlags: %d AccessFlags: %d MyFlags: %d", - FileName, CreateFlags, access_flags, MyFlags)); -#if defined(_WIN32) - fd= my_win_open(FileName, access_flags | O_CREAT); -#else - fd= open((char *) FileName, access_flags | O_CREAT, - CreateFlags ? CreateFlags : my_umask); -#endif - - if ((MyFlags & MY_SYNC_DIR) && (fd >=0) && - my_sync_dir_by_file(FileName, MyFlags)) - { - my_close(fd, MyFlags); - fd= -1; - } - - rc= my_register_filename(fd, FileName, FILE_BY_CREATE, - EE_CANTCREATEFILE, MyFlags); - /* - my_register_filename() may fail on some platforms even if the call to - *open() above succeeds. In this case, don't leave the stale file because - callers assume the file to not exist if my_create() fails, so they don't - do any cleanups. - */ - if (unlikely(fd >= 0 && rc < 0)) - { - int tmp= my_errno; - my_close(fd, MyFlags); - my_delete(FileName, MyFlags); - my_errno= tmp; - } - - DBUG_RETURN(rc); -} /* my_create */ diff --git a/deps/mysqllite/mysys/my_delete.c b/deps/mysqllite/mysys/my_delete.c deleted file mode 100644 index 4a23fedb5abac5..00000000000000 --- a/deps/mysqllite/mysys/my_delete.c +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include - -int my_delete(const char *name, myf MyFlags) -{ - int err; - DBUG_ENTER("my_delete"); - DBUG_PRINT("my",("name %s MyFlags %d", name, MyFlags)); - - if ((err = unlink(name)) == -1) - { - my_errno=errno; - if (MyFlags & (MY_FAE+MY_WME)) - my_error(EE_DELETE,MYF(ME_BELL+ME_WAITTANG+(MyFlags & ME_NOINPUT)), - name,errno); - } - else if ((MyFlags & MY_SYNC_DIR) && - my_sync_dir_by_file(name, MyFlags)) - err= -1; - DBUG_RETURN(err); -} /* my_delete */ - -#if defined(__WIN__) -/** - Delete file which is possibly not closed. - - This function is intended to be used exclusively as a temporal solution - for Win NT in case when it is needed to delete a not closed file (note - that the file must be opened everywhere with FILE_SHARE_DELETE mode). - Deleting not-closed files can not be supported on Win 98|ME (and because - of that is considered harmful). - - The function deletes the file with its preliminary renaming. This is - because when not-closed share-delete file is deleted it still lives on - a disk until it will not be closed everwhere. This may conflict with an - attempt to create a new file with the same name. The deleted file is - renamed to ..deleted where - the initial name of the - file, - a hexadecimal number chosen to make the temporal name to - be unique. - - @param the name of the being deleted file - @param the flags instructing how to react on an error internally in - the function - - @note The per-thread @c my_errno holds additional info for a caller to - decide how critical the error can be. - - @retval - 0 ok - @retval - 1 error - - -*/ -int nt_share_delete(const char *name, myf MyFlags) -{ - char buf[MAX_PATH + 20]; - ulong cnt; - DBUG_ENTER("nt_share_delete"); - DBUG_PRINT("my",("name %s MyFlags %d", name, MyFlags)); - - for (cnt= GetTickCount(); cnt; cnt--) - { - errno= 0; - sprintf(buf, "%s.%08X.deleted", name, cnt); - if (MoveFile(name, buf)) - break; - - if ((errno= GetLastError()) == ERROR_ALREADY_EXISTS) - continue; - - /* This happened during tests with MERGE tables. */ - if (errno == ERROR_ACCESS_DENIED) - continue; - - DBUG_PRINT("warning", ("Failed to rename %s to %s, errno: %d", - name, buf, errno)); - break; - } - - if (errno == ERROR_FILE_NOT_FOUND) - { - my_errno= ENOENT; // marking, that `name' doesn't exist - } - else if (errno == 0) - { - if (DeleteFile(buf)) - DBUG_RETURN(0); - /* - The below is more complicated than necessary. For some reason, the - assignment to my_errno clears the error number, which is retrieved - by GetLastError() (VC2005EE). Assigning to errno first, allows to - retrieve the correct value. - */ - errno= GetLastError(); - if (errno == 0) - my_errno= ENOENT; // marking, that `buf' doesn't exist - else - my_errno= errno; - } - else - my_errno= errno; - - if (MyFlags & (MY_FAE+MY_WME)) - my_error(EE_DELETE, MYF(ME_BELL + ME_WAITTANG + (MyFlags & ME_NOINPUT)), - name, my_errno); - DBUG_RETURN(-1); -} -#endif diff --git a/deps/mysqllite/mysys/my_div.c b/deps/mysqllite/mysys/my_div.c deleted file mode 100644 index d29d3668852cf5..00000000000000 --- a/deps/mysqllite/mysys/my_div.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" - -/* - Get filename of file - - SYNOPSIS - my_filename() - fd File descriptor -*/ - -char * my_filename(File fd) -{ - DBUG_ENTER("my_filename"); - if ((uint) fd >= (uint) my_file_limit) - DBUG_RETURN((char*) "UNKNOWN"); - if (fd >= 0 && my_file_info[fd].type != UNOPEN) - { - DBUG_RETURN(my_file_info[fd].name); - } - else - DBUG_RETURN((char*) "UNOPENED"); /* Debug message */ -} diff --git a/deps/mysqllite/mysys/my_error.c b/deps/mysqllite/mysys/my_error.c deleted file mode 100644 index fa62cc604b68f7..00000000000000 --- a/deps/mysqllite/mysys/my_error.c +++ /dev/null @@ -1,290 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include -#include -#include - -/* Max length of a error message. Should be kept in sync with MYSQL_ERRMSG_SIZE. */ -#define ERRMSGSIZE (512) - -/* Define some external variables for error handling */ - -/* - WARNING! - my_error family functions have to be used according following rules: - - if message have not parameters use my_message(ER_CODE, ER(ER_CODE), MYF(N)) - - if message registered use my_error(ER_CODE, MYF(N), ...). - - With some special text of errror message use: - my_printf_error(ER_CODE, format, MYF(N), ...) -*/ - -/* - Message texts are registered into a linked list of 'my_err_head' structs. - Each struct contains (1.) an array of pointers to C character strings with - '\0' termination, (2.) the error number for the first message in the array - (array index 0) and (3.) the error number for the last message in the array - (array index (last - first)). - The array may contain gaps with NULL pointers and pointers to empty strings. - Both kinds of gaps will be translated to "Unknown error %d.", if my_error() - is called with a respective error number. - The list of header structs is sorted in increasing order of error numbers. - Negative error numbers are allowed. Overlap of error numbers is not allowed. - Not registered error numbers will be translated to "Unknown error %d.". -*/ -static struct my_err_head -{ - struct my_err_head *meh_next; /* chain link */ - const char** (*get_errmsgs) (); /* returns error message format */ - int meh_first; /* error number matching array slot 0 */ - int meh_last; /* error number matching last slot */ -} my_errmsgs_globerrs = {NULL, get_global_errmsgs, EE_ERROR_FIRST, EE_ERROR_LAST}; - -static struct my_err_head *my_errmsgs_list= &my_errmsgs_globerrs; - - -/* - Error message to user - - SYNOPSIS - my_error() - nr Errno - MyFlags Flags - ... variable list - -*/ - -void my_error(int nr, myf MyFlags, ...) -{ - const char *format; - struct my_err_head *meh_p; - va_list args; - char ebuff[ERRMSGSIZE]; - DBUG_ENTER("my_error"); - DBUG_PRINT("my", ("nr: %d MyFlags: %d errno: %d", nr, MyFlags, errno)); - - /* Search for the error messages array, which could contain the message. */ - for (meh_p= my_errmsgs_list; meh_p; meh_p= meh_p->meh_next) - if (nr <= meh_p->meh_last) - break; - - /* get the error message string. Default, if NULL or empty string (""). */ - if (! (format= (meh_p && (nr >= meh_p->meh_first)) ? - meh_p->get_errmsgs()[nr - meh_p->meh_first] : NULL) || ! *format) - (void) my_snprintf (ebuff, sizeof(ebuff), "Unknown error %d", nr); - else - { - va_start(args,MyFlags); - (void) my_vsnprintf_ex(&my_charset_utf8_general_ci, ebuff, - sizeof(ebuff), format, args); - va_end(args); - } - (*error_handler_hook)(nr, ebuff, MyFlags); - DBUG_VOID_RETURN; -} - - -/* - Error as printf - - SYNOPSIS - my_printf_error() - error Errno - format Format string - MyFlags Flags - ... variable list -*/ - -void my_printf_error(uint error, const char *format, myf MyFlags, ...) -{ - va_list args; - char ebuff[ERRMSGSIZE]; - DBUG_ENTER("my_printf_error"); - DBUG_PRINT("my", ("nr: %d MyFlags: %d errno: %d Format: %s", - error, MyFlags, errno, format)); - - va_start(args,MyFlags); - (void) my_vsnprintf_ex(&my_charset_utf8_general_ci, ebuff, - sizeof(ebuff), format, args); - va_end(args); - (*error_handler_hook)(error, ebuff, MyFlags); - DBUG_VOID_RETURN; -} - -/* - Error with va_list - - SYNOPSIS - my_printv_error() - error Errno - format Format string - MyFlags Flags - ... variable list -*/ - -void my_printv_error(uint error, const char *format, myf MyFlags, va_list ap) -{ - char ebuff[ERRMSGSIZE]; - DBUG_ENTER("my_printv_error"); - DBUG_PRINT("my", ("nr: %d MyFlags: %d errno: %d format: %s", - error, MyFlags, errno, format)); - - (void) my_vsnprintf(ebuff, sizeof(ebuff), format, ap); - (*error_handler_hook)(error, ebuff, MyFlags); - DBUG_VOID_RETURN; -} - -/* - Give message using error_handler_hook - - SYNOPSIS - my_message() - error Errno - str Error message - MyFlags Flags -*/ - -void my_message(uint error, const char *str, register myf MyFlags) -{ - (*error_handler_hook)(error, str, MyFlags); -} - - -/* - Register error messages for use with my_error(). - - SYNOPSIS - my_error_register() - errmsgs array of pointers to error messages - first error number of first message in the array - last error number of last message in the array - - DESCRIPTION - The pointer array is expected to contain addresses to NUL-terminated - C character strings. The array contains (last - first + 1) pointers. - NULL pointers and empty strings ("") are allowed. These will be mapped to - "Unknown error" when my_error() is called with a matching error number. - This function registers the error numbers 'first' to 'last'. - No overlapping with previously registered error numbers is allowed. - - RETURN - 0 OK - != 0 Error -*/ - -int my_error_register(const char** (*get_errmsgs) (), int first, int last) -{ - struct my_err_head *meh_p; - struct my_err_head **search_meh_pp; - - /* Allocate a new header structure. */ - if (! (meh_p= (struct my_err_head*) my_malloc(sizeof(struct my_err_head), - MYF(MY_WME)))) - return 1; - meh_p->get_errmsgs= get_errmsgs; - meh_p->meh_first= first; - meh_p->meh_last= last; - - /* Search for the right position in the list. */ - for (search_meh_pp= &my_errmsgs_list; - *search_meh_pp; - search_meh_pp= &(*search_meh_pp)->meh_next) - { - if ((*search_meh_pp)->meh_last > first) - break; - } - - /* Error numbers must be unique. No overlapping is allowed. */ - if (*search_meh_pp && ((*search_meh_pp)->meh_first <= last)) - { - my_free(meh_p); - return 1; - } - - /* Insert header into the chain. */ - meh_p->meh_next= *search_meh_pp; - *search_meh_pp= meh_p; - return 0; -} - - -/* - Unregister formerly registered error messages. - - SYNOPSIS - my_error_unregister() - first error number of first message - last error number of last message - - DESCRIPTION - This function unregisters the error numbers 'first' to 'last'. - These must have been previously registered by my_error_register(). - 'first' and 'last' must exactly match the registration. - If a matching registration is present, the header is removed from the - list and the pointer to the error messages pointers array is returned. - Otherwise, NULL is returned. - - RETURN - non-NULL OK, returns address of error messages pointers array. - NULL Error, no such number range registered. -*/ - -const char **my_error_unregister(int first, int last) -{ - struct my_err_head *meh_p; - struct my_err_head **search_meh_pp; - const char **errmsgs; - - /* Search for the registration in the list. */ - for (search_meh_pp= &my_errmsgs_list; - *search_meh_pp; - search_meh_pp= &(*search_meh_pp)->meh_next) - { - if (((*search_meh_pp)->meh_first == first) && - ((*search_meh_pp)->meh_last == last)) - break; - } - if (! *search_meh_pp) - return NULL; - - /* Remove header from the chain. */ - meh_p= *search_meh_pp; - *search_meh_pp= meh_p->meh_next; - - /* Save the return value and free the header. */ - errmsgs= meh_p->get_errmsgs(); - my_free(meh_p); - - return errmsgs; -} - - -void my_error_unregister_all(void) -{ - struct my_err_head *cursor, *saved_next; - - for (cursor= my_errmsgs_globerrs.meh_next; cursor != NULL; cursor= saved_next) - { - /* We need this ptr, but we're about to free its container, so save it. */ - saved_next= cursor->meh_next; - - my_free(cursor); - } - my_errmsgs_globerrs.meh_next= NULL; /* Freed in first iteration above. */ - - my_errmsgs_list= &my_errmsgs_globerrs; -} diff --git a/deps/mysqllite/mysys/my_file.c b/deps/mysqllite/mysys/my_file.c deleted file mode 100644 index e4b7cd7779f519..00000000000000 --- a/deps/mysqllite/mysys/my_file.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "my_static.h" -#include - -/* - set how many open files we want to be able to handle - - SYNOPSIS - set_maximum_open_files() - max_file_limit Files to open - - NOTES - The request may not fulfilled becasue of system limitations - - RETURN - Files available to open. - May be more or less than max_file_limit! -*/ - -#if defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE) - -#ifndef RLIM_INFINITY -#define RLIM_INFINITY ((uint) 0xffffffff) -#endif - -static uint set_max_open_files(uint max_file_limit) -{ - struct rlimit rlimit; - uint old_cur; - DBUG_ENTER("set_max_open_files"); - DBUG_PRINT("enter",("files: %u", max_file_limit)); - - if (!getrlimit(RLIMIT_NOFILE,&rlimit)) - { - old_cur= (uint) rlimit.rlim_cur; - DBUG_PRINT("info", ("rlim_cur: %u rlim_max: %u", - (uint) rlimit.rlim_cur, - (uint) rlimit.rlim_max)); - if (rlimit.rlim_cur == RLIM_INFINITY) - rlimit.rlim_cur = max_file_limit; - if (rlimit.rlim_cur >= max_file_limit) - DBUG_RETURN(rlimit.rlim_cur); /* purecov: inspected */ - rlimit.rlim_cur= rlimit.rlim_max= max_file_limit; - if (setrlimit(RLIMIT_NOFILE, &rlimit)) - max_file_limit= old_cur; /* Use original value */ - else - { - rlimit.rlim_cur= 0; /* Safety if next call fails */ - (void) getrlimit(RLIMIT_NOFILE,&rlimit); - DBUG_PRINT("info", ("rlim_cur: %u", (uint) rlimit.rlim_cur)); - if (rlimit.rlim_cur) /* If call didn't fail */ - max_file_limit= (uint) rlimit.rlim_cur; - } - } - DBUG_PRINT("exit",("max_file_limit: %u", max_file_limit)); - DBUG_RETURN(max_file_limit); -} - -#else -static uint set_max_open_files(uint max_file_limit) -{ - /* We don't know the limit. Return best guess */ - return min(max_file_limit, OS_FILE_LIMIT); -} -#endif - - -/* - Change number of open files - - SYNOPSIS: - my_set_max_open_files() - files Number of requested files - - RETURN - number of files available for open -*/ - -uint my_set_max_open_files(uint files) -{ - struct st_my_file_info *tmp; - DBUG_ENTER("my_set_max_open_files"); - DBUG_PRINT("enter",("files: %u my_file_limit: %u", files, my_file_limit)); - - files+= MY_FILE_MIN; - files= set_max_open_files(min(files, OS_FILE_LIMIT)); - if (files <= MY_NFILE) - DBUG_RETURN(files); - - if (!(tmp= (struct st_my_file_info*) my_malloc(sizeof(*tmp) * files, - MYF(MY_WME)))) - DBUG_RETURN(MY_NFILE); - - /* Copy any initialized files */ - memcpy((char*) tmp, (char*) my_file_info, - sizeof(*tmp) * min(my_file_limit, files)); - bzero((char*) (tmp + my_file_limit), - max((int) (files- my_file_limit), 0)*sizeof(*tmp)); - my_free_open_file_info(); /* Free if already allocated */ - my_file_info= tmp; - my_file_limit= files; - DBUG_PRINT("exit",("files: %u", files)); - DBUG_RETURN(files); -} - - -void my_free_open_file_info() -{ - DBUG_ENTER("my_free_file_info"); - if (my_file_info != my_file_info_default) - { - /* Copy data back for my_print_open_files */ - memcpy((char*) my_file_info_default, my_file_info, - sizeof(*my_file_info_default)* MY_NFILE); - my_free(my_file_info); - my_file_info= my_file_info_default; - my_file_limit= MY_NFILE; - } - DBUG_VOID_RETURN; -} diff --git a/deps/mysqllite/mysys/my_fopen.c b/deps/mysqllite/mysys/my_fopen.c deleted file mode 100644 index e184c8308fcf33..00000000000000 --- a/deps/mysqllite/mysys/my_fopen.c +++ /dev/null @@ -1,358 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "my_static.h" -#include -#include "mysys_err.h" - -#if defined(__FreeBSD__) -extern int getosreldate(void); -#endif - -static void make_ftype(char * to,int flag); - -/* - Open a file as stream - - SYNOPSIS - my_fopen() - FileName Path-name of file - Flags Read | write | append | trunc (like for open()) - MyFlags Flags for handling errors - - RETURN - 0 Error - # File handler -*/ - -FILE *my_fopen(const char *filename, int flags, myf MyFlags) -{ - FILE *fd; - char type[5]; - DBUG_ENTER("my_fopen"); - DBUG_PRINT("my",("Name: '%s' flags: %d MyFlags: %d", - filename, flags, MyFlags)); - - make_ftype(type,flags); - -#ifdef _WIN32 - fd= my_win_fopen(filename, type); -#else - fd= fopen(filename, type); -#endif - if (fd != 0) - { - /* - The test works if MY_NFILE < 128. The problem is that fileno() is char - on some OS (SUNOS). Actually the filename save isn't that important - so we can ignore if this doesn't work. - */ - - int filedesc= my_fileno(fd); - if ((uint)filedesc >= my_file_limit) - { - thread_safe_increment(my_stream_opened,&THR_LOCK_open); - DBUG_RETURN(fd); /* safeguard */ - } - mysql_mutex_lock(&THR_LOCK_open); - if ((my_file_info[filedesc].name= (char*) - my_strdup(filename,MyFlags))) - { - my_stream_opened++; - my_file_total_opened++; - my_file_info[filedesc].type= STREAM_BY_FOPEN; - mysql_mutex_unlock(&THR_LOCK_open); - DBUG_PRINT("exit",("stream: 0x%lx", (long) fd)); - DBUG_RETURN(fd); - } - mysql_mutex_unlock(&THR_LOCK_open); - (void) my_fclose(fd,MyFlags); - my_errno=ENOMEM; - } - else - my_errno=errno; - DBUG_PRINT("error",("Got error %d on open",my_errno)); - if (MyFlags & (MY_FFNF | MY_FAE | MY_WME)) - my_error((flags & O_RDONLY) || (flags == O_RDONLY ) ? EE_FILENOTFOUND : - EE_CANTCREATEFILE, - MYF(ME_BELL+ME_WAITTANG), filename, my_errno); - DBUG_RETURN((FILE*) 0); -} /* my_fopen */ - - -#if defined(_WIN32) - -static FILE *my_win_freopen(const char *path, const char *mode, FILE *stream) -{ - int handle_fd, fd= _fileno(stream); - HANDLE osfh; - - DBUG_ASSERT(path && stream); - - /* Services don't have stdout/stderr on Windows, so _fileno returns -1. */ - if (fd < 0) - { - if (!freopen(path, mode, stream)) - return NULL; - - fd= _fileno(stream); - } - - if ((osfh= CreateFile(path, GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE | - FILE_SHARE_DELETE, NULL, - OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, - NULL)) == INVALID_HANDLE_VALUE) - return NULL; - - if ((handle_fd= _open_osfhandle((intptr_t)osfh, - _O_APPEND | _O_TEXT)) == -1) - { - CloseHandle(osfh); - return NULL; - } - - if (_dup2(handle_fd, fd) < 0) - { - CloseHandle(osfh); - return NULL; - } - - _close(handle_fd); - - return stream; -} - -#elif defined(__FreeBSD__) - -/* No close operation hook. */ - -static int no_close(void *cookie __attribute__((unused))) -{ - return 0; -} - -/* - A hack around a race condition in the implementation of freopen. - - The race condition steams from the fact that the current fd of - the stream is closed before its number is used to duplicate the - new file descriptor. This defeats the desired atomicity of the - close and duplicate of dup2(). - - See PR number 79887 for reference: - http://www.freebsd.org/cgi/query-pr.cgi?pr=79887 -*/ - -static FILE *my_freebsd_freopen(const char *path, const char *mode, FILE *stream) -{ - int old_fd; - FILE *result; - - flockfile(stream); - - old_fd= fileno(stream); - - /* Use a no operation close hook to avoid having the fd closed. */ - stream->_close= no_close; - - /* Relies on the implicit dup2 to close old_fd. */ - result= freopen(path, mode, stream); - - /* If successful, the _close hook was replaced. */ - - if (result == NULL) - close(old_fd); - else - funlockfile(result); - - return result; -} - -#endif - - -/** - Change the file associated with a file stream. - - @param path Path to file. - @param mode Mode of the stream. - @param stream File stream. - - @note - This function is used to redirect stdout and stderr to a file and - subsequently to close and reopen that file for log rotation. - - @retval A FILE pointer on success. Otherwise, NULL. -*/ - -FILE *my_freopen(const char *path, const char *mode, FILE *stream) -{ - FILE *result; - -#if defined(_WIN32) - result= my_win_freopen(path, mode, stream); -#elif defined(__FreeBSD__) - /* - XXX: Once the fix is ported to the stable releases, this should - be dependent upon the specific FreeBSD versions. Check at: - http://www.freebsd.org/cgi/query-pr.cgi?pr=79887 - */ - if (getosreldate() > 900027) - result= freopen(path, mode, stream); - else - result= my_freebsd_freopen(path, mode, stream); -#else - result= freopen(path, mode, stream); -#endif - - return result; -} - - -/* Close a stream */ -int my_fclose(FILE *fd, myf MyFlags) -{ - int err,file; - DBUG_ENTER("my_fclose"); - DBUG_PRINT("my",("stream: 0x%lx MyFlags: %d", (long) fd, MyFlags)); - - mysql_mutex_lock(&THR_LOCK_open); - file= my_fileno(fd); -#ifndef _WIN32 - err= fclose(fd); -#else - err= my_win_fclose(fd); -#endif - if(err < 0) - { - my_errno=errno; - if (MyFlags & (MY_FAE | MY_WME)) - my_error(EE_BADCLOSE, MYF(ME_BELL+ME_WAITTANG), - my_filename(file),errno); - } - else - my_stream_opened--; - if ((uint) file < my_file_limit && my_file_info[file].type != UNOPEN) - { - my_file_info[file].type = UNOPEN; - my_free(my_file_info[file].name); - } - mysql_mutex_unlock(&THR_LOCK_open); - DBUG_RETURN(err); -} /* my_fclose */ - - - /* Make a stream out of a file handle */ - /* Name may be 0 */ - -FILE *my_fdopen(File Filedes, const char *name, int Flags, myf MyFlags) -{ - FILE *fd; - char type[5]; - DBUG_ENTER("my_fdopen"); - DBUG_PRINT("my",("Fd: %d Flags: %d MyFlags: %d", - Filedes, Flags, MyFlags)); - - make_ftype(type,Flags); -#ifdef _WIN32 - fd= my_win_fdopen(Filedes, type); -#else - fd= fdopen(Filedes, type); -#endif - if (!fd) - { - my_errno=errno; - if (MyFlags & (MY_FAE | MY_WME)) - my_error(EE_CANT_OPEN_STREAM, MYF(ME_BELL+ME_WAITTANG),errno); - } - else - { - mysql_mutex_lock(&THR_LOCK_open); - my_stream_opened++; - if ((uint) Filedes < (uint) my_file_limit) - { - if (my_file_info[Filedes].type != UNOPEN) - { - my_file_opened--; /* File is opened with my_open ! */ - } - else - { - my_file_info[Filedes].name= my_strdup(name,MyFlags); - } - my_file_info[Filedes].type = STREAM_BY_FDOPEN; - } - mysql_mutex_unlock(&THR_LOCK_open); - } - - DBUG_PRINT("exit",("stream: 0x%lx", (long) fd)); - DBUG_RETURN(fd); -} /* my_fdopen */ - - -/* - Make a fopen() typestring from a open() type bitmap - - SYNOPSIS - make_ftype() - to String for fopen() is stored here - flag Flag used by open() - - IMPLEMENTATION - This routine attempts to find the best possible match - between a numeric option and a string option that could be - fed to fopen. There is not a 1 to 1 mapping between the two. - - NOTE - On Unix, O_RDONLY is usually 0 - - MAPPING - r == O_RDONLY - w == O_WRONLY|O_TRUNC|O_CREAT - a == O_WRONLY|O_APPEND|O_CREAT - r+ == O_RDWR - w+ == O_RDWR|O_TRUNC|O_CREAT - a+ == O_RDWR|O_APPEND|O_CREAT -*/ - -static void make_ftype(register char * to, register int flag) -{ - /* check some possible invalid combinations */ - DBUG_ASSERT((flag & (O_TRUNC | O_APPEND)) != (O_TRUNC | O_APPEND)); - DBUG_ASSERT((flag & (O_WRONLY | O_RDWR)) != (O_WRONLY | O_RDWR)); - - if ((flag & (O_RDONLY|O_WRONLY)) == O_WRONLY) - *to++= (flag & O_APPEND) ? 'a' : 'w'; - else if (flag & O_RDWR) - { - /* Add '+' after theese */ - if (flag & (O_TRUNC | O_CREAT)) - *to++= 'w'; - else if (flag & O_APPEND) - *to++= 'a'; - else - *to++= 'r'; - *to++= '+'; - } - else - *to++= 'r'; - -#if FILE_BINARY /* If we have binary-files */ - if (flag & FILE_BINARY) - *to++='b'; -#endif - *to='\0'; -} /* make_ftype */ diff --git a/deps/mysqllite/mysys/my_fstream.c b/deps/mysqllite/mysys/my_fstream.c deleted file mode 100644 index 83cb0d261c0fd6..00000000000000 --- a/deps/mysqllite/mysys/my_fstream.c +++ /dev/null @@ -1,194 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* USE_MY_STREAM isn't set because we can't thrust my_fclose! */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include -#include - -#ifdef HAVE_FSEEKO -#undef ftell -#undef fseek -#define ftell(A) ftello(A) -#define fseek(A,B,C) fseeko((A),(B),(C)) -#endif - -/* - Read a chunk of bytes from a FILE - - SYNOPSIS - my_fread() - stream File descriptor - Buffer Buffer to read to - Count Number of bytes to read - MyFlags Flags on what to do on error - - RETURN - (size_t) -1 Error - # Number of bytes read - */ - -size_t my_fread(FILE *stream, uchar *Buffer, size_t Count, myf MyFlags) -{ - size_t readbytes; - DBUG_ENTER("my_fread"); - DBUG_PRINT("my",("stream: 0x%lx Buffer: 0x%lx Count: %u MyFlags: %d", - (long) stream, (long) Buffer, (uint) Count, MyFlags)); - - if ((readbytes= fread(Buffer, sizeof(char), Count, stream)) != Count) - { - DBUG_PRINT("error",("Read only %d bytes", (int) readbytes)); - if (MyFlags & (MY_WME | MY_FAE | MY_FNABP)) - { - if (ferror(stream)) - my_error(EE_READ, MYF(ME_BELL+ME_WAITTANG), - my_filename(my_fileno(stream)),errno); - else - if (MyFlags & (MY_NABP | MY_FNABP)) - my_error(EE_EOFERR, MYF(ME_BELL+ME_WAITTANG), - my_filename(my_fileno(stream)),errno); - } - my_errno=errno ? errno : -1; - if (ferror(stream) || MyFlags & (MY_NABP | MY_FNABP)) - DBUG_RETURN((size_t) -1); /* Return with error */ - } - if (MyFlags & (MY_NABP | MY_FNABP)) - DBUG_RETURN(0); /* Read ok */ - DBUG_RETURN(readbytes); -} /* my_fread */ - - -/* - Write a chunk of bytes to a stream - - my_fwrite() - stream File descriptor - Buffer Buffer to write from - Count Number of bytes to write - MyFlags Flags on what to do on error - - RETURN - (size_t) -1 Error - # Number of bytes written -*/ - -size_t my_fwrite(FILE *stream, const uchar *Buffer, size_t Count, myf MyFlags) -{ - size_t writtenbytes =0; - my_off_t seekptr; -#if !defined(NO_BACKGROUND) && defined(USE_MY_STREAM) - uint errors; -#endif - DBUG_ENTER("my_fwrite"); - DBUG_PRINT("my",("stream: 0x%lx Buffer: 0x%lx Count: %u MyFlags: %d", - (long) stream, (long) Buffer, (uint) Count, MyFlags)); - -#if !defined(NO_BACKGROUND) && defined(USE_MY_STREAM) - errors=0; -#endif - seekptr= ftell(stream); - for (;;) - { - size_t written; - if ((written = (size_t) fwrite((char*) Buffer,sizeof(char), - Count, stream)) != Count) - { - DBUG_PRINT("error",("Write only %d bytes", (int) writtenbytes)); - my_errno=errno; - if (written != (size_t) -1) - { - seekptr+=written; - Buffer+=written; - writtenbytes+=written; - Count-=written; - } -#ifdef EINTR - if (errno == EINTR) - { - (void) my_fseek(stream,seekptr,MY_SEEK_SET,MYF(0)); - continue; - } -#endif -#if !defined(NO_BACKGROUND) && defined(USE_MY_STREAM) - if (my_thread_var->abort) - MyFlags&= ~ MY_WAIT_IF_FULL; /* End if aborted by user */ - - if ((errno == ENOSPC || errno == EDQUOT) && - (MyFlags & MY_WAIT_IF_FULL)) - { - wait_for_free_space("[stream]", errors); - errors++; - (void) my_fseek(stream,seekptr,MY_SEEK_SET,MYF(0)); - continue; - } -#endif - if (ferror(stream) || (MyFlags & (MY_NABP | MY_FNABP))) - { - if (MyFlags & (MY_WME | MY_FAE | MY_FNABP)) - { - my_error(EE_WRITE, MYF(ME_BELL+ME_WAITTANG), - my_filename(my_fileno(stream)),errno); - } - writtenbytes= (size_t) -1; /* Return that we got error */ - break; - } - } - if (MyFlags & (MY_NABP | MY_FNABP)) - writtenbytes= 0; /* Everything OK */ - else - writtenbytes+= written; - break; - } - DBUG_RETURN(writtenbytes); -} /* my_fwrite */ - - -/* Seek to position in file */ - -my_off_t my_fseek(FILE *stream, my_off_t pos, int whence, - myf MyFlags __attribute__((unused))) -{ - DBUG_ENTER("my_fseek"); - DBUG_PRINT("my",("stream: 0x%lx pos: %lu whence: %d MyFlags: %d", - (long) stream, (long) pos, whence, MyFlags)); - DBUG_RETURN(fseek(stream, (off_t) pos, whence) ? - MY_FILEPOS_ERROR : (my_off_t) ftell(stream)); -} /* my_seek */ - - -/* Tell current position of file */ - -my_off_t my_ftell(FILE *stream, myf MyFlags __attribute__((unused))) -{ - off_t pos; - DBUG_ENTER("my_ftell"); - DBUG_PRINT("my",("stream: 0x%lx MyFlags: %d", (long) stream, MyFlags)); - pos=ftell(stream); - DBUG_PRINT("exit",("ftell: %lu",(ulong) pos)); - DBUG_RETURN((my_off_t) pos); -} /* my_ftell */ - - -/* Get a File corresponding to the stream*/ -int my_fileno(FILE *f) -{ -#ifdef _WIN32 - return my_win_fileno(f); -#else - return fileno(f); -#endif -} diff --git a/deps/mysqllite/mysys/my_gethostbyname.c b/deps/mysqllite/mysys/my_gethostbyname.c deleted file mode 100644 index 28ecec13ef24eb..00000000000000 --- a/deps/mysqllite/mysys/my_gethostbyname.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 2002, 2004 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; version 2 - of the License. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -/* Thread safe version of gethostbyname_r() */ - -#include "mysys_priv.h" -#if !defined(__WIN__) -#include -#endif -#include - -/* This file is not needed if my_gethostbyname_r is a macro */ -#if !defined(my_gethostbyname_r) - -/* - Emulate SOLARIS style calls, not because it's better, but just to make the - usage of getbostbyname_r simpler. -*/ - -#if defined(HAVE_GETHOSTBYNAME_R) - -#if defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) - -struct hostent *my_gethostbyname_r(const char *name, - struct hostent *result, char *buffer, - int buflen, int *h_errnop) -{ - struct hostent *hp; - DBUG_ASSERT((size_t) buflen >= sizeof(*result)); - if (gethostbyname_r(name,result, buffer, (size_t) buflen, &hp, h_errnop)) - return 0; - return hp; -} - -#elif defined(HAVE_GETHOSTBYNAME_R_RETURN_INT) - -struct hostent *my_gethostbyname_r(const char *name, - struct hostent *result, char *buffer, - int buflen, int *h_errnop) -{ - if (gethostbyname_r(name,result,(struct hostent_data *) buffer) == -1) - { - *h_errnop= errno; - return 0; - } - return result; -} - -#else - -/* gethostbyname_r with similar interface as gethostbyname() */ - -struct hostent *my_gethostbyname_r(const char *name, - struct hostent *result, char *buffer, - int buflen, int *h_errnop) -{ - struct hostent *hp; - DBUG_ASSERT(buflen >= sizeof(struct hostent_data)); - hp= gethostbyname_r(name,result,(struct hostent_data *) buffer); - *h_errnop= errno; - return hp; -} -#endif /* GLIBC2_STYLE_GETHOSTBYNAME_R */ - -#else /* !HAVE_GETHOSTBYNAME_R */ - -extern mysql_mutex_t LOCK_gethostbyname_r; - -/* - No gethostbyname_r() function exists. - In this case we have to keep a mutex over the call to ensure that no - other thread is going to reuse the internal memory. - - The user is responsible to call my_gethostbyname_r_free() when he - is finished with the structure. -*/ - -struct hostent *my_gethostbyname_r(const char *name, - struct hostent *res __attribute__((unused)), - char *buffer __attribute__((unused)), - int buflen __attribute__((unused)), - int *h_errnop) -{ - struct hostent *hp; - mysql_mutex_lock(&LOCK_gethostbyname_r); - hp= gethostbyname(name); - *h_errnop= h_errno; - return hp; -} - -void my_gethostbyname_r_free() -{ - mysql_mutex_unlock(&LOCK_gethostbyname_r); -} - -#endif /* !HAVE_GETHOSTBYNAME_R */ -#endif /* !my_gethostbyname_r */ diff --git a/deps/mysqllite/mysys/my_gethwaddr.c b/deps/mysqllite/mysys/my_gethwaddr.c deleted file mode 100644 index ab44bac43d3702..00000000000000 --- a/deps/mysqllite/mysys/my_gethwaddr.c +++ /dev/null @@ -1,226 +0,0 @@ -/* Copyright (C) 2004 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* get hardware address for an interface */ -/* if there are many available, any non-zero one can be used */ - -#include "mysys_priv.h" -#include - -#ifndef MAIN - -#ifdef __FreeBSD__ - -#include -#include -#include -#include -#include - -my_bool my_gethwaddr(uchar *to) -{ - size_t len; - char *buf, *next, *end; - struct if_msghdr *ifm; - struct sockaddr_dl *sdl; - int res=1, mib[6]={CTL_NET, AF_ROUTE, 0, AF_LINK, NET_RT_IFLIST, 0}; - char zero_array[ETHER_ADDR_LEN] = {0}; - - if (sysctl(mib, 6, NULL, &len, NULL, 0) == -1) - goto err; - if (!(buf = alloca(len))) - goto err; - if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) - goto err; - - end = buf + len; - - for (next = buf ; res && next < end ; next += ifm->ifm_msglen) - { - ifm = (struct if_msghdr *)next; - if (ifm->ifm_type == RTM_IFINFO) - { - sdl= (struct sockaddr_dl *)(ifm + 1); - memcpy(to, LLADDR(sdl), ETHER_ADDR_LEN); - res= memcmp(to, zero_array, ETHER_ADDR_LEN) ? 0 : 1; - } - } - -err: - return res; -} - -#elif __linux__ - -#include -#include -#include - -my_bool my_gethwaddr(uchar *to) -{ - int fd, res= 1; - struct ifreq ifr; - char zero_array[ETHER_ADDR_LEN] = {0}; - - fd = socket(AF_INET, SOCK_DGRAM, 0); - if (fd < 0) - goto err; - - bzero(&ifr, sizeof(ifr)); - strnmov(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name) - 1); - - do - { - if (ioctl(fd, SIOCGIFHWADDR, &ifr) >= 0) - { - memcpy(to, &ifr.ifr_hwaddr.sa_data, ETHER_ADDR_LEN); - res= memcmp(to, zero_array, ETHER_ADDR_LEN) ? 0 : 1; - } - } while (res && (errno == 0 || errno == ENODEV) && ifr.ifr_name[3]++ < '6'); - - close(fd); -err: - return res; -} - -#elif defined(__WIN__) - -/* - Workaround for BUG#32082 (Definition of VOID in my_global.h conflicts with - windows headers) -*/ -#ifdef VOID -#undef VOID -#define VOID void -#endif - -#include - -/* - The following typedef is for dynamically loading iphlpapi.dll / - GetAdaptersAddresses. Dynamic loading is used because - GetAdaptersAddresses is not available on Windows 2000 which MySQL - still supports. Static linking would cause an unresolved export. -*/ -typedef DWORD (WINAPI *pfnGetAdaptersAddresses)(IN ULONG Family, - IN DWORD Flags,IN PVOID Reserved, - OUT PIP_ADAPTER_ADDRESSES pAdapterAddresses, - IN OUT PULONG pOutBufLen); - -/* - my_gethwaddr - Windows version - - @brief Retrieve MAC address from network hardware - - @param[out] to MAC address exactly six bytes - - @return Operation status - @retval 0 OK - @retval <>0 FAILED -*/ -my_bool my_gethwaddr(uchar *to) -{ - PIP_ADAPTER_ADDRESSES pAdapterAddresses; - PIP_ADAPTER_ADDRESSES pCurrAddresses; - IP_ADAPTER_ADDRESSES adapterAddresses; - ULONG address_len; - my_bool return_val= 1; - static pfnGetAdaptersAddresses fnGetAdaptersAddresses= - (pfnGetAdaptersAddresses)-1; - - if(fnGetAdaptersAddresses == (pfnGetAdaptersAddresses)-1) - { - /* Get the function from the DLL */ - fnGetAdaptersAddresses= (pfnGetAdaptersAddresses) - GetProcAddress(LoadLibrary("iphlpapi.dll"), - "GetAdaptersAddresses"); - } - if (!fnGetAdaptersAddresses) - return 1; /* failed to get function */ - address_len= sizeof (IP_ADAPTER_ADDRESSES); - - /* Get the required size for the address data. */ - if (fnGetAdaptersAddresses(AF_UNSPEC, 0, 0, &adapterAddresses, &address_len) - == ERROR_BUFFER_OVERFLOW) - { - pAdapterAddresses= my_malloc(address_len, 0); - if (!pAdapterAddresses) - return 1; /* error, alloc failed */ - } - else - pAdapterAddresses= &adapterAddresses; /* one is enough don't alloc */ - - /* Get the hardware info. */ - if (fnGetAdaptersAddresses(AF_UNSPEC, 0, 0, pAdapterAddresses, &address_len) - == NO_ERROR) - { - pCurrAddresses= pAdapterAddresses; - - while (pCurrAddresses) - { - /* Look for ethernet cards. */ - if (pCurrAddresses->IfType == IF_TYPE_ETHERNET_CSMACD) - { - /* check for a good address */ - if (pCurrAddresses->PhysicalAddressLength < 6) - continue; /* bad address */ - - /* save 6 bytes of the address in the 'to' parameter */ - memcpy(to, pCurrAddresses->PhysicalAddress, 6); - - /* Network card found, we're done. */ - return_val= 0; - break; - } - pCurrAddresses= pCurrAddresses->Next; - } - } - - /* Clean up memory allocation. */ - if (pAdapterAddresses != &adapterAddresses) - my_free(pAdapterAddresses); - - return return_val; -} - -#else /* __FreeBSD__ || __linux__ || __WIN__ */ -/* just fail */ -my_bool my_gethwaddr(uchar *to __attribute__((unused))) -{ - return 1; -} -#endif - -#else /* MAIN */ -int main(int argc __attribute__((unused)),char **argv) -{ - uchar mac[6]; - uint i; - MY_INIT(argv[0]); - if (my_gethwaddr(mac)) - { - printf("my_gethwaddr failed with errno %d\n", errno); - exit(1); - } - for (i=0; i < sizeof(mac); i++) - { - if (i) printf(":"); - printf("%02x", mac[i]); - } - printf("\n"); - return 0; -} -#endif - diff --git a/deps/mysqllite/mysys/my_getncpus.c b/deps/mysqllite/mysys/my_getncpus.c deleted file mode 100644 index 5be961e3bc91ba..00000000000000 --- a/deps/mysqllite/mysys/my_getncpus.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2006 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* get the number of (online) CPUs */ - -#include "mysys_priv.h" -#ifdef HAVE_UNISTD_H -#include -#endif - -static int ncpus=0; - -int my_getncpus() -{ - if (!ncpus) - { -#ifdef _SC_NPROCESSORS_ONLN - ncpus= sysconf(_SC_NPROCESSORS_ONLN); -#elif defined(__WIN__) - SYSTEM_INFO sysinfo; - - /* - * We are not calling GetNativeSystemInfo here because (1) we - * don't believe that they return different values for number - * of processors and (2) if WOW64 limits processors for Win32 - * then we don't want to try to override that. - */ - GetSystemInfo(&sysinfo); - - ncpus= sysinfo.dwNumberOfProcessors; -#else -/* unknown so play safe: assume SMP and forbid uniprocessor build */ - ncpus= 2; -#endif - } - return ncpus; -} diff --git a/deps/mysqllite/mysys/my_getopt.c b/deps/mysqllite/mysys/my_getopt.c deleted file mode 100644 index 51c45ff130933c..00000000000000 --- a/deps/mysqllite/mysys/my_getopt.c +++ /dev/null @@ -1,1419 +0,0 @@ -/* Copyright (C) 2002-2006 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include -#include -#include -#include -#include -#include -#include - -typedef void (*init_func_p)(const struct my_option *option, void *variable, - longlong value); - -static void default_reporter(enum loglevel level, const char *format, ...); -my_error_reporter my_getopt_error_reporter= &default_reporter; - -static int findopt(char *, uint, const struct my_option **, const char **); -my_bool getopt_compare_strings(const char *, const char *, uint); -static longlong getopt_ll(char *arg, const struct my_option *optp, int *err); -static ulonglong getopt_ull(char *, const struct my_option *, int *); -static double getopt_double(char *arg, const struct my_option *optp, int *err); -static void init_variables(const struct my_option *, init_func_p); -static void init_one_value(const struct my_option *, void *, longlong); -static void fini_one_value(const struct my_option *, void *, longlong); -static int setval(const struct my_option *, void *, char *, my_bool); -static char *check_struct_option(char *cur_arg, char *key_name); - -/* - The following three variables belong to same group and the number and - order of their arguments must correspond to each other. -*/ -static const char *special_opt_prefix[]= -{"skip", "disable", "enable", "maximum", "loose", 0}; -static const uint special_opt_prefix_lengths[]= -{ 4, 7, 6, 7, 5, 0}; -enum enum_special_opt -{ OPT_SKIP, OPT_DISABLE, OPT_ENABLE, OPT_MAXIMUM, OPT_LOOSE}; - -char *disabled_my_option= (char*) "0"; -char *enabled_my_option= (char*) "1"; - -/* - This is a flag that can be set in client programs. 0 means that - my_getopt will not print error messages, but the client should do - it by itself -*/ - -my_bool my_getopt_print_errors= 1; - -/* - This is a flag that can be set in client programs. 1 means that - my_getopt will skip over options it does not know how to handle. -*/ - -my_bool my_getopt_skip_unknown= 0; - -static void default_reporter(enum loglevel level, - const char *format, ...) -{ - va_list args; - va_start(args, format); - if (level == WARNING_LEVEL) - fprintf(stderr, "%s", "Warning: "); - else if (level == INFORMATION_LEVEL) - fprintf(stderr, "%s", "Info: "); - vfprintf(stderr, format, args); - va_end(args); - fputc('\n', stderr); - fflush(stderr); -} - -static my_getopt_value getopt_get_addr; - -void my_getopt_register_get_addr(my_getopt_value func_addr) -{ - getopt_get_addr= func_addr; -} - -/** - Handle command line options. - Sort options. - Put options first, until special end of options (--), - or until the end of argv. Parse options, check that the given option - matches with one of the options in struct 'my_option'. - Check that option was given an argument if it requires one - Call the optional 'get_one_option()' function once for each option. - - Note that handle_options() can be invoked multiple times to - parse a command line in several steps. - In this case, use the global flag @c my_getopt_skip_unknown to indicate - that options unknown in the current step should be preserved in the - command line for later parsing in subsequent steps. - - For 'long' options (--a_long_option), @c my_getopt_skip_unknown is - fully supported. Command line parameters such as: - - "--a_long_option" - - "--a_long_option=value" - - "--a_long_option value" - will be preserved as is when the option is not known. - - For 'short' options (-S), support for @c my_getopt_skip_unknown - comes with some limitation, because several short options - can also be specified together in the same command line argument, - as in "-XYZ". - - The first use case supported is: all short options are declared. - handle_options() will be able to interpret "-XYZ" as one of: - - an unknown X option - - "-X -Y -Z", three short options with no arguments - - "-X -YZ", where Y is a short option with argument Z - - "-XYZ", where X is a short option with argument YZ - based on the full short options specifications. - - The second use case supported is: no short option is declared. - handle_options() will reject "-XYZ" as unknown, to be parsed later. - - The use case that is explicitly not supported is to provide - only a partial list of short options to handle_options(). - This function can not be expected to extract some option Y - in the middle of the string "-XYZ" in these conditions, - without knowing if X will be declared an option later. - - Note that this limitation only impacts parsing of several - short options from the same command line argument, - as in "mysqld -anW5". - When each short option is properly separated out in the command line - argument, for example in "mysqld -a -n -w5", the code would actually - work even with partial options specs given at each stage. - - @param [in, out] argc command line options (count) - @param [in, out] argv command line options (values) - @param [in] longopts descriptor of all valid options - @param [in] get_one_option optional callback function to process each option, - can be NULL. - @return error in case of ambiguous or unknown options, - 0 on success. -*/ -int handle_options(int *argc, char ***argv, - const struct my_option *longopts, - my_get_one_option get_one_option) -{ - uint UNINIT_VAR(opt_found), argvpos= 0, length; - my_bool end_of_options= 0, must_be_var, set_maximum_value, - option_is_loose; - char **pos, **pos_end, *optend, *opt_str, key_name[FN_REFLEN]; - const char *UNINIT_VAR(prev_found); - const struct my_option *optp; - void *value; - int error, i; - my_bool is_cmdline_arg= 1; - - /* handle_options() assumes arg0 (program name) always exists */ - DBUG_ASSERT(argc && *argc >= 1); - DBUG_ASSERT(argv && *argv); - (*argc)--; /* Skip the program name */ - (*argv)++; /* --- || ---- */ - init_variables(longopts, init_one_value); - - /* - Search for args_separator, if found, then the first part of the - arguments are loaded from configs - */ - for (pos= *argv, pos_end=pos+ *argc; pos != pos_end ; pos++) - { - if (*pos == args_separator) - { - is_cmdline_arg= 0; - break; - } - } - - for (pos= *argv, pos_end=pos+ *argc; pos != pos_end ; pos++) - { - char **first= pos; - char *cur_arg= *pos; - opt_found= 0; - if (!is_cmdline_arg && (cur_arg == args_separator)) - { - is_cmdline_arg= 1; - - /* save the separator too if skip unkown options */ - if (my_getopt_skip_unknown) - (*argv)[argvpos++]= cur_arg; - else - (*argc)--; - continue; - } - if (cur_arg[0] == '-' && cur_arg[1] && !end_of_options) /* must be opt */ - { - char *argument= 0; - must_be_var= 0; - set_maximum_value= 0; - option_is_loose= 0; - - cur_arg++; /* skip '-' */ - if (*cur_arg == '-') /* check for long option, */ - { - if (!*++cur_arg) /* skip the double dash */ - { - /* '--' means end of options, look no further */ - end_of_options= 1; - (*argc)--; - continue; - } - opt_str= check_struct_option(cur_arg, key_name); - optend= strcend(opt_str, '='); - length= (uint) (optend - opt_str); - if (*optend == '=') - optend++; - else - optend= 0; - - /* - Find first the right option. Return error in case of an ambiguous, - or unknown option - */ - optp= longopts; - if (!(opt_found= findopt(opt_str, length, &optp, &prev_found))) - { - /* - Didn't find any matching option. Let's see if someone called - option with a special option prefix - */ - if (!must_be_var) - { - if (optend) - must_be_var= 1; /* option is followed by an argument */ - for (i= 0; special_opt_prefix[i]; i++) - { - if (!getopt_compare_strings(special_opt_prefix[i], opt_str, - special_opt_prefix_lengths[i]) && - (opt_str[special_opt_prefix_lengths[i]] == '-' || - opt_str[special_opt_prefix_lengths[i]] == '_')) - { - /* - We were called with a special prefix, we can reuse opt_found - */ - opt_str+= special_opt_prefix_lengths[i] + 1; - length-= special_opt_prefix_lengths[i] + 1; - if (i == OPT_LOOSE) - option_is_loose= 1; - if ((opt_found= findopt(opt_str, length, &optp, &prev_found))) - { - if (opt_found > 1) - { - if (my_getopt_print_errors) - my_getopt_error_reporter(ERROR_LEVEL, - "%s: ambiguous option '--%s-%s' (--%s-%s)", - my_progname, special_opt_prefix[i], - opt_str, special_opt_prefix[i], - prev_found); - return EXIT_AMBIGUOUS_OPTION; - } - switch (i) { - case OPT_SKIP: - case OPT_DISABLE: /* fall through */ - /* - double negation is actually enable again, - for example: --skip-option=0 -> option = TRUE - */ - optend= (optend && *optend == '0' && !(*(optend + 1))) ? - enabled_my_option : disabled_my_option; - break; - case OPT_ENABLE: - optend= (optend && *optend == '0' && !(*(optend + 1))) ? - disabled_my_option : enabled_my_option; - break; - case OPT_MAXIMUM: - set_maximum_value= 1; - must_be_var= 1; - break; - } - break; /* break from the inner loop, main loop continues */ - } - i= -1; /* restart the loop */ - } - } - } - if (!opt_found) - { - if (my_getopt_skip_unknown) - { - /* Preserve all the components of this unknown option. */ - do { - (*argv)[argvpos++]= *first++; - } while (first <= pos); - continue; - } - if (must_be_var) - { - if (my_getopt_print_errors) - my_getopt_error_reporter(option_is_loose ? - WARNING_LEVEL : ERROR_LEVEL, - "%s: unknown variable '%s'", - my_progname, cur_arg); - if (!option_is_loose) - return EXIT_UNKNOWN_VARIABLE; - } - else - { - if (my_getopt_print_errors) - my_getopt_error_reporter(option_is_loose ? - WARNING_LEVEL : ERROR_LEVEL, - "%s: unknown option '--%s'", - my_progname, cur_arg); - if (!option_is_loose) - return EXIT_UNKNOWN_OPTION; - } - if (option_is_loose) - { - (*argc)--; - continue; - } - } - } - if (opt_found > 1) - { - if (must_be_var) - { - if (my_getopt_print_errors) - my_getopt_error_reporter(ERROR_LEVEL, - "%s: variable prefix '%s' is not unique", - my_progname, opt_str); - return EXIT_VAR_PREFIX_NOT_UNIQUE; - } - else - { - if (my_getopt_print_errors) - my_getopt_error_reporter(ERROR_LEVEL, - "%s: ambiguous option '--%s' (%s, %s)", - my_progname, opt_str, prev_found, - optp->name); - return EXIT_AMBIGUOUS_OPTION; - } - } - if ((optp->var_type & GET_TYPE_MASK) == GET_DISABLED) - { - if (my_getopt_print_errors) - fprintf(stderr, - "%s: %s: Option '%s' used, but is disabled\n", my_progname, - option_is_loose ? "WARNING" : "ERROR", opt_str); - if (option_is_loose) - { - (*argc)--; - continue; - } - return EXIT_OPTION_DISABLED; - } - error= 0; - value= optp->var_type & GET_ASK_ADDR ? - (*getopt_get_addr)(key_name, (uint) strlen(key_name), optp, &error) : - optp->value; - if (error) - return error; - - if (optp->arg_type == NO_ARG) - { - /* - Due to historical reasons GET_BOOL var_types still accepts arguments - despite the NO_ARG arg_type attribute. This can seems a bit unintuitive - and care should be taken when refactoring this code. - */ - if (optend && (optp->var_type & GET_TYPE_MASK) != GET_BOOL) - { - if (my_getopt_print_errors) - my_getopt_error_reporter(ERROR_LEVEL, - "%s: option '--%s' cannot take an argument", - my_progname, optp->name); - return EXIT_NO_ARGUMENT_ALLOWED; - } - if ((optp->var_type & GET_TYPE_MASK) == GET_BOOL) - { - /* - Set bool to 1 if no argument or if the user has used - --enable-'option-name'. - *optend was set to '0' if one used --disable-option - */ - (*argc)--; - if (!optend || *optend == '1' || - !my_strcasecmp(&my_charset_latin1, optend, "true")) - *((my_bool*) value)= (my_bool) 1; - else if (*optend == '0' || - !my_strcasecmp(&my_charset_latin1, optend, "false")) - *((my_bool*) value)= (my_bool) 0; - else - { - my_getopt_error_reporter(WARNING_LEVEL, - "%s: ignoring option '--%s' " - "due to invalid value '%s'", - my_progname, optp->name, optend); - continue; - } - if (get_one_option && get_one_option(optp->id, optp, - *((my_bool*) value) ? - enabled_my_option : disabled_my_option)) - return EXIT_ARGUMENT_INVALID; - continue; - } - argument= optend; - } - else if (optp->arg_type == REQUIRED_ARG && !optend) - { - /* Check if there are more arguments after this one, - Note: options loaded from config file that requires value - should always be in the form '--option=value'. - */ - if (!is_cmdline_arg || !*++pos) - { - if (my_getopt_print_errors) - my_getopt_error_reporter(ERROR_LEVEL, - "%s: option '--%s' requires an argument", - my_progname, optp->name); - return EXIT_ARGUMENT_REQUIRED; - } - argument= *pos; - (*argc)--; - } - else - argument= optend; - } - else /* must be short option */ - { - for (optend= cur_arg; *optend; optend++) - { - opt_found= 0; - for (optp= longopts; optp->name; optp++) - { - if (optp->id && optp->id == (int) (uchar) *optend) - { - /* Option recognized. Find next what to do with it */ - opt_found= 1; - if ((optp->var_type & GET_TYPE_MASK) == GET_DISABLED) - { - if (my_getopt_print_errors) - fprintf(stderr, - "%s: ERROR: Option '-%c' used, but is disabled\n", - my_progname, optp->id); - return EXIT_OPTION_DISABLED; - } - if ((optp->var_type & GET_TYPE_MASK) == GET_BOOL && - optp->arg_type == NO_ARG) - { - *((my_bool*) optp->value)= (my_bool) 1; - if (get_one_option && get_one_option(optp->id, optp, argument)) - return EXIT_UNSPECIFIED_ERROR; - continue; - } - else if (optp->arg_type == REQUIRED_ARG || - optp->arg_type == OPT_ARG) - { - if (*(optend + 1)) - { - /* The rest of the option is option argument */ - argument= optend + 1; - /* This is in effect a jump out of the outer loop */ - optend= (char*) " "; - } - else - { - if (optp->arg_type == OPT_ARG) - { - if (optp->var_type == GET_BOOL) - *((my_bool*) optp->value)= (my_bool) 1; - if (get_one_option && get_one_option(optp->id, optp, argument)) - return EXIT_UNSPECIFIED_ERROR; - continue; - } - /* Check if there are more arguments after this one */ - if (!pos[1]) - { - if (my_getopt_print_errors) - my_getopt_error_reporter(ERROR_LEVEL, - "%s: option '-%c' requires an argument", - my_progname, optp->id); - return EXIT_ARGUMENT_REQUIRED; - } - argument= *++pos; - (*argc)--; - /* the other loop will break, because *optend + 1 == 0 */ - } - } - if ((error= setval(optp, optp->value, argument, - set_maximum_value))) - return error; - if (get_one_option && get_one_option(optp->id, optp, argument)) - return EXIT_UNSPECIFIED_ERROR; - break; - } - } - if (!opt_found) - { - if (my_getopt_skip_unknown) - { - /* - We are currently parsing a single argv[] argument - of the form "-XYZ". - One or the argument found (say Y) is not an option. - Hack the string "-XYZ" to make a "-YZ" substring in it, - and push that to the output as an unrecognized parameter. - */ - DBUG_ASSERT(optend > *pos); - DBUG_ASSERT(optend >= cur_arg); - DBUG_ASSERT(optend <= *pos + strlen(*pos)); - DBUG_ASSERT(*optend); - optend--; - optend[0]= '-'; /* replace 'X' or '-' by '-' */ - (*argv)[argvpos++]= optend; - /* - Do not continue to parse at the current "-XYZ" argument, - skip to the next argv[] argument instead. - */ - optend= (char*) " "; - } - else - { - if (my_getopt_print_errors) - my_getopt_error_reporter(ERROR_LEVEL, - "%s: unknown option '-%c'", - my_progname, *optend); - return EXIT_UNKNOWN_OPTION; - } - } - } - if (opt_found) - (*argc)--; /* option handled (short), decrease argument count */ - continue; - } - if ((error= setval(optp, value, argument, set_maximum_value))) - return error; - if (get_one_option && get_one_option(optp->id, optp, argument)) - return EXIT_UNSPECIFIED_ERROR; - - (*argc)--; /* option handled (long), decrease argument count */ - } - else /* non-option found */ - (*argv)[argvpos++]= cur_arg; - } - /* - Destroy the first, already handled option, so that programs that look - for arguments in 'argv', without checking 'argc', know when to stop. - Items in argv, before the destroyed one, are all non-option -arguments - to the program, yet to be (possibly) handled. - */ - (*argv)[argvpos]= 0; - return 0; -} - - -/* - function: check_struct_option - - Arguments: Current argument under processing from argv and a variable - where to store the possible key name. - - Return value: In case option is a struct option, returns a pointer to - the current argument at the position where the struct option (key_name) - ends, the next character after the dot. In case argument is not a struct - option, returns a pointer to the argument. - - key_name will hold the name of the key, or 0 if not found. -*/ - -static char *check_struct_option(char *cur_arg, char *key_name) -{ - char *ptr, *end; - - ptr= strcend(cur_arg + 1, '.'); /* Skip the first character */ - end= strcend(cur_arg, '='); - - /* - If the first dot is after an equal sign, then it is part - of a variable value and the option is not a struct option. - Also, if the last character in the string before the ending - NULL, or the character right before equal sign is the first - dot found, the option is not a struct option. - */ - if (end - ptr > 1) - { - uint len= (uint) (ptr - cur_arg); - set_if_smaller(len, FN_REFLEN-1); - strmake(key_name, cur_arg, len); - return ++ptr; - } - else - { - key_name[0]= 0; - return cur_arg; - } -} - -/** - Parse a boolean command line argument - - "ON", "TRUE" and "1" will return true, - other values will return false. - - @param[in] argument The value argument - @return boolean value -*/ -static my_bool get_bool_argument(const char *argument) -{ - if (!my_strcasecmp(&my_charset_latin1, argument, "true") || - !my_strcasecmp(&my_charset_latin1, argument, "on")) - return 1; - else - return (my_bool) atoi(argument); -} - -/* - function: setval - - Arguments: opts, argument - Will set the option value to given value -*/ - -static int setval(const struct my_option *opts, void *value, char *argument, - my_bool set_maximum_value) -{ - int err= 0, res= 0; - - if (!argument) - argument= enabled_my_option; - - if (value) - { - if (set_maximum_value && !(value= opts->u_max_value)) - { - my_getopt_error_reporter(ERROR_LEVEL, - "%s: Maximum value of '%s' cannot be set", - my_progname, opts->name); - return EXIT_NO_PTR_TO_VARIABLE; - } - - switch ((opts->var_type & GET_TYPE_MASK)) { - case GET_BOOL: /* If argument differs from 0, enable option, else disable */ - *((my_bool*) value)= get_bool_argument(argument); - break; - case GET_INT: - *((int*) value)= (int) getopt_ll(argument, opts, &err); - break; - case GET_UINT: - *((uint*) value)= (uint) getopt_ull(argument, opts, &err); - break; - case GET_LONG: - *((long*) value)= (long) getopt_ll(argument, opts, &err); - break; - case GET_ULONG: - *((long*) value)= (long) getopt_ull(argument, opts, &err); - break; - case GET_LL: - *((longlong*) value)= getopt_ll(argument, opts, &err); - break; - case GET_ULL: - *((ulonglong*) value)= getopt_ull(argument, opts, &err); - break; - case GET_DOUBLE: - *((double*) value)= getopt_double(argument, opts, &err); - break; - case GET_STR: - if (argument == enabled_my_option) - break; /* string options don't use this default of "1" */ - *((char**) value)= argument; - break; - case GET_STR_ALLOC: - if (argument == enabled_my_option) - break; /* string options don't use this default of "1" */ - my_free(*((char**) value)); - if (!(*((char**) value)= my_strdup(argument, MYF(MY_WME)))) - { - res= EXIT_OUT_OF_MEMORY; - goto ret; - }; - break; - case GET_ENUM: - { - int type= find_type(argument, opts->typelib, 2); - if (type == 0) - { - /* - Accept an integer representation of the enumerated item. - */ - char *endptr; - ulong arg= strtoul(argument, &endptr, 10); - if (*endptr || arg >= opts->typelib->count) - { - res= EXIT_ARGUMENT_INVALID; - goto ret; - } - *(ulong*)value= arg; - } - else - *(ulong*)value= type - 1; - } - break; - case GET_SET: - *((ulonglong*)value)= find_typeset(argument, opts->typelib, &err); - if (err) - { - /* Accept an integer representation of the set */ - char *endptr; - ulonglong arg= (ulonglong) strtol(argument, &endptr, 10); - if (*endptr || (arg >> 1) >= (1ULL << (opts->typelib->count-1))) - { - res= EXIT_ARGUMENT_INVALID; - goto ret; - }; - *(ulonglong*)value= arg; - err= 0; - } - break; - case GET_FLAGSET: - { - char *error; - uint error_len; - - *((ulonglong*)value)= - find_set_from_flags(opts->typelib, opts->typelib->count, - *(ulonglong *)value, opts->def_value, - argument, strlen(argument), - &error, &error_len); - if (error) - { - res= EXIT_ARGUMENT_INVALID; - goto ret; - }; - } - break; - case GET_NO_ARG: /* get_one_option has taken care of the value already */ - default: /* dummy default to avoid compiler warnings */ - break; - } - if (err) - { - res= EXIT_UNKNOWN_SUFFIX; - goto ret; - }; - } - return 0; - -ret: - my_getopt_error_reporter(ERROR_LEVEL, - "%s: Error while setting value '%s' to '%s'", - my_progname, argument, opts->name); - return res; -} - - -/* - Find option - - SYNOPSIS - findopt() - optpat Prefix of option to find (with - or _) - length Length of optpat - opt_res Options - ffname Place for pointer to first found name - - IMPLEMENTATION - Go through all options in the my_option struct. Return number - of options found that match the pattern and in the argument - list the option found, if any. In case of ambiguous option, store - the name in ffname argument - - RETURN - 0 No matching options - # Number of matching options - ffname points to first matching option -*/ - -static int findopt(char *optpat, uint length, - const struct my_option **opt_res, - const char **ffname) -{ - uint count; - const struct my_option *opt= *opt_res; - - for (count= 0; opt->name; opt++) - { - if (!getopt_compare_strings(opt->name, optpat, length)) /* match found */ - { - (*opt_res)= opt; - if (!opt->name[length]) /* Exact match */ - return 1; - if (!count) - { - /* We only need to know one prev */ - count= 1; - *ffname= opt->name; - } - else if (strcmp(*ffname, opt->name)) - { - /* - The above test is to not count same option twice - (see mysql.cc, option "help") - */ - count++; - } - } - } - return count; -} - - -/* - function: compare_strings - - Works like strncmp, other than 1.) considers '-' and '_' the same. - 2.) Returns -1 if strings differ, 0 if they are equal -*/ - -my_bool getopt_compare_strings(register const char *s, register const char *t, - uint length) -{ - char const *end= s + length; - for (;s != end ; s++, t++) - { - if ((*s != '-' ? *s : '_') != (*t != '-' ? *t : '_')) - return 1; - } - return 0; -} - -/* - function: eval_num_suffix - - Transforms a number with a suffix to real number. Suffix can - be k|K for kilo, m|M for mega or g|G for giga. -*/ - -static longlong eval_num_suffix(char *argument, int *error, char *option_name) -{ - char *endchar; - longlong num; - - *error= 0; - errno= 0; - num= strtoll(argument, &endchar, 10); - if (errno == ERANGE) - { - my_getopt_error_reporter(ERROR_LEVEL, - "Incorrect integer value: '%s'", argument); - *error= 1; - return 0; - } - if (*endchar == 'k' || *endchar == 'K') - num*= 1024L; - else if (*endchar == 'm' || *endchar == 'M') - num*= 1024L * 1024L; - else if (*endchar == 'g' || *endchar == 'G') - num*= 1024L * 1024L * 1024L; - else if (*endchar) - { - fprintf(stderr, - "Unknown suffix '%c' used for variable '%s' (value '%s')\n", - *endchar, option_name, argument); - *error= 1; - return 0; - } - return num; -} - -/* - function: getopt_ll - - Evaluates and returns the value that user gave as an argument - to a variable. Recognizes (case insensitive) K as KILO, M as MEGA - and G as GIGA bytes. Some values must be in certain blocks, as - defined in the given my_option struct, this function will check - that those values are honored. - In case of an error, set error value in *err. -*/ - -static longlong getopt_ll(char *arg, const struct my_option *optp, int *err) -{ - longlong num=eval_num_suffix(arg, err, (char*) optp->name); - return getopt_ll_limit_value(num, optp, NULL); -} - -/* - function: getopt_ll_limit_value - - Applies min/max/block_size to a numeric value of an option. - Returns "fixed" value. -*/ - -longlong getopt_ll_limit_value(longlong num, const struct my_option *optp, - my_bool *fix) -{ - longlong old= num; - my_bool adjusted= FALSE; - char buf1[255], buf2[255]; - ulonglong block_size= (optp->block_size ? (ulonglong) optp->block_size : 1L); - - if (num > 0 && ((ulonglong) num > (ulonglong) optp->max_value) && - optp->max_value) /* if max value is not set -> no upper limit */ - { - num= (ulonglong) optp->max_value; - adjusted= TRUE; - } - - switch ((optp->var_type & GET_TYPE_MASK)) { - case GET_INT: - if (num > (longlong) INT_MAX) - { - num= ((longlong) INT_MAX); - adjusted= TRUE; - } - break; - case GET_LONG: -#if SIZEOF_LONG < SIZEOF_LONG_LONG - if (num > (longlong) LONG_MAX) - { - num= ((longlong) LONG_MAX); - adjusted= TRUE; - } -#endif - break; - default: - DBUG_ASSERT((optp->var_type & GET_TYPE_MASK) == GET_LL); - break; - } - - num= (num / block_size); - num= (longlong) (num * block_size); - - if (num < optp->min_value) - { - num= optp->min_value; - if (old < optp->min_value) - adjusted= TRUE; - } - - if (fix) - *fix= old != num; - else if (adjusted) - my_getopt_error_reporter(WARNING_LEVEL, - "option '%s': signed value %s adjusted to %s", - optp->name, llstr(old, buf1), llstr(num, buf2)); - return num; -} - -/* - function: getopt_ull - - This is the same as getopt_ll, but is meant for unsigned long long - values. -*/ - -static ulonglong getopt_ull(char *arg, const struct my_option *optp, int *err) -{ - ulonglong num= eval_num_suffix(arg, err, (char*) optp->name); - return getopt_ull_limit_value(num, optp, NULL); -} - - -ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp, - my_bool *fix) -{ - my_bool adjusted= FALSE; - ulonglong old= num; - char buf1[255], buf2[255]; - - if ((ulonglong) num > (ulonglong) optp->max_value && - optp->max_value) /* if max value is not set -> no upper limit */ - { - num= (ulonglong) optp->max_value; - adjusted= TRUE; - } - - switch ((optp->var_type & GET_TYPE_MASK)) { - case GET_UINT: - if (num > (ulonglong) UINT_MAX) - { - num= ((ulonglong) UINT_MAX); - adjusted= TRUE; - } - break; - case GET_ULONG: -#if SIZEOF_LONG < SIZEOF_LONG_LONG - if (num > (ulonglong) ULONG_MAX) - { - num= ((ulonglong) ULONG_MAX); - adjusted= TRUE; - } -#endif - break; - default: - DBUG_ASSERT((optp->var_type & GET_TYPE_MASK) == GET_ULL); - break; - } - - if (optp->block_size > 1) - { - num/= (ulonglong) optp->block_size; - num*= (ulonglong) optp->block_size; - } - - if (num < (ulonglong) optp->min_value) - { - num= (ulonglong) optp->min_value; - if (old < (ulonglong) optp->min_value) - adjusted= TRUE; - } - - if (fix) - *fix= old != num; - else if (adjusted) - my_getopt_error_reporter(WARNING_LEVEL, - "option '%s': unsigned value %s adjusted to %s", - optp->name, ullstr(old, buf1), ullstr(num, buf2)); - - return num; -} - -double getopt_double_limit_value(double num, const struct my_option *optp, - my_bool *fix) -{ - my_bool adjusted= FALSE; - double old= num; - if (optp->max_value && num > (double) optp->max_value) - { - num= (double) optp->max_value; - adjusted= TRUE; - } - if (num < (double) optp->min_value) - { - num= (double) optp->min_value; - adjusted= TRUE; - } - if (fix) - *fix= adjusted; - else if (adjusted) - my_getopt_error_reporter(WARNING_LEVEL, - "option '%s': value %g adjusted to %g", - optp->name, old, num); - return num; -} - -/* - Get double value withing ranges - - Evaluates and returns the value that user gave as an argument to a variable. - - RETURN - decimal value of arg - - In case of an error, prints an error message and sets *err to - EXIT_ARGUMENT_INVALID. Otherwise err is not touched -*/ - -static double getopt_double(char *arg, const struct my_option *optp, int *err) -{ - double num; - int error; - char *end= arg + 1000; /* Big enough as *arg is \0 terminated */ - num= my_strtod(arg, &end, &error); - if (end[0] != 0 || error) - { - my_getopt_error_reporter(ERROR_LEVEL, - "Invalid decimal value for option '%s'\n", optp->name); - *err= EXIT_ARGUMENT_INVALID; - return 0.0; - } - return getopt_double_limit_value(num, optp, NULL); -} - -/* - Init one value to it's default values - - SYNOPSIS - init_one_value() - option Option to initialize - value Pointer to variable -*/ - -static void init_one_value(const struct my_option *option, void *variable, - longlong value) -{ - DBUG_ENTER("init_one_value"); - switch ((option->var_type & GET_TYPE_MASK)) { - case GET_BOOL: - *((my_bool*) variable)= (my_bool) value; - break; - case GET_INT: - *((int*) variable)= (int) getopt_ll_limit_value((int) value, option, NULL); - break; - case GET_ENUM: - *((ulong*) variable)= (ulong) value; - break; - case GET_UINT: - *((uint*) variable)= (uint) getopt_ull_limit_value((uint) value, option, NULL); - break; - case GET_LONG: - *((long*) variable)= (long) getopt_ll_limit_value((long) value, option, NULL); - break; - case GET_ULONG: - *((ulong*) variable)= (ulong) getopt_ull_limit_value((ulong) value, option, NULL); - break; - case GET_LL: - *((longlong*) variable)= (longlong) getopt_ll_limit_value((longlong) value, option, NULL); - break; - case GET_ULL: - *((ulonglong*) variable)= (ulonglong) getopt_ull_limit_value((ulonglong) value, option, NULL); - break; - case GET_SET: - case GET_FLAGSET: - *((ulonglong*) variable)= (ulonglong) value; - break; - case GET_DOUBLE: - *((double*) variable)= ulonglong2double(value); - break; - case GET_STR: - /* - Do not clear variable value if it has no default value. - The default value may already be set. - NOTE: To avoid compiler warnings, we first cast longlong to intptr, - so that the value has the same size as a pointer. - */ - if ((char*) (intptr) value) - *((char**) variable)= (char*) (intptr) value; - break; - case GET_STR_ALLOC: - /* - Do not clear variable value if it has no default value. - The default value may already be set. - NOTE: To avoid compiler warnings, we first cast longlong to intptr, - so that the value has the same size as a pointer. - */ - if ((char*) (intptr) value) - { - char **pstr= (char **) variable; - my_free(*pstr); - *pstr= my_strdup((char*) (intptr) value, MYF(MY_WME)); - } - break; - default: /* dummy default to avoid compiler warnings */ - break; - } - DBUG_VOID_RETURN; -} - - -/* - Init one value to it's default values - - SYNOPSIS - init_one_value() - option Option to initialize - value Pointer to variable -*/ - -static void fini_one_value(const struct my_option *option, void *variable, - longlong value __attribute__ ((unused))) -{ - DBUG_ENTER("fini_one_value"); - switch ((option->var_type & GET_TYPE_MASK)) { - case GET_STR_ALLOC: - my_free(*((char**) variable)); - *((char**) variable)= NULL; - break; - default: /* dummy default to avoid compiler warnings */ - break; - } - DBUG_VOID_RETURN; -} - - -void my_cleanup_options(const struct my_option *options) -{ - init_variables(options, fini_one_value); -} - - -/* - initialize all variables to their default values - - SYNOPSIS - init_variables() - options Array of options - - NOTES - We will initialize the value that is pointed to by options->value. - If the value is of type GET_ASK_ADDR, we will ask for the address - for a value and initialize. -*/ - -static void init_variables(const struct my_option *options, - init_func_p init_one_value) -{ - DBUG_ENTER("init_variables"); - for (; options->name; options++) - { - void *value; - DBUG_PRINT("options", ("name: '%s'", options->name)); - /* - We must set u_max_value first as for some variables - options->u_max_value == options->value and in this case we want to - set the value to default value. - */ - if (options->u_max_value) - init_one_value(options, options->u_max_value, options->max_value); - value= (options->var_type & GET_ASK_ADDR ? - (*getopt_get_addr)("", 0, options, 0) : options->value); - if (value) - init_one_value(options, value, options->def_value); - } - DBUG_VOID_RETURN; -} - -/** Prints variable or option name, replacing _ with - */ -static uint print_name(const struct my_option *optp) -{ - const char *s= optp->name; - for (;*s;s++) - putchar(*s == '_' ? '-' : *s); - return s - optp->name; -} - -/* - function: my_print_options - - Print help for all options and variables. -*/ - -void my_print_help(const struct my_option *options) -{ - uint col, name_space= 22, comment_space= 57; - const char *line_end; - const struct my_option *optp; - - for (optp= options; optp->name; optp++) - { - if (optp->id && optp->id < 256) - { - printf(" -%c%s", optp->id, strlen(optp->name) ? ", " : " "); - col= 6; - } - else - { - printf(" "); - col= 2; - } - if (strlen(optp->name)) - { - printf("--"); - col+= 2 + print_name(optp); - if (optp->arg_type == NO_ARG || - (optp->var_type & GET_TYPE_MASK) == GET_BOOL) - { - putchar(' '); - col++; - } - else if ((optp->var_type & GET_TYPE_MASK) == GET_STR || - (optp->var_type & GET_TYPE_MASK) == GET_STR_ALLOC || - (optp->var_type & GET_TYPE_MASK) == GET_ENUM || - (optp->var_type & GET_TYPE_MASK) == GET_SET || - (optp->var_type & GET_TYPE_MASK) == GET_FLAGSET ) - { - printf("%s=name%s ", optp->arg_type == OPT_ARG ? "[" : "", - optp->arg_type == OPT_ARG ? "]" : ""); - col+= (optp->arg_type == OPT_ARG) ? 8 : 6; - } - else - { - printf("%s=#%s ", optp->arg_type == OPT_ARG ? "[" : "", - optp->arg_type == OPT_ARG ? "]" : ""); - col+= (optp->arg_type == OPT_ARG) ? 5 : 3; - } - if (col > name_space && optp->comment && *optp->comment) - { - putchar('\n'); - col= 0; - } - } - for (; col < name_space; col++) - putchar(' '); - if (optp->comment && *optp->comment) - { - const char *comment= optp->comment, *end= strend(comment); - - while ((uint) (end - comment) > comment_space) - { - for (line_end= comment + comment_space; *line_end != ' '; line_end--); - for (; comment != line_end; comment++) - putchar(*comment); - comment++; /* skip the space, as a newline will take it's place now */ - putchar('\n'); - for (col= 0; col < name_space; col++) - putchar(' '); - } - printf("%s", comment); - } - putchar('\n'); - if ((optp->var_type & GET_TYPE_MASK) == GET_BOOL) - { - if (optp->def_value != 0) - { - printf("%*s(Defaults to on; use --skip-", name_space, ""); - print_name(optp); - printf(" to disable.)\n"); - } - } - } -} - - -/* - function: my_print_options - - Print variables. -*/ - -void my_print_variables(const struct my_option *options) -{ - uint name_space= 34, length, nr; - ulonglong llvalue; - char buff[255]; - const struct my_option *optp; - - for (optp= options; optp->name; optp++) - { - length= strlen(optp->name)+1; - if (length > name_space) - name_space= length; - } - - printf("\nVariables (--variable-name=value)\n"); - printf("%-*s%s", name_space, "and boolean options {FALSE|TRUE}", - "Value (after reading options)\n"); - for (length=1; length < 75; length++) - putchar(length == name_space ? ' ' : '-'); - putchar('\n'); - - for (optp= options; optp->name; optp++) - { - void *value= (optp->var_type & GET_ASK_ADDR ? - (*getopt_get_addr)("", 0, optp, 0) : optp->value); - if (value) - { - length= print_name(optp); - for (; length < name_space; length++) - putchar(' '); - switch ((optp->var_type & GET_TYPE_MASK)) { - case GET_SET: - if (!(llvalue= *(ulonglong*) value)) - printf("%s\n", ""); - else - for (nr= 0; llvalue && nr < optp->typelib->count; nr++, llvalue >>=1) - { - if (llvalue & 1) - printf( llvalue > 1 ? "%s," : "%s\n", get_type(optp->typelib, nr)); - } - break; - case GET_FLAGSET: - llvalue= *(ulonglong*) value; - for (nr= 0; llvalue && nr < optp->typelib->count; nr++, llvalue >>=1) - { - printf("%s%s=", (nr ? "," : ""), get_type(optp->typelib, nr)); - printf(llvalue & 1 ? "on" : "off"); - } - printf("\n"); - break; - case GET_ENUM: - printf("%s\n", get_type(optp->typelib, *(ulong*) value)); - break; - case GET_STR: - case GET_STR_ALLOC: /* fall through */ - printf("%s\n", *((char**) value) ? *((char**) value) : - "(No default value)"); - break; - case GET_BOOL: - printf("%s\n", *((my_bool*) value) ? "TRUE" : "FALSE"); - break; - case GET_INT: - printf("%d\n", *((int*) value)); - break; - case GET_UINT: - printf("%d\n", *((uint*) value)); - break; - case GET_LONG: - printf("%ld\n", *((long*) value)); - break; - case GET_ULONG: - printf("%lu\n", *((ulong*) value)); - break; - case GET_LL: - printf("%s\n", llstr(*((longlong*) value), buff)); - break; - case GET_ULL: - longlong2str(*((ulonglong*) value), buff, 10); - printf("%s\n", buff); - break; - case GET_DOUBLE: - printf("%g\n", *(double*) value); - break; - case GET_NO_ARG: - printf("(No default value)\n"); - break; - default: - printf("(Disabled)\n"); - break; - } - } - } -} diff --git a/deps/mysqllite/mysys/my_getpagesize.c b/deps/mysqllite/mysys/my_getpagesize.c deleted file mode 100644 index b0560cede35fac..00000000000000 --- a/deps/mysqllite/mysys/my_getpagesize.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" - -#ifndef HAVE_GETPAGESIZE - -#if defined __WIN__ - -int my_getpagesize(void) -{ - SYSTEM_INFO si; - GetSystemInfo(&si); - return si.dwPageSize; -} - -#else - -/* Default implementation */ -int my_getpagesize(void) -{ - return (int)8192; -} - -#endif - -#endif - diff --git a/deps/mysqllite/mysys/my_getsystime.c b/deps/mysqllite/mysys/my_getsystime.c deleted file mode 100644 index 614f49fc425ee8..00000000000000 --- a/deps/mysqllite/mysys/my_getsystime.c +++ /dev/null @@ -1,226 +0,0 @@ -/* Copyright (C) 2004 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* get time since epoc in 100 nanosec units */ -/* thus to get the current time we should use the system function - with the highest possible resolution */ - -/* - TODO: in functions my_micro_time() and my_micro_time_and_time() there - exists some common code that should be merged into a function. -*/ - -#include "mysys_priv.h" -#include "my_static.h" - -ulonglong my_getsystime() -{ -#ifdef HAVE_CLOCK_GETTIME - struct timespec tp; - clock_gettime(CLOCK_REALTIME, &tp); - return (ulonglong)tp.tv_sec*10000000+(ulonglong)tp.tv_nsec/100; -#elif defined(__WIN__) - LARGE_INTEGER t_cnt; - if (query_performance_frequency) - { - QueryPerformanceCounter(&t_cnt); - return ((t_cnt.QuadPart / query_performance_frequency * 10000000) + - ((t_cnt.QuadPart % query_performance_frequency) * 10000000 / - query_performance_frequency) + query_performance_offset); - } - return 0; -#else - /* TODO: check for other possibilities for hi-res timestamping */ - struct timeval tv; - gettimeofday(&tv,NULL); - return (ulonglong)tv.tv_sec*10000000+(ulonglong)tv.tv_usec*10; -#endif -} - - -/* - Return current time - - SYNOPSIS - my_time() - flags If MY_WME is set, write error if time call fails - -*/ - -time_t my_time(myf flags __attribute__((unused))) -{ - time_t t; -#ifdef HAVE_GETHRTIME - (void) my_micro_time_and_time(&t); - return t; -#else - /* The following loop is here beacuse time() may fail on some systems */ - while ((t= time(0)) == (time_t) -1) - { - if (flags & MY_WME) - fprintf(stderr, "%s: Warning: time() call failed\n", my_progname); - } - return t; -#endif -} - - -/* - Return time in micro seconds - - SYNOPSIS - my_micro_time() - - NOTES - This function is to be used to measure performance in micro seconds. - As it's not defined whats the start time for the clock, this function - us only useful to measure time between two moments. - - For windows platforms we need the frequency value of the CUP. This is - initalized in my_init.c through QueryPerformanceFrequency(). - - If Windows platform doesn't support QueryPerformanceFrequency() we will - obtain the time via GetClockCount, which only supports milliseconds. - - RETURN - Value in microseconds from some undefined point in time -*/ - -ulonglong my_micro_time() -{ -#if defined(__WIN__) - ulonglong newtime; - GetSystemTimeAsFileTime((FILETIME*)&newtime); - return (newtime/10); -#elif defined(HAVE_GETHRTIME) - return gethrtime()/1000; -#else - ulonglong newtime; - struct timeval t; - /* - The following loop is here because gettimeofday may fail on some systems - */ - while (gettimeofday(&t, NULL) != 0) - {} - newtime= (ulonglong)t.tv_sec * 1000000 + t.tv_usec; - return newtime; -#endif /* defined(__WIN__) */ -} - - -/* - Return time in seconds and timer in microseconds (not different start!) - - SYNOPSIS - my_micro_time_and_time() - time_arg Will be set to seconds since epoch (00:00:00 UTC, - January 1, 1970) - - NOTES - This function is to be useful when we need both the time and microtime. - For example in MySQL this is used to get the query time start of a query - and to measure the time of a query (for the slow query log) - - IMPLEMENTATION - Value of time is as in time() call. - Value of microtime is same as my_micro_time(), which may be totally - unrealated to time() - - RETURN - Value in microseconds from some undefined point in time -*/ - -#define DELTA_FOR_SECONDS 500000000LL /* Half a second */ - -/* Difference between GetSystemTimeAsFileTime() and now() */ -#define OFFSET_TO_EPOCH 116444736000000000ULL - -ulonglong my_micro_time_and_time(time_t *time_arg) -{ -#if defined(__WIN__) - ulonglong newtime; - GetSystemTimeAsFileTime((FILETIME*)&newtime); - *time_arg= (time_t) ((newtime - OFFSET_TO_EPOCH) / 10000000); - return (newtime/10); -#elif defined(HAVE_GETHRTIME) - /* - Solaris has a very slow time() call. We optimize this by using the very - fast gethrtime() call and only calling time() every 1/2 second - */ - static hrtime_t prev_gethrtime= 0; - static time_t cur_time= 0; - hrtime_t cur_gethrtime; - - mysql_mutex_lock(&THR_LOCK_time); - cur_gethrtime= gethrtime(); - /* - Due to bugs in the Solaris (x86) implementation of gethrtime(), - the time returned by it might not be monotonic. Don't use the - cached time(2) value if this is a case. - */ - if ((prev_gethrtime > cur_gethrtime) || - ((cur_gethrtime - prev_gethrtime) > DELTA_FOR_SECONDS)) - { - cur_time= time(0); - prev_gethrtime= cur_gethrtime; - } - *time_arg= cur_time; - mysql_mutex_unlock(&THR_LOCK_time); - return cur_gethrtime/1000; -#else - ulonglong newtime; - struct timeval t; - /* - The following loop is here because gettimeofday may fail on some systems - */ - while (gettimeofday(&t, NULL) != 0) - {} - *time_arg= t.tv_sec; - newtime= (ulonglong)t.tv_sec * 1000000 + t.tv_usec; - return newtime; -#endif /* defined(__WIN__) */ -} - - -/* - Returns current time - - SYNOPSIS - my_time_possible_from_micro() - microtime Value from very recent my_micro_time() - - NOTES - This function returns the current time. The microtime argument is only used - if my_micro_time() uses a function that can safely be converted to the - current time. - - RETURN - current time -*/ - -time_t my_time_possible_from_micro(ulonglong microtime __attribute__((unused))) -{ -#if defined(__WIN__) - time_t t; - while ((t= time(0)) == (time_t) -1) - {} - return t; -#elif defined(HAVE_GETHRTIME) - return my_time(0); /* Cached time */ -#else - return (time_t) (microtime / 1000000); -#endif /* defined(__WIN__) */ -} - diff --git a/deps/mysqllite/mysys/my_getwd.c b/deps/mysqllite/mysys/my_getwd.c deleted file mode 100644 index ace14c8a3c909c..00000000000000 --- a/deps/mysqllite/mysys/my_getwd.c +++ /dev/null @@ -1,167 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* my_setwd() and my_getwd() works with intern_filenames !! */ - -#include "mysys_priv.h" -#include -#include "mysys_err.h" -#ifdef HAVE_GETWD -#include -#endif -#if defined(__WIN__) -#include -#include -#include -#endif - -/* Gets current working directory in buff. - - SYNPOSIS - my_getwd() - buf Buffer to store result. Can be curr_dir[]. - size Size of buffer - MyFlags Flags - - NOTES - Directory is allways ended with FN_LIBCHAR - - RESULT - 0 ok - # error -*/ - -int my_getwd(char * buf, size_t size, myf MyFlags) -{ - char * pos; - DBUG_ENTER("my_getwd"); - DBUG_PRINT("my",("buf: 0x%lx size: %u MyFlags %d", - (long) buf, (uint) size, MyFlags)); - - if (size < 1) - DBUG_RETURN(-1); - - if (curr_dir[0]) /* Current pos is saved here */ - (void) strmake(buf,&curr_dir[0],size-1); - else - { -#if defined(HAVE_GETCWD) - if (size < 2) - DBUG_RETURN(-1); - if (!getcwd(buf,(uint) (size-2)) && MyFlags & MY_WME) - { - my_errno=errno; - my_error(EE_GETWD,MYF(ME_BELL+ME_WAITTANG),errno); - DBUG_RETURN(-1); - } -#elif defined(HAVE_GETWD) - { - char pathname[MAXPATHLEN]; - getwd(pathname); - strmake(buf,pathname,size-1); - } -#else -#error "No way to get current directory" -#endif - if (*((pos=strend(buf))-1) != FN_LIBCHAR) /* End with FN_LIBCHAR */ - { - pos[0]= FN_LIBCHAR; - pos[1]=0; - } - (void) strmake(&curr_dir[0],buf, (size_t) (FN_REFLEN-1)); - } - DBUG_RETURN(0); -} /* my_getwd */ - - -/* Set new working directory */ - -int my_setwd(const char *dir, myf MyFlags) -{ - int res; - size_t length; - char *start, *pos; - DBUG_ENTER("my_setwd"); - DBUG_PRINT("my",("dir: '%s' MyFlags %d", dir, MyFlags)); - - start=(char *) dir; - if (! dir[0] || (dir[0] == FN_LIBCHAR && dir[1] == 0)) - dir=FN_ROOTDIR; - if ((res=chdir((char*) dir)) != 0) - { - my_errno=errno; - if (MyFlags & MY_WME) - my_error(EE_SETWD,MYF(ME_BELL+ME_WAITTANG),start,errno); - } - else - { - if (test_if_hard_path(start)) - { /* Hard pathname */ - pos= strmake(&curr_dir[0],start,(size_t) FN_REFLEN-1); - if (pos[-1] != FN_LIBCHAR) - { - length=(uint) (pos-(char*) curr_dir); - curr_dir[length]=FN_LIBCHAR; /* must end with '/' */ - curr_dir[length+1]='\0'; - } - } - else - curr_dir[0]='\0'; /* Don't save name */ - } - DBUG_RETURN(res); -} /* my_setwd */ - - - - /* Test if hard pathname */ - /* Returns 1 if dirname is a hard path */ - -int test_if_hard_path(register const char *dir_name) -{ - if (dir_name[0] == FN_HOMELIB && dir_name[1] == FN_LIBCHAR) - return (home_dir != NullS && test_if_hard_path(home_dir)); - if (dir_name[0] == FN_LIBCHAR) - return (TRUE); -#ifdef FN_DEVCHAR - return (strchr(dir_name,FN_DEVCHAR) != 0); -#else - return FALSE; -#endif -} /* test_if_hard_path */ - - -/* - Test if a name contains an (absolute or relative) path. - - SYNOPSIS - has_path() - name The name to test. - - RETURN - TRUE name contains a path. - FALSE name does not contain a path. -*/ - -my_bool has_path(const char *name) -{ - return test(strchr(name, FN_LIBCHAR)) -#if FN_LIBCHAR != '/' - || test(strchr(name,'/')) -#endif -#ifdef FN_DEVCHAR - || test(strchr(name, FN_DEVCHAR)) -#endif - ; -} diff --git a/deps/mysqllite/mysys/my_handler.c b/deps/mysqllite/mysys/my_handler.c deleted file mode 100644 index bd1e313d0664af..00000000000000 --- a/deps/mysqllite/mysys/my_handler.c +++ /dev/null @@ -1,604 +0,0 @@ -/* Copyright (C) 2002-2006 MySQL AB - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; version 2 - of the License. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -#include -#include -#include -#include -#include - -#include "my_handler_errors.h" - -#define CMP_NUM(a,b) (((a) < (b)) ? -1 : ((a) == (b)) ? 0 : 1) - -int ha_compare_text(CHARSET_INFO *charset_info, uchar *a, uint a_length, - uchar *b, uint b_length, my_bool part_key, - my_bool skip_end_space) -{ - if (!part_key) - return charset_info->coll->strnncollsp(charset_info, a, a_length, - b, b_length, (my_bool)!skip_end_space); - return charset_info->coll->strnncoll(charset_info, a, a_length, - b, b_length, part_key); -} - - -static int compare_bin(uchar *a, uint a_length, uchar *b, uint b_length, - my_bool part_key, my_bool skip_end_space) -{ - uint length= min(a_length,b_length); - uchar *end= a+ length; - int flag; - - while (a < end) - if ((flag= (int) *a++ - (int) *b++)) - return flag; - if (part_key && b_length < a_length) - return 0; - if (skip_end_space && a_length != b_length) - { - int swap= 1; - /* - We are using space compression. We have to check if longer key - has next character < ' ', in which case it's less than the shorter - key that has an implicite space afterwards. - - This code is identical to the one in - strings/ctype-simple.c:my_strnncollsp_simple - */ - if (a_length < b_length) - { - /* put shorter key in a */ - a_length= b_length; - a= b; - swap= -1; /* swap sign of result */ - } - for (end= a + a_length-length; a < end ; a++) - { - if (*a != ' ') - return (*a < ' ') ? -swap : swap; - } - return 0; - } - return (int) (a_length-b_length); -} - - -/* - Compare two keys - - SYNOPSIS - ha_key_cmp() - keyseg Array of key segments of key to compare - a First key to compare, in format from _mi_pack_key() - This is normally key specified by user - b Second key to compare. This is always from a row - key_length Length of key to compare. This can be shorter than - a to just compare sub keys - next_flag How keys should be compared - If bit SEARCH_FIND is not set the keys includes the row - position and this should also be compared - diff_pos OUT Number of first keypart where values differ, counting - from one. - diff_pos[1] OUT (b + diff_pos[1]) points to first value in tuple b - that is different from corresponding value in tuple a. - - EXAMPLES - Example1: if the function is called for tuples - ('aaa','bbb') and ('eee','fff'), then - diff_pos[0] = 1 (as 'aaa' != 'eee') - diff_pos[1] = 0 (offset from beggining of tuple b to 'eee' keypart). - - Example2: if the index function is called for tuples - ('aaa','bbb') and ('aaa','fff'), - diff_pos[0] = 2 (as 'aaa' != 'eee') - diff_pos[1] = 3 (offset from beggining of tuple b to 'fff' keypart, - here we assume that first key part is CHAR(3) NOT NULL) - - NOTES - Number-keys can't be splited - - RETURN VALUES - <0 If a < b - 0 If a == b - >0 If a > b -*/ - -#define FCMP(A,B) ((int) (A) - (int) (B)) - -int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, - register uchar *b, uint key_length, uint nextflag, - uint *diff_pos) -{ - int flag; - int16 s_1,s_2; - int32 l_1,l_2; - uint32 u_1,u_2; - float f_1,f_2; - double d_1,d_2; - uint next_key_length; - uchar *orig_b= b; - - *diff_pos=0; - for ( ; (int) key_length >0 ; key_length=next_key_length, keyseg++) - { - uchar *end; - uint piks=! (keyseg->flag & HA_NO_SORT); - (*diff_pos)++; - diff_pos[1]= (uint)(b - orig_b); - - /* Handle NULL part */ - if (keyseg->null_bit) - { - key_length--; - if (*a != *b && piks) - { - flag = (int) *a - (int) *b; - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - } - b++; - if (!*a++) /* If key was NULL */ - { - if (nextflag == (SEARCH_FIND | SEARCH_UPDATE)) - nextflag=SEARCH_SAME; /* Allow duplicate keys */ - else if (nextflag & SEARCH_NULL_ARE_NOT_EQUAL) - { - /* - This is only used from mi_check() to calculate cardinality. - It can't be used when searching for a key as this would cause - compare of (a,b) and (b,a) to return the same value. - */ - return -1; - } - next_key_length=key_length; - continue; /* To next key part */ - } - } - end= a+ min(keyseg->length,key_length); - next_key_length=key_length-keyseg->length; - - switch ((enum ha_base_keytype) keyseg->type) { - case HA_KEYTYPE_TEXT: /* Ascii; Key is converted */ - if (keyseg->flag & HA_SPACE_PACK) - { - int a_length,b_length,pack_length; - get_key_length(a_length,a); - get_key_pack_length(b_length,pack_length,b); - next_key_length=key_length-b_length-pack_length; - - if (piks && - (flag=ha_compare_text(keyseg->charset,a,a_length,b,b_length, - (my_bool) ((nextflag & SEARCH_PREFIX) && - next_key_length <= 0), - (my_bool)!(nextflag & SEARCH_PREFIX)))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a+=a_length; - b+=b_length; - break; - } - else - { - uint length=(uint) (end-a), a_length=length, b_length=length; - if (piks && - (flag= ha_compare_text(keyseg->charset, a, a_length, b, b_length, - (my_bool) ((nextflag & SEARCH_PREFIX) && - next_key_length <= 0), - (my_bool)!(nextflag & SEARCH_PREFIX)))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a=end; - b+=length; - } - break; - case HA_KEYTYPE_BINARY: - case HA_KEYTYPE_BIT: - if (keyseg->flag & HA_SPACE_PACK) - { - int a_length,b_length,pack_length; - get_key_length(a_length,a); - get_key_pack_length(b_length,pack_length,b); - next_key_length=key_length-b_length-pack_length; - - if (piks && - (flag=compare_bin(a,a_length,b,b_length, - (my_bool) ((nextflag & SEARCH_PREFIX) && - next_key_length <= 0),1))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a+=a_length; - b+=b_length; - break; - } - else - { - uint length=keyseg->length; - if (piks && - (flag=compare_bin(a,length,b,length, - (my_bool) ((nextflag & SEARCH_PREFIX) && - next_key_length <= 0),0))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a+=length; - b+=length; - } - break; - case HA_KEYTYPE_VARTEXT1: - case HA_KEYTYPE_VARTEXT2: - { - int a_length,b_length,pack_length; - get_key_length(a_length,a); - get_key_pack_length(b_length,pack_length,b); - next_key_length=key_length-b_length-pack_length; - - if (piks && - (flag= ha_compare_text(keyseg->charset,a,a_length,b,b_length, - (my_bool) ((nextflag & SEARCH_PREFIX) && - next_key_length <= 0), - (my_bool) ((nextflag & (SEARCH_FIND | - SEARCH_UPDATE)) == - SEARCH_FIND && - ! (keyseg->flag & - HA_END_SPACE_ARE_EQUAL))))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a+= a_length; - b+= b_length; - break; - } - break; - case HA_KEYTYPE_VARBINARY1: - case HA_KEYTYPE_VARBINARY2: - { - int a_length,b_length,pack_length; - get_key_length(a_length,a); - get_key_pack_length(b_length,pack_length,b); - next_key_length=key_length-b_length-pack_length; - - if (piks && - (flag=compare_bin(a,a_length,b,b_length, - (my_bool) ((nextflag & SEARCH_PREFIX) && - next_key_length <= 0), 0))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a+=a_length; - b+=b_length; - } - break; - case HA_KEYTYPE_INT8: - { - int i_1= (int) *((signed char*) a); - int i_2= (int) *((signed char*) b); - if (piks && (flag = CMP_NUM(i_1,i_2))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a= end; - b++; - break; - } - case HA_KEYTYPE_SHORT_INT: - s_1= mi_sint2korr(a); - s_2= mi_sint2korr(b); - if (piks && (flag = CMP_NUM(s_1,s_2))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a= end; - b+= 2; /* sizeof(short int); */ - break; - case HA_KEYTYPE_USHORT_INT: - { - uint16 us_1,us_2; - us_1= mi_sint2korr(a); - us_2= mi_sint2korr(b); - if (piks && (flag = CMP_NUM(us_1,us_2))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a= end; - b+=2; /* sizeof(short int); */ - break; - } - case HA_KEYTYPE_LONG_INT: - l_1= mi_sint4korr(a); - l_2= mi_sint4korr(b); - if (piks && (flag = CMP_NUM(l_1,l_2))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a= end; - b+= 4; /* sizeof(long int); */ - break; - case HA_KEYTYPE_ULONG_INT: - u_1= mi_sint4korr(a); - u_2= mi_sint4korr(b); - if (piks && (flag = CMP_NUM(u_1,u_2))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a= end; - b+= 4; /* sizeof(long int); */ - break; - case HA_KEYTYPE_INT24: - l_1=mi_sint3korr(a); - l_2=mi_sint3korr(b); - if (piks && (flag = CMP_NUM(l_1,l_2))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a= end; - b+= 3; - break; - case HA_KEYTYPE_UINT24: - l_1=mi_uint3korr(a); - l_2=mi_uint3korr(b); - if (piks && (flag = CMP_NUM(l_1,l_2))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a= end; - b+= 3; - break; - case HA_KEYTYPE_FLOAT: - mi_float4get(f_1,a); - mi_float4get(f_2,b); - /* - The following may give a compiler warning about floating point - comparison not being safe, but this is ok in this context as - we are bascily doing sorting - */ - if (piks && (flag = CMP_NUM(f_1,f_2))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a= end; - b+= 4; /* sizeof(float); */ - break; - case HA_KEYTYPE_DOUBLE: - mi_float8get(d_1,a); - mi_float8get(d_2,b); - /* - The following may give a compiler warning about floating point - comparison not being safe, but this is ok in this context as - we are bascily doing sorting - */ - if (piks && (flag = CMP_NUM(d_1,d_2))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a= end; - b+= 8; /* sizeof(double); */ - break; - case HA_KEYTYPE_NUM: /* Numeric key */ - { - int swap_flag= 0; - int alength,blength; - - if (keyseg->flag & HA_REVERSE_SORT) - { - swap_variables(uchar*, a, b); - swap_flag=1; /* Remember swap of a & b */ - end= a+ (int) (end-b); - } - if (keyseg->flag & HA_SPACE_PACK) - { - alength= *a++; blength= *b++; - end=a+alength; - next_key_length=key_length-blength-1; - } - else - { - alength= (int) (end-a); - blength=keyseg->length; - /* remove pre space from keys */ - for ( ; alength && *a == ' ' ; a++, alength--) ; - for ( ; blength && *b == ' ' ; b++, blength--) ; - } - if (piks) - { - if (*a == '-') - { - if (*b != '-') - return -1; - a++; b++; - swap_variables(uchar*, a, b); - swap_variables(int, alength, blength); - swap_flag=1-swap_flag; - alength--; blength--; - end=a+alength; - } - else if (*b == '-') - return 1; - while (alength && (*a == '+' || *a == '0')) - { - a++; alength--; - } - while (blength && (*b == '+' || *b == '0')) - { - b++; blength--; - } - if (alength != blength) - return (alength < blength) ? -1 : 1; - while (a < end) - if (*a++ != *b++) - return ((int) a[-1] - (int) b[-1]); - } - else - { - b+=(end-a); - a=end; - } - - if (swap_flag) /* Restore pointers */ - swap_variables(uchar*, a, b); - break; - } -#ifdef HAVE_LONG_LONG - case HA_KEYTYPE_LONGLONG: - { - longlong ll_a,ll_b; - ll_a= mi_sint8korr(a); - ll_b= mi_sint8korr(b); - if (piks && (flag = CMP_NUM(ll_a,ll_b))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a= end; - b+= 8; - break; - } - case HA_KEYTYPE_ULONGLONG: - { - ulonglong ll_a,ll_b; - ll_a= mi_uint8korr(a); - ll_b= mi_uint8korr(b); - if (piks && (flag = CMP_NUM(ll_a,ll_b))) - return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a= end; - b+= 8; - break; - } -#endif - case HA_KEYTYPE_END: /* Ready */ - goto end; /* diff_pos is incremented */ - } - } - (*diff_pos)++; -end: - if (!(nextflag & SEARCH_FIND)) - { - uint i; - if (nextflag & (SEARCH_NO_FIND | SEARCH_LAST)) /* Find record after key */ - return (nextflag & (SEARCH_BIGGER | SEARCH_LAST)) ? -1 : 1; - flag=0; - for (i=keyseg->length ; i-- > 0 ; ) - { - if (*a++ != *b++) - { - flag= FCMP(a[-1],b[-1]); - break; - } - } - if (nextflag & SEARCH_SAME) - return (flag); /* read same */ - if (nextflag & SEARCH_BIGGER) - return (flag <= 0 ? -1 : 1); /* read next */ - return (flag < 0 ? -1 : 1); /* read previous */ - } - return 0; -} /* ha_key_cmp */ - - -/* - Find the first NULL value in index-suffix values tuple - - SYNOPSIS - ha_find_null() - keyseg Array of keyparts for key suffix - a Key suffix value tuple - - DESCRIPTION - Find the first NULL value in index-suffix values tuple. - - TODO - Consider optimizing this function or its use so we don't search for - NULL values in completely NOT NULL index suffixes. - - RETURN - First key part that has NULL as value in values tuple, or the last key - part (with keyseg->type==HA_TYPE_END) if values tuple doesn't contain - NULLs. -*/ - -HA_KEYSEG *ha_find_null(HA_KEYSEG *keyseg, uchar *a) -{ - for (; (enum ha_base_keytype) keyseg->type != HA_KEYTYPE_END; keyseg++) - { - uchar *end; - if (keyseg->null_bit) - { - if (!*a++) - return keyseg; - } - end= a+ keyseg->length; - - switch ((enum ha_base_keytype) keyseg->type) { - case HA_KEYTYPE_TEXT: - case HA_KEYTYPE_BINARY: - case HA_KEYTYPE_BIT: - if (keyseg->flag & HA_SPACE_PACK) - { - int a_length; - get_key_length(a_length, a); - a += a_length; - break; - } - else - a= end; - break; - case HA_KEYTYPE_VARTEXT1: - case HA_KEYTYPE_VARTEXT2: - case HA_KEYTYPE_VARBINARY1: - case HA_KEYTYPE_VARBINARY2: - { - int a_length; - get_key_length(a_length, a); - a+= a_length; - break; - } - case HA_KEYTYPE_NUM: - if (keyseg->flag & HA_SPACE_PACK) - { - int alength= *a++; - end= a+alength; - } - a= end; - break; - case HA_KEYTYPE_INT8: - case HA_KEYTYPE_SHORT_INT: - case HA_KEYTYPE_USHORT_INT: - case HA_KEYTYPE_LONG_INT: - case HA_KEYTYPE_ULONG_INT: - case HA_KEYTYPE_INT24: - case HA_KEYTYPE_UINT24: -#ifdef HAVE_LONG_LONG - case HA_KEYTYPE_LONGLONG: - case HA_KEYTYPE_ULONGLONG: -#endif - case HA_KEYTYPE_FLOAT: - case HA_KEYTYPE_DOUBLE: - a= end; - break; - case HA_KEYTYPE_END: /* purecov: inspected */ - /* keep compiler happy */ - DBUG_ASSERT(0); - break; - } - } - return keyseg; -} - - - -/* - Register handler error messages for usage with my_error() - - NOTES - This is safe to call multiple times as my_error_register() - will ignore calls to register already registered error numbers. -*/ - -static const char **get_handler_error_messages() -{ - return handler_error_messages; -} - -void my_handler_error_register(void) -{ - /* - If you got compilation error here about compile_time_assert array, check - that every HA_ERR_xxx constant has a corresponding error message in - handler_error_messages[] list (check mysys/ma_handler_errors.h and - include/my_base.h). - */ - compile_time_assert(HA_ERR_FIRST + array_elements(handler_error_messages) == - HA_ERR_LAST + 1); - my_error_register(get_handler_error_messages, HA_ERR_FIRST, - HA_ERR_FIRST+ array_elements(handler_error_messages)-1); -} - - -void my_handler_error_unregister(void) -{ - my_error_unregister(HA_ERR_FIRST, - HA_ERR_FIRST+ array_elements(handler_error_messages)-1); -} diff --git a/deps/mysqllite/mysys/my_handler_errors.h b/deps/mysqllite/mysys/my_handler_errors.h deleted file mode 100644 index e4e62f47fedcca..00000000000000 --- a/deps/mysqllite/mysys/my_handler_errors.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef MYSYS_MY_HANDLER_ERRORS_INCLUDED -#define MYSYS_MY_HANDLER_ERRORS_INCLUDED - -/* - Errors a handler can give you -*/ - -static const char *handler_error_messages[]= -{ - "Didn't find key on read or update", - "Duplicate key on write or update", - "Internal (unspecified) error in handler", - "Someone has changed the row since it was read (while the table was locked to prevent it)", - "Wrong index given to function", - "Undefined handler error 125", - "Index file is crashed", - "Record file is crashed", - "Out of memory in engine", - "Undefined handler error 129", - "Incorrect file format", - "Command not supported by database", - "Old database file", - "No record read before update", - "Record was already deleted (or record file crashed)", - "No more room in record file", - "No more room in index file", - "No more records (read after end of file)", - "Unsupported extension used for table", - "Too big row", - "Wrong create options", - "Duplicate unique key or constraint on write or update", - "Unknown character set used in table", - "Conflicting table definitions in sub-tables of MERGE table", - "Table is crashed and last repair failed", - "Table was marked as crashed and should be repaired", - "Lock timed out; Retry transaction", - "Lock table is full; Restart program with a larger locktable", - "Updates are not allowed under a read only transactions", - "Lock deadlock; Retry transaction", - "Foreign key constraint is incorrectly formed", - "Cannot add a child row", - "Cannot delete a parent row", - "No savepoint with that name", - "Non unique key block size", - "The table does not exist in engine", - "The table already existed in storage engine", - "Could not connect to storage engine", - "Unexpected null pointer found when using spatial index", - "The table changed in storage engine", - "There's no partition in table for the given value", - "Row-based binlogging of row failed", - "Index needed in foreign key constraint", - "Upholding foreign key constraints would lead to a duplicate key error in " - "some other table", - "Table needs to be upgraded before it can be used", - "Table is read only", - "Failed to get next auto increment value", - "Failed to set row auto increment value", - "Unknown (generic) error from engine", - "Record is the same", - "It is not possible to log this statement", - "The event was corrupt, leading to illegal data being read", - "The table is of a new format not supported by this version", - "The event could not be processed no other hanlder error happened", - "Got a fatal error during initialzaction of handler", - "File to short; Expected more data in file", - "Read page with wrong checksum", - "Too many active concurrent transactions" -}; - -#endif /* MYSYS_MY_HANDLER_ERRORS_INCLUDED */ diff --git a/deps/mysqllite/mysys/my_init.c b/deps/mysqllite/mysys/my_init.c deleted file mode 100644 index 9b0939c1c759e9..00000000000000 --- a/deps/mysqllite/mysys/my_init.c +++ /dev/null @@ -1,607 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "my_static.h" -#include "mysys_err.h" -#include -#include -#include -#ifdef __WIN__ -#ifdef _MSC_VER -#include -#include -/* WSAStartup needs winsock library*/ -#pragma comment(lib, "ws2_32") -#endif -my_bool have_tcpip=0; -static void my_win_init(void); -static my_bool win32_init_tcp_ip(); -#else -#define my_win_init() -#endif - -#define SCALE_SEC 100 -#define SCALE_USEC 10000 - -my_bool my_init_done= 0; -/** True if @c my_basic_init() has been called. */ -my_bool my_basic_init_done= 0; -uint mysys_usage_id= 0; /* Incremented for each my_init() */ -ulong my_thread_stack_size= 65536; - -static ulong atoi_octal(const char *str) -{ - long int tmp; - while (*str && my_isspace(&my_charset_latin1, *str)) - str++; - str2int(str, - (*str == '0' ? 8 : 10), /* Octalt or decimalt */ - 0, INT_MAX, &tmp); - return (ulong) tmp; -} - -MYSQL_FILE *mysql_stdin= NULL; -static MYSQL_FILE instrumented_stdin; - -/** - Perform a limited initialisation of mysys. - This initialisation is sufficient to: - - allocate memory, - - read configuration files, - - parse command lines arguments. - To complete the mysys initialisation, - call my_init(). - @return 0 on success -*/ -my_bool my_basic_init(void) -{ - char * str; - - if (my_basic_init_done) - return 0; - my_basic_init_done= 1; - - mysys_usage_id++; - my_umask= 0660; /* Default umask for new files */ - my_umask_dir= 0700; /* Default umask for new directories */ - - /* Default creation of new files */ - if ((str= getenv("UMASK")) != 0) - my_umask= (int) (atoi_octal(str) | 0600); - /* Default creation of new dir's */ - if ((str= getenv("UMASK_DIR")) != 0) - my_umask_dir= (int) (atoi_octal(str) | 0700); - - init_glob_errs(); - - instrumented_stdin.m_file= stdin; - instrumented_stdin.m_psi= NULL; /* not yet instrumented */ - mysql_stdin= & instrumented_stdin; - - if (my_thread_global_init()) - return 1; - -#if defined(SAFE_MUTEX) - safe_mutex_global_init(); /* Must be called early */ -#endif - -#if defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX) - fastmutex_global_init(); /* Must be called early */ -#endif - -#if defined(HAVE_PTHREAD_INIT) - pthread_init(); /* Must be called before DBUG_ENTER */ -#endif - if (my_thread_basic_global_init()) - return 1; - - /* $HOME is needed early to parse configuration files located in ~/ */ - if ((home_dir= getenv("HOME")) != 0) - home_dir= intern_filename(home_dir_buff, home_dir); - - return 0; -} - - -/* - Init my_sys functions and my_sys variabels - - SYNOPSIS - my_init() - - RETURN - 0 ok - 1 Couldn't initialize environment -*/ - -my_bool my_init(void) -{ - if (my_init_done) - return 0; - - my_init_done= 1; - - if (my_basic_init()) - return 1; - - if (my_thread_global_init()) - return 1; - - { - DBUG_ENTER("my_init"); - DBUG_PROCESS((char*) (my_progname ? my_progname : "unknown")); - my_win_init(); - DBUG_PRINT("exit", ("home: '%s'", home_dir)); -#ifdef __WIN__ - win32_init_tcp_ip(); -#endif - DBUG_RETURN(0); - } -} /* my_init */ - - - /* End my_sys */ - -void my_end(int infoflag) -{ - /* - this code is suboptimal to workaround a bug in - Sun CC: Sun C++ 5.6 2004/06/02 for x86, and should not be - optimized until this compiler is not in use anymore - */ - FILE *info_file= DBUG_FILE; - my_bool print_info= (info_file != stderr); - - if (!my_init_done) - return; - - /* - We do not use DBUG_ENTER here, as after cleanup DBUG is no longer - operational, so we cannot use DBUG_RETURN. - */ - DBUG_PRINT("info",("Shutting down: infoflag: %d print_info: %d", - infoflag, print_info)); - if (!info_file) - { - info_file= stderr; - print_info= 0; - } - - if ((infoflag & MY_CHECK_ERROR) || print_info) - - { /* Test if some file is left open */ - if (my_file_opened | my_stream_opened) - { - char ebuff[512]; - my_snprintf(ebuff, sizeof(ebuff), EE(EE_OPEN_WARNING), - my_file_opened, my_stream_opened); - my_message_stderr(EE_OPEN_WARNING, ebuff, ME_BELL); - DBUG_PRINT("error", ("%s", ebuff)); - my_print_open_files(); - } - } - free_charsets(); - my_error_unregister_all(); - my_once_free(); - - if ((infoflag & MY_GIVE_INFO) || print_info) - { -#ifdef HAVE_GETRUSAGE - struct rusage rus; -#ifdef HAVE_purify - /* Purify assumes that rus is uninitialized after getrusage call */ - bzero((char*) &rus, sizeof(rus)); -#endif - if (!getrusage(RUSAGE_SELF, &rus)) - fprintf(info_file,"\n\ -User time %.2f, System time %.2f\n\ -Maximum resident set size %ld, Integral resident set size %ld\n\ -Non-physical pagefaults %ld, Physical pagefaults %ld, Swaps %ld\n\ -Blocks in %ld out %ld, Messages in %ld out %ld, Signals %ld\n\ -Voluntary context switches %ld, Involuntary context switches %ld\n", - (rus.ru_utime.tv_sec * SCALE_SEC + - rus.ru_utime.tv_usec / SCALE_USEC) / 100.0, - (rus.ru_stime.tv_sec * SCALE_SEC + - rus.ru_stime.tv_usec / SCALE_USEC) / 100.0, - rus.ru_maxrss, rus.ru_idrss, - rus.ru_minflt, rus.ru_majflt, - rus.ru_nswap, rus.ru_inblock, rus.ru_oublock, - rus.ru_msgsnd, rus.ru_msgrcv, rus.ru_nsignals, - rus.ru_nvcsw, rus.ru_nivcsw); -#endif -#if defined(__WIN__) && defined(_MSC_VER) - _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE ); - _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDERR ); - _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE ); - _CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDERR ); - _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE ); - _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDERR ); - _CrtCheckMemory(); - _CrtDumpMemoryLeaks(); -#endif - } - - if (!(infoflag & MY_DONT_FREE_DBUG)) - { - DBUG_END(); /* Must be done before my_thread_end */ - } - - my_thread_end(); - my_thread_global_end(); -#if defined(SAFE_MUTEX) - /* - Check on destroying of mutexes. A few may be left that will get cleaned - up by C++ destructors - */ - safe_mutex_end((infoflag & (MY_GIVE_INFO | MY_CHECK_ERROR)) ? stderr : - (FILE *) 0); -#endif /* defined(SAFE_MUTEX) */ - -#ifdef __WIN__ - if (have_tcpip) - WSACleanup(); -#endif /* __WIN__ */ - - my_init_done=0; - my_basic_init_done= 0; -} /* my_end */ - - -#ifdef __WIN__ - - -/* - my_parameter_handler - - Invalid parameter handler we will use instead of the one "baked" - into the CRT for MSC v8. This one just prints out what invalid - parameter was encountered. By providing this routine, routines like - lseek will return -1 when we expect them to instead of crash. -*/ - -void my_parameter_handler(const wchar_t * expression, const wchar_t * function, - const wchar_t * file, unsigned int line, - uintptr_t pReserved) -{ - DBUG_PRINT("my",("Expression: %s function: %s file: %s, line: %d", - expression, function, file, line)); -} - - -#ifdef __MSVC_RUNTIME_CHECKS -#include - -/* Turn off runtime checks for 'handle_rtc_failure' */ -#pragma runtime_checks("", off) - -/* - handle_rtc_failure - Catch the RTC error and dump it to stderr -*/ - -int handle_rtc_failure(int err_type, const char *file, int line, - const char* module, const char *format, ...) -{ - va_list args; - va_start(args, format); - fprintf(stderr, "Error:"); - vfprintf(stderr, format, args); - fprintf(stderr, " At %s:%d\n", file, line); - va_end(args); - (void) fflush(stderr); - - return 0; /* Error is handled */ -} -#pragma runtime_checks("", restore) -#endif - -#define OFFSET_TO_EPOC ((__int64) 134774 * 24 * 60 * 60 * 1000 * 1000 * 10) -#define MS 10000000 - -static void win_init_time(void) -{ - /* The following is used by time functions */ - FILETIME ft; - LARGE_INTEGER li, t_cnt; - - DBUG_ASSERT(sizeof(LARGE_INTEGER) == sizeof(query_performance_frequency)); - - if (QueryPerformanceFrequency((LARGE_INTEGER *)&query_performance_frequency) == 0) - query_performance_frequency= 0; - else - { - GetSystemTimeAsFileTime(&ft); - li.LowPart= ft.dwLowDateTime; - li.HighPart= ft.dwHighDateTime; - query_performance_offset= li.QuadPart-OFFSET_TO_EPOC; - QueryPerformanceCounter(&t_cnt); - query_performance_offset-= (t_cnt.QuadPart / - query_performance_frequency * MS + - t_cnt.QuadPart % - query_performance_frequency * MS / - query_performance_frequency); - } -} - - -/* - Open HKEY_LOCAL_MACHINE\SOFTWARE\MySQL and set any strings found - there as environment variables -*/ -static void win_init_registry(void) -{ - HKEY key_handle; - - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)"SOFTWARE\\MySQL", - 0, KEY_READ, &key_handle) == ERROR_SUCCESS) - { - LONG ret; - DWORD index= 0; - DWORD type; - char key_name[256], key_data[1024]; - DWORD key_name_len= sizeof(key_name) - 1; - DWORD key_data_len= sizeof(key_data) - 1; - - while ((ret= RegEnumValue(key_handle, index++, - key_name, &key_name_len, - NULL, &type, (LPBYTE)&key_data, - &key_data_len)) != ERROR_NO_MORE_ITEMS) - { - char env_string[sizeof(key_name) + sizeof(key_data) + 2]; - - if (ret == ERROR_MORE_DATA) - { - /* Registry value larger than 'key_data', skip it */ - DBUG_PRINT("error", ("Skipped registry value that was too large")); - } - else if (ret == ERROR_SUCCESS) - { - if (type == REG_SZ) - { - strxmov(env_string, key_name, "=", key_data, NullS); - - /* variable for putenv must be allocated ! */ - putenv(strdup(env_string)) ; - } - } - else - { - /* Unhandled error, break out of loop */ - break; - } - - key_name_len= sizeof(key_name) - 1; - key_data_len= sizeof(key_data) - 1; - } - - RegCloseKey(key_handle); - } -} - - -static void my_win_init(void) -{ - DBUG_ENTER("my_win_init"); - -#if defined(_MSC_VER) -#if _MSC_VER < 1300 - /* - Clear the OS system variable TZ and avoid the 100% CPU usage - Only for old versions of Visual C++ - */ - _putenv("TZ="); -#endif -#if _MSC_VER >= 1400 - /* this is required to make crt functions return -1 appropriately */ - _set_invalid_parameter_handler(my_parameter_handler); -#endif -#endif - -#ifdef __MSVC_RUNTIME_CHECKS - /* - Install handler to send RTC (Runtime Error Check) warnings - to log file - */ - _RTC_SetErrorFunc(handle_rtc_failure); -#endif - - _tzset(); - - win_init_time(); - win_init_registry(); - - DBUG_VOID_RETURN; -} - - -/*------------------------------------------------------------------ - Name: CheckForTcpip| Desc: checks if tcpip has been installed on system - According to Microsoft Developers documentation the first registry - entry should be enough to check if TCP/IP is installed, but as expected - this doesn't work on all Win32 machines :( -------------------------------------------------------------------*/ - -#define TCPIPKEY "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters" -#define WINSOCK2KEY "SYSTEM\\CurrentControlSet\\Services\\Winsock2\\Parameters" -#define WINSOCKKEY "SYSTEM\\CurrentControlSet\\Services\\Winsock\\Parameters" - -static my_bool win32_have_tcpip(void) -{ - HKEY hTcpipRegKey; - if (RegOpenKeyEx ( HKEY_LOCAL_MACHINE, TCPIPKEY, 0, KEY_READ, - &hTcpipRegKey) != ERROR_SUCCESS) - { - if (RegOpenKeyEx ( HKEY_LOCAL_MACHINE, WINSOCK2KEY, 0, KEY_READ, - &hTcpipRegKey) != ERROR_SUCCESS) - { - if (RegOpenKeyEx ( HKEY_LOCAL_MACHINE, WINSOCKKEY, 0, KEY_READ, - &hTcpipRegKey) != ERROR_SUCCESS) - if (!getenv("HAVE_TCPIP") || have_tcpip) /* Provide a workaround */ - return (FALSE); - } - } - RegCloseKey ( hTcpipRegKey); - return (TRUE); -} - - -static my_bool win32_init_tcp_ip() -{ - if (win32_have_tcpip()) - { - WORD wVersionRequested = MAKEWORD( 2, 2 ); - WSADATA wsaData; - /* Be a good citizen: maybe another lib has already initialised - sockets, so dont clobber them unless necessary */ - if (WSAStartup( wVersionRequested, &wsaData )) - { - /* Load failed, maybe because of previously loaded - incompatible version; try again */ - WSACleanup( ); - if (!WSAStartup( wVersionRequested, &wsaData )) - have_tcpip=1; - } - else - { - if (wsaData.wVersion != wVersionRequested) - { - /* Version is no good, try again */ - WSACleanup( ); - if (!WSAStartup( wVersionRequested, &wsaData )) - have_tcpip=1; - } - else - have_tcpip=1; - } - } - return(0); -} -#endif /* __WIN__ */ - -#ifdef HAVE_PSI_INTERFACE - -#if !defined(HAVE_PREAD) && !defined(_WIN32) -PSI_mutex_key key_my_file_info_mutex; -#endif /* !defined(HAVE_PREAD) && !defined(_WIN32) */ - -#if !defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R) -PSI_mutex_key key_LOCK_localtime_r; -#endif /* !defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R) */ - -#ifndef HAVE_GETHOSTBYNAME_R -PSI_mutex_key key_LOCK_gethostbyname_r; -#endif /* HAVE_GETHOSTBYNAME_R */ - -PSI_mutex_key key_BITMAP_mutex, key_IO_CACHE_append_buffer_lock, - key_IO_CACHE_SHARE_mutex, key_KEY_CACHE_cache_lock, key_LOCK_alarm, - key_my_thread_var_mutex, key_THR_LOCK_charset, key_THR_LOCK_heap, - key_THR_LOCK_isam, key_THR_LOCK_lock, key_THR_LOCK_malloc, - key_THR_LOCK_mutex, key_THR_LOCK_myisam, key_THR_LOCK_net, - key_THR_LOCK_open, key_THR_LOCK_threads, key_THR_LOCK_time, - key_TMPDIR_mutex, key_THR_LOCK_myisam_mmap; - -static PSI_mutex_info all_mysys_mutexes[]= -{ -#if !defined(HAVE_PREAD) && !defined(_WIN32) - { &key_my_file_info_mutex, "st_my_file_info:mutex", 0}, -#endif /* !defined(HAVE_PREAD) && !defined(_WIN32) */ -#if !defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R) - { &key_LOCK_localtime_r, "LOCK_localtime_r", PSI_FLAG_GLOBAL}, -#endif /* !defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R) */ -#ifndef HAVE_GETHOSTBYNAME_R - { &key_LOCK_gethostbyname_r, "LOCK_gethostbyname_r", PSI_FLAG_GLOBAL}, -#endif /* HAVE_GETHOSTBYNAME_R */ - { &key_BITMAP_mutex, "BITMAP::mutex", 0}, - { &key_IO_CACHE_append_buffer_lock, "IO_CACHE::append_buffer_lock", 0}, - { &key_IO_CACHE_SHARE_mutex, "IO_CACHE::SHARE_mutex", 0}, - { &key_KEY_CACHE_cache_lock, "KEY_CACHE::cache_lock", 0}, - { &key_LOCK_alarm, "LOCK_alarm", PSI_FLAG_GLOBAL}, - { &key_my_thread_var_mutex, "my_thread_var::mutex", 0}, - { &key_THR_LOCK_charset, "THR_LOCK_charset", PSI_FLAG_GLOBAL}, - { &key_THR_LOCK_heap, "THR_LOCK_heap", PSI_FLAG_GLOBAL}, - { &key_THR_LOCK_isam, "THR_LOCK_isam", PSI_FLAG_GLOBAL}, - { &key_THR_LOCK_lock, "THR_LOCK_lock", PSI_FLAG_GLOBAL}, - { &key_THR_LOCK_malloc, "THR_LOCK_malloc", PSI_FLAG_GLOBAL}, - { &key_THR_LOCK_mutex, "THR_LOCK::mutex", 0}, - { &key_THR_LOCK_myisam, "THR_LOCK_myisam", PSI_FLAG_GLOBAL}, - { &key_THR_LOCK_net, "THR_LOCK_net", PSI_FLAG_GLOBAL}, - { &key_THR_LOCK_open, "THR_LOCK_open", PSI_FLAG_GLOBAL}, - { &key_THR_LOCK_threads, "THR_LOCK_threads", PSI_FLAG_GLOBAL}, - { &key_THR_LOCK_time, "THR_LOCK_time", PSI_FLAG_GLOBAL}, - { &key_TMPDIR_mutex, "TMPDIR_mutex", PSI_FLAG_GLOBAL}, - { &key_THR_LOCK_myisam_mmap, "THR_LOCK_myisam_mmap", PSI_FLAG_GLOBAL} -}; - -PSI_cond_key key_COND_alarm, key_IO_CACHE_SHARE_cond, - key_IO_CACHE_SHARE_cond_writer, key_my_thread_var_suspend, - key_THR_COND_threads; - -static PSI_cond_info all_mysys_conds[]= -{ - { &key_COND_alarm, "COND_alarm", PSI_FLAG_GLOBAL}, - { &key_IO_CACHE_SHARE_cond, "IO_CACHE_SHARE::cond", 0}, - { &key_IO_CACHE_SHARE_cond_writer, "IO_CACHE_SHARE::cond_writer", 0}, - { &key_my_thread_var_suspend, "my_thread_var::suspend", 0}, - { &key_THR_COND_threads, "THR_COND_threads", 0} -}; - -#ifdef USE_ALARM_THREAD -PSI_thread_key key_thread_alarm; - -static PSI_thread_info all_mysys_threads[]= -{ - { &key_thread_alarm, "alarm", PSI_FLAG_GLOBAL} -}; -#endif /* USE_ALARM_THREAD */ - -#ifdef HUGETLB_USE_PROC_MEMINFO -PSI_file_key key_file_proc_meminfo; -#endif /* HUGETLB_USE_PROC_MEMINFO */ -PSI_file_key key_file_charset, key_file_cnf; - -static PSI_file_info all_mysys_files[]= -{ -#ifdef HUGETLB_USE_PROC_MEMINFO - { &key_file_proc_meminfo, "proc_meminfo", 0}, -#endif /* HUGETLB_USE_PROC_MEMINFO */ - { &key_file_charset, "charset", 0}, - { &key_file_cnf, "cnf", 0} -}; - -void my_init_mysys_psi_keys() -{ - const char* category= "mysys"; - int count; - - if (PSI_server == NULL) - return; - - count= sizeof(all_mysys_mutexes)/sizeof(all_mysys_mutexes[0]); - PSI_server->register_mutex(category, all_mysys_mutexes, count); - - count= sizeof(all_mysys_conds)/sizeof(all_mysys_conds[0]); - PSI_server->register_cond(category, all_mysys_conds, count); - -#ifdef USE_ALARM_THREAD - count= sizeof(all_mysys_threads)/sizeof(all_mysys_threads[0]); - PSI_server->register_thread(category, all_mysys_threads, count); -#endif /* USE_ALARM_THREAD */ - - count= sizeof(all_mysys_files)/sizeof(all_mysys_files[0]); - PSI_server->register_file(category, all_mysys_files, count); -} -#endif /* HAVE_PSI_INTERFACE */ - diff --git a/deps/mysqllite/mysys/my_largepage.c b/deps/mysqllite/mysys/my_largepage.c deleted file mode 100644 index 9f5ab01a2b72a0..00000000000000 --- a/deps/mysqllite/mysys/my_largepage.c +++ /dev/null @@ -1,166 +0,0 @@ -/* Copyright (C) 2004 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" - -#ifdef HAVE_LARGE_PAGES - -#ifdef HAVE_SYS_IPC_H -#include -#endif - -#ifdef HAVE_SYS_SHM_H -#include -#endif - -static uint my_get_large_page_size_int(void); -static uchar* my_large_malloc_int(size_t size, myf my_flags); -static my_bool my_large_free_int(uchar* ptr); - -/* Gets the size of large pages from the OS */ - -uint my_get_large_page_size(void) -{ - uint size; - DBUG_ENTER("my_get_large_page_size"); - - if (!(size = my_get_large_page_size_int())) - fprintf(stderr, "Warning: Failed to determine large page size\n"); - - DBUG_RETURN(size); -} - -/* - General large pages allocator. - Tries to allocate memory from large pages pool and falls back to - my_malloc_lock() in case of failure -*/ - -uchar* my_large_malloc(size_t size, myf my_flags) -{ - uchar* ptr; - DBUG_ENTER("my_large_malloc"); - - if (my_use_large_pages && my_large_page_size) - { - if ((ptr = my_large_malloc_int(size, my_flags)) != NULL) - DBUG_RETURN(ptr); - if (my_flags & MY_WME) - fprintf(stderr, "Warning: Using conventional memory pool\n"); - } - - DBUG_RETURN(my_malloc_lock(size, my_flags)); -} - -/* - General large pages deallocator. - Tries to deallocate memory as if it was from large pages pool and falls back - to my_free_lock() in case of failure - */ - -void my_large_free(uchar* ptr) -{ - DBUG_ENTER("my_large_free"); - - /* - my_large_free_int() can only fail if ptr was not allocated with - my_large_malloc_int(), i.e. my_malloc_lock() was used so we should free it - with my_free_lock() - */ - if (!my_use_large_pages || !my_large_page_size || !my_large_free_int(ptr)) - my_free_lock(ptr); - - DBUG_VOID_RETURN; -} - -#ifdef HUGETLB_USE_PROC_MEMINFO -/* Linux-specific function to determine the size of large pages */ - -uint my_get_large_page_size_int(void) -{ - MYSQL_FILE *f; - uint size = 0; - char buf[256]; - DBUG_ENTER("my_get_large_page_size_int"); - - if (!(f= mysql_file_fopen(key_file_proc_meminfo, "/proc/meminfo", - O_RDONLY, MYF(MY_WME)))) - goto finish; - - while (mysql_file_fgets(buf, sizeof(buf), f)) - if (sscanf(buf, "Hugepagesize: %u kB", &size)) - break; - - mysql_file_fclose(f, MYF(MY_WME)); - -finish: - DBUG_RETURN(size * 1024); -} -#endif /* HUGETLB_USE_PROC_MEMINFO */ - -#if HAVE_DECL_SHM_HUGETLB -/* Linux-specific large pages allocator */ - -uchar* my_large_malloc_int(size_t size, myf my_flags) -{ - int shmid; - uchar* ptr; - struct shmid_ds buf; - DBUG_ENTER("my_large_malloc_int"); - - /* Align block size to my_large_page_size */ - size= MY_ALIGN(size, (size_t) my_large_page_size); - - shmid = shmget(IPC_PRIVATE, size, SHM_HUGETLB | SHM_R | SHM_W); - if (shmid < 0) - { - if (my_flags & MY_WME) - fprintf(stderr, - "Warning: Failed to allocate %lu bytes from HugeTLB memory." - " errno %d\n", (ulong) size, errno); - - DBUG_RETURN(NULL); - } - - ptr = (uchar*) shmat(shmid, NULL, 0); - if (ptr == (uchar *) -1) - { - if (my_flags& MY_WME) - fprintf(stderr, "Warning: Failed to attach shared memory segment," - " errno %d\n", errno); - shmctl(shmid, IPC_RMID, &buf); - - DBUG_RETURN(NULL); - } - - /* - Remove the shared memory segment so that it will be automatically freed - after memory is detached or process exits - */ - shmctl(shmid, IPC_RMID, &buf); - - DBUG_RETURN(ptr); -} - -/* Linux-specific large pages deallocator */ - -my_bool my_large_free_int(uchar *ptr) -{ - DBUG_ENTER("my_large_free_int"); - DBUG_RETURN(shmdt(ptr) == 0); -} -#endif /* HAVE_DECL_SHM_HUGETLB */ - -#endif /* HAVE_LARGE_PAGES */ diff --git a/deps/mysqllite/mysys/my_lib.c b/deps/mysqllite/mysys/my_lib.c deleted file mode 100644 index 06f9521a66473a..00000000000000 --- a/deps/mysqllite/mysys/my_lib.c +++ /dev/null @@ -1,424 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* TODO: check for overun of memory for names. */ - -#include "mysys_priv.h" -#include -#include /* Structs used by my_dir,includes sys/types */ -#include "mysys_err.h" -#if defined(HAVE_DIRENT_H) -# include -# define NAMLEN(dirent) strlen((dirent)->d_name) -#else -# define dirent direct -# define NAMLEN(dirent) (dirent)->d_namlen -# if defined(HAVE_SYS_NDIR_H) -# include -# endif -# if defined(HAVE_SYS_DIR_H) -# include -# endif -# if defined(HAVE_NDIR_H) -# include -# endif -# if defined(_WIN32) -# ifdef __BORLANDC__ -# include -# endif -# endif -#endif - -#if defined(HAVE_READDIR_R) -#define READDIR(A,B,C) ((errno=readdir_r(A,B,&C)) != 0 || !C) -#else -#define READDIR(A,B,C) (!(C=readdir(A))) -#endif - -/* - We are assuming that directory we are reading is either has less than - 100 files and so can be read in one initial chunk or has more than 1000 - files and so big increment are suitable. -*/ -#define ENTRIES_START_SIZE (8192/sizeof(FILEINFO)) -#define ENTRIES_INCREMENT (65536/sizeof(FILEINFO)) -#define NAMES_START_SIZE 32768 - - -static int comp_names(struct fileinfo *a,struct fileinfo *b); - - - /* We need this because program don't know with malloc we used */ - -void my_dirend(MY_DIR *buffer) -{ - DBUG_ENTER("my_dirend"); - if (buffer) - { - delete_dynamic((DYNAMIC_ARRAY*)((char*)buffer + - ALIGN_SIZE(sizeof(MY_DIR)))); - free_root((MEM_ROOT*)((char*)buffer + ALIGN_SIZE(sizeof(MY_DIR)) + - ALIGN_SIZE(sizeof(DYNAMIC_ARRAY))), MYF(0)); - my_free(buffer); - } - DBUG_VOID_RETURN; -} /* my_dirend */ - - - /* Compare in sort of filenames */ - -static int comp_names(struct fileinfo *a, struct fileinfo *b) -{ - return (strcmp(a->name,b->name)); -} /* comp_names */ - - -#if !defined(_WIN32) - -MY_DIR *my_dir(const char *path, myf MyFlags) -{ - char *buffer; - MY_DIR *result= 0; - FILEINFO finfo; - DYNAMIC_ARRAY *dir_entries_storage; - MEM_ROOT *names_storage; - DIR *dirp; - struct dirent *dp; - char tmp_path[FN_REFLEN+1],*tmp_file; - char dirent_tmp[sizeof(struct dirent)+_POSIX_PATH_MAX+1]; - - DBUG_ENTER("my_dir"); - DBUG_PRINT("my",("path: '%s' MyFlags: %d",path,MyFlags)); - -#if !defined(HAVE_READDIR_R) - mysql_mutex_lock(&THR_LOCK_open); -#endif - - dirp = opendir(directory_file_name(tmp_path,(char *) path)); -#if defined(__amiga__) - if ((dirp->dd_fd) < 0) /* Directory doesn't exists */ - goto error; -#endif - if (dirp == NULL || - ! (buffer= my_malloc(ALIGN_SIZE(sizeof(MY_DIR)) + - ALIGN_SIZE(sizeof(DYNAMIC_ARRAY)) + - sizeof(MEM_ROOT), MyFlags))) - goto error; - - dir_entries_storage= (DYNAMIC_ARRAY*)(buffer + ALIGN_SIZE(sizeof(MY_DIR))); - names_storage= (MEM_ROOT*)(buffer + ALIGN_SIZE(sizeof(MY_DIR)) + - ALIGN_SIZE(sizeof(DYNAMIC_ARRAY))); - - if (my_init_dynamic_array(dir_entries_storage, sizeof(FILEINFO), - ENTRIES_START_SIZE, ENTRIES_INCREMENT)) - { - my_free(buffer); - goto error; - } - init_alloc_root(names_storage, NAMES_START_SIZE, NAMES_START_SIZE); - - /* MY_DIR structure is allocated and completly initialized at this point */ - result= (MY_DIR*)buffer; - - tmp_file=strend(tmp_path); - - dp= (struct dirent*) dirent_tmp; - - while (!(READDIR(dirp,(struct dirent*) dirent_tmp,dp))) - { - if (!(finfo.name= strdup_root(names_storage, dp->d_name))) - goto error; - - if (MyFlags & MY_WANT_STAT) - { - if (!(finfo.mystat= (MY_STAT*)alloc_root(names_storage, - sizeof(MY_STAT)))) - goto error; - - bzero(finfo.mystat, sizeof(MY_STAT)); - (void) strmov(tmp_file,dp->d_name); - (void) my_stat(tmp_path, finfo.mystat, MyFlags); - if (!(finfo.mystat->st_mode & MY_S_IREAD)) - continue; - } - else - finfo.mystat= NULL; - - if (push_dynamic(dir_entries_storage, (uchar*)&finfo)) - goto error; - } - - (void) closedir(dirp); -#if !defined(HAVE_READDIR_R) - mysql_mutex_unlock(&THR_LOCK_open); -#endif - result->dir_entry= (FILEINFO *)dir_entries_storage->buffer; - result->number_off_files= dir_entries_storage->elements; - - if (!(MyFlags & MY_DONT_SORT)) - my_qsort((void *) result->dir_entry, result->number_off_files, - sizeof(FILEINFO), (qsort_cmp) comp_names); - DBUG_RETURN(result); - - error: -#if !defined(HAVE_READDIR_R) - mysql_mutex_unlock(&THR_LOCK_open); -#endif - my_errno=errno; - if (dirp) - (void) closedir(dirp); - my_dirend(result); - if (MyFlags & (MY_FAE | MY_WME)) - my_error(EE_DIR,MYF(ME_BELL+ME_WAITTANG),path,my_errno); - DBUG_RETURN((MY_DIR *) NULL); -} /* my_dir */ - - -/* - * Convert from directory name to filename. - * On UNIX, it's simple: just make sure there is a terminating / - - * Returns pointer to dst; - */ - -char * directory_file_name (char * dst, const char *src) -{ - /* Process as Unix format: just remove test the final slash. */ - char *end; - - if (src[0] == 0) - src= (char*) "."; /* Use empty as current */ - end=strmov(dst, src); - if (end[-1] != FN_LIBCHAR) - { - end[0]=FN_LIBCHAR; /* Add last '/' */ - end[1]='\0'; - } - return dst; -} - -#else - -/* -***************************************************************************** -** Read long filename using windows rutines -***************************************************************************** -*/ - -MY_DIR *my_dir(const char *path, myf MyFlags) -{ - char *buffer; - MY_DIR *result= 0; - FILEINFO finfo; - DYNAMIC_ARRAY *dir_entries_storage; - MEM_ROOT *names_storage; -#ifdef __BORLANDC__ - struct ffblk find; -#else - struct _finddata_t find; -#endif - ushort mode; - char tmp_path[FN_REFLEN],*tmp_file,attrib; -#ifdef _WIN64 - __int64 handle; -#else - long handle; -#endif - DBUG_ENTER("my_dir"); - DBUG_PRINT("my",("path: '%s' stat: %d MyFlags: %d",path,MyFlags)); - - /* Put LIB-CHAR as last path-character if not there */ - tmp_file=tmp_path; - if (!*path) - *tmp_file++ ='.'; /* From current dir */ - tmp_file= strnmov(tmp_file, path, FN_REFLEN-5); - if (tmp_file[-1] == FN_DEVCHAR) - *tmp_file++= '.'; /* From current dev-dir */ - if (tmp_file[-1] != FN_LIBCHAR) - *tmp_file++ =FN_LIBCHAR; - tmp_file[0]='*'; /* Windows needs this !??? */ - tmp_file[1]='.'; - tmp_file[2]='*'; - tmp_file[3]='\0'; - - if (!(buffer= my_malloc(ALIGN_SIZE(sizeof(MY_DIR)) + - ALIGN_SIZE(sizeof(DYNAMIC_ARRAY)) + - sizeof(MEM_ROOT), MyFlags))) - goto error; - - dir_entries_storage= (DYNAMIC_ARRAY*)(buffer + ALIGN_SIZE(sizeof(MY_DIR))); - names_storage= (MEM_ROOT*)(buffer + ALIGN_SIZE(sizeof(MY_DIR)) + - ALIGN_SIZE(sizeof(DYNAMIC_ARRAY))); - - if (my_init_dynamic_array(dir_entries_storage, sizeof(FILEINFO), - ENTRIES_START_SIZE, ENTRIES_INCREMENT)) - { - my_free(buffer); - goto error; - } - init_alloc_root(names_storage, NAMES_START_SIZE, NAMES_START_SIZE); - - /* MY_DIR structure is allocated and completly initialized at this point */ - result= (MY_DIR*)buffer; - -#ifdef __BORLANDC__ - if ((handle= findfirst(tmp_path,&find,0)) == -1L) -#else - if ((handle=_findfirst(tmp_path,&find)) == -1L) -#endif - { - DBUG_PRINT("info", ("findfirst returned error, errno: %d", errno)); - if (errno != EINVAL) - goto error; - /* - Could not read the directory, no read access. - Probably because by "chmod -r". - continue and return zero files in dir - */ - } - else - { - - do - { -#ifdef __BORLANDC__ - attrib= find.ff_attrib; -#else - attrib= find.attrib; - /* - Do not show hidden and system files which Windows sometimes create. - Note. Because Borland's findfirst() is called with the third - argument = 0 hidden/system files are excluded from the search. - */ - if (attrib & (_A_HIDDEN | _A_SYSTEM)) - continue; -#endif -#ifdef __BORLANDC__ - if (!(finfo.name= strdup_root(names_storage, find.ff_name))) - goto error; -#else - if (!(finfo.name= strdup_root(names_storage, find.name))) - goto error; -#endif - if (MyFlags & MY_WANT_STAT) - { - if (!(finfo.mystat= (MY_STAT*)alloc_root(names_storage, - sizeof(MY_STAT)))) - goto error; - - bzero(finfo.mystat, sizeof(MY_STAT)); -#ifdef __BORLANDC__ - finfo.mystat->st_size=find.ff_fsize; -#else - finfo.mystat->st_size=find.size; -#endif - mode= MY_S_IREAD; - if (!(attrib & _A_RDONLY)) - mode|= MY_S_IWRITE; - if (attrib & _A_SUBDIR) - mode|= MY_S_IFDIR; - finfo.mystat->st_mode= mode; -#ifdef __BORLANDC__ - finfo.mystat->st_mtime= ((uint32) find.ff_ftime); -#else - finfo.mystat->st_mtime= ((uint32) find.time_write); -#endif - } - else - finfo.mystat= NULL; - - if (push_dynamic(dir_entries_storage, (uchar*)&finfo)) - goto error; - } -#ifdef __BORLANDC__ - while (findnext(&find) == 0); -#else - while (_findnext(handle,&find) == 0); - - _findclose(handle); -#endif - } - - result->dir_entry= (FILEINFO *)dir_entries_storage->buffer; - result->number_off_files= dir_entries_storage->elements; - - if (!(MyFlags & MY_DONT_SORT)) - my_qsort((void *) result->dir_entry, result->number_off_files, - sizeof(FILEINFO), (qsort_cmp) comp_names); - DBUG_PRINT("exit", ("found %d files", result->number_off_files)); - DBUG_RETURN(result); -error: - my_errno=errno; -#ifndef __BORLANDC__ - if (handle != -1) - _findclose(handle); -#endif - my_dirend(result); - if (MyFlags & MY_FAE+MY_WME) - my_error(EE_DIR,MYF(ME_BELL+ME_WAITTANG),path,errno); - DBUG_RETURN((MY_DIR *) NULL); -} /* my_dir */ - -#endif /* _WIN32 */ - -/**************************************************************************** -** File status -** Note that MY_STAT is assumed to be same as struct stat -****************************************************************************/ - - -int my_fstat(File Filedes, MY_STAT *stat_area, - myf MyFlags __attribute__((unused))) -{ - DBUG_ENTER("my_fstat"); - DBUG_PRINT("my",("fd: %d MyFlags: %d", Filedes, MyFlags)); -#ifdef _WIN32 - DBUG_RETURN(my_win_fstat(Filedes, stat_area)); -#else - DBUG_RETURN(fstat(Filedes, (struct stat *) stat_area)); -#endif -} - - -MY_STAT *my_stat(const char *path, MY_STAT *stat_area, myf my_flags) -{ - int m_used; - DBUG_ENTER("my_stat"); - DBUG_PRINT("my", ("path: '%s' stat_area: 0x%lx MyFlags: %d", path, - (long) stat_area, my_flags)); - - if ((m_used= (stat_area == NULL))) - if (!(stat_area= (MY_STAT *) my_malloc(sizeof(MY_STAT), my_flags))) - goto error; -#ifndef _WIN32 - if (! stat((char *) path, (struct stat *) stat_area) ) - DBUG_RETURN(stat_area); -#else - if (! my_win_stat(path, stat_area) ) - DBUG_RETURN(stat_area); -#endif - DBUG_PRINT("error",("Got errno: %d from stat", errno)); - my_errno= errno; - if (m_used) /* Free if new area */ - my_free(stat_area); - -error: - if (my_flags & (MY_FAE+MY_WME)) - { - my_error(EE_STAT, MYF(ME_BELL+ME_WAITTANG),path,my_errno); - DBUG_RETURN((MY_STAT *) NULL); - } - DBUG_RETURN((MY_STAT *) NULL); -} /* my_stat */ diff --git a/deps/mysqllite/mysys/my_libwrap.c b/deps/mysqllite/mysys/my_libwrap.c deleted file mode 100644 index e72334ba806ea4..00000000000000 --- a/deps/mysqllite/mysys/my_libwrap.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - This is needed to be able to compile with original libwrap header - files that don't have the prototypes -*/ - -#include -#include - -#ifdef HAVE_LIBWRAP - -void my_fromhost(struct request_info *req) -{ - fromhost(req); -} - -int my_hosts_access(struct request_info *req) -{ - return hosts_access(req); -} - -char *my_eval_client(struct request_info *req) -{ - return eval_client(req); -} - -#endif /* HAVE_LIBWRAP */ diff --git a/deps/mysqllite/mysys/my_lock.c b/deps/mysqllite/mysys/my_lock.c deleted file mode 100644 index 49c94ea838c82f..00000000000000 --- a/deps/mysqllite/mysys/my_lock.c +++ /dev/null @@ -1,223 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include -#undef MY_HOW_OFTEN_TO_ALARM -#define MY_HOW_OFTEN_TO_ALARM ((int) my_time_to_wait_for_lock) -#ifdef NO_ALARM_LOOP -#undef NO_ALARM_LOOP -#endif -#include - -#ifdef _WIN32 -#define WIN_LOCK_INFINITE -1 -#define WIN_LOCK_SLEEP_MILLIS 100 - -static int win_lock(File fd, int locktype, my_off_t start, my_off_t length, - int timeout_sec) -{ - LARGE_INTEGER liOffset,liLength; - DWORD dwFlags; - OVERLAPPED ov= {0}; - HANDLE hFile= (HANDLE)my_get_osfhandle(fd); - DWORD lastError= 0; - int i; - int timeout_millis= timeout_sec * 1000; - - DBUG_ENTER("win_lock"); - - liOffset.QuadPart= start; - liLength.QuadPart= length; - - ov.Offset= liOffset.LowPart; - ov.OffsetHigh= liOffset.HighPart; - - if (locktype == F_UNLCK) - { - if (UnlockFileEx(hFile, 0, liLength.LowPart, liLength.HighPart, &ov)) - DBUG_RETURN(0); - /* - For compatibility with fcntl implementation, ignore error, - if region was not locked - */ - if (GetLastError() == ERROR_NOT_LOCKED) - { - SetLastError(0); - DBUG_RETURN(0); - } - goto error; - } - else if (locktype == F_RDLCK) - /* read lock is mapped to a shared lock. */ - dwFlags= 0; - else - /* write lock is mapped to an exclusive lock. */ - dwFlags= LOCKFILE_EXCLUSIVE_LOCK; - - /* - Drop old lock first to avoid double locking. - During analyze of Bug#38133 (Myisamlog test fails on Windows) - I met the situation that the program myisamlog locked the file - exclusively, then additionally shared, then did one unlock, and - then blocked on an attempt to lock it exclusively again. - Unlocking before every lock fixed the problem. - Note that this introduces a race condition. When the application - wants to convert an exclusive lock into a shared one, it will now - first unlock the file and then lock it shared. A waiting exclusive - lock could step in here. For reasons described in Bug#38133 and - Bug#41124 (Server hangs on Windows with --external-locking after - INSERT...SELECT) and in the review thread at - http://lists.mysql.com/commits/60721 it seems to be the better - option than not to unlock here. - If one day someone notices a way how to do file lock type changes - on Windows without unlocking before taking the new lock, please - change this code accordingly to fix the race condition. - */ - if (!UnlockFileEx(hFile, 0, liLength.LowPart, liLength.HighPart, &ov) && - (GetLastError() != ERROR_NOT_LOCKED)) - goto error; - - if (timeout_sec == WIN_LOCK_INFINITE) - { - if (LockFileEx(hFile, dwFlags, 0, liLength.LowPart, liLength.HighPart, &ov)) - DBUG_RETURN(0); - goto error; - } - - dwFlags|= LOCKFILE_FAIL_IMMEDIATELY; - timeout_millis= timeout_sec * 1000; - /* Try lock in a loop, until the lock is acquired or timeout happens */ - for(i= 0; ;i+= WIN_LOCK_SLEEP_MILLIS) - { - if (LockFileEx(hFile, dwFlags, 0, liLength.LowPart, liLength.HighPart, &ov)) - DBUG_RETURN(0); - - if (GetLastError() != ERROR_LOCK_VIOLATION) - goto error; - - if (i >= timeout_millis) - break; - Sleep(WIN_LOCK_SLEEP_MILLIS); - } - - /* timeout */ - errno= EAGAIN; - DBUG_RETURN(-1); - -error: - my_osmaperr(GetLastError()); - DBUG_RETURN(-1); -} -#endif - - - -/* - Lock a part of a file - - RETURN VALUE - 0 Success - -1 An error has occured and 'my_errno' is set - to indicate the actual error code. -*/ - -int my_lock(File fd, int locktype, my_off_t start, my_off_t length, - myf MyFlags) -{ -#ifdef HAVE_FCNTL - int value; - ALARM_VARIABLES; -#endif - - DBUG_ENTER("my_lock"); - DBUG_PRINT("my",("fd: %d Op: %d start: %ld Length: %ld MyFlags: %d", - fd,locktype,(long) start,(long) length,MyFlags)); - if (my_disable_locking) - DBUG_RETURN(0); - -#if defined(_WIN32) - { - int timeout_sec; - if (MyFlags & MY_DONT_WAIT) - timeout_sec= 0; - else - timeout_sec= WIN_LOCK_INFINITE; - - if (win_lock(fd, locktype, start, length, timeout_sec) == 0) - DBUG_RETURN(0); - } -#else -#if defined(HAVE_FCNTL) - { - struct flock lock; - - lock.l_type= (short) locktype; - lock.l_whence= SEEK_SET; - lock.l_start= (off_t) start; - lock.l_len= (off_t) length; - - if (MyFlags & MY_DONT_WAIT) - { - if (fcntl(fd,F_SETLK,&lock) != -1) /* Check if we can lock */ - DBUG_RETURN(0); /* Ok, file locked */ - DBUG_PRINT("info",("Was locked, trying with alarm")); - ALARM_INIT; - while ((value=fcntl(fd,F_SETLKW,&lock)) && ! ALARM_TEST && - errno == EINTR) - { /* Setup again so we don`t miss it */ - ALARM_REINIT; - } - ALARM_END; - if (value != -1) - DBUG_RETURN(0); - if (errno == EINTR) - errno=EAGAIN; - } - else if (fcntl(fd,F_SETLKW,&lock) != -1) /* Wait until a lock */ - DBUG_RETURN(0); - } -#else - if (MyFlags & MY_SEEK_NOT_DONE) - { - if (my_seek(fd,start,MY_SEEK_SET,MYF(MyFlags & ~MY_SEEK_NOT_DONE)) - == MY_FILEPOS_ERROR) - { - /* - If an error has occured in my_seek then we will already - have an error code in my_errno; Just return error code. - */ - DBUG_RETURN(-1); - } - } - if (lockf(fd,locktype,length) != -1) - DBUG_RETURN(0); -#endif /* HAVE_FCNTL */ -#endif /* HAVE_LOCKING */ - - /* We got an error. We don't want EACCES errors */ - my_errno=(errno == EACCES) ? EAGAIN : errno ? errno : -1; - - if (MyFlags & MY_WME) - { - if (locktype == F_UNLCK) - my_error(EE_CANTUNLOCK,MYF(ME_BELL+ME_WAITTANG),my_errno); - else - my_error(EE_CANTLOCK,MYF(ME_BELL+ME_WAITTANG),my_errno); - } - DBUG_PRINT("error",("my_errno: %d (%d)",my_errno,errno)); - DBUG_RETURN(-1); -} /* my_lock */ diff --git a/deps/mysqllite/mysys/my_lockmem.c b/deps/mysqllite/mysys/my_lockmem.c deleted file mode 100644 index a37db6b2089f62..00000000000000 --- a/deps/mysqllite/mysys/my_lockmem.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Alloc a block of locked memory */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include - -#ifdef HAVE_MLOCK -#include - -struct st_mem_list -{ - LIST list; - uchar *page; - uint size; -}; - -LIST *mem_list; - -uchar *my_malloc_lock(uint size,myf MyFlags) -{ - int success; - uint pagesize=sysconf(_SC_PAGESIZE); - uchar *ptr; - struct st_mem_list *element; - DBUG_ENTER("my_malloc_lock"); - - size=((size-1) & ~(pagesize-1))+pagesize; - if (!(ptr=memalign(pagesize,size))) - { - if (MyFlags & (MY_FAE+MY_WME)) - my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),size); - DBUG_RETURN(0); - } - success = mlock((uchar*) ptr,size); - if (success != 0 && geteuid() == 0) - { - DBUG_PRINT("warning",("Failed to lock memory. errno %d\n", - errno)); - fprintf(stderr, "Warning: Failed to lock memory. errno %d\n", - errno); - } - else - { - /* Add block in a list for munlock */ - if (!(element=(struct st_mem_list*) my_malloc(sizeof(*element),MyFlags))) - { - (void) munlock((uchar*) ptr,size); - free(ptr); - DBUG_RETURN(0); - } - element->list.data=(uchar*) element; - element->page=ptr; - element->size=size; - mysql_mutex_lock(&THR_LOCK_malloc); - mem_list=list_add(mem_list,&element->list); - mysql_mutex_unlock(&THR_LOCK_malloc); - } - DBUG_RETURN(ptr); -} - - -void my_free_lock(uchar *ptr) -{ - LIST *list; - struct st_mem_list *element=0; - - mysql_mutex_lock(&THR_LOCK_malloc); - for (list=mem_list ; list ; list=list->next) - { - element=(struct st_mem_list*) list->data; - if (ptr == element->page) - { /* Found locked mem */ - (void) munlock((uchar*) ptr,element->size); - mem_list=list_delete(mem_list,list); - break; - } - } - mysql_mutex_unlock(&THR_LOCK_malloc); - my_free(element); - free(ptr); /* Free even if not locked */ -} - -#endif /* HAVE_MLOCK */ diff --git a/deps/mysqllite/mysys/my_malloc.c b/deps/mysqllite/mysys/my_malloc.c deleted file mode 100644 index fc2dc98c3c5307..00000000000000 --- a/deps/mysqllite/mysys/my_malloc.c +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include - -/** - Allocate a sized block of memory. - - @param size The size of the memory block in bytes. - @param flags Failure action modifiers (bitmasks). - - @return A pointer to the allocated memory block, or NULL on failure. -*/ -void *my_malloc(size_t size, myf my_flags) -{ - void* point; - DBUG_ENTER("my_malloc"); - DBUG_PRINT("my",("size: %lu my_flags: %d", (ulong) size, my_flags)); - - /* Safety */ - if (!size) - size=1; - - point= malloc(size); - DBUG_EXECUTE_IF("simulate_out_of_memory", - { - free(point); - point= NULL; - }); - - if (point == NULL) - { - my_errno=errno; - if (my_flags & MY_FAE) - error_handler_hook=fatal_error_handler_hook; - if (my_flags & (MY_FAE+MY_WME)) - my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG+ME_NOREFRESH),size); - DBUG_EXECUTE_IF("simulate_out_of_memory", - DBUG_SET("-d,simulate_out_of_memory");); - if (my_flags & MY_FAE) - exit(1); - } - else if (my_flags & MY_ZEROFILL) - bzero(point, size); - DBUG_PRINT("exit",("ptr: %p", point)); - DBUG_RETURN(point); -} - - -/** - @brief wrapper around realloc() - - @param oldpoint pointer to currently allocated area - @param size new size requested, must be >0 - @param my_flags flags - - @note if size==0 realloc() may return NULL; my_realloc() treats this as an - error which is not the intention of realloc() -*/ -void *my_realloc(void *oldpoint, size_t size, myf my_flags) -{ - void *point; - DBUG_ENTER("my_realloc"); - DBUG_PRINT("my",("ptr: %p size: %lu my_flags: %d", oldpoint, - (ulong) size, my_flags)); - - DBUG_ASSERT(size > 0); - if (!oldpoint && (my_flags & MY_ALLOW_ZERO_PTR)) - DBUG_RETURN(my_malloc(size, my_flags)); -#ifdef USE_HALLOC - if (!(point = malloc(size))) - { - if (my_flags & MY_FREE_ON_ERROR) - my_free(oldpoint); - if (my_flags & MY_HOLD_ON_ERROR) - DBUG_RETURN(oldpoint); - my_errno=errno; - if (my_flags & MY_FAE+MY_WME) - my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),size); - } - else - { - memcpy(point,oldpoint,size); - free(oldpoint); - } -#else - if ((point= realloc(oldpoint, size)) == NULL) - { - if (my_flags & MY_FREE_ON_ERROR) - my_free(oldpoint); - if (my_flags & MY_HOLD_ON_ERROR) - DBUG_RETURN(oldpoint); - my_errno=errno; - if (my_flags & (MY_FAE+MY_WME)) - my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG), size); - } -#endif - DBUG_PRINT("exit",("ptr: %p", point)); - DBUG_RETURN(point); -} - - -/** - Free memory allocated with my_malloc. - - @remark Relies on free being able to handle a NULL argument. - - @param ptr Pointer to the memory allocated by my_malloc. -*/ -void my_free(void *ptr) -{ - DBUG_ENTER("my_free"); - DBUG_PRINT("my",("ptr: %p", ptr)); - free(ptr); - DBUG_VOID_RETURN; -} - - -void *my_memdup(const void *from, size_t length, myf my_flags) -{ - void *ptr; - if ((ptr= my_malloc(length,my_flags)) != 0) - memcpy(ptr, from, length); - return ptr; -} - - -char *my_strdup(const char *from, myf my_flags) -{ - char *ptr; - size_t length= strlen(from)+1; - if ((ptr= (char*) my_malloc(length, my_flags))) - memcpy(ptr, from, length); - return ptr; -} - - -char *my_strndup(const char *from, size_t length, myf my_flags) -{ - char *ptr; - if ((ptr= (char*) my_malloc(length+1, my_flags))) - { - memcpy(ptr, from, length); - ptr[length]= 0; - } - return ptr; -} - diff --git a/deps/mysqllite/mysys/my_memmem.c b/deps/mysqllite/mysys/my_memmem.c deleted file mode 100644 index c000f14bc66451..00000000000000 --- a/deps/mysqllite/mysys/my_memmem.c +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include - -/* - my_memmem, port of a GNU extension. - - Returns a pointer to the beginning of the substring, needle, or NULL if the - substring is not found in haystack. -*/ - -void *my_memmem(const void *haystack, size_t haystacklen, - const void *needle, size_t needlelen) -{ - const unsigned char *cursor; - const unsigned char *last_possible_needle_location = - (unsigned char *)haystack + haystacklen - needlelen; - - /* Easy answers */ - if (needlelen > haystacklen) return(NULL); - if (needle == NULL) return(NULL); - if (haystack == NULL) return(NULL); - if (needlelen == 0) return(NULL); - if (haystacklen == 0) return(NULL); - - for (cursor = haystack; cursor <= last_possible_needle_location; cursor++) { - if (memcmp(needle, cursor, needlelen) == 0) { - return((void *) cursor); - } - } - return(NULL); -} - - - -#ifdef MAIN -#include - -int main(int argc, char *argv[]) { - char haystack[10], needle[3]; - - memmove(haystack, "0123456789", 10); - - memmove(needle, "no", 2); - assert(my_memmem(haystack, 10, needle, 2) == NULL); - - memmove(needle, "345", 3); - assert(my_memmem(haystack, 10, needle, 3) != NULL); - - memmove(needle, "789", 3); - assert(my_memmem(haystack, 10, needle, 3) != NULL); - assert(my_memmem(haystack, 9, needle, 3) == NULL); - - memmove(needle, "012", 3); - assert(my_memmem(haystack, 10, needle, 3) != NULL); - assert(my_memmem(NULL, 10, needle, 3) == NULL); - - assert(my_memmem(NULL, 10, needle, 3) == NULL); - assert(my_memmem(haystack, 0, needle, 3) == NULL); - assert(my_memmem(haystack, 10, NULL, 3) == NULL); - assert(my_memmem(haystack, 10, needle, 0) == NULL); - - assert(my_memmem(haystack, 1, needle, 3) == NULL); - - printf("success\n"); - return(0); -} - -#endif diff --git a/deps/mysqllite/mysys/my_mess.c b/deps/mysqllite/mysys/my_mess.c deleted file mode 100644 index 513afe39054b8a..00000000000000 --- a/deps/mysqllite/mysys/my_mess.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" - -void my_message_stderr(uint error __attribute__((unused)), - const char *str, myf MyFlags) -{ - DBUG_ENTER("my_message_stderr"); - DBUG_PRINT("enter",("message: %s",str)); - (void) fflush(stdout); - if (MyFlags & ME_BELL) - (void) fputc('\007', stderr); - if (my_progname) - { - (void)fputs(my_progname,stderr); (void)fputs(": ",stderr); - } - (void)fputs(str,stderr); - (void)fputc('\n',stderr); - (void)fflush(stderr); - DBUG_VOID_RETURN; -} diff --git a/deps/mysqllite/mysys/my_mkdir.c b/deps/mysqllite/mysys/my_mkdir.c deleted file mode 100644 index 676c6c1cd51405..00000000000000 --- a/deps/mysqllite/mysys/my_mkdir.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include -#include -#ifdef __WIN__ -#include -#endif - -int my_mkdir(const char *dir, int Flags, myf MyFlags) -{ - DBUG_ENTER("my_dir"); - DBUG_PRINT("enter",("dir: %s",dir)); - -#if defined(__WIN__) - if (mkdir((char*) dir)) -#else - if (mkdir((char*) dir, Flags & my_umask_dir)) -#endif - { - my_errno=errno; - DBUG_PRINT("error",("error %d when creating direcory %s",my_errno,dir)); - if (MyFlags & (MY_FFNF | MY_FAE | MY_WME)) - my_error(EE_CANT_MKDIR, MYF(ME_BELL+ME_WAITTANG), dir, my_errno); - DBUG_RETURN(-1); - } - DBUG_RETURN(0); -} diff --git a/deps/mysqllite/mysys/my_mmap.c b/deps/mysqllite/mysys/my_mmap.c deleted file mode 100644 index 82ee1562bc2626..00000000000000 --- a/deps/mysqllite/mysys/my_mmap.c +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" - -#ifdef HAVE_SYS_MMAN_H - -/* - system msync() only syncs mmap'ed area to fs cache. - fsync() is required to really sync to disc -*/ -int my_msync(int fd, void *addr, size_t len, int flags) -{ - msync(addr, len, flags); - return my_sync(fd, MYF(0)); -} - -#elif defined(_WIN32) - -static SECURITY_ATTRIBUTES mmap_security_attributes= - {sizeof(SECURITY_ATTRIBUTES), 0, TRUE}; - -void *my_mmap(void *addr, size_t len, int prot, - int flags, File fd, my_off_t offset) -{ - HANDLE hFileMap; - LPVOID ptr; - HANDLE hFile= (HANDLE)my_get_osfhandle(fd); - DBUG_ENTER("my_mmap"); - DBUG_PRINT("mysys", ("map fd: %d", fd)); - - if (hFile == INVALID_HANDLE_VALUE) - DBUG_RETURN(MAP_FAILED); - - hFileMap=CreateFileMapping(hFile, &mmap_security_attributes, - PAGE_READWRITE, 0, (DWORD) len, NULL); - if (hFileMap == 0) - DBUG_RETURN(MAP_FAILED); - - ptr=MapViewOfFile(hFileMap, - prot & PROT_WRITE ? FILE_MAP_WRITE : FILE_MAP_READ, - (DWORD)(offset >> 32), (DWORD)offset, len); - - /* - MSDN explicitly states that it's possible to close File Mapping Object - even when a view is not unmapped - then the object will be held open - implicitly until unmap, as every view stores internally a handler of - a corresponding File Mapping Object - */ - CloseHandle(hFileMap); - - if (ptr) - { - DBUG_PRINT("mysys", ("mapped addr: %p", ptr)); - DBUG_RETURN(ptr); - } - - DBUG_RETURN(MAP_FAILED); -} - -int my_munmap(void *addr, size_t len) -{ - DBUG_ENTER("my_munmap"); - DBUG_PRINT("mysys", ("unmap addr: %p", addr)); - DBUG_RETURN(UnmapViewOfFile(addr) ? 0 : -1); -} - -int my_msync(int fd, void *addr, size_t len, int flags) -{ - return FlushViewOfFile(addr, len) ? 0 : -1; -} - -#else -#warning "no mmap!" -#endif - diff --git a/deps/mysqllite/mysys/my_new.cc b/deps/mysqllite/mysys/my_new.cc deleted file mode 100644 index 7da54ffac87329..00000000000000 --- a/deps/mysqllite/mysys/my_new.cc +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - This is a replacement of new/delete operators to be used when compiling - with gcc 3.0.x to avoid including libstdc++ -*/ - -#include "mysys_priv.h" - -#ifdef USE_MYSYS_NEW - -void *operator new (size_t sz) -{ - return (void *) malloc (sz ? sz : 1); -} - -void *operator new[] (size_t sz) -{ - return (void *) malloc (sz ? sz : 1); -} - -void operator delete (void *ptr) -{ - if (ptr) - free(ptr); -} - -void operator delete[] (void *ptr) throw () -{ - if (ptr) - free(ptr); -} - -C_MODE_START - -int __cxa_pure_virtual() -{ - assert(! "Aborted: pure virtual method called."); - return 0; -} - -C_MODE_END - -#endif /* USE_MYSYS_NEW */ - diff --git a/deps/mysqllite/mysys/my_once.c b/deps/mysqllite/mysys/my_once.c deleted file mode 100644 index 32d07802028a98..00000000000000 --- a/deps/mysqllite/mysys/my_once.c +++ /dev/null @@ -1,119 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Not MT-SAFE */ - -#include "mysys_priv.h" -#include "my_static.h" -#include "mysys_err.h" -#include - -/* - Alloc for things we don't nend to free run-time (that only - should be free'd on exit) - - SYNOPSIS - my_once_alloc() - Size - MyFlags - - NOTES - No DBUG_ENTER... here to get smaller dbug-startup -*/ - -void* my_once_alloc(size_t Size, myf MyFlags) -{ - size_t get_size, max_left; - uchar* point; - reg1 USED_MEM *next; - reg2 USED_MEM **prev; - - Size= ALIGN_SIZE(Size); - prev= &my_once_root_block; - max_left=0; - for (next=my_once_root_block ; next && next->left < Size ; next= next->next) - { - if (next->left > max_left) - max_left=next->left; - prev= &next->next; - } - if (! next) - { /* Time to alloc new block */ - get_size= Size+ALIGN_SIZE(sizeof(USED_MEM)); - if (max_left*4 < my_once_extra && get_size < my_once_extra) - get_size=my_once_extra; /* Normal alloc */ - - if ((next = (USED_MEM*) malloc(get_size)) == 0) - { - my_errno=errno; - if (MyFlags & (MY_FAE+MY_WME)) - my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),get_size); - return((uchar*) 0); - } - DBUG_PRINT("test",("my_once_malloc %lu byte malloced", (ulong) get_size)); - next->next= 0; - next->size= get_size; - next->left= get_size-ALIGN_SIZE(sizeof(USED_MEM)); - *prev=next; - } - point= (uchar*) ((char*) next+ (next->size-next->left)); - next->left-= Size; - - if (MyFlags & MY_ZEROFILL) - bzero(point, Size); - return((void*) point); -} /* my_once_alloc */ - - -char *my_once_strdup(const char *src,myf myflags) -{ - size_t len= strlen(src)+1; - uchar *dst= my_once_alloc(len, myflags); - if (dst) - memcpy(dst, src, len); - return (char*) dst; -} - - -void *my_once_memdup(const void *src, size_t len, myf myflags) -{ - uchar *dst= my_once_alloc(len, myflags); - if (dst) - memcpy(dst, src, len); - return dst; -} - - -/* - Deallocate everything that was allocated with my_once_alloc - - SYNOPSIS - my_once_free() -*/ - -void my_once_free(void) -{ - reg1 USED_MEM *next,*old; - DBUG_ENTER("my_once_free"); - - for (next=my_once_root_block ; next ; ) - { - old=next; next= next->next ; - free((uchar*) old); - } - my_once_root_block=0; - - DBUG_VOID_RETURN; -} /* my_once_free */ diff --git a/deps/mysqllite/mysys/my_open.c b/deps/mysqllite/mysys/my_open.c deleted file mode 100644 index 2aef97b3e34991..00000000000000 --- a/deps/mysqllite/mysys/my_open.c +++ /dev/null @@ -1,192 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include -#include - - -/* - Open a file - - SYNOPSIS - my_open() - FileName Fully qualified file name - Flags Read | write - MyFlags Special flags - - RETURN VALUE - File descriptor -*/ - -File my_open(const char *FileName, int Flags, myf MyFlags) - /* Path-name of file */ - /* Read | write .. */ - /* Special flags */ -{ - File fd; - DBUG_ENTER("my_open"); - DBUG_PRINT("my",("Name: '%s' Flags: %d MyFlags: %d", - FileName, Flags, MyFlags)); -#if defined(_WIN32) - fd= my_win_open(FileName, Flags); -#elif !defined(NO_OPEN_3) - fd = open(FileName, Flags, my_umask); /* Normal unix */ -#else - fd = open((char *) FileName, Flags); -#endif - - DBUG_RETURN(my_register_filename(fd, FileName, FILE_BY_OPEN, - EE_FILENOTFOUND, MyFlags)); -} /* my_open */ - - -/* - Close a file - - SYNOPSIS - my_close() - fd File sescriptor - myf Special Flags - -*/ - -int my_close(File fd, myf MyFlags) -{ - int err; - DBUG_ENTER("my_close"); - DBUG_PRINT("my",("fd: %d MyFlags: %d",fd, MyFlags)); - - mysql_mutex_lock(&THR_LOCK_open); -#ifndef _WIN32 - do - { - err= close(fd); - } while (err == -1 && errno == EINTR); -#else - err= my_win_close(fd); -#endif - if (err) - { - DBUG_PRINT("error",("Got error %d on close",err)); - my_errno=errno; - if (MyFlags & (MY_FAE | MY_WME)) - my_error(EE_BADCLOSE, MYF(ME_BELL+ME_WAITTANG),my_filename(fd),errno); - } - if ((uint) fd < my_file_limit && my_file_info[fd].type != UNOPEN) - { - my_free(my_file_info[fd].name); -#if !defined(HAVE_PREAD) && !defined(_WIN32) - mysql_mutex_destroy(&my_file_info[fd].mutex); -#endif - my_file_info[fd].type = UNOPEN; - } - my_file_opened--; - mysql_mutex_unlock(&THR_LOCK_open); - DBUG_RETURN(err); -} /* my_close */ - - -/* - Register file in my_file_info[] - - SYNOPSIS - my_register_filename() - fd File number opened, -1 if error on open - FileName File name - type_file_type How file was created - error_message_number Error message number if caller got error (fd == -1) - MyFlags Flags for my_close() - - RETURN - -1 error - # Filenumber - -*/ - -File my_register_filename(File fd, const char *FileName, enum file_type - type_of_file, uint error_message_number, myf MyFlags) -{ - DBUG_ENTER("my_register_filename"); - if ((int) fd >= MY_FILE_MIN) - { - if ((uint) fd >= my_file_limit) - { -#if !defined(HAVE_PREAD) - my_errno= EMFILE; -#else - thread_safe_increment(my_file_opened,&THR_LOCK_open); - DBUG_RETURN(fd); /* safeguard */ -#endif - } - else - { - mysql_mutex_lock(&THR_LOCK_open); - if ((my_file_info[fd].name = (char*) my_strdup(FileName,MyFlags))) - { - my_file_opened++; - my_file_total_opened++; - my_file_info[fd].type = type_of_file; -#if !defined(HAVE_PREAD) && !defined(_WIN32) - mysql_mutex_init(key_my_file_info_mutex, &my_file_info[fd].mutex, - MY_MUTEX_INIT_FAST); -#endif - mysql_mutex_unlock(&THR_LOCK_open); - DBUG_PRINT("exit",("fd: %d",fd)); - DBUG_RETURN(fd); - } - mysql_mutex_unlock(&THR_LOCK_open); - my_errno= ENOMEM; - } - (void) my_close(fd, MyFlags); - } - else - my_errno= errno; - - DBUG_PRINT("error",("Got error %d on open", my_errno)); - if (MyFlags & (MY_FFNF | MY_FAE | MY_WME)) - { - if (my_errno == EMFILE) - error_message_number= EE_OUT_OF_FILERESOURCES; - DBUG_PRINT("error",("print err: %d",error_message_number)); - my_error(error_message_number, MYF(ME_BELL+ME_WAITTANG), - FileName, my_errno); - } - DBUG_RETURN(-1); -} - - - - -#ifdef EXTRA_DEBUG - -void my_print_open_files(void) -{ - if (my_file_opened | my_stream_opened) - { - uint i; - for (i= 0 ; i < my_file_limit ; i++) - { - if (my_file_info[i].type != UNOPEN) - { - fprintf(stderr, EE(EE_FILE_NOT_CLOSED), my_file_info[i].name, i); - fputc('\n', stderr); - } - } - } -} - -#endif diff --git a/deps/mysqllite/mysys/my_port.c b/deps/mysqllite/mysys/my_port.c deleted file mode 100644 index 9ad333421ca6e6..00000000000000 --- a/deps/mysqllite/mysys/my_port.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2002 MySQL AB - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; version 2 - of the License. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -/* - Small functions to make code portable -*/ - -#include "mysys_priv.h" - -#ifdef _AIX - -/* - On AIX, at least with gcc 3.1, the expression - '(double) (ulonglong) var' doesn't always work for big unsigned - integers like '18446744073709551615'. The end result is that the - high bit is simply dropped. (probably bug in gcc optimizations) - Handling the conversion in a sub function seems to work. -*/ - - - -double my_ulonglong2double(unsigned long long nr) -{ - return (double) nr; -} -#endif /* _AIX */ diff --git a/deps/mysqllite/mysys/my_pread.c b/deps/mysqllite/mysys/my_pread.c deleted file mode 100644 index e006360c11bbb0..00000000000000 --- a/deps/mysqllite/mysys/my_pread.c +++ /dev/null @@ -1,206 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include "my_base.h" -#include -#include -#if defined (HAVE_PREAD) && !defined(_WIN32) -#include -#endif - - - -/* - Read a chunk of bytes from a file from a given position - - SYNOPSIOS - my_pread() - Filedes File decsriptor - Buffer Buffer to read data into - Count Number of bytes to read - offset Position to read from - MyFlags Flags - - NOTES - This differs from the normal pread() call in that we don't care - to set the position in the file back to the original position - if the system doesn't support pread(). - - RETURN - (size_t) -1 Error - # Number of bytes read -*/ - -size_t my_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset, - myf MyFlags) -{ - size_t readbytes; - int error= 0; -#if !defined (HAVE_PREAD) && !defined (_WIN32) - int save_errno; -#endif - DBUG_ENTER("my_pread"); - DBUG_PRINT("my",("fd: %d Seek: %llu Buffer: %p Count: %lu MyFlags: %d", - Filedes, (ulonglong)offset, Buffer, (ulong)Count, MyFlags)); - for (;;) - { - errno= 0; /* Linux, Windows don't reset this on EOF/success */ -#if !defined (HAVE_PREAD) && !defined (_WIN32) - mysql_mutex_lock(&my_file_info[Filedes].mutex); - readbytes= (uint) -1; - error= (lseek(Filedes, offset, MY_SEEK_SET) == (my_off_t) -1 || - (readbytes= read(Filedes, Buffer, Count)) != Count); - save_errno= errno; - mysql_mutex_unlock(&my_file_info[Filedes].mutex); - if (error) - errno= save_errno; -#else -#if defined(_WIN32) - readbytes= my_win_pread(Filedes, Buffer, Count, offset); -#else - readbytes= pread(Filedes, Buffer, Count, offset); -#endif - error= (readbytes != Count); -#endif - if(error) - { - my_errno= errno ? errno : -1; - if (errno == 0 || (readbytes != (size_t) -1 && - (MyFlags & (MY_NABP | MY_FNABP)))) - my_errno= HA_ERR_FILE_TOO_SHORT; - - DBUG_PRINT("warning",("Read only %d bytes off %u from %d, errno: %d", - (int) readbytes, (uint) Count,Filedes,my_errno)); - - if ((readbytes == 0 || readbytes == (size_t) -1) && errno == EINTR) - { - DBUG_PRINT("debug", ("my_pread() was interrupted and returned %d", - (int) readbytes)); - continue; /* Interrupted */ - } - - if (MyFlags & (MY_WME | MY_FAE | MY_FNABP)) - { - if (readbytes == (size_t) -1) - my_error(EE_READ, MYF(ME_BELL+ME_WAITTANG), - my_filename(Filedes),my_errno); - else if (MyFlags & (MY_NABP | MY_FNABP)) - my_error(EE_EOFERR, MYF(ME_BELL+ME_WAITTANG), - my_filename(Filedes),my_errno); - } - if (readbytes == (size_t) -1 || (MyFlags & (MY_FNABP | MY_NABP))) - DBUG_RETURN(MY_FILE_ERROR); /* Return with error */ - } - if (MyFlags & (MY_NABP | MY_FNABP)) - DBUG_RETURN(0); /* Read went ok; Return 0 */ - DBUG_RETURN(readbytes); /* purecov: inspected */ - } -} /* my_pread */ - - -/* - Write a chunk of bytes to a file at a given position - - SYNOPSIOS - my_pwrite() - Filedes File decsriptor - Buffer Buffer to write data from - Count Number of bytes to write - offset Position to write to - MyFlags Flags - - NOTES - This differs from the normal pwrite() call in that we don't care - to set the position in the file back to the original position - if the system doesn't support pwrite() - - RETURN - (size_t) -1 Error - # Number of bytes read -*/ - -size_t my_pwrite(File Filedes, const uchar *Buffer, size_t Count, - my_off_t offset, myf MyFlags) -{ - size_t writtenbytes, written; - uint errors; - - DBUG_ENTER("my_pwrite"); - DBUG_PRINT("my",("fd: %d Seek: %llu Buffer: %p Count: %lu MyFlags: %d", - Filedes, offset, Buffer, (ulong)Count, MyFlags)); - errors= 0; - written= 0; - - for (;;) - { -#if !defined (HAVE_PREAD) && !defined (_WIN32) - int error; - writtenbytes= (size_t) -1; - mysql_mutex_lock(&my_file_info[Filedes].mutex); - error= (lseek(Filedes, offset, MY_SEEK_SET) != (my_off_t) -1 && - (writtenbytes= write(Filedes, Buffer, Count)) == Count); - mysql_mutex_unlock(&my_file_info[Filedes].mutex); - if (error) - break; -#elif defined (_WIN32) - writtenbytes= my_win_pwrite(Filedes, Buffer, Count, offset); -#else - writtenbytes= pwrite(Filedes, Buffer, Count, offset); -#endif - if(writtenbytes == Count) - break; - my_errno= errno; - if (writtenbytes != (size_t) -1) - { - written+= writtenbytes; - Buffer+= writtenbytes; - Count-= writtenbytes; - offset+= writtenbytes; - } - DBUG_PRINT("error",("Write only %u bytes", (uint) writtenbytes)); -#ifndef NO_BACKGROUND - - if (my_thread_var->abort) - MyFlags&= ~ MY_WAIT_IF_FULL; /* End if aborted by user */ - - if ((my_errno == ENOSPC || my_errno == EDQUOT) && - (MyFlags & MY_WAIT_IF_FULL)) - { - wait_for_free_space(my_filename(Filedes), errors); - errors++; - continue; - } - if ((writtenbytes && writtenbytes != (size_t) -1) || my_errno == EINTR) - continue; /* Retry */ -#endif - if (MyFlags & (MY_NABP | MY_FNABP)) - { - if (MyFlags & (MY_WME | MY_FAE | MY_FNABP)) - { - my_error(EE_WRITE, MYF(ME_BELL | ME_WAITTANG), - my_filename(Filedes),my_errno); - } - DBUG_RETURN(MY_FILE_ERROR); /* Error on read */ - } - else - break; /* Return bytes written */ - } - DBUG_EXECUTE_IF("check", my_seek(Filedes, -1, SEEK_SET, MYF(0));); - if (MyFlags & (MY_NABP | MY_FNABP)) - DBUG_RETURN(0); /* Want only errors */ - DBUG_RETURN(writtenbytes+written); /* purecov: inspected */ -} /* my_pwrite */ diff --git a/deps/mysqllite/mysys/my_pthread.c b/deps/mysqllite/mysys/my_pthread.c deleted file mode 100644 index 150bde3fb33352..00000000000000 --- a/deps/mysqllite/mysys/my_pthread.c +++ /dev/null @@ -1,469 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Functions to get threads more portable */ - -#define DONT_REMAP_PTHREAD_FUNCTIONS - -#include "mysys_priv.h" -#include -#include -#include - -#if (defined(__BSD__) || defined(_BSDI_VERSION)) -#define SCHED_POLICY SCHED_RR -#else -#define SCHED_POLICY SCHED_OTHER -#endif - -uint thd_lib_detected= 0; - -/* To allow use of pthread_getspecific with two arguments */ - -#ifdef HAVE_NONPOSIX_PTHREAD_GETSPECIFIC -#undef pthread_getspecific - -void *my_pthread_getspecific_imp(pthread_key_t key) -{ - void *value; - if (pthread_getspecific(key,(void *) &value)) - return 0; - return value; -} -#endif - -/* - Some functions for RTS threads, AIX, Siemens Unix and UnixWare 7 - (and DEC OSF/1 3.2 too) -*/ - -int my_pthread_create_detached=1; - -#if defined(HAVE_NONPOSIX_SIGWAIT) || defined(HAVE_DEC_3_2_THREADS) - -int my_sigwait(const sigset_t *set,int *sig) -{ - int signal=sigwait((sigset_t*) set); - if (signal < 0) - return errno; - *sig=signal; - return 0; -} -#endif - -/* localtime_r for SCO 3.2V4.2 */ - -#if !defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R) - -extern mysql_mutex_t LOCK_localtime_r; - -#endif - -#if !defined(HAVE_LOCALTIME_R) -struct tm *localtime_r(const time_t *clock, struct tm *res) -{ - struct tm *tmp; - mysql_mutex_lock(&LOCK_localtime_r); - tmp=localtime(clock); - *res= *tmp; - mysql_mutex_unlock(&LOCK_localtime_r); - return res; -} -#endif - -#if !defined(HAVE_GMTIME_R) -/* - Reentrant version of standard gmtime() function. - Needed on some systems which don't implement it. -*/ - -struct tm *gmtime_r(const time_t *clock, struct tm *res) -{ - struct tm *tmp; - mysql_mutex_lock(&LOCK_localtime_r); - tmp= gmtime(clock); - *res= *tmp; - mysql_mutex_unlock(&LOCK_localtime_r); - return res; -} -#endif - -/**************************************************************************** -** Replacement of sigwait if the system doesn't have one (like BSDI 3.0) -** -** Note: -** This version of sigwait() is assumed to called in a loop so the signalmask -** is permanently modified to reflect the signal set. This is done to get -** a much faster implementation. -** -** This implementation isn't thread safe: It assumes that only one -** thread is using sigwait. -** -** If one later supplies a different signal mask, all old signals that -** was used before are unblocked and set to SIGDFL. -** -** Author: Gary Wisniewski , much modified by Monty -****************************************************************************/ - -#if !defined(HAVE_SIGWAIT) && !defined(sigwait) && !defined(__WIN__) && !defined(HAVE_rts_threads) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) - -#if !defined(DONT_USE_SIGSUSPEND) - -static sigset_t sigwait_set,rev_sigwait_set,px_recd; - -void px_handle_sig(int sig) -{ - sigaddset(&px_recd, sig); -} - - -void sigwait_setup(sigset_t *set) -{ - int i; - struct sigaction sact,sact1; - sigset_t unblock_mask; - - sact.sa_flags = 0; - sact.sa_handler = px_handle_sig; - memcpy(&sact.sa_mask, set, sizeof(*set)); /* handler isn't thread_safe */ - sigemptyset(&unblock_mask); - pthread_sigmask(SIG_UNBLOCK,(sigset_t*) 0,&rev_sigwait_set); - - for (i = 1; i <= sizeof(sigwait_set)*8; i++) - { - if (sigismember(set,i)) - { - sigdelset(&rev_sigwait_set,i); - if (!sigismember(&sigwait_set,i)) - sigaction(i, &sact, (struct sigaction*) 0); - } - else - { - sigdelset(&px_recd,i); /* Don't handle this */ - if (sigismember(&sigwait_set,i)) - { /* Remove the old handler */ - sigaddset(&unblock_mask,i); - sigdelset(&rev_sigwait_set,i); - sact1.sa_flags = 0; - sact1.sa_handler = SIG_DFL; - sigemptyset(&sact1.sa_mask); - sigaction(i, &sact1, 0); - } - } - } - memcpy(&sigwait_set, set, sizeof(*set)); - pthread_sigmask(SIG_BLOCK,(sigset_t*) set,(sigset_t*) 0); - pthread_sigmask(SIG_UNBLOCK,&unblock_mask,(sigset_t*) 0); -} - - -int sigwait(sigset_t *setp, int *sigp) -{ - if (memcmp(setp,&sigwait_set,sizeof(sigwait_set))) - sigwait_setup(setp); /* Init or change of set */ - - for (;;) - { - /* - This is a fast, not 100% portable implementation to find the signal. - Because the handler is blocked there should be at most 1 bit set, but - the specification on this is somewhat shady so we use a set instead a - single variable. - */ - - ulong *ptr= (ulong*) &px_recd; - ulong *end=ptr+sizeof(px_recd)/sizeof(ulong); - - for ( ; ptr != end ; ptr++) - { - if (*ptr) - { - ulong set= *ptr; - int found= (int) ((char*) ptr - (char*) &px_recd)*8+1; - while (!(set & 1)) - { - found++; - set>>=1; - } - *sigp=found; - sigdelset(&px_recd,found); - return 0; - } - } - sigsuspend(&rev_sigwait_set); - } - return 0; -} -#else /* !DONT_USE_SIGSUSPEND */ - -/**************************************************************************** -** Replacement of sigwait if the system doesn't have one (like BSDI 3.0) -** -** Note: -** This version of sigwait() is assumed to called in a loop so the signalmask -** is permanently modified to reflect the signal set. This is done to get -** a much faster implementation. -** -** This implementation uses a extra thread to handle the signals and one -** must always call sigwait() with the same signal mask! -** -** BSDI 3.0 NOTE: -** -** pthread_kill() doesn't work on a thread in a select() or sleep() loop? -** After adding the sleep to sigwait_thread, all signals are checked and -** delivered every second. This isn't that terrible performance vice, but -** someone should report this to BSDI and ask for a fix! -** Another problem is that when the sleep() ends, every select() in other -** threads are interrupted! -****************************************************************************/ - -static sigset_t pending_set; -static bool inited=0; -static pthread_cond_t COND_sigwait; -static pthread_mutex_t LOCK_sigwait; - - -void sigwait_handle_sig(int sig) -{ - pthread_mutex_lock(&LOCK_sigwait); - sigaddset(&pending_set, sig); - pthread_cond_signal(&COND_sigwait); /* inform sigwait() about signal */ - pthread_mutex_unlock(&LOCK_sigwait); -} - -void *sigwait_thread(void *set_arg) -{ - sigset_t *set=(sigset_t*) set_arg; - - int i; - struct sigaction sact; - sact.sa_flags = 0; - sact.sa_handler = sigwait_handle_sig; - memcpy(&sact.sa_mask, set, sizeof(*set)); /* handler isn't thread_safe */ - sigemptyset(&pending_set); - - for (i = 1; i <= sizeof(pending_set)*8; i++) - { - if (sigismember(set,i)) - { - sigaction(i, &sact, (struct sigaction*) 0); - } - } - /* Ensure that init_thr_alarm() is called */ - DBUG_ASSERT(thr_client_alarm); - sigaddset(set, thr_client_alarm); - pthread_sigmask(SIG_UNBLOCK,(sigset_t*) set,(sigset_t*) 0); - alarm_thread=pthread_self(); /* For thr_alarm */ - - for (;;) - { /* Wait for signals */ -#ifdef HAVE_NOT_BROKEN_SELECT - fd_set fd; - FD_ZERO(&fd); - select(0,&fd,0,0,0); -#else - sleep(1); /* Because of broken BSDI */ -#endif - } -} - - -int sigwait(sigset_t *setp, int *sigp) -{ - if (!inited) - { - pthread_attr_t thr_attr; - pthread_t sigwait_thread_id; - inited=1; - sigemptyset(&pending_set); - pthread_mutex_init(&LOCK_sigwait, MY_MUTEX_INIT_FAST); - pthread_cond_init(&COND_sigwait, NULL); - - pthread_attr_init(&thr_attr); - pthread_attr_setscope(&thr_attr,PTHREAD_SCOPE_PROCESS); - pthread_attr_setdetachstate(&thr_attr,PTHREAD_CREATE_DETACHED); - pthread_attr_setstacksize(&thr_attr,8196); - pthread_create(&sigwait_thread_id, &thr_attr, sigwait_thread, setp); - pthread_attr_destroy(&thr_attr); - } - - pthread_mutex_lock(&LOCK_sigwait); - for (;;) - { - ulong *ptr= (ulong*) &pending_set; - ulong *end=ptr+sizeof(pending_set)/sizeof(ulong); - - for ( ; ptr != end ; ptr++) - { - if (*ptr) - { - ulong set= *ptr; - int found= (int) ((char*) ptr - (char*) &pending_set)*8+1; - while (!(set & 1)) - { - found++; - set>>=1; - } - *sigp=found; - sigdelset(&pending_set,found); - pthread_mutex_unlock(&LOCK_sigwait); - return 0; - } - } - pthread_cond_wait(&COND_sigwait, &LOCK_sigwait); - } - return 0; -} - -#endif /* DONT_USE_SIGSUSPEND */ -#endif /* HAVE_SIGWAIT */ - - -/**************************************************************************** - The following functions fixes that all pthread functions should work - according to latest posix standard -****************************************************************************/ - -/* Undefined wrappers set my_pthread.h so that we call os functions */ -#undef pthread_mutex_init -#undef pthread_mutex_lock -#undef pthread_mutex_unlock -#undef pthread_mutex_destroy -#undef pthread_mutex_wait -#undef pthread_mutex_timedwait -#undef pthread_mutex_trylock -#undef pthread_mutex_t -#undef pthread_cond_init -#undef pthread_cond_wait -#undef pthread_cond_timedwait -#undef pthread_cond_t -#undef pthread_attr_getstacksize - -/***************************************************************************** -** Patches for AIX and DEC OSF/1 3.2 -*****************************************************************************/ - -#if defined(HAVE_NONPOSIX_PTHREAD_MUTEX_INIT) - -#include - -int my_pthread_mutex_init(pthread_mutex_t *mp, const pthread_mutexattr_t *attr) -{ - int error; - if (!attr) - error=pthread_mutex_init(mp,pthread_mutexattr_default); - else - error=pthread_mutex_init(mp,*attr); - return error; -} - -int my_pthread_cond_init(pthread_cond_t *mp, const pthread_condattr_t *attr) -{ - int error; - if (!attr) - error=pthread_cond_init(mp,pthread_condattr_default); - else - error=pthread_cond_init(mp,*attr); - return error; -} - -#endif - - -/***************************************************************************** - Patches for HPUX - We need these because the pthread_mutex.. code returns -1 on error, - instead of the error code. - - Note that currently we only remap pthread_ functions used by MySQL. - If we are depending on the value for some other pthread_xxx functions, - this has to be added here. -****************************************************************************/ - -#if defined(HPUX10) || defined(HAVE_BROKEN_PTHREAD_COND_TIMEDWAIT) - -int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, - struct timespec *abstime) -{ - int error=pthread_cond_timedwait(cond, mutex, abstime); - if (error == -1) /* Safety if the lib is fixed */ - { - if (!(error=errno)) - error= ETIMEDOUT; /* Can happen on HPUX */ - } - if (error == EAGAIN) /* Correct errno to Posix */ - error= ETIMEDOUT; - return error; -} -#endif - -#if defined(HPUX10) - -void my_pthread_attr_getstacksize(pthread_attr_t *connection_attrib, - size_t *stack_size) -{ - *stack_size= pthread_attr_getstacksize(*connection_attrib); -} -#endif - - -#ifdef HAVE_POSIX1003_4a_MUTEX -/* - In HP-UX-10.20 and other old Posix 1003.4a Draft 4 implementations - pthread_mutex_trylock returns 1 on success, not 0 like - pthread_mutex_lock - - From the HP-UX-10.20 man page: - RETURN VALUES - If the function fails, errno may be set to one of the following - values: - Return | Error | Description - _______|__________|_________________________________________ - 1 | | Successful completion. - 0 | | The mutex is locked; therefore, it was - | | not acquired. - -1 | [EINVAL] | The value specified by mutex is invalid. - -*/ - -/* - Convert pthread_mutex_trylock to return values according to latest POSIX - - RETURN VALUES - 0 If we are able successfully lock the mutex. - EBUSY Mutex was locked by another thread - # Other error number returned by pthread_mutex_trylock() - (Not likely) -*/ - -int my_pthread_mutex_trylock(pthread_mutex_t *mutex) -{ - int error= pthread_mutex_trylock(mutex); - if (error == 1) - return 0; /* Got lock on mutex */ - if (error == 0) /* Someon else is locking mutex */ - return EBUSY; - if (error == -1) /* Safety if the lib is fixed */ - error= errno; /* Probably invalid parameter */ - return error; -} -#endif /* HAVE_POSIX1003_4a_MUTEX */ - -/* Some help functions */ - -int pthread_dummy(int ret) -{ - return ret; -} diff --git a/deps/mysqllite/mysys/my_quick.c b/deps/mysqllite/mysys/my_quick.c deleted file mode 100644 index b93e7e17224eba..00000000000000 --- a/deps/mysqllite/mysys/my_quick.c +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Quicker interface to read & write. Used with my_nosys.h */ - -#include "mysys_priv.h" -#include "my_nosys.h" - - -#ifdef _WIN32 -extern size_t my_win_read(File Filedes,uchar *Buffer,size_t Count); -#endif - -size_t my_quick_read(File Filedes,uchar *Buffer,size_t Count,myf MyFlags) -{ - size_t readbytes; -#ifdef _WIN32 - readbytes= my_win_read(Filedes, Buffer, Count); -#else - readbytes= read(Filedes, Buffer, Count); -#endif - if(readbytes != Count) - { -#ifndef DBUG_OFF - if ((readbytes == 0 || readbytes == (size_t) -1) && errno == EINTR) - { - DBUG_PRINT("error", ("my_quick_read() was interrupted and returned %d" - ". This function does not retry the read!", - (int) readbytes)); - } -#endif - my_errno=errno; - return readbytes; - } - return (MyFlags & (MY_NABP | MY_FNABP)) ? 0 : readbytes; -} - - - -size_t my_quick_write(File Filedes, const uchar *Buffer, size_t Count) -{ -#ifdef _WIN32 - return my_win_write(Filedes, Buffer, Count); -#else - -#ifndef DBUG_OFF - size_t writtenbytes; -#endif - - if (( -#ifndef DBUG_OFF - writtenbytes = -#endif - (size_t) write(Filedes,Buffer,Count)) != Count) - { -#ifndef DBUG_OFF - if ((writtenbytes == 0 || writtenbytes == (size_t) -1) && errno == EINTR) - { - DBUG_PRINT("error", ("my_quick_write() was interrupted and returned %d" - ". This function does not retry the write!", - (int) writtenbytes)); - } -#endif - my_errno=errno; - return (size_t) -1; - } - return 0; -#endif -} diff --git a/deps/mysqllite/mysys/my_rdtsc.c b/deps/mysqllite/mysys/my_rdtsc.c deleted file mode 100644 index 2afe3ec31ddb77..00000000000000 --- a/deps/mysqllite/mysys/my_rdtsc.c +++ /dev/null @@ -1,962 +0,0 @@ -/* Copyright (C) 2008-2010 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - rdtsc3 -- multi-platform timer code - pgulutzan@mysql.com, 2005-08-29 - modified 2008-11-02 - - Functions: - - my_timer_cycles ulonglong cycles - my_timer_nanoseconds ulonglong nanoseconds - my_timer_microseconds ulonglong "microseconds" - my_timer_milliseconds ulonglong milliseconds - my_timer_ticks ulonglong ticks - my_timer_init initialization / test - - We'll call the first 5 functions (the ones that return - a ulonglong) "my_timer_xxx" functions. - Each my_timer_xxx function returns a 64-bit timing value - since an arbitrary 'epoch' start. Since the only purpose - is to determine elapsed times, wall-clock time-of-day - is not known and not relevant. - - The my_timer_init function is necessary for initializing. - It returns information (underlying routine name, - frequency, resolution, overhead) about all my_timer_xxx - functions. A program should call my_timer_init once, - use the information to decide what my_timer_xxx function - to use, and subsequently call that function by function - pointer. - - A typical use would be: - my_timer_init() ... once, at program start - ... - time1= my_timer_xxx() ... time before start - [code that's timed] - time2= my_timer_xxx() ... time after end - elapsed_time= (time2 - time1) - overhead -*/ - -#include "my_global.h" -#include "my_rdtsc.h" - -#if defined(_WIN32) -#include -#include "windows.h" -#else -#include -#endif - -#if !defined(_WIN32) -#if TIME_WITH_SYS_TIME -#include -#include /* for clock_gettime */ -#else -#if HAVE_SYS_TIME_H -#include -#elif defined(HAVE_TIME_H) -#include -#endif -#endif -#endif - -#if defined(HAVE_ASM_MSR_H) && defined(HAVE_RDTSCLL) -#include /* for rdtscll */ -#endif - -#if defined(HAVE_SYS_TIMEB_H) && defined(HAVE_FTIME) -#include /* for ftime */ -#endif - -#if defined(HAVE_SYS_TIMES_H) && defined(HAVE_TIMES) -#include /* for times */ -#endif - -#if defined(__INTEL_COMPILER) && defined(__ia64__) && defined(HAVE_IA64INTRIN_H) -#include /* for __GetReg */ -#endif - -#if defined(__APPLE__) && defined(__MACH__) -#include -#endif - -#if defined(__SUNPRO_CC) && defined(__sparcv9) && defined(_LP64) && !defined(__SunOS_5_7) -extern "C" ulonglong my_timer_cycles_il_sparc64(); -#elif defined(__SUNPRO_CC) && defined(_ILP32) && !defined(__SunOS_5_7) -extern "C" ulonglong my_timer_cycles_il_sparc32(); -#elif defined(__SUNPRO_CC) && defined(__i386) && defined(_ILP32) -extern "C" ulonglong my_timer_cycles_il_i386(); -#elif defined(__SUNPRO_CC) && defined(__x86_64) && defined(_LP64) -extern "C" ulonglong my_timer_cycles_il_x86_64(); -#elif defined(__SUNPRO_C) && defined(__sparcv9) && defined(_LP64) && !defined(__SunOS_5_7) -ulonglong my_timer_cycles_il_sparc64(); -#elif defined(__SUNPRO_C) && defined(_ILP32) && !defined(__SunOS_5_7) -ulonglong my_timer_cycles_il_sparc32(); -#elif defined(__SUNPRO_C) && defined(__i386) && defined(_ILP32) -ulonglong my_timer_cycles_il_i386(); -#elif defined(__SUNPRO_C) && defined(__x86_64) && defined(_LP64) -ulonglong my_timer_cycles_il_x86_64(); -#endif - -#if defined(__INTEL_COMPILER) -/* - icc warning #1011 is: - missing return statement at end of non-void function -*/ -#pragma warning (disable:1011) -#endif - -/* - For cycles, we depend on RDTSC for x86 platforms, - or on time buffer (which is not really a cycle count - but a separate counter with less than nanosecond - resolution) for most PowerPC platforms, or on - gethrtime which is okay for hpux and solaris, or on - clock_gettime(CLOCK_SGI_CYCLE) for Irix platforms, - or on read_real_time for aix platforms. There is - nothing for Alpha platforms, they would be tricky. -*/ - -ulonglong my_timer_cycles(void) -{ -#if defined(__GNUC__) && defined(__i386__) - /* This works much better if compiled with "gcc -O3". */ - ulonglong result; - __asm__ __volatile__ ("rdtsc" : "=A" (result)); - return result; -#elif defined(__SUNPRO_C) && defined(__i386) - __asm("rdtsc"); -#elif defined(__GNUC__) && defined(__x86_64__) - ulonglong result; - __asm__ __volatile__ ("rdtsc\n\t" \ - "shlq $32,%%rdx\n\t" \ - "orq %%rdx,%%rax" - : "=a" (result) :: "%edx"); - return result; -#elif defined(HAVE_ASM_MSR_H) && defined(HAVE_RDTSCLL) - { - ulonglong result; - rdtscll(result); - return result; - } -#elif defined(_WIN32) && defined(_M_IX86) - __asm {rdtsc}; -#elif defined(_WIN64) && defined(_M_X64) - /* For 64-bit Windows: unsigned __int64 __rdtsc(); */ - return __rdtsc(); -#elif defined(__INTEL_COMPILER) && defined(__ia64__) && defined(HAVE_IA64INTRIN_H) - return (ulonglong) __getReg(_IA64_REG_AR_ITC); /* (3116) */ -#elif defined(__GNUC__) && defined(__ia64__) - { - ulonglong result; - __asm __volatile__ ("mov %0=ar.itc" : "=r" (result)); - return result; - } -#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__POWERPC__) || (defined(_POWER) && defined(_AIX52))) && (defined(__64BIT__) || defined(_ARCH_PPC64)) - { - ulonglong result; - __asm __volatile__ ("mftb %0" : "=r" (result)); - return result; - } -#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__POWERPC__) || (defined(_POWER) && defined(_AIX52))) && (!defined(__64BIT__) && !defined(_ARCH_PPC64)) - { - /* - mftbu means "move from time-buffer-upper to result". - The loop is saying: x1=upper, x2=lower, x3=upper, - if x1!=x3 there was an overflow so repeat. - */ - unsigned int x1, x2, x3; - ulonglong result; - for (;;) - { - __asm __volatile__ ( "mftbu %0" : "=r"(x1) ); - __asm __volatile__ ( "mftb %0" : "=r"(x2) ); - __asm __volatile__ ( "mftbu %0" : "=r"(x3) ); - if (x1 == x3) break; - } - result = x1; - return ( result << 32 ) | x2; - } -#elif (defined(__SUNPRO_CC) || defined(__SUNPRO_C)) && defined(__sparcv9) && defined(_LP64) && !defined(__SunOS_5_7) - return (my_timer_cycles_il_sparc64()); -#elif (defined(__SUNPRO_CC) || defined(__SUNPRO_C)) && defined(_ILP32) && !defined(__SunOS_5_7) - return (my_timer_cycles_il_sparc32()); -#elif (defined(__SUNPRO_CC) || defined(__SUNPRO_C)) && defined(__i386) && defined(_ILP32) - /* This is probably redundant for __SUNPRO_C. */ - return (my_timer_cycles_il_i386()); -#elif (defined(__SUNPRO_CC) || defined(__SUNPRO_C)) && defined(__x86_64) && defined(_LP64) - return (my_timer_cycles_il_x86_64()); -#elif defined(__GNUC__) && defined(__sparcv9) && defined(_LP64) && (__GNUC__>2) - { - ulonglong result; - __asm __volatile__ ("rd %%tick,%0" : "=r" (result)); - return result; - } -#elif defined(__GNUC__) && defined(__sparc__) && !defined(_LP64) && (__GNUC__>2) - { - union { - ulonglong wholeresult; - struct { - ulong high; - ulong low; - } splitresult; - } result; - __asm __volatile__ ("rd %%tick,%1; srlx %1,32,%0" : "=r" (result.splitresult.high), "=r" (result.splitresult.low)); - return result.wholeresult; - } -#elif defined(__sgi) && defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_SGI_CYCLE) - { - struct timespec tp; - clock_gettime(CLOCK_SGI_CYCLE, &tp); - return (ulonglong) tp.tv_sec * 1000000000 + (ulonglong) tp.tv_nsec; - } -#elif defined(HAVE_SYS_TIMES_H) && defined(HAVE_GETHRTIME) - /* gethrtime may appear as either cycle or nanosecond counter */ - return (ulonglong) gethrtime(); -#else - return 0; -#endif -} - -#if defined(__INTEL_COMPILER) -/* re-enable warning#1011 which was only for my_timer_cycles() */ -/* There may be an icc bug which means we must leave disabled. */ -#pragma warning (default:1011) -#endif - -/* - For nanoseconds, most platforms have nothing available that - (a) doesn't require bringing in a 40-kb librt.so library - (b) really has nanosecond resolution. -*/ - -ulonglong my_timer_nanoseconds(void) -{ -#if defined(HAVE_READ_REAL_TIME) - { - timebasestruct_t tr; - read_real_time(&tr, TIMEBASE_SZ); - return (ulonglong) tr.tb_high * 1000000000 + (ulonglong) tr.tb_low; - } -#elif defined(HAVE_SYS_TIMES_H) && defined(HAVE_GETHRTIME) - /* SunOS 5.10+, Solaris, HP-UX: hrtime_t gethrtime(void) */ - return (ulonglong) gethrtime(); -#elif defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_REALTIME) - { - struct timespec tp; - clock_gettime(CLOCK_REALTIME, &tp); - return (ulonglong) tp.tv_sec * 1000000000 + (ulonglong) tp.tv_nsec; - } -#elif defined(__APPLE__) && defined(__MACH__) - { - ulonglong tm; - static mach_timebase_info_data_t timebase_info= {0,0}; - if (timebase_info.denom == 0) - (void) mach_timebase_info(&timebase_info); - tm= mach_absolute_time(); - return (tm * timebase_info.numer) / timebase_info.denom; - } -#else - return 0; -#endif -} - -/* - For microseconds, gettimeofday() is available on - almost all platforms. On Windows we use - QueryPerformanceCounter which will usually tick over - 3.5 million times per second, and we don't throw - away the extra precision. (On Windows Server 2003 - the frequency is same as the cycle frequency.) -*/ - -ulonglong my_timer_microseconds(void) -{ -#if defined(HAVE_GETTIMEOFDAY) - { - static ulonglong last_value= 0; - struct timeval tv; - if (gettimeofday(&tv, NULL) == 0) - last_value= (ulonglong) tv.tv_sec * 1000000 + (ulonglong) tv.tv_usec; - else - { - /* - There are reports that gettimeofday(2) can have intermittent failures - on some platform, see for example Bug#36819. - We are not trying again or looping, just returning the best value possible - under the circumstances ... - */ - last_value++; - } - return last_value; - } -#elif defined(_WIN32) - { - /* QueryPerformanceCounter usually works with about 1/3 microsecond. */ - LARGE_INTEGER t_cnt; - - QueryPerformanceCounter(&t_cnt); - return (ulonglong) t_cnt.QuadPart; - } -#else - return 0; -#endif -} - -/* - For milliseconds, we use ftime() if it's supported - or time()*1000 if it's not. With modern versions of - Windows and with HP Itanium, resolution is 10-15 - milliseconds. -*/ - -ulonglong my_timer_milliseconds(void) -{ -#if defined(HAVE_SYS_TIMEB_H) && defined(HAVE_FTIME) - /* ftime() is obsolete but maybe the platform is old */ - struct timeb ft; - ftime(&ft); - return (ulonglong)ft.time * 1000 + (ulonglong)ft.millitm; -#elif defined(HAVE_TIME) - return (ulonglong) time(NULL) * 1000; -#elif defined(_WIN32) - FILETIME ft; - GetSystemTimeAsFileTime( &ft ); - return ((ulonglong)ft.dwLowDateTime + - (((ulonglong)ft.dwHighDateTime) << 32))/10000; -#else - return 0; -#endif -} - -/* - For ticks, which we handle with times(), the frequency - is usually 100/second and the overhead is surprisingly - bad, sometimes even worse than gettimeofday's overhead. -*/ - -ulonglong my_timer_ticks(void) -{ -#if defined(HAVE_SYS_TIMES_H) && defined(HAVE_TIMES) - { - struct tms times_buf; - return (ulonglong) times(×_buf); - } -#elif defined(_WIN32) - return (ulonglong) GetTickCount(); -#else - return 0; -#endif -} - -/* - The my_timer_init() function and its sub-functions - have several loops which call timers. If there's - something wrong with a timer -- which has never - happened in tests -- we want the loop to end after - an arbitrary number of iterations, and my_timer_info - will show a discouraging result. The arbitrary - number is 1,000,000. -*/ -#define MY_TIMER_ITERATIONS 1000000 - -/* - Calculate overhead. Called from my_timer_init(). - Usually best_timer_overhead = cycles.overhead or - nanoseconds.overhead, so returned amount is in - cycles or nanoseconds. We repeat the calculation - ten times, so that we can disregard effects of - caching or interrupts. Result is quite consistent - for cycles, at least. But remember it's a minimum. -*/ - -static void my_timer_init_overhead(ulonglong *overhead, - ulonglong (*cycle_timer)(void), - ulonglong (*this_timer)(void), - ulonglong best_timer_overhead) -{ - ulonglong time1, time2; - int i; - - /* *overhead, least of 20 calculations - cycles.overhead */ - for (i= 0, *overhead= 1000000000; i < 20; ++i) - { - time1= cycle_timer(); - this_timer(); /* rather than 'time_tmp= timer();' */ - time2= cycle_timer() - time1; - if (*overhead > time2) - *overhead= time2; - } - *overhead-= best_timer_overhead; -} - -/* - Calculate Resolution. Called from my_timer_init(). - If a timer goes up by jumps, e.g. 1050, 1075, 1100, ... - then the best resolution is the minimum jump, e.g. 25. - If it's always divisible by 1000 then it's just a - result of multiplication of a lower-precision timer - result, e.g. nanoseconds are often microseconds * 1000. - If the minimum jump is less than an arbitrary passed - figure (a guess based on maximum overhead * 2), ignore. - Usually we end up with nanoseconds = 1 because it's too - hard to detect anything <= 100 nanoseconds. - Often GetTickCount() has resolution = 15. - We don't check with ticks because they take too long. -*/ -static ulonglong my_timer_init_resolution(ulonglong (*this_timer)(void), - ulonglong overhead_times_2) -{ - ulonglong time1, time2; - ulonglong best_jump; - int i, jumps, divisible_by_1000, divisible_by_1000000; - - divisible_by_1000= divisible_by_1000000= 0; - best_jump= 1000000; - for (i= jumps= 0; jumps < 3 && i < MY_TIMER_ITERATIONS * 10; ++i) - { - time1= this_timer(); - time2= this_timer(); - time2-= time1; - if (time2) - { - ++jumps; - if (!(time2 % 1000)) - { - ++divisible_by_1000; - if (!(time2 % 1000000)) - ++divisible_by_1000000; - } - if (best_jump > time2) - best_jump= time2; - /* For milliseconds, one jump is enough. */ - if (overhead_times_2 == 0) - break; - } - } - if (jumps == 3) - { - if (jumps == divisible_by_1000000) - return 1000000; - if (jumps == divisible_by_1000) - return 1000; - } - if (best_jump > overhead_times_2) - return best_jump; - return 1; -} - -/* - Calculate cycle frequency by seeing how many cycles pass - in a 200-microsecond period. I tried with 10-microsecond - periods originally, and the result was often very wrong. -*/ - -static ulonglong my_timer_init_frequency(MY_TIMER_INFO *mti) -{ - int i; - ulonglong time1, time2, time3, time4; - time1= my_timer_cycles(); - time2= my_timer_microseconds(); - time3= time2; /* Avoids a Microsoft/IBM compiler warning */ - for (i= 0; i < MY_TIMER_ITERATIONS; ++i) - { - time3= my_timer_microseconds(); - if (time3 - time2 > 200) break; - } - time4= my_timer_cycles() - mti->cycles.overhead; - time4-= mti->microseconds.overhead; - return (mti->microseconds.frequency * (time4 - time1)) / (time3 - time2); -} - -/* - Call my_timer_init before the first call to my_timer_xxx(). - If something must be initialized, it happens here. - Set: what routine is being used e.g. "asm_x86" - Set: function, overhead, actual frequency, resolution. -*/ - -void my_timer_init(MY_TIMER_INFO *mti) -{ - ulonglong (*best_timer)(void); - ulonglong best_timer_overhead; - ulonglong time1, time2; - int i; - - /* cycles */ - mti->cycles.frequency= 1000000000; -#if defined(__GNUC__) && defined(__i386__) - mti->cycles.routine= MY_TIMER_ROUTINE_ASM_X86; -#elif defined(__SUNPRO_C) && defined(__i386) - mti->cycles.routine= MY_TIMER_ROUTINE_ASM_X86; -#elif defined(__GNUC__) && defined(__x86_64__) - mti->cycles.routine= MY_TIMER_ROUTINE_ASM_X86_64; -#elif defined(HAVE_ASM_MSR_H) && defined(HAVE_RDTSCLL) - mti->cycles.routine= MY_TIMER_ROUTINE_RDTSCLL; -#elif defined(_WIN32) && defined(_M_IX86) - mti->cycles.routine= MY_TIMER_ROUTINE_ASM_X86_WIN; -#elif defined(_WIN64) && defined(_M_X64) - mti->cycles.routine= MY_TIMER_ROUTINE_RDTSC; -#elif defined(__INTEL_COMPILER) && defined(__ia64__) && defined(HAVE_IA64INTRIN_H) - mti->cycles.routine= MY_TIMER_ROUTINE_ASM_IA64; -#elif defined(__GNUC__) && defined(__ia64__) - mti->cycles.routine= MY_TIMER_ROUTINE_ASM_IA64; -#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__POWERPC__) || (defined(_POWER) && defined(_AIX52))) && (defined(__64BIT__) || defined(_ARCH_PPC64)) - mti->cycles.routine= MY_TIMER_ROUTINE_ASM_PPC64; -#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__POWERPC__) || (defined(_POWER) && defined(_AIX52))) && (!defined(__64BIT__) && !defined(_ARCH_PPC64)) - mti->cycles.routine= MY_TIMER_ROUTINE_ASM_PPC; -#elif (defined(__SUNPRO_CC) || defined(__SUNPRO_C)) && defined(__sparcv9) && defined(_LP64) && !defined(__SunOS_5_7) - mti->cycles.routine= MY_TIMER_ROUTINE_ASM_SUNPRO_SPARC64; -#elif (defined(__SUNPRO_CC) || defined(__SUNPRO_C)) && defined(_ILP32) && !defined(__SunOS_5_7) - mti->cycles.routine= MY_TIMER_ROUTINE_ASM_SUNPRO_SPARC32; -#elif (defined(__SUNPRO_CC) || defined(__SUNPRO_C)) && defined(__i386) && defined(_ILP32) - mti->cycles.routine= MY_TIMER_ROUTINE_ASM_SUNPRO_I386; -#elif (defined(__SUNPRO_CC) || defined(__SUNPRO_C)) && defined(__x86_64) && defined(_LP64) - mti->cycles.routine= MY_TIMER_ROUTINE_ASM_SUNPRO_X86_64; -#elif defined(__GNUC__) && defined(__sparcv9) && defined(_LP64) && (__GNUC__>2) - mti->cycles.routine= MY_TIMER_ROUTINE_ASM_GCC_SPARC64; -#elif defined(__GNUC__) && defined(__sparc__) && !defined(_LP64) && (__GNUC__>2) - mti->cycles.routine= MY_TIMER_ROUTINE_ASM_GCC_SPARC32; -#elif defined(__sgi) && defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_SGI_CYCLE) - mti->cycles.routine= MY_TIMER_ROUTINE_SGI_CYCLE; -#elif defined(HAVE_SYS_TIMES_H) && defined(HAVE_GETHRTIME) - mti->cycles.routine= MY_TIMER_ROUTINE_GETHRTIME; -#else - mti->cycles.routine= 0; -#endif - - if (!mti->cycles.routine || !my_timer_cycles()) - { - mti->cycles.routine= 0; - mti->cycles.resolution= 0; - mti->cycles.frequency= 0; - mti->cycles.overhead= 0; - } - - /* nanoseconds */ - mti->nanoseconds.frequency= 1000000000; /* initial assumption */ -#if defined(HAVE_READ_REAL_TIME) - mti->nanoseconds.routine= MY_TIMER_ROUTINE_READ_REAL_TIME; -#elif defined(HAVE_SYS_TIMES_H) && defined(HAVE_GETHRTIME) - mti->nanoseconds.routine= MY_TIMER_ROUTINE_GETHRTIME; -#elif defined(HAVE_CLOCK_GETTIME) - mti->nanoseconds.routine= MY_TIMER_ROUTINE_CLOCK_GETTIME; -#elif defined(__APPLE__) && defined(__MACH__) - mti->nanoseconds.routine= MY_TIMER_ROUTINE_MACH_ABSOLUTE_TIME; -#else - mti->nanoseconds.routine= 0; -#endif - if (!mti->nanoseconds.routine || !my_timer_nanoseconds()) - { - mti->nanoseconds.routine= 0; - mti->nanoseconds.resolution= 0; - mti->nanoseconds.frequency= 0; - mti->nanoseconds.overhead= 0; - } - - /* microseconds */ - mti->microseconds.frequency= 1000000; /* initial assumption */ -#if defined(HAVE_GETTIMEOFDAY) - mti->microseconds.routine= MY_TIMER_ROUTINE_GETTIMEOFDAY; -#elif defined(_WIN32) - { - LARGE_INTEGER li; - /* Windows: typical frequency = 3579545, actually 1/3 microsecond. */ - if (!QueryPerformanceFrequency(&li)) - mti->microseconds.routine= 0; - else - { - mti->microseconds.frequency= li.QuadPart; - mti->microseconds.routine= MY_TIMER_ROUTINE_QUERYPERFORMANCECOUNTER; - } - } -#else - mti->microseconds.routine= 0; -#endif - if (!mti->microseconds.routine || !my_timer_microseconds()) - { - mti->microseconds.routine= 0; - mti->microseconds.resolution= 0; - mti->microseconds.frequency= 0; - mti->microseconds.overhead= 0; - } - - /* milliseconds */ - mti->milliseconds.frequency= 1000; /* initial assumption */ -#if defined(HAVE_SYS_TIMEB_H) && defined(HAVE_FTIME) - mti->milliseconds.routine= MY_TIMER_ROUTINE_FTIME; -#elif defined(_WIN32) - mti->milliseconds.routine= MY_TIMER_ROUTINE_GETSYSTEMTIMEASFILETIME; -#elif defined(HAVE_TIME) - mti->milliseconds.routine= MY_TIMER_ROUTINE_TIME; -#else - mti->milliseconds.routine= 0; -#endif - if (!mti->milliseconds.routine || !my_timer_milliseconds()) - { - mti->milliseconds.routine= 0; - mti->milliseconds.resolution= 0; - mti->milliseconds.frequency= 0; - mti->milliseconds.overhead= 0; - } - - /* ticks */ - mti->ticks.frequency= 100; /* permanent assumption */ -#if defined(HAVE_SYS_TIMES_H) && defined(HAVE_TIMES) - mti->ticks.routine= MY_TIMER_ROUTINE_TIMES; -#elif defined(_WIN32) - mti->ticks.routine= MY_TIMER_ROUTINE_GETTICKCOUNT; -#else - mti->ticks.routine= 0; -#endif - if (!mti->ticks.routine || !my_timer_ticks()) - { - mti->ticks.routine= 0; - mti->ticks.resolution= 0; - mti->ticks.frequency= 0; - mti->ticks.overhead= 0; - } - - /* - Calculate overhead in terms of the timer that - gives the best resolution: cycles or nanoseconds. - I doubt it ever will be as bad as microseconds. - */ - if (mti->cycles.routine) - best_timer= &my_timer_cycles; - else - { - if (mti->nanoseconds.routine) - { - best_timer= &my_timer_nanoseconds; - } - else - best_timer= &my_timer_microseconds; - } - - /* best_timer_overhead = least of 20 calculations */ - for (i= 0, best_timer_overhead= 1000000000; i < 20; ++i) - { - time1= best_timer(); - time2= best_timer() - time1; - if (best_timer_overhead > time2) - best_timer_overhead= time2; - } - if (mti->cycles.routine) - my_timer_init_overhead(&mti->cycles.overhead, - best_timer, - &my_timer_cycles, - best_timer_overhead); - if (mti->nanoseconds.routine) - my_timer_init_overhead(&mti->nanoseconds.overhead, - best_timer, - &my_timer_nanoseconds, - best_timer_overhead); - if (mti->microseconds.routine) - my_timer_init_overhead(&mti->microseconds.overhead, - best_timer, - &my_timer_microseconds, - best_timer_overhead); - if (mti->milliseconds.routine) - my_timer_init_overhead(&mti->milliseconds.overhead, - best_timer, - &my_timer_milliseconds, - best_timer_overhead); - if (mti->ticks.routine) - my_timer_init_overhead(&mti->ticks.overhead, - best_timer, - &my_timer_ticks, - best_timer_overhead); - -/* - Calculate resolution for nanoseconds or microseconds - or milliseconds, by seeing if it's always divisible - by 1000, and by noticing how much jumping occurs. - For ticks, just assume the resolution is 1. -*/ - if (mti->cycles.routine) - mti->cycles.resolution= 1; - if (mti->nanoseconds.routine) - mti->nanoseconds.resolution= - my_timer_init_resolution(&my_timer_nanoseconds, 20000); - if (mti->microseconds.routine) - mti->microseconds.resolution= - my_timer_init_resolution(&my_timer_microseconds, 20); - if (mti->milliseconds.routine) - { - if (mti->milliseconds.routine == MY_TIMER_ROUTINE_TIME) - mti->milliseconds.resolution= 1000; - else - mti->milliseconds.resolution= - my_timer_init_resolution(&my_timer_milliseconds, 0); - } - if (mti->ticks.routine) - mti->ticks.resolution= 1; - -/* - Calculate cycles frequency, - if we have both a cycles routine and a microseconds routine. - In tests, this usually results in a figure within 2% of - what "cat /proc/cpuinfo" says. - If the microseconds routine is QueryPerformanceCounter - (i.e. it's Windows), and the microseconds frequency is > - 500,000,000 (i.e. it's Windows Server so it uses RDTSC) - and the microseconds resolution is > 100 (i.e. dreadful), - then calculate cycles frequency = microseconds frequency. -*/ - if (mti->cycles.routine - && mti->microseconds.routine) - { - if (mti->microseconds.routine == - MY_TIMER_ROUTINE_QUERYPERFORMANCECOUNTER - && mti->microseconds.frequency > 500000000 - && mti->microseconds.resolution > 100) - mti->cycles.frequency= mti->microseconds.frequency; - else - { - ulonglong time1, time2; - time1= my_timer_init_frequency(mti); - /* Repeat once in case there was an interruption. */ - time2= my_timer_init_frequency(mti); - if (time1 < time2) mti->cycles.frequency= time1; - else mti->cycles.frequency= time2; - } - } - -/* - Calculate milliseconds frequency = - (cycles-frequency/#-of-cycles) * #-of-milliseconds, - if we have both a milliseconds routine and a cycles - routine. - This will be inaccurate if milliseconds resolution > 1. - This is probably only useful when testing new platforms. -*/ - if (mti->milliseconds.routine - && mti->milliseconds.resolution < 1000 - && mti->microseconds.routine - && mti->cycles.routine) - { - int i; - ulonglong time1, time2, time3, time4; - time1= my_timer_cycles(); - time2= my_timer_milliseconds(); - time3= time2; /* Avoids a Microsoft/IBM compiler warning */ - for (i= 0; i < MY_TIMER_ITERATIONS * 1000; ++i) - { - time3= my_timer_milliseconds(); - if (time3 - time2 > 10) break; - } - time4= my_timer_cycles(); - mti->milliseconds.frequency= - (mti->cycles.frequency * (time3 - time2)) / (time4 - time1); - } - -/* - Calculate ticks.frequency = - (cycles-frequency/#-of-cycles * #-of-ticks, - if we have both a ticks routine and a cycles - routine, - This is probably only useful when testing new platforms. -*/ - if (mti->ticks.routine - && mti->microseconds.routine - && mti->cycles.routine) - { - int i; - ulonglong time1, time2, time3, time4; - time1= my_timer_cycles(); - time2= my_timer_ticks(); - time3= time2; /* Avoids a Microsoft/IBM compiler warning */ - for (i= 0; i < MY_TIMER_ITERATIONS * 1000; ++i) - { - time3= my_timer_ticks(); - if (time3 - time2 > 10) break; - } - time4= my_timer_cycles(); - mti->ticks.frequency= - (mti->cycles.frequency * (time3 - time2)) / (time4 - time1); - } -} - -/* - Additional Comments - ------------------- - - This is for timing, i.e. finding out how long a piece of code - takes. If you want time of day matching a wall clock, the - my_timer_xxx functions won't help you. - - The best timer is the one with highest frequency, lowest - overhead, and resolution=1. The my_timer_info() routine will tell - you at runtime which timer that is. Usually it will be - my_timer_cycles() but be aware that, although it's best, - it has possible flaws and dangers. Depending on platform: - - The frequency might change. We don't test for this. It - happens on laptops for power saving, and on blade servers - for avoiding overheating. - - The overhead that my_timer_init() returns is the minimum. - In fact it could be slightly greater because of caching or - because you call the routine by address, as recommended. - It could be hugely greater if there's an interrupt. - - The x86 cycle counter, RDTSC doesn't "serialize". That is, - if there is out-of-order execution, rdtsc might be processed - after an instruction that logically follows it. - (We could force serialization, but that would be slower.) - - It is possible to set a flag which renders RDTSC - inoperative. Somebody responsible for the kernel - of the operating system would have to make this - decision. For the platforms we've tested with, there's - no such problem. - - With a multi-processor arrangement, it's possible - to get the cycle count from one processor in - thread X, and the cycle count from another processor - in thread Y. They may not always be in synch. - - You can't depend on a cycle counter being available for - all platforms. On Alphas, the - cycle counter is only 32-bit, so it would overflow quickly, - so we don't bother with it. On platforms that we haven't - tested, there might be some if/endif combination that we - didn't expect, or some assembler routine that we didn't - supply. - - The recommended way to use the timer routines is: - 1. Somewhere near the beginning of the program, call - my_timer_init(). This should only be necessary once, - although you can call it again if you think that the - frequency has changed. - 2. Determine the best timer based on frequency, resolution, - overhead -- all things that my_timer_init() returns. - Preserve the address of the timer and the my_timer_into - results in an easily-accessible place. - 3. Instrument the code section that you're monitoring, thus: - time1= my_timer_xxx(); - Instrumented code; - time2= my_timer_xxx(); - elapsed_time= (time2 - time1) - overhead; - If the timer is always on, then overhead is always there, - so don't subtract it. - 4. Save the elapsed time, or add it to a totaller. - 5. When all timing processes are complete, transfer the - saved / totalled elapsed time to permanent storage. - Optionally you can convert cycles to microseconds at - this point. (Don't do so every time you calculate - elapsed_time! That would waste time and lose precision!) - For converting cycles to microseconds, use the frequency - that my_timer_init() returns. You'll also need to convert - if the my_timer_microseconds() function is the Windows - function QueryPerformanceCounter(), since that's sometimes - a counter with precision slightly better than microseconds. - - Since we recommend calls by function pointer, we supply - no inline functions. - - Some comments on the many candidate routines for timing ... - - clock() -- We don't use because it would overflow frequently. - - clock_gettime() -- In tests, clock_gettime often had - resolution = 1000. - - ftime() -- A "man ftime" says: "This function is obsolete. - Don't use it." On every platform that we tested, if ftime() - was available, then so was gettimeofday(), and gettimeofday() - overhead was always at least as good as ftime() overhead. - - gettimeofday() -- available on most platforms, though not - on Windows. There is a hardware timer (sometimes a Programmable - Interrupt Timer or "PIT") (sometimes a "HPET") used for - interrupt generation. When it interrupts (a "tick" or "jiffy", - typically 1 centisecond) it sets xtime. For gettimeofday, a - Linux kernel routine usually gets xtime and then gets rdtsc - to get elapsed nanoseconds since the last tick. On Red Hat - Enterprise Linux 3, there was once a bug which caused the - resolution to be 1000, i.e. one centisecond. We never check - for time-zone change. - - getnstimeofday() -- something to watch for in future Linux - - do_gettimeofday() -- exists on Linux but not for "userland" - - get_cycles() -- a multi-platform function, worth watching - in future Linux versions. But we found platform-specific - functions which were better documented in operating-system - manuals. And get_cycles() can fail or return a useless - 32-bit number. It might be available on some platforms, - such as arm, which we didn't test. Using - "include " or "include " - can lead to autoconf or compile errors, depending on system. - - rdtsc, __rdtsc, rdtscll: available for x86 with Linux BSD, - Solaris, Windows. See "possible flaws and dangers" comments. - - times(): what we use for ticks. Should just read the last - (xtime) tick count, therefore should be fast, but usually - isn't. - - GetTickCount(): we use this for my_timer_ticks() on - Windows. Actually it really is a tick counter, so resolution - >= 10 milliseconds unless you have a very old Windows version. - With Windows 95 or 98 or ME, timeGetTime() has better resolution than - GetTickCount (1ms rather than 55ms). But with Windows NT or XP or 2000, - they're both getting from a variable in the Process Environment Block - (PEB), and the variable is set by the programmable interrupt timer, so - the resolution is the same (usually 10-15 milliseconds). Also timeGetTime - is slower on old machines: - http://www.doumo.jp/aon-java/jsp/postgretips/tips.jsp?tips=74. - Also timeGetTime requires linking winmm.lib, - Therefore we use GetTickCount. - It will overflow every 49 days because the return is 32-bit. - There is also a GetTickCount64 but it requires Vista or Windows Server 2008. - (As for GetSystemTimeAsFileTime, its precision is spurious, it - just reads the tick variable like the other functions do. - However, we don't expect it to overflow every 49 days, so we - will prefer it for my_timer_milliseconds().) - - QueryPerformanceCounter() we use this for my_timer_microseconds() - on Windows. 1-PIT-tick (often 1/3-microsecond). Usually reads - the PIT so it's slow. On some Windows variants, uses RDTSC. - - GetLocalTime() this is available on Windows but we don't use it. - - getclock(): documented for Alpha, but not found during tests. - - mach_absolute_time() and UpTime() are recommended for Apple. - Inititally they weren't tried, because asm_ppc seems to do the job. - But now we use mach_absolute_time for nanoseconds. - - Any clock-based timer can be affected by NPT (ntpd program), - which means: - - full-second correction can occur for leap second - - tiny corrections can occcur approimately every 11 minutes - (but I think they only affect the RTC which isn't the PIT). - - We define "precision" as "frequency" and "high precision" is - "frequency better than 1 microsecond". We define "resolution" - as a synonym for "granularity". We define "accuracy" as - "closeness to the truth" as established by some authoritative - clock, but we can't measure accuracy. - - Do not expect any of our timers to be monotonic; we - won't guarantee that they return constantly-increasing - unique numbers. - - We tested with AIX, Solaris (x86 + Sparc), Linux (x86 + - Itanium), Windows, 64-bit Windows, QNX, FreeBSD, HPUX, - Irix, Mac. We didn't test with SCO. - -*/ - diff --git a/deps/mysqllite/mysys/my_read.c b/deps/mysqllite/mysys/my_read.c deleted file mode 100644 index dbe9006a1d321c..00000000000000 --- a/deps/mysqllite/mysys/my_read.c +++ /dev/null @@ -1,97 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include -#include - -/* - Read a chunk of bytes from a file with retry's if needed - - The parameters are: - File descriptor - Buffer to hold at least Count bytes - Bytes to read - Flags on what to do on error - - Return: - -1 on error - 0 if flag has bits MY_NABP or MY_FNABP set - N number of bytes read. -*/ - -size_t my_read(File Filedes, uchar *Buffer, size_t Count, myf MyFlags) -{ - size_t readbytes, save_count; - DBUG_ENTER("my_read"); - DBUG_PRINT("my",("fd: %d Buffer: %p Count: %lu MyFlags: %d", - Filedes, Buffer, (ulong) Count, MyFlags)); - save_count= Count; - - for (;;) - { - errno= 0; /* Linux, Windows don't reset this on EOF/success */ -#ifdef _WIN32 - readbytes= my_win_read(Filedes, Buffer, Count); -#else - readbytes= read(Filedes, Buffer, Count); -#endif - - if (readbytes != Count) - { - my_errno= errno; - if (errno == 0 || (readbytes != (size_t) -1 && - (MyFlags & (MY_NABP | MY_FNABP)))) - my_errno= HA_ERR_FILE_TOO_SHORT; - DBUG_PRINT("warning",("Read only %d bytes off %lu from %d, errno: %d", - (int) readbytes, (ulong) Count, Filedes, - my_errno)); - - if ((readbytes == 0 || (int) readbytes == -1) && errno == EINTR) - { - DBUG_PRINT("debug", ("my_read() was interrupted and returned %ld", - (long) readbytes)); - continue; /* Interrupted */ - } - - if (MyFlags & (MY_WME | MY_FAE | MY_FNABP)) - { - if (readbytes == (size_t) -1) - my_error(EE_READ, MYF(ME_BELL+ME_WAITTANG), - my_filename(Filedes),my_errno); - else if (MyFlags & (MY_NABP | MY_FNABP)) - my_error(EE_EOFERR, MYF(ME_BELL+ME_WAITTANG), - my_filename(Filedes),my_errno); - } - if (readbytes == (size_t) -1 || - ((MyFlags & (MY_FNABP | MY_NABP)) && !(MyFlags & MY_FULL_IO))) - DBUG_RETURN(MY_FILE_ERROR); /* Return with error */ - if (readbytes != (size_t) -1 && (MyFlags & MY_FULL_IO)) - { - Buffer+= readbytes; - Count-= readbytes; - continue; - } - } - - if (MyFlags & (MY_NABP | MY_FNABP)) - readbytes= 0; /* Ok on read */ - else if (MyFlags & MY_FULL_IO) - readbytes= save_count; - break; - } - DBUG_RETURN(readbytes); -} /* my_read */ diff --git a/deps/mysqllite/mysys/my_redel.c b/deps/mysqllite/mysys/my_redel.c deleted file mode 100644 index 92aa6e42073290..00000000000000 --- a/deps/mysqllite/mysys/my_redel.c +++ /dev/null @@ -1,124 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include -#include -#include "mysys_err.h" -#if defined(HAVE_UTIME_H) -#include -#elif defined(HAVE_SYS_UTIME_H) -#include -#elif !defined(HPUX10) -struct utimbuf { - time_t actime; - time_t modtime; -}; -#endif - - /* - Rename with copy stat form old file - Copy stats from old file to new file, deletes orginal and - changes new file name to old file name - - if MY_REDEL_MAKE_COPY is given, then the orginal file - is renamed to org_name-'current_time'.BAK - */ - -#define REDEL_EXT ".BAK" - -int my_redel(const char *org_name, const char *tmp_name, myf MyFlags) -{ - int error=1; - DBUG_ENTER("my_redel"); - DBUG_PRINT("my",("org_name: '%s' tmp_name: '%s' MyFlags: %d", - org_name,tmp_name,MyFlags)); - - if (my_copystat(org_name,tmp_name,MyFlags) < 0) - goto end; - if (MyFlags & MY_REDEL_MAKE_BACKUP) - { - char name_buff[FN_REFLEN+20]; - char ext[20]; - ext[0]='-'; - get_date(ext+1,2+4,(time_t) 0); - strmov(strend(ext),REDEL_EXT); - if (my_rename(org_name, fn_format(name_buff, org_name, "", ext, 2), - MyFlags)) - goto end; - } - else if (my_delete_allow_opened(org_name, MyFlags)) - goto end; - if (my_rename(tmp_name,org_name,MyFlags)) - goto end; - - error=0; -end: - DBUG_RETURN(error); -} /* my_redel */ - - - /* Copy stat from one file to another */ - /* Return -1 if can't get stat, 1 if wrong type of file */ - -int my_copystat(const char *from, const char *to, int MyFlags) -{ - struct stat statbuf; - - if (stat(from, &statbuf)) - { - my_errno=errno; - if (MyFlags & (MY_FAE+MY_WME)) - my_error(EE_STAT, MYF(ME_BELL+ME_WAITTANG),from,errno); - return -1; /* Can't get stat on input file */ - } - if ((statbuf.st_mode & S_IFMT) != S_IFREG) - return 1; - - /* Copy modes */ - if (chmod(to, statbuf.st_mode & 07777)) - { - my_errno= errno; - if (MyFlags & (MY_FAE+MY_WME)) - my_error(EE_CHANGE_PERMISSIONS, MYF(ME_BELL+ME_WAITTANG), from, errno); - return -1; - } - -#if !defined(__WIN__) - if (statbuf.st_nlink > 1 && MyFlags & MY_LINK_WARNING) - { - if (MyFlags & MY_LINK_WARNING) - my_error(EE_LINK_WARNING,MYF(ME_BELL+ME_WAITTANG),from,statbuf.st_nlink); - } - /* Copy ownership */ - if (chown(to, statbuf.st_uid, statbuf.st_gid)) - { - my_errno= errno; - if (MyFlags & (MY_FAE+MY_WME)) - my_error(EE_CHANGE_OWNERSHIP, MYF(ME_BELL+ME_WAITTANG), from, errno); - return -1; - } -#endif /* !__WIN__ */ - - if (MyFlags & MY_COPYTIME) - { - struct utimbuf timep; - timep.actime = statbuf.st_atime; - timep.modtime = statbuf.st_mtime; - (void) utime((char*) to, &timep);/* Update last accessed and modified times */ - } - - return 0; -} /* my_copystat */ diff --git a/deps/mysqllite/mysys/my_rename.c b/deps/mysqllite/mysys/my_rename.c deleted file mode 100644 index 1a4e7b2b409ac2..00000000000000 --- a/deps/mysqllite/mysys/my_rename.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include -#include "mysys_err.h" -#include "m_string.h" -#undef my_rename - - /* On unix rename deletes to file if it exists */ - -int my_rename(const char *from, const char *to, myf MyFlags) -{ - int error = 0; - DBUG_ENTER("my_rename"); - DBUG_PRINT("my",("from %s to %s MyFlags %d", from, to, MyFlags)); - -#if defined(HAVE_FILE_VERSIONS) - { /* Check that there isn't a old file */ - int save_errno; - MY_STAT my_stat_result; - save_errno=my_errno; - if (my_stat(to,&my_stat_result,MYF(0))) - { - my_errno=EEXIST; - error= -1; - if (MyFlags & MY_FAE+MY_WME) - my_error(EE_LINK, MYF(ME_BELL+ME_WAITTANG),from,to,my_errno); - DBUG_RETURN(error); - } - my_errno=save_errno; - } -#endif -#if defined(HAVE_RENAME) -#if defined(__WIN__) - /* - On windows we can't rename over an existing file: - Remove any conflicting files: - */ - (void) my_delete(to, MYF(0)); -#endif - if (rename(from,to)) -#else - if (link(from, to) || unlink(from)) -#endif - { - my_errno=errno; - error = -1; - if (MyFlags & (MY_FAE+MY_WME)) - my_error(EE_LINK, MYF(ME_BELL+ME_WAITTANG),from,to,my_errno); - } - else if (MyFlags & MY_SYNC_DIR) - { -#ifdef NEED_EXPLICIT_SYNC_DIR - /* do only the needed amount of syncs: */ - char dir_from[FN_REFLEN], dir_to[FN_REFLEN]; - size_t dir_from_length, dir_to_length; - dirname_part(dir_from, from, &dir_from_length); - dirname_part(dir_to, to, &dir_to_length); - if (my_sync_dir(dir_from, MyFlags) || - (strcmp(dir_from, dir_to) && - my_sync_dir(dir_to, MyFlags))) - error= -1; -#endif - } - DBUG_RETURN(error); -} /* my_rename */ diff --git a/deps/mysqllite/mysys/my_seek.c b/deps/mysqllite/mysys/my_seek.c deleted file mode 100644 index ca12a2e95d1004..00000000000000 --- a/deps/mysqllite/mysys/my_seek.c +++ /dev/null @@ -1,102 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" - -/* - Seek to a position in a file. - - ARGUMENTS - File fd The file descriptor - my_off_t pos The expected position (absolute or relative) - int whence A direction parameter and one of - {SEEK_SET, SEEK_CUR, SEEK_END} - myf MyFlags MY_THREADSAFE must be set in case my_seek may be mixed - with my_pread/my_pwrite calls and fd is shared among - threads. - - DESCRIPTION - The my_seek function is a wrapper around the system call lseek and - repositions the offset of the file descriptor fd to the argument - offset according to the directive whence as follows: - SEEK_SET The offset is set to offset bytes. - SEEK_CUR The offset is set to its current location plus offset bytes - SEEK_END The offset is set to the size of the file plus offset bytes - - RETURN VALUE - my_off_t newpos The new position in the file. - MY_FILEPOS_ERROR An error was encountered while performing - the seek. my_errno is set to indicate the - actual error. -*/ - -my_off_t my_seek(File fd, my_off_t pos, int whence, myf MyFlags) -{ - os_off_t newpos= -1; - DBUG_ENTER("my_seek"); - DBUG_PRINT("my",("fd: %d Pos: %llu Whence: %d MyFlags: %d", - fd, (ulonglong) pos, whence, MyFlags)); - DBUG_ASSERT(pos != MY_FILEPOS_ERROR); /* safety check */ - - /* - Make sure we are using a valid file descriptor! - */ - DBUG_ASSERT(fd != -1); -#if defined (_WIN32) - newpos= my_win_lseek(fd, pos, whence); -#else - newpos= lseek(fd, pos, whence); -#endif - if (newpos == (os_off_t) -1) - { - my_errno= errno; - if (MyFlags & MY_WME) - my_error(EE_CANT_SEEK, MYF(0), my_filename(fd), my_errno); - DBUG_PRINT("error", ("lseek: %llu errno: %d", (ulonglong) newpos, errno)); - DBUG_RETURN(MY_FILEPOS_ERROR); - } - if ((my_off_t) newpos != pos) - { - DBUG_PRINT("exit",("pos: %llu", (ulonglong) newpos)); - } - DBUG_RETURN((my_off_t) newpos); -} /* my_seek */ - - - /* Tell current position of file */ - /* ARGSUSED */ - -my_off_t my_tell(File fd, myf MyFlags) -{ - os_off_t pos; - DBUG_ENTER("my_tell"); - DBUG_PRINT("my",("fd: %d MyFlags: %d",fd, MyFlags)); - DBUG_ASSERT(fd >= 0); -#if defined (HAVE_TELL) && !defined (_WIN32) - pos= tell(fd); -#else - pos= my_seek(fd, 0L, MY_SEEK_CUR,0); -#endif - if (pos == (os_off_t) -1) - { - my_errno= errno; - if (MyFlags & MY_WME) - my_error(EE_CANT_SEEK, MYF(0), my_filename(fd), my_errno); - DBUG_PRINT("error", ("tell: %llu errno: %d", (ulonglong) pos, my_errno)); - } - DBUG_PRINT("exit",("pos: %llu", (ulonglong) pos)); - DBUG_RETURN((my_off_t) pos); -} /* my_tell */ diff --git a/deps/mysqllite/mysys/my_sleep.c b/deps/mysqllite/mysys/my_sleep.c deleted file mode 100644 index 6d1bdd5dc5558a..00000000000000 --- a/deps/mysqllite/mysys/my_sleep.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Wait a given number of microseconds */ - -#include "mysys_priv.h" -#include - -void my_sleep(ulong m_seconds) -{ -#if defined(__WIN__) - Sleep(m_seconds/1000+1); /* Sleep() has millisecond arg */ -#elif defined(HAVE_SELECT) - struct timeval t; - t.tv_sec= m_seconds / 1000000L; - t.tv_usec= m_seconds % 1000000L; - select(0,0,0,0,&t); /* sleep */ -#else - uint sec= (uint) (m_seconds / 1000000L); - ulong start= (ulong) time((time_t*) 0); - while ((ulong) time((time_t*) 0) < start+sec); -#endif -} diff --git a/deps/mysqllite/mysys/my_static.c b/deps/mysqllite/mysys/my_static.c deleted file mode 100644 index ec8d66ab0cfd6e..00000000000000 --- a/deps/mysqllite/mysys/my_static.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Copyright (C) 2000-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Static variables for mysys library. All definied here for easy making of - a shared library -*/ - -#include "mysys_priv.h" -#include "my_static.h" -#include "my_alarm.h" - -my_bool timed_mutexes= 0; - - /* from my_init */ -char * home_dir=0; -const char *my_progname=0; -char curr_dir[FN_REFLEN]= {0}, - home_dir_buff[FN_REFLEN]= {0}; -ulong my_stream_opened=0,my_file_opened=0, my_tmp_file_created=0; -ulong my_file_total_opened= 0; -int my_umask=0664, my_umask_dir=0777; - -struct st_my_file_info my_file_info_default[MY_NFILE]; -uint my_file_limit= MY_NFILE; -struct st_my_file_info *my_file_info= my_file_info_default; - - /* From mf_brkhant */ -int my_dont_interrupt=0; -volatile int _my_signals=0; -struct st_remember _my_sig_remember[MAX_SIGNALS]={{0,0}}; - - /* from mf_reccache.c */ -ulong my_default_record_cache_size=RECORD_CACHE_SIZE; - - /* from soundex.c */ - /* ABCDEFGHIJKLMNOPQRSTUVWXYZ */ - /* :::::::::::::::::::::::::: */ -const char *soundex_map= "01230120022455012623010202"; - - /* from my_malloc */ -USED_MEM* my_once_root_block=0; /* pointer to first block */ -uint my_once_extra=ONCE_ALLOC_INIT; /* Memory to alloc / block */ - - /* from my_largepage.c */ -#ifdef HAVE_LARGE_PAGES -my_bool my_use_large_pages= 0; -uint my_large_page_size= 0; -#endif - - /* from my_alarm */ -int volatile my_have_got_alarm=0; /* declare variable to reset */ -ulong my_time_to_wait_for_lock=2; /* In seconds */ - - /* from errors.c */ -#ifdef SHARED_LIBRARY -const char *globerrs[GLOBERRS]; /* my_error_messages is here */ -#endif -void (*my_abort_hook)(int) = (void(*)(int)) exit; -void (*error_handler_hook)(uint error, const char *str, myf MyFlags)= - my_message_stderr; -void (*fatal_error_handler_hook)(uint error, const char *str, myf MyFlags)= - my_message_stderr; - -static const char *proc_info_dummy(void *a __attribute__((unused)), - const char *b __attribute__((unused)), - const char *c __attribute__((unused)), - const char *d __attribute__((unused)), - const unsigned int e __attribute__((unused))) -{ - return 0; -} - -/* this is to be able to call set_thd_proc_info from the C code */ -const char *(*proc_info_hook)(void *, const char *, const char *, const char *, - const unsigned int)= proc_info_dummy; - -#if defined(ENABLED_DEBUG_SYNC) -/** - Global pointer to be set if callback function is defined - (e.g. in mysqld). See sql/debug_sync.cc. -*/ -void (*debug_sync_C_callback_ptr)(const char *, size_t); -#endif /* defined(ENABLED_DEBUG_SYNC) */ - -#ifdef __WIN__ -/* from my_getsystime.c */ -ulonglong query_performance_frequency, query_performance_offset; -#endif - - /* How to disable options */ -my_bool my_disable_locking=0; -my_bool my_disable_async_io=0; -my_bool my_disable_flush_key_blocks=0; -my_bool my_disable_symlinks=0; - -/* - Note that PSI_hook and PSI_server are unconditionally - (no ifdef HAVE_PSI_INTERFACE) defined. - This is to ensure binary compatibility between the server and plugins, - in the case when: - - the server is not compiled with HAVE_PSI_INTERFACE - - a plugin is compiled with HAVE_PSI_INTERFACE - See the doxygen documentation for the performance schema. -*/ - -/** - Hook for the instrumentation interface. - Code implementing the instrumentation interface should register here. -*/ -struct PSI_bootstrap *PSI_hook= NULL; - -/** - Instance of the instrumentation interface for the MySQL server. - @todo This is currently a global variable, which is handy when - compiling instrumented code that is bundled with the server. - When dynamic plugin are truly supported, this variable will need - to be replaced by a macro, so that each XYZ plugin can have it's own - xyz_psi_server variable, obtained from PSI_bootstrap::get_interface() - with the version used at compile time for plugin XYZ. -*/ -PSI *PSI_server= NULL; - diff --git a/deps/mysqllite/mysys/my_static.h b/deps/mysqllite/mysys/my_static.h deleted file mode 100644 index 7fde15ff133135..00000000000000 --- a/deps/mysqllite/mysys/my_static.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef MYSYS_MY_STATIC_INCLUDED -#define MYSYS_MY_STATIC_INCLUDED - -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Static variables for mysys library. All definied here for easy making of - a shared library -*/ - -C_MODE_START -#include - -#define MAX_SIGNALS 10 /* Max signals under a dont-allow */ - -struct st_remember { - int number; - sig_handler (*func)(int number); -}; - -extern char curr_dir[FN_REFLEN], home_dir_buff[FN_REFLEN]; - -extern volatile int _my_signals; -extern struct st_remember _my_sig_remember[MAX_SIGNALS]; - -extern const char *soundex_map; - -extern USED_MEM* my_once_root_block; -extern uint my_once_extra; - -extern struct st_my_file_info my_file_info_default[MY_NFILE]; - -extern ulonglong query_performance_frequency, query_performance_offset; - -C_MODE_END - -#endif /* MYSYS_MY_STATIC_INCLUDED */ diff --git a/deps/mysqllite/mysys/my_symlink.c b/deps/mysqllite/mysys/my_symlink.c deleted file mode 100644 index 053fc887fe86b0..00000000000000 --- a/deps/mysqllite/mysys/my_symlink.c +++ /dev/null @@ -1,167 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include -#include -#ifdef HAVE_REALPATH -#include -#include -#endif - -/* - Reads the content of a symbolic link - If the file is not a symbolic link, return the original file name in to. - - RETURN - 0 If filename was a symlink, (to will be set to value of symlink) - 1 If filename was a normal file (to will be set to filename) - -1 on error. -*/ - -int my_readlink(char *to, const char *filename, myf MyFlags) -{ -#ifndef HAVE_READLINK - strmov(to,filename); - return 1; -#else - int result=0; - int length; - DBUG_ENTER("my_readlink"); - - if ((length=readlink(filename, to, FN_REFLEN-1)) < 0) - { - /* Don't give an error if this wasn't a symlink */ - if ((my_errno=errno) == EINVAL) - { - result= 1; - strmov(to,filename); - } - else - { - if (MyFlags & MY_WME) - my_error(EE_CANT_READLINK, MYF(0), filename, errno); - result= -1; - } - } - else - to[length]=0; - DBUG_PRINT("exit" ,("result: %d", result)); - DBUG_RETURN(result); -#endif /* HAVE_READLINK */ -} - - -/* Create a symbolic link */ - -int my_symlink(const char *content, const char *linkname, myf MyFlags) -{ -#ifndef HAVE_READLINK - return 0; -#else - int result; - DBUG_ENTER("my_symlink"); - DBUG_PRINT("enter",("content: %s linkname: %s", content, linkname)); - - result= 0; - if (symlink(content, linkname)) - { - result= -1; - my_errno=errno; - if (MyFlags & MY_WME) - my_error(EE_CANT_SYMLINK, MYF(0), linkname, content, errno); - } - else if ((MyFlags & MY_SYNC_DIR) && my_sync_dir_by_file(linkname, MyFlags)) - result= -1; - DBUG_RETURN(result); -#endif /* HAVE_READLINK */ -} - -#if defined(SCO) -#define BUFF_LEN 4097 -#elif defined(MAXPATHLEN) -#define BUFF_LEN MAXPATHLEN -#else -#define BUFF_LEN FN_LEN -#endif - - -int my_is_symlink(const char *filename __attribute__((unused))) -{ -#if defined (HAVE_LSTAT) && defined (S_ISLNK) - struct stat stat_buff; - return !lstat(filename, &stat_buff) && S_ISLNK(stat_buff.st_mode); -#elif defined (_WIN32) - DWORD dwAttr = GetFileAttributes(filename); - return (dwAttr != INVALID_FILE_ATTRIBUTES) && - (dwAttr & FILE_ATTRIBUTE_REPARSE_POINT); -#else /* No symlinks */ - return 0; -#endif -} - -/* - Resolve all symbolic links in path - 'to' may be equal to 'filename' -*/ - -int my_realpath(char *to, const char *filename, myf MyFlags) -{ -#if defined(HAVE_REALPATH) && !defined(HAVE_BROKEN_REALPATH) - int result=0; - char buff[BUFF_LEN]; - char *ptr; - DBUG_ENTER("my_realpath"); - - DBUG_PRINT("info",("executing realpath")); - if ((ptr=realpath(filename,buff))) - strmake(to,ptr,FN_REFLEN-1); - else - { - /* - Realpath didn't work; Use my_load_path() which is a poor substitute - original name but will at least be able to resolve paths that starts - with '.'. - */ - DBUG_PRINT("error",("realpath failed with errno: %d", errno)); - my_errno=errno; - if (MyFlags & MY_WME) - my_error(EE_REALPATH, MYF(0), filename, my_errno); - my_load_path(to, filename, NullS); - result= -1; - } - DBUG_RETURN(result); -#else -#ifdef _WIN32 - int ret= GetFullPathName(filename,FN_REFLEN, - to, - NULL); - if (ret == 0 || ret > FN_REFLEN) - { - if (ret > FN_REFLEN) - my_errno= ENAMETOOLONG; - else - my_errno= EACCES; - if (MyFlags & MY_WME) - my_error(EE_REALPATH, MYF(0), filename, my_errno); - return -1; - } -#else - my_load_path(to, filename, NullS); -#endif - return 0; -#endif -} diff --git a/deps/mysqllite/mysys/my_symlink2.c b/deps/mysqllite/mysys/my_symlink2.c deleted file mode 100644 index 7c3ddbb911cdc8..00000000000000 --- a/deps/mysqllite/mysys/my_symlink2.c +++ /dev/null @@ -1,183 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Advanced symlink handling. - This is used in MyISAM to let users symlinks tables to different disk. - The main idea with these functions is to automaticly create, delete and - rename files and symlinks like they would be one unit. -*/ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include - -File my_create_with_symlink(const char *linkname, const char *filename, - int createflags, int access_flags, myf MyFlags) -{ - File file; - int tmp_errno; - /* Test if we should create a link */ - int create_link; - char abs_linkname[FN_REFLEN]; - DBUG_ENTER("my_create_with_symlink"); - DBUG_PRINT("enter", ("linkname: %s filename: %s", - linkname ? linkname : "(null)", - filename ? filename : "(null)")); - - if (my_disable_symlinks) - { - DBUG_PRINT("info", ("Symlinks disabled")); - /* Create only the file, not the link and file */ - create_link= 0; - if (linkname) - filename= linkname; - } - else - { - if (linkname) - my_realpath(abs_linkname, linkname, MYF(0)); - create_link= (linkname && strcmp(abs_linkname,filename)); - } - - if (!(MyFlags & MY_DELETE_OLD)) - { - if (!access(filename,F_OK)) - { - my_errno= errno= EEXIST; - my_error(EE_CANTCREATEFILE, MYF(0), filename, EEXIST); - DBUG_RETURN(-1); - } - if (create_link && !access(linkname,F_OK)) - { - my_errno= errno= EEXIST; - my_error(EE_CANTCREATEFILE, MYF(0), linkname, EEXIST); - DBUG_RETURN(-1); - } - } - - if ((file=my_create(filename, createflags, access_flags, MyFlags)) >= 0) - { - if (create_link) - { - /* Delete old link/file */ - if (MyFlags & MY_DELETE_OLD) - my_delete(linkname, MYF(0)); - /* Create link */ - if (my_symlink(filename, linkname, MyFlags)) - { - /* Fail, remove everything we have done */ - tmp_errno=my_errno; - my_close(file,MYF(0)); - my_delete(filename, MYF(0)); - file= -1; - my_errno=tmp_errno; - } - } - } - DBUG_RETURN(file); -} - -/* - If the file was a symlink, delete both symlink and the file which the - symlink pointed to. -*/ - -int my_delete_with_symlink(const char *name, myf MyFlags) -{ - char link_name[FN_REFLEN]; - int was_symlink= (!my_disable_symlinks && - !my_readlink(link_name, name, MYF(0))); - int result; - DBUG_ENTER("my_delete_with_symlink"); - - if (!(result=my_delete(name, MyFlags))) - { - if (was_symlink) - result=my_delete(link_name, MyFlags); - } - DBUG_RETURN(result); -} - -/* - If the file is a normal file, just rename it. - If the file is a symlink: - - Create a new file with the name 'to' that points at - symlink_dir/basename(to) - - Rename the symlinked file to symlink_dir/basename(to) - - Delete 'from' - If something goes wrong, restore everything. -*/ - -int my_rename_with_symlink(const char *from, const char *to, myf MyFlags) -{ -#ifndef HAVE_READLINK - return my_rename(from, to, MyFlags); -#else - char link_name[FN_REFLEN], tmp_name[FN_REFLEN]; - int was_symlink= (!my_disable_symlinks && - !my_readlink(link_name, from, MYF(0))); - int result=0; - int name_is_different; - DBUG_ENTER("my_rename_with_symlink"); - - if (!was_symlink) - DBUG_RETURN(my_rename(from, to, MyFlags)); - - /* Change filename that symlink pointed to */ - strmov(tmp_name, to); - fn_same(tmp_name,link_name,1); /* Copy dir */ - name_is_different= strcmp(link_name, tmp_name); - if (name_is_different && !access(tmp_name, F_OK)) - { - my_errno= EEXIST; - if (MyFlags & MY_WME) - my_error(EE_CANTCREATEFILE, MYF(0), tmp_name, EEXIST); - DBUG_RETURN(1); - } - - /* Create new symlink */ - if (my_symlink(tmp_name, to, MyFlags)) - DBUG_RETURN(1); - - /* - Rename symlinked file if the base name didn't change. - This can happen if you use this function where 'from' and 'to' has - the same basename and different directories. - */ - - if (name_is_different && my_rename(link_name, tmp_name, MyFlags)) - { - int save_errno=my_errno; - my_delete(to, MyFlags); /* Remove created symlink */ - my_errno=save_errno; - DBUG_RETURN(1); - } - - /* Remove original symlink */ - if (my_delete(from, MyFlags)) - { - int save_errno=my_errno; - /* Remove created link */ - my_delete(to, MyFlags); - /* Rename file back */ - if (strcmp(link_name, tmp_name)) - (void) my_rename(tmp_name, link_name, MyFlags); - my_errno=save_errno; - result= 1; - } - DBUG_RETURN(result); -#endif /* HAVE_READLINK */ -} diff --git a/deps/mysqllite/mysys/my_sync.c b/deps/mysqllite/mysys/my_sync.c deleted file mode 100644 index e33a9342afa87e..00000000000000 --- a/deps/mysqllite/mysys/my_sync.c +++ /dev/null @@ -1,175 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include - -/* - Sync data in file to disk - - SYNOPSIS - my_sync() - fd File descritor to sync - my_flags Flags (now only MY_WME is supported) - - NOTE - If file system supports its, only file data is synced, not inode data. - - MY_IGNORE_BADFD is useful when fd is "volatile" - not protected by a - mutex. In this case by the time of fsync(), fd may be already closed by - another thread, or even reassigned to a different file. With this flag - - MY_IGNORE_BADFD - such a situation will not be considered an error. - (which is correct behaviour, if we know that the other thread synced the - file before closing) - - RETURN - 0 ok - -1 error -*/ - -int my_sync(File fd, myf my_flags) -{ - int res; - DBUG_ENTER("my_sync"); - DBUG_PRINT("my",("Fd: %d my_flags: %d", fd, my_flags)); - - do - { -#if defined(F_FULLFSYNC) - /* - In Mac OS X >= 10.3 this call is safer than fsync() (it forces the - disk's cache and guarantees ordered writes). - */ - if (!(res= fcntl(fd, F_FULLFSYNC, 0))) - break; /* ok */ - /* Some file systems don't support F_FULLFSYNC and fail above: */ - DBUG_PRINT("info",("fcntl(F_FULLFSYNC) failed, falling back")); -#endif -#if defined(HAVE_FDATASYNC) && HAVE_DECL_FDATASYNC - res= fdatasync(fd); -#elif defined(HAVE_FSYNC) - res= fsync(fd); -#elif defined(_WIN32) - res= my_win_fsync(fd); -#else -#error Cannot find a way to sync a file, durability in danger - res= 0; /* No sync (strange OS) */ -#endif - } while (res == -1 && errno == EINTR); - - if (res) - { - int er= errno; - if (!(my_errno= er)) - my_errno= -1; /* Unknown error */ - if ((my_flags & MY_IGNORE_BADFD) && - (er == EBADF || er == EINVAL || er == EROFS)) - { - DBUG_PRINT("info", ("ignoring errno %d", er)); - res= 0; - } - else if (my_flags & MY_WME) - my_error(EE_SYNC, MYF(ME_BELL+ME_WAITTANG), my_filename(fd), my_errno); - } - DBUG_RETURN(res); -} /* my_sync */ - - -static const char cur_dir_name[]= {FN_CURLIB, 0}; - - -/* - Force directory information to disk. - - SYNOPSIS - my_sync_dir() - dir_name the name of the directory - my_flags flags (MY_WME etc) - - RETURN - 0 if ok, !=0 if error -*/ - -#ifdef NEED_EXPLICIT_SYNC_DIR - -int my_sync_dir(const char *dir_name, myf my_flags) -{ - File dir_fd; - int res= 0; - const char *correct_dir_name; - DBUG_ENTER("my_sync_dir"); - DBUG_PRINT("my",("Dir: '%s' my_flags: %d", dir_name, my_flags)); - /* Sometimes the path does not contain an explicit directory */ - correct_dir_name= (dir_name[0] == 0) ? cur_dir_name : dir_name; - /* - Syncing a dir may give EINVAL on tmpfs on Linux, which is ok. - EIO on the other hand is very important. Hence MY_IGNORE_BADFD. - */ - if ((dir_fd= my_open(correct_dir_name, O_RDONLY, MYF(my_flags))) >= 0) - { - if (my_sync(dir_fd, MYF(my_flags | MY_IGNORE_BADFD))) - res= 2; - if (my_close(dir_fd, MYF(my_flags))) - res= 3; - } - else - res= 1; - DBUG_RETURN(res); -} - -#else /* NEED_EXPLICIT_SYNC_DIR */ - -int my_sync_dir(const char *dir_name __attribute__((unused)), - myf my_flags __attribute__((unused))) -{ - return 0; -} - -#endif /* NEED_EXPLICIT_SYNC_DIR */ - - -/* - Force directory information to disk. - - SYNOPSIS - my_sync_dir_by_file() - file_name the name of a file in the directory - my_flags flags (MY_WME etc) - - RETURN - 0 if ok, !=0 if error -*/ - -#ifdef NEED_EXPLICIT_SYNC_DIR - -int my_sync_dir_by_file(const char *file_name, myf my_flags) -{ - char dir_name[FN_REFLEN]; - size_t dir_name_length; - dirname_part(dir_name, file_name, &dir_name_length); - return my_sync_dir(dir_name, my_flags); -} - -#else /* NEED_EXPLICIT_SYNC_DIR */ - -int my_sync_dir_by_file(const char *file_name __attribute__((unused)), - myf my_flags __attribute__((unused))) -{ - return 0; -} - -#endif /* NEED_EXPLICIT_SYNC_DIR */ - diff --git a/deps/mysqllite/mysys/my_thr_init.c b/deps/mysqllite/mysys/my_thr_init.c deleted file mode 100644 index c4b56cde8502da..00000000000000 --- a/deps/mysqllite/mysys/my_thr_init.c +++ /dev/null @@ -1,533 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Functions to handle initializating and allocationg of all mysys & debug - thread variables. -*/ - -#include "mysys_priv.h" -#include -#include - -pthread_key(struct st_my_thread_var*, THR_KEY_mysys); -mysql_mutex_t THR_LOCK_malloc, THR_LOCK_open, - THR_LOCK_lock, THR_LOCK_isam, THR_LOCK_myisam, THR_LOCK_heap, - THR_LOCK_net, THR_LOCK_charset, THR_LOCK_threads, THR_LOCK_time, - THR_LOCK_myisam_mmap; - -mysql_cond_t THR_COND_threads; -uint THR_thread_count= 0; -uint my_thread_end_wait_time= 5; -#if !defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R) -mysql_mutex_t LOCK_localtime_r; -#endif -#ifndef HAVE_GETHOSTBYNAME_R -mysql_mutex_t LOCK_gethostbyname_r; -#endif -#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP -pthread_mutexattr_t my_fast_mutexattr; -#endif -#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP -pthread_mutexattr_t my_errorcheck_mutexattr; -#endif -#ifdef _MSC_VER -static void install_sigabrt_handler(); -#endif -#ifdef TARGET_OS_LINUX - -/* - Dummy thread spawned in my_thread_global_init() below to avoid - race conditions in NPTL pthread_exit code. -*/ - -static pthread_handler_t -nptl_pthread_exit_hack_handler(void *arg __attribute((unused))) -{ - /* Do nothing! */ - pthread_exit(0); - return 0; -} - -#endif /* TARGET_OS_LINUX */ - - -static uint get_thread_lib(void); - -/** True if @c my_thread_basic_global_init() has been called. */ -static my_bool my_thread_basic_global_init_done= 0; - -/** - Perform a minimal initialisation of mysys, when compiled with threads. - The initialisation performed is sufficient to: - - allocate memory - - perform file operations - - use charsets - - use my_errno - @sa my_basic_init - @sa my_thread_basic_global_reinit -*/ -my_bool my_thread_basic_global_init(void) -{ - int pth_ret; - - if (my_thread_basic_global_init_done) - return 0; - my_thread_basic_global_init_done= 1; - -#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP - /* - Set mutex type to "fast" a.k.a "adaptive" - - In this case the thread may steal the mutex from some other thread - that is waiting for the same mutex. This will save us some - context switches but may cause a thread to 'starve forever' while - waiting for the mutex (not likely if the code within the mutex is - short). - */ - pthread_mutexattr_init(&my_fast_mutexattr); - pthread_mutexattr_settype(&my_fast_mutexattr, - PTHREAD_MUTEX_ADAPTIVE_NP); -#endif - -#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP - /* - Set mutex type to "errorcheck" - */ - pthread_mutexattr_init(&my_errorcheck_mutexattr); - pthread_mutexattr_settype(&my_errorcheck_mutexattr, - PTHREAD_MUTEX_ERRORCHECK); -#endif - - mysql_mutex_init(key_THR_LOCK_malloc, &THR_LOCK_malloc, MY_MUTEX_INIT_FAST); - mysql_mutex_init(key_THR_LOCK_open, &THR_LOCK_open, MY_MUTEX_INIT_FAST); - mysql_mutex_init(key_THR_LOCK_charset, &THR_LOCK_charset, MY_MUTEX_INIT_FAST); - mysql_mutex_init(key_THR_LOCK_threads, &THR_LOCK_threads, MY_MUTEX_INIT_FAST); - - if ((pth_ret= pthread_key_create(&THR_KEY_mysys, NULL)) != 0) - { - fprintf(stderr, "Can't initialize threads: error %d\n", pth_ret); - return 1; - } - - if (my_thread_init()) - return 1; - - return 0; -} - -/** - Re-initialize components initialized early with @c my_thread_basic_global_init. - Some mutexes were initialized before the instrumentation. - Destroy + create them again, now that the instrumentation - is in place. - This is safe, since this function() is called before creating new threads, - so the mutexes are not in use. -*/ -void my_thread_basic_global_reinit(void) -{ - struct st_my_thread_var *tmp; - - DBUG_ASSERT(my_thread_basic_global_init_done); - -#ifdef HAVE_PSI_INTERFACE - my_init_mysys_psi_keys(); -#endif - - mysql_mutex_destroy(&THR_LOCK_malloc); - mysql_mutex_init(key_THR_LOCK_malloc, &THR_LOCK_malloc, MY_MUTEX_INIT_FAST); - - mysql_mutex_destroy(&THR_LOCK_open); - mysql_mutex_init(key_THR_LOCK_open, &THR_LOCK_open, MY_MUTEX_INIT_FAST); - - mysql_mutex_destroy(&THR_LOCK_charset); - mysql_mutex_init(key_THR_LOCK_charset, &THR_LOCK_charset, MY_MUTEX_INIT_FAST); - - mysql_mutex_destroy(&THR_LOCK_threads); - mysql_mutex_init(key_THR_LOCK_threads, &THR_LOCK_threads, MY_MUTEX_INIT_FAST); - - tmp= my_pthread_getspecific(struct st_my_thread_var*, THR_KEY_mysys); - DBUG_ASSERT(tmp); - - mysql_mutex_destroy(&tmp->mutex); - mysql_mutex_init(key_my_thread_var_mutex, &tmp->mutex, MY_MUTEX_INIT_FAST); - - mysql_cond_destroy(&tmp->suspend); - mysql_cond_init(key_my_thread_var_suspend, &tmp->suspend, NULL); -} - -/* - initialize thread environment - - SYNOPSIS - my_thread_global_init() - - RETURN - 0 ok - 1 error (Couldn't create THR_KEY_mysys) -*/ - -my_bool my_thread_global_init(void) -{ - if (my_thread_basic_global_init()) - return 1; - - thd_lib_detected= get_thread_lib(); - -#ifdef TARGET_OS_LINUX - /* - BUG#24507: Race conditions inside current NPTL pthread_exit() - implementation. - - To avoid a possible segmentation fault during concurrent - executions of pthread_exit(), a dummy thread is spawned which - initializes internal variables of pthread lib. See bug description - for a full explanation. - - TODO: Remove this code when fixed versions of glibc6 are in common - use. - */ - if (thd_lib_detected == THD_LIB_NPTL) - { - pthread_t dummy_thread; - pthread_attr_t dummy_thread_attr; - - pthread_attr_init(&dummy_thread_attr); - pthread_attr_setdetachstate(&dummy_thread_attr, PTHREAD_CREATE_JOINABLE); - - if (pthread_create(&dummy_thread,&dummy_thread_attr, - nptl_pthread_exit_hack_handler, NULL) == 0) - (void)pthread_join(dummy_thread, NULL); - } -#endif /* TARGET_OS_LINUX */ - - mysql_mutex_init(key_THR_LOCK_lock, &THR_LOCK_lock, MY_MUTEX_INIT_FAST); - mysql_mutex_init(key_THR_LOCK_isam, &THR_LOCK_isam, MY_MUTEX_INIT_SLOW); - mysql_mutex_init(key_THR_LOCK_myisam, &THR_LOCK_myisam, MY_MUTEX_INIT_SLOW); - mysql_mutex_init(key_THR_LOCK_myisam_mmap, &THR_LOCK_myisam_mmap, MY_MUTEX_INIT_FAST); - mysql_mutex_init(key_THR_LOCK_heap, &THR_LOCK_heap, MY_MUTEX_INIT_FAST); - mysql_mutex_init(key_THR_LOCK_net, &THR_LOCK_net, MY_MUTEX_INIT_FAST); - mysql_mutex_init(key_THR_LOCK_time, &THR_LOCK_time, MY_MUTEX_INIT_FAST); - mysql_cond_init(key_THR_COND_threads, &THR_COND_threads, NULL); - -#if !defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R) - mysql_mutex_init(key_LOCK_localtime_r, &LOCK_localtime_r, MY_MUTEX_INIT_SLOW); -#endif -#ifndef HAVE_GETHOSTBYNAME_R - mysql_mutex_init(key_LOCK_gethostbyname_r, - &LOCK_gethostbyname_r, MY_MUTEX_INIT_SLOW); -#endif - -#ifdef _MSC_VER - install_sigabrt_handler(); -#endif - - if (my_thread_init()) - { - my_thread_global_end(); /* Clean up */ - return 1; - } - return 0; -} - - -void my_thread_global_end(void) -{ - struct timespec abstime; - my_bool all_threads_killed= 1; - - set_timespec(abstime, my_thread_end_wait_time); - mysql_mutex_lock(&THR_LOCK_threads); - while (THR_thread_count > 0) - { - int error= mysql_cond_timedwait(&THR_COND_threads, &THR_LOCK_threads, - &abstime); - if (error == ETIMEDOUT || error == ETIME) - { -#ifdef HAVE_PTHREAD_KILL - /* - We shouldn't give an error here, because if we don't have - pthread_kill(), programs like mysqld can't ensure that all threads - are killed when we enter here. - */ - if (THR_thread_count) - fprintf(stderr, - "Error in my_thread_global_end(): %d threads didn't exit\n", - THR_thread_count); -#endif - all_threads_killed= 0; - break; - } - } - mysql_mutex_unlock(&THR_LOCK_threads); - - pthread_key_delete(THR_KEY_mysys); -#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP - pthread_mutexattr_destroy(&my_fast_mutexattr); -#endif -#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP - pthread_mutexattr_destroy(&my_errorcheck_mutexattr); -#endif - mysql_mutex_destroy(&THR_LOCK_malloc); - mysql_mutex_destroy(&THR_LOCK_open); - mysql_mutex_destroy(&THR_LOCK_lock); - mysql_mutex_destroy(&THR_LOCK_isam); - mysql_mutex_destroy(&THR_LOCK_myisam); - mysql_mutex_destroy(&THR_LOCK_myisam_mmap); - mysql_mutex_destroy(&THR_LOCK_heap); - mysql_mutex_destroy(&THR_LOCK_net); - mysql_mutex_destroy(&THR_LOCK_time); - mysql_mutex_destroy(&THR_LOCK_charset); - if (all_threads_killed) - { - mysql_mutex_destroy(&THR_LOCK_threads); - mysql_cond_destroy(&THR_COND_threads); - } -#if !defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R) - mysql_mutex_destroy(&LOCK_localtime_r); -#endif -#ifndef HAVE_GETHOSTBYNAME_R - mysql_mutex_destroy(&LOCK_gethostbyname_r); -#endif - - my_thread_basic_global_init_done= 0; -} - -static my_thread_id thread_id= 0; - -/* - Allocate thread specific memory for the thread, used by mysys and dbug - - SYNOPSIS - my_thread_init() - - NOTES - We can't use mutex_locks here if we are using windows as - we may have compiled the program with SAFE_MUTEX, in which - case the checking of mutex_locks will not work until - the pthread_self thread specific variable is initialized. - - This function may called multiple times for a thread, for example - if one uses my_init() followed by mysql_server_init(). - - RETURN - 0 ok - 1 Fatal error; mysys/dbug functions can't be used -*/ - -my_bool my_thread_init(void) -{ - struct st_my_thread_var *tmp; - my_bool error=0; - -#ifdef EXTRA_DEBUG_THREADS - fprintf(stderr,"my_thread_init(): thread_id: 0x%lx\n", - (ulong) pthread_self()); -#endif - - if (my_pthread_getspecific(struct st_my_thread_var *,THR_KEY_mysys)) - { -#ifdef EXTRA_DEBUG_THREADS - fprintf(stderr,"my_thread_init() called more than once in thread 0x%lx\n", - (long) pthread_self()); -#endif - goto end; - } - -#ifdef _MSC_VER - install_sigabrt_handler(); -#endif - - if (!(tmp= (struct st_my_thread_var *) calloc(1, sizeof(*tmp)))) - { - error= 1; - goto end; - } - pthread_setspecific(THR_KEY_mysys,tmp); - tmp->pthread_self= pthread_self(); - mysql_mutex_init(key_my_thread_var_mutex, &tmp->mutex, MY_MUTEX_INIT_FAST); - mysql_cond_init(key_my_thread_var_suspend, &tmp->suspend, NULL); - - tmp->stack_ends_here= (char*)&tmp + - STACK_DIRECTION * (long)my_thread_stack_size; - - mysql_mutex_lock(&THR_LOCK_threads); - tmp->id= ++thread_id; - ++THR_thread_count; - mysql_mutex_unlock(&THR_LOCK_threads); - tmp->init= 1; -#ifndef DBUG_OFF - /* Generate unique name for thread */ - (void) my_thread_name(); -#endif - -end: - return error; -} - - -/* - Deallocate memory used by the thread for book-keeping - - SYNOPSIS - my_thread_end() - - NOTE - This may be called multiple times for a thread. - This happens for example when one calls 'mysql_server_init()' - mysql_server_end() and then ends with a mysql_end(). -*/ - -void my_thread_end(void) -{ - struct st_my_thread_var *tmp; - tmp= my_pthread_getspecific(struct st_my_thread_var*,THR_KEY_mysys); - -#ifdef EXTRA_DEBUG_THREADS - fprintf(stderr,"my_thread_end(): tmp: 0x%lx pthread_self: 0x%lx thread_id: %ld\n", - (long) tmp, (long) pthread_self(), tmp ? (long) tmp->id : 0L); -#endif - -#ifdef HAVE_PSI_INTERFACE - /* - Remove the instrumentation for this thread. - This must be done before trashing st_my_thread_var, - because the LF_HASH depends on it. - */ - if (PSI_server) - PSI_server->delete_current_thread(); -#endif - - if (tmp && tmp->init) - { -#if !defined(DBUG_OFF) - /* tmp->dbug is allocated inside DBUG library */ - if (tmp->dbug) - { - DBUG_POP(); - free(tmp->dbug); - tmp->dbug=0; - } -#endif -#if !defined(__bsdi__) && !defined(__OpenBSD__) - /* bsdi and openbsd 3.5 dumps core here */ - mysql_cond_destroy(&tmp->suspend); -#endif - mysql_mutex_destroy(&tmp->mutex); - free(tmp); - - /* - Decrement counter for number of running threads. We are using this - in my_thread_global_end() to wait until all threads have called - my_thread_end and thus freed all memory they have allocated in - my_thread_init() and DBUG_xxxx - */ - mysql_mutex_lock(&THR_LOCK_threads); - DBUG_ASSERT(THR_thread_count != 0); - if (--THR_thread_count == 0) - mysql_cond_signal(&THR_COND_threads); - mysql_mutex_unlock(&THR_LOCK_threads); - } - pthread_setspecific(THR_KEY_mysys,0); -} - -struct st_my_thread_var *_my_thread_var(void) -{ - return my_pthread_getspecific(struct st_my_thread_var*,THR_KEY_mysys); -} - - -/**************************************************************************** - Get name of current thread. -****************************************************************************/ - -my_thread_id my_thread_dbug_id() -{ - return my_thread_var->id; -} - -#ifdef DBUG_OFF -const char *my_thread_name(void) -{ - return "no_name"; -} - -#else - -const char *my_thread_name(void) -{ - char name_buff[100]; - struct st_my_thread_var *tmp=my_thread_var; - if (!tmp->name[0]) - { - my_thread_id id= my_thread_dbug_id(); - sprintf(name_buff,"T@%lu", (ulong) id); - strmake(tmp->name,name_buff,THREAD_NAME_SIZE); - } - return tmp->name; -} - -/* Return pointer to DBUG for holding current state */ - -extern void **my_thread_var_dbug() -{ - struct st_my_thread_var *tmp= - my_pthread_getspecific(struct st_my_thread_var*,THR_KEY_mysys); - return tmp && tmp->init ? &tmp->dbug : 0; -} -#endif /* DBUG_OFF */ - - -static uint get_thread_lib(void) -{ -#ifdef _CS_GNU_LIBPTHREAD_VERSION - char buff[64]; - - confstr(_CS_GNU_LIBPTHREAD_VERSION, buff, sizeof(buff)); - - if (!strncasecmp(buff, "NPTL", 4)) - return THD_LIB_NPTL; - if (!strncasecmp(buff, "linuxthreads", 12)) - return THD_LIB_LT; -#endif - return THD_LIB_OTHER; -} - -#ifdef _WIN32 -/* - In Visual Studio 2005 and later, default SIGABRT handler will overwrite - any unhandled exception filter set by the application and will try to - call JIT debugger. This is not what we want, this we calling __debugbreak - to stop in debugger, if process is being debugged or to generate - EXCEPTION_BREAKPOINT and then handle_segfault will do its magic. -*/ - -#if (_MSC_VER >= 1400) -static void my_sigabrt_handler(int sig) -{ - __debugbreak(); -} -#endif /*_MSC_VER >=1400 */ - -static void install_sigabrt_handler(void) -{ -#if (_MSC_VER >=1400) - /*abort() should not override our exception filter*/ - _set_abort_behavior(0,_CALL_REPORTFAULT); - signal(SIGABRT,my_sigabrt_handler); -#endif /* _MSC_VER >=1400 */ -} -#endif - diff --git a/deps/mysqllite/mysys/my_wincond.c b/deps/mysqllite/mysys/my_wincond.c deleted file mode 100644 index 58c09e332d60ad..00000000000000 --- a/deps/mysqllite/mysys/my_wincond.c +++ /dev/null @@ -1,369 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/***************************************************************************** -** The following is a simple implementation of posix conditions -*****************************************************************************/ -#if defined(_WIN32) - -#undef SAFE_MUTEX /* Avoid safe_mutex redefinitions */ -#include "mysys_priv.h" -#include -#include -#include - - -/* - Windows native condition variables. We use runtime loading / function - pointers, because they are not available on XP -*/ - -/* Prototypes and function pointers for condition variable functions */ -typedef VOID (WINAPI * InitializeConditionVariableProc) - (PCONDITION_VARIABLE ConditionVariable); - -typedef BOOL (WINAPI * SleepConditionVariableCSProc) - (PCONDITION_VARIABLE ConditionVariable, - PCRITICAL_SECTION CriticalSection, - DWORD dwMilliseconds); - -typedef VOID (WINAPI * WakeAllConditionVariableProc) - (PCONDITION_VARIABLE ConditionVariable); - -typedef VOID (WINAPI * WakeConditionVariableProc) - (PCONDITION_VARIABLE ConditionVariable); - -static InitializeConditionVariableProc my_InitializeConditionVariable; -static SleepConditionVariableCSProc my_SleepConditionVariableCS; -static WakeAllConditionVariableProc my_WakeAllConditionVariable; -static WakeConditionVariableProc my_WakeConditionVariable; - - -/** - Indicates if we have native condition variables, - initialized first time pthread_cond_init is called. -*/ - -static BOOL have_native_conditions= FALSE; - - -/** - Check if native conditions can be used, load function pointers -*/ - -static void check_native_cond_availability(void) -{ - HMODULE module= GetModuleHandle("kernel32"); - - my_InitializeConditionVariable= (InitializeConditionVariableProc) - GetProcAddress(module, "InitializeConditionVariable"); - my_SleepConditionVariableCS= (SleepConditionVariableCSProc) - GetProcAddress(module, "SleepConditionVariableCS"); - my_WakeAllConditionVariable= (WakeAllConditionVariableProc) - GetProcAddress(module, "WakeAllConditionVariable"); - my_WakeConditionVariable= (WakeConditionVariableProc) - GetProcAddress(module, "WakeConditionVariable"); - - if (my_InitializeConditionVariable) - have_native_conditions= TRUE; -} - - - -/** - Convert abstime to milliseconds -*/ - -static DWORD get_milliseconds(const struct timespec *abstime) -{ - long long millis; - union ft64 now; - - if (abstime == NULL) - return INFINITE; - - GetSystemTimeAsFileTime(&now.ft); - - /* - Calculate time left to abstime - - subtract start time from current time(values are in 100ns units) - - convert to millisec by dividing with 10000 - */ - millis= (abstime->tv.i64 - now.i64) / 10000; - - /* Don't allow the timeout to be negative */ - if (millis < 0) - return 0; - - /* - Make sure the calculated timeout does not exceed original timeout - value which could cause "wait for ever" if system time changes - */ - if (millis > abstime->max_timeout_msec) - millis= abstime->max_timeout_msec; - - if (millis > UINT_MAX) - millis= UINT_MAX; - - return (DWORD)millis; -} - - -/* - Old (pre-vista) implementation using events -*/ - -static int legacy_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) -{ - cond->waiting= 0; - InitializeCriticalSection(&cond->lock_waiting); - - cond->events[SIGNAL]= CreateEvent(NULL, /* no security */ - FALSE, /* auto-reset event */ - FALSE, /* non-signaled initially */ - NULL); /* unnamed */ - - /* Create a manual-reset event. */ - cond->events[BROADCAST]= CreateEvent(NULL, /* no security */ - TRUE, /* manual-reset */ - FALSE, /* non-signaled initially */ - NULL); /* unnamed */ - - - cond->broadcast_block_event= CreateEvent(NULL, /* no security */ - TRUE, /* manual-reset */ - TRUE, /* signaled initially */ - NULL); /* unnamed */ - - if( cond->events[SIGNAL] == NULL || - cond->events[BROADCAST] == NULL || - cond->broadcast_block_event == NULL ) - return ENOMEM; - return 0; -} - - -static int legacy_cond_destroy(pthread_cond_t *cond) -{ - DeleteCriticalSection(&cond->lock_waiting); - - if (CloseHandle(cond->events[SIGNAL]) == 0 || - CloseHandle(cond->events[BROADCAST]) == 0 || - CloseHandle(cond->broadcast_block_event) == 0) - return EINVAL; - return 0; -} - - -static int legacy_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, - struct timespec *abstime) -{ - int result; - DWORD timeout; - - timeout= get_milliseconds(abstime); - /* - Block access if previous broadcast hasn't finished. - This is just for safety and should normally not - affect the total time spent in this function. - */ - WaitForSingleObject(cond->broadcast_block_event, INFINITE); - - EnterCriticalSection(&cond->lock_waiting); - cond->waiting++; - LeaveCriticalSection(&cond->lock_waiting); - - LeaveCriticalSection(mutex); - result= WaitForMultipleObjects(2, cond->events, FALSE, timeout); - - EnterCriticalSection(&cond->lock_waiting); - cond->waiting--; - - if (cond->waiting == 0) - { - /* - We're the last waiter to be notified or to stop waiting, so - reset the manual event. - */ - /* Close broadcast gate */ - ResetEvent(cond->events[BROADCAST]); - /* Open block gate */ - SetEvent(cond->broadcast_block_event); - } - LeaveCriticalSection(&cond->lock_waiting); - - EnterCriticalSection(mutex); - - return result == WAIT_TIMEOUT ? ETIMEDOUT : 0; -} - -static int legacy_cond_signal(pthread_cond_t *cond) -{ - EnterCriticalSection(&cond->lock_waiting); - - if(cond->waiting > 0) - SetEvent(cond->events[SIGNAL]); - - LeaveCriticalSection(&cond->lock_waiting); - - return 0; -} - - -static int legacy_cond_broadcast(pthread_cond_t *cond) -{ - EnterCriticalSection(&cond->lock_waiting); - /* - The mutex protect us from broadcasting if - there isn't any thread waiting to open the - block gate after this call has closed it. - */ - if(cond->waiting > 0) - { - /* Close block gate */ - ResetEvent(cond->broadcast_block_event); - /* Open broadcast gate */ - SetEvent(cond->events[BROADCAST]); - } - - LeaveCriticalSection(&cond->lock_waiting); - - return 0; -} - - -/* - Posix API functions. Just choose between native and legacy implementation. -*/ - -int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) -{ - /* - Once initialization is used here rather than in my_init(), to - 1) avoid my_init() pitfalls- undefined order in which initialization should - run - 2) be potentially useful C++ (in static constructors that run before main()) - 3) just to simplify the API. - Also, the overhead of my_pthread_once is very small. - */ - static my_pthread_once_t once_control= MY_PTHREAD_ONCE_INIT; - my_pthread_once(&once_control, check_native_cond_availability); - - if (have_native_conditions) - { - my_InitializeConditionVariable(&cond->native_cond); - return 0; - } - else - return legacy_cond_init(cond, attr); -} - - -int pthread_cond_destroy(pthread_cond_t *cond) -{ - if (have_native_conditions) - return 0; /* no destroy function */ - else - return legacy_cond_destroy(cond); -} - - -int pthread_cond_broadcast(pthread_cond_t *cond) -{ - if (have_native_conditions) - { - my_WakeAllConditionVariable(&cond->native_cond); - return 0; - } - else - return legacy_cond_broadcast(cond); -} - - -int pthread_cond_signal(pthread_cond_t *cond) -{ - if (have_native_conditions) - { - my_WakeConditionVariable(&cond->native_cond); - return 0; - } - else - return legacy_cond_signal(cond); -} - - -int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, - struct timespec *abstime) -{ - if (have_native_conditions) - { - DWORD timeout= get_milliseconds(abstime); - if (!my_SleepConditionVariableCS(&cond->native_cond, mutex, timeout)) - return ETIMEDOUT; - return 0; - } - else - return legacy_cond_timedwait(cond, mutex, abstime); -} - - -int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) -{ - return pthread_cond_timedwait(cond, mutex, NULL); -} - - -int pthread_attr_init(pthread_attr_t *connect_att) -{ - connect_att->dwStackSize = 0; - connect_att->dwCreatingFlag = 0; - return 0; -} - -int pthread_attr_setstacksize(pthread_attr_t *connect_att,DWORD stack) -{ - connect_att->dwStackSize=stack; - return 0; -} - -int pthread_attr_destroy(pthread_attr_t *connect_att) -{ - bzero((uchar*) connect_att,sizeof(*connect_att)); - return 0; -} - -/**************************************************************************** -** Fix localtime_r() to be a bit safer -****************************************************************************/ - -struct tm *localtime_r(const time_t *timep,struct tm *tmp) -{ - if (*timep == (time_t) -1) /* This will crash win32 */ - { - bzero(tmp,sizeof(*tmp)); - } - else - { - struct tm *res=localtime(timep); - if (!res) /* Wrong date */ - { - bzero(tmp,sizeof(*tmp)); /* Keep things safe */ - return 0; - } - *tmp= *res; - } - return tmp; -} -#endif /* __WIN__ */ diff --git a/deps/mysqllite/mysys/my_windac.c b/deps/mysqllite/mysys/my_windac.c deleted file mode 100644 index 0c9241886232fc..00000000000000 --- a/deps/mysqllite/mysys/my_windac.c +++ /dev/null @@ -1,223 +0,0 @@ -/* Copyright (C) 2000-2005 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "m_string.h" -#ifdef __WIN__ - -/* Windows NT/2000 discretionary access control utility functions. */ - -/* - Check if the operating system is built on NT technology. - - RETURN - 0 Windows 95/98/Me - 1 otherwise -*/ - -static my_bool is_nt() -{ - return GetVersion() < 0x80000000; -} - -/* - Auxilary structure to store pointers to the data which we need to keep - around while SECURITY_ATTRIBUTES is in use. -*/ - -typedef struct st_my_security_attr -{ - PSID everyone_sid; - PACL dacl; -} My_security_attr; - - -/* - Allocate and initialize SECURITY_ATTRIBUTES setting up access - rights for the owner and group `Everybody'. - - SYNOPSIS - my_security_attr_create() - psa [OUT] pointer to store the pointer to SA in - perror [OUT] pointer to store error message if there was an - error - owner_rights [IN] access rights for the owner - everyone_rights [IN] access rights for group Everybody - - DESCRIPTION - Set up the security attributes to provide clients with sufficient - access rights to a kernel object. We need this function - because if we simply grant all access to everybody (by installing - a NULL DACL) a mailicious user can attempt a denial of service - attack by taking ownership over the kernel object. Upon successful - return `psa' contains a pointer to SECUIRITY_ATTRIBUTES that can be used - to create kernel objects with proper access rights. - - RETURN - 0 success, psa is 0 or points to a valid SA structure, - perror is left intact - !0 error, SA is set to 0, error message is stored in perror -*/ - -int my_security_attr_create(SECURITY_ATTRIBUTES **psa, const char **perror, - DWORD owner_rights, DWORD everyone_rights) -{ - /* Top-level SID authority */ - SID_IDENTIFIER_AUTHORITY world_auth= SECURITY_WORLD_SID_AUTHORITY; - PSID everyone_sid= 0; - HANDLE htoken= 0; - SECURITY_ATTRIBUTES *sa= 0; - PACL dacl= 0; - DWORD owner_token_length, dacl_length; - SECURITY_DESCRIPTOR *sd; - PTOKEN_USER owner_token; - PSID owner_sid; - My_security_attr *attr; - - if (! is_nt()) - { - *psa= 0; - return 0; - } - - /* - Get SID of Everyone group. Easier to retrieve all SIDs each time - this function is called than worry about thread safety. - */ - if (! AllocateAndInitializeSid(&world_auth, 1, SECURITY_WORLD_RID, - 0, 0, 0, 0, 0, 0, 0, &everyone_sid)) - { - *perror= "Failed to retrieve the SID of Everyone group"; - goto error; - } - - /* - Get SID of the owner. Using GetSecurityInfo this task can be done - in just one call instead of five, but GetSecurityInfo declared in - aclapi.h, so I hesitate to use it. - SIC: OpenThreadToken works only if there is an active impersonation - token, hence OpenProcessToken is used. - */ - if (! OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &htoken)) - { - *perror= "Failed to retrieve thread access token"; - goto error; - } - GetTokenInformation(htoken, TokenUser, 0, 0, &owner_token_length); - - if (! my_multi_malloc(MYF(MY_WME), - &sa, ALIGN_SIZE(sizeof(SECURITY_ATTRIBUTES)) + - sizeof(My_security_attr), - &sd, sizeof(SECURITY_DESCRIPTOR), - &owner_token, owner_token_length, - 0)) - { - *perror= "Failed to allocate memory for SECURITY_ATTRIBUTES"; - goto error; - } - bzero(owner_token, owner_token_length); - if (! GetTokenInformation(htoken, TokenUser, owner_token, - owner_token_length, &owner_token_length)) - { - *perror= "GetTokenInformation failed"; - goto error; - } - owner_sid= owner_token->User.Sid; - - if (! IsValidSid(owner_sid)) - { - *perror= "IsValidSid failed"; - goto error; - } - - /* Calculate the amount of memory that must be allocated for the DACL */ - dacl_length= sizeof(ACL) + (sizeof(ACCESS_ALLOWED_ACE)-sizeof(DWORD)) * 2 + - GetLengthSid(everyone_sid) + GetLengthSid(owner_sid); - - /* Create an ACL */ - if (! (dacl= (PACL) my_malloc(dacl_length, MYF(MY_ZEROFILL|MY_WME)))) - { - *perror= "Failed to allocate memory for DACL"; - goto error; - } - if (! InitializeAcl(dacl, dacl_length, ACL_REVISION)) - { - *perror= "Failed to initialize DACL"; - goto error; - } - if (! AddAccessAllowedAce(dacl, ACL_REVISION, everyone_rights, everyone_sid)) - { - *perror= "Failed to set up DACL"; - goto error; - } - if (! AddAccessAllowedAce(dacl, ACL_REVISION, owner_rights, owner_sid)) - { - *perror= "Failed to set up DACL"; - goto error; - } - if (! InitializeSecurityDescriptor(sd, SECURITY_DESCRIPTOR_REVISION)) - { - *perror= "Could not initialize security descriptor"; - goto error; - } - if (! SetSecurityDescriptorDacl(sd, TRUE, dacl, FALSE)) - { - *perror= "Failed to install DACL"; - goto error; - } - - sa->nLength= sizeof(*sa); - sa->bInheritHandle= TRUE; - sa->lpSecurityDescriptor= sd; - /* Save pointers to everyone_sid and dacl to be able to clean them up */ - attr= (My_security_attr*) (((char*) sa) + ALIGN_SIZE(sizeof(*sa))); - attr->everyone_sid= everyone_sid; - attr->dacl= dacl; - *psa= sa; - - CloseHandle(htoken); - return 0; -error: - if (everyone_sid) - FreeSid(everyone_sid); - if (htoken) - CloseHandle(htoken); - my_free(sa); - my_free(dacl); - *psa= 0; - return 1; -} - -/* - Cleanup security attributes freeing used memory. - - SYNOPSIS - my_security_attr_free() - sa security attributes -*/ - -void my_security_attr_free(SECURITY_ATTRIBUTES *sa) -{ - if (sa) - { - My_security_attr *attr= (My_security_attr*) - (((char*)sa) + ALIGN_SIZE(sizeof(*sa))); - FreeSid(attr->everyone_sid); - my_free(attr->dacl); - my_free(sa); - } -} - -#endif /* __WIN__ */ diff --git a/deps/mysqllite/mysys/my_winerr.c b/deps/mysqllite/mysys/my_winerr.c deleted file mode 100644 index 534078b6737a1a..00000000000000 --- a/deps/mysqllite/mysys/my_winerr.c +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright (C) 2008 MySQL AB - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; version 2 of the License. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Convert Windows API error (GetLastError() to Posix equivalent (errno) - The exported function my_osmaperr() is modelled after and borrows - heavily from undocumented _dosmaperr()(found of the static Microsoft C runtime). -*/ - -#include -#include - - -struct errentry -{ - unsigned long oscode; /* OS return value */ - int sysv_errno; /* System V error code */ -}; - -static struct errentry errtable[]= { - { ERROR_INVALID_FUNCTION, EINVAL }, /* 1 */ - { ERROR_FILE_NOT_FOUND, ENOENT }, /* 2 */ - { ERROR_PATH_NOT_FOUND, ENOENT }, /* 3 */ - { ERROR_TOO_MANY_OPEN_FILES, EMFILE }, /* 4 */ - { ERROR_ACCESS_DENIED, EACCES }, /* 5 */ - { ERROR_INVALID_HANDLE, EBADF }, /* 6 */ - { ERROR_ARENA_TRASHED, ENOMEM }, /* 7 */ - { ERROR_NOT_ENOUGH_MEMORY, ENOMEM }, /* 8 */ - { ERROR_INVALID_BLOCK, ENOMEM }, /* 9 */ - { ERROR_BAD_ENVIRONMENT, E2BIG }, /* 10 */ - { ERROR_BAD_FORMAT, ENOEXEC }, /* 11 */ - { ERROR_INVALID_ACCESS, EINVAL }, /* 12 */ - { ERROR_INVALID_DATA, EINVAL }, /* 13 */ - { ERROR_INVALID_DRIVE, ENOENT }, /* 15 */ - { ERROR_CURRENT_DIRECTORY, EACCES }, /* 16 */ - { ERROR_NOT_SAME_DEVICE, EXDEV }, /* 17 */ - { ERROR_NO_MORE_FILES, ENOENT }, /* 18 */ - { ERROR_LOCK_VIOLATION, EACCES }, /* 33 */ - { ERROR_BAD_NETPATH, ENOENT }, /* 53 */ - { ERROR_NETWORK_ACCESS_DENIED, EACCES }, /* 65 */ - { ERROR_BAD_NET_NAME, ENOENT }, /* 67 */ - { ERROR_FILE_EXISTS, EEXIST }, /* 80 */ - { ERROR_CANNOT_MAKE, EACCES }, /* 82 */ - { ERROR_FAIL_I24, EACCES }, /* 83 */ - { ERROR_INVALID_PARAMETER, EINVAL }, /* 87 */ - { ERROR_NO_PROC_SLOTS, EAGAIN }, /* 89 */ - { ERROR_DRIVE_LOCKED, EACCES }, /* 108 */ - { ERROR_BROKEN_PIPE, EPIPE }, /* 109 */ - { ERROR_DISK_FULL, ENOSPC }, /* 112 */ - { ERROR_INVALID_TARGET_HANDLE, EBADF }, /* 114 */ - { ERROR_INVALID_HANDLE, EINVAL }, /* 124 */ - { ERROR_WAIT_NO_CHILDREN, ECHILD }, /* 128 */ - { ERROR_CHILD_NOT_COMPLETE, ECHILD }, /* 129 */ - { ERROR_DIRECT_ACCESS_HANDLE, EBADF }, /* 130 */ - { ERROR_NEGATIVE_SEEK, EINVAL }, /* 131 */ - { ERROR_SEEK_ON_DEVICE, EACCES }, /* 132 */ - { ERROR_DIR_NOT_EMPTY, ENOTEMPTY }, /* 145 */ - { ERROR_NOT_LOCKED, EACCES }, /* 158 */ - { ERROR_BAD_PATHNAME, ENOENT }, /* 161 */ - { ERROR_MAX_THRDS_REACHED, EAGAIN }, /* 164 */ - { ERROR_LOCK_FAILED, EACCES }, /* 167 */ - { ERROR_ALREADY_EXISTS, EEXIST }, /* 183 */ - { ERROR_FILENAME_EXCED_RANGE, ENOENT }, /* 206 */ - { ERROR_NESTING_NOT_ALLOWED, EAGAIN }, /* 215 */ - { ERROR_NOT_ENOUGH_QUOTA, ENOMEM } /* 1816 */ -}; - -/* size of the table */ -#define ERRTABLESIZE (sizeof(errtable)/sizeof(errtable[0])) - -/* The following two constants must be the minimum and maximum -values in the (contiguous) range of Exec Failure errors. */ -#define MIN_EXEC_ERROR ERROR_INVALID_STARTING_CODESEG -#define MAX_EXEC_ERROR ERROR_INFLOOP_IN_RELOC_CHAIN - -/* These are the low and high value in the range of errors that are -access violations */ -#define MIN_EACCES_RANGE ERROR_WRITE_PROTECT -#define MAX_EACCES_RANGE ERROR_SHARING_BUFFER_EXCEEDED - - -static int get_errno_from_oserr(unsigned long oserrno) -{ - int i; - - /* check the table for the OS error code */ - for (i= 0; i < ERRTABLESIZE; ++i) - { - if (oserrno == errtable[i].oscode) - { - return errtable[i].sysv_errno; - } - } - - /* The error code wasn't in the table. We check for a range of */ - /* EACCES errors or exec failure errors (ENOEXEC). Otherwise */ - /* EINVAL is returned. */ - - if (oserrno >= MIN_EACCES_RANGE && oserrno <= MAX_EACCES_RANGE) - return EACCES; - else if (oserrno >= MIN_EXEC_ERROR && oserrno <= MAX_EXEC_ERROR) - return ENOEXEC; - else - return EINVAL; -} - -/* Set errno corresponsing to GetLastError() value */ -void my_osmaperr ( unsigned long oserrno) -{ - errno= get_errno_from_oserr(oserrno); -} diff --git a/deps/mysqllite/mysys/my_winfile.c b/deps/mysqllite/mysys/my_winfile.c deleted file mode 100644 index 4d80d774dad8ab..00000000000000 --- a/deps/mysqllite/mysys/my_winfile.c +++ /dev/null @@ -1,681 +0,0 @@ -/* Copyright (C) 2008 MySQL AB, 2008-2009 Sun Microsystems, Inc - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; version 2 of the License. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - The purpose of this file is to provide implementation of file IO routines on - Windows that can be thought as drop-in replacement for corresponding C runtime - functionality. - - Compared to Windows CRT, this one - - does not have the same file descriptor - limitation (default is 16384 and can be increased further, whereas CRT poses - a hard limit of 2048 file descriptors) - - the file operations are not serialized - - positional IO pread/pwrite is ported here. - - no text mode for files, all IO is "binary" - - Naming convention: - All routines are prefixed with my_win_, e.g Posix open() is implemented with - my_win_open() - - Implemented are - - POSIX routines(e.g open, read, lseek ...) - - Some ANSI C stream routines (fopen, fdopen, fileno, fclose) - - Windows CRT equvalients (my_get_osfhandle, open_osfhandle) - - Worth to note: - - File descriptors used here are located in a range that is not compatible - with CRT on purpose. Attempt to use a file descriptor from Windows CRT library - range in my_win_* function will be punished with DBUG_ASSERT() - - - File streams (FILE *) are actually from the C runtime. The routines provided - here are useful only in scernarios that use low-level IO with my_win_fileno() -*/ - -#ifdef _WIN32 - -#include "mysys_priv.h" -#include -#include - -/* Associates a file descriptor with an existing operating-system file handle.*/ -File my_open_osfhandle(HANDLE handle, int oflag) -{ - int offset= -1; - uint i; - DBUG_ENTER("my_open_osfhandle"); - - mysql_mutex_lock(&THR_LOCK_open); - for(i= MY_FILE_MIN; i < my_file_limit;i++) - { - if(my_file_info[i].fhandle == 0) - { - struct st_my_file_info *finfo= &(my_file_info[i]); - finfo->type= FILE_BY_OPEN; - finfo->fhandle= handle; - finfo->oflag= oflag; - offset= i; - break; - } - } - mysql_mutex_unlock(&THR_LOCK_open); - if(offset == -1) - errno= EMFILE; /* to many file handles open */ - DBUG_RETURN(offset); -} - - -static void invalidate_fd(File fd) -{ - DBUG_ENTER("invalidate_fd"); - DBUG_ASSERT(fd >= MY_FILE_MIN && fd < (int)my_file_limit); - my_file_info[fd].fhandle= 0; - DBUG_VOID_RETURN; -} - - -/* Get Windows handle for a file descriptor */ -HANDLE my_get_osfhandle(File fd) -{ - DBUG_ENTER("my_get_osfhandle"); - DBUG_ASSERT(fd >= MY_FILE_MIN && fd < (int)my_file_limit); - DBUG_RETURN(my_file_info[fd].fhandle); -} - - -static int my_get_open_flags(File fd) -{ - DBUG_ENTER("my_get_open_flags"); - DBUG_ASSERT(fd >= MY_FILE_MIN && fd < (int)my_file_limit); - DBUG_RETURN(my_file_info[fd].oflag); -} - - -/* - Open a file with sharing. Similar to _sopen() from libc, but allows managing - share delete on win32 - - SYNOPSIS - my_win_sopen() - path file name - oflag operation flags - shflag share flag - pmode permission flags - - RETURN VALUE - File descriptor of opened file if success - -1 and sets errno if fails. -*/ - -File my_win_sopen(const char *path, int oflag, int shflag, int pmode) -{ - int fh; /* handle of opened file */ - int mask; - HANDLE osfh; /* OS handle of opened file */ - DWORD fileaccess; /* OS file access (requested) */ - DWORD fileshare; /* OS file sharing mode */ - DWORD filecreate; /* OS method of opening/creating */ - DWORD fileattrib; /* OS file attribute flags */ - SECURITY_ATTRIBUTES SecurityAttributes; - - DBUG_ENTER("my_win_sopen"); - - if (check_if_legal_filename(path)) - { - errno= EACCES; - DBUG_RETURN(-1); - } - SecurityAttributes.nLength= sizeof(SecurityAttributes); - SecurityAttributes.lpSecurityDescriptor= NULL; - SecurityAttributes.bInheritHandle= !(oflag & _O_NOINHERIT); - - /* decode the access flags */ - switch (oflag & (_O_RDONLY | _O_WRONLY | _O_RDWR)) { - case _O_RDONLY: /* read access */ - fileaccess= GENERIC_READ; - break; - case _O_WRONLY: /* write access */ - fileaccess= GENERIC_WRITE; - break; - case _O_RDWR: /* read and write access */ - fileaccess= GENERIC_READ | GENERIC_WRITE; - break; - default: /* error, bad oflag */ - errno= EINVAL; - DBUG_RETURN(-1); - } - - /* decode sharing flags */ - switch (shflag) { - case _SH_DENYRW: /* exclusive access except delete */ - fileshare= FILE_SHARE_DELETE; - break; - case _SH_DENYWR: /* share read and delete access */ - fileshare= FILE_SHARE_READ | FILE_SHARE_DELETE; - break; - case _SH_DENYRD: /* share write and delete access */ - fileshare= FILE_SHARE_WRITE | FILE_SHARE_DELETE; - break; - case _SH_DENYNO: /* share read, write and delete access */ - fileshare= FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE; - break; - case _SH_DENYRWD: /* exclusive access */ - fileshare= 0L; - break; - case _SH_DENYWRD: /* share read access */ - fileshare= FILE_SHARE_READ; - break; - case _SH_DENYRDD: /* share write access */ - fileshare= FILE_SHARE_WRITE; - break; - case _SH_DENYDEL: /* share read and write access */ - fileshare= FILE_SHARE_READ | FILE_SHARE_WRITE; - break; - default: /* error, bad shflag */ - errno= EINVAL; - DBUG_RETURN(-1); - } - - /* decode open/create method flags */ - switch (oflag & (_O_CREAT | _O_EXCL | _O_TRUNC)) { - case 0: - case _O_EXCL: /* ignore EXCL w/o CREAT */ - filecreate= OPEN_EXISTING; - break; - - case _O_CREAT: - filecreate= OPEN_ALWAYS; - break; - - case _O_CREAT | _O_EXCL: - case _O_CREAT | _O_TRUNC | _O_EXCL: - filecreate= CREATE_NEW; - break; - - case _O_TRUNC: - case _O_TRUNC | _O_EXCL: /* ignore EXCL w/o CREAT */ - filecreate= TRUNCATE_EXISTING; - break; - - case _O_CREAT | _O_TRUNC: - filecreate= CREATE_ALWAYS; - break; - - default: - /* this can't happen ... all cases are covered */ - errno= EINVAL; - DBUG_RETURN(-1); - } - - /* decode file attribute flags if _O_CREAT was specified */ - fileattrib= FILE_ATTRIBUTE_NORMAL; /* default */ - if (oflag & _O_CREAT) - { - _umask((mask= _umask(0))); - - if (!((pmode & ~mask) & _S_IWRITE)) - fileattrib= FILE_ATTRIBUTE_READONLY; - } - - /* Set temporary file (delete-on-close) attribute if requested. */ - if (oflag & _O_TEMPORARY) - { - fileattrib|= FILE_FLAG_DELETE_ON_CLOSE; - fileaccess|= DELETE; - } - - /* Set temporary file (delay-flush-to-disk) attribute if requested.*/ - if (oflag & _O_SHORT_LIVED) - fileattrib|= FILE_ATTRIBUTE_TEMPORARY; - - /* Set sequential or random access attribute if requested. */ - if (oflag & _O_SEQUENTIAL) - fileattrib|= FILE_FLAG_SEQUENTIAL_SCAN; - else if (oflag & _O_RANDOM) - fileattrib|= FILE_FLAG_RANDOM_ACCESS; - - /* try to open/create the file */ - if ((osfh= CreateFile(path, fileaccess, fileshare, &SecurityAttributes, - filecreate, fileattrib, NULL)) == INVALID_HANDLE_VALUE) - { - /* - OS call to open/create file failed! map the error, release - the lock, and return -1. note that it's not necessary to - call _free_osfhnd (it hasn't been used yet). - */ - my_osmaperr(GetLastError()); /* map error */ - DBUG_RETURN(-1); /* return error to caller */ - } - - if ((fh= my_open_osfhandle(osfh, - oflag & (_O_APPEND | _O_RDONLY | _O_TEXT))) == -1) - { - CloseHandle(osfh); - } - - DBUG_RETURN(fh); /* return handle */ -} - - -File my_win_open(const char *path, int flags) -{ - DBUG_ENTER("my_win_open"); - DBUG_RETURN(my_win_sopen((char *) path, flags | _O_BINARY, _SH_DENYNO, - _S_IREAD | S_IWRITE)); -} - - -int my_win_close(File fd) -{ - DBUG_ENTER("my_win_close"); - if(CloseHandle(my_get_osfhandle(fd))) - { - invalidate_fd(fd); - DBUG_RETURN(0); - } - my_osmaperr(GetLastError()); - DBUG_RETURN(-1); -} - - -size_t my_win_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset) -{ - DWORD nBytesRead; - HANDLE hFile; - OVERLAPPED ov= {0}; - LARGE_INTEGER li; - - DBUG_ENTER("my_win_pread"); - - if(!Count) - DBUG_RETURN(0); -#ifdef _WIN64 - if(Count > UINT_MAX) - Count= UINT_MAX; -#endif - - hFile= (HANDLE)my_get_osfhandle(Filedes); - li.QuadPart= offset; - ov.Offset= li.LowPart; - ov.OffsetHigh= li.HighPart; - - if(!ReadFile(hFile, Buffer, (DWORD)Count, &nBytesRead, &ov)) - { - DWORD lastError= GetLastError(); - /* - ERROR_BROKEN_PIPE is returned when no more data coming - through e.g. a command pipe in windows : see MSDN on ReadFile. - */ - if(lastError == ERROR_HANDLE_EOF || lastError == ERROR_BROKEN_PIPE) - DBUG_RETURN(0); /*return 0 at EOF*/ - my_osmaperr(lastError); - DBUG_RETURN((size_t)-1); - } - DBUG_RETURN(nBytesRead); -} - - -size_t my_win_read(File Filedes, uchar *Buffer, size_t Count) -{ - DWORD nBytesRead; - HANDLE hFile; - - DBUG_ENTER("my_win_read"); - if(!Count) - DBUG_RETURN(0); -#ifdef _WIN64 - if(Count > UINT_MAX) - Count= UINT_MAX; -#endif - - hFile= (HANDLE)my_get_osfhandle(Filedes); - - if(!ReadFile(hFile, Buffer, (DWORD)Count, &nBytesRead, NULL)) - { - DWORD lastError= GetLastError(); - /* - ERROR_BROKEN_PIPE is returned when no more data coming - through e.g. a command pipe in windows : see MSDN on ReadFile. - */ - if(lastError == ERROR_HANDLE_EOF || lastError == ERROR_BROKEN_PIPE) - DBUG_RETURN(0); /*return 0 at EOF*/ - my_osmaperr(lastError); - DBUG_RETURN((size_t)-1); - } - DBUG_RETURN(nBytesRead); -} - - -size_t my_win_pwrite(File Filedes, const uchar *Buffer, size_t Count, - my_off_t offset) -{ - DWORD nBytesWritten; - HANDLE hFile; - OVERLAPPED ov= {0}; - LARGE_INTEGER li; - - DBUG_ENTER("my_win_pwrite"); - DBUG_PRINT("my",("Filedes: %d, Buffer: %p, Count: %llu, offset: %llu", - Filedes, Buffer, (ulonglong)Count, (ulonglong)offset)); - - if(!Count) - DBUG_RETURN(0); - -#ifdef _WIN64 - if(Count > UINT_MAX) - Count= UINT_MAX; -#endif - - hFile= (HANDLE)my_get_osfhandle(Filedes); - li.QuadPart= offset; - ov.Offset= li.LowPart; - ov.OffsetHigh= li.HighPart; - - if(!WriteFile(hFile, Buffer, (DWORD)Count, &nBytesWritten, &ov)) - { - my_osmaperr(GetLastError()); - DBUG_RETURN((size_t)-1); - } - else - DBUG_RETURN(nBytesWritten); -} - - -my_off_t my_win_lseek(File fd, my_off_t pos, int whence) -{ - LARGE_INTEGER offset; - LARGE_INTEGER newpos; - - DBUG_ENTER("my_win_lseek"); - - /* Check compatibility of Windows and Posix seek constants */ - compile_time_assert(FILE_BEGIN == SEEK_SET && FILE_CURRENT == SEEK_CUR - && FILE_END == SEEK_END); - - offset.QuadPart= pos; - if(!SetFilePointerEx(my_get_osfhandle(fd), offset, &newpos, whence)) - { - my_osmaperr(GetLastError()); - newpos.QuadPart= -1; - } - DBUG_RETURN(newpos.QuadPart); -} - - -#ifndef FILE_WRITE_TO_END_OF_FILE -#define FILE_WRITE_TO_END_OF_FILE 0xffffffff -#endif -size_t my_win_write(File fd, const uchar *Buffer, size_t Count) -{ - DWORD nWritten; - OVERLAPPED ov; - OVERLAPPED *pov= NULL; - HANDLE hFile; - - DBUG_ENTER("my_win_write"); - DBUG_PRINT("my",("Filedes: %d, Buffer: %p, Count %llu", fd, Buffer, - (ulonglong)Count)); - - if(!Count) - DBUG_RETURN(0); - -#ifdef _WIN64 - if(Count > UINT_MAX) - Count= UINT_MAX; -#endif - - if(my_get_open_flags(fd) & _O_APPEND) - { - /* - Atomic append to the end of file is is done by special initialization of - the OVERLAPPED structure. See MSDN WriteFile documentation for more info. - */ - memset(&ov, 0, sizeof(ov)); - ov.Offset= FILE_WRITE_TO_END_OF_FILE; - ov.OffsetHigh= -1; - pov= &ov; - } - - hFile= my_get_osfhandle(fd); - if(!WriteFile(hFile, Buffer, (DWORD)Count, &nWritten, pov)) - { - my_osmaperr(GetLastError()); - DBUG_RETURN((size_t)-1); - } - DBUG_RETURN(nWritten); -} - - -int my_win_chsize(File fd, my_off_t newlength) -{ - HANDLE hFile; - LARGE_INTEGER length; - DBUG_ENTER("my_win_chsize"); - - hFile= (HANDLE) my_get_osfhandle(fd); - length.QuadPart= newlength; - if (!SetFilePointerEx(hFile, length , NULL , FILE_BEGIN)) - goto err; - if (!SetEndOfFile(hFile)) - goto err; - DBUG_RETURN(0); -err: - my_osmaperr(GetLastError()); - my_errno= errno; - DBUG_RETURN(-1); -} - - -/* Get the file descriptor for stdin,stdout or stderr */ -static File my_get_stdfile_descriptor(FILE *stream) -{ - HANDLE hFile; - DWORD nStdHandle; - DBUG_ENTER("my_get_stdfile_descriptor"); - - if(stream == stdin) - nStdHandle= STD_INPUT_HANDLE; - else if(stream == stdout) - nStdHandle= STD_OUTPUT_HANDLE; - else if(stream == stderr) - nStdHandle= STD_ERROR_HANDLE; - else - DBUG_RETURN(-1); - - hFile= GetStdHandle(nStdHandle); - if(hFile != INVALID_HANDLE_VALUE) - DBUG_RETURN(my_open_osfhandle(hFile, 0)); - DBUG_RETURN(-1); -} - - -File my_win_fileno(FILE *file) -{ - HANDLE hFile= (HANDLE)_get_osfhandle(fileno(file)); - int retval= -1; - uint i; - - DBUG_ENTER("my_win_fileno"); - - for(i= MY_FILE_MIN; i < my_file_limit; i++) - { - if(my_file_info[i].fhandle == hFile) - { - retval= i; - break; - } - } - if(retval == -1) - /* try std stream */ - DBUG_RETURN(my_get_stdfile_descriptor(file)); - DBUG_RETURN(retval); -} - - -FILE *my_win_fopen(const char *filename, const char *type) -{ - FILE *file; - int flags= 0; - DBUG_ENTER("my_win_open"); - - /* - If we are not creating, then we need to use my_access to make sure - the file exists since Windows doesn't handle files like "com1.sym" - very well - */ - if (check_if_legal_filename(filename)) - { - errno= EACCES; - DBUG_RETURN(NULL); - } - - file= fopen(filename, type); - if(!file) - DBUG_RETURN(NULL); - - if(strchr(type,'a') != NULL) - flags= O_APPEND; - - /* - Register file handle in my_table_info. - Necessary for my_fileno() - */ - if(my_open_osfhandle((HANDLE)_get_osfhandle(fileno(file)), flags) < 0) - { - fclose(file); - DBUG_RETURN(NULL); - } - DBUG_RETURN(file); -} - - -FILE * my_win_fdopen(File fd, const char *type) -{ - FILE *file; - int crt_fd; - int flags= 0; - - DBUG_ENTER("my_win_fdopen"); - - if(strchr(type,'a') != NULL) - flags= O_APPEND; - /* Convert OS file handle to CRT file descriptor and then call fdopen*/ - crt_fd= _open_osfhandle((intptr_t)my_get_osfhandle(fd), flags); - if(crt_fd < 0) - file= NULL; - else - file= fdopen(crt_fd, type); - DBUG_RETURN(file); -} - - -int my_win_fclose(FILE *file) -{ - File fd; - - DBUG_ENTER("my_win_close"); - fd= my_fileno(file); - if(fd < 0) - DBUG_RETURN(-1); - if(fclose(file) < 0) - DBUG_RETURN(-1); - invalidate_fd(fd); - DBUG_RETURN(0); -} - - - -/* - Quick and dirty my_fstat() implementation for Windows. - Use CRT fstat on temporarily allocated file descriptor. - Patch file size, because size that fstat returns is not - reliable (may be outdated) -*/ -int my_win_fstat(File fd, struct _stati64 *buf) -{ - int crt_fd; - int retval; - HANDLE hFile, hDup; - - DBUG_ENTER("my_win_fstat"); - - hFile= my_get_osfhandle(fd); - if(!DuplicateHandle( GetCurrentProcess(), hFile, GetCurrentProcess(), - &hDup ,0,FALSE,DUPLICATE_SAME_ACCESS)) - { - my_osmaperr(GetLastError()); - DBUG_RETURN(-1); - } - if ((crt_fd= _open_osfhandle((intptr_t)hDup,0)) < 0) - DBUG_RETURN(-1); - - retval= _fstati64(crt_fd, buf); - if(retval == 0) - { - /* File size returned by stat is not accurate (may be outdated), fix it*/ - GetFileSizeEx(hDup, (PLARGE_INTEGER) (&(buf->st_size))); - } - _close(crt_fd); - DBUG_RETURN(retval); -} - - - -int my_win_stat( const char *path, struct _stati64 *buf) -{ - DBUG_ENTER("my_win_stat"); - if(_stati64( path, buf) == 0) - { - /* File size returned by stat is not accurate (may be outdated), fix it*/ - WIN32_FILE_ATTRIBUTE_DATA data; - if (GetFileAttributesEx(path, GetFileExInfoStandard, &data)) - { - LARGE_INTEGER li; - li.LowPart= data.nFileSizeLow; - li.HighPart= data.nFileSizeHigh; - buf->st_size= li.QuadPart; - } - DBUG_RETURN(0); - } - DBUG_RETURN(-1); -} - - - -int my_win_fsync(File fd) -{ - DBUG_ENTER("my_win_fsync"); - if(FlushFileBuffers(my_get_osfhandle(fd))) - DBUG_RETURN(0); - my_osmaperr(GetLastError()); - DBUG_RETURN(-1); -} - - - -int my_win_dup(File fd) -{ - HANDLE hDup; - DBUG_ENTER("my_win_dup"); - if (DuplicateHandle(GetCurrentProcess(), my_get_osfhandle(fd), - GetCurrentProcess(), &hDup, 0, FALSE, DUPLICATE_SAME_ACCESS)) - { - DBUG_RETURN(my_open_osfhandle(hDup, my_get_open_flags(fd))); - } - my_osmaperr(GetLastError()); - DBUG_RETURN(-1); -} - -#endif /*_WIN32*/ diff --git a/deps/mysqllite/mysys/my_winthread.c b/deps/mysqllite/mysys/my_winthread.c deleted file mode 100644 index 49534370a2f70e..00000000000000 --- a/deps/mysqllite/mysys/my_winthread.c +++ /dev/null @@ -1,192 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/***************************************************************************** -** Simulation of posix threads calls for Windows -*****************************************************************************/ -#if defined (_WIN32) -/* SAFE_MUTEX will not work until the thread structure is up to date */ -#undef SAFE_MUTEX -#include "mysys_priv.h" -#include -#include - -static void install_sigabrt_handler(void); - -struct thread_start_parameter -{ - pthread_handler func; - void *arg; -}; - -/** - Adapter to @c pthread_mutex_trylock() - - @retval 0 Mutex was acquired - @retval EBUSY Mutex was already locked by a thread - */ -int -win_pthread_mutex_trylock(pthread_mutex_t *mutex) -{ - if (TryEnterCriticalSection(mutex)) - { - /* Don't allow recursive lock */ - if (mutex->RecursionCount > 1){ - LeaveCriticalSection(mutex); - return EBUSY; - } - return 0; - } - return EBUSY; -} - -static unsigned int __stdcall pthread_start(void *p) -{ - struct thread_start_parameter *par= (struct thread_start_parameter *)p; - pthread_handler func= par->func; - void *arg= par->arg; - free(p); - (*func)(arg); - return 0; -} - - -int pthread_create(pthread_t *thread_id, const pthread_attr_t *attr, - pthread_handler func, void *param) -{ - uintptr_t handle; - struct thread_start_parameter *par; - unsigned int stack_size; - DBUG_ENTER("pthread_create"); - - par= (struct thread_start_parameter *)malloc(sizeof(*par)); - if (!par) - goto error_return; - - par->func= func; - par->arg= param; - stack_size= attr?attr->dwStackSize:0; - - handle= _beginthreadex(NULL, stack_size , pthread_start, par, 0, thread_id); - if (!handle) - goto error_return; - DBUG_PRINT("info", ("thread id=%u",*thread_id)); - - /* Do not need thread handle, close it */ - CloseHandle((HANDLE)handle); - DBUG_RETURN(0); - -error_return: - DBUG_PRINT("error", - ("Can't create thread to handle request (error %d)",errno)); - DBUG_RETURN(-1); -} - - -void pthread_exit(void *a) -{ - _endthreadex(0); -} - -int pthread_join(pthread_t thread, void **value_ptr) -{ - DWORD ret; - HANDLE handle; - - handle= OpenThread(SYNCHRONIZE, FALSE, thread); - if (!handle) - { - errno= EINVAL; - goto error_return; - } - - ret= WaitForSingleObject(handle, INFINITE); - - if(ret != WAIT_OBJECT_0) - { - errno= EINVAL; - goto error_return; - } - - CloseHandle(handle); - return 0; - -error_return: - if(handle) - CloseHandle(handle); - return -1; -} - -int pthread_cancel(pthread_t thread) -{ - - HANDLE handle= 0; - BOOL ok= FALSE; - - handle= OpenThread(THREAD_TERMINATE, FALSE, thread); - if (handle) - { - ok= TerminateThread(handle,0); - CloseHandle(handle); - } - if (ok) - return 0; - - errno= EINVAL; - return -1; -} - -/* - One time initialization. For simplicity, we assume initializer thread - does not exit within init_routine(). -*/ -int my_pthread_once(my_pthread_once_t *once_control, - void (*init_routine)(void)) -{ - LONG state; - - /* - Do "dirty" read to find out if initialization is already done, to - save an interlocked operation in common case. Memory barriers are ensured by - Visual C++ volatile implementation. - */ - if (*once_control == MY_PTHREAD_ONCE_DONE) - return 0; - - state= InterlockedCompareExchange(once_control, MY_PTHREAD_ONCE_INPROGRESS, - MY_PTHREAD_ONCE_INIT); - - switch(state) - { - case MY_PTHREAD_ONCE_INIT: - /* This is initializer thread */ - (*init_routine)(); - *once_control= MY_PTHREAD_ONCE_DONE; - break; - - case MY_PTHREAD_ONCE_INPROGRESS: - /* init_routine in progress. Wait for its completion */ - while(*once_control == MY_PTHREAD_ONCE_INPROGRESS) - { - Sleep(1); - } - break; - case MY_PTHREAD_ONCE_DONE: - /* Nothing to do */ - break; - } - return 0; -} -#endif diff --git a/deps/mysqllite/mysys/my_write.c b/deps/mysqllite/mysys/my_write.c deleted file mode 100644 index 64f7546620fe09..00000000000000 --- a/deps/mysqllite/mysys/my_write.c +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include - - - /* Write a chunk of bytes to a file */ - -size_t my_write(File Filedes, const uchar *Buffer, size_t Count, myf MyFlags) -{ - size_t writtenbytes, written; - uint errors; - DBUG_ENTER("my_write"); - DBUG_PRINT("my",("fd: %d Buffer: %p Count: %lu MyFlags: %d", - Filedes, Buffer, (ulong) Count, MyFlags)); - errors= 0; written= 0; - - /* The behavior of write(fd, buf, 0) is not portable */ - if (unlikely(!Count)) - DBUG_RETURN(0); - - for (;;) - { -#ifdef _WIN32 - writtenbytes= my_win_write(Filedes, Buffer, Count); -#else - writtenbytes= write(Filedes, Buffer, Count); -#endif - if (writtenbytes == Count) - break; - if (writtenbytes != (size_t) -1) - { /* Safeguard */ - written+= writtenbytes; - Buffer+= writtenbytes; - Count-= writtenbytes; - } - my_errno= errno; - DBUG_PRINT("error",("Write only %ld bytes, error: %d", - (long) writtenbytes, my_errno)); -#ifndef NO_BACKGROUND - if (my_thread_var->abort) - MyFlags&= ~ MY_WAIT_IF_FULL; /* End if aborted by user */ - - if ((my_errno == ENOSPC || my_errno == EDQUOT) && - (MyFlags & MY_WAIT_IF_FULL)) - { - wait_for_free_space(my_filename(Filedes), errors); - errors++; - continue; - } - - if ((writtenbytes == 0 || writtenbytes == (size_t) -1)) - { - if (my_errno == EINTR) - { - DBUG_PRINT("debug", ("my_write() was interrupted and returned %ld", - (long) writtenbytes)); - continue; /* Interrupted */ - } - - if (!writtenbytes && !errors++) /* Retry once */ - { - /* We may come here if the file quota is exeeded */ - errno= EFBIG; /* Assume this is the error */ - continue; - } - } - else - continue; /* Retry */ -#endif - if (MyFlags & (MY_NABP | MY_FNABP)) - { - if (MyFlags & (MY_WME | MY_FAE | MY_FNABP)) - { - my_error(EE_WRITE, MYF(ME_BELL+ME_WAITTANG), - my_filename(Filedes),my_errno); - } - DBUG_RETURN(MY_FILE_ERROR); /* Error on read */ - } - else - break; /* Return bytes written */ - } - if (MyFlags & (MY_NABP | MY_FNABP)) - DBUG_RETURN(0); /* Want only errors */ - DBUG_RETURN(writtenbytes+written); -} /* my_write */ diff --git a/deps/mysqllite/mysys/mysys_priv.h b/deps/mysqllite/mysys/mysys_priv.h deleted file mode 100644 index 4e642b7e3d3370..00000000000000 --- a/deps/mysqllite/mysys/mysys_priv.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include - -#ifdef USE_SYSTEM_WRAPPERS -#include "system_wrappers.h" -#endif - -#ifdef HAVE_GETRUSAGE -#include -#endif - -#include - -#ifdef HAVE_PSI_INTERFACE - -#if !defined(HAVE_PREAD) && !defined(_WIN32) -extern PSI_mutex_key key_my_file_info_mutex; -#endif /* !defined(HAVE_PREAD) && !defined(_WIN32) */ - -#if !defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R) -extern PSI_mutex_key key_LOCK_localtime_r; -#endif /* !defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R) */ - -#ifndef HAVE_GETHOSTBYNAME_R -extern PSI_mutex_key key_LOCK_gethostbyname_r; -#endif /* HAVE_GETHOSTBYNAME_R */ - -extern PSI_mutex_key key_BITMAP_mutex, key_IO_CACHE_append_buffer_lock, - key_IO_CACHE_SHARE_mutex, key_KEY_CACHE_cache_lock, key_LOCK_alarm, - key_my_thread_var_mutex, key_THR_LOCK_charset, key_THR_LOCK_heap, - key_THR_LOCK_isam, key_THR_LOCK_lock, key_THR_LOCK_malloc, - key_THR_LOCK_mutex, key_THR_LOCK_myisam, key_THR_LOCK_net, - key_THR_LOCK_open, key_THR_LOCK_threads, key_THR_LOCK_time, - key_TMPDIR_mutex, key_THR_LOCK_myisam_mmap; - -extern PSI_cond_key key_COND_alarm, key_IO_CACHE_SHARE_cond, - key_IO_CACHE_SHARE_cond_writer, key_my_thread_var_suspend, - key_THR_COND_threads; - -#ifdef USE_ALARM_THREAD -extern PSI_thread_key key_thread_alarm; -#endif /* USE_ALARM_THREAD */ - -#endif /* HAVE_PSI_INTERFACE */ - -extern mysql_mutex_t THR_LOCK_malloc, THR_LOCK_open, THR_LOCK_keycache; -extern mysql_mutex_t THR_LOCK_lock, THR_LOCK_isam, THR_LOCK_net; -extern mysql_mutex_t THR_LOCK_charset, THR_LOCK_time; - -#include - -#ifdef HAVE_PSI_INTERFACE -#ifdef HUGETLB_USE_PROC_MEMINFO -extern PSI_file_key key_file_proc_meminfo; -#endif /* HUGETLB_USE_PROC_MEMINFO */ -extern PSI_file_key key_file_charset, key_file_cnf; -#endif /* HAVE_PSI_INTERFACE */ - -/* - EDQUOT is used only in 3 C files only in mysys/. If it does not exist on - system, we set it to some value which can never happen. -*/ -#ifndef EDQUOT -#define EDQUOT (-1) -#endif - -void my_error_unregister_all(void); - -#ifdef _WIN32 -#include -/* my_winfile.c exports, should not be used outside mysys */ -extern File my_win_open(const char *path, int oflag); -extern int my_win_close(File fd); -extern size_t my_win_read(File fd, uchar *buffer, size_t count); -extern size_t my_win_write(File fd, const uchar *buffer, size_t count); -extern size_t my_win_pread(File fd, uchar *buffer, size_t count, - my_off_t offset); -extern size_t my_win_pwrite(File fd, const uchar *buffer, size_t count, - my_off_t offset); -extern my_off_t my_win_lseek(File fd, my_off_t pos, int whence); -extern int my_win_chsize(File fd, my_off_t newlength); -extern FILE* my_win_fopen(const char *filename, const char *type); -extern File my_win_fclose(FILE *file); -extern File my_win_fileno(FILE *file); -extern FILE* my_win_fdopen(File Filedes, const char *type); -extern int my_win_stat(const char *path, struct _stati64 *buf); -extern int my_win_fstat(File fd, struct _stati64 *buf); -extern int my_win_fsync(File fd); -extern File my_win_dup(File fd); -extern File my_win_sopen(const char *path, int oflag, int shflag, int perm); -extern File my_open_osfhandle(HANDLE handle, int oflag); -#endif diff --git a/deps/mysqllite/mysys/ptr_cmp.c b/deps/mysqllite/mysys/ptr_cmp.c deleted file mode 100644 index dcafe13291d5b7..00000000000000 --- a/deps/mysqllite/mysys/ptr_cmp.c +++ /dev/null @@ -1,223 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - get_ptr_compare(len) returns a pointer to a optimal byte-compare function - for a array of stringpointer where all strings have size len. - The bytes are compare as unsigned chars. - */ - -#include "mysys_priv.h" -#include - -#ifdef __sun -/* - * On Solaris, memcmp() is normally faster than the unrolled ptr_compare_N - * functions, as memcmp() is usually a platform-specific implementation - * written in assembler, provided in /usr/lib/libc/libc_hwcap*.so.1. - * This implementation is also usually faster than the built-in memcmp - * supplied by GCC, so it is recommended to build with "-fno-builtin-memcmp" - * in CFLAGS if building with GCC on Solaris. - */ - -#include - -static int native_compare(size_t *length, unsigned char **a, unsigned char **b) -{ - return memcmp(*a, *b, *length); -} - -#else /* __sun */ - -static int ptr_compare(size_t *compare_length, uchar **a, uchar **b); -static int ptr_compare_0(size_t *compare_length, uchar **a, uchar **b); -static int ptr_compare_1(size_t *compare_length, uchar **a, uchar **b); -static int ptr_compare_2(size_t *compare_length, uchar **a, uchar **b); -static int ptr_compare_3(size_t *compare_length, uchar **a, uchar **b); -#endif /* __sun */ - - /* Get a pointer to a optimal byte-compare function for a given size */ - -#ifdef __sun -qsort2_cmp get_ptr_compare (size_t size __attribute__((unused))) -{ - return (qsort2_cmp) native_compare; -} -#else -qsort2_cmp get_ptr_compare (size_t size) -{ - if (size < 4) - return (qsort2_cmp) ptr_compare; - switch (size & 3) { - case 0: return (qsort2_cmp) ptr_compare_0; - case 1: return (qsort2_cmp) ptr_compare_1; - case 2: return (qsort2_cmp) ptr_compare_2; - case 3: return (qsort2_cmp) ptr_compare_3; - } - return 0; /* Impossible */ -} -#endif /* __sun */ - - - /* - Compare to keys to see witch is smaller. - Loop unrolled to make it quick !! - */ - -#define cmp(N) if (first[N] != last[N]) return (int) first[N] - (int) last[N] - -#ifndef __sun - -static int ptr_compare(size_t *compare_length, uchar **a, uchar **b) -{ - reg3 int length= *compare_length; - reg1 uchar *first,*last; - - first= *a; last= *b; - while (--length) - { - if (*first++ != *last++) - return (int) first[-1] - (int) last[-1]; - } - return (int) first[0] - (int) last[0]; -} - - -static int ptr_compare_0(size_t *compare_length,uchar **a, uchar **b) -{ - reg3 int length= *compare_length; - reg1 uchar *first,*last; - - first= *a; last= *b; - loop: - cmp(0); - cmp(1); - cmp(2); - cmp(3); - if ((length-=4)) - { - first+=4; - last+=4; - goto loop; - } - return (0); -} - - -static int ptr_compare_1(size_t *compare_length,uchar **a, uchar **b) -{ - reg3 int length= *compare_length-1; - reg1 uchar *first,*last; - - first= *a+1; last= *b+1; - cmp(-1); - loop: - cmp(0); - cmp(1); - cmp(2); - cmp(3); - if ((length-=4)) - { - first+=4; - last+=4; - goto loop; - } - return (0); -} - -static int ptr_compare_2(size_t *compare_length,uchar **a, uchar **b) -{ - reg3 int length= *compare_length-2; - reg1 uchar *first,*last; - - first= *a +2 ; last= *b +2; - cmp(-2); - cmp(-1); - loop: - cmp(0); - cmp(1); - cmp(2); - cmp(3); - if ((length-=4)) - { - first+=4; - last+=4; - goto loop; - } - return (0); -} - -static int ptr_compare_3(size_t *compare_length,uchar **a, uchar **b) -{ - reg3 int length= *compare_length-3; - reg1 uchar *first,*last; - - first= *a +3 ; last= *b +3; - cmp(-3); - cmp(-2); - cmp(-1); - loop: - cmp(0); - cmp(1); - cmp(2); - cmp(3); - if ((length-=4)) - { - first+=4; - last+=4; - goto loop; - } - return (0); -} - -#endif /* !__sun */ - -void my_store_ptr(uchar *buff, size_t pack_length, my_off_t pos) -{ - switch (pack_length) { -#if SIZEOF_OFF_T > 4 - case 8: mi_int8store(buff,pos); break; - case 7: mi_int7store(buff,pos); break; - case 6: mi_int6store(buff,pos); break; - case 5: mi_int5store(buff,pos); break; -#endif - case 4: mi_int4store(buff,pos); break; - case 3: mi_int3store(buff,pos); break; - case 2: mi_int2store(buff,pos); break; - case 1: buff[0]= (uchar) pos; break; - default: DBUG_ASSERT(0); - } - return; -} - -my_off_t my_get_ptr(uchar *ptr, size_t pack_length) -{ - my_off_t pos; - switch (pack_length) { -#if SIZEOF_OFF_T > 4 - case 8: pos= (my_off_t) mi_uint8korr(ptr); break; - case 7: pos= (my_off_t) mi_uint7korr(ptr); break; - case 6: pos= (my_off_t) mi_uint6korr(ptr); break; - case 5: pos= (my_off_t) mi_uint5korr(ptr); break; -#endif - case 4: pos= (my_off_t) mi_uint4korr(ptr); break; - case 3: pos= (my_off_t) mi_uint3korr(ptr); break; - case 2: pos= (my_off_t) mi_uint2korr(ptr); break; - case 1: pos= (my_off_t) *(uchar*) ptr; break; - default: DBUG_ASSERT(0); return 0; - } - return pos; -} - diff --git a/deps/mysqllite/mysys/queues.c b/deps/mysqllite/mysys/queues.c deleted file mode 100644 index 25a310c075248f..00000000000000 --- a/deps/mysqllite/mysys/queues.c +++ /dev/null @@ -1,687 +0,0 @@ -/* Copyright (C) 2000, 2005 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Code for generell handling of priority Queues. - Implemention of queues from "Algoritms in C" by Robert Sedgewick. - An optimisation of _downheap suggested in Exercise 7.51 in "Data - Structures & Algorithms in C++" by Mark Allen Weiss, Second Edition - was implemented by Mikael Ronstrom 2005. Also the O(N) algorithm - of queue_fix was implemented. -*/ - -#include "mysys_priv.h" -#include "mysys_err.h" -#include - - -/* - Init queue - - SYNOPSIS - init_queue() - queue Queue to initialise - max_elements Max elements that will be put in queue - offset_to_key Offset to key in element stored in queue - Used when sending pointers to compare function - max_at_top Set to 1 if you want biggest element on top. - compare Compare function for elements, takes 3 arguments. - first_cmp_arg First argument to compare function - - NOTES - Will allocate max_element pointers for queue array - - RETURN - 0 ok - 1 Could not allocate memory -*/ - -int init_queue(QUEUE *queue, uint max_elements, uint offset_to_key, - pbool max_at_top, int (*compare) (void *, uchar *, uchar *), - void *first_cmp_arg) -{ - DBUG_ENTER("init_queue"); - if ((queue->root= (uchar **) my_malloc((max_elements+1)*sizeof(void*), - MYF(MY_WME))) == 0) - DBUG_RETURN(1); - queue->elements=0; - queue->compare=compare; - queue->first_cmp_arg=first_cmp_arg; - queue->max_elements=max_elements; - queue->offset_to_key=offset_to_key; - queue_set_max_at_top(queue, max_at_top); - DBUG_RETURN(0); -} - - - -/* - Init queue, uses init_queue internally for init work but also accepts - auto_extent as parameter - - SYNOPSIS - init_queue_ex() - queue Queue to initialise - max_elements Max elements that will be put in queue - offset_to_key Offset to key in element stored in queue - Used when sending pointers to compare function - max_at_top Set to 1 if you want biggest element on top. - compare Compare function for elements, takes 3 arguments. - first_cmp_arg First argument to compare function - auto_extent When the queue is full and there is insert operation - extend the queue. - - NOTES - Will allocate max_element pointers for queue array - - RETURN - 0 ok - 1 Could not allocate memory -*/ - -int init_queue_ex(QUEUE *queue, uint max_elements, uint offset_to_key, - pbool max_at_top, int (*compare) (void *, uchar *, uchar *), - void *first_cmp_arg, uint auto_extent) -{ - int ret; - DBUG_ENTER("init_queue_ex"); - - if ((ret= init_queue(queue, max_elements, offset_to_key, max_at_top, compare, - first_cmp_arg))) - DBUG_RETURN(ret); - - queue->auto_extent= auto_extent; - DBUG_RETURN(0); -} - -/* - Reinitialize queue for other usage - - SYNOPSIS - reinit_queue() - queue Queue to initialise - max_elements Max elements that will be put in queue - offset_to_key Offset to key in element stored in queue - Used when sending pointers to compare function - max_at_top Set to 1 if you want biggest element on top. - compare Compare function for elements, takes 3 arguments. - first_cmp_arg First argument to compare function - - NOTES - This will delete all elements from the queue. If you don't want this, - use resize_queue() instead. - - RETURN - 0 ok - EE_OUTOFMEMORY Wrong max_elements -*/ - -int reinit_queue(QUEUE *queue, uint max_elements, uint offset_to_key, - pbool max_at_top, int (*compare) (void *, uchar *, uchar *), - void *first_cmp_arg) -{ - DBUG_ENTER("reinit_queue"); - queue->elements=0; - queue->compare=compare; - queue->first_cmp_arg=first_cmp_arg; - queue->offset_to_key=offset_to_key; - queue_set_max_at_top(queue, max_at_top); - resize_queue(queue, max_elements); - DBUG_RETURN(0); -} - - -/* - Resize queue - - SYNOPSIS - resize_queue() - queue Queue - max_elements New max size for queue - - NOTES - If you resize queue to be less than the elements you have in it, - the extra elements will be deleted - - RETURN - 0 ok - 1 Error. In this case the queue is unchanged -*/ - -int resize_queue(QUEUE *queue, uint max_elements) -{ - uchar **new_root; - DBUG_ENTER("resize_queue"); - if (queue->max_elements == max_elements) - DBUG_RETURN(0); - if ((new_root= (uchar **) my_realloc((void *)queue->root, - (max_elements+1)*sizeof(void*), - MYF(MY_WME))) == 0) - DBUG_RETURN(1); - set_if_smaller(queue->elements, max_elements); - queue->max_elements= max_elements; - queue->root= new_root; - DBUG_RETURN(0); -} - - -/* - Delete queue - - SYNOPSIS - delete_queue() - queue Queue to delete - - IMPLEMENTATION - Just free allocated memory. - - NOTES - Can be called safely multiple times -*/ - -void delete_queue(QUEUE *queue) -{ - DBUG_ENTER("delete_queue"); - my_free(queue->root); - queue->root= NULL; - DBUG_VOID_RETURN; -} - - - /* Code for insert, search and delete of elements */ - -void queue_insert(register QUEUE *queue, uchar *element) -{ - reg2 uint idx, next; - DBUG_ASSERT(queue->elements < queue->max_elements); - queue->root[0]= element; - idx= ++queue->elements; - /* max_at_top swaps the comparison if we want to order by desc */ - while ((queue->compare(queue->first_cmp_arg, - element + queue->offset_to_key, - queue->root[(next= idx >> 1)] + - queue->offset_to_key) * queue->max_at_top) < 0) - { - queue->root[idx]= queue->root[next]; - idx= next; - } - queue->root[idx]= element; -} - -/* - Does safe insert. If no more space left on the queue resize it. - Return codes: - 0 - OK - 1 - Cannot allocate more memory - 2 - auto_extend is 0, the operation would - -*/ - -int queue_insert_safe(register QUEUE *queue, uchar *element) -{ - - if (queue->elements == queue->max_elements) - { - if (!queue->auto_extent) - return 2; - else if (resize_queue(queue, queue->max_elements + queue->auto_extent)) - return 1; - } - - queue_insert(queue, element); - return 0; -} - - - /* Remove item from queue */ - /* Returns pointer to removed element */ - -uchar *queue_remove(register QUEUE *queue, uint idx) -{ - uchar *element; - DBUG_ASSERT(idx < queue->max_elements); - element= queue->root[++idx]; /* Intern index starts from 1 */ - queue->root[idx]= queue->root[queue->elements--]; - _downheap(queue, idx); - return element; -} - - /* Fix when element on top has been replaced */ - -#ifndef queue_replaced -void queue_replaced(QUEUE *queue) -{ - _downheap(queue,1); -} -#endif - -#ifndef OLD_VERSION - -void _downheap(register QUEUE *queue, uint idx) -{ - uchar *element; - uint elements,half_queue,offset_to_key, next_index; - my_bool first= TRUE; - uint start_idx= idx; - - offset_to_key=queue->offset_to_key; - element=queue->root[idx]; - half_queue=(elements=queue->elements) >> 1; - - while (idx <= half_queue) - { - next_index=idx+idx; - if (next_index < elements && - (queue->compare(queue->first_cmp_arg, - queue->root[next_index]+offset_to_key, - queue->root[next_index+1]+offset_to_key) * - queue->max_at_top) > 0) - next_index++; - if (first && - (((queue->compare(queue->first_cmp_arg, - queue->root[next_index]+offset_to_key, - element+offset_to_key) * queue->max_at_top) >= 0))) - { - queue->root[idx]= element; - return; - } - queue->root[idx]=queue->root[next_index]; - idx=next_index; - first= FALSE; - } - - next_index= idx >> 1; - while (next_index > start_idx) - { - if ((queue->compare(queue->first_cmp_arg, - queue->root[next_index]+offset_to_key, - element+offset_to_key) * - queue->max_at_top) < 0) - break; - queue->root[idx]=queue->root[next_index]; - idx=next_index; - next_index= idx >> 1; - } - queue->root[idx]=element; -} - -#else - /* - The old _downheap version is kept for comparisons with the benchmark - suit or new benchmarks anyone wants to run for comparisons. - */ - /* Fix heap when index have changed */ -void _downheap(register QUEUE *queue, uint idx) -{ - uchar *element; - uint elements,half_queue,next_index,offset_to_key; - - offset_to_key=queue->offset_to_key; - element=queue->root[idx]; - half_queue=(elements=queue->elements) >> 1; - - while (idx <= half_queue) - { - next_index=idx+idx; - if (next_index < elements && - (queue->compare(queue->first_cmp_arg, - queue->root[next_index]+offset_to_key, - queue->root[next_index+1]+offset_to_key) * - queue->max_at_top) > 0) - next_index++; - if ((queue->compare(queue->first_cmp_arg, - queue->root[next_index]+offset_to_key, - element+offset_to_key) * queue->max_at_top) >= 0) - break; - queue->root[idx]=queue->root[next_index]; - idx=next_index; - } - queue->root[idx]=element; -} - - -#endif - -/* - Fix heap when every element was changed. -*/ - -void queue_fix(QUEUE *queue) -{ - uint i; - for (i= queue->elements >> 1; i > 0; i--) - _downheap(queue, i); -} - -#ifdef MAIN - /* - A test program for the priority queue implementation. - It can also be used to benchmark changes of the implementation - Build by doing the following in the directory mysys - make test_priority_queue - ./test_priority_queue - - Written by Mikael Ronström, 2005 - */ - -static uint num_array[1025]; -static uint tot_no_parts= 0; -static uint tot_no_loops= 0; -static uint expected_part= 0; -static uint expected_num= 0; -static bool max_ind= 0; -static bool fix_used= 0; -static ulonglong start_time= 0; - -static bool is_divisible_by(uint num, uint divisor) -{ - uint quotient= num / divisor; - if (quotient * divisor == num) - return TRUE; - return FALSE; -} - -void calculate_next() -{ - uint part= expected_part, num= expected_num; - uint no_parts= tot_no_parts; - if (max_ind) - { - do - { - while (++part <= no_parts) - { - if (is_divisible_by(num, part) && - (num <= ((1 << 21) + part))) - { - expected_part= part; - expected_num= num; - return; - } - } - part= 0; - } while (--num); - } - else - { - do - { - while (--part > 0) - { - if (is_divisible_by(num, part)) - { - expected_part= part; - expected_num= num; - return; - } - } - part= no_parts + 1; - } while (++num); - } -} - -void calculate_end_next(uint part) -{ - uint no_parts= tot_no_parts, num; - num_array[part]= 0; - if (max_ind) - { - expected_num= 0; - for (part= no_parts; part > 0 ; part--) - { - if (num_array[part]) - { - num= num_array[part] & 0x3FFFFF; - if (num >= expected_num) - { - expected_num= num; - expected_part= part; - } - } - } - if (expected_num == 0) - expected_part= 0; - } - else - { - expected_num= 0xFFFFFFFF; - for (part= 1; part <= no_parts; part++) - { - if (num_array[part]) - { - num= num_array[part] & 0x3FFFFF; - if (num <= expected_num) - { - expected_num= num; - expected_part= part; - } - } - } - if (expected_num == 0xFFFFFFFF) - expected_part= 0; - } - return; -} -static int test_compare(void *null_arg, uchar *a, uchar *b) -{ - uint a_num= (*(uint*)a) & 0x3FFFFF; - uint b_num= (*(uint*)b) & 0x3FFFFF; - uint a_part, b_part; - if (a_num > b_num) - return +1; - if (a_num < b_num) - return -1; - a_part= (*(uint*)a) >> 22; - b_part= (*(uint*)b) >> 22; - if (a_part < b_part) - return +1; - if (a_part > b_part) - return -1; - return 0; -} - -bool check_num(uint num_part) -{ - uint part= num_part >> 22; - uint num= num_part & 0x3FFFFF; - if (part == expected_part) - if (num == expected_num) - return FALSE; - printf("Expect part %u Expect num 0x%x got part %u num 0x%x max_ind %u fix_used %u \n", - expected_part, expected_num, part, num, max_ind, fix_used); - return TRUE; -} - - -void perform_insert(QUEUE *queue) -{ - uint i= 1, no_parts= tot_no_parts; - uint backward_start= 0; - - expected_part= 1; - expected_num= 1; - - if (max_ind) - backward_start= 1 << 21; - - do - { - uint num= (i + backward_start); - if (max_ind) - { - while (!is_divisible_by(num, i)) - num--; - if (max_ind && (num > expected_num || - (num == expected_num && i < expected_part))) - { - expected_num= num; - expected_part= i; - } - } - num_array[i]= num + (i << 22); - if (fix_used) - queue_element(queue, i-1)= (uchar*)&num_array[i]; - else - queue_insert(queue, (uchar*)&num_array[i]); - } while (++i <= no_parts); - if (fix_used) - { - queue->elements= no_parts; - queue_fix(queue); - } -} - -bool perform_ins_del(QUEUE *queue, bool max_ind) -{ - uint i= 0, no_loops= tot_no_loops, j= tot_no_parts; - do - { - uint num_part= *(uint*)queue_top(queue); - uint part= num_part >> 22; - if (check_num(num_part)) - return TRUE; - if (j++ >= no_loops) - { - calculate_end_next(part); - queue_remove(queue, (uint) 0); - } - else - { - calculate_next(); - if (max_ind) - num_array[part]-= part; - else - num_array[part]+= part; - queue_top(queue)= (uchar*)&num_array[part]; - queue_replaced(queue); - } - } while (++i < no_loops); - return FALSE; -} - -bool do_test(uint no_parts, uint l_max_ind, bool l_fix_used) -{ - QUEUE queue; - bool result; - max_ind= l_max_ind; - fix_used= l_fix_used; - init_queue(&queue, no_parts, 0, max_ind, test_compare, NULL); - tot_no_parts= no_parts; - tot_no_loops= 1024; - perform_insert(&queue); - if ((result= perform_ins_del(&queue, max_ind))) - delete_queue(&queue); - if (result) - { - printf("Error\n"); - return TRUE; - } - return FALSE; -} - -static void start_measurement() -{ - start_time= my_getsystime(); -} - -static void stop_measurement() -{ - ulonglong stop_time= my_getsystime(); - uint time_in_micros; - stop_time-= start_time; - stop_time/= 10; /* Convert to microseconds */ - time_in_micros= (uint)stop_time; - printf("Time expired is %u microseconds \n", time_in_micros); -} - -static void benchmark_test() -{ - QUEUE queue_real; - QUEUE *queue= &queue_real; - uint i, add; - fix_used= TRUE; - max_ind= FALSE; - tot_no_parts= 1024; - init_queue(queue, tot_no_parts, 0, max_ind, test_compare, NULL); - /* - First benchmark whether queue_fix is faster than using queue_insert - for sizes of 16 partitions. - */ - for (tot_no_parts= 2, add=2; tot_no_parts < 128; - tot_no_parts+= add, add++) - { - printf("Start benchmark queue_fix, tot_no_parts= %u \n", tot_no_parts); - start_measurement(); - for (i= 0; i < 128; i++) - { - perform_insert(queue); - queue_remove_all(queue); - } - stop_measurement(); - - fix_used= FALSE; - printf("Start benchmark queue_insert\n"); - start_measurement(); - for (i= 0; i < 128; i++) - { - perform_insert(queue); - queue_remove_all(queue); - } - stop_measurement(); - } - /* - Now benchmark insertion and deletion of 16400 elements. - Used in consecutive runs this shows whether the optimised _downheap - is faster than the standard implementation. - */ - printf("Start benchmarking _downheap \n"); - start_measurement(); - perform_insert(queue); - for (i= 0; i < 65536; i++) - { - uint num, part; - num= *(uint*)queue_top(queue); - num+= 16; - part= num >> 22; - num_array[part]= num; - queue_top(queue)= (uchar*)&num_array[part]; - queue_replaced(queue); - } - for (i= 0; i < 16; i++) - queue_remove(queue, (uint) 0); - queue_remove_all(queue); - stop_measurement(); -} - -int main() -{ - int i, add= 1; - for (i= 1; i < 1024; i+=add, add++) - { - printf("Start test for priority queue of size %u\n", i); - if (do_test(i, 0, 1)) - return -1; - if (do_test(i, 1, 1)) - return -1; - if (do_test(i, 0, 0)) - return -1; - if (do_test(i, 1, 0)) - return -1; - } - benchmark_test(); - printf("OK\n"); - return 0; -} -#endif diff --git a/deps/mysqllite/mysys/rijndael.c b/deps/mysqllite/mysys/rijndael.c deleted file mode 100644 index 2d622efad82e18..00000000000000 --- a/deps/mysqllite/mysys/rijndael.c +++ /dev/null @@ -1,1379 +0,0 @@ -/* Copyright (C) 2002, 2004 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -/* - Based on version 3.0 (December 2000) - - Optimised ANSI C code for the Rijndael cipher (now AES) - - author Vincent Rijmen - author Antoon Bosselaers - author Paulo Barreto -*/ - -#include -#include "rijndael.h" - -/* - Define the following to use fastest and much larger code (~10K extra code) - #define FULL_UNROLL -*/ - -static const uint32 Te0[256]= -{ - 0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU, - 0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U, - 0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU, - 0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU, - 0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U, - 0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU, - 0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU, - 0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU, - 0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU, - 0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU, - 0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U, - 0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU, - 0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU, - 0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U, - 0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU, - 0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU, - 0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU, - 0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU, - 0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU, - 0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U, - 0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU, - 0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU, - 0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU, - 0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU, - 0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U, - 0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U, - 0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U, - 0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U, - 0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU, - 0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U, - 0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U, - 0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU, - 0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU, - 0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U, - 0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U, - 0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U, - 0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU, - 0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U, - 0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU, - 0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U, - 0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU, - 0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U, - 0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U, - 0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU, - 0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U, - 0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U, - 0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U, - 0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U, - 0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U, - 0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U, - 0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U, - 0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U, - 0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU, - 0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U, - 0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U, - 0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U, - 0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U, - 0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U, - 0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U, - 0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU, - 0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U, - 0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U, - 0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U, - 0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU, -}; - -static const uint32 Te1[256]= -{ - 0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU, - 0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U, - 0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU, - 0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U, - 0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU, - 0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U, - 0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU, - 0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U, - 0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U, - 0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU, - 0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U, - 0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U, - 0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U, - 0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU, - 0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U, - 0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U, - 0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU, - 0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U, - 0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U, - 0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U, - 0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU, - 0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU, - 0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U, - 0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU, - 0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU, - 0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U, - 0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU, - 0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U, - 0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU, - 0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U, - 0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U, - 0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U, - 0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU, - 0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U, - 0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU, - 0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U, - 0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU, - 0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U, - 0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U, - 0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU, - 0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU, - 0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU, - 0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U, - 0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U, - 0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU, - 0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U, - 0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU, - 0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U, - 0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU, - 0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U, - 0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU, - 0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU, - 0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U, - 0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU, - 0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U, - 0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU, - 0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U, - 0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U, - 0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U, - 0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU, - 0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU, - 0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U, - 0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU, - 0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U, -}; - -static const uint32 Te2[256]= -{ - 0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU, - 0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U, - 0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU, - 0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U, - 0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU, - 0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U, - 0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU, - 0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U, - 0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U, - 0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU, - 0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U, - 0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U, - 0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U, - 0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU, - 0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U, - 0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U, - 0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU, - 0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U, - 0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U, - 0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U, - 0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU, - 0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU, - 0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U, - 0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU, - 0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU, - 0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U, - 0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU, - 0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U, - 0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU, - 0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U, - 0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U, - 0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U, - 0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU, - 0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U, - 0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU, - 0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U, - 0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU, - 0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U, - 0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U, - 0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU, - 0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU, - 0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU, - 0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U, - 0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U, - 0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU, - 0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U, - 0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU, - 0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U, - 0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU, - 0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U, - 0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU, - 0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU, - 0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U, - 0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU, - 0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U, - 0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU, - 0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U, - 0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U, - 0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U, - 0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU, - 0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU, - 0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U, - 0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU, - 0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U, -}; - -static const uint32 Te3[256]= -{ - 0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U, - 0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U, - 0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U, - 0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU, - 0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU, - 0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU, - 0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U, - 0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU, - 0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU, - 0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U, - 0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U, - 0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU, - 0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU, - 0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU, - 0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU, - 0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU, - 0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U, - 0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU, - 0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU, - 0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U, - 0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U, - 0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U, - 0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U, - 0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U, - 0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU, - 0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U, - 0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU, - 0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU, - 0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U, - 0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U, - 0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U, - 0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU, - 0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U, - 0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU, - 0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU, - 0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U, - 0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U, - 0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU, - 0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U, - 0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU, - 0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U, - 0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U, - 0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U, - 0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U, - 0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU, - 0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U, - 0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU, - 0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U, - 0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU, - 0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U, - 0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU, - 0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU, - 0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU, - 0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU, - 0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U, - 0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U, - 0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U, - 0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U, - 0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U, - 0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U, - 0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU, - 0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U, - 0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU, - 0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU, -}; - -static const uint32 Te4[256]= -{ - 0x63636363U, 0x7c7c7c7cU, 0x77777777U, 0x7b7b7b7bU, - 0xf2f2f2f2U, 0x6b6b6b6bU, 0x6f6f6f6fU, 0xc5c5c5c5U, - 0x30303030U, 0x01010101U, 0x67676767U, 0x2b2b2b2bU, - 0xfefefefeU, 0xd7d7d7d7U, 0xababababU, 0x76767676U, - 0xcacacacaU, 0x82828282U, 0xc9c9c9c9U, 0x7d7d7d7dU, - 0xfafafafaU, 0x59595959U, 0x47474747U, 0xf0f0f0f0U, - 0xadadadadU, 0xd4d4d4d4U, 0xa2a2a2a2U, 0xafafafafU, - 0x9c9c9c9cU, 0xa4a4a4a4U, 0x72727272U, 0xc0c0c0c0U, - 0xb7b7b7b7U, 0xfdfdfdfdU, 0x93939393U, 0x26262626U, - 0x36363636U, 0x3f3f3f3fU, 0xf7f7f7f7U, 0xccccccccU, - 0x34343434U, 0xa5a5a5a5U, 0xe5e5e5e5U, 0xf1f1f1f1U, - 0x71717171U, 0xd8d8d8d8U, 0x31313131U, 0x15151515U, - 0x04040404U, 0xc7c7c7c7U, 0x23232323U, 0xc3c3c3c3U, - 0x18181818U, 0x96969696U, 0x05050505U, 0x9a9a9a9aU, - 0x07070707U, 0x12121212U, 0x80808080U, 0xe2e2e2e2U, - 0xebebebebU, 0x27272727U, 0xb2b2b2b2U, 0x75757575U, - 0x09090909U, 0x83838383U, 0x2c2c2c2cU, 0x1a1a1a1aU, - 0x1b1b1b1bU, 0x6e6e6e6eU, 0x5a5a5a5aU, 0xa0a0a0a0U, - 0x52525252U, 0x3b3b3b3bU, 0xd6d6d6d6U, 0xb3b3b3b3U, - 0x29292929U, 0xe3e3e3e3U, 0x2f2f2f2fU, 0x84848484U, - 0x53535353U, 0xd1d1d1d1U, 0x00000000U, 0xededededU, - 0x20202020U, 0xfcfcfcfcU, 0xb1b1b1b1U, 0x5b5b5b5bU, - 0x6a6a6a6aU, 0xcbcbcbcbU, 0xbebebebeU, 0x39393939U, - 0x4a4a4a4aU, 0x4c4c4c4cU, 0x58585858U, 0xcfcfcfcfU, - 0xd0d0d0d0U, 0xefefefefU, 0xaaaaaaaaU, 0xfbfbfbfbU, - 0x43434343U, 0x4d4d4d4dU, 0x33333333U, 0x85858585U, - 0x45454545U, 0xf9f9f9f9U, 0x02020202U, 0x7f7f7f7fU, - 0x50505050U, 0x3c3c3c3cU, 0x9f9f9f9fU, 0xa8a8a8a8U, - 0x51515151U, 0xa3a3a3a3U, 0x40404040U, 0x8f8f8f8fU, - 0x92929292U, 0x9d9d9d9dU, 0x38383838U, 0xf5f5f5f5U, - 0xbcbcbcbcU, 0xb6b6b6b6U, 0xdadadadaU, 0x21212121U, - 0x10101010U, 0xffffffffU, 0xf3f3f3f3U, 0xd2d2d2d2U, - 0xcdcdcdcdU, 0x0c0c0c0cU, 0x13131313U, 0xececececU, - 0x5f5f5f5fU, 0x97979797U, 0x44444444U, 0x17171717U, - 0xc4c4c4c4U, 0xa7a7a7a7U, 0x7e7e7e7eU, 0x3d3d3d3dU, - 0x64646464U, 0x5d5d5d5dU, 0x19191919U, 0x73737373U, - 0x60606060U, 0x81818181U, 0x4f4f4f4fU, 0xdcdcdcdcU, - 0x22222222U, 0x2a2a2a2aU, 0x90909090U, 0x88888888U, - 0x46464646U, 0xeeeeeeeeU, 0xb8b8b8b8U, 0x14141414U, - 0xdedededeU, 0x5e5e5e5eU, 0x0b0b0b0bU, 0xdbdbdbdbU, - 0xe0e0e0e0U, 0x32323232U, 0x3a3a3a3aU, 0x0a0a0a0aU, - 0x49494949U, 0x06060606U, 0x24242424U, 0x5c5c5c5cU, - 0xc2c2c2c2U, 0xd3d3d3d3U, 0xacacacacU, 0x62626262U, - 0x91919191U, 0x95959595U, 0xe4e4e4e4U, 0x79797979U, - 0xe7e7e7e7U, 0xc8c8c8c8U, 0x37373737U, 0x6d6d6d6dU, - 0x8d8d8d8dU, 0xd5d5d5d5U, 0x4e4e4e4eU, 0xa9a9a9a9U, - 0x6c6c6c6cU, 0x56565656U, 0xf4f4f4f4U, 0xeaeaeaeaU, - 0x65656565U, 0x7a7a7a7aU, 0xaeaeaeaeU, 0x08080808U, - 0xbabababaU, 0x78787878U, 0x25252525U, 0x2e2e2e2eU, - 0x1c1c1c1cU, 0xa6a6a6a6U, 0xb4b4b4b4U, 0xc6c6c6c6U, - 0xe8e8e8e8U, 0xddddddddU, 0x74747474U, 0x1f1f1f1fU, - 0x4b4b4b4bU, 0xbdbdbdbdU, 0x8b8b8b8bU, 0x8a8a8a8aU, - 0x70707070U, 0x3e3e3e3eU, 0xb5b5b5b5U, 0x66666666U, - 0x48484848U, 0x03030303U, 0xf6f6f6f6U, 0x0e0e0e0eU, - 0x61616161U, 0x35353535U, 0x57575757U, 0xb9b9b9b9U, - 0x86868686U, 0xc1c1c1c1U, 0x1d1d1d1dU, 0x9e9e9e9eU, - 0xe1e1e1e1U, 0xf8f8f8f8U, 0x98989898U, 0x11111111U, - 0x69696969U, 0xd9d9d9d9U, 0x8e8e8e8eU, 0x94949494U, - 0x9b9b9b9bU, 0x1e1e1e1eU, 0x87878787U, 0xe9e9e9e9U, - 0xcecececeU, 0x55555555U, 0x28282828U, 0xdfdfdfdfU, - 0x8c8c8c8cU, 0xa1a1a1a1U, 0x89898989U, 0x0d0d0d0dU, - 0xbfbfbfbfU, 0xe6e6e6e6U, 0x42424242U, 0x68686868U, - 0x41414141U, 0x99999999U, 0x2d2d2d2dU, 0x0f0f0f0fU, - 0xb0b0b0b0U, 0x54545454U, 0xbbbbbbbbU, 0x16161616U, -}; - -static const uint32 Td0[256]= -{ - 0x51f4a750U, 0x7e416553U, 0x1a17a4c3U, 0x3a275e96U, - 0x3bab6bcbU, 0x1f9d45f1U, 0xacfa58abU, 0x4be30393U, - 0x2030fa55U, 0xad766df6U, 0x88cc7691U, 0xf5024c25U, - 0x4fe5d7fcU, 0xc52acbd7U, 0x26354480U, 0xb562a38fU, - 0xdeb15a49U, 0x25ba1b67U, 0x45ea0e98U, 0x5dfec0e1U, - 0xc32f7502U, 0x814cf012U, 0x8d4697a3U, 0x6bd3f9c6U, - 0x038f5fe7U, 0x15929c95U, 0xbf6d7aebU, 0x955259daU, - 0xd4be832dU, 0x587421d3U, 0x49e06929U, 0x8ec9c844U, - 0x75c2896aU, 0xf48e7978U, 0x99583e6bU, 0x27b971ddU, - 0xbee14fb6U, 0xf088ad17U, 0xc920ac66U, 0x7dce3ab4U, - 0x63df4a18U, 0xe51a3182U, 0x97513360U, 0x62537f45U, - 0xb16477e0U, 0xbb6bae84U, 0xfe81a01cU, 0xf9082b94U, - 0x70486858U, 0x8f45fd19U, 0x94de6c87U, 0x527bf8b7U, - 0xab73d323U, 0x724b02e2U, 0xe31f8f57U, 0x6655ab2aU, - 0xb2eb2807U, 0x2fb5c203U, 0x86c57b9aU, 0xd33708a5U, - 0x302887f2U, 0x23bfa5b2U, 0x02036abaU, 0xed16825cU, - 0x8acf1c2bU, 0xa779b492U, 0xf307f2f0U, 0x4e69e2a1U, - 0x65daf4cdU, 0x0605bed5U, 0xd134621fU, 0xc4a6fe8aU, - 0x342e539dU, 0xa2f355a0U, 0x058ae132U, 0xa4f6eb75U, - 0x0b83ec39U, 0x4060efaaU, 0x5e719f06U, 0xbd6e1051U, - 0x3e218af9U, 0x96dd063dU, 0xdd3e05aeU, 0x4de6bd46U, - 0x91548db5U, 0x71c45d05U, 0x0406d46fU, 0x605015ffU, - 0x1998fb24U, 0xd6bde997U, 0x894043ccU, 0x67d99e77U, - 0xb0e842bdU, 0x07898b88U, 0xe7195b38U, 0x79c8eedbU, - 0xa17c0a47U, 0x7c420fe9U, 0xf8841ec9U, 0x00000000U, - 0x09808683U, 0x322bed48U, 0x1e1170acU, 0x6c5a724eU, - 0xfd0efffbU, 0x0f853856U, 0x3daed51eU, 0x362d3927U, - 0x0a0fd964U, 0x685ca621U, 0x9b5b54d1U, 0x24362e3aU, - 0x0c0a67b1U, 0x9357e70fU, 0xb4ee96d2U, 0x1b9b919eU, - 0x80c0c54fU, 0x61dc20a2U, 0x5a774b69U, 0x1c121a16U, - 0xe293ba0aU, 0xc0a02ae5U, 0x3c22e043U, 0x121b171dU, - 0x0e090d0bU, 0xf28bc7adU, 0x2db6a8b9U, 0x141ea9c8U, - 0x57f11985U, 0xaf75074cU, 0xee99ddbbU, 0xa37f60fdU, - 0xf701269fU, 0x5c72f5bcU, 0x44663bc5U, 0x5bfb7e34U, - 0x8b432976U, 0xcb23c6dcU, 0xb6edfc68U, 0xb8e4f163U, - 0xd731dccaU, 0x42638510U, 0x13972240U, 0x84c61120U, - 0x854a247dU, 0xd2bb3df8U, 0xaef93211U, 0xc729a16dU, - 0x1d9e2f4bU, 0xdcb230f3U, 0x0d8652ecU, 0x77c1e3d0U, - 0x2bb3166cU, 0xa970b999U, 0x119448faU, 0x47e96422U, - 0xa8fc8cc4U, 0xa0f03f1aU, 0x567d2cd8U, 0x223390efU, - 0x87494ec7U, 0xd938d1c1U, 0x8ccaa2feU, 0x98d40b36U, - 0xa6f581cfU, 0xa57ade28U, 0xdab78e26U, 0x3fadbfa4U, - 0x2c3a9de4U, 0x5078920dU, 0x6a5fcc9bU, 0x547e4662U, - 0xf68d13c2U, 0x90d8b8e8U, 0x2e39f75eU, 0x82c3aff5U, - 0x9f5d80beU, 0x69d0937cU, 0x6fd52da9U, 0xcf2512b3U, - 0xc8ac993bU, 0x10187da7U, 0xe89c636eU, 0xdb3bbb7bU, - 0xcd267809U, 0x6e5918f4U, 0xec9ab701U, 0x834f9aa8U, - 0xe6956e65U, 0xaaffe67eU, 0x21bccf08U, 0xef15e8e6U, - 0xbae79bd9U, 0x4a6f36ceU, 0xea9f09d4U, 0x29b07cd6U, - 0x31a4b2afU, 0x2a3f2331U, 0xc6a59430U, 0x35a266c0U, - 0x744ebc37U, 0xfc82caa6U, 0xe090d0b0U, 0x33a7d815U, - 0xf104984aU, 0x41ecdaf7U, 0x7fcd500eU, 0x1791f62fU, - 0x764dd68dU, 0x43efb04dU, 0xccaa4d54U, 0xe49604dfU, - 0x9ed1b5e3U, 0x4c6a881bU, 0xc12c1fb8U, 0x4665517fU, - 0x9d5eea04U, 0x018c355dU, 0xfa877473U, 0xfb0b412eU, - 0xb3671d5aU, 0x92dbd252U, 0xe9105633U, 0x6dd64713U, - 0x9ad7618cU, 0x37a10c7aU, 0x59f8148eU, 0xeb133c89U, - 0xcea927eeU, 0xb761c935U, 0xe11ce5edU, 0x7a47b13cU, - 0x9cd2df59U, 0x55f2733fU, 0x1814ce79U, 0x73c737bfU, - 0x53f7cdeaU, 0x5ffdaa5bU, 0xdf3d6f14U, 0x7844db86U, - 0xcaaff381U, 0xb968c43eU, 0x3824342cU, 0xc2a3405fU, - 0x161dc372U, 0xbce2250cU, 0x283c498bU, 0xff0d9541U, - 0x39a80171U, 0x080cb3deU, 0xd8b4e49cU, 0x6456c190U, - 0x7bcb8461U, 0xd532b670U, 0x486c5c74U, 0xd0b85742U, -}; - -static const uint32 Td1[256]= -{ - 0x5051f4a7U, 0x537e4165U, 0xc31a17a4U, 0x963a275eU, - 0xcb3bab6bU, 0xf11f9d45U, 0xabacfa58U, 0x934be303U, - 0x552030faU, 0xf6ad766dU, 0x9188cc76U, 0x25f5024cU, - 0xfc4fe5d7U, 0xd7c52acbU, 0x80263544U, 0x8fb562a3U, - 0x49deb15aU, 0x6725ba1bU, 0x9845ea0eU, 0xe15dfec0U, - 0x02c32f75U, 0x12814cf0U, 0xa38d4697U, 0xc66bd3f9U, - 0xe7038f5fU, 0x9515929cU, 0xebbf6d7aU, 0xda955259U, - 0x2dd4be83U, 0xd3587421U, 0x2949e069U, 0x448ec9c8U, - 0x6a75c289U, 0x78f48e79U, 0x6b99583eU, 0xdd27b971U, - 0xb6bee14fU, 0x17f088adU, 0x66c920acU, 0xb47dce3aU, - 0x1863df4aU, 0x82e51a31U, 0x60975133U, 0x4562537fU, - 0xe0b16477U, 0x84bb6baeU, 0x1cfe81a0U, 0x94f9082bU, - 0x58704868U, 0x198f45fdU, 0x8794de6cU, 0xb7527bf8U, - 0x23ab73d3U, 0xe2724b02U, 0x57e31f8fU, 0x2a6655abU, - 0x07b2eb28U, 0x032fb5c2U, 0x9a86c57bU, 0xa5d33708U, - 0xf2302887U, 0xb223bfa5U, 0xba02036aU, 0x5ced1682U, - 0x2b8acf1cU, 0x92a779b4U, 0xf0f307f2U, 0xa14e69e2U, - 0xcd65daf4U, 0xd50605beU, 0x1fd13462U, 0x8ac4a6feU, - 0x9d342e53U, 0xa0a2f355U, 0x32058ae1U, 0x75a4f6ebU, - 0x390b83ecU, 0xaa4060efU, 0x065e719fU, 0x51bd6e10U, - 0xf93e218aU, 0x3d96dd06U, 0xaedd3e05U, 0x464de6bdU, - 0xb591548dU, 0x0571c45dU, 0x6f0406d4U, 0xff605015U, - 0x241998fbU, 0x97d6bde9U, 0xcc894043U, 0x7767d99eU, - 0xbdb0e842U, 0x8807898bU, 0x38e7195bU, 0xdb79c8eeU, - 0x47a17c0aU, 0xe97c420fU, 0xc9f8841eU, 0x00000000U, - 0x83098086U, 0x48322bedU, 0xac1e1170U, 0x4e6c5a72U, - 0xfbfd0effU, 0x560f8538U, 0x1e3daed5U, 0x27362d39U, - 0x640a0fd9U, 0x21685ca6U, 0xd19b5b54U, 0x3a24362eU, - 0xb10c0a67U, 0x0f9357e7U, 0xd2b4ee96U, 0x9e1b9b91U, - 0x4f80c0c5U, 0xa261dc20U, 0x695a774bU, 0x161c121aU, - 0x0ae293baU, 0xe5c0a02aU, 0x433c22e0U, 0x1d121b17U, - 0x0b0e090dU, 0xadf28bc7U, 0xb92db6a8U, 0xc8141ea9U, - 0x8557f119U, 0x4caf7507U, 0xbbee99ddU, 0xfda37f60U, - 0x9ff70126U, 0xbc5c72f5U, 0xc544663bU, 0x345bfb7eU, - 0x768b4329U, 0xdccb23c6U, 0x68b6edfcU, 0x63b8e4f1U, - 0xcad731dcU, 0x10426385U, 0x40139722U, 0x2084c611U, - 0x7d854a24U, 0xf8d2bb3dU, 0x11aef932U, 0x6dc729a1U, - 0x4b1d9e2fU, 0xf3dcb230U, 0xec0d8652U, 0xd077c1e3U, - 0x6c2bb316U, 0x99a970b9U, 0xfa119448U, 0x2247e964U, - 0xc4a8fc8cU, 0x1aa0f03fU, 0xd8567d2cU, 0xef223390U, - 0xc787494eU, 0xc1d938d1U, 0xfe8ccaa2U, 0x3698d40bU, - 0xcfa6f581U, 0x28a57adeU, 0x26dab78eU, 0xa43fadbfU, - 0xe42c3a9dU, 0x0d507892U, 0x9b6a5fccU, 0x62547e46U, - 0xc2f68d13U, 0xe890d8b8U, 0x5e2e39f7U, 0xf582c3afU, - 0xbe9f5d80U, 0x7c69d093U, 0xa96fd52dU, 0xb3cf2512U, - 0x3bc8ac99U, 0xa710187dU, 0x6ee89c63U, 0x7bdb3bbbU, - 0x09cd2678U, 0xf46e5918U, 0x01ec9ab7U, 0xa8834f9aU, - 0x65e6956eU, 0x7eaaffe6U, 0x0821bccfU, 0xe6ef15e8U, - 0xd9bae79bU, 0xce4a6f36U, 0xd4ea9f09U, 0xd629b07cU, - 0xaf31a4b2U, 0x312a3f23U, 0x30c6a594U, 0xc035a266U, - 0x37744ebcU, 0xa6fc82caU, 0xb0e090d0U, 0x1533a7d8U, - 0x4af10498U, 0xf741ecdaU, 0x0e7fcd50U, 0x2f1791f6U, - 0x8d764dd6U, 0x4d43efb0U, 0x54ccaa4dU, 0xdfe49604U, - 0xe39ed1b5U, 0x1b4c6a88U, 0xb8c12c1fU, 0x7f466551U, - 0x049d5eeaU, 0x5d018c35U, 0x73fa8774U, 0x2efb0b41U, - 0x5ab3671dU, 0x5292dbd2U, 0x33e91056U, 0x136dd647U, - 0x8c9ad761U, 0x7a37a10cU, 0x8e59f814U, 0x89eb133cU, - 0xeecea927U, 0x35b761c9U, 0xede11ce5U, 0x3c7a47b1U, - 0x599cd2dfU, 0x3f55f273U, 0x791814ceU, 0xbf73c737U, - 0xea53f7cdU, 0x5b5ffdaaU, 0x14df3d6fU, 0x867844dbU, - 0x81caaff3U, 0x3eb968c4U, 0x2c382434U, 0x5fc2a340U, - 0x72161dc3U, 0x0cbce225U, 0x8b283c49U, 0x41ff0d95U, - 0x7139a801U, 0xde080cb3U, 0x9cd8b4e4U, 0x906456c1U, - 0x617bcb84U, 0x70d532b6U, 0x74486c5cU, 0x42d0b857U, -}; - -static const uint32 Td2[256]= -{ - 0xa75051f4U, 0x65537e41U, 0xa4c31a17U, 0x5e963a27U, - 0x6bcb3babU, 0x45f11f9dU, 0x58abacfaU, 0x03934be3U, - 0xfa552030U, 0x6df6ad76U, 0x769188ccU, 0x4c25f502U, - 0xd7fc4fe5U, 0xcbd7c52aU, 0x44802635U, 0xa38fb562U, - 0x5a49deb1U, 0x1b6725baU, 0x0e9845eaU, 0xc0e15dfeU, - 0x7502c32fU, 0xf012814cU, 0x97a38d46U, 0xf9c66bd3U, - 0x5fe7038fU, 0x9c951592U, 0x7aebbf6dU, 0x59da9552U, - 0x832dd4beU, 0x21d35874U, 0x692949e0U, 0xc8448ec9U, - 0x896a75c2U, 0x7978f48eU, 0x3e6b9958U, 0x71dd27b9U, - 0x4fb6bee1U, 0xad17f088U, 0xac66c920U, 0x3ab47dceU, - 0x4a1863dfU, 0x3182e51aU, 0x33609751U, 0x7f456253U, - 0x77e0b164U, 0xae84bb6bU, 0xa01cfe81U, 0x2b94f908U, - 0x68587048U, 0xfd198f45U, 0x6c8794deU, 0xf8b7527bU, - 0xd323ab73U, 0x02e2724bU, 0x8f57e31fU, 0xab2a6655U, - 0x2807b2ebU, 0xc2032fb5U, 0x7b9a86c5U, 0x08a5d337U, - 0x87f23028U, 0xa5b223bfU, 0x6aba0203U, 0x825ced16U, - 0x1c2b8acfU, 0xb492a779U, 0xf2f0f307U, 0xe2a14e69U, - 0xf4cd65daU, 0xbed50605U, 0x621fd134U, 0xfe8ac4a6U, - 0x539d342eU, 0x55a0a2f3U, 0xe132058aU, 0xeb75a4f6U, - 0xec390b83U, 0xefaa4060U, 0x9f065e71U, 0x1051bd6eU, - - 0x8af93e21U, 0x063d96ddU, 0x05aedd3eU, 0xbd464de6U, - 0x8db59154U, 0x5d0571c4U, 0xd46f0406U, 0x15ff6050U, - 0xfb241998U, 0xe997d6bdU, 0x43cc8940U, 0x9e7767d9U, - 0x42bdb0e8U, 0x8b880789U, 0x5b38e719U, 0xeedb79c8U, - 0x0a47a17cU, 0x0fe97c42U, 0x1ec9f884U, 0x00000000U, - 0x86830980U, 0xed48322bU, 0x70ac1e11U, 0x724e6c5aU, - 0xfffbfd0eU, 0x38560f85U, 0xd51e3daeU, 0x3927362dU, - 0xd9640a0fU, 0xa621685cU, 0x54d19b5bU, 0x2e3a2436U, - 0x67b10c0aU, 0xe70f9357U, 0x96d2b4eeU, 0x919e1b9bU, - 0xc54f80c0U, 0x20a261dcU, 0x4b695a77U, 0x1a161c12U, - 0xba0ae293U, 0x2ae5c0a0U, 0xe0433c22U, 0x171d121bU, - 0x0d0b0e09U, 0xc7adf28bU, 0xa8b92db6U, 0xa9c8141eU, - 0x198557f1U, 0x074caf75U, 0xddbbee99U, 0x60fda37fU, - 0x269ff701U, 0xf5bc5c72U, 0x3bc54466U, 0x7e345bfbU, - 0x29768b43U, 0xc6dccb23U, 0xfc68b6edU, 0xf163b8e4U, - 0xdccad731U, 0x85104263U, 0x22401397U, 0x112084c6U, - 0x247d854aU, 0x3df8d2bbU, 0x3211aef9U, 0xa16dc729U, - 0x2f4b1d9eU, 0x30f3dcb2U, 0x52ec0d86U, 0xe3d077c1U, - 0x166c2bb3U, 0xb999a970U, 0x48fa1194U, 0x642247e9U, - 0x8cc4a8fcU, 0x3f1aa0f0U, 0x2cd8567dU, 0x90ef2233U, - 0x4ec78749U, 0xd1c1d938U, 0xa2fe8ccaU, 0x0b3698d4U, - 0x81cfa6f5U, 0xde28a57aU, 0x8e26dab7U, 0xbfa43fadU, - 0x9de42c3aU, 0x920d5078U, 0xcc9b6a5fU, 0x4662547eU, - 0x13c2f68dU, 0xb8e890d8U, 0xf75e2e39U, 0xaff582c3U, - 0x80be9f5dU, 0x937c69d0U, 0x2da96fd5U, 0x12b3cf25U, - 0x993bc8acU, 0x7da71018U, 0x636ee89cU, 0xbb7bdb3bU, - 0x7809cd26U, 0x18f46e59U, 0xb701ec9aU, 0x9aa8834fU, - 0x6e65e695U, 0xe67eaaffU, 0xcf0821bcU, 0xe8e6ef15U, - 0x9bd9bae7U, 0x36ce4a6fU, 0x09d4ea9fU, 0x7cd629b0U, - 0xb2af31a4U, 0x23312a3fU, 0x9430c6a5U, 0x66c035a2U, - 0xbc37744eU, 0xcaa6fc82U, 0xd0b0e090U, 0xd81533a7U, - 0x984af104U, 0xdaf741ecU, 0x500e7fcdU, 0xf62f1791U, - 0xd68d764dU, 0xb04d43efU, 0x4d54ccaaU, 0x04dfe496U, - 0xb5e39ed1U, 0x881b4c6aU, 0x1fb8c12cU, 0x517f4665U, - 0xea049d5eU, 0x355d018cU, 0x7473fa87U, 0x412efb0bU, - 0x1d5ab367U, 0xd25292dbU, 0x5633e910U, 0x47136dd6U, - 0x618c9ad7U, 0x0c7a37a1U, 0x148e59f8U, 0x3c89eb13U, - 0x27eecea9U, 0xc935b761U, 0xe5ede11cU, 0xb13c7a47U, - 0xdf599cd2U, 0x733f55f2U, 0xce791814U, 0x37bf73c7U, - 0xcdea53f7U, 0xaa5b5ffdU, 0x6f14df3dU, 0xdb867844U, - 0xf381caafU, 0xc43eb968U, 0x342c3824U, 0x405fc2a3U, - 0xc372161dU, 0x250cbce2U, 0x498b283cU, 0x9541ff0dU, - 0x017139a8U, 0xb3de080cU, 0xe49cd8b4U, 0xc1906456U, - 0x84617bcbU, 0xb670d532U, 0x5c74486cU, 0x5742d0b8U, -}; - -static const uint32 Td3[256]= -{ - 0xf4a75051U, 0x4165537eU, 0x17a4c31aU, 0x275e963aU, - 0xab6bcb3bU, 0x9d45f11fU, 0xfa58abacU, 0xe303934bU, - 0x30fa5520U, 0x766df6adU, 0xcc769188U, 0x024c25f5U, - 0xe5d7fc4fU, 0x2acbd7c5U, 0x35448026U, 0x62a38fb5U, - 0xb15a49deU, 0xba1b6725U, 0xea0e9845U, 0xfec0e15dU, - 0x2f7502c3U, 0x4cf01281U, 0x4697a38dU, 0xd3f9c66bU, - 0x8f5fe703U, 0x929c9515U, 0x6d7aebbfU, 0x5259da95U, - 0xbe832dd4U, 0x7421d358U, 0xe0692949U, 0xc9c8448eU, - 0xc2896a75U, 0x8e7978f4U, 0x583e6b99U, 0xb971dd27U, - 0xe14fb6beU, 0x88ad17f0U, 0x20ac66c9U, 0xce3ab47dU, - 0xdf4a1863U, 0x1a3182e5U, 0x51336097U, 0x537f4562U, - 0x6477e0b1U, 0x6bae84bbU, 0x81a01cfeU, 0x082b94f9U, - 0x48685870U, 0x45fd198fU, 0xde6c8794U, 0x7bf8b752U, - 0x73d323abU, 0x4b02e272U, 0x1f8f57e3U, 0x55ab2a66U, - 0xeb2807b2U, 0xb5c2032fU, 0xc57b9a86U, 0x3708a5d3U, - 0x2887f230U, 0xbfa5b223U, 0x036aba02U, 0x16825cedU, - 0xcf1c2b8aU, 0x79b492a7U, 0x07f2f0f3U, 0x69e2a14eU, - 0xdaf4cd65U, 0x05bed506U, 0x34621fd1U, 0xa6fe8ac4U, - 0x2e539d34U, 0xf355a0a2U, 0x8ae13205U, 0xf6eb75a4U, - 0x83ec390bU, 0x60efaa40U, 0x719f065eU, 0x6e1051bdU, - 0x218af93eU, 0xdd063d96U, 0x3e05aeddU, 0xe6bd464dU, - 0x548db591U, 0xc45d0571U, 0x06d46f04U, 0x5015ff60U, - 0x98fb2419U, 0xbde997d6U, 0x4043cc89U, 0xd99e7767U, - 0xe842bdb0U, 0x898b8807U, 0x195b38e7U, 0xc8eedb79U, - 0x7c0a47a1U, 0x420fe97cU, 0x841ec9f8U, 0x00000000U, - 0x80868309U, 0x2bed4832U, 0x1170ac1eU, 0x5a724e6cU, - 0x0efffbfdU, 0x8538560fU, 0xaed51e3dU, 0x2d392736U, - 0x0fd9640aU, 0x5ca62168U, 0x5b54d19bU, 0x362e3a24U, - 0x0a67b10cU, 0x57e70f93U, 0xee96d2b4U, 0x9b919e1bU, - 0xc0c54f80U, 0xdc20a261U, 0x774b695aU, 0x121a161cU, - 0x93ba0ae2U, 0xa02ae5c0U, 0x22e0433cU, 0x1b171d12U, - 0x090d0b0eU, 0x8bc7adf2U, 0xb6a8b92dU, 0x1ea9c814U, - 0xf1198557U, 0x75074cafU, 0x99ddbbeeU, 0x7f60fda3U, - 0x01269ff7U, 0x72f5bc5cU, 0x663bc544U, 0xfb7e345bU, - 0x4329768bU, 0x23c6dccbU, 0xedfc68b6U, 0xe4f163b8U, - 0x31dccad7U, 0x63851042U, 0x97224013U, 0xc6112084U, - 0x4a247d85U, 0xbb3df8d2U, 0xf93211aeU, 0x29a16dc7U, - 0x9e2f4b1dU, 0xb230f3dcU, 0x8652ec0dU, 0xc1e3d077U, - 0xb3166c2bU, 0x70b999a9U, 0x9448fa11U, 0xe9642247U, - 0xfc8cc4a8U, 0xf03f1aa0U, 0x7d2cd856U, 0x3390ef22U, - 0x494ec787U, 0x38d1c1d9U, 0xcaa2fe8cU, 0xd40b3698U, - 0xf581cfa6U, 0x7ade28a5U, 0xb78e26daU, 0xadbfa43fU, - 0x3a9de42cU, 0x78920d50U, 0x5fcc9b6aU, 0x7e466254U, - 0x8d13c2f6U, 0xd8b8e890U, 0x39f75e2eU, 0xc3aff582U, - 0x5d80be9fU, 0xd0937c69U, 0xd52da96fU, 0x2512b3cfU, - 0xac993bc8U, 0x187da710U, 0x9c636ee8U, 0x3bbb7bdbU, - 0x267809cdU, 0x5918f46eU, 0x9ab701ecU, 0x4f9aa883U, - 0x956e65e6U, 0xffe67eaaU, 0xbccf0821U, 0x15e8e6efU, - 0xe79bd9baU, 0x6f36ce4aU, 0x9f09d4eaU, 0xb07cd629U, - 0xa4b2af31U, 0x3f23312aU, 0xa59430c6U, 0xa266c035U, - 0x4ebc3774U, 0x82caa6fcU, 0x90d0b0e0U, 0xa7d81533U, - 0x04984af1U, 0xecdaf741U, 0xcd500e7fU, 0x91f62f17U, - 0x4dd68d76U, 0xefb04d43U, 0xaa4d54ccU, 0x9604dfe4U, - 0xd1b5e39eU, 0x6a881b4cU, 0x2c1fb8c1U, 0x65517f46U, - 0x5eea049dU, 0x8c355d01U, 0x877473faU, 0x0b412efbU, - 0x671d5ab3U, 0xdbd25292U, 0x105633e9U, 0xd647136dU, - 0xd7618c9aU, 0xa10c7a37U, 0xf8148e59U, 0x133c89ebU, - 0xa927eeceU, 0x61c935b7U, 0x1ce5ede1U, 0x47b13c7aU, - 0xd2df599cU, 0xf2733f55U, 0x14ce7918U, 0xc737bf73U, - 0xf7cdea53U, 0xfdaa5b5fU, 0x3d6f14dfU, 0x44db8678U, - 0xaff381caU, 0x68c43eb9U, 0x24342c38U, 0xa3405fc2U, - 0x1dc37216U, 0xe2250cbcU, 0x3c498b28U, 0x0d9541ffU, - 0xa8017139U, 0x0cb3de08U, 0xb4e49cd8U, 0x56c19064U, - 0xcb84617bU, 0x32b670d5U, 0x6c5c7448U, 0xb85742d0U, -}; - -static const uint32 Td4[256]= -{ - 0x52525252U, 0x09090909U, 0x6a6a6a6aU, 0xd5d5d5d5U, - 0x30303030U, 0x36363636U, 0xa5a5a5a5U, 0x38383838U, - 0xbfbfbfbfU, 0x40404040U, 0xa3a3a3a3U, 0x9e9e9e9eU, - 0x81818181U, 0xf3f3f3f3U, 0xd7d7d7d7U, 0xfbfbfbfbU, - 0x7c7c7c7cU, 0xe3e3e3e3U, 0x39393939U, 0x82828282U, - 0x9b9b9b9bU, 0x2f2f2f2fU, 0xffffffffU, 0x87878787U, - 0x34343434U, 0x8e8e8e8eU, 0x43434343U, 0x44444444U, - 0xc4c4c4c4U, 0xdedededeU, 0xe9e9e9e9U, 0xcbcbcbcbU, - 0x54545454U, 0x7b7b7b7bU, 0x94949494U, 0x32323232U, - 0xa6a6a6a6U, 0xc2c2c2c2U, 0x23232323U, 0x3d3d3d3dU, - 0xeeeeeeeeU, 0x4c4c4c4cU, 0x95959595U, 0x0b0b0b0bU, - 0x42424242U, 0xfafafafaU, 0xc3c3c3c3U, 0x4e4e4e4eU, - 0x08080808U, 0x2e2e2e2eU, 0xa1a1a1a1U, 0x66666666U, - 0x28282828U, 0xd9d9d9d9U, 0x24242424U, 0xb2b2b2b2U, - 0x76767676U, 0x5b5b5b5bU, 0xa2a2a2a2U, 0x49494949U, - 0x6d6d6d6dU, 0x8b8b8b8bU, 0xd1d1d1d1U, 0x25252525U, - 0x72727272U, 0xf8f8f8f8U, 0xf6f6f6f6U, 0x64646464U, - 0x86868686U, 0x68686868U, 0x98989898U, 0x16161616U, - 0xd4d4d4d4U, 0xa4a4a4a4U, 0x5c5c5c5cU, 0xccccccccU, - 0x5d5d5d5dU, 0x65656565U, 0xb6b6b6b6U, 0x92929292U, - 0x6c6c6c6cU, 0x70707070U, 0x48484848U, 0x50505050U, - 0xfdfdfdfdU, 0xededededU, 0xb9b9b9b9U, 0xdadadadaU, - 0x5e5e5e5eU, 0x15151515U, 0x46464646U, 0x57575757U, - 0xa7a7a7a7U, 0x8d8d8d8dU, 0x9d9d9d9dU, 0x84848484U, - 0x90909090U, 0xd8d8d8d8U, 0xababababU, 0x00000000U, - 0x8c8c8c8cU, 0xbcbcbcbcU, 0xd3d3d3d3U, 0x0a0a0a0aU, - 0xf7f7f7f7U, 0xe4e4e4e4U, 0x58585858U, 0x05050505U, - 0xb8b8b8b8U, 0xb3b3b3b3U, 0x45454545U, 0x06060606U, - 0xd0d0d0d0U, 0x2c2c2c2cU, 0x1e1e1e1eU, 0x8f8f8f8fU, - 0xcacacacaU, 0x3f3f3f3fU, 0x0f0f0f0fU, 0x02020202U, - 0xc1c1c1c1U, 0xafafafafU, 0xbdbdbdbdU, 0x03030303U, - 0x01010101U, 0x13131313U, 0x8a8a8a8aU, 0x6b6b6b6bU, - 0x3a3a3a3aU, 0x91919191U, 0x11111111U, 0x41414141U, - 0x4f4f4f4fU, 0x67676767U, 0xdcdcdcdcU, 0xeaeaeaeaU, - 0x97979797U, 0xf2f2f2f2U, 0xcfcfcfcfU, 0xcecececeU, - 0xf0f0f0f0U, 0xb4b4b4b4U, 0xe6e6e6e6U, 0x73737373U, - 0x96969696U, 0xacacacacU, 0x74747474U, 0x22222222U, - 0xe7e7e7e7U, 0xadadadadU, 0x35353535U, 0x85858585U, - 0xe2e2e2e2U, 0xf9f9f9f9U, 0x37373737U, 0xe8e8e8e8U, - 0x1c1c1c1cU, 0x75757575U, 0xdfdfdfdfU, 0x6e6e6e6eU, - 0x47474747U, 0xf1f1f1f1U, 0x1a1a1a1aU, 0x71717171U, - 0x1d1d1d1dU, 0x29292929U, 0xc5c5c5c5U, 0x89898989U, - 0x6f6f6f6fU, 0xb7b7b7b7U, 0x62626262U, 0x0e0e0e0eU, - 0xaaaaaaaaU, 0x18181818U, 0xbebebebeU, 0x1b1b1b1bU, - 0xfcfcfcfcU, 0x56565656U, 0x3e3e3e3eU, 0x4b4b4b4bU, - 0xc6c6c6c6U, 0xd2d2d2d2U, 0x79797979U, 0x20202020U, - 0x9a9a9a9aU, 0xdbdbdbdbU, 0xc0c0c0c0U, 0xfefefefeU, - 0x78787878U, 0xcdcdcdcdU, 0x5a5a5a5aU, 0xf4f4f4f4U, - 0x1f1f1f1fU, 0xddddddddU, 0xa8a8a8a8U, 0x33333333U, - 0x88888888U, 0x07070707U, 0xc7c7c7c7U, 0x31313131U, - 0xb1b1b1b1U, 0x12121212U, 0x10101010U, 0x59595959U, - 0x27272727U, 0x80808080U, 0xececececU, 0x5f5f5f5fU, - 0x60606060U, 0x51515151U, 0x7f7f7f7fU, 0xa9a9a9a9U, - 0x19191919U, 0xb5b5b5b5U, 0x4a4a4a4aU, 0x0d0d0d0dU, - 0x2d2d2d2dU, 0xe5e5e5e5U, 0x7a7a7a7aU, 0x9f9f9f9fU, - 0x93939393U, 0xc9c9c9c9U, 0x9c9c9c9cU, 0xefefefefU, - 0xa0a0a0a0U, 0xe0e0e0e0U, 0x3b3b3b3bU, 0x4d4d4d4dU, - 0xaeaeaeaeU, 0x2a2a2a2aU, 0xf5f5f5f5U, 0xb0b0b0b0U, - 0xc8c8c8c8U, 0xebebebebU, 0xbbbbbbbbU, 0x3c3c3c3cU, - 0x83838383U, 0x53535353U, 0x99999999U, 0x61616161U, - 0x17171717U, 0x2b2b2b2bU, 0x04040404U, 0x7e7e7e7eU, - 0xbabababaU, 0x77777777U, 0xd6d6d6d6U, 0x26262626U, - 0xe1e1e1e1U, 0x69696969U, 0x14141414U, 0x63636363U, - 0x55555555U, 0x21212121U, 0x0c0c0c0cU, 0x7d7d7d7dU, -}; - - -/* for 128-bit blocks, Rijndael never uses more than 10 rcon values */ -static const uint32 rcon[]= -{ - 0x01000000, 0x02000000, 0x04000000, 0x08000000, - 0x10000000, 0x20000000, 0x40000000, 0x80000000, - 0x1B000000, 0x36000000, -}; - -#if defined(_MSC_VER) && defined(__i386__) - -#define RJ_SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00) -#define GETuint32(p) RJ_SWAP(*((uint32 *)(p))) -#define PUTuint32(ct, st) { *((uint32 *)(ct)) = RJ_SWAP((st)); } - -#else - -#define GETuint32(pt) (((uint32)(pt)[0] << 24) ^ ((uint32)(pt)[1] << 16)\ - ^ ((uint32)(pt)[2] << 8) ^ ((uint32)(pt)[3])) -#define PUTuint32(ct, st) { (ct)[0] = (uint8)((st) >> 24); (ct)[1]\ -= (uint8)((st) >> 16); (ct)[2] = (uint8)((st) >> 8); (ct)[3] = (uint8)(st); } - -#endif /* defined(_MSC_VER) && defined(__i386__) */ - - -/* - Expand the cipher key into the encryption key schedule. - - RETURN - The number of rounds for the given cipher key size. -*/ - -int rijndaelKeySetupEnc(uint32 rk[/*4*(Nr + 1)*/], const uint8 cipherKey[], - int keyBits) -{ - int i = 0; - uint32 temp; - - rk[0] = GETuint32(cipherKey ); - rk[1] = GETuint32(cipherKey + 4); - rk[2] = GETuint32(cipherKey + 8); - rk[3] = GETuint32(cipherKey + 12); - if (keyBits == 128) - { - for (;;) - { - temp = rk[3]; - rk[4] = (rk[0] ^ - (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ - (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ - (Te4[(temp ) & 0xff] & 0x0000ff00) ^ - (Te4[(temp >> 24) ] & 0x000000ff) ^ - rcon[i]); - rk[5] = rk[1] ^ rk[4]; - rk[6] = rk[2] ^ rk[5]; - rk[7] = rk[3] ^ rk[6]; - if (++i == 10) - return 10; - rk += 4; - } - } - rk[4] = GETuint32(cipherKey + 16); - rk[5] = GETuint32(cipherKey + 20); - if (keyBits == 192) - { - for (;;) - { - temp = rk[ 5]; - rk[ 6] = (rk[ 0] ^ - (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ - (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ - (Te4[(temp ) & 0xff] & 0x0000ff00) ^ - (Te4[(temp >> 24) ] & 0x000000ff) ^ - rcon[i]); - rk[ 7] = rk[ 1] ^ rk[ 6]; - rk[ 8] = rk[ 2] ^ rk[ 7]; - rk[ 9] = rk[ 3] ^ rk[ 8]; - if (++i == 8) - { - return 12; - } - rk[10] = rk[ 4] ^ rk[ 9]; - rk[11] = rk[ 5] ^ rk[10]; - rk += 6; - } - } - rk[6] = GETuint32(cipherKey + 24); - rk[7] = GETuint32(cipherKey + 28); - if (keyBits == 256) - { - for (;;) - { - temp = rk[ 7]; - rk[ 8] = (rk[ 0] ^ - (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ - (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ - (Te4[(temp ) & 0xff] & 0x0000ff00) ^ - (Te4[(temp >> 24) ] & 0x000000ff) ^ - rcon[i]); - rk[ 9] = rk[ 1] ^ rk[ 8]; - rk[10] = rk[ 2] ^ rk[ 9]; - rk[11] = rk[ 3] ^ rk[10]; - if (++i == 7) - { - return 14; - } - temp = rk[11]; - rk[12] = (rk[ 4] ^ - (Te4[(temp >> 24) ] & 0xff000000) ^ - (Te4[(temp >> 16) & 0xff] & 0x00ff0000) ^ - (Te4[(temp >> 8) & 0xff] & 0x0000ff00) ^ - (Te4[(temp ) & 0xff] & 0x000000ff)); - rk[13] = rk[ 5] ^ rk[12]; - rk[14] = rk[ 6] ^ rk[13]; - rk[15] = rk[ 7] ^ rk[14]; - rk += 8; - } - } - return 0; -} - - -/* - Expand the cipher key into the decryption key schedule. - - RETURN - The number of rounds for the given cipher key size. -*/ - -int rijndaelKeySetupDec(uint32 rk[/*4*(Nr + 1)*/], const uint8 cipherKey[], - int keyBits) -{ - int nr, i, j; - uint32 temp; - - /* expand the cipher key: */ - nr = rijndaelKeySetupEnc(rk, cipherKey, keyBits); - /* invert the order of the round keys: */ - for (i = 0, j = 4*nr; i < j; i += 4, j -= 4) - { - temp = rk[i ]; rk[i ] = rk[j ]; rk[j ] = temp; - temp = rk[i + 1]; rk[i + 1] = rk[j + 1]; rk[j + 1] = temp; - temp = rk[i + 2]; rk[i + 2] = rk[j + 2]; rk[j + 2] = temp; - temp = rk[i + 3]; rk[i + 3] = rk[j + 3]; rk[j + 3] = temp; - } - /* - Apply the inverse MixColumn transform to all round keys but the first - and the last: - */ - for (i = 1; i < nr; i++) - { - rk += 4; - - rk[0]= ( - Td0[Te4[(rk[0] >> 24) ] & 0xff] ^ - Td1[Te4[(rk[0] >> 16) & 0xff] & 0xff] ^ - Td2[Te4[(rk[0] >> 8) & 0xff] & 0xff] ^ - Td3[Te4[(rk[0] ) & 0xff] & 0xff]); - - rk[1]= (Td0[Te4[(rk[1] >> 24) ] & 0xff] ^ - Td1[Te4[(rk[1] >> 16) & 0xff] & 0xff] ^ - Td2[Te4[(rk[1] >> 8) & 0xff] & 0xff] ^ - Td3[Te4[(rk[1] ) & 0xff] & 0xff]); - - rk[2]= (Td0[Te4[(rk[2] >> 24) ] & 0xff] ^ - Td1[Te4[(rk[2] >> 16) & 0xff] & 0xff] ^ - Td2[Te4[(rk[2] >> 8) & 0xff] & 0xff] ^ - Td3[Te4[(rk[2] ) & 0xff] & 0xff]); - - rk[3]= (Td0[Te4[(rk[3] >> 24) ] & 0xff] ^ - Td1[Te4[(rk[3] >> 16) & 0xff] & 0xff] ^ - Td2[Te4[(rk[3] >> 8) & 0xff] & 0xff] ^ - Td3[Te4[(rk[3] ) & 0xff] & 0xff]); - } - return nr; -} - - -void rijndaelEncrypt(const uint32 rk[/*4*(Nr + 1)*/], int Nr, - const uint8 pt[16], uint8 ct[16]) -{ - uint32 s0, s1, s2, s3, t0, t1, t2, t3; -#ifndef FULL_UNROLL - int r; -#endif /* FULL_UNROLL */ - - /* map byte array block to cipher state and add initial round key: */ - s0 = GETuint32(pt ) ^ rk[0]; - s1 = GETuint32(pt + 4) ^ rk[1]; - s2 = GETuint32(pt + 8) ^ rk[2]; - s3 = GETuint32(pt + 12) ^ rk[3]; - -#ifdef FULL_UNROLL - /* round 1: */ - t0= (Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] - ^ Te3[s3 & 0xff] ^ rk[ 4]); - t1= (Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] - ^ Te3[s0 & 0xff] ^ rk[ 5]); - t2= (Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] - ^ Te3[s1 & 0xff] ^ rk[ 6]); - t3= (Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] - ^ Te3[s2 & 0xff] ^ rk[ 7]); - - /* round 2: */ - s0= (Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] - ^ Te3[t3 & 0xff] ^ rk[ 8]); - s1= (Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] - ^ Te3[t0 & 0xff] ^ rk[ 9]); - s2= (Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] - ^ Te3[t1 & 0xff] ^ rk[10]); - s3= (Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] - ^ Te3[t2 & 0xff] ^ rk[11]); - - /* round 3: */ - t0= (Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] - ^ Te3[s3 & 0xff] ^ rk[12]); - t1= (Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] - ^ Te3[s0 & 0xff] ^ rk[13]); - t2= (Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] - ^ Te3[s1 & 0xff] ^ rk[14]); - t3= (Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] - ^ Te3[s2 & 0xff] ^ rk[15]); - - /* round 4: */ - s0= (Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] - ^ Te3[t3 & 0xff] ^ rk[16]); - s1= (Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] - ^ Te3[t0 & 0xff] ^ rk[17]); - s2= (Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] - ^ Te3[t1 & 0xff] ^ rk[18]); - s3= (Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] - ^ Te3[t2 & 0xff] ^ rk[19]); - - /* round 5: */ - t0= (Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] - ^ Te3[s3 & 0xff] ^ rk[20]); - t1= (Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] - ^ Te3[s0 & 0xff] ^ rk[21]); - t2= (Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] - ^ Te3[s1 & 0xff] ^ rk[22]); - t3= (Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] - ^ Te3[s2 & 0xff] ^ rk[23]); - - /* round 6: */ - s0= (Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] - ^ Te3[t3 & 0xff] ^ rk[24]); - s1= (Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] - ^ Te3[t0 & 0xff] ^ rk[25]); - s2= (Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] - ^ Te3[t1 & 0xff] ^ rk[26]); - s3= (Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] - ^ Te3[t2 & 0xff] ^ rk[27]); - - /* round 7: */ - t0= (Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] - ^ Te3[s3 & 0xff] ^ rk[28]); - t1= (Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] - ^ Te3[s0 & 0xff] ^ rk[29]); - t2= (Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] - ^ Te3[s1 & 0xff] ^ rk[30]); - t3= (Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] - ^ Te3[s2 & 0xff] ^ rk[31]); - - /* round 8: */ - s0= (Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] - ^ Te3[t3 & 0xff] ^ rk[32]); - s1= (Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] - ^ Te3[t0 & 0xff] ^ rk[33]); - s2= (Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] - ^ Te3[t1 & 0xff] ^ rk[34]); - s3= (Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] - ^ Te3[t2 & 0xff] ^ rk[35]); - - /* round 9: */ - t0= (Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] - ^ Te3[s3 & 0xff] ^ rk[36]); - t1= (Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] - ^ Te3[s0 & 0xff] ^ rk[37]); - t2= (Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] - ^ Te3[s1 & 0xff] ^ rk[38]); - t3= (Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] - ^ Te3[s2 & 0xff] ^ rk[39]); - - if (Nr > 10) - { - /* round 10: */ - s0= (Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] - ^ Te3[t3 & 0xff] ^ rk[40]); - s1= (Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] - ^ Te3[t0 & 0xff] ^ rk[41]); - s2= (Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] - ^ Te3[t1 & 0xff] ^ rk[42]); - s3= (Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] - ^ Te3[t2 & 0xff] ^ rk[43]); - - /* round 11: */ - t0= (Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] - ^ Te3[s3 & 0xff] ^ rk[44]); - t1= (Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] - ^ Te3[s0 & 0xff] ^ rk[45]); - t2= (Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] - ^ Te3[s1 & 0xff] ^ rk[46]); - t3= (Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] - ^ Te3[s2 & 0xff] ^ rk[47]); - - if (Nr > 12) - { - /* round 12: */ - s0= (Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] - ^ Te3[t3 & 0xff] ^ rk[48]); - s1= (Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] - ^ Te3[t0 & 0xff] ^ rk[49]); - s2= (Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] - ^ Te3[t1 & 0xff] ^ rk[50]); - s3= (Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] - ^ Te3[t2 & 0xff] ^ rk[51]); - - /* round 13: */ - t0= (Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] - ^ Te3[s3 & 0xff] ^ rk[52]); - t1= (Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] - ^ Te3[s0 & 0xff] ^ rk[53]); - t2= (Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] - ^ Te3[s1 & 0xff] ^ rk[54]); - t3= (Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] - ^ Te3[s2 & 0xff] ^ rk[55]); - } - } - rk += Nr << 2; -#else /* !FULL_UNROLL */ - - /* Nr - 1 full rounds: */ - - r = Nr >> 1; - for (;;) - { - t0= (Te0[(s0 >> 24) ] ^ - Te1[(s1 >> 16) & 0xff] ^ - Te2[(s2 >> 8) & 0xff] ^ - Te3[(s3 ) & 0xff] ^ - rk[4]); - - t1= (Te0[(s1 >> 24) ] ^ - Te1[(s2 >> 16) & 0xff] ^ - Te2[(s3 >> 8) & 0xff] ^ - Te3[(s0 ) & 0xff] ^ - rk[5]); - - t2= (Te0[(s2 >> 24) ] ^ - Te1[(s3 >> 16) & 0xff] ^ - Te2[(s0 >> 8) & 0xff] ^ - Te3[(s1 ) & 0xff] ^ - rk[6]); - - t3= (Te0[(s3 >> 24) ] ^ - Te1[(s0 >> 16) & 0xff] ^ - Te2[(s1 >> 8) & 0xff] ^ - Te3[(s2 ) & 0xff] ^ - rk[7]); - - rk+= 8; - if (--r == 0) - break; - - s0= (Te0[(t0 >> 24) ] ^ - Te1[(t1 >> 16) & 0xff] ^ - Te2[(t2 >> 8) & 0xff] ^ - Te3[(t3 ) & 0xff] ^ - rk[0]); - - s1= (Te0[(t1 >> 24) ] ^ - Te1[(t2 >> 16) & 0xff] ^ - Te2[(t3 >> 8) & 0xff] ^ - Te3[(t0 ) & 0xff] ^ - rk[1]); - - s2= (Te0[(t2 >> 24) ] ^ - Te1[(t3 >> 16) & 0xff] ^ - Te2[(t0 >> 8) & 0xff] ^ - Te3[(t1 ) & 0xff] ^ - rk[2]); - - s3= (Te0[(t3 >> 24) ] ^ - Te1[(t0 >> 16) & 0xff] ^ - Te2[(t1 >> 8) & 0xff] ^ - Te3[(t2 ) & 0xff] ^ - rk[3]); - } -#endif /* FULL_UNROLL */ - - /* Apply last round and map cipher state to byte array block: */ - s0= ((Te4[(t0 >> 24) ] & 0xff000000) ^ - (Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^ - (Te4[(t2 >> 8) & 0xff] & 0x0000ff00) ^ - (Te4[(t3 ) & 0xff] & 0x000000ff) ^ - rk[0]); - PUTuint32(ct , s0); - - s1= ((Te4[(t1 >> 24) ] & 0xff000000) ^ - (Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^ - (Te4[(t3 >> 8) & 0xff] & 0x0000ff00) ^ - (Te4[(t0 ) & 0xff] & 0x000000ff) ^ - rk[1]); - PUTuint32(ct + 4, s1); - - s2= ((Te4[(t2 >> 24) ] & 0xff000000) ^ - (Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^ - (Te4[(t0 >> 8) & 0xff] & 0x0000ff00) ^ - (Te4[(t1 ) & 0xff] & 0x000000ff) ^ - rk[2]); - PUTuint32(ct + 8, s2); - - s3= ((Te4[(t3 >> 24) ] & 0xff000000) ^ - (Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^ - (Te4[(t1 >> 8) & 0xff] & 0x0000ff00) ^ - (Te4[(t2 ) & 0xff] & 0x000000ff) ^ - rk[3]); - PUTuint32(ct + 12, s3); -} - - -void rijndaelDecrypt(const uint32 rk[/*4*(Nr + 1)*/], int Nr, - const uint8 ct[16], uint8 pt[16]) -{ - uint32 s0, s1, s2, s3, t0, t1, t2, t3; -#ifndef FULL_UNROLL - int r; -#endif /* FULL_UNROLL */ - - /* Map byte array block to cipher state and add initial round key: */ - - s0 = GETuint32(ct ) ^ rk[0]; - s1 = GETuint32(ct + 4) ^ rk[1]; - s2 = GETuint32(ct + 8) ^ rk[2]; - s3 = GETuint32(ct + 12) ^ rk[3]; - -#ifdef FULL_UNROLL - /* round 1: */ - t0= (Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] - ^ Td3[s1 & 0xff] ^ rk[ 4]); - t1= (Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] - ^ Td3[s2 & 0xff] ^ rk[ 5]); - t2= (Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] - ^ Td3[s3 & 0xff] ^ rk[ 6]); - t3= (Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] - ^ Td3[s0 & 0xff] ^ rk[ 7]); - - /* round 2: */ - s0= (Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] - ^ Td3[t1 & 0xff] ^ rk[ 8]); - s1= (Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] - ^ Td3[t2 & 0xff] ^ rk[ 9]); - s2= (Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] - ^ Td3[t3 & 0xff] ^ rk[10]); - s3= (Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] - ^ Td3[t0 & 0xff] ^ rk[11]); - - /* round 3: */ - t0= (Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] - ^ Td3[s1 & 0xff] ^ rk[12]); - t1= (Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] - ^ Td3[s2 & 0xff] ^ rk[13]); - t2= (Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] - ^ Td3[s3 & 0xff] ^ rk[14]); - t3= (Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] - ^ Td3[s0 & 0xff] ^ rk[15]); - - /* round 4: */ - s0= (Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] - ^ Td3[t1 & 0xff] ^ rk[16]); - s1= (Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] - ^ Td3[t2 & 0xff] ^ rk[17]); - s2= (Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] - ^ Td3[t3 & 0xff] ^ rk[18]); - s3= (Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] - ^ Td3[t0 & 0xff] ^ rk[19]); - - /* round 5: */ - t0= (Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] - ^ Td3[s1 & 0xff] ^ rk[20]); - t1= (Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] - ^ Td3[s2 & 0xff] ^ rk[21]); - t2= (Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] - ^ Td3[s3 & 0xff] ^ rk[22]); - t3= (Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] - ^ Td3[s0 & 0xff] ^ rk[23]); - - /* round 6: */ - s0= (Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] - ^ Td3[t1 & 0xff] ^ rk[24]); - s1= (Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] - ^ Td3[t2 & 0xff] ^ rk[25]); - s2= (Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] - ^ Td3[t3 & 0xff] ^ rk[26]); - s3= (Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] - ^ Td3[t0 & 0xff] ^ rk[27]); - - /* round 7: */ - t0= (Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] - ^ Td3[s1 & 0xff] ^ rk[28]); - t1= (Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] - ^ Td3[s2 & 0xff] ^ rk[29]); - t2= (Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] - ^ Td3[s3 & 0xff] ^ rk[30]); - t3= (Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] - ^ Td3[s0 & 0xff] ^ rk[31]); - - /* round 8: */ - s0= (Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] - ^ Td3[t1 & 0xff] ^ rk[32]); - s1= (Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] - ^ Td3[t2 & 0xff] ^ rk[33]); - s2= (Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] - ^ Td3[t3 & 0xff] ^ rk[34]); - s3= (Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] - ^ Td3[t0 & 0xff] ^ rk[35]); - - /* round 9: */ - t0= (Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] - ^ Td3[s1 & 0xff] ^ rk[36]); - t1= (Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] - ^ Td3[s2 & 0xff] ^ rk[37]); - t2= (Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] - ^ Td3[s3 & 0xff] ^ rk[38]); - t3= (Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] - ^ Td3[s0 & 0xff] ^ rk[39]); - - if (Nr > 10) - { - /* round 10: */ - s0= (Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] - ^ Td3[t1 & 0xff] ^ rk[40]); - s1= (Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] - ^ Td3[t2 & 0xff] ^ rk[41]); - s2= (Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] - ^ Td3[t3 & 0xff] ^ rk[42]); - s3= (Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] - ^ Td3[t0 & 0xff] ^ rk[43]); - - /* round 11: */ - t0= (Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] - ^ Td3[s1 & 0xff] ^ rk[44]); - t1= (Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] - ^ Td3[s2 & 0xff] ^ rk[45]); - t2= (Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] - ^ Td3[s3 & 0xff] ^ rk[46]); - t3= (Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] - ^ Td3[s0 & 0xff] ^ rk[47]); - - if (Nr > 12) - { - /* round 12: */ - s0= (Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] - ^ Td3[t1 & 0xff] ^ rk[48]); - s1= (Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] - ^ Td3[t2 & 0xff] ^ rk[49]); - s2= (Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] - ^ Td3[t3 & 0xff] ^ rk[50]); - s3= (Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] - ^ Td3[t0 & 0xff] ^ rk[51]); - - /* round 13: */ - t0= (Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] - ^ Td3[s1 & 0xff] ^ rk[52]); - t1= (Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] - ^ Td3[s2 & 0xff] ^ rk[53]); - t2= (Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] - ^ Td3[s3 & 0xff] ^ rk[54]); - t3= (Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] - ^ Td3[s0 & 0xff] ^ rk[55]); - } - } - rk += Nr << 2; -#else /* !FULL_UNROLL */ - - /* Nr - 1 full rounds: */ - r= (Nr >> 1); - for (;;) - { - t0= (Td0[(s0 >> 24) ] ^ - Td1[(s3 >> 16) & 0xff] ^ - Td2[(s2 >> 8) & 0xff] ^ - Td3[(s1 ) & 0xff] ^ - rk[4]); - - t1= (Td0[(s1 >> 24) ] ^ - Td1[(s0 >> 16) & 0xff] ^ - Td2[(s3 >> 8) & 0xff] ^ - Td3[(s2 ) & 0xff] ^ - rk[5]); - - t2= (Td0[(s2 >> 24) ] ^ - Td1[(s1 >> 16) & 0xff] ^ - Td2[(s0 >> 8) & 0xff] ^ - Td3[(s3 ) & 0xff] ^ - rk[6]); - - t3= (Td0[(s3 >> 24) ] ^ - Td1[(s2 >> 16) & 0xff] ^ - Td2[(s1 >> 8) & 0xff] ^ - Td3[(s0 ) & 0xff] ^ - rk[7]); - - rk+= 8; - if (--r == 0) - break; - - s0= (Td0[(t0 >> 24) ] ^ - Td1[(t3 >> 16) & 0xff] ^ - Td2[(t2 >> 8) & 0xff] ^ - Td3[(t1 ) & 0xff] ^ - rk[0]); - - s1= (Td0[(t1 >> 24) ] ^ - Td1[(t0 >> 16) & 0xff] ^ - Td2[(t3 >> 8) & 0xff] ^ - Td3[(t2 ) & 0xff] ^ - rk[1]); - - s2= (Td0[(t2 >> 24) ] ^ - Td1[(t1 >> 16) & 0xff] ^ - Td2[(t0 >> 8) & 0xff] ^ - Td3[(t3 ) & 0xff] ^ - rk[2]); - - s3= (Td0[(t3 >> 24) ] ^ - Td1[(t2 >> 16) & 0xff] ^ - Td2[(t1 >> 8) & 0xff] ^ - Td3[(t0 ) & 0xff] ^ - rk[3]); - } - -#endif /* FULL_UNROLL */ - - /* Apply last round and map cipher state to byte array block: */ - - s0= ((Td4[(t0 >> 24) ] & 0xff000000) ^ - (Td4[(t3 >> 16) & 0xff] & 0x00ff0000) ^ - (Td4[(t2 >> 8) & 0xff] & 0x0000ff00) ^ - (Td4[(t1 ) & 0xff] & 0x000000ff) ^ - rk[0]); - PUTuint32(pt , s0); - - s1= ((Td4[(t1 >> 24) ] & 0xff000000) ^ - (Td4[(t0 >> 16) & 0xff] & 0x00ff0000) ^ - (Td4[(t3 >> 8) & 0xff] & 0x0000ff00) ^ - (Td4[(t2 ) & 0xff] & 0x000000ff) ^ - rk[1]); - PUTuint32(pt + 4, s1); - - s2= ((Td4[(t2 >> 24) ] & 0xff000000) ^ - (Td4[(t1 >> 16) & 0xff] & 0x00ff0000) ^ - (Td4[(t0 >> 8) & 0xff] & 0x0000ff00) ^ - (Td4[(t3 ) & 0xff] & 0x000000ff) ^ - rk[2]); - PUTuint32(pt + 8, s2); - - s3= ((Td4[(t3 >> 24) ] & 0xff000000) ^ - (Td4[(t2 >> 16) & 0xff] & 0x00ff0000) ^ - (Td4[(t1 >> 8) & 0xff] & 0x0000ff00) ^ - (Td4[(t0 ) & 0xff] & 0x000000ff) ^ - rk[3]); - PUTuint32(pt + 12, s3); -} diff --git a/deps/mysqllite/mysys/sha1.c b/deps/mysqllite/mysys/sha1.c deleted file mode 100644 index e5b33a9ad13005..00000000000000 --- a/deps/mysqllite/mysys/sha1.c +++ /dev/null @@ -1,422 +0,0 @@ -/* Copyright (c) 2002, 2004, 2006 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - Original Source from: http://www.faqs.org/rfcs/rfc3174.html - - Copyright (C) The Internet Society (2001). All Rights Reserved. - - This document and translations of it may be copied and furnished to - others, and derivative works that comment on or otherwise explain it - or assist in its implementation may be prepared, copied, published - and distributed, in whole or in part, without restriction of any - kind, provided that the above copyright notice and this paragraph are - included on all such copies and derivative works. However, this - document itself may not be modified in any way, such as by removing - the copyright notice or references to the Internet Society or other - Internet organizations, except as needed for the purpose of - developing Internet standards in which case the procedures for - copyrights defined in the Internet Standards process must be - followed, or as required to translate it into languages other than - English. - - The limited permissions granted above are perpetual and will not be - revoked by the Internet Society or its successors or assigns. - - This document and the information contained herein is provided on an - "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING - TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION - HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF - MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - - Acknowledgement - Funding for the RFC Editor function is currently provided by the - Internet Society. - - DESCRIPTION - This file implements the Secure Hashing Algorithm 1 as - defined in FIPS PUB 180-1 published April 17, 1995. - - The SHA-1, produces a 160-bit message digest for a given data - stream. It should take about 2**n steps to find a message with the - same digest as a given message and 2**(n/2) to find any two - messages with the same digest, when n is the digest size in bits. - Therefore, this algorithm can serve as a means of providing a - "fingerprint" for a message. - - PORTABILITY ISSUES - SHA-1 is defined in terms of 32-bit "words". This code uses - (included via "sha1.h" to define 32 and 8 bit unsigned - integer types. If your C compiler does not support 32 bit unsigned - integers, this code is not appropriate. - - CAVEATS - SHA-1 is designed to work with messages less than 2^64 bits long. - Although SHA-1 allows a message digest to be generated for messages - of any number of bits less than 2^64, this implementation only - works with messages with a length that is a multiple of the size of - an 8-bit character. - - CHANGES - 2002 by Peter Zaitsev to - - fit to new prototypes according to MySQL standard - - Some optimizations - - All checking is now done in debug only mode - - More comments -*/ - -#include "my_global.h" -#include "m_string.h" -#include "sha1.h" - -/* - Define the SHA1 circular left shift macro -*/ - -#define SHA1CircularShift(bits,word) \ - (((word) << (bits)) | ((word) >> (32-(bits)))) - -/* Local Function Prototyptes */ -static void SHA1PadMessage(SHA1_CONTEXT*); -static void SHA1ProcessMessageBlock(SHA1_CONTEXT*); - - -/* - Initialize SHA1Context - - SYNOPSIS - mysql_sha1_reset() - context [in/out] The context to reset. - - DESCRIPTION - This function will initialize the SHA1Context in preparation - for computing a new SHA1 message digest. - - RETURN - SHA_SUCCESS ok - != SHA_SUCCESS sha Error Code. -*/ - - -const uint32 sha_const_key[5]= -{ - 0x67452301, - 0xEFCDAB89, - 0x98BADCFE, - 0x10325476, - 0xC3D2E1F0 -}; - - -int mysql_sha1_reset(SHA1_CONTEXT *context) -{ -#ifndef DBUG_OFF - if (!context) - return SHA_NULL; -#endif - - context->Length = 0; - context->Message_Block_Index = 0; - - context->Intermediate_Hash[0] = sha_const_key[0]; - context->Intermediate_Hash[1] = sha_const_key[1]; - context->Intermediate_Hash[2] = sha_const_key[2]; - context->Intermediate_Hash[3] = sha_const_key[3]; - context->Intermediate_Hash[4] = sha_const_key[4]; - - context->Computed = 0; - context->Corrupted = 0; - - return SHA_SUCCESS; -} - - -/* - Return the 160-bit message digest into the array provided by the caller - - SYNOPSIS - mysql_sha1_result() - context [in/out] The context to use to calculate the SHA-1 hash. - Message_Digest: [out] Where the digest is returned. - - DESCRIPTION - NOTE: The first octet of hash is stored in the 0th element, - the last octet of hash in the 19th element. - - RETURN - SHA_SUCCESS ok - != SHA_SUCCESS sha Error Code. -*/ - -int mysql_sha1_result(SHA1_CONTEXT *context, - uint8 Message_Digest[SHA1_HASH_SIZE]) -{ - int i; - -#ifndef DBUG_OFF - if (!context || !Message_Digest) - return SHA_NULL; - - if (context->Corrupted) - return context->Corrupted; -#endif - - if (!context->Computed) - { - SHA1PadMessage(context); - /* message may be sensitive, clear it out */ - bzero((char*) context->Message_Block,64); - context->Length = 0; /* and clear length */ - context->Computed = 1; - } - - for (i = 0; i < SHA1_HASH_SIZE; i++) - Message_Digest[i] = (int8)((context->Intermediate_Hash[i>>2] >> 8 - * ( 3 - ( i & 0x03 ) ))); - return SHA_SUCCESS; -} - - -/* - Accepts an array of octets as the next portion of the message. - - SYNOPSIS - mysql_sha1_input() - context [in/out] The SHA context to update - message_array An array of characters representing the next portion - of the message. - length The length of the message in message_array - - RETURN - SHA_SUCCESS ok - != SHA_SUCCESS sha Error Code. -*/ - -int mysql_sha1_input(SHA1_CONTEXT *context, const uint8 *message_array, - unsigned length) -{ - if (!length) - return SHA_SUCCESS; - -#ifndef DBUG_OFF - /* We assume client konows what it is doing in non-debug mode */ - if (!context || !message_array) - return SHA_NULL; - if (context->Computed) - return (context->Corrupted= SHA_STATE_ERROR); - if (context->Corrupted) - return context->Corrupted; -#endif - - while (length--) - { - context->Message_Block[context->Message_Block_Index++]= - (*message_array & 0xFF); - context->Length += 8; /* Length is in bits */ - -#ifndef DBUG_OFF - /* - Then we're not debugging we assume we never will get message longer - 2^64 bits. - */ - if (context->Length == 0) - return (context->Corrupted= 1); /* Message is too long */ -#endif - - if (context->Message_Block_Index == 64) - { - SHA1ProcessMessageBlock(context); - } - message_array++; - } - return SHA_SUCCESS; -} - - -/* - Process the next 512 bits of the message stored in the Message_Block array. - - SYNOPSIS - SHA1ProcessMessageBlock() - - DESCRIPTION - Many of the variable names in this code, especially the single - character names, were used because those were the names used in - the publication. -*/ - -/* Constants defined in SHA-1 */ -static const uint32 K[]= -{ - 0x5A827999, - 0x6ED9EBA1, - 0x8F1BBCDC, - 0xCA62C1D6 -}; - - -static void SHA1ProcessMessageBlock(SHA1_CONTEXT *context) -{ - int t; /* Loop counter */ - uint32 temp; /* Temporary word value */ - uint32 W[80]; /* Word sequence */ - uint32 A, B, C, D, E; /* Word buffers */ - int idx; - - /* - Initialize the first 16 words in the array W - */ - - for (t = 0; t < 16; t++) - { - idx=t*4; - W[t] = context->Message_Block[idx] << 24; - W[t] |= context->Message_Block[idx + 1] << 16; - W[t] |= context->Message_Block[idx + 2] << 8; - W[t] |= context->Message_Block[idx + 3]; - } - - - for (t = 16; t < 80; t++) - { - W[t] = SHA1CircularShift(1,W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]); - } - - A = context->Intermediate_Hash[0]; - B = context->Intermediate_Hash[1]; - C = context->Intermediate_Hash[2]; - D = context->Intermediate_Hash[3]; - E = context->Intermediate_Hash[4]; - - for (t = 0; t < 20; t++) - { - temp= SHA1CircularShift(5,A) + ((B & C) | ((~B) & D)) + E + W[t] + K[0]; - E = D; - D = C; - C = SHA1CircularShift(30,B); - B = A; - A = temp; - } - - for (t = 20; t < 40; t++) - { - temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[1]; - E = D; - D = C; - C = SHA1CircularShift(30,B); - B = A; - A = temp; - } - - for (t = 40; t < 60; t++) - { - temp= (SHA1CircularShift(5,A) + ((B & C) | (B & D) | (C & D)) + E + W[t] + - K[2]); - E = D; - D = C; - C = SHA1CircularShift(30,B); - B = A; - A = temp; - } - - for (t = 60; t < 80; t++) - { - temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[3]; - E = D; - D = C; - C = SHA1CircularShift(30,B); - B = A; - A = temp; - } - - context->Intermediate_Hash[0] += A; - context->Intermediate_Hash[1] += B; - context->Intermediate_Hash[2] += C; - context->Intermediate_Hash[3] += D; - context->Intermediate_Hash[4] += E; - - context->Message_Block_Index = 0; -} - - -/* - Pad message - - SYNOPSIS - SHA1PadMessage() - context: [in/out] The context to pad - - DESCRIPTION - According to the standard, the message must be padded to an even - 512 bits. The first padding bit must be a '1'. The last 64 bits - represent the length of the original message. All bits in between - should be 0. This function will pad the message according to - those rules by filling the Message_Block array accordingly. It - will also call the ProcessMessageBlock function provided - appropriately. When it returns, it can be assumed that the message - digest has been computed. - -*/ - -static void SHA1PadMessage(SHA1_CONTEXT *context) -{ - /* - Check to see if the current message block is too small to hold - the initial padding bits and length. If so, we will pad the - block, process it, and then continue padding into a second - block. - */ - - int i=context->Message_Block_Index; - - if (i > 55) - { - context->Message_Block[i++] = 0x80; - bzero((char*) &context->Message_Block[i], - sizeof(context->Message_Block[0])*(64-i)); - context->Message_Block_Index=64; - - /* This function sets context->Message_Block_Index to zero */ - SHA1ProcessMessageBlock(context); - - bzero((char*) &context->Message_Block[0], - sizeof(context->Message_Block[0])*56); - context->Message_Block_Index=56; - } - else - { - context->Message_Block[i++] = 0x80; - bzero((char*) &context->Message_Block[i], - sizeof(context->Message_Block[0])*(56-i)); - context->Message_Block_Index=56; - } - - /* - Store the message length as the last 8 octets - */ - - context->Message_Block[56] = (int8) (context->Length >> 56); - context->Message_Block[57] = (int8) (context->Length >> 48); - context->Message_Block[58] = (int8) (context->Length >> 40); - context->Message_Block[59] = (int8) (context->Length >> 32); - context->Message_Block[60] = (int8) (context->Length >> 24); - context->Message_Block[61] = (int8) (context->Length >> 16); - context->Message_Block[62] = (int8) (context->Length >> 8); - context->Message_Block[63] = (int8) (context->Length); - - SHA1ProcessMessageBlock(context); -} diff --git a/deps/mysqllite/mysys/stacktrace.c b/deps/mysqllite/mysys/stacktrace.c deleted file mode 100644 index 48cdaaa6c91b2b..00000000000000 --- a/deps/mysqllite/mysys/stacktrace.c +++ /dev/null @@ -1,714 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include - -#ifndef __WIN__ -#include -#include -#include -#ifdef HAVE_STACKTRACE -#include -#include - -#ifdef __linux__ -#include /* isprint */ -#include /* SYS_gettid */ -#endif - -#if HAVE_EXECINFO_H -#include -#endif - -#define PTR_SANE(p) ((p) && (char*)(p) >= heap_start && (char*)(p) <= heap_end) - -static char *heap_start; - -#ifdef HAVE_BSS_START -extern char *__bss_start; -#endif - -void my_init_stacktrace() -{ -#ifdef HAVE_BSS_START - heap_start = (char*) &__bss_start; -#endif -} - -#ifdef __linux__ - -static void print_buffer(char *buffer, size_t count) -{ - for (; count && *buffer; --count) - { - int c= (int) *buffer++; - fputc(isprint(c) ? c : ' ', stderr); - } -} - -/** - Access the pages of this process through /proc/self/task//mem - in order to safely print the contents of a memory address range. - - @param addr The address at the start of the memory region. - @param max_len The length of the memory region. - - @return Zero on success. -*/ -static int safe_print_str(const char *addr, int max_len) -{ - int fd; - pid_t tid; - off_t offset; - ssize_t nbytes= 0; - size_t total, count; - char buf[256]; - - tid= (pid_t) syscall(SYS_gettid); - - sprintf(buf, "/proc/self/task/%d/mem", tid); - - if ((fd= open(buf, O_RDONLY)) < 0) - return -1; - - /* Ensure that off_t can hold a pointer. */ - compile_time_assert(sizeof(off_t) >= sizeof(intptr)); - - total= max_len; - offset= (intptr) addr; - - /* Read up to the maximum number of bytes. */ - while (total) - { - count= min(sizeof(buf), total); - - if ((nbytes= pread(fd, buf, count, offset)) < 0) - { - /* Just in case... */ - if (errno == EINTR) - continue; - else - break; - } - - /* Advance offset into memory. */ - total-= nbytes; - offset+= nbytes; - addr+= nbytes; - - /* Output the printable characters. */ - print_buffer(buf, nbytes); - - /* Break if less than requested... */ - if ((count - nbytes)) - break; - } - - /* Output a new line if something was printed. */ - if (total != (size_t) max_len) - fputc('\n', stderr); - - if (nbytes == -1) - fprintf(stderr, "Can't read from address %p: %m.\n", addr); - - close(fd); - - return 0; -} - -#endif - -void my_safe_print_str(const char* val, int max_len) -{ - char *heap_end; - -#ifdef __linux__ - if (!safe_print_str(val, max_len)) - return; -#endif - - heap_end= (char*) sbrk(0); - - if (!PTR_SANE(val)) - { - fprintf(stderr, "is an invalid pointer\n"); - return; - } - - for (; max_len && PTR_SANE(val) && *val; --max_len) - fputc(*val++, stderr); - fputc('\n', stderr); -} - -#if defined(HAVE_PRINTSTACK) - -/* Use Solaris' symbolic stack trace routine. */ -#include - -void my_print_stacktrace(uchar* stack_bottom __attribute__((unused)), - ulong thread_stack __attribute__((unused))) -{ - if (printstack(fileno(stderr)) == -1) - fprintf(stderr, "Error when traversing the stack, stack appears corrupt.\n"); - else - fprintf(stderr, - "Please read " - "http://dev.mysql.com/doc/refman/5.1/en/resolve-stack-dump.html\n" - "and follow instructions on how to resolve the stack trace.\n" - "Resolved stack trace is much more helpful in diagnosing the\n" - "problem, so please do resolve it\n"); -} - -#elif HAVE_BACKTRACE && (HAVE_BACKTRACE_SYMBOLS || HAVE_BACKTRACE_SYMBOLS_FD) - -#if BACKTRACE_DEMANGLE - -char __attribute__ ((weak)) * -my_demangle(const char *mangled_name __attribute__((unused)), - int *status __attribute__((unused))) -{ - return NULL; -} - -static void my_demangle_symbols(char **addrs, int n) -{ - int status, i; - char *begin, *end, *demangled; - - for (i= 0; i < n; i++) - { - demangled= NULL; - begin= strchr(addrs[i], '('); - end= begin ? strchr(begin, '+') : NULL; - - if (begin && end) - { - *begin++= *end++= '\0'; - demangled= my_demangle(begin, &status); - if (!demangled || status) - { - demangled= NULL; - begin[-1]= '('; - end[-1]= '+'; - } - } - - if (demangled) - fprintf(stderr, "%s(%s+%s\n", addrs[i], demangled, end); - else - fprintf(stderr, "%s\n", addrs[i]); - } -} - -#endif /* BACKTRACE_DEMANGLE */ - -void my_print_stacktrace(uchar* stack_bottom, ulong thread_stack) -{ - void *addrs[128]; - char **strings= NULL; - int n = backtrace(addrs, array_elements(addrs)); - fprintf(stderr, "stack_bottom = %p thread_stack 0x%lx\n", - stack_bottom, thread_stack); -#if BACKTRACE_DEMANGLE - if ((strings= backtrace_symbols(addrs, n))) - { - my_demangle_symbols(strings, n); - free(strings); - } -#endif -#if HAVE_BACKTRACE_SYMBOLS_FD - if (!strings) - { - backtrace_symbols_fd(addrs, n, fileno(stderr)); - } -#endif -} - -#elif defined(TARGET_OS_LINUX) - -#ifdef __i386__ -#define SIGRETURN_FRAME_OFFSET 17 -#endif - -#ifdef __x86_64__ -#define SIGRETURN_FRAME_OFFSET 23 -#endif - -#if defined(__alpha__) && defined(__GNUC__) -/* - The only way to backtrace without a symbol table on alpha - is to find stq fp,N(sp), and the first byte - of the instruction opcode will give us the value of N. From this - we can find where the old value of fp is stored -*/ - -#define MAX_INSTR_IN_FUNC 10000 - -inline uchar** find_prev_fp(uint32* pc, uchar** fp) -{ - int i; - for (i = 0; i < MAX_INSTR_IN_FUNC; ++i,--pc) - { - uchar* p = (uchar*)pc; - if (p[2] == 222 && p[3] == 35) - { - return (uchar**)((uchar*)fp - *(short int*)p); - } - } - return 0; -} - -inline uint32* find_prev_pc(uint32* pc, uchar** fp) -{ - int i; - for (i = 0; i < MAX_INSTR_IN_FUNC; ++i,--pc) - { - char* p = (char*)pc; - if (p[1] == 0 && p[2] == 94 && p[3] == -73) - { - uint32* prev_pc = (uint32*)*((fp+p[0]/sizeof(fp))); - return prev_pc; - } - } - return 0; -} -#endif /* defined(__alpha__) && defined(__GNUC__) */ - -void my_print_stacktrace(uchar* stack_bottom, ulong thread_stack) -{ - uchar** fp; - uint frame_count = 0, sigreturn_frame_count; -#if defined(__alpha__) && defined(__GNUC__) - uint32* pc; -#endif - LINT_INIT(fp); - - -#ifdef __i386__ - __asm __volatile__ ("movl %%ebp,%0" - :"=r"(fp) - :"r"(fp)); -#endif -#ifdef __x86_64__ - __asm __volatile__ ("movq %%rbp,%0" - :"=r"(fp) - :"r"(fp)); -#endif -#if defined(__alpha__) && defined(__GNUC__) - __asm __volatile__ ("mov $30,%0" - :"=r"(fp) - :"r"(fp)); -#endif - if (!fp) - { - fprintf(stderr, "frame pointer is NULL, did you compile with\n\ --fomit-frame-pointer? Aborting backtrace!\n"); - return; - } - - if (!stack_bottom || (uchar*) stack_bottom > (uchar*) &fp) - { - ulong tmp= min(0x10000,thread_stack); - /* Assume that the stack starts at the previous even 65K */ - stack_bottom= (uchar*) (((ulong) &fp + tmp) & - ~(ulong) 0xFFFF); - fprintf(stderr, "Cannot determine thread, fp=%p, backtrace may not be correct.\n", fp); - } - if (fp > (uchar**) stack_bottom || - fp < (uchar**) stack_bottom - thread_stack) - { - fprintf(stderr, "Bogus stack limit or frame pointer,\ - fp=%p, stack_bottom=%p, thread_stack=%ld, aborting backtrace.\n", - fp, stack_bottom, thread_stack); - return; - } - - fprintf(stderr, "Stack range sanity check OK, backtrace follows:\n"); -#if defined(__alpha__) && defined(__GNUC__) - fprintf(stderr, "Warning: Alpha stacks are difficult -\ - will be taking some wild guesses, stack trace may be incorrect or \ - terminate abruptly\n"); - /* On Alpha, we need to get pc */ - __asm __volatile__ ("bsr %0, do_next; do_next: " - :"=r"(pc) - :"r"(pc)); -#endif /* __alpha__ */ - - /* We are 1 frame above signal frame with NPTL and 2 frames above with LT */ - sigreturn_frame_count = thd_lib_detected == THD_LIB_LT ? 2 : 1; - - while (fp < (uchar**) stack_bottom) - { -#if defined(__i386__) || defined(__x86_64__) - uchar** new_fp = (uchar**)*fp; - fprintf(stderr, "%p\n", frame_count == sigreturn_frame_count ? - *(fp + SIGRETURN_FRAME_OFFSET) : *(fp + 1)); -#endif /* defined(__386__) || defined(__x86_64__) */ - -#if defined(__alpha__) && defined(__GNUC__) - uchar** new_fp = find_prev_fp(pc, fp); - if (frame_count == sigreturn_frame_count - 1) - { - new_fp += 90; - } - - if (fp && pc) - { - pc = find_prev_pc(pc, fp); - if (pc) - fprintf(stderr, "%p\n", pc); - else - { - fprintf(stderr, "Not smart enough to deal with the rest\ - of this stack\n"); - goto end; - } - } - else - { - fprintf(stderr, "Not smart enough to deal with the rest of this stack\n"); - goto end; - } -#endif /* defined(__alpha__) && defined(__GNUC__) */ - if (new_fp <= fp ) - { - fprintf(stderr, "New value of fp=%p failed sanity check,\ - terminating stack trace!\n", new_fp); - goto end; - } - fp = new_fp; - ++frame_count; - } - - fprintf(stderr, "Stack trace seems successful - bottom reached\n"); - -end: - fprintf(stderr, - "Please read http://dev.mysql.com/doc/refman/5.1/en/resolve-stack-dump.html\n" - "and follow instructions on how to resolve the stack trace.\n" - "Resolved stack trace is much more helpful in diagnosing the\n" - "problem, so please do resolve it\n"); -} -#endif /* TARGET_OS_LINUX */ -#endif /* HAVE_STACKTRACE */ - -/* Produce a core for the thread */ -void my_write_core(int sig) -{ -#ifdef HAVE_gcov - extern void __gcov_flush(void); -#endif - signal(sig, SIG_DFL); -#ifdef HAVE_gcov - /* - For GCOV build, crashing will prevent the writing of code coverage - information from this process, causing gcov output to be incomplete. - So we force the writing of coverage information here before terminating. - */ - __gcov_flush(); -#endif - pthread_kill(pthread_self(), sig); -#if defined(P_MYID) && !defined(SCO) - /* On Solaris, the above kill is not enough */ - sigsend(P_PID,P_MYID,sig); -#endif -} - -#else /* __WIN__*/ - -#include -#include -#if _MSC_VER -#pragma comment(lib, "dbghelp") -#endif - -static EXCEPTION_POINTERS *exception_ptrs; - -#define MODULE64_SIZE_WINXP 576 -#define STACKWALK_MAX_FRAMES 64 - -void my_init_stacktrace() -{ -} - - -void my_set_exception_pointers(EXCEPTION_POINTERS *ep) -{ - exception_ptrs = ep; -} - -/* - Appends directory to symbol path. -*/ -static void add_to_symbol_path(char *path, size_t path_buffer_size, - char *dir, size_t dir_buffer_size) -{ - strcat_s(dir, dir_buffer_size, ";"); - if (!strstr(path, dir)) - { - strcat_s(path, path_buffer_size, dir); - } -} - -/* - Get symbol path - semicolon-separated list of directories to search for debug - symbols. We expect PDB in the same directory as corresponding exe or dll, - so the path is build from directories of the loaded modules. If environment - variable _NT_SYMBOL_PATH is set, it's value appended to the symbol search path -*/ -static void get_symbol_path(char *path, size_t size) -{ - HANDLE hSnap; - char *envvar; - char *p; -#ifndef DBUG_OFF - static char pdb_debug_dir[MAX_PATH + 7]; -#endif - - path[0]= '\0'; - -#ifndef DBUG_OFF - /* - Add "debug" subdirectory of the application directory, sometimes PDB will - placed here by installation. - */ - GetModuleFileName(NULL, pdb_debug_dir, MAX_PATH); - p= strrchr(pdb_debug_dir, '\\'); - if(p) - { - *p= 0; - strcat_s(pdb_debug_dir, sizeof(pdb_debug_dir), "\\debug;"); - add_to_symbol_path(path, size, pdb_debug_dir, sizeof(pdb_debug_dir)); - } -#endif - - /* - Enumerate all modules, and add their directories to the path. - Avoid duplicate entries. - */ - hSnap= CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId()); - if (hSnap != INVALID_HANDLE_VALUE) - { - BOOL ret; - MODULEENTRY32 mod; - mod.dwSize= sizeof(MODULEENTRY32); - for (ret= Module32First(hSnap, &mod); ret; ret= Module32Next(hSnap, &mod)) - { - char *module_dir= mod.szExePath; - p= strrchr(module_dir,'\\'); - if (!p) - { - /* - Path separator was not found. Not known to happen, if ever happens, - will indicate current directory. - */ - module_dir[0]= '.'; - module_dir[1]= '\0'; - } - else - { - *p= '\0'; - } - add_to_symbol_path(path, size, module_dir,sizeof(mod.szExePath)); - } - CloseHandle(hSnap); - } - - - /* Add _NT_SYMBOL_PATH, if present. */ - envvar= getenv("_NT_SYMBOL_PATH"); - if(envvar) - { - strcat_s(path, size, envvar); - } -} - -#define MAX_SYMBOL_PATH 32768 - -/* Platform SDK in VS2003 does not have definition for SYMOPT_NO_PROMPTS*/ -#ifndef SYMOPT_NO_PROMPTS -#define SYMOPT_NO_PROMPTS 0 -#endif - -void my_print_stacktrace(uchar* unused1, ulong unused2) -{ - HANDLE hProcess= GetCurrentProcess(); - HANDLE hThread= GetCurrentThread(); - static IMAGEHLP_MODULE64 module= {sizeof(module)}; - static IMAGEHLP_SYMBOL64_PACKAGE package; - DWORD64 addr; - DWORD machine; - int i; - CONTEXT context; - STACKFRAME64 frame={0}; - static char symbol_path[MAX_SYMBOL_PATH]; - - if(!exception_ptrs) - return; - - /* Copy context, as stackwalking on original will unwind the stack */ - context = *(exception_ptrs->ContextRecord); - /*Initialize symbols.*/ - SymSetOptions(SYMOPT_LOAD_LINES|SYMOPT_NO_PROMPTS|SYMOPT_DEFERRED_LOADS|SYMOPT_DEBUG); - get_symbol_path(symbol_path, sizeof(symbol_path)); - SymInitialize(hProcess, symbol_path, TRUE); - - /*Prepare stackframe for the first StackWalk64 call*/ - frame.AddrFrame.Mode= frame.AddrPC.Mode= frame.AddrStack.Mode= AddrModeFlat; -#if (defined _M_IX86) - machine= IMAGE_FILE_MACHINE_I386; - frame.AddrFrame.Offset= context.Ebp; - frame.AddrPC.Offset= context.Eip; - frame.AddrStack.Offset= context.Esp; -#elif (defined _M_X64) - machine = IMAGE_FILE_MACHINE_AMD64; - frame.AddrFrame.Offset= context.Rbp; - frame.AddrPC.Offset= context.Rip; - frame.AddrStack.Offset= context.Rsp; -#else - /*There is currently no need to support IA64*/ -#pragma error ("unsupported architecture") -#endif - - package.sym.SizeOfStruct= sizeof(package.sym); - package.sym.MaxNameLength= sizeof(package.name); - - /*Walk the stack, output useful information*/ - for(i= 0; i< STACKWALK_MAX_FRAMES;i++) - { - DWORD64 function_offset= 0; - DWORD line_offset= 0; - IMAGEHLP_LINE64 line= {sizeof(line)}; - BOOL have_module= FALSE; - BOOL have_symbol= FALSE; - BOOL have_source= FALSE; - - if(!StackWalk64(machine, hProcess, hThread, &frame, &context, 0, 0, 0 ,0)) - break; - addr= frame.AddrPC.Offset; - - have_module= SymGetModuleInfo64(hProcess,addr,&module); -#ifdef _M_IX86 - if(!have_module) - { - /* - ModuleInfo structure has been "compatibly" extended in releases after XP, - and its size was increased. To make XP dbghelp.dll function - happy, pretend passing the old structure. - */ - module.SizeOfStruct= MODULE64_SIZE_WINXP; - have_module= SymGetModuleInfo64(hProcess, addr, &module); - } -#endif - - have_symbol= SymGetSymFromAddr64(hProcess, addr, &function_offset, - &(package.sym)); - have_source= SymGetLineFromAddr64(hProcess, addr, &line_offset, &line); - - fprintf(stderr, "%p ", addr); - if(have_module) - { - char *base_image_name= strrchr(module.ImageName, '\\'); - if(base_image_name) - base_image_name++; - else - base_image_name= module.ImageName; - fprintf(stderr, "%s!", base_image_name); - } - if(have_symbol) - fprintf(stderr, "%s()", package.sym.Name); - else if(have_module) - fprintf(stderr, "???"); - - if(have_source) - { - char *base_file_name= strrchr(line.FileName, '\\'); - if(base_file_name) - base_file_name++; - else - base_file_name= line.FileName; - fprintf(stderr,"[%s:%u]", base_file_name, line.LineNumber); - } - fprintf(stderr, "\n"); - } - fflush(stderr); -} - - -/* - Write dump. The dump is created in current directory, - file name is constructed from executable name plus - ".dmp" extension -*/ -void my_write_core(int unused) -{ - char path[MAX_PATH]; - char dump_fname[MAX_PATH]= "core.dmp"; - MINIDUMP_EXCEPTION_INFORMATION info; - HANDLE hFile; - - if(!exception_ptrs) - return; - - info.ExceptionPointers= exception_ptrs; - info.ClientPointers= FALSE; - info.ThreadId= GetCurrentThreadId(); - - if(GetModuleFileName(NULL, path, sizeof(path))) - { - _splitpath(path, NULL, NULL,dump_fname,NULL); - strncat(dump_fname, ".dmp", sizeof(dump_fname)); - } - - hFile= CreateFile(dump_fname, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, 0); - if(hFile) - { - /* Create minidump */ - if(MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), - hFile, MiniDumpNormal, &info, 0, 0)) - { - fprintf(stderr, "Minidump written to %s\n", - _fullpath(path, dump_fname, sizeof(path)) ? path : dump_fname); - } - else - { - fprintf(stderr,"MiniDumpWriteDump() failed, last error %u\n", - GetLastError()); - } - CloseHandle(hFile); - } - else - { - fprintf(stderr, "CreateFile(%s) failed, last error %u\n", dump_fname, - GetLastError()); - } - fflush(stderr); -} - - -void my_safe_print_str(const char *val, int len) -{ - __try - { - fprintf(stderr,"=%.*s\n", len, val); - } - __except(EXCEPTION_EXECUTE_HANDLER) - { - fprintf(stderr,"is an invalid string pointer\n"); - } -} -#endif /*__WIN__*/ diff --git a/deps/mysqllite/mysys/string.c b/deps/mysqllite/mysys/string.c deleted file mode 100644 index b1eded0664cd4c..00000000000000 --- a/deps/mysqllite/mysys/string.c +++ /dev/null @@ -1,182 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Code for handling strings with can grow dynamicly. - Copyright Monty Program KB. - By monty. -*/ - -#include "mysys_priv.h" -#include - -my_bool init_dynamic_string(DYNAMIC_STRING *str, const char *init_str, - size_t init_alloc, size_t alloc_increment) -{ - size_t length; - DBUG_ENTER("init_dynamic_string"); - - if (!alloc_increment) - alloc_increment=128; - length=1; - if (init_str && (length= strlen(init_str)+1) < init_alloc) - init_alloc=((length+alloc_increment-1)/alloc_increment)*alloc_increment; - if (!init_alloc) - init_alloc=alloc_increment; - - if (!(str->str=(char*) my_malloc(init_alloc,MYF(MY_WME)))) - DBUG_RETURN(TRUE); - str->length=length-1; - if (init_str) - memcpy(str->str,init_str,length); - str->max_length=init_alloc; - str->alloc_increment=alloc_increment; - DBUG_RETURN(FALSE); -} - - -my_bool dynstr_set(DYNAMIC_STRING *str, const char *init_str) -{ - uint length=0; - DBUG_ENTER("dynstr_set"); - - if (init_str && (length= (uint) strlen(init_str)+1) > str->max_length) - { - str->max_length=((length+str->alloc_increment-1)/str->alloc_increment)* - str->alloc_increment; - if (!str->max_length) - str->max_length=str->alloc_increment; - if (!(str->str=(char*) my_realloc(str->str,str->max_length,MYF(MY_WME)))) - DBUG_RETURN(TRUE); - } - if (init_str) - { - str->length=length-1; - memcpy(str->str,init_str,length); - } - else - str->length=0; - DBUG_RETURN(FALSE); -} - - -my_bool dynstr_realloc(DYNAMIC_STRING *str, size_t additional_size) -{ - DBUG_ENTER("dynstr_realloc"); - - if (!additional_size) DBUG_RETURN(FALSE); - if (str->length + additional_size > str->max_length) - { - str->max_length=((str->length + additional_size+str->alloc_increment-1)/ - str->alloc_increment)*str->alloc_increment; - if (!(str->str=(char*) my_realloc(str->str,str->max_length,MYF(MY_WME)))) - DBUG_RETURN(TRUE); - } - DBUG_RETURN(FALSE); -} - - -my_bool dynstr_append(DYNAMIC_STRING *str, const char *append) -{ - return dynstr_append_mem(str,append,(uint) strlen(append)); -} - - -my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append, - size_t length) -{ - char *new_ptr; - if (str->length+length >= str->max_length) - { - size_t new_length=(str->length+length+str->alloc_increment)/ - str->alloc_increment; - new_length*=str->alloc_increment; - if (!(new_ptr=(char*) my_realloc(str->str,new_length,MYF(MY_WME)))) - return TRUE; - str->str=new_ptr; - str->max_length=new_length; - } - memcpy(str->str + str->length,append,length); - str->length+=length; - str->str[str->length]=0; /* Safety for C programs */ - return FALSE; -} - - -my_bool dynstr_trunc(DYNAMIC_STRING *str, size_t n) -{ - str->length-=n; - str->str[str->length]= '\0'; - return FALSE; -} - -/* - Concatenates any number of strings, escapes any OS quote in the result then - surround the whole affair in another set of quotes which is finally appended - to specified DYNAMIC_STRING. This function is especially useful when - building strings to be executed with the system() function. - - @param str Dynamic String which will have addtional strings appended. - @param append String to be appended. - @param ... Optional. Additional string(s) to be appended. - - @note The final argument in the list must be NullS even if no additional - options are passed. - - @return True = Success. -*/ - -my_bool dynstr_append_os_quoted(DYNAMIC_STRING *str, const char *append, ...) -{ -#ifdef __WIN__ - const char *quote_str= "\""; - const uint quote_len= 1; -#else - const char *quote_str= "\'"; - const uint quote_len= 1; -#endif /* __WIN__ */ - my_bool ret= TRUE; - va_list dirty_text; - - ret&= dynstr_append_mem(str, quote_str, quote_len); /* Leading quote */ - va_start(dirty_text, append); - while (append != NullS) - { - const char *cur_pos= append; - const char *next_pos= cur_pos; - - /* Search for quote in each string and replace with escaped quote */ - while(*(next_pos= strcend(cur_pos, quote_str[0])) != '\0') - { - ret&= dynstr_append_mem(str, cur_pos, (uint) (next_pos - cur_pos)); - ret&= dynstr_append_mem(str ,"\\", 1); - ret&= dynstr_append_mem(str, quote_str, quote_len); - cur_pos= next_pos + 1; - } - ret&= dynstr_append_mem(str, cur_pos, (uint) (next_pos - cur_pos)); - append= va_arg(dirty_text, char *); - } - va_end(dirty_text); - ret&= dynstr_append_mem(str, quote_str, quote_len); /* Trailing quote */ - - return ret; -} - - -void dynstr_free(DYNAMIC_STRING *str) -{ - my_free(str->str); - str->str= NULL; -} diff --git a/deps/mysqllite/mysys/thr_alarm.c b/deps/mysqllite/mysys/thr_alarm.c deleted file mode 100644 index 2e427f96bdda0a..00000000000000 --- a/deps/mysqllite/mysys/thr_alarm.c +++ /dev/null @@ -1,972 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* To avoid problems with alarms in debug code, we disable DBUG here */ -#define FORCE_DBUG_OFF -#include "mysys_priv.h" -#include - -#if !defined(DONT_USE_THR_ALARM) -#include -#include -#include -#include -#include -#include -#include "thr_alarm.h" - -#ifdef HAVE_SYS_SELECT_H -#include /* AIX needs this for fd_set */ -#endif - -#ifndef ETIME -#define ETIME ETIMEDOUT -#endif - -uint thr_client_alarm; -static int alarm_aborted=1; /* No alarm thread */ -my_bool thr_alarm_inited= 0; -volatile my_bool alarm_thread_running= 0; -time_t next_alarm_expire_time= ~ (time_t) 0; -static sig_handler process_alarm_part2(int sig); - -#if !defined(__WIN__) - -static mysql_mutex_t LOCK_alarm; -static mysql_cond_t COND_alarm; -static sigset_t full_signal_set; -static QUEUE alarm_queue; -static uint max_used_alarms=0; -pthread_t alarm_thread; - -#ifdef USE_ALARM_THREAD -static void *alarm_handler(void *arg); -#define reschedule_alarms() mysql_cond_signal(&COND_alarm) -#else -#define reschedule_alarms() pthread_kill(alarm_thread,THR_SERVER_ALARM) -#endif - -static sig_handler thread_alarm(int sig __attribute__((unused))); - -static int compare_ulong(void *not_used __attribute__((unused)), - uchar *a_ptr,uchar* b_ptr) -{ - ulong a=*((ulong*) a_ptr),b= *((ulong*) b_ptr); - return (a < b) ? -1 : (a == b) ? 0 : 1; -} - -void init_thr_alarm(uint max_alarms) -{ - sigset_t s; - DBUG_ENTER("init_thr_alarm"); - alarm_aborted=0; - next_alarm_expire_time= ~ (time_t) 0; - init_queue(&alarm_queue,max_alarms+1,offsetof(ALARM,expire_time),0, - compare_ulong,NullS); - sigfillset(&full_signal_set); /* Neaded to block signals */ - mysql_mutex_init(key_LOCK_alarm, &LOCK_alarm, MY_MUTEX_INIT_FAST); - mysql_cond_init(key_COND_alarm, &COND_alarm, NULL); - if (thd_lib_detected == THD_LIB_LT) - thr_client_alarm= SIGALRM; - else - thr_client_alarm= SIGUSR1; -#ifndef USE_ALARM_THREAD - if (thd_lib_detected != THD_LIB_LT) -#endif - { - my_sigset(thr_client_alarm, thread_alarm); - } - sigemptyset(&s); - sigaddset(&s, THR_SERVER_ALARM); - alarm_thread=pthread_self(); -#if defined(USE_ALARM_THREAD) - { - pthread_attr_t thr_attr; - pthread_attr_init(&thr_attr); - pthread_attr_setscope(&thr_attr,PTHREAD_SCOPE_PROCESS); - pthread_attr_setdetachstate(&thr_attr,PTHREAD_CREATE_DETACHED); - pthread_attr_setstacksize(&thr_attr,8196); - mysql_thread_create(key_thread_alarm, - &alarm_thread, &thr_attr, alarm_handler, NULL); - pthread_attr_destroy(&thr_attr); - } -#elif defined(USE_ONE_SIGNAL_HAND) - pthread_sigmask(SIG_BLOCK, &s, NULL); /* used with sigwait() */ - if (thd_lib_detected == THD_LIB_LT) - { - my_sigset(thr_client_alarm, process_alarm); /* Linuxthreads */ - pthread_sigmask(SIG_UNBLOCK, &s, NULL); - } -#else - my_sigset(THR_SERVER_ALARM, process_alarm); - pthread_sigmask(SIG_UNBLOCK, &s, NULL); -#endif - DBUG_VOID_RETURN; -} - - -void resize_thr_alarm(uint max_alarms) -{ - mysql_mutex_lock(&LOCK_alarm); - /* - It's ok not to shrink the queue as there may be more pending alarms than - than max_alarms - */ - if (alarm_queue.elements < max_alarms) - resize_queue(&alarm_queue,max_alarms+1); - mysql_mutex_unlock(&LOCK_alarm); -} - - -/* - Request alarm after sec seconds. - - SYNOPSIS - thr_alarm() - alrm Pointer to alarm detection - alarm_data Structure to store in alarm queue - - NOTES - This function can't be called from the alarm-handling thread. - - RETURN VALUES - 0 ok - 1 If no more alarms are allowed (aborted by process) - - Stores in first argument a pointer to a non-zero int which is set to 0 - when the alarm has been given -*/ - -my_bool thr_alarm(thr_alarm_t *alrm, uint sec, ALARM *alarm_data) -{ - time_t now; -#ifndef USE_ONE_SIGNAL_HAND - sigset_t old_mask; -#endif - my_bool reschedule; - struct st_my_thread_var *current_my_thread_var= my_thread_var; - DBUG_ENTER("thr_alarm"); - DBUG_PRINT("enter",("thread: %s sec: %d",my_thread_name(),sec)); - - now= my_time(0); -#ifndef USE_ONE_SIGNAL_HAND - pthread_sigmask(SIG_BLOCK,&full_signal_set,&old_mask); -#endif - mysql_mutex_lock(&LOCK_alarm); /* Lock from threads & alarms */ - if (alarm_aborted > 0) - { /* No signal thread */ - DBUG_PRINT("info", ("alarm aborted")); - *alrm= 0; /* No alarm */ - mysql_mutex_unlock(&LOCK_alarm); -#ifndef USE_ONE_SIGNAL_HAND - pthread_sigmask(SIG_SETMASK,&old_mask,NULL); -#endif - DBUG_RETURN(1); - } - if (alarm_aborted < 0) - sec= 1; /* Abort mode */ - - if (alarm_queue.elements >= max_used_alarms) - { - if (alarm_queue.elements == alarm_queue.max_elements) - { - DBUG_PRINT("info", ("alarm queue full")); - fprintf(stderr,"Warning: thr_alarm queue is full\n"); - *alrm= 0; /* No alarm */ - mysql_mutex_unlock(&LOCK_alarm); -#ifndef USE_ONE_SIGNAL_HAND - pthread_sigmask(SIG_SETMASK,&old_mask,NULL); -#endif - DBUG_RETURN(1); - } - max_used_alarms=alarm_queue.elements+1; - } - reschedule= (ulong) next_alarm_expire_time > (ulong) now + sec; - if (!alarm_data) - { - if (!(alarm_data=(ALARM*) my_malloc(sizeof(ALARM),MYF(MY_WME)))) - { - DBUG_PRINT("info", ("failed my_malloc()")); - *alrm= 0; /* No alarm */ - mysql_mutex_unlock(&LOCK_alarm); -#ifndef USE_ONE_SIGNAL_HAND - pthread_sigmask(SIG_SETMASK,&old_mask,NULL); -#endif - DBUG_RETURN(1); - } - alarm_data->malloced=1; - } - else - alarm_data->malloced=0; - alarm_data->expire_time=now+sec; - alarm_data->alarmed=0; - alarm_data->thread= current_my_thread_var->pthread_self; - alarm_data->thread_id= current_my_thread_var->id; - queue_insert(&alarm_queue,(uchar*) alarm_data); - - /* Reschedule alarm if the current one has more than sec left */ - if (reschedule) - { - DBUG_PRINT("info", ("reschedule")); - if (pthread_equal(pthread_self(),alarm_thread)) - { - alarm(sec); /* purecov: inspected */ - next_alarm_expire_time= now + sec; - } - else - reschedule_alarms(); /* Reschedule alarms */ - } - mysql_mutex_unlock(&LOCK_alarm); -#ifndef USE_ONE_SIGNAL_HAND - pthread_sigmask(SIG_SETMASK,&old_mask,NULL); -#endif - (*alrm)= &alarm_data->alarmed; - DBUG_RETURN(0); -} - - -/* - Remove alarm from list of alarms -*/ - -void thr_end_alarm(thr_alarm_t *alarmed) -{ - ALARM *alarm_data; -#ifndef USE_ONE_SIGNAL_HAND - sigset_t old_mask; -#endif - uint i, found=0; - DBUG_ENTER("thr_end_alarm"); - -#ifndef USE_ONE_SIGNAL_HAND - pthread_sigmask(SIG_BLOCK,&full_signal_set,&old_mask); -#endif - mysql_mutex_lock(&LOCK_alarm); - - alarm_data= (ALARM*) ((uchar*) *alarmed - offsetof(ALARM,alarmed)); - for (i=0 ; i < alarm_queue.elements ; i++) - { - if ((ALARM*) queue_element(&alarm_queue,i) == alarm_data) - { - queue_remove(&alarm_queue,i),MYF(0); - if (alarm_data->malloced) - my_free(alarm_data); - found++; -#ifdef DBUG_OFF - break; -#endif - } - } - DBUG_ASSERT(!*alarmed || found == 1); - if (!found) - { - if (*alarmed) - fprintf(stderr,"Warning: Didn't find alarm 0x%lx in queue of %d alarms\n", - (long) *alarmed, alarm_queue.elements); - DBUG_PRINT("warning",("Didn't find alarm 0x%lx in queue\n", - (long) *alarmed)); - } - mysql_mutex_unlock(&LOCK_alarm); -#ifndef USE_ONE_SIGNAL_HAND - pthread_sigmask(SIG_SETMASK,&old_mask,NULL); -#endif - DBUG_VOID_RETURN; -} - -/* - Come here when some alarm in queue is due. - Mark all alarms with are finnished in list. - Shedule alarms to be sent again after 1-10 sec (many alarms at once) - If alarm_aborted is set then all alarms are given and resent - every second. -*/ - -sig_handler process_alarm(int sig __attribute__((unused))) -{ - sigset_t old_mask; -/* - This must be first as we can't call DBUG inside an alarm for a normal thread -*/ - - if (thd_lib_detected == THD_LIB_LT && - !pthread_equal(pthread_self(),alarm_thread)) - { -#if defined(MAIN) && !defined(__bsdi__) - printf("thread_alarm in process_alarm\n"); fflush(stdout); -#endif -#ifdef SIGNAL_HANDLER_RESET_ON_DELIVERY - my_sigset(thr_client_alarm, process_alarm); /* int. thread system calls */ -#endif - return; - } - - /* - We have to do do the handling of the alarm in a sub function, - because otherwise we would get problems with two threads calling - DBUG_... functions at the same time (as two threads may call - process_alarm() at the same time - */ - -#ifndef USE_ALARM_THREAD - pthread_sigmask(SIG_SETMASK,&full_signal_set,&old_mask); - mysql_mutex_lock(&LOCK_alarm); -#endif - process_alarm_part2(sig); -#ifndef USE_ALARM_THREAD -#if defined(SIGNAL_HANDLER_RESET_ON_DELIVERY) && !defined(USE_ONE_SIGNAL_HAND) - my_sigset(THR_SERVER_ALARM,process_alarm); -#endif - mysql_mutex_unlock(&LOCK_alarm); - pthread_sigmask(SIG_SETMASK,&old_mask,NULL); -#endif - return; -} - - -static sig_handler process_alarm_part2(int sig __attribute__((unused))) -{ - ALARM *alarm_data; - DBUG_ENTER("process_alarm"); - DBUG_PRINT("info",("sig: %d active alarms: %d",sig,alarm_queue.elements)); - -#if defined(MAIN) && !defined(__bsdi__) - printf("process_alarm\n"); fflush(stdout); -#endif - if (alarm_queue.elements) - { - if (alarm_aborted) - { - uint i; - for (i=0 ; i < alarm_queue.elements ;) - { - alarm_data=(ALARM*) queue_element(&alarm_queue,i); - alarm_data->alarmed=1; /* Info to thread */ - if (pthread_equal(alarm_data->thread,alarm_thread) || - pthread_kill(alarm_data->thread, thr_client_alarm)) - { -#ifdef MAIN - printf("Warning: pthread_kill couldn't find thread!!!\n"); -#endif - queue_remove(&alarm_queue,i); /* No thread. Remove alarm */ - } - else - i++; /* Signal next thread */ - } -#ifndef USE_ALARM_THREAD - if (alarm_queue.elements) - alarm(1); /* Signal soon again */ -#endif - } - else - { - ulong now=(ulong) my_time(0); - ulong next=now+10-(now%10); - while ((alarm_data=(ALARM*) queue_top(&alarm_queue))->expire_time <= now) - { - alarm_data->alarmed=1; /* Info to thread */ - DBUG_PRINT("info",("sending signal to waiting thread")); - if (pthread_equal(alarm_data->thread,alarm_thread) || - pthread_kill(alarm_data->thread, thr_client_alarm)) - { -#ifdef MAIN - printf("Warning: pthread_kill couldn't find thread!!!\n"); -#endif - queue_remove(&alarm_queue,0); /* No thread. Remove alarm */ - if (!alarm_queue.elements) - break; - } - else - { - alarm_data->expire_time=next; - queue_replaced(&alarm_queue); - } - } -#ifndef USE_ALARM_THREAD - if (alarm_queue.elements) - { -#ifdef __bsdi__ - alarm(0); /* Remove old alarm */ -#endif - alarm((uint) (alarm_data->expire_time-now)); - next_alarm_expire_time= alarm_data->expire_time; - } -#endif - } - } - else - { - /* - Ensure that next time we call thr_alarm(), we will schedule a new alarm - */ - next_alarm_expire_time= ~(time_t) 0; - } - DBUG_VOID_RETURN; -} - - -/* - Schedule all alarms now and optionally free all structures - - SYNPOSIS - end_thr_alarm() - free_structures Set to 1 if we should free memory used for - the alarm queue. - When we call this we should KNOW that there - is no active alarms - IMPLEMENTATION - Set alarm_abort to -1 which will change the behavior of alarms as follows: - - All old alarms will be rescheduled at once - - All new alarms will be rescheduled to one second -*/ - -void end_thr_alarm(my_bool free_structures) -{ - DBUG_ENTER("end_thr_alarm"); - if (alarm_aborted != 1) /* If memory not freed */ - { - mysql_mutex_lock(&LOCK_alarm); - DBUG_PRINT("info",("Resheduling %d waiting alarms",alarm_queue.elements)); - alarm_aborted= -1; /* mark aborted */ - if (alarm_queue.elements || (alarm_thread_running && free_structures)) - { - if (pthread_equal(pthread_self(),alarm_thread)) - alarm(1); /* Shut down everything soon */ - else - reschedule_alarms(); - } - if (free_structures) - { - struct timespec abstime; - - DBUG_ASSERT(!alarm_queue.elements); - - /* Wait until alarm thread dies */ - set_timespec(abstime, 10); /* Wait up to 10 seconds */ - while (alarm_thread_running) - { - int error= mysql_cond_timedwait(&COND_alarm, &LOCK_alarm, &abstime); - if (error == ETIME || error == ETIMEDOUT) - break; /* Don't wait forever */ - } - delete_queue(&alarm_queue); - alarm_aborted= 1; - mysql_mutex_unlock(&LOCK_alarm); - if (!alarm_thread_running) /* Safety */ - { - mysql_mutex_destroy(&LOCK_alarm); - mysql_cond_destroy(&COND_alarm); - } - } - else - mysql_mutex_unlock(&LOCK_alarm); - } - DBUG_VOID_RETURN; -} - - -/* - Remove another thread from the alarm -*/ - -void thr_alarm_kill(my_thread_id thread_id) -{ - uint i; - if (alarm_aborted) - return; - mysql_mutex_lock(&LOCK_alarm); - for (i=0 ; i < alarm_queue.elements ; i++) - { - if (((ALARM*) queue_element(&alarm_queue,i))->thread_id == thread_id) - { - ALARM *tmp=(ALARM*) queue_remove(&alarm_queue,i); - tmp->expire_time=0; - queue_insert(&alarm_queue,(uchar*) tmp); - reschedule_alarms(); - break; - } - } - mysql_mutex_unlock(&LOCK_alarm); -} - - -void thr_alarm_info(ALARM_INFO *info) -{ - mysql_mutex_lock(&LOCK_alarm); - info->next_alarm_time= 0; - info->max_used_alarms= max_used_alarms; - if ((info->active_alarms= alarm_queue.elements)) - { - ulong now=(ulong) my_time(0); - long time_diff; - ALARM *alarm_data= (ALARM*) queue_top(&alarm_queue); - time_diff= (long) (alarm_data->expire_time - now); - info->next_alarm_time= (ulong) (time_diff < 0 ? 0 : time_diff); - } - mysql_mutex_unlock(&LOCK_alarm); -} - -/* - This is here for thread to get interruptet from read/write/fcntl - ARGSUSED -*/ - - -static sig_handler thread_alarm(int sig __attribute__((unused))) -{ -#ifdef MAIN - printf("thread_alarm\n"); fflush(stdout); -#endif -#ifdef SIGNAL_HANDLER_RESET_ON_DELIVERY - my_sigset(sig,thread_alarm); /* int. thread system calls */ -#endif -} - - -#ifdef HAVE_TIMESPEC_TS_SEC -#define tv_sec ts_sec -#define tv_nsec ts_nsec -#endif - -/* set up a alarm thread with uses 'sleep' to sleep between alarms */ - -#ifdef USE_ALARM_THREAD -static void *alarm_handler(void *arg __attribute__((unused))) -{ - int error; - struct timespec abstime; -#ifdef MAIN - puts("Starting alarm thread"); -#endif - my_thread_init(); - alarm_thread_running= 1; - mysql_mutex_lock(&LOCK_alarm); - for (;;) - { - if (alarm_queue.elements) - { - ulong sleep_time,now= my_time(0); - if (alarm_aborted) - sleep_time=now+1; - else - sleep_time= ((ALARM*) queue_top(&alarm_queue))->expire_time; - if (sleep_time > now) - { - abstime.tv_sec=sleep_time; - abstime.tv_nsec=0; - next_alarm_expire_time= sleep_time; - if ((error= mysql_cond_timedwait(&COND_alarm, &LOCK_alarm, &abstime)) && - error != ETIME && error != ETIMEDOUT) - { -#ifdef MAIN - printf("Got error: %d from ptread_cond_timedwait (errno: %d)\n", - error,errno); -#endif - } - } - } - else if (alarm_aborted == -1) - break; - else - { - next_alarm_expire_time= ~ (time_t) 0; - if ((error= mysql_cond_wait(&COND_alarm, &LOCK_alarm))) - { -#ifdef MAIN - printf("Got error: %d from ptread_cond_wait (errno: %d)\n", - error,errno); -#endif - } - } - process_alarm(0); - } - bzero((char*) &alarm_thread,sizeof(alarm_thread)); /* For easy debugging */ - alarm_thread_running= 0; - mysql_cond_signal(&COND_alarm); - mysql_mutex_unlock(&LOCK_alarm); - pthread_exit(0); - return 0; /* Impossible */ -} -#endif /* USE_ALARM_THREAD */ - -/***************************************************************************** - thr_alarm for win95 -*****************************************************************************/ - -#else /* __WIN__ */ - -void thr_alarm_kill(my_thread_id thread_id) -{ - /* Can't do this yet */ -} - -sig_handler process_alarm(int sig __attribute__((unused))) -{ - /* Can't do this yet */ -} - - -my_bool thr_alarm(thr_alarm_t *alrm, uint sec, ALARM *alarm) -{ - (*alrm)= &alarm->alarmed; - if (alarm_aborted) - { - alarm->alarmed.crono=0; - return 1; - } - if (!(alarm->alarmed.crono=SetTimer((HWND) NULL,0, sec*1000, - (TIMERPROC) NULL))) - return 1; - return 0; -} - - -my_bool thr_got_alarm(thr_alarm_t *alrm_ptr) -{ - thr_alarm_t alrm= *alrm_ptr; - MSG msg; - if (alrm->crono) - { - PeekMessage(&msg,NULL,WM_TIMER,WM_TIMER,PM_REMOVE) ; - if (msg.message == WM_TIMER || alarm_aborted) - { - KillTimer(NULL, alrm->crono); - alrm->crono = 0; - } - } - return !alrm->crono || alarm_aborted; -} - - -void thr_end_alarm(thr_alarm_t *alrm_ptr) -{ - thr_alarm_t alrm= *alrm_ptr; - /* alrm may be zero if thr_alarm aborted with an error */ - if (alrm && alrm->crono) - - { - KillTimer(NULL, alrm->crono); - alrm->crono = 0; - } -} - -void end_thr_alarm(my_bool free_structures) -{ - DBUG_ENTER("end_thr_alarm"); - alarm_aborted=1; /* No more alarms */ - DBUG_VOID_RETURN; -} - -void init_thr_alarm(uint max_alarm) -{ - DBUG_ENTER("init_thr_alarm"); - alarm_aborted=0; /* Yes, Gimmie alarms */ - DBUG_VOID_RETURN; -} - -void thr_alarm_info(ALARM_INFO *info) -{ - bzero((char*) info, sizeof(*info)); -} - -void resize_thr_alarm(uint max_alarms) -{ -} - -#endif /* __WIN__ */ - -#endif - -/**************************************************************************** - Handling of test case (when compiled with -DMAIN) -***************************************************************************/ - -#ifdef MAIN -#if !defined(DONT_USE_THR_ALARM) - -static mysql_cond_t COND_thread_count; -static mysql_mutex_t LOCK_thread_count; -static uint thread_count; - -#ifdef HPUX10 -typedef int * fd_set_ptr; -#else -typedef fd_set * fd_set_ptr; -#endif /* HPUX10 */ - -static void *test_thread(void *arg) -{ - int i,param=*((int*) arg),wait_time,retry; - time_t start_time; - thr_alarm_t got_alarm; - fd_set fd; - FD_ZERO(&fd); - my_thread_init(); - printf("Thread %d (%s) started\n",param,my_thread_name()); fflush(stdout); - for (i=1 ; i <= 10 ; i++) - { - wait_time=param ? 11-i : i; - start_time= my_time(0); - if (thr_alarm(&got_alarm,wait_time,0)) - { - printf("Thread: %s Alarms aborted\n",my_thread_name()); - break; - } - if (wait_time == 3) - { - printf("Thread: %s Simulation of no alarm needed\n",my_thread_name()); - fflush(stdout); - } - else - { - for (retry=0 ; !thr_got_alarm(&got_alarm) && retry < 10 ; retry++) - { - printf("Thread: %s Waiting %d sec\n",my_thread_name(),wait_time); - select(0,(fd_set_ptr) &fd,0,0,0); - } - if (!thr_got_alarm(&got_alarm)) - { - printf("Thread: %s didn't get an alarm. Aborting!\n", - my_thread_name()); - break; - } - if (wait_time == 7) - { /* Simulate alarm-miss */ - fd_set readFDs; - uint max_connection=fileno(stdin); - FD_ZERO(&readFDs); - FD_SET(max_connection,&readFDs); - retry=0; - for (;;) - { - printf("Thread: %s Simulating alarm miss\n",my_thread_name()); - fflush(stdout); - if (select(max_connection+1, (fd_set_ptr) &readFDs,0,0,0) < 0) - { - if (errno == EINTR) - break; /* Got new interrupt */ - printf("Got errno: %d from select. Retrying..\n",errno); - if (retry++ >= 3) - { - printf("Warning: Interrupt of select() doesn't set errno!\n"); - break; - } - } - else /* This shouldn't happen */ - { - if (!FD_ISSET(max_connection,&readFDs)) - { - printf("Select interrupted, but errno not set\n"); - fflush(stdout); - if (retry++ >= 3) - break; - continue; - } - (void) getchar(); /* Somebody was playing */ - } - } - } - } - printf("Thread: %s Slept for %d (%d) sec\n",my_thread_name(), - (int) (my_time(0)-start_time), wait_time); fflush(stdout); - thr_end_alarm(&got_alarm); - fflush(stdout); - } - mysql_mutex_lock(&LOCK_thread_count); - thread_count--; - mysql_cond_signal(&COND_thread_count); /* Tell main we are ready */ - mysql_mutex_unlock(&LOCK_thread_count); - free((uchar*) arg); - return 0; -} - -#ifdef USE_ONE_SIGNAL_HAND -static sig_handler print_signal_warning(int sig) -{ - printf("Warning: Got signal %d from thread %s\n",sig,my_thread_name()); - fflush(stdout); -#ifdef SIGNAL_HANDLER_RESET_ON_DELIVERY - my_sigset(sig,print_signal_warning); /* int. thread system calls */ -#endif - if (sig == SIGALRM) - alarm(2); /* reschedule alarm */ -} -#endif /* USE_ONE_SIGNAL_HAND */ - - -static void *signal_hand(void *arg __attribute__((unused))) -{ - sigset_t set; - int sig,error,err_count=0;; - - my_thread_init(); - pthread_detach_this_thread(); - init_thr_alarm(10); /* Setup alarm handler */ - mysql_mutex_lock(&LOCK_thread_count); /* Required by bsdi */ - mysql_cond_signal(&COND_thread_count); /* Tell main we are ready */ - mysql_mutex_unlock(&LOCK_thread_count); - - sigemptyset(&set); /* Catch all signals */ - sigaddset(&set,SIGINT); - sigaddset(&set,SIGQUIT); - sigaddset(&set,SIGTERM); - sigaddset(&set,SIGHUP); -#ifdef SIGTSTP - sigaddset(&set,SIGTSTP); -#endif -#ifdef USE_ONE_SIGNAL_HAND - sigaddset(&set,THR_SERVER_ALARM); /* For alarms */ - puts("Starting signal and alarm handling thread"); -#else - puts("Starting signal handling thread"); -#endif - printf("server alarm: %d thread alarm: %d\n", - THR_SERVER_ALARM, thr_client_alarm); - DBUG_PRINT("info",("Starting signal and alarm handling thread")); - for(;;) - { - while ((error=my_sigwait(&set,&sig)) == EINTR) - printf("sigwait restarted\n"); - if (error) - { - fprintf(stderr,"Got error %d from sigwait\n",error); - if (err_count++ > 5) - exit(1); /* Too many errors in test */ - continue; - } -#ifdef USE_ONE_SIGNAL_HAND - if (sig != THR_SERVER_ALARM) -#endif - printf("Main thread: Got signal %d\n",sig); - switch (sig) { - case SIGINT: - case SIGQUIT: - case SIGTERM: - case SIGHUP: - printf("Aborting nicely\n"); - end_thr_alarm(0); - break; -#ifdef SIGTSTP - case SIGTSTP: - printf("Aborting\n"); - exit(1); - return 0; /* Keep some compilers happy */ -#endif -#ifdef USE_ONE_SIGNAL_HAND - case THR_SERVER_ALARM: - process_alarm(sig); - break; -#endif - } - } -} - - -int main(int argc __attribute__((unused)),char **argv __attribute__((unused))) -{ - pthread_t tid; - pthread_attr_t thr_attr; - int i,*param,error; - sigset_t set; - ALARM_INFO alarm_info; - MY_INIT(argv[0]); - - if (argc > 1 && argv[1][0] == '-' && argv[1][1] == '#') - { - DBUG_PUSH(argv[1]+2); - } - mysql_mutex_init(0, &LOCK_thread_count, MY_MUTEX_INIT_FAST); - mysql_cond_init(0, &COND_thread_count, NULL); - - /* Start a alarm handling thread */ - sigemptyset(&set); - sigaddset(&set,SIGINT); - sigaddset(&set,SIGQUIT); - sigaddset(&set,SIGTERM); - sigaddset(&set,SIGHUP); - signal(SIGTERM,SIG_DFL); /* If it's blocked by parent */ -#ifdef SIGTSTP - sigaddset(&set,SIGTSTP); -#endif - sigaddset(&set,THR_SERVER_ALARM); - sigdelset(&set, thr_client_alarm); - (void) pthread_sigmask(SIG_SETMASK,&set,NULL); - - pthread_attr_init(&thr_attr); - pthread_attr_setscope(&thr_attr,PTHREAD_SCOPE_PROCESS); - pthread_attr_setdetachstate(&thr_attr,PTHREAD_CREATE_DETACHED); - pthread_attr_setstacksize(&thr_attr,65536L); - - /* Start signal thread and wait for it to start */ - mysql_mutex_lock(&LOCK_thread_count); - mysql_thread_create(0, - &tid, &thr_attr, signal_hand, NULL); - mysql_cond_wait(&COND_thread_count, &LOCK_thread_count); - mysql_mutex_unlock(&LOCK_thread_count); - DBUG_PRINT("info",("signal thread created")); - - thr_setconcurrency(3); - pthread_attr_setscope(&thr_attr,PTHREAD_SCOPE_PROCESS); - printf("Main thread: %s\n",my_thread_name()); - for (i=0 ; i < 2 ; i++) - { - param=(int*) malloc(sizeof(int)); - *param= i; - mysql_mutex_lock(&LOCK_thread_count); - if ((error= mysql_thread_create(0, - &tid, &thr_attr, test_thread, - (void*) param))) - { - printf("Can't create thread %d, error: %d\n",i,error); - exit(1); - } - thread_count++; - mysql_mutex_unlock(&LOCK_thread_count); - } - - pthread_attr_destroy(&thr_attr); - mysql_mutex_lock(&LOCK_thread_count); - thr_alarm_info(&alarm_info); - printf("Main_thread: Alarms: %u max_alarms: %u next_alarm_time: %lu\n", - alarm_info.active_alarms, alarm_info.max_used_alarms, - alarm_info.next_alarm_time); - while (thread_count) - { - mysql_cond_wait(&COND_thread_count, &LOCK_thread_count); - if (thread_count == 1) - { - printf("Calling end_thr_alarm. This should cancel the last thread\n"); - end_thr_alarm(0); - } - } - mysql_mutex_unlock(&LOCK_thread_count); - thr_alarm_info(&alarm_info); - end_thr_alarm(1); - printf("Main_thread: Alarms: %u max_alarms: %u next_alarm_time: %lu\n", - alarm_info.active_alarms, alarm_info.max_used_alarms, - alarm_info.next_alarm_time); - printf("Test succeeded\n"); - return 0; -} - -#else /* !defined(DONT_USE_ALARM_THREAD) */ - -int main(int argc __attribute__((unused)),char **argv __attribute__((unused))) -{ - printf("thr_alarm disabled with DONT_USE_THR_ALARM\n"); - exit(1); -} - -#endif /* !defined(DONT_USE_ALARM_THREAD) */ -#endif /* MAIN */ diff --git a/deps/mysqllite/mysys/thr_lock.c b/deps/mysqllite/mysys/thr_lock.c deleted file mode 100644 index 2ab283e068dd93..00000000000000 --- a/deps/mysqllite/mysys/thr_lock.c +++ /dev/null @@ -1,1688 +0,0 @@ -/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* -Read and write locks for Posix threads. All tread must acquire -all locks it needs through thr_multi_lock() to avoid dead-locks. -A lock consists of a master lock (THR_LOCK), and lock instances -(THR_LOCK_DATA). -Any thread can have any number of lock instances (read and write:s) on -any lock. All lock instances must be freed. -Locks are prioritized according to: - -The current lock types are: - -TL_READ # Low priority read -TL_READ_WITH_SHARED_LOCKS -TL_READ_HIGH_PRIORITY # High priority read -TL_READ_NO_INSERT # Read without concurrent inserts -TL_WRITE_ALLOW_WRITE # Write lock that allows other writers -TL_WRITE_CONCURRENT_INSERT - # Insert that can be mixed when selects -TL_WRITE_DELAYED # Used by delayed insert - # Allows lower locks to take over -TL_WRITE_LOW_PRIORITY # Low priority write -TL_WRITE # High priority write -TL_WRITE_ONLY # High priority write - # Abort all new lock request with an error - -Locks are prioritized according to: - -WRITE_ALLOW_WRITE, WRITE_CONCURRENT_INSERT, WRITE_DELAYED, -WRITE_LOW_PRIORITY, READ, WRITE, READ_HIGH_PRIORITY and WRITE_ONLY - -Locks in the same privilege level are scheduled in first-in-first-out order. - -To allow concurrent read/writes locks, with 'WRITE_CONCURRENT_INSERT' one -should put a pointer to the following functions in the lock structure: -(If the pointer is zero (default), the function is not called) - -check_status: - Before giving a lock of type TL_WRITE_CONCURRENT_INSERT, - we check if this function exists and returns 0. - If not, then the lock is upgraded to TL_WRITE_LOCK - In MyISAM this is a simple check if the insert can be done - at the end of the datafile. -update_status: - Before a write lock is released, this function is called. - In MyISAM this functions updates the count and length of the datafile -get_status: - When one gets a lock this functions is called. - In MyISAM this stores the number of rows and size of the datafile - for concurrent reads. - -The lock algorithm allows one to have one TL_WRITE_CONCURRENT_INSERT or -one TL_WRITE_DELAYED lock at the same time as multiple read locks. - -*/ - -#if !defined(MAIN) && !defined(DBUG_OFF) && !defined(EXTRA_DEBUG) -#define FORCE_DBUG_OFF -#endif - -#include "mysys_priv.h" - -#include "thr_lock.h" -#include -#include - -my_bool thr_lock_inited=0; -ulong locks_immediate = 0L, locks_waited = 0L; -enum thr_lock_type thr_upgraded_concurrent_insert_lock = TL_WRITE; - -/* The following constants are only for debug output */ -#define MAX_THREADS 100 -#define MAX_LOCKS 100 - - -LIST *thr_lock_thread_list; /* List of threads in use */ -ulong max_write_lock_count= ~(ulong) 0L; - -static void (*before_lock_wait)(void)= 0; -static void (*after_lock_wait)(void)= 0; - -void thr_set_lock_wait_callback(void (*before_wait)(void), - void (*after_wait)(void)) -{ - before_lock_wait= before_wait; - after_lock_wait= after_wait; -} - -static inline mysql_cond_t *get_cond(void) -{ - return &my_thread_var->suspend; -} - -/* -** For the future (now the thread specific cond is alloced by my_pthread.c) -*/ - -my_bool init_thr_lock() -{ - thr_lock_inited=1; - return 0; -} - -static inline my_bool -thr_lock_owner_equal(THR_LOCK_INFO *rhs, THR_LOCK_INFO *lhs) -{ - return rhs == lhs; -} - - -#ifdef EXTRA_DEBUG -#define MAX_FOUND_ERRORS 10 /* Report 10 first errors */ -static uint found_errors=0; - -static int check_lock(struct st_lock_list *list, const char* lock_type, - const char *where, my_bool same_owner, my_bool no_cond) -{ - THR_LOCK_DATA *data,**prev; - uint count=0; - THR_LOCK_INFO *UNINIT_VAR(first_owner); - - prev= &list->data; - if (list->data) - { - enum thr_lock_type last_lock_type=list->data->type; - - if (same_owner && list->data) - first_owner= list->data->owner; - for (data=list->data; data && count++ < MAX_LOCKS ; data=data->next) - { - if (data->type != last_lock_type) - last_lock_type=TL_IGNORE; - if (data->prev != prev) - { - fprintf(stderr, - "Warning: prev link %d didn't point at previous lock at %s: %s\n", - count, lock_type, where); - return 1; - } - if (same_owner && - !thr_lock_owner_equal(data->owner, first_owner) && - last_lock_type != TL_WRITE_ALLOW_WRITE) - { - fprintf(stderr, - "Warning: Found locks from different threads in %s: %s\n", - lock_type,where); - return 1; - } - if (no_cond && data->cond) - { - fprintf(stderr, - "Warning: Found active lock with not reset cond %s: %s\n", - lock_type,where); - return 1; - } - prev= &data->next; - } - if (data) - { - fprintf(stderr,"Warning: found too many locks at %s: %s\n", - lock_type,where); - return 1; - } - } - if (prev != list->last) - { - fprintf(stderr,"Warning: last didn't point at last lock at %s: %s\n", - lock_type, where); - return 1; - } - return 0; -} - - -static void check_locks(THR_LOCK *lock, const char *where, - my_bool allow_no_locks) -{ - uint old_found_errors=found_errors; - DBUG_ENTER("check_locks"); - - if (found_errors < MAX_FOUND_ERRORS) - { - if (check_lock(&lock->write,"write",where,1,1) | - check_lock(&lock->write_wait,"write_wait",where,0,0) | - check_lock(&lock->read,"read",where,0,1) | - check_lock(&lock->read_wait,"read_wait",where,0,0)) - found_errors++; - - if (found_errors < MAX_FOUND_ERRORS) - { - uint count=0; - THR_LOCK_DATA *data; - for (data=lock->read.data ; data ; data=data->next) - { - if ((int) data->type == (int) TL_READ_NO_INSERT) - count++; - /* Protect against infinite loop. */ - DBUG_ASSERT(count <= lock->read_no_write_count); - } - if (count != lock->read_no_write_count) - { - found_errors++; - fprintf(stderr, - "Warning at '%s': Locks read_no_write_count was %u when it should have been %u\n", where, lock->read_no_write_count,count); - } - - if (!lock->write.data) - { - if (!allow_no_locks && !lock->read.data && - (lock->write_wait.data || lock->read_wait.data)) - { - found_errors++; - fprintf(stderr, - "Warning at '%s': No locks in use but locks are in wait queue\n", - where); - } - if (!lock->write_wait.data) - { - if (!allow_no_locks && lock->read_wait.data) - { - found_errors++; - fprintf(stderr, - "Warning at '%s': No write locks and waiting read locks\n", - where); - } - } - else - { - if (!allow_no_locks && - (((lock->write_wait.data->type == TL_WRITE_CONCURRENT_INSERT || - lock->write_wait.data->type == TL_WRITE_ALLOW_WRITE) && - !lock->read_no_write_count) || - (lock->write_wait.data->type == TL_WRITE_DELAYED && - !lock->read.data))) - { - found_errors++; - fprintf(stderr, - "Warning at '%s': Write lock %d waiting while no exclusive read locks\n",where,(int) lock->write_wait.data->type); - } - } - } - else - { /* Have write lock */ - if (lock->write_wait.data) - { - if (!allow_no_locks && - lock->write.data->type == TL_WRITE_ALLOW_WRITE && - lock->write_wait.data->type == TL_WRITE_ALLOW_WRITE) - { - found_errors++; - fprintf(stderr, - "Warning at '%s': Found WRITE_ALLOW_WRITE lock waiting for WRITE_ALLOW_WRITE lock\n", - where); - } - } - if (lock->read.data) - { - if (!thr_lock_owner_equal(lock->write.data->owner, - lock->read.data->owner) && - ((lock->write.data->type > TL_WRITE_DELAYED && - lock->write.data->type != TL_WRITE_ONLY) || - ((lock->write.data->type == TL_WRITE_CONCURRENT_INSERT || - lock->write.data->type == TL_WRITE_ALLOW_WRITE) && - lock->read_no_write_count))) - { - found_errors++; - fprintf(stderr, - "Warning at '%s': Found lock of type %d that is write and read locked\n", - where, lock->write.data->type); - DBUG_PRINT("warning",("At '%s': Found lock of type %d that is write and read locked\n", - where, lock->write.data->type)); - - } - } - if (lock->read_wait.data) - { - if (!allow_no_locks && lock->write.data->type <= TL_WRITE_DELAYED && - lock->read_wait.data->type <= TL_READ_HIGH_PRIORITY) - { - found_errors++; - fprintf(stderr, - "Warning at '%s': Found read lock of type %d waiting for write lock of type %d\n", - where, - (int) lock->read_wait.data->type, - (int) lock->write.data->type); - } - } - } - } - if (found_errors != old_found_errors) - { - DBUG_PRINT("error",("Found wrong lock")); - } - } - DBUG_VOID_RETURN; -} - -#else /* EXTRA_DEBUG */ -#define check_locks(A,B,C) -#endif - - - /* Initialize a lock */ - -void thr_lock_init(THR_LOCK *lock) -{ - DBUG_ENTER("thr_lock_init"); - bzero((char*) lock,sizeof(*lock)); - mysql_mutex_init(key_THR_LOCK_mutex, &lock->mutex, MY_MUTEX_INIT_FAST); - lock->read.last= &lock->read.data; - lock->read_wait.last= &lock->read_wait.data; - lock->write_wait.last= &lock->write_wait.data; - lock->write.last= &lock->write.data; - - mysql_mutex_lock(&THR_LOCK_lock); /* Add to locks in use */ - lock->list.data=(void*) lock; - thr_lock_thread_list=list_add(thr_lock_thread_list,&lock->list); - mysql_mutex_unlock(&THR_LOCK_lock); - DBUG_VOID_RETURN; -} - - -void thr_lock_delete(THR_LOCK *lock) -{ - DBUG_ENTER("thr_lock_delete"); - mysql_mutex_lock(&THR_LOCK_lock); - thr_lock_thread_list=list_delete(thr_lock_thread_list,&lock->list); - mysql_mutex_unlock(&THR_LOCK_lock); - mysql_mutex_destroy(&lock->mutex); - DBUG_VOID_RETURN; -} - - -void thr_lock_info_init(THR_LOCK_INFO *info) -{ - struct st_my_thread_var *tmp= my_thread_var; - info->thread= tmp->pthread_self; - info->thread_id= tmp->id; -} - - /* Initialize a lock instance */ - -void thr_lock_data_init(THR_LOCK *lock,THR_LOCK_DATA *data, void *param) -{ - data->lock=lock; - data->type=TL_UNLOCK; - data->owner= 0; /* no owner yet */ - data->status_param=param; - data->cond=0; -} - - -static inline my_bool -has_old_lock(THR_LOCK_DATA *data, THR_LOCK_INFO *owner) -{ - for ( ; data ; data=data->next) - { - if (thr_lock_owner_equal(data->owner, owner)) - return 1; /* Already locked by thread */ - } - return 0; -} - -static inline my_bool have_specific_lock(THR_LOCK_DATA *data, - enum thr_lock_type type) -{ - for ( ; data ; data=data->next) - { - if (data->type == type) - return 1; - } - return 0; -} - - -static void wake_up_waiters(THR_LOCK *lock); - - -static enum enum_thr_lock_result -wait_for_lock(struct st_lock_list *wait, THR_LOCK_DATA *data, - my_bool in_wait_list, ulong lock_wait_timeout) -{ - struct st_my_thread_var *thread_var= my_thread_var; - mysql_cond_t *cond= &thread_var->suspend; - struct timespec wait_timeout; - enum enum_thr_lock_result result= THR_LOCK_ABORTED; - const char *old_proc_info; - DBUG_ENTER("wait_for_lock"); - - /* - One can use this to signal when a thread is going to wait for a lock. - See debug_sync.cc. - - Beware of waiting for a signal here. The lock has aquired its mutex. - While waiting on a signal here, the locking thread could not aquire - the mutex to release the lock. One could lock up the table - completely. - - In detail it works so: When thr_lock() tries to acquire a table - lock, it locks the lock->mutex, checks if it can have the lock, and - if not, it calls wait_for_lock(). Here it unlocks the table lock - while waiting on a condition. The sync point is located before this - wait for condition. If we have a waiting action here, we hold the - the table locks mutex all the time. Any attempt to look at the table - lock by another thread blocks it immediately on lock->mutex. This - can easily become an unexpected and unobvious blockage. So be - warned: Do not request a WAIT_FOR action for the 'wait_for_lock' - sync point unless you really know what you do. - */ - DEBUG_SYNC_C("wait_for_lock"); - - if (!in_wait_list) - { - (*wait->last)=data; /* Wait for lock */ - data->prev= wait->last; - wait->last= &data->next; - } - - statistic_increment(locks_waited, &THR_LOCK_lock); - - /* Set up control struct to allow others to abort locks */ - thread_var->current_mutex= &data->lock->mutex; - thread_var->current_cond= cond; - data->cond= cond; - - old_proc_info= proc_info_hook(NULL, "Waiting for table level lock", - __func__, __FILE__, __LINE__); - - /* - Since before_lock_wait potentially can create more threads to - scheduler work for, we don't want to call the before_lock_wait - callback unless it will really start to wait. - - For similar reasons, we do not want to call before_lock_wait and - after_lock_wait for each lap around the loop, so we restrict - ourselves to call it before_lock_wait once before starting to wait - and once after the thread has exited the wait loop. - */ - if ((!thread_var->abort || in_wait_list) && before_lock_wait) - (*before_lock_wait)(); - - set_timespec(wait_timeout, lock_wait_timeout); - while (!thread_var->abort || in_wait_list) - { - int rc= mysql_cond_timedwait(cond, &data->lock->mutex, &wait_timeout); - /* - We must break the wait if one of the following occurs: - - the connection has been aborted (!thread_var->abort), but - this is not a delayed insert thread (in_wait_list). For a delayed - insert thread the proper action at shutdown is, apparently, to - acquire the lock and complete the insert. - - the lock has been granted (data->cond is set to NULL by the granter), - or the waiting has been aborted (additionally data->type is set to - TL_UNLOCK). - - the wait has timed out (rc == ETIMEDOUT) - Order of checks below is important to not report about timeout - if the predicate is true. - */ - if (data->cond == 0) - { - DBUG_PRINT("thr_lock", ("lock granted/aborted")); - break; - } - if (rc == ETIMEDOUT || rc == ETIME) - { - /* purecov: begin inspected */ - DBUG_PRINT("thr_lock", ("lock timed out")); - result= THR_LOCK_WAIT_TIMEOUT; - break; - /* purecov: end */ - } - } - - /* - We call the after_lock_wait callback once the wait loop has - finished. - */ - if (after_lock_wait) - (*after_lock_wait)(); - - DBUG_PRINT("thr_lock", ("aborted: %d in_wait_list: %d", - thread_var->abort, in_wait_list)); - - if (data->cond || data->type == TL_UNLOCK) - { - if (data->cond) /* aborted or timed out */ - { - if (((*data->prev)=data->next)) /* remove from wait-list */ - data->next->prev= data->prev; - else - wait->last=data->prev; - data->type= TL_UNLOCK; /* No lock */ - check_locks(data->lock, "killed or timed out wait_for_lock", 1); - wake_up_waiters(data->lock); - } - else - { - DBUG_PRINT("thr_lock", ("lock aborted")); - check_locks(data->lock, "aborted wait_for_lock", 0); - } - } - else - { - result= THR_LOCK_SUCCESS; - if (data->lock->get_status) - (*data->lock->get_status)(data->status_param, 0); - check_locks(data->lock,"got wait_for_lock",0); - } - mysql_mutex_unlock(&data->lock->mutex); - - /* The following must be done after unlock of lock->mutex */ - mysql_mutex_lock(&thread_var->mutex); - thread_var->current_mutex= 0; - thread_var->current_cond= 0; - mysql_mutex_unlock(&thread_var->mutex); - - proc_info_hook(NULL, old_proc_info, __func__, __FILE__, __LINE__); - - DBUG_RETURN(result); -} - - -enum enum_thr_lock_result -thr_lock(THR_LOCK_DATA *data, THR_LOCK_INFO *owner, - enum thr_lock_type lock_type, ulong lock_wait_timeout) -{ - THR_LOCK *lock=data->lock; - enum enum_thr_lock_result result= THR_LOCK_SUCCESS; - struct st_lock_list *wait_queue; - DBUG_ENTER("thr_lock"); - - data->next=0; - data->cond=0; /* safety */ - data->type=lock_type; - data->owner= owner; /* Must be reset ! */ - mysql_mutex_lock(&lock->mutex); - DBUG_PRINT("lock",("data: 0x%lx thread: 0x%lx lock: 0x%lx type: %d", - (long) data, data->owner->thread_id, - (long) lock, (int) lock_type)); - check_locks(lock,(uint) lock_type <= (uint) TL_READ_NO_INSERT ? - "enter read_lock" : "enter write_lock",0); - if ((int) lock_type <= (int) TL_READ_NO_INSERT) - { - /* Request for READ lock */ - if (lock->write.data) - { - /* - We can allow a read lock even if there is already a - write lock on the table if they are owned by the same - thread or if they satisfy the following lock - compatibility matrix: - - Request - /------- - H|++++ WRITE_ALLOW_WRITE - e|+++- WRITE_CONCURRENT_INSERT - l|++++ WRITE_DELAYED - d |||| - |||\= READ_NO_INSERT - ||\ = READ_HIGH_PRIORITY - |\ = READ_WITH_SHARED_LOCKS - \ = READ - - - + = Request can be satisified. - - = Request cannot be satisified. - - READ_NO_INSERT and WRITE_ALLOW_WRITE should in principle - be incompatible. However this will cause starvation of - LOCK TABLE READ in InnoDB under high write load. - See Bug#42147 for more information. - */ - - DBUG_PRINT("lock",("write locked 1 by thread: 0x%lx", - lock->write.data->owner->thread_id)); - if (thr_lock_owner_equal(data->owner, lock->write.data->owner) || - (lock->write.data->type <= TL_WRITE_DELAYED && - (((int) lock_type <= (int) TL_READ_HIGH_PRIORITY) || - (lock->write.data->type != TL_WRITE_CONCURRENT_INSERT)))) - { /* Already got a write lock */ - (*lock->read.last)=data; /* Add to running FIFO */ - data->prev=lock->read.last; - lock->read.last= &data->next; - if (lock_type == TL_READ_NO_INSERT) - lock->read_no_write_count++; - check_locks(lock,"read lock with old write lock",0); - if (lock->get_status) - (*lock->get_status)(data->status_param, 0); - statistic_increment(locks_immediate,&THR_LOCK_lock); - goto end; - } - if (lock->write.data->type == TL_WRITE_ONLY) - { - /* We are not allowed to get a READ lock in this case */ - data->type=TL_UNLOCK; - result= THR_LOCK_ABORTED; /* Can't wait for this one */ - goto end; - } - } - else if (!lock->write_wait.data || - lock->write_wait.data->type <= TL_WRITE_LOW_PRIORITY || - lock_type == TL_READ_HIGH_PRIORITY || - has_old_lock(lock->read.data, data->owner)) /* Has old read lock */ - { /* No important write-locks */ - (*lock->read.last)=data; /* Add to running FIFO */ - data->prev=lock->read.last; - lock->read.last= &data->next; - if (lock->get_status) - (*lock->get_status)(data->status_param, 0); - if (lock_type == TL_READ_NO_INSERT) - lock->read_no_write_count++; - check_locks(lock,"read lock with no write locks",0); - statistic_increment(locks_immediate,&THR_LOCK_lock); - goto end; - } - /* - We're here if there is an active write lock or no write - lock but a high priority write waiting in the write_wait queue. - In the latter case we should yield the lock to the writer. - */ - wait_queue= &lock->read_wait; - } - else /* Request for WRITE lock */ - { - if (lock_type == TL_WRITE_DELAYED) - { - if (lock->write.data && lock->write.data->type == TL_WRITE_ONLY) - { - data->type=TL_UNLOCK; - result= THR_LOCK_ABORTED; /* Can't wait for this one */ - goto end; - } - if (lock->write.data || lock->read.data) - { - /* Add delayed write lock to write_wait queue, and return at once */ - (*lock->write_wait.last)=data; - data->prev=lock->write_wait.last; - lock->write_wait.last= &data->next; - data->cond=get_cond(); - /* - We don't have to do get_status here as we will do it when we change - the delayed lock to a real write lock - */ - statistic_increment(locks_immediate,&THR_LOCK_lock); - goto end; - } - } - else if (lock_type == TL_WRITE_CONCURRENT_INSERT && ! lock->check_status) - data->type=lock_type= thr_upgraded_concurrent_insert_lock; - - if (lock->write.data) /* If there is a write lock */ - { - if (lock->write.data->type == TL_WRITE_ONLY) - { - /* purecov: begin tested */ - /* Allow lock owner to bypass TL_WRITE_ONLY. */ - if (!thr_lock_owner_equal(data->owner, lock->write.data->owner)) - { - /* We are not allowed to get a lock in this case */ - data->type=TL_UNLOCK; - result= THR_LOCK_ABORTED; /* Can't wait for this one */ - goto end; - } - /* purecov: end */ - } - - /* - The idea is to allow us to get a lock at once if we already have - a write lock or if there is no pending write locks and if all - write locks are of TL_WRITE_ALLOW_WRITE type. - - Note that, since lock requests for the same table are sorted in - such way that requests with higher thr_lock_type value come first - (with one exception (*)), lock being requested usually (**) has - equal or "weaker" type than one which thread might have already - acquired. - *) The only exception to this rule is case when type of old lock - is TL_WRITE_LOW_PRIORITY and type of new lock is changed inside - of thr_lock() from TL_WRITE_CONCURRENT_INSERT to TL_WRITE since - engine turns out to be not supporting concurrent inserts. - Note that since TL_WRITE has the same compatibility rules as - TL_WRITE_LOW_PRIORITY (their only difference is priority), - it is OK to grant new lock without additional checks in such - situation. - **) The exceptions are situations when: - - when old lock type is TL_WRITE_DELAYED - But these should never happen within MySQL. - Therefore it is OK to allow acquiring write lock on the table if - this thread already holds some write lock on it. - - (INSERT INTO t1 VALUES (f1()), where f1() is stored function which - tries to update t1, is an example of statement which requests two - different types of write lock on the same table). - */ - DBUG_ASSERT(! has_old_lock(lock->write.data, data->owner) || - ((lock_type <= lock->write.data->type || - (lock_type == TL_WRITE && - lock->write.data->type == TL_WRITE_LOW_PRIORITY)) && - lock->write.data->type != TL_WRITE_DELAYED)); - - if ((lock_type == TL_WRITE_ALLOW_WRITE && - ! lock->write_wait.data && - lock->write.data->type == TL_WRITE_ALLOW_WRITE) || - has_old_lock(lock->write.data, data->owner)) - { - /* - We have already got a write lock or all locks are - TL_WRITE_ALLOW_WRITE - */ - DBUG_PRINT("info", ("write_wait.data: 0x%lx old_type: %d", - (ulong) lock->write_wait.data, - lock->write.data->type)); - - (*lock->write.last)=data; /* Add to running fifo */ - data->prev=lock->write.last; - lock->write.last= &data->next; - check_locks(lock,"second write lock",0); - if (data->lock->get_status) - (*data->lock->get_status)(data->status_param, 0); - statistic_increment(locks_immediate,&THR_LOCK_lock); - goto end; - } - DBUG_PRINT("lock",("write locked 2 by thread: 0x%lx", - lock->write.data->owner->thread_id)); - } - else - { - DBUG_PRINT("info", ("write_wait.data: 0x%lx", - (ulong) lock->write_wait.data)); - if (!lock->write_wait.data) - { /* no scheduled write locks */ - my_bool concurrent_insert= 0; - if (lock_type == TL_WRITE_CONCURRENT_INSERT) - { - concurrent_insert= 1; - if ((*lock->check_status)(data->status_param)) - { - concurrent_insert= 0; - data->type=lock_type= thr_upgraded_concurrent_insert_lock; - } - } - - if (!lock->read.data || - (lock_type <= TL_WRITE_DELAYED && - ((lock_type != TL_WRITE_CONCURRENT_INSERT && - lock_type != TL_WRITE_ALLOW_WRITE) || - !lock->read_no_write_count))) - { - (*lock->write.last)=data; /* Add as current write lock */ - data->prev=lock->write.last; - lock->write.last= &data->next; - if (data->lock->get_status) - (*data->lock->get_status)(data->status_param, concurrent_insert); - check_locks(lock,"only write lock",0); - statistic_increment(locks_immediate,&THR_LOCK_lock); - goto end; - } - } - DBUG_PRINT("lock",("write locked 3 by thread: 0x%lx type: %d", - lock->read.data->owner->thread_id, data->type)); - } - wait_queue= &lock->write_wait; - } - /* Can't get lock yet; Wait for it */ - DBUG_RETURN(wait_for_lock(wait_queue, data, 0, lock_wait_timeout)); -end: - mysql_mutex_unlock(&lock->mutex); - DBUG_RETURN(result); -} - - -static inline void free_all_read_locks(THR_LOCK *lock, - my_bool using_concurrent_insert) -{ - THR_LOCK_DATA *data=lock->read_wait.data; - - check_locks(lock,"before freeing read locks",1); - - /* move all locks from read_wait list to read list */ - (*lock->read.last)=data; - data->prev=lock->read.last; - lock->read.last=lock->read_wait.last; - - /* Clear read_wait list */ - lock->read_wait.last= &lock->read_wait.data; - - do - { - mysql_cond_t *cond= data->cond; - if ((int) data->type == (int) TL_READ_NO_INSERT) - { - if (using_concurrent_insert) - { - /* - We can't free this lock; - Link lock away from read chain back into read_wait chain - */ - if (((*data->prev)=data->next)) - data->next->prev=data->prev; - else - lock->read.last=data->prev; - *lock->read_wait.last= data; - data->prev= lock->read_wait.last; - lock->read_wait.last= &data->next; - continue; - } - lock->read_no_write_count++; - } - /* purecov: begin inspected */ - DBUG_PRINT("lock",("giving read lock to thread: 0x%lx", - data->owner->thread_id)); - /* purecov: end */ - data->cond=0; /* Mark thread free */ - mysql_cond_signal(cond); - } while ((data=data->next)); - *lock->read_wait.last=0; - if (!lock->read_wait.data) - lock->write_lock_count=0; - check_locks(lock,"after giving read locks",0); -} - - /* Unlock lock and free next thread on same lock */ - -void thr_unlock(THR_LOCK_DATA *data) -{ - THR_LOCK *lock=data->lock; - enum thr_lock_type lock_type=data->type; - DBUG_ENTER("thr_unlock"); - DBUG_PRINT("lock",("data: 0x%lx thread: 0x%lx lock: 0x%lx", - (long) data, data->owner->thread_id, (long) lock)); - mysql_mutex_lock(&lock->mutex); - check_locks(lock,"start of release lock",0); - - if (((*data->prev)=data->next)) /* remove from lock-list */ - data->next->prev= data->prev; - else if (lock_type <= TL_READ_NO_INSERT) - lock->read.last=data->prev; - else if (lock_type == TL_WRITE_DELAYED && data->cond) - { - /* - This only happens in extreme circumstances when a - write delayed lock that is waiting for a lock - */ - lock->write_wait.last=data->prev; /* Put it on wait queue */ - } - else - lock->write.last=data->prev; - if (lock_type >= TL_WRITE_CONCURRENT_INSERT) - { - if (lock->update_status) - (*lock->update_status)(data->status_param); - } - else - { - if (lock->restore_status) - (*lock->restore_status)(data->status_param); - } - if (lock_type == TL_READ_NO_INSERT) - lock->read_no_write_count--; - data->type=TL_UNLOCK; /* Mark unlocked */ - check_locks(lock,"after releasing lock",1); - wake_up_waiters(lock); - mysql_mutex_unlock(&lock->mutex); - DBUG_VOID_RETURN; -} - - -/** - @brief Wake up all threads which pending requests for the lock - can be satisfied. - - @param lock Lock for which threads should be woken up - -*/ - -static void wake_up_waiters(THR_LOCK *lock) -{ - THR_LOCK_DATA *data; - enum thr_lock_type lock_type; - - DBUG_ENTER("wake_up_waiters"); - - if (!lock->write.data) /* If no active write locks */ - { - data=lock->write_wait.data; - if (!lock->read.data) /* If no more locks in use */ - { - /* Release write-locks with TL_WRITE or TL_WRITE_ONLY priority first */ - if (data && - (data->type != TL_WRITE_LOW_PRIORITY || !lock->read_wait.data || - lock->read_wait.data->type < TL_READ_HIGH_PRIORITY)) - { - if (lock->write_lock_count++ > max_write_lock_count) - { - /* Too many write locks in a row; Release all waiting read locks */ - lock->write_lock_count=0; - if (lock->read_wait.data) - { - DBUG_PRINT("info",("Freeing all read_locks because of max_write_lock_count")); - free_all_read_locks(lock,0); - goto end; - } - } - for (;;) - { - if (((*data->prev)=data->next)) /* remove from wait-list */ - data->next->prev= data->prev; - else - lock->write_wait.last=data->prev; - (*lock->write.last)=data; /* Put in execute list */ - data->prev=lock->write.last; - data->next=0; - lock->write.last= &data->next; - if (data->type == TL_WRITE_CONCURRENT_INSERT && - (*lock->check_status)(data->status_param)) - data->type=TL_WRITE; /* Upgrade lock */ - /* purecov: begin inspected */ - DBUG_PRINT("lock",("giving write lock of type %d to thread: 0x%lx", - data->type, data->owner->thread_id)); - /* purecov: end */ - { - mysql_cond_t *cond= data->cond; - data->cond=0; /* Mark thread free */ - mysql_cond_signal(cond); /* Start waiting thread */ - } - if (data->type != TL_WRITE_ALLOW_WRITE || - !lock->write_wait.data || - lock->write_wait.data->type != TL_WRITE_ALLOW_WRITE) - break; - data=lock->write_wait.data; /* Free this too */ - } - if (data->type >= TL_WRITE_LOW_PRIORITY) - goto end; - /* Release possible read locks together with the write lock */ - } - if (lock->read_wait.data) - free_all_read_locks(lock, - data && - (data->type == TL_WRITE_CONCURRENT_INSERT || - data->type == TL_WRITE_ALLOW_WRITE)); - else - { - DBUG_PRINT("lock",("No waiting read locks to free")); - } - } - else if (data && - (lock_type=data->type) <= TL_WRITE_DELAYED && - ((lock_type != TL_WRITE_CONCURRENT_INSERT && - lock_type != TL_WRITE_ALLOW_WRITE) || - !lock->read_no_write_count)) - { - /* - For DELAYED, ALLOW_READ, WRITE_ALLOW_WRITE or CONCURRENT_INSERT locks - start WRITE locks together with the READ locks - */ - if (lock_type == TL_WRITE_CONCURRENT_INSERT && - (*lock->check_status)(data->status_param)) - { - data->type=TL_WRITE; /* Upgrade lock */ - if (lock->read_wait.data) - free_all_read_locks(lock,0); - goto end; - } - do { - mysql_cond_t *cond= data->cond; - if (((*data->prev)=data->next)) /* remove from wait-list */ - data->next->prev= data->prev; - else - lock->write_wait.last=data->prev; - (*lock->write.last)=data; /* Put in execute list */ - data->prev=lock->write.last; - lock->write.last= &data->next; - data->next=0; /* Only one write lock */ - data->cond=0; /* Mark thread free */ - mysql_cond_signal(cond); /* Start waiting thread */ - } while (lock_type == TL_WRITE_ALLOW_WRITE && - (data=lock->write_wait.data) && - data->type == TL_WRITE_ALLOW_WRITE); - if (lock->read_wait.data) - free_all_read_locks(lock, - (lock_type == TL_WRITE_CONCURRENT_INSERT || - lock_type == TL_WRITE_ALLOW_WRITE)); - } - else if (!data && lock->read_wait.data) - free_all_read_locks(lock,0); - } -end: - check_locks(lock, "after waking up waiters", 0); - DBUG_VOID_RETURN; -} - - -/* -** Get all locks in a specific order to avoid dead-locks -** Sort acording to lock position and put write_locks before read_locks if -** lock on same lock. -*/ - - -#define LOCK_CMP(A,B) ((uchar*) (A->lock) - (uint) ((A)->type) < (uchar*) (B->lock)- (uint) ((B)->type)) - -static void sort_locks(THR_LOCK_DATA **data,uint count) -{ - THR_LOCK_DATA **pos,**end,**prev,*tmp; - - /* Sort locks with insertion sort (fast because almost always few locks) */ - - for (pos=data+1,end=data+count; pos < end ; pos++) - { - tmp= *pos; - if (LOCK_CMP(tmp,pos[-1])) - { - prev=pos; - do { - prev[0]=prev[-1]; - } while (--prev != data && LOCK_CMP(tmp,prev[-1])); - prev[0]=tmp; - } - } -} - - -enum enum_thr_lock_result -thr_multi_lock(THR_LOCK_DATA **data, uint count, THR_LOCK_INFO *owner, - ulong lock_wait_timeout) -{ - THR_LOCK_DATA **pos,**end; - DBUG_ENTER("thr_multi_lock"); - DBUG_PRINT("lock",("data: 0x%lx count: %d", (long) data, count)); - if (count > 1) - sort_locks(data,count); - /* lock everything */ - for (pos=data,end=data+count; pos < end ; pos++) - { - enum enum_thr_lock_result result= thr_lock(*pos, owner, (*pos)->type, - lock_wait_timeout); - if (result != THR_LOCK_SUCCESS) - { /* Aborted */ - thr_multi_unlock(data,(uint) (pos-data)); - DBUG_RETURN(result); - } - DEBUG_SYNC_C("thr_multi_lock_after_thr_lock"); -#ifdef MAIN - printf("Thread: %s Got lock: 0x%lx type: %d\n",my_thread_name(), - (long) pos[0]->lock, pos[0]->type); fflush(stdout); -#endif - } - thr_lock_merge_status(data, count); - DBUG_RETURN(THR_LOCK_SUCCESS); -} - - -/** - Ensure that all locks for a given table have the same - status_param. - - This is a MyISAM and possibly Maria specific crutch. MyISAM - engine stores data file length, record count and other table - properties in status_param member of handler. When a table is - locked, connection-local copy is made from a global copy - (myisam_share) by mi_get_status(). When a table is unlocked, - the changed status is transferred back to the global share by - mi_update_status(). - - One thing MyISAM doesn't do is to ensure that when the same - table is opened twice in a connection all instances share the - same status_param. This is necessary, however: for one, to keep - all instances of a connection "on the same page" with regard to - the current state of the table. For other, unless this is done, - myisam_share will always get updated from the last unlocked - instance (in mi_update_status()), and when this instance was not - the one that was used to update data, records may be lost. - - For each table, this function looks up the last lock_data in the - list of acquired locks, and makes sure that all other instances - share status_param with it. -*/ - -void -thr_lock_merge_status(THR_LOCK_DATA **data, uint count) -{ -#if !defined(DONT_USE_RW_LOCKS) - THR_LOCK_DATA **pos= data; - THR_LOCK_DATA **end= data + count; - if (count > 1) - { - THR_LOCK_DATA *last_lock= end[-1]; - pos=end-1; - do - { - pos--; - if (last_lock->lock == (*pos)->lock && - last_lock->lock->copy_status) - { - if (last_lock->type <= TL_READ_NO_INSERT) - { - THR_LOCK_DATA **read_lock; - /* - If we are locking the same table with read locks we must ensure - that all tables share the status of the last write lock or - the same read lock. - */ - for (; - (*pos)->type <= TL_READ_NO_INSERT && - pos != data && - pos[-1]->lock == (*pos)->lock ; - pos--) ; - - read_lock = pos+1; - do - { - (last_lock->lock->copy_status)((*read_lock)->status_param, - (*pos)->status_param); - } while (*(read_lock++) != last_lock); - last_lock= (*pos); /* Point at last write lock */ - } - else - (*last_lock->lock->copy_status)((*pos)->status_param, - last_lock->status_param); - } - else - last_lock=(*pos); - } while (pos != data); - } -#endif -} - - /* free all locks */ - -void thr_multi_unlock(THR_LOCK_DATA **data,uint count) -{ - THR_LOCK_DATA **pos,**end; - DBUG_ENTER("thr_multi_unlock"); - DBUG_PRINT("lock",("data: 0x%lx count: %d", (long) data, count)); - - for (pos=data,end=data+count; pos < end ; pos++) - { -#ifdef MAIN - printf("Thread: %s Rel lock: 0x%lx type: %d\n", - my_thread_name(), (long) pos[0]->lock, pos[0]->type); - fflush(stdout); -#endif - if ((*pos)->type != TL_UNLOCK) - thr_unlock(*pos); - else - { - DBUG_PRINT("lock",("Free lock: data: 0x%lx thread: 0x%lx lock: 0x%lx", - (long) *pos, (*pos)->owner->thread_id, - (long) (*pos)->lock)); - } - } - DBUG_VOID_RETURN; -} - -/* - Abort all threads waiting for a lock. The lock will be upgraded to - TL_WRITE_ONLY to abort any new accesses to the lock -*/ - -void thr_abort_locks(THR_LOCK *lock, my_bool upgrade_lock) -{ - THR_LOCK_DATA *data; - DBUG_ENTER("thr_abort_locks"); - mysql_mutex_lock(&lock->mutex); - - for (data=lock->read_wait.data; data ; data=data->next) - { - data->type=TL_UNLOCK; /* Mark killed */ - /* It's safe to signal the cond first: we're still holding the mutex. */ - mysql_cond_signal(data->cond); - data->cond=0; /* Removed from list */ - } - for (data=lock->write_wait.data; data ; data=data->next) - { - data->type=TL_UNLOCK; - mysql_cond_signal(data->cond); - data->cond=0; - } - lock->read_wait.last= &lock->read_wait.data; - lock->write_wait.last= &lock->write_wait.data; - lock->read_wait.data=lock->write_wait.data=0; - if (upgrade_lock && lock->write.data) - lock->write.data->type=TL_WRITE_ONLY; - mysql_mutex_unlock(&lock->mutex); - DBUG_VOID_RETURN; -} - - -/* - Abort all locks for specific table/thread combination - - This is used to abort all locks for a specific thread -*/ - -my_bool thr_abort_locks_for_thread(THR_LOCK *lock, my_thread_id thread_id) -{ - THR_LOCK_DATA *data; - my_bool found= FALSE; - DBUG_ENTER("thr_abort_locks_for_thread"); - - mysql_mutex_lock(&lock->mutex); - for (data= lock->read_wait.data; data ; data= data->next) - { - if (data->owner->thread_id == thread_id) /* purecov: tested */ - { - DBUG_PRINT("info",("Aborting read-wait lock")); - data->type= TL_UNLOCK; /* Mark killed */ - /* It's safe to signal the cond first: we're still holding the mutex. */ - found= TRUE; - mysql_cond_signal(data->cond); - data->cond= 0; /* Removed from list */ - - if (((*data->prev)= data->next)) - data->next->prev= data->prev; - else - lock->read_wait.last= data->prev; - } - } - for (data= lock->write_wait.data; data ; data= data->next) - { - if (data->owner->thread_id == thread_id) /* purecov: tested */ - { - DBUG_PRINT("info",("Aborting write-wait lock")); - data->type= TL_UNLOCK; - found= TRUE; - mysql_cond_signal(data->cond); - data->cond= 0; - - if (((*data->prev)= data->next)) - data->next->prev= data->prev; - else - lock->write_wait.last= data->prev; - } - } - wake_up_waiters(lock); - mysql_mutex_unlock(&lock->mutex); - DBUG_RETURN(found); -} - - -/* - Downgrade a WRITE_* to a lower WRITE level - SYNOPSIS - thr_downgrade_write_lock() - in_data Lock data of thread downgrading its lock - new_lock_type New write lock type - RETURN VALUE - NONE - DESCRIPTION - This can be used to downgrade a lock already owned. When the downgrade - occurs also other waiters, both readers and writers can be allowed to - start. - The previous lock is often TL_WRITE_ONLY but can also be - TL_WRITE. The normal downgrade variants are: - TL_WRITE_ONLY => TL_WRITE after a short exclusive lock while holding a - write table lock - TL_WRITE_ONLY => TL_WRITE_ALLOW_WRITE After a short exclusive lock after - already earlier having dongraded lock to TL_WRITE_ALLOW_WRITE - The implementation is conservative and rather don't start rather than - go on unknown paths to start, the common cases are handled. - - NOTE: - In its current implementation it is only allowed to downgrade from - TL_WRITE_ONLY. In this case there are no waiters. Thus no wake up - logic is required. -*/ - -void thr_downgrade_write_lock(THR_LOCK_DATA *in_data, - enum thr_lock_type new_lock_type) -{ - THR_LOCK *lock=in_data->lock; -#ifndef DBUG_OFF - enum thr_lock_type old_lock_type= in_data->type; -#endif - DBUG_ENTER("thr_downgrade_write_only_lock"); - - mysql_mutex_lock(&lock->mutex); - DBUG_ASSERT(old_lock_type == TL_WRITE_ONLY); - DBUG_ASSERT(old_lock_type > new_lock_type); - in_data->type= new_lock_type; - check_locks(lock,"after downgrading lock",0); - - mysql_mutex_unlock(&lock->mutex); - DBUG_VOID_RETURN; -} - -/* Upgrade a WRITE_DELAY lock to a WRITE_LOCK */ - -my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data, - enum thr_lock_type new_lock_type, - ulong lock_wait_timeout) -{ - THR_LOCK *lock=data->lock; - DBUG_ENTER("thr_upgrade_write_delay_lock"); - - mysql_mutex_lock(&lock->mutex); - if (data->type == TL_UNLOCK || data->type >= TL_WRITE_LOW_PRIORITY) - { - mysql_mutex_unlock(&lock->mutex); - DBUG_RETURN(data->type == TL_UNLOCK); /* Test if Aborted */ - } - check_locks(lock,"before upgrading lock",0); - /* TODO: Upgrade to TL_WRITE_CONCURRENT_INSERT in some cases */ - data->type= new_lock_type; /* Upgrade lock */ - - /* Check if someone has given us the lock */ - if (!data->cond) - { - if (!lock->read.data) /* No read locks */ - { /* We have the lock */ - if (data->lock->get_status) - (*data->lock->get_status)(data->status_param, 0); - mysql_mutex_unlock(&lock->mutex); - DBUG_RETURN(0); - } - - if (((*data->prev)=data->next)) /* remove from lock-list */ - data->next->prev= data->prev; - else - lock->write.last=data->prev; - - if ((data->next=lock->write_wait.data)) /* Put first in lock_list */ - data->next->prev= &data->next; - else - lock->write_wait.last= &data->next; - data->prev= &lock->write_wait.data; - lock->write_wait.data=data; - check_locks(lock,"upgrading lock",0); - } - else - { - check_locks(lock,"waiting for lock",0); - } - DBUG_RETURN(wait_for_lock(&lock->write_wait,data,1, lock_wait_timeout)); -} - - -/* downgrade a WRITE lock to a WRITE_DELAY lock if there is pending locks */ - -my_bool thr_reschedule_write_lock(THR_LOCK_DATA *data, - ulong lock_wait_timeout) -{ - THR_LOCK *lock=data->lock; - enum thr_lock_type write_lock_type; - DBUG_ENTER("thr_reschedule_write_lock"); - - mysql_mutex_lock(&lock->mutex); - if (!lock->read_wait.data) /* No waiting read locks */ - { - mysql_mutex_unlock(&lock->mutex); - DBUG_RETURN(0); - } - - write_lock_type= data->type; - data->type=TL_WRITE_DELAYED; - if (lock->update_status) - (*lock->update_status)(data->status_param); - if (((*data->prev)=data->next)) /* remove from lock-list */ - data->next->prev= data->prev; - else - lock->write.last=data->prev; - - if ((data->next=lock->write_wait.data)) /* Put first in lock_list */ - data->next->prev= &data->next; - else - lock->write_wait.last= &data->next; - data->prev= &lock->write_wait.data; - data->cond=get_cond(); /* This was zero */ - lock->write_wait.data=data; - free_all_read_locks(lock,0); - - mysql_mutex_unlock(&lock->mutex); - DBUG_RETURN(thr_upgrade_write_delay_lock(data, write_lock_type, - lock_wait_timeout)); -} - - -#include - -static void thr_print_lock(const char* name,struct st_lock_list *list) -{ - THR_LOCK_DATA *data,**prev; - uint count=0; - - if (list->data) - { - printf("%-10s: ",name); - prev= &list->data; - for (data=list->data; data && count++ < MAX_LOCKS ; data=data->next) - { - printf("0x%lx (%lu:%d); ", (ulong) data, data->owner->thread_id, - (int) data->type); - if (data->prev != prev) - printf("\nWarning: prev didn't point at previous lock\n"); - prev= &data->next; - } - puts(""); - if (prev != list->last) - printf("Warning: last didn't point at last lock\n"); - } -} - -void thr_print_locks(void) -{ - LIST *list; - uint count=0; - - mysql_mutex_lock(&THR_LOCK_lock); - puts("Current locks:"); - for (list= thr_lock_thread_list; list && count++ < MAX_THREADS; - list= list_rest(list)) - { - THR_LOCK *lock=(THR_LOCK*) list->data; - mysql_mutex_lock(&lock->mutex); - printf("lock: 0x%lx:",(ulong) lock); - if ((lock->write_wait.data || lock->read_wait.data) && - (! lock->read.data && ! lock->write.data)) - printf(" WARNING: "); - if (lock->write.data) - printf(" write"); - if (lock->write_wait.data) - printf(" write_wait"); - if (lock->read.data) - printf(" read"); - if (lock->read_wait.data) - printf(" read_wait"); - puts(""); - thr_print_lock("write",&lock->write); - thr_print_lock("write_wait",&lock->write_wait); - thr_print_lock("read",&lock->read); - thr_print_lock("read_wait",&lock->read_wait); - mysql_mutex_unlock(&lock->mutex); - puts(""); - } - fflush(stdout); - mysql_mutex_unlock(&THR_LOCK_lock); -} - - -/***************************************************************************** -** Test of thread locks -****************************************************************************/ - -#ifdef MAIN - -struct st_test { - uint lock_nr; - enum thr_lock_type lock_type; -}; - -THR_LOCK locks[5]; /* 4 locks */ - -struct st_test test_0[] = {{0,TL_READ}}; /* One lock */ -struct st_test test_1[] = {{0,TL_READ},{0,TL_WRITE}}; /* Read and write lock of lock 0 */ -struct st_test test_2[] = {{1,TL_WRITE},{0,TL_READ},{2,TL_READ}}; -struct st_test test_3[] = {{2,TL_WRITE},{1,TL_READ},{0,TL_READ}}; /* Deadlock with test_2 ? */ -struct st_test test_4[] = {{0,TL_WRITE},{0,TL_READ},{0,TL_WRITE},{0,TL_READ}}; -struct st_test test_5[] = {{0,TL_READ},{1,TL_READ},{2,TL_READ},{3,TL_READ}}; /* Many reads */ -struct st_test test_6[] = {{0,TL_WRITE},{1,TL_WRITE},{2,TL_WRITE},{3,TL_WRITE}}; /* Many writes */ -struct st_test test_7[] = {{3,TL_READ}}; -struct st_test test_8[] = {{1,TL_READ_NO_INSERT},{2,TL_READ_NO_INSERT},{3,TL_READ_NO_INSERT}}; /* Should be quick */ -struct st_test test_9[] = {{4,TL_READ_HIGH_PRIORITY}}; -struct st_test test_10[] ={{4,TL_WRITE}}; -struct st_test test_11[] = {{0,TL_WRITE_LOW_PRIORITY},{1,TL_WRITE_LOW_PRIORITY},{2,TL_WRITE_LOW_PRIORITY},{3,TL_WRITE_LOW_PRIORITY}}; /* Many writes */ -struct st_test test_12[] = {{0,TL_WRITE_CONCURRENT_INSERT},{1,TL_WRITE_CONCURRENT_INSERT},{2,TL_WRITE_CONCURRENT_INSERT},{3,TL_WRITE_CONCURRENT_INSERT}}; -struct st_test test_13[] = {{0,TL_WRITE_CONCURRENT_INSERT},{1,TL_READ}}; -struct st_test test_14[] = {{0,TL_WRITE_ALLOW_WRITE},{1,TL_READ}}; -struct st_test test_15[] = {{0,TL_WRITE_ALLOW_WRITE},{1,TL_WRITE_ALLOW_WRITE}}; - -struct st_test *tests[] = {test_0,test_1,test_2,test_3,test_4,test_5,test_6, - test_7,test_8,test_9,test_10,test_11,test_12, - test_13,test_14,test_15}; -int lock_counts[]= {sizeof(test_0)/sizeof(struct st_test), - sizeof(test_1)/sizeof(struct st_test), - sizeof(test_2)/sizeof(struct st_test), - sizeof(test_3)/sizeof(struct st_test), - sizeof(test_4)/sizeof(struct st_test), - sizeof(test_5)/sizeof(struct st_test), - sizeof(test_6)/sizeof(struct st_test), - sizeof(test_7)/sizeof(struct st_test), - sizeof(test_8)/sizeof(struct st_test), - sizeof(test_9)/sizeof(struct st_test), - sizeof(test_10)/sizeof(struct st_test), - sizeof(test_11)/sizeof(struct st_test), - sizeof(test_12)/sizeof(struct st_test), - sizeof(test_13)/sizeof(struct st_test), - sizeof(test_14)/sizeof(struct st_test), - sizeof(test_15)/sizeof(struct st_test) -}; - - -static mysql_cond_t COND_thread_count; -static mysql_mutex_t LOCK_thread_count; -static uint thread_count; -static ulong sum=0; - -#define MAX_LOCK_COUNT 8 -#define TEST_TIMEOUT 100000 - -/* The following functions is for WRITE_CONCURRENT_INSERT */ - -static void test_get_status(void* param __attribute__((unused)), - int concurrent_insert __attribute__((unused))) -{ -} - -static void test_update_status(void* param __attribute__((unused))) -{ -} - -static void test_copy_status(void* to __attribute__((unused)) , - void *from __attribute__((unused))) -{ -} - -static my_bool test_check_status(void* param __attribute__((unused))) -{ - return 0; -} - - -static void *test_thread(void *arg) -{ - int i,j,param=*((int*) arg); - THR_LOCK_DATA data[MAX_LOCK_COUNT]; - THR_LOCK_INFO lock_info; - THR_LOCK_DATA *multi_locks[MAX_LOCK_COUNT]; - my_thread_init(); - - printf("Thread %s (%d) started\n",my_thread_name(),param); fflush(stdout); - - - thr_lock_info_init(&lock_info); - for (i=0; i < lock_counts[param] ; i++) - thr_lock_data_init(locks+tests[param][i].lock_nr,data+i,NULL); - for (j=1 ; j < 10 ; j++) /* try locking 10 times */ - { - for (i=0; i < lock_counts[param] ; i++) - { /* Init multi locks */ - multi_locks[i]= &data[i]; - data[i].type= tests[param][i].lock_type; - } - thr_multi_lock(multi_locks, lock_counts[param], &lock_info, TEST_TIMEOUT); - mysql_mutex_lock(&LOCK_thread_count); - { - int tmp=rand() & 7; /* Do something from 0-2 sec */ - if (tmp == 0) - sleep(1); - else if (tmp == 1) - sleep(2); - else - { - ulong k; - for (k=0 ; k < (ulong) (tmp-2)*100000L ; k++) - sum+=k; - } - } - mysql_mutex_unlock(&LOCK_thread_count); - thr_multi_unlock(multi_locks,lock_counts[param]); - } - - printf("Thread %s (%d) ended\n",my_thread_name(),param); fflush(stdout); - thr_print_locks(); - mysql_mutex_lock(&LOCK_thread_count); - thread_count--; - mysql_cond_signal(&COND_thread_count); /* Tell main we are ready */ - mysql_mutex_unlock(&LOCK_thread_count); - free((uchar*) arg); - return 0; -} - - -int main(int argc __attribute__((unused)),char **argv __attribute__((unused))) -{ - pthread_t tid; - pthread_attr_t thr_attr; - int i,*param,error; - MY_INIT(argv[0]); - if (argc > 1 && argv[1][0] == '-' && argv[1][1] == '#') - DBUG_PUSH(argv[1]+2); - - printf("Main thread: %s\n",my_thread_name()); - - if ((error= mysql_cond_init(0, &COND_thread_count, NULL))) - { - fprintf(stderr, "Got error: %d from mysql_cond_init (errno: %d)", - error,errno); - exit(1); - } - if ((error= mysql_mutex_init(0, &LOCK_thread_count, MY_MUTEX_INIT_FAST))) - { - fprintf(stderr, "Got error: %d from mysql_cond_init (errno: %d)", - error,errno); - exit(1); - } - - for (i=0 ; i < (int) array_elements(locks) ; i++) - { - thr_lock_init(locks+i); - locks[i].check_status= test_check_status; - locks[i].update_status=test_update_status; - locks[i].copy_status= test_copy_status; - locks[i].get_status= test_get_status; - } - if ((error=pthread_attr_init(&thr_attr))) - { - fprintf(stderr,"Got error: %d from pthread_attr_init (errno: %d)", - error,errno); - exit(1); - } - if ((error=pthread_attr_setdetachstate(&thr_attr,PTHREAD_CREATE_DETACHED))) - { - fprintf(stderr, - "Got error: %d from pthread_attr_setdetachstate (errno: %d)", - error,errno); - exit(1); - } -#ifndef pthread_attr_setstacksize /* void return value */ - if ((error=pthread_attr_setstacksize(&thr_attr,65536L))) - { - fprintf(stderr,"Got error: %d from pthread_attr_setstacksize (errno: %d)", - error,errno); - exit(1); - } -#endif -#ifdef HAVE_THR_SETCONCURRENCY - (void) thr_setconcurrency(2); -#endif - for (i=0 ; i < (int) array_elements(lock_counts) ; i++) - { - param=(int*) malloc(sizeof(int)); - *param=i; - - if ((error= mysql_mutex_lock(&LOCK_thread_count))) - { - fprintf(stderr, "Got error: %d from mysql_mutex_lock (errno: %d)", - error, errno); - exit(1); - } - if ((error= mysql_thread_create(0, - &tid, &thr_attr, test_thread, - (void*) param))) - { - fprintf(stderr, "Got error: %d from mysql_thread_create (errno: %d)\n", - error, errno); - mysql_mutex_unlock(&LOCK_thread_count); - exit(1); - } - thread_count++; - mysql_mutex_unlock(&LOCK_thread_count); - } - - pthread_attr_destroy(&thr_attr); - if ((error= mysql_mutex_lock(&LOCK_thread_count))) - fprintf(stderr, "Got error: %d from mysql_mutex_lock\n", error); - while (thread_count) - { - if ((error= mysql_cond_wait(&COND_thread_count, &LOCK_thread_count))) - fprintf(stderr, "Got error: %d from mysql_cond_wait\n", error); - } - if ((error= mysql_mutex_unlock(&LOCK_thread_count))) - fprintf(stderr, "Got error: %d from mysql_mutex_unlock\n", error); - for (i=0 ; i < (int) array_elements(locks) ; i++) - thr_lock_delete(locks+i); -#ifdef EXTRA_DEBUG - if (found_errors) - printf("Got %d warnings\n",found_errors); - else -#endif - printf("Test succeeded\n"); - return 0; -} - -#endif /* MAIN */ diff --git a/deps/mysqllite/mysys/thr_mutex.c b/deps/mysqllite/mysys/thr_mutex.c deleted file mode 100644 index 37ced4f7633ff5..00000000000000 --- a/deps/mysqllite/mysys/thr_mutex.c +++ /dev/null @@ -1,503 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB, 2008-2009 Sun Microsystems, Inc - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* This makes a wrapper for mutex handling to make it easier to debug mutex */ - -#include -#if defined(TARGET_OS_LINUX) && !defined (__USE_UNIX98) -#define __USE_UNIX98 /* To get rw locks under Linux */ -#endif -#if defined(SAFE_MUTEX) -#undef SAFE_MUTEX /* Avoid safe_mutex redefinitions */ -#include "mysys_priv.h" -#include "my_static.h" -#include - -#ifndef DO_NOT_REMOVE_THREAD_WRAPPERS -/* Remove wrappers */ -#undef pthread_mutex_t -#undef pthread_mutex_init -#undef pthread_mutex_lock -#undef pthread_mutex_unlock -#undef pthread_mutex_destroy -#undef pthread_cond_wait -#undef pthread_cond_timedwait -#ifdef HAVE_NONPOSIX_PTHREAD_MUTEX_INIT -#define pthread_mutex_init(a,b) my_pthread_mutex_init((a),(b)) -#endif -#endif /* DO_NOT_REMOVE_THREAD_WRAPPERS */ - -/* Not instrumented */ -static pthread_mutex_t THR_LOCK_mutex; -static ulong safe_mutex_count= 0; /* Number of mutexes created */ -#ifdef SAFE_MUTEX_DETECT_DESTROY -static struct st_safe_mutex_info_t *safe_mutex_root= NULL; -#endif - -void safe_mutex_global_init(void) -{ - pthread_mutex_init(&THR_LOCK_mutex,MY_MUTEX_INIT_FAST); -} - - -int safe_mutex_init(safe_mutex_t *mp, - const pthread_mutexattr_t *attr __attribute__((unused)), - const char *file, - uint line) -{ - bzero((char*) mp,sizeof(*mp)); - pthread_mutex_init(&mp->global,MY_MUTEX_INIT_ERRCHK); - pthread_mutex_init(&mp->mutex,attr); - /* Mark that mutex is initialized */ - mp->file= file; - mp->line= line; - -#ifdef SAFE_MUTEX_DETECT_DESTROY - /* - Monitor the freeing of mutexes. This code depends on single thread init - and destroy - */ - if ((mp->info= (safe_mutex_info_t *) malloc(sizeof(safe_mutex_info_t)))) - { - struct st_safe_mutex_info_t *info =mp->info; - - info->init_file= file; - info->init_line= line; - info->prev= NULL; - info->next= NULL; - - pthread_mutex_lock(&THR_LOCK_mutex); - if ((info->next= safe_mutex_root)) - safe_mutex_root->prev= info; - safe_mutex_root= info; - safe_mutex_count++; - pthread_mutex_unlock(&THR_LOCK_mutex); - } -#else - pthread_mutex_lock(&THR_LOCK_mutex); - safe_mutex_count++; - pthread_mutex_unlock(&THR_LOCK_mutex); -#endif /* SAFE_MUTEX_DETECT_DESTROY */ - return 0; -} - - -int safe_mutex_lock(safe_mutex_t *mp, my_bool try_lock, const char *file, uint line) -{ - int error; - if (!mp->file) - { - fprintf(stderr, - "safe_mutex: Trying to lock unitialized mutex at %s, line %d\n", - file, line); - fflush(stderr); - abort(); - } - - pthread_mutex_lock(&mp->global); - if (mp->count > 0) - { - if (try_lock) - { - pthread_mutex_unlock(&mp->global); - return EBUSY; - } - else if (pthread_equal(pthread_self(),mp->thread)) - { - fprintf(stderr, - "safe_mutex: Trying to lock mutex at %s, line %d, when the" - " mutex was already locked at %s, line %d in thread %s\n", - file,line,mp->file, mp->line, my_thread_name()); - fflush(stderr); - abort(); - } - } - pthread_mutex_unlock(&mp->global); - - /* - If we are imitating trylock(), we need to take special - precautions. - - - We cannot use pthread_mutex_lock() only since another thread can - overtake this thread and take the lock before this thread - causing pthread_mutex_trylock() to hang. In this case, we should - just return EBUSY. Hence, we use pthread_mutex_trylock() to be - able to return immediately. - - - We cannot just use trylock() and continue execution below, since - this would generate an error and abort execution if the thread - was overtaken and trylock() returned EBUSY . In this case, we - instead just return EBUSY, since this is the expected behaviour - of trylock(). - */ - if (try_lock) - { - error= pthread_mutex_trylock(&mp->mutex); - if (error == EBUSY) - return error; - } - else - error= pthread_mutex_lock(&mp->mutex); - - if (error || (error=pthread_mutex_lock(&mp->global))) - { - fprintf(stderr,"Got error %d when trying to lock mutex at %s, line %d\n", - error, file, line); - fflush(stderr); - abort(); - } - mp->thread= pthread_self(); - if (mp->count++) - { - fprintf(stderr,"safe_mutex: Error in thread libray: Got mutex at %s, \ -line %d more than 1 time\n", file,line); - fflush(stderr); - abort(); - } - mp->file= file; - mp->line=line; - pthread_mutex_unlock(&mp->global); - return error; -} - - -int safe_mutex_unlock(safe_mutex_t *mp,const char *file, uint line) -{ - int error; - pthread_mutex_lock(&mp->global); - if (mp->count == 0) - { - fprintf(stderr,"safe_mutex: Trying to unlock mutex that wasn't locked at %s, line %d\n Last used at %s, line: %d\n", - file,line,mp->file ? mp->file : "",mp->line); - fflush(stderr); - abort(); - } - if (!pthread_equal(pthread_self(),mp->thread)) - { - fprintf(stderr,"safe_mutex: Trying to unlock mutex at %s, line %d that was locked by another thread at: %s, line: %d\n", - file,line,mp->file,mp->line); - fflush(stderr); - abort(); - } - mp->thread= 0; - mp->count--; -#ifdef __WIN__ - pthread_mutex_unlock(&mp->mutex); - error=0; -#else - error=pthread_mutex_unlock(&mp->mutex); - if (error) - { - fprintf(stderr,"safe_mutex: Got error: %d (%d) when trying to unlock mutex at %s, line %d\n", error, errno, file, line); - fflush(stderr); - abort(); - } -#endif /* __WIN__ */ - pthread_mutex_unlock(&mp->global); - return error; -} - - -int safe_cond_wait(pthread_cond_t *cond, safe_mutex_t *mp, const char *file, - uint line) -{ - int error; - pthread_mutex_lock(&mp->global); - if (mp->count == 0) - { - fprintf(stderr,"safe_mutex: Trying to cond_wait on a unlocked mutex at %s, line %d\n",file,line); - fflush(stderr); - abort(); - } - if (!pthread_equal(pthread_self(),mp->thread)) - { - fprintf(stderr,"safe_mutex: Trying to cond_wait on a mutex at %s, line %d that was locked by another thread at: %s, line: %d\n", - file,line,mp->file,mp->line); - fflush(stderr); - abort(); - } - - if (mp->count-- != 1) - { - fprintf(stderr,"safe_mutex: Count was %d on locked mutex at %s, line %d\n", - mp->count+1, file, line); - fflush(stderr); - abort(); - } - pthread_mutex_unlock(&mp->global); - error=pthread_cond_wait(cond,&mp->mutex); - pthread_mutex_lock(&mp->global); - if (error) - { - fprintf(stderr,"safe_mutex: Got error: %d (%d) when doing a safe_mutex_wait at %s, line %d\n", error, errno, file, line); - fflush(stderr); - abort(); - } - mp->thread=pthread_self(); - if (mp->count++) - { - fprintf(stderr, - "safe_mutex: Count was %d in thread 0x%lx when locking mutex at %s, line %d\n", - mp->count-1, my_thread_dbug_id(), file, line); - fflush(stderr); - abort(); - } - mp->file= file; - mp->line=line; - pthread_mutex_unlock(&mp->global); - return error; -} - - -int safe_cond_timedwait(pthread_cond_t *cond, safe_mutex_t *mp, - const struct timespec *abstime, - const char *file, uint line) -{ - int error; - pthread_mutex_lock(&mp->global); - if (mp->count != 1 || !pthread_equal(pthread_self(),mp->thread)) - { - fprintf(stderr,"safe_mutex: Trying to cond_wait at %s, line %d on a not hold mutex\n",file,line); - fflush(stderr); - abort(); - } - mp->count--; /* Mutex will be released */ - pthread_mutex_unlock(&mp->global); - error=pthread_cond_timedwait(cond,&mp->mutex,abstime); -#ifdef EXTRA_DEBUG - if (error && (error != EINTR && error != ETIMEDOUT && error != ETIME)) - { - fprintf(stderr,"safe_mutex: Got error: %d (%d) when doing a safe_mutex_timedwait at %s, line %d\n", error, errno, file, line); - } -#endif - pthread_mutex_lock(&mp->global); - mp->thread=pthread_self(); - if (mp->count++) - { - fprintf(stderr, - "safe_mutex: Count was %d in thread 0x%lx when locking mutex at %s, line %d (error: %d (%d))\n", - mp->count-1, my_thread_dbug_id(), file, line, error, error); - fflush(stderr); - abort(); - } - mp->file= file; - mp->line=line; - pthread_mutex_unlock(&mp->global); - return error; -} - - -int safe_mutex_destroy(safe_mutex_t *mp, const char *file, uint line) -{ - int error=0; - if (!mp->file) - { - fprintf(stderr, - "safe_mutex: Trying to destroy unitialized mutex at %s, line %d\n", - file, line); - fflush(stderr); - abort(); - } - if (mp->count != 0) - { - fprintf(stderr,"safe_mutex: Trying to destroy a mutex that was locked at %s, line %d at %s, line %d\n", - mp->file,mp->line, file, line); - fflush(stderr); - abort(); - } -#ifdef __WIN__ - pthread_mutex_destroy(&mp->global); - pthread_mutex_destroy(&mp->mutex); -#else - if (pthread_mutex_destroy(&mp->global)) - error=1; - if (pthread_mutex_destroy(&mp->mutex)) - error=1; -#endif - mp->file= 0; /* Mark destroyed */ - -#ifdef SAFE_MUTEX_DETECT_DESTROY - if (mp->info) - { - struct st_safe_mutex_info_t *info= mp->info; - pthread_mutex_lock(&THR_LOCK_mutex); - - if (info->prev) - info->prev->next = info->next; - else - safe_mutex_root = info->next; - if (info->next) - info->next->prev = info->prev; - safe_mutex_count--; - - pthread_mutex_unlock(&THR_LOCK_mutex); - free(info); - mp->info= NULL; /* Get crash if double free */ - } -#else - pthread_mutex_lock(&THR_LOCK_mutex); - safe_mutex_count--; - pthread_mutex_unlock(&THR_LOCK_mutex); -#endif /* SAFE_MUTEX_DETECT_DESTROY */ - return error; -} - - -/* - Free global resources and check that all mutex has been destroyed - - SYNOPSIS - safe_mutex_end() - file Print errors on this file - - NOTES - We can't use DBUG_PRINT() here as we have in my_end() disabled - DBUG handling before calling this function. - - In MySQL one may get one warning for a mutex created in my_thr_init.c - This is ok, as this thread may not yet have been exited. -*/ - -void safe_mutex_end(FILE *file __attribute__((unused))) -{ - if (!safe_mutex_count) /* safetly */ - pthread_mutex_destroy(&THR_LOCK_mutex); -#ifdef SAFE_MUTEX_DETECT_DESTROY - if (!file) - return; - - if (safe_mutex_count) - { - fprintf(file, "Warning: Not destroyed mutex: %lu\n", safe_mutex_count); - (void) fflush(file); - } - { - struct st_safe_mutex_info_t *ptr; - for (ptr= safe_mutex_root ; ptr ; ptr= ptr->next) - { - fprintf(file, "\tMutex initiated at line %4u in '%s'\n", - ptr->init_line, ptr->init_file); - (void) fflush(file); - } - } -#endif /* SAFE_MUTEX_DETECT_DESTROY */ -} - -#endif /* SAFE_MUTEX */ - -#if defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX) - -#include "mysys_priv.h" -#include "my_static.h" -#include - -#include -#include -#include -#include -#include - -#undef pthread_mutex_t -#undef pthread_mutex_init -#undef pthread_mutex_lock -#undef pthread_mutex_trylock -#undef pthread_mutex_unlock -#undef pthread_mutex_destroy -#undef pthread_cond_wait -#undef pthread_cond_timedwait - -ulong mutex_delay(ulong delayloops) -{ - ulong i; - volatile ulong j; - - j = 0; - - for (i = 0; i < delayloops * 50; i++) - j += i; - - return(j); -} - -#define MY_PTHREAD_FASTMUTEX_SPINS 8 -#define MY_PTHREAD_FASTMUTEX_DELAY 4 - -static int cpu_count= 0; - -int my_pthread_fastmutex_init(my_pthread_fastmutex_t *mp, - const pthread_mutexattr_t *attr) -{ - if ((cpu_count > 1) && (attr == MY_MUTEX_INIT_FAST)) - mp->spins= MY_PTHREAD_FASTMUTEX_SPINS; - else - mp->spins= 0; - mp->rng_state= 1; - return pthread_mutex_init(&mp->mutex, attr); -} - -/** - Park-Miller random number generator. A simple linear congruential - generator that operates in multiplicative group of integers modulo n. - - x_{k+1} = (x_k g) mod n - - Popular pair of parameters: n = 2^32 − 5 = 4294967291 and g = 279470273. - The period of the generator is about 2^31. - Largest value that can be returned: 2147483646 (RAND_MAX) - - Reference: - - S. K. Park and K. W. Miller - "Random number generators: good ones are hard to find" - Commun. ACM, October 1988, Volume 31, No 10, pages 1192-1201. -*/ - -static double park_rng(my_pthread_fastmutex_t *mp) -{ - mp->rng_state= ((my_ulonglong)mp->rng_state * 279470273U) % 4294967291U; - return (mp->rng_state / 2147483647.0); -} - -int my_pthread_fastmutex_lock(my_pthread_fastmutex_t *mp) -{ - int res; - uint i; - uint maxdelay= MY_PTHREAD_FASTMUTEX_DELAY; - - for (i= 0; i < mp->spins; i++) - { - res= pthread_mutex_trylock(&mp->mutex); - - if (res == 0) - return 0; - - if (res != EBUSY) - return res; - - mutex_delay(maxdelay); - maxdelay += park_rng(mp) * MY_PTHREAD_FASTMUTEX_DELAY + 1; - } - return pthread_mutex_lock(&mp->mutex); -} - - -void fastmutex_global_init(void) -{ -#ifdef _SC_NPROCESSORS_CONF - cpu_count= sysconf(_SC_NPROCESSORS_CONF); -#endif -} - -#endif /* defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX) */ diff --git a/deps/mysqllite/mysys/thr_rwlock.c b/deps/mysqllite/mysys/thr_rwlock.c deleted file mode 100644 index bad80b43eef1b2..00000000000000 --- a/deps/mysqllite/mysys/thr_rwlock.c +++ /dev/null @@ -1,472 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Synchronization - readers / writer thread locks */ - -#include "mysys_priv.h" -#if defined(NEED_MY_RW_LOCK) -#include - -#ifdef _WIN32 - -static BOOL have_srwlock= FALSE; -/* Prototypes and function pointers for windows functions */ -typedef VOID (WINAPI* srw_func) (PSRWLOCK SRWLock); -typedef BOOL (WINAPI* srw_bool_func) (PSRWLOCK SRWLock); - -static srw_func my_InitializeSRWLock; -static srw_func my_AcquireSRWLockExclusive; -static srw_func my_ReleaseSRWLockExclusive; -static srw_func my_AcquireSRWLockShared; -static srw_func my_ReleaseSRWLockShared; - -static srw_bool_func my_TryAcquireSRWLockExclusive; -static srw_bool_func my_TryAcquireSRWLockShared; - -/** - Check for presence of Windows slim reader writer lock function. - Load function pointers. -*/ - -static void check_srwlock_availability(void) -{ - HMODULE module= GetModuleHandle("kernel32"); - - my_InitializeSRWLock= (srw_func) GetProcAddress(module, - "InitializeSRWLock"); - my_AcquireSRWLockExclusive= (srw_func) GetProcAddress(module, - "AcquireSRWLockExclusive"); - my_AcquireSRWLockShared= (srw_func) GetProcAddress(module, - "AcquireSRWLockShared"); - my_ReleaseSRWLockExclusive= (srw_func) GetProcAddress(module, - "ReleaseSRWLockExclusive"); - my_ReleaseSRWLockShared= (srw_func) GetProcAddress(module, - "ReleaseSRWLockShared"); - my_TryAcquireSRWLockExclusive= (srw_bool_func) GetProcAddress(module, - "TryAcquireSRWLockExclusive"); - my_TryAcquireSRWLockShared= (srw_bool_func) GetProcAddress(module, - "TryAcquireSRWLockShared"); - - /* - We currently require TryAcquireSRWLockExclusive. This API is missing on - Vista, this means SRWLock are only used starting with Win7. - - If "trylock" usage for rwlocks is eliminated from server codebase (it is used - in a single place currently, in query cache), then SRWLock can be enabled on - Vista too. In this case condition below needs to be changed to e.g check - for my_InitializeSRWLock. - */ - - if (my_TryAcquireSRWLockExclusive) - have_srwlock= TRUE; - -} - - -static int srw_init(my_rw_lock_t *rwp) -{ - my_InitializeSRWLock(&rwp->srwlock); - rwp->have_exclusive_srwlock = FALSE; - return 0; -} - - -static int srw_rdlock(my_rw_lock_t *rwp) -{ - my_AcquireSRWLockShared(&rwp->srwlock); - return 0; -} - - -static int srw_tryrdlock(my_rw_lock_t *rwp) -{ - - if (!my_TryAcquireSRWLockShared(&rwp->srwlock)) - return EBUSY; - return 0; -} - - -static int srw_wrlock(my_rw_lock_t *rwp) -{ - my_AcquireSRWLockExclusive(&rwp->srwlock); - rwp->have_exclusive_srwlock= TRUE; - return 0; -} - - -static int srw_trywrlock(my_rw_lock_t *rwp) -{ - if (!my_TryAcquireSRWLockExclusive(&rwp->srwlock)) - return EBUSY; - rwp->have_exclusive_srwlock= TRUE; - return 0; -} - - -static int srw_unlock(my_rw_lock_t *rwp) -{ - if (rwp->have_exclusive_srwlock) - { - rwp->have_exclusive_srwlock= FALSE; - my_ReleaseSRWLockExclusive(&rwp->srwlock); - } - else - { - my_ReleaseSRWLockShared(&rwp->srwlock); - } - return 0; -} - -#endif /*_WIN32 */ - -/* - Source base from Sun Microsystems SPILT, simplified for MySQL use - -- Joshua Chamas - Some cleanup and additional code by Monty -*/ - -/* -* Multithreaded Demo Source -* -* Copyright (C) 1995 by Sun Microsystems, Inc. -* All rights reserved. -* -* This file is a product of SunSoft, Inc. and is provided for -* unrestricted use provided that this legend is included on all -* media and as a part of the software program in whole or part. -* Users may copy, modify or distribute this file at will. -* -* THIS FILE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING -* THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR -* PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. -* -* This file is provided with no support and without any obligation on the -* part of SunSoft, Inc. to assist in its use, correction, modification or -* enhancement. -* -* SUNSOFT AND SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT -* TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS -* FILE OR ANY PART THEREOF. -* -* IN NO EVENT WILL SUNSOFT OR SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY -* LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL -* DAMAGES, EVEN IF THEY HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGES. -* -* SunSoft, Inc. -* 2550 Garcia Avenue -* Mountain View, California 94043 -*/ - -int my_rw_init(my_rw_lock_t *rwp) -{ - pthread_condattr_t cond_attr; - -#ifdef _WIN32 - /* - Once initialization is used here rather than in my_init(), in order to - - avoid my_init() pitfalls- (undefined order in which initialization should - run) - - be potentially useful C++ (static constructors) - - just to simplify the API. - Also, the overhead is of my_pthread_once is very small. - */ - static my_pthread_once_t once_control= MY_PTHREAD_ONCE_INIT; - my_pthread_once(&once_control, check_srwlock_availability); - - if (have_srwlock) - return srw_init(rwp); -#endif - - pthread_mutex_init( &rwp->lock, MY_MUTEX_INIT_FAST); - pthread_condattr_init( &cond_attr ); - pthread_cond_init( &rwp->readers, &cond_attr ); - pthread_cond_init( &rwp->writers, &cond_attr ); - pthread_condattr_destroy(&cond_attr); - - rwp->state = 0; - rwp->waiters = 0; -#ifdef SAFE_MUTEX - rwp->write_thread = 0; -#endif - - return(0); -} - - -int my_rw_destroy(my_rw_lock_t *rwp) -{ -#ifdef _WIN32 - if (have_srwlock) - return 0; /* no destroy function */ -#endif - DBUG_ASSERT(rwp->state == 0); - pthread_mutex_destroy( &rwp->lock ); - pthread_cond_destroy( &rwp->readers ); - pthread_cond_destroy( &rwp->writers ); - return(0); -} - - -int my_rw_rdlock(my_rw_lock_t *rwp) -{ -#ifdef _WIN32 - if (have_srwlock) - return srw_rdlock(rwp); -#endif - - pthread_mutex_lock(&rwp->lock); - - /* active or queued writers */ - while (( rwp->state < 0 ) || rwp->waiters) - pthread_cond_wait( &rwp->readers, &rwp->lock); - - rwp->state++; - pthread_mutex_unlock(&rwp->lock); - return(0); -} - -int my_rw_tryrdlock(my_rw_lock_t *rwp) -{ - int res; - -#ifdef _WIN32 - if (have_srwlock) - return srw_tryrdlock(rwp); -#endif - - pthread_mutex_lock(&rwp->lock); - if ((rwp->state < 0 ) || rwp->waiters) - res= EBUSY; /* Can't get lock */ - else - { - res=0; - rwp->state++; - } - pthread_mutex_unlock(&rwp->lock); - return(res); -} - - -int my_rw_wrlock(my_rw_lock_t *rwp) -{ -#ifdef _WIN32 - if (have_srwlock) - return srw_wrlock(rwp); -#endif - - pthread_mutex_lock(&rwp->lock); - rwp->waiters++; /* another writer queued */ - - my_rw_lock_assert_not_write_owner(rwp); - - while (rwp->state) - pthread_cond_wait(&rwp->writers, &rwp->lock); - rwp->state = -1; - rwp->waiters--; -#ifdef SAFE_MUTEX - rwp->write_thread= pthread_self(); -#endif - pthread_mutex_unlock(&rwp->lock); - return(0); -} - - -int my_rw_trywrlock(my_rw_lock_t *rwp) -{ - int res; - -#ifdef _WIN32 - if (have_srwlock) - return srw_trywrlock(rwp); -#endif - - pthread_mutex_lock(&rwp->lock); - if (rwp->state) - res= EBUSY; /* Can't get lock */ - else - { - res=0; - rwp->state = -1; -#ifdef SAFE_MUTEX - rwp->write_thread= pthread_self(); -#endif - } - pthread_mutex_unlock(&rwp->lock); - return(res); -} - - -int my_rw_unlock(my_rw_lock_t *rwp) -{ -#ifdef _WIN32 - if (have_srwlock) - return srw_unlock(rwp); -#endif - - DBUG_PRINT("rw_unlock", - ("state: %d waiters: %d", rwp->state, rwp->waiters)); - pthread_mutex_lock(&rwp->lock); - - DBUG_ASSERT(rwp->state != 0); - - if (rwp->state == -1) /* writer releasing */ - { - my_rw_lock_assert_write_owner(rwp); - rwp->state= 0; /* mark as available */ -#ifdef SAFE_MUTEX - rwp->write_thread= 0; -#endif - - if ( rwp->waiters ) /* writers queued */ - pthread_cond_signal( &rwp->writers ); - else - pthread_cond_broadcast( &rwp->readers ); - } - else - { - if ( --rwp->state == 0 && /* no more readers */ - rwp->waiters) - pthread_cond_signal( &rwp->writers ); - } - - pthread_mutex_unlock( &rwp->lock ); - return(0); -} - -#endif /* defined(NEED_MY_RW_LOCK) */ - - -int rw_pr_init(rw_pr_lock_t *rwlock) -{ - pthread_mutex_init(&rwlock->lock, NULL); - pthread_cond_init(&rwlock->no_active_readers, NULL); - rwlock->active_readers= 0; - rwlock->writers_waiting_readers= 0; - rwlock->active_writer= FALSE; -#ifdef SAFE_MUTEX - rwlock->writer_thread= 0; -#endif - return 0; -} - - -int rw_pr_destroy(rw_pr_lock_t *rwlock) -{ - pthread_cond_destroy(&rwlock->no_active_readers); - pthread_mutex_destroy(&rwlock->lock); - return 0; -} - - -int rw_pr_rdlock(rw_pr_lock_t *rwlock) -{ - pthread_mutex_lock(&rwlock->lock); - /* - The fact that we were able to acquire 'lock' mutex means - that there are no active writers and we can acquire rd-lock. - Increment active readers counter to prevent requests for - wr-lock from succeeding and unlock mutex. - */ - rwlock->active_readers++; - pthread_mutex_unlock(&rwlock->lock); - return 0; -} - - -int rw_pr_wrlock(rw_pr_lock_t *rwlock) -{ - pthread_mutex_lock(&rwlock->lock); - - if (rwlock->active_readers != 0) - { - /* There are active readers. We have to wait until they are gone. */ - rwlock->writers_waiting_readers++; - - while (rwlock->active_readers != 0) - pthread_cond_wait(&rwlock->no_active_readers, &rwlock->lock); - - rwlock->writers_waiting_readers--; - } - - /* - We own 'lock' mutex so there is no active writers. - Also there are no active readers. - This means that we can grant wr-lock. - Not releasing 'lock' mutex until unlock will block - both requests for rd and wr-locks. - Set 'active_writer' flag to simplify unlock. - - Thanks to the fact wr-lock/unlock in the absence of - contention from readers is essentially mutex lock/unlock - with a few simple checks make this rwlock implementation - wr-lock optimized. - */ - rwlock->active_writer= TRUE; -#ifdef SAFE_MUTEX - rwlock->writer_thread= pthread_self(); -#endif - return 0; -} - - -int rw_pr_unlock(rw_pr_lock_t *rwlock) -{ - if (rwlock->active_writer) - { - /* We are unlocking wr-lock. */ -#ifdef SAFE_MUTEX - rwlock->writer_thread= 0; -#endif - rwlock->active_writer= FALSE; - if (rwlock->writers_waiting_readers) - { - /* - Avoid expensive cond signal in case when there is no contention - or it is wr-only. - - Note that from view point of performance it would be better to - signal on the condition variable after unlocking mutex (as it - reduces number of contex switches). - - Unfortunately this would mean that such rwlock can't be safely - used by MDL subsystem, which relies on the fact that it is OK - to destroy rwlock once it is in unlocked state. - */ - pthread_cond_signal(&rwlock->no_active_readers); - } - pthread_mutex_unlock(&rwlock->lock); - } - else - { - /* We are unlocking rd-lock. */ - pthread_mutex_lock(&rwlock->lock); - rwlock->active_readers--; - if (rwlock->active_readers == 0 && - rwlock->writers_waiting_readers) - { - /* - If we are last reader and there are waiting - writers wake them up. - */ - pthread_cond_signal(&rwlock->no_active_readers); - } - pthread_mutex_unlock(&rwlock->lock); - } - return 0; -} - - diff --git a/deps/mysqllite/mysys/tree.c b/deps/mysqllite/mysys/tree.c deleted file mode 100644 index 8ea7102ed4c495..00000000000000 --- a/deps/mysqllite/mysys/tree.c +++ /dev/null @@ -1,757 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Code for handling red-black (balanced) binary trees. - key in tree is allocated accrding to following: - - 1) If size < 0 then tree will not allocate keys and only a pointer to - each key is saved in tree. - compare and search functions uses and returns key-pointer - - 2) If size == 0 then there are two options: - - key_size != 0 to tree_insert: The key will be stored in the tree. - - key_size == 0 to tree_insert: A pointer to the key is stored. - compare and search functions uses and returns key-pointer. - - 3) if key_size is given to init_tree then each node will continue the - key and calls to insert_key may increase length of key. - if key_size > sizeof(pointer) and key_size is a multiple of 8 (double - allign) then key will be put on a 8 alligned adress. Else - the key will be on adress (element+1). This is transparent for user - compare and search functions uses a pointer to given key-argument. - - - If you use a free function for tree-elements and you are freeing - the element itself, you should use key_size = 0 to init_tree and - tree_search - - The actual key in TREE_ELEMENT is saved as a pointer or after the - TREE_ELEMENT struct. - If one uses only pointers in tree one can use tree_set_pointer() to - change address of data. - - Implemented by monty. -*/ - -/* - NOTE: - tree->compare function should be ALWAYS called as - (*tree->compare)(custom_arg, ELEMENT_KEY(tree,element), key) - and not other way around, as - (*tree->compare)(custom_arg, key, ELEMENT_KEY(tree,element)) - - ft_boolean_search.c (at least) relies on that. -*/ - -#include "mysys_priv.h" -#include -#include -#include "my_base.h" - -#define BLACK 1 -#define RED 0 -#define DEFAULT_ALLOC_SIZE 8192 -#define DEFAULT_ALIGN_SIZE 8192 - -static void delete_tree_element(TREE *,TREE_ELEMENT *); -static int tree_walk_left_root_right(TREE *,TREE_ELEMENT *, - tree_walk_action,void *); -static int tree_walk_right_root_left(TREE *,TREE_ELEMENT *, - tree_walk_action,void *); -static void left_rotate(TREE_ELEMENT **parent,TREE_ELEMENT *leaf); -static void right_rotate(TREE_ELEMENT **parent, TREE_ELEMENT *leaf); -static void rb_insert(TREE *tree,TREE_ELEMENT ***parent, - TREE_ELEMENT *leaf); -static void rb_delete_fixup(TREE *tree,TREE_ELEMENT ***parent); - - - /* The actuall code for handling binary trees */ - -#ifndef DBUG_OFF -static int test_rb_tree(TREE_ELEMENT *element); -#endif - -void init_tree(TREE *tree, ulong default_alloc_size, ulong memory_limit, - int size, qsort_cmp2 compare, my_bool with_delete, - tree_element_free free_element, void *custom_arg) -{ - DBUG_ENTER("init_tree"); - DBUG_PRINT("enter",("tree: 0x%lx size: %d", (long) tree, size)); - - if (default_alloc_size < DEFAULT_ALLOC_SIZE) - default_alloc_size= DEFAULT_ALLOC_SIZE; - default_alloc_size= MY_ALIGN(default_alloc_size, DEFAULT_ALIGN_SIZE); - bzero((uchar*) &tree->null_element,sizeof(tree->null_element)); - tree->root= &tree->null_element; - tree->compare=compare; - tree->size_of_element=size > 0 ? (uint) size : 0; - tree->memory_limit=memory_limit; - tree->free=free_element; - tree->allocated=0; - tree->elements_in_tree=0; - tree->custom_arg = custom_arg; - tree->null_element.colour=BLACK; - tree->null_element.left=tree->null_element.right=0; - tree->flag= 0; - if (!free_element && size >= 0 && - ((uint) size <= sizeof(void*) || ((uint) size & (sizeof(void*)-1)))) - { - /* - We know that the data doesn't have to be aligned (like if the key - contains a double), so we can store the data combined with the - TREE_ELEMENT. - */ - tree->offset_to_key=sizeof(TREE_ELEMENT); /* Put key after element */ - /* Fix allocation size so that we don't lose any memory */ - default_alloc_size/=(sizeof(TREE_ELEMENT)+size); - if (!default_alloc_size) - default_alloc_size=1; - default_alloc_size*=(sizeof(TREE_ELEMENT)+size); - } - else - { - tree->offset_to_key=0; /* use key through pointer */ - tree->size_of_element+=sizeof(void*); - } - if (!(tree->with_delete=with_delete)) - { - init_alloc_root(&tree->mem_root, (uint) default_alloc_size, 0); - tree->mem_root.min_malloc=(sizeof(TREE_ELEMENT)+tree->size_of_element); - } - DBUG_VOID_RETURN; -} - -static void free_tree(TREE *tree, myf free_flags) -{ - DBUG_ENTER("free_tree"); - DBUG_PRINT("enter",("tree: 0x%lx", (long) tree)); - - if (tree->root) /* If initialized */ - { - if (tree->with_delete) - delete_tree_element(tree,tree->root); - else - { - if (tree->free) - { - if (tree->memory_limit) - (*tree->free)(NULL, free_init, tree->custom_arg); - delete_tree_element(tree,tree->root); - if (tree->memory_limit) - (*tree->free)(NULL, free_end, tree->custom_arg); - } - free_root(&tree->mem_root, free_flags); - } - } - tree->root= &tree->null_element; - tree->elements_in_tree=0; - tree->allocated=0; - - DBUG_VOID_RETURN; -} - -void delete_tree(TREE* tree) -{ - free_tree(tree, MYF(0)); /* my_free() mem_root if applicable */ -} - -void reset_tree(TREE* tree) -{ - /* do not free mem_root, just mark blocks as free */ - free_tree(tree, MYF(MY_MARK_BLOCKS_FREE)); -} - - -static void delete_tree_element(TREE *tree, TREE_ELEMENT *element) -{ - if (element != &tree->null_element) - { - delete_tree_element(tree,element->left); - if (tree->free) - (*tree->free)(ELEMENT_KEY(tree,element), free_free, tree->custom_arg); - delete_tree_element(tree,element->right); - if (tree->with_delete) - my_free(element); - } -} - - -/* - insert, search and delete of elements - - The following should be true: - parent[0] = & parent[-1][0]->left || - parent[0] = & parent[-1][0]->right -*/ - -TREE_ELEMENT *tree_insert(TREE *tree, void *key, uint key_size, - void* custom_arg) -{ - int cmp; - TREE_ELEMENT *element,***parent; - - parent= tree->parents; - *parent = &tree->root; element= tree->root; - for (;;) - { - if (element == &tree->null_element || - (cmp = (*tree->compare)(custom_arg, ELEMENT_KEY(tree,element), - key)) == 0) - break; - if (cmp < 0) - { - *++parent= &element->right; element= element->right; - } - else - { - *++parent = &element->left; element= element->left; - } - } - if (element == &tree->null_element) - { - uint alloc_size=sizeof(TREE_ELEMENT)+key_size+tree->size_of_element; - tree->allocated+=alloc_size; - - if (tree->memory_limit && tree->elements_in_tree - && tree->allocated > tree->memory_limit) - { - reset_tree(tree); - return tree_insert(tree, key, key_size, custom_arg); - } - - key_size+=tree->size_of_element; - if (tree->with_delete) - element=(TREE_ELEMENT *) my_malloc(alloc_size, MYF(MY_WME)); - else - element=(TREE_ELEMENT *) alloc_root(&tree->mem_root,alloc_size); - if (!element) - return(NULL); - **parent=element; - element->left=element->right= &tree->null_element; - if (!tree->offset_to_key) - { - if (key_size == sizeof(void*)) /* no length, save pointer */ - *((void**) (element+1))=key; - else - { - *((void**) (element+1))= (void*) ((void **) (element+1)+1); - memcpy((uchar*) *((void **) (element+1)),key, - (size_t) (key_size-sizeof(void*))); - } - } - else - memcpy((uchar*) element+tree->offset_to_key,key,(size_t) key_size); - element->count=1; /* May give warning in purify */ - tree->elements_in_tree++; - rb_insert(tree,parent,element); /* rebalance tree */ - } - else - { - if (tree->flag & TREE_NO_DUPS) - return(NULL); - element->count++; - /* Avoid a wrap over of the count. */ - if (! element->count) - element->count--; - } - DBUG_EXECUTE("check_tree", test_rb_tree(tree->root);); - return element; -} - -int tree_delete(TREE *tree, void *key, uint key_size, void *custom_arg) -{ - int cmp,remove_colour; - TREE_ELEMENT *element,***parent, ***org_parent, *nod; - if (!tree->with_delete) - return 1; /* not allowed */ - - parent= tree->parents; - *parent= &tree->root; element= tree->root; - for (;;) - { - if (element == &tree->null_element) - return 1; /* Was not in tree */ - if ((cmp = (*tree->compare)(custom_arg, ELEMENT_KEY(tree,element), - key)) == 0) - break; - if (cmp < 0) - { - *++parent= &element->right; element= element->right; - } - else - { - *++parent = &element->left; element= element->left; - } - } - if (element->left == &tree->null_element) - { - (**parent)=element->right; - remove_colour= element->colour; - } - else if (element->right == &tree->null_element) - { - (**parent)=element->left; - remove_colour= element->colour; - } - else - { - org_parent= parent; - *++parent= &element->right; nod= element->right; - while (nod->left != &tree->null_element) - { - *++parent= &nod->left; nod= nod->left; - } - (**parent)=nod->right; /* unlink nod from tree */ - remove_colour= nod->colour; - org_parent[0][0]=nod; /* put y in place of element */ - org_parent[1]= &nod->right; - nod->left=element->left; - nod->right=element->right; - nod->colour=element->colour; - } - if (remove_colour == BLACK) - rb_delete_fixup(tree,parent); - if (tree->free) - (*tree->free)(ELEMENT_KEY(tree,element), free_free, tree->custom_arg); - tree->allocated-= sizeof(TREE_ELEMENT) + tree->size_of_element + key_size; - my_free(element); - tree->elements_in_tree--; - return 0; -} - - -void *tree_search(TREE *tree, void *key, void *custom_arg) -{ - int cmp; - TREE_ELEMENT *element=tree->root; - - for (;;) - { - if (element == &tree->null_element) - return (void*) 0; - if ((cmp = (*tree->compare)(custom_arg, ELEMENT_KEY(tree,element), - key)) == 0) - return ELEMENT_KEY(tree,element); - if (cmp < 0) - element=element->right; - else - element=element->left; - } -} - -void *tree_search_key(TREE *tree, const void *key, - TREE_ELEMENT **parents, TREE_ELEMENT ***last_pos, - enum ha_rkey_function flag, void *custom_arg) -{ - int cmp; - TREE_ELEMENT *element= tree->root; - TREE_ELEMENT **last_left_step_parent= NULL, **last_right_step_parent= NULL; - TREE_ELEMENT **last_equal_element= NULL; - -/* - TODO: support for HA_READ_KEY_OR_PREV, HA_READ_PREFIX flags if needed. -*/ - - *parents = &tree->null_element; - while (element != &tree->null_element) - { - *++parents= element; - if ((cmp= (*tree->compare)(custom_arg, ELEMENT_KEY(tree, element), - key)) == 0) - { - switch (flag) { - case HA_READ_KEY_EXACT: - case HA_READ_KEY_OR_NEXT: - case HA_READ_BEFORE_KEY: - last_equal_element= parents; - cmp= 1; - break; - case HA_READ_AFTER_KEY: - cmp= -1; - break; - case HA_READ_PREFIX_LAST: - case HA_READ_PREFIX_LAST_OR_PREV: - last_equal_element= parents; - cmp= -1; - break; - default: - return NULL; - } - } - if (cmp < 0) /* element < key */ - { - last_right_step_parent= parents; - element= element->right; - } - else - { - last_left_step_parent= parents; - element= element->left; - } - } - switch (flag) { - case HA_READ_KEY_EXACT: - case HA_READ_PREFIX_LAST: - *last_pos= last_equal_element; - break; - case HA_READ_KEY_OR_NEXT: - *last_pos= last_equal_element ? last_equal_element : last_left_step_parent; - break; - case HA_READ_AFTER_KEY: - *last_pos= last_left_step_parent; - break; - case HA_READ_PREFIX_LAST_OR_PREV: - *last_pos= last_equal_element ? last_equal_element : last_right_step_parent; - break; - case HA_READ_BEFORE_KEY: - *last_pos= last_right_step_parent; - break; - default: - return NULL; - } - return *last_pos ? ELEMENT_KEY(tree, **last_pos) : NULL; -} - -/* - Search first (the most left) or last (the most right) tree element -*/ -void *tree_search_edge(TREE *tree, TREE_ELEMENT **parents, - TREE_ELEMENT ***last_pos, int child_offs) -{ - TREE_ELEMENT *element= tree->root; - - *parents= &tree->null_element; - while (element != &tree->null_element) - { - *++parents= element; - element= ELEMENT_CHILD(element, child_offs); - } - *last_pos= parents; - return **last_pos != &tree->null_element ? - ELEMENT_KEY(tree, **last_pos) : NULL; -} - -void *tree_search_next(TREE *tree, TREE_ELEMENT ***last_pos, int l_offs, - int r_offs) -{ - TREE_ELEMENT *x= **last_pos; - - if (ELEMENT_CHILD(x, r_offs) != &tree->null_element) - { - x= ELEMENT_CHILD(x, r_offs); - *++*last_pos= x; - while (ELEMENT_CHILD(x, l_offs) != &tree->null_element) - { - x= ELEMENT_CHILD(x, l_offs); - *++*last_pos= x; - } - return ELEMENT_KEY(tree, x); - } - else - { - TREE_ELEMENT *y= *--*last_pos; - while (y != &tree->null_element && x == ELEMENT_CHILD(y, r_offs)) - { - x= y; - y= *--*last_pos; - } - return y == &tree->null_element ? NULL : ELEMENT_KEY(tree, y); - } -} - -/* - Expected that tree is fully balanced - (each path from root to leaf has the same length) -*/ -ha_rows tree_record_pos(TREE *tree, const void *key, - enum ha_rkey_function flag, void *custom_arg) -{ - int cmp; - TREE_ELEMENT *element= tree->root; - double left= 1; - double right= tree->elements_in_tree; - - while (element != &tree->null_element) - { - if ((cmp= (*tree->compare)(custom_arg, ELEMENT_KEY(tree, element), - key)) == 0) - { - switch (flag) { - case HA_READ_KEY_EXACT: - case HA_READ_BEFORE_KEY: - cmp= 1; - break; - case HA_READ_AFTER_KEY: - cmp= -1; - break; - default: - return HA_POS_ERROR; - } - } - if (cmp < 0) /* element < key */ - { - element= element->right; - left= (left + right) / 2; - } - else - { - element= element->left; - right= (left + right) / 2; - } - } - switch (flag) { - case HA_READ_KEY_EXACT: - case HA_READ_BEFORE_KEY: - return (ha_rows) right; - case HA_READ_AFTER_KEY: - return (ha_rows) left; - default: - return HA_POS_ERROR; - } -} - -int tree_walk(TREE *tree, tree_walk_action action, void *argument, TREE_WALK visit) -{ - switch (visit) { - case left_root_right: - return tree_walk_left_root_right(tree,tree->root,action,argument); - case right_root_left: - return tree_walk_right_root_left(tree,tree->root,action,argument); - } - return 0; /* Keep gcc happy */ -} - -static int tree_walk_left_root_right(TREE *tree, TREE_ELEMENT *element, tree_walk_action action, void *argument) -{ - int error; - if (element->left) /* Not null_element */ - { - if ((error=tree_walk_left_root_right(tree,element->left,action, - argument)) == 0 && - (error=(*action)(ELEMENT_KEY(tree,element), - (element_count) element->count, - argument)) == 0) - error=tree_walk_left_root_right(tree,element->right,action,argument); - return error; - } - return 0; -} - -static int tree_walk_right_root_left(TREE *tree, TREE_ELEMENT *element, tree_walk_action action, void *argument) -{ - int error; - if (element->right) /* Not null_element */ - { - if ((error=tree_walk_right_root_left(tree,element->right,action, - argument)) == 0 && - (error=(*action)(ELEMENT_KEY(tree,element), - (element_count) element->count, - argument)) == 0) - error=tree_walk_right_root_left(tree,element->left,action,argument); - return error; - } - return 0; -} - - - /* Functions to fix up the tree after insert and delete */ - -static void left_rotate(TREE_ELEMENT **parent, TREE_ELEMENT *leaf) -{ - TREE_ELEMENT *y; - - y=leaf->right; - leaf->right=y->left; - parent[0]=y; - y->left=leaf; -} - -static void right_rotate(TREE_ELEMENT **parent, TREE_ELEMENT *leaf) -{ - TREE_ELEMENT *x; - - x=leaf->left; - leaf->left=x->right; - parent[0]=x; - x->right=leaf; -} - -static void rb_insert(TREE *tree, TREE_ELEMENT ***parent, TREE_ELEMENT *leaf) -{ - TREE_ELEMENT *y,*par,*par2; - - leaf->colour=RED; - while (leaf != tree->root && (par=parent[-1][0])->colour == RED) - { - if (par == (par2=parent[-2][0])->left) - { - y= par2->right; - if (y->colour == RED) - { - par->colour=BLACK; - y->colour=BLACK; - leaf=par2; - parent-=2; - leaf->colour=RED; /* And the loop continues */ - } - else - { - if (leaf == par->right) - { - left_rotate(parent[-1],par); - par=leaf; /* leaf is now parent to old leaf */ - } - par->colour=BLACK; - par2->colour=RED; - right_rotate(parent[-2],par2); - break; - } - } - else - { - y= par2->left; - if (y->colour == RED) - { - par->colour=BLACK; - y->colour=BLACK; - leaf=par2; - parent-=2; - leaf->colour=RED; /* And the loop continues */ - } - else - { - if (leaf == par->left) - { - right_rotate(parent[-1],par); - par=leaf; - } - par->colour=BLACK; - par2->colour=RED; - left_rotate(parent[-2],par2); - break; - } - } - } - tree->root->colour=BLACK; -} - -static void rb_delete_fixup(TREE *tree, TREE_ELEMENT ***parent) -{ - TREE_ELEMENT *x,*w,*par; - - x= **parent; - while (x != tree->root && x->colour == BLACK) - { - if (x == (par=parent[-1][0])->left) - { - w=par->right; - if (w->colour == RED) - { - w->colour=BLACK; - par->colour=RED; - left_rotate(parent[-1],par); - parent[0]= &w->left; - *++parent= &par->left; - w=par->right; - } - if (w->left->colour == BLACK && w->right->colour == BLACK) - { - w->colour=RED; - x=par; - parent--; - } - else - { - if (w->right->colour == BLACK) - { - w->left->colour=BLACK; - w->colour=RED; - right_rotate(&par->right,w); - w=par->right; - } - w->colour=par->colour; - par->colour=BLACK; - w->right->colour=BLACK; - left_rotate(parent[-1],par); - x=tree->root; - break; - } - } - else - { - w=par->left; - if (w->colour == RED) - { - w->colour=BLACK; - par->colour=RED; - right_rotate(parent[-1],par); - parent[0]= &w->right; - *++parent= &par->right; - w=par->left; - } - if (w->right->colour == BLACK && w->left->colour == BLACK) - { - w->colour=RED; - x=par; - parent--; - } - else - { - if (w->left->colour == BLACK) - { - w->right->colour=BLACK; - w->colour=RED; - left_rotate(&par->left,w); - w=par->left; - } - w->colour=par->colour; - par->colour=BLACK; - w->left->colour=BLACK; - right_rotate(parent[-1],par); - x=tree->root; - break; - } - } - } - x->colour=BLACK; -} - -#ifndef DBUG_OFF - - /* Test that the proporties for a red-black tree holds */ - -static int test_rb_tree(TREE_ELEMENT *element) -{ - int count_l,count_r; - - if (!element->left) - return 0; /* Found end of tree */ - if (element->colour == RED && - (element->left->colour == RED || element->right->colour == RED)) - { - printf("Wrong tree: Found two red in a row\n"); - return -1; - } - count_l=test_rb_tree(element->left); - count_r=test_rb_tree(element->right); - if (count_l >= 0 && count_r >= 0) - { - if (count_l == count_r) - return count_l+(element->colour == BLACK); - printf("Wrong tree: Incorrect black-count: %d - %d\n",count_l,count_r); - } - return -1; -} -#endif diff --git a/deps/mysqllite/mysys/typelib.c b/deps/mysqllite/mysys/typelib.c deleted file mode 100644 index 7681ff581ac1ee..00000000000000 --- a/deps/mysqllite/mysys/typelib.c +++ /dev/null @@ -1,388 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Functions to handle typelib */ - -#include "mysys_priv.h" -#include -#include - - -#define is_field_separator(X) ((X) == ',' || (X) == '=') - -int find_type_or_exit(const char *x, TYPELIB *typelib, const char *option) -{ - int res; - const char **ptr; - - if ((res= find_type((char *) x, typelib, 2)) <= 0) - { - ptr= typelib->type_names; - if (!*x) - fprintf(stderr, "No option given to %s\n", option); - else - fprintf(stderr, "Unknown option to %s: %s\n", option, x); - fprintf(stderr, "Alternatives are: '%s'", *ptr); - while (*++ptr) - fprintf(stderr, ",'%s'", *ptr); - fprintf(stderr, "\n"); - exit(1); - } - return res; -} - - -/** - Search after a string in a list of strings. Endspace in x is not compared. - - @param x String to find - @param lib TYPELIB (struct of pointer to values + count) - @param full_name bitmap of what to do - If & 1 accept only whole names - If & 2 don't expand if half field - If & 4 allow #number# as type - If & 8 use ',' as string terminator - - @note - If part, uniq field is found and full_name == 0 then x is expanded - to full field. - - @retval - -1 Too many matching values - @retval - 0 No matching value - @retval - >0 Offset+1 in typelib for matched string -*/ - - -int find_type(char *x, const TYPELIB *typelib, uint full_name) -{ - int find,pos; - int UNINIT_VAR(findpos); /* guarded by find */ - reg1 char * i; - reg2 const char *j; - DBUG_ENTER("find_type"); - DBUG_PRINT("enter",("x: '%s' lib: 0x%lx", x, (long) typelib)); - - if (!typelib->count) - { - DBUG_PRINT("exit",("no count")); - DBUG_RETURN(0); - } - find=0; - for (pos=0 ; (j=typelib->type_names[pos]) ; pos++) - { - for (i=x ; - *i && (!(full_name & 8) || !is_field_separator(*i)) && - my_toupper(&my_charset_latin1,*i) == - my_toupper(&my_charset_latin1,*j) ; i++, j++) ; - if (! *j) - { - while (*i == ' ') - i++; /* skip_end_space */ - if (! *i || ((full_name & 8) && is_field_separator(*i))) - DBUG_RETURN(pos+1); - } - if ((!*i && (!(full_name & 8) || !is_field_separator(*i))) && - (!*j || !(full_name & 1))) - { - find++; - findpos=pos; - } - } - if (find == 0 && (full_name & 4) && x[0] == '#' && strend(x)[-1] == '#' && - (findpos=atoi(x+1)-1) >= 0 && (uint) findpos < typelib->count) - find=1; - else if (find == 0 || ! x[0]) - { - DBUG_PRINT("exit",("Couldn't find type")); - DBUG_RETURN(0); - } - else if (find != 1 || (full_name & 1)) - { - DBUG_PRINT("exit",("Too many possybilities")); - DBUG_RETURN(-1); - } - if (!(full_name & 2)) - (void) strmov(x,typelib->type_names[findpos]); - DBUG_RETURN(findpos+1); -} /* find_type */ - - -/** - Get name of type nr - - @note - first type is 1, 0 = empty field -*/ - -void make_type(register char * to, register uint nr, - register TYPELIB *typelib) -{ - DBUG_ENTER("make_type"); - if (!nr) - to[0]=0; - else - (void) strmov(to,get_type(typelib,nr-1)); - DBUG_VOID_RETURN; -} /* make_type */ - - -/** - Get type - - @note - first type is 0 -*/ - -const char *get_type(TYPELIB *typelib, uint nr) -{ - if (nr < (uint) typelib->count && typelib->type_names) - return(typelib->type_names[nr]); - return "?"; -} - - -/** - Create an integer value to represent the supplied comma-seperated - string where each string in the TYPELIB denotes a bit position. - - @param x string to decompose - @param lib TYPELIB (struct of pointer to values + count) - @param err index (not char position) of string element which was not - found or 0 if there was no error - - @retval - a integer representation of the supplied string -*/ - -my_ulonglong find_typeset(char *x, TYPELIB *lib, int *err) -{ - my_ulonglong result; - int find; - char *i; - DBUG_ENTER("find_set"); - DBUG_PRINT("enter",("x: '%s' lib: 0x%lx", x, (long) lib)); - - if (!lib->count) - { - DBUG_PRINT("exit",("no count")); - DBUG_RETURN(0); - } - result= 0; - *err= 0; - while (*x) - { - (*err)++; - i= x; - while (*x && !is_field_separator(*x)) - x++; - if (x[0] && x[1]) /* skip separator if found */ - x++; - if ((find= find_type(i, lib, 2 | 8) - 1) < 0) - DBUG_RETURN(0); - result|= (ULL(1) << find); - } - *err= 0; - DBUG_RETURN(result); -} /* find_set */ - - -/** - Create a copy of a specified TYPELIB structure. - - @param root pointer to a MEM_ROOT object for allocations - @param from pointer to a source TYPELIB structure - - @retval - pointer to the new TYPELIB structure on successful copy - @retval - NULL otherwise -*/ - -TYPELIB *copy_typelib(MEM_ROOT *root, TYPELIB *from) -{ - TYPELIB *to; - uint i; - - if (!from) - return NULL; - - if (!(to= (TYPELIB*) alloc_root(root, sizeof(TYPELIB)))) - return NULL; - - if (!(to->type_names= (const char **) - alloc_root(root, (sizeof(char *) + sizeof(int)) * (from->count + 1)))) - return NULL; - to->type_lengths= (unsigned int *)(to->type_names + from->count + 1); - to->count= from->count; - if (from->name) - { - if (!(to->name= strdup_root(root, from->name))) - return NULL; - } - else - to->name= NULL; - - for (i= 0; i < from->count; i++) - { - if (!(to->type_names[i]= strmake_root(root, from->type_names[i], - from->type_lengths[i]))) - return NULL; - to->type_lengths[i]= from->type_lengths[i]; - } - to->type_names[to->count]= NULL; - to->type_lengths[to->count]= 0; - - return to; -} - - -static const char *on_off_default_names[]= { "off","on","default", 0}; -static TYPELIB on_off_default_typelib= {array_elements(on_off_default_names)-1, - "", on_off_default_names, 0}; - -/** - Parse a TYPELIB name from the buffer - - @param lib Set of names to scan for. - @param strpos INOUT Start of the buffer (updated to point to the next - character after the name) - @param end End of the buffer - - @note - The buffer is assumed to contain one of the names specified in the TYPELIB, - followed by comma, '=', or end of the buffer. - - @retval - 0 No matching name - @retval - >0 Offset+1 in typelib for matched name -*/ - -static uint parse_name(const TYPELIB *lib, const char **strpos, const char *end) -{ - const char *pos= *strpos; - uint find= find_type((char*)pos, lib, 8); - for (; pos != end && *pos != '=' && *pos !=',' ; pos++); - *strpos= pos; - return find; -} - -/** - Parse and apply a set of flag assingments - - @param lib Flag names - @param default_name Number of "default" in the typelib - @param cur_set Current set of flags (start from this state) - @param default_set Default set of flags (use this for assign-default - keyword and flag=default assignments) - @param str String to be parsed - @param length Length of the string - @param err_pos OUT If error, set to point to start of wrong set string - NULL on success - @param err_len OUT If error, set to the length of wrong set string - - @details - Parse a set of flag assignments, that is, parse a string in form: - - param_name1=value1,param_name2=value2,... - - where the names are specified in the TYPELIB, and each value can be - either 'on','off', or 'default'. Setting the same name twice is not - allowed. - - Besides param=val assignments, we support the "default" keyword (keyword - #default_name in the typelib). It can be used one time, if specified it - causes us to build the new set over the default_set rather than cur_set - value. - - @note - it's not charset aware - - @retval - Parsed set value if (*errpos == NULL), otherwise undefined -*/ - -my_ulonglong find_set_from_flags(const TYPELIB *lib, uint default_name, - my_ulonglong cur_set, my_ulonglong default_set, - const char *str, uint length, - char **err_pos, uint *err_len) -{ - const char *end= str + length; - my_ulonglong flags_to_set= 0, flags_to_clear= 0, res; - my_bool set_defaults= 0; - - *err_pos= 0; /* No error yet */ - if (str != end) - { - const char *start= str; - for (;;) - { - const char *pos= start; - uint flag_no, value; - - if (!(flag_no= parse_name(lib, &pos, end))) - goto err; - - if (flag_no == default_name) - { - /* Using 'default' twice isn't allowed. */ - if (set_defaults) - goto err; - set_defaults= TRUE; - } - else - { - my_ulonglong bit= (1ULL << (flag_no - 1)); - /* parse the '=on|off|default' */ - if ((flags_to_clear | flags_to_set) & bit || - pos >= end || *pos++ != '=' || - !(value= parse_name(&on_off_default_typelib, &pos, end))) - goto err; - - if (value == 1) /* this is '=off' */ - flags_to_clear|= bit; - else if (value == 2) /* this is '=on' */ - flags_to_set|= bit; - else /* this is '=default' */ - { - if (default_set & bit) - flags_to_set|= bit; - else - flags_to_clear|= bit; - } - } - if (pos >= end) - break; - - if (*pos++ != ',') - goto err; - - start=pos; - continue; - err: - *err_pos= (char*)start; - *err_len= end - start; - break; - } - } - res= set_defaults? default_set : cur_set; - res|= flags_to_set; - res&= ~flags_to_clear; - return res; -} - diff --git a/deps/mysqllite/sql-common/client.c b/deps/mysqllite/sql-common/client.c deleted file mode 100644 index 354c04b717b453..00000000000000 --- a/deps/mysqllite/sql-common/client.c +++ /dev/null @@ -1,4273 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - This file is included by both libmysql.c (the MySQL client C API) - and the mysqld server to connect to another MYSQL server. - - The differences for the two cases are: - - - Things that only works for the client: - - Trying to automaticly determinate user name if not supplied to - mysql_real_connect() - - Support for reading local file with LOAD DATA LOCAL - - SHARED memory handling - - Prepared statements - - - Things that only works for the server - - Alarm handling on connect - - In all other cases, the code should be idential for the client and - server. -*/ - -#include - -#include "mysql.h" - -#ifndef __WIN__ -#include -#endif - -/* Remove client convenience wrappers */ -#undef max_allowed_packet -#undef net_buffer_length - -#ifdef EMBEDDED_LIBRARY - -#undef MYSQL_SERVER - -#ifndef MYSQL_CLIENT -#define MYSQL_CLIENT -#endif - -#define CLI_MYSQL_REAL_CONNECT STDCALL cli_mysql_real_connect - -#undef net_flush -my_bool net_flush(NET *net); - -#else /*EMBEDDED_LIBRARY*/ -#define CLI_MYSQL_REAL_CONNECT STDCALL mysql_real_connect -#endif /*EMBEDDED_LIBRARY*/ -#include -#include -#include -#include -#include "mysql_version.h" -#include "mysqld_error.h" -#include "errmsg.h" -#include -#if !defined(__WIN__) -#include /* because of signal() */ -#endif /* !defined(__WIN__) */ - -#include -#include -#include -#ifdef HAVE_PWD_H -#include -#endif -#if !defined(__WIN__) -#include -#include -#include -#include -#ifdef HAVE_SELECT_H -# include -#endif -#ifdef HAVE_SYS_SELECT_H -#include -#endif -#endif /* !defined(__WIN__) */ -#ifdef HAVE_SYS_UN_H -# include -#endif - -#if defined(__WIN__) -#define perror(A) -#else -#include -#define SOCKET_ERROR -1 -#endif - -#ifdef __WIN__ -#define CONNECT_TIMEOUT 20 -#else -#define CONNECT_TIMEOUT 0 -#endif - -#include "client_settings.h" -#include -#include -#define native_password_plugin_name "mysql_native_password" -#define old_password_plugin_name "mysql_old_password" - - -uint mysql_port=0; -char *mysql_unix_port= 0; -const char *unknown_sqlstate= "HY000"; -const char *not_error_sqlstate= "00000"; -const char *cant_connect_sqlstate= "08001"; -#ifdef HAVE_SMEM -char *shared_memory_base_name= 0; -const char *def_shared_memory_base_name= default_shared_memory_base_name; -#endif - -static void mysql_close_free_options(MYSQL *mysql); -static void mysql_close_free(MYSQL *mysql); -static void mysql_prune_stmt_list(MYSQL *mysql); - -#if !defined(__WIN__) -static int wait_for_data(my_socket fd, uint timeout); -#endif - -CHARSET_INFO *default_client_charset_info = &my_charset_latin1; - -/* Server error code and message */ -unsigned int mysql_server_last_errno; -char mysql_server_last_error[MYSQL_ERRMSG_SIZE]; - -/**************************************************************************** - A modified version of connect(). my_connect() allows you to specify - a timeout value, in seconds, that we should wait until we - derermine we can't connect to a particular host. If timeout is 0, - my_connect() will behave exactly like connect(). - - Base version coded by Steve Bernacki, Jr. -*****************************************************************************/ - -int my_connect(my_socket fd, const struct sockaddr *name, uint namelen, - uint timeout) -{ -#if defined(__WIN__) - DBUG_ENTER("my_connect"); - DBUG_RETURN(connect(fd, (struct sockaddr*) name, namelen)); -#else - int flags, res, s_err; - DBUG_ENTER("my_connect"); - DBUG_PRINT("enter", ("fd: %d timeout: %u", fd, timeout)); - - /* - If they passed us a timeout of zero, we should behave - exactly like the normal connect() call does. - */ - - if (timeout == 0) - DBUG_RETURN(connect(fd, (struct sockaddr*) name, namelen)); - - flags = fcntl(fd, F_GETFL, 0); /* Set socket to not block */ -#ifdef O_NONBLOCK - fcntl(fd, F_SETFL, flags | O_NONBLOCK); /* and save the flags.. */ -#endif - - DBUG_PRINT("info", ("connecting non-blocking")); - res= connect(fd, (struct sockaddr*) name, namelen); - DBUG_PRINT("info", ("connect result: %d errno: %d", res, errno)); - s_err= errno; /* Save the error... */ - fcntl(fd, F_SETFL, flags); - if ((res != 0) && (s_err != EINPROGRESS)) - { - errno= s_err; /* Restore it */ - DBUG_RETURN(-1); - } - if (res == 0) /* Connected quickly! */ - DBUG_RETURN(0); - DBUG_RETURN(wait_for_data(fd, timeout)); -#endif -} - - -/* - Wait up to timeout seconds for a connection to be established. - - We prefer to do this with poll() as there is no limitations with this. - If not, we will use select() -*/ - -#if !defined(__WIN__) - -static int wait_for_data(my_socket fd, uint timeout) -{ -#ifdef HAVE_POLL - struct pollfd ufds; - int res; - DBUG_ENTER("wait_for_data"); - - DBUG_PRINT("info", ("polling")); - ufds.fd= fd; - ufds.events= POLLIN | POLLPRI; - if (!(res= poll(&ufds, 1, (int) timeout*1000))) - { - DBUG_PRINT("info", ("poll timed out")); - errno= EINTR; - DBUG_RETURN(-1); - } - DBUG_PRINT("info", - ("poll result: %d errno: %d revents: 0x%02d events: 0x%02d", - res, errno, ufds.revents, ufds.events)); - if (res < 0 || !(ufds.revents & (POLLIN | POLLPRI))) - DBUG_RETURN(-1); - /* - At this point, we know that something happened on the socket. - But this does not means that everything is alright. - The connect might have failed. We need to retrieve the error code - from the socket layer. We must return success only if we are sure - that it was really a success. Otherwise we might prevent the caller - from trying another address to connect to. - */ - { - int s_err; - socklen_t s_len= sizeof(s_err); - - DBUG_PRINT("info", ("Get SO_ERROR from non-blocked connected socket.")); - res= getsockopt(fd, SOL_SOCKET, SO_ERROR, &s_err, &s_len); - DBUG_PRINT("info", ("getsockopt res: %d s_err: %d", res, s_err)); - if (res) - DBUG_RETURN(res); - /* getsockopt() was successful, check the retrieved status value. */ - if (s_err) - { - errno= s_err; - DBUG_RETURN(-1); - } - /* Status from connect() is zero. Socket is successfully connected. */ - } - DBUG_RETURN(0); -#else - SOCKOPT_OPTLEN_TYPE s_err_size = sizeof(uint); - fd_set sfds; - struct timeval tv; - time_t start_time, now_time; - int res, s_err; - DBUG_ENTER("wait_for_data"); - - if (fd >= FD_SETSIZE) /* Check if wrong error */ - DBUG_RETURN(0); /* Can't use timeout */ - - /* - Our connection is "in progress." We can use the select() call to wait - up to a specified period of time for the connection to suceed. - If select() returns 0 (after waiting howevermany seconds), our socket - never became writable (host is probably unreachable.) Otherwise, if - select() returns 1, then one of two conditions exist: - - 1. An error occured. We use getsockopt() to check for this. - 2. The connection was set up sucessfully: getsockopt() will - return 0 as an error. - - Thanks goes to Andrew Gierth - who posted this method of timing out a connect() in - comp.unix.programmer on August 15th, 1997. - */ - - FD_ZERO(&sfds); - FD_SET(fd, &sfds); - /* - select could be interrupted by a signal, and if it is, - the timeout should be adjusted and the select restarted - to work around OSes that don't restart select and - implementations of select that don't adjust tv upon - failure to reflect the time remaining - */ - start_time= my_time(0); - for (;;) - { - tv.tv_sec = (long) timeout; - tv.tv_usec = 0; -#if defined(HPUX10) - if ((res = select(fd+1, NULL, (int*) &sfds, NULL, &tv)) > 0) - break; -#else - if ((res = select(fd+1, NULL, &sfds, NULL, &tv)) > 0) - break; -#endif - if (res == 0) /* timeout */ - DBUG_RETURN(-1); - now_time= my_time(0); - timeout-= (uint) (now_time - start_time); - if (errno != EINTR || (int) timeout <= 0) - DBUG_RETURN(-1); - } - - /* - select() returned something more interesting than zero, let's - see if we have any errors. If the next two statements pass, - we've got an open socket! - */ - - s_err=0; - if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (char*) &s_err, &s_err_size) != 0) - DBUG_RETURN(-1); - - if (s_err) - { /* getsockopt could succeed */ - errno = s_err; - DBUG_RETURN(-1); /* but return an error... */ - } - DBUG_RETURN(0); /* ok */ -#endif /* HAVE_POLL */ -} -#endif /* !defined(__WIN__) */ - -/** - Set the internal error message to mysql handler - - @param mysql connection handle (client side) - @param errcode CR_ error code, passed to ER macro to get - error text - @parma sqlstate SQL standard sqlstate -*/ - -void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate) -{ - NET *net; - DBUG_ENTER("set_mysql_error"); - DBUG_PRINT("enter", ("error :%d '%s'", errcode, ER(errcode))); - DBUG_ASSERT(mysql != 0); - - if (mysql) - { - net= &mysql->net; - net->last_errno= errcode; - strmov(net->last_error, ER(errcode)); - strmov(net->sqlstate, sqlstate); - } - else - { - mysql_server_last_errno= errcode; - strmov(mysql_server_last_error, ER(errcode)); - } - DBUG_VOID_RETURN; -} - -/** - Clear possible error state of struct NET - - @param net clear the state of the argument -*/ - -void net_clear_error(NET *net) -{ - net->last_errno= 0; - net->last_error[0]= '\0'; - strmov(net->sqlstate, not_error_sqlstate); -} - -/** - Set an error message on the client. - - @param mysql connection handle - @param errcode CR_* errcode, for client errors - @param sqlstate SQL standard sql state, unknown_sqlstate for the - majority of client errors. - @param format error message template, in sprintf format - @param ... variable number of arguments -*/ - -void set_mysql_extended_error(MYSQL *mysql, int errcode, - const char *sqlstate, - const char *format, ...) -{ - NET *net; - va_list args; - DBUG_ENTER("set_mysql_extended_error"); - DBUG_PRINT("enter", ("error :%d '%s'", errcode, format)); - DBUG_ASSERT(mysql != 0); - - net= &mysql->net; - net->last_errno= errcode; - va_start(args, format); - my_vsnprintf(net->last_error, sizeof(net->last_error)-1, - format, args); - va_end(args); - strmov(net->sqlstate, sqlstate); - - DBUG_VOID_RETURN; -} - - - -/* - Create a named pipe connection -*/ - -#ifdef __WIN__ - -HANDLE create_named_pipe(MYSQL *mysql, uint connect_timeout, char **arg_host, - char **arg_unix_socket) -{ - HANDLE hPipe=INVALID_HANDLE_VALUE; - char pipe_name[1024]; - DWORD dwMode; - int i; - my_bool testing_named_pipes=0; - char *host= *arg_host, *unix_socket= *arg_unix_socket; - - if ( ! unix_socket || (unix_socket)[0] == 0x00) - unix_socket = mysql_unix_port; - if (!host || !strcmp(host,LOCAL_HOST)) - host=LOCAL_HOST_NAMEDPIPE; - - - pipe_name[sizeof(pipe_name)-1]= 0; /* Safety if too long string */ - strxnmov(pipe_name, sizeof(pipe_name)-1, "\\\\", host, "\\pipe\\", - unix_socket, NullS); - DBUG_PRINT("info",("Server name: '%s'. Named Pipe: %s", host, unix_socket)); - - for (i=0 ; i < 100 ; i++) /* Don't retry forever */ - { - if ((hPipe = CreateFile(pipe_name, - GENERIC_READ | GENERIC_WRITE, - 0, - NULL, - OPEN_EXISTING, - FILE_FLAG_OVERLAPPED, - NULL )) != INVALID_HANDLE_VALUE) - break; - if (GetLastError() != ERROR_PIPE_BUSY) - { - set_mysql_extended_error(mysql, CR_NAMEDPIPEOPEN_ERROR, - unknown_sqlstate, ER(CR_NAMEDPIPEOPEN_ERROR), - host, unix_socket, (ulong) GetLastError()); - return INVALID_HANDLE_VALUE; - } - /* wait for for an other instance */ - if (! WaitNamedPipe(pipe_name, connect_timeout*1000) ) - { - set_mysql_extended_error(mysql, CR_NAMEDPIPEWAIT_ERROR, unknown_sqlstate, - ER(CR_NAMEDPIPEWAIT_ERROR), - host, unix_socket, (ulong) GetLastError()); - return INVALID_HANDLE_VALUE; - } - } - if (hPipe == INVALID_HANDLE_VALUE) - { - set_mysql_extended_error(mysql, CR_NAMEDPIPEOPEN_ERROR, unknown_sqlstate, - ER(CR_NAMEDPIPEOPEN_ERROR), host, unix_socket, - (ulong) GetLastError()); - return INVALID_HANDLE_VALUE; - } - dwMode = PIPE_READMODE_BYTE | PIPE_WAIT; - if ( !SetNamedPipeHandleState(hPipe, &dwMode, NULL, NULL) ) - { - CloseHandle( hPipe ); - set_mysql_extended_error(mysql, CR_NAMEDPIPESETSTATE_ERROR, - unknown_sqlstate, ER(CR_NAMEDPIPESETSTATE_ERROR), - host, unix_socket, (ulong) GetLastError()); - return INVALID_HANDLE_VALUE; - } - *arg_host=host ; *arg_unix_socket=unix_socket; /* connect arg */ - return (hPipe); -} -#endif - - -/* - Create new shared memory connection, return handler of connection - - SYNOPSIS - create_shared_memory() - mysql Pointer of mysql structure - net Pointer of net structure - connect_timeout Timeout of connection -*/ - -#ifdef HAVE_SMEM -HANDLE create_shared_memory(MYSQL *mysql,NET *net, uint connect_timeout) -{ - ulong smem_buffer_length = shared_memory_buffer_length + 4; - /* - event_connect_request is event object for start connection actions - event_connect_answer is event object for confirm, that server put data - handle_connect_file_map is file-mapping object, use for create shared - memory - handle_connect_map is pointer on shared memory - handle_map is pointer on shared memory for client - event_server_wrote, - event_server_read, - event_client_wrote, - event_client_read are events for transfer data between server and client - handle_file_map is file-mapping object, use for create shared memory - */ - HANDLE event_connect_request = NULL; - HANDLE event_connect_answer = NULL; - HANDLE handle_connect_file_map = NULL; - char *handle_connect_map = NULL; - - char *handle_map = NULL; - HANDLE event_server_wrote = NULL; - HANDLE event_server_read = NULL; - HANDLE event_client_wrote = NULL; - HANDLE event_client_read = NULL; - HANDLE event_conn_closed = NULL; - HANDLE handle_file_map = NULL; - ulong connect_number; - char connect_number_char[22], *p; - char *tmp= NULL; - char *suffix_pos; - DWORD error_allow = 0; - DWORD error_code = 0; - DWORD event_access_rights= SYNCHRONIZE | EVENT_MODIFY_STATE; - char *shared_memory_base_name = mysql->options.shared_memory_base_name; - static const char *name_prefixes[] = {"","Global\\"}; - const char *prefix; - int i; - - /* - If this is NULL, somebody freed the MYSQL* options. mysql_close() - is a good candidate. We don't just silently (re)set it to - def_shared_memory_base_name as that would create really confusing/buggy - behavior if the user passed in a different name on the command-line or - in a my.cnf. - */ - DBUG_ASSERT(shared_memory_base_name != NULL); - - /* - get enough space base-name + '_' + longest suffix we might ever send - */ - if (!(tmp= (char *)my_malloc(strlen(shared_memory_base_name) + 32L, MYF(MY_FAE)))) - goto err; - - /* - The name of event and file-mapping events create agree next rule: - shared_memory_base_name+unique_part - Where: - shared_memory_base_name is unique value for each server - unique_part is uniquel value for each object (events and file-mapping) - */ - for (i = 0; i< array_elements(name_prefixes); i++) - { - prefix= name_prefixes[i]; - suffix_pos = strxmov(tmp, prefix , shared_memory_base_name, "_", NullS); - strmov(suffix_pos, "CONNECT_REQUEST"); - event_connect_request= OpenEvent(event_access_rights, FALSE, tmp); - if (event_connect_request) - { - break; - } - } - if (!event_connect_request) - { - error_allow = CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR; - goto err; - } - strmov(suffix_pos, "CONNECT_ANSWER"); - if (!(event_connect_answer= OpenEvent(event_access_rights,FALSE,tmp))) - { - error_allow = CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR; - goto err; - } - strmov(suffix_pos, "CONNECT_DATA"); - if (!(handle_connect_file_map= OpenFileMapping(FILE_MAP_WRITE,FALSE,tmp))) - { - error_allow = CR_SHARED_MEMORY_CONNECT_FILE_MAP_ERROR; - goto err; - } - if (!(handle_connect_map= MapViewOfFile(handle_connect_file_map, - FILE_MAP_WRITE,0,0,sizeof(DWORD)))) - { - error_allow = CR_SHARED_MEMORY_CONNECT_MAP_ERROR; - goto err; - } - - /* Send to server request of connection */ - if (!SetEvent(event_connect_request)) - { - error_allow = CR_SHARED_MEMORY_CONNECT_SET_ERROR; - goto err; - } - - /* Wait of answer from server */ - if (WaitForSingleObject(event_connect_answer,connect_timeout*1000) != - WAIT_OBJECT_0) - { - error_allow = CR_SHARED_MEMORY_CONNECT_ABANDONED_ERROR; - goto err; - } - - /* Get number of connection */ - connect_number = uint4korr(handle_connect_map);/*WAX2*/ - p= int10_to_str(connect_number, connect_number_char, 10); - - /* - The name of event and file-mapping events create agree next rule: - shared_memory_base_name+unique_part+number_of_connection - - Where: - shared_memory_base_name is uniquel value for each server - unique_part is uniquel value for each object (events and file-mapping) - number_of_connection is number of connection between server and client - */ - suffix_pos = strxmov(tmp, prefix , shared_memory_base_name, "_", connect_number_char, - "_", NullS); - strmov(suffix_pos, "DATA"); - if ((handle_file_map = OpenFileMapping(FILE_MAP_WRITE,FALSE,tmp)) == NULL) - { - error_allow = CR_SHARED_MEMORY_FILE_MAP_ERROR; - goto err2; - } - if ((handle_map = MapViewOfFile(handle_file_map,FILE_MAP_WRITE,0,0, - smem_buffer_length)) == NULL) - { - error_allow = CR_SHARED_MEMORY_MAP_ERROR; - goto err2; - } - - strmov(suffix_pos, "SERVER_WROTE"); - if ((event_server_wrote = OpenEvent(event_access_rights,FALSE,tmp)) == NULL) - { - error_allow = CR_SHARED_MEMORY_EVENT_ERROR; - goto err2; - } - - strmov(suffix_pos, "SERVER_READ"); - if ((event_server_read = OpenEvent(event_access_rights,FALSE,tmp)) == NULL) - { - error_allow = CR_SHARED_MEMORY_EVENT_ERROR; - goto err2; - } - - strmov(suffix_pos, "CLIENT_WROTE"); - if ((event_client_wrote = OpenEvent(event_access_rights,FALSE,tmp)) == NULL) - { - error_allow = CR_SHARED_MEMORY_EVENT_ERROR; - goto err2; - } - - strmov(suffix_pos, "CLIENT_READ"); - if ((event_client_read = OpenEvent(event_access_rights,FALSE,tmp)) == NULL) - { - error_allow = CR_SHARED_MEMORY_EVENT_ERROR; - goto err2; - } - - strmov(suffix_pos, "CONNECTION_CLOSED"); - if ((event_conn_closed = OpenEvent(event_access_rights,FALSE,tmp)) == NULL) - { - error_allow = CR_SHARED_MEMORY_EVENT_ERROR; - goto err2; - } - /* - Set event that server should send data - */ - SetEvent(event_server_read); - -err2: - if (error_allow == 0) - { - net->vio= vio_new_win32shared_memory(handle_file_map,handle_map, - event_server_wrote, - event_server_read,event_client_wrote, - event_client_read,event_conn_closed); - } - else - { - error_code = GetLastError(); - if (event_server_read) - CloseHandle(event_server_read); - if (event_server_wrote) - CloseHandle(event_server_wrote); - if (event_client_read) - CloseHandle(event_client_read); - if (event_client_wrote) - CloseHandle(event_client_wrote); - if (event_conn_closed) - CloseHandle(event_conn_closed); - if (handle_map) - UnmapViewOfFile(handle_map); - if (handle_file_map) - CloseHandle(handle_file_map); - } -err: - my_free(tmp); - if (error_allow) - error_code = GetLastError(); - if (event_connect_request) - CloseHandle(event_connect_request); - if (event_connect_answer) - CloseHandle(event_connect_answer); - if (handle_connect_map) - UnmapViewOfFile(handle_connect_map); - if (handle_connect_file_map) - CloseHandle(handle_connect_file_map); - if (error_allow) - { - if (error_allow == CR_SHARED_MEMORY_EVENT_ERROR) - set_mysql_extended_error(mysql, error_allow, unknown_sqlstate, - ER(error_allow), suffix_pos, error_code); - else - set_mysql_extended_error(mysql, error_allow, unknown_sqlstate, - ER(error_allow), error_code); - return(INVALID_HANDLE_VALUE); - } - return(handle_map); -} -#endif - -/** - Read a packet from server. Give error message if socket was down - or packet is an error message - - @retval packet_error An error occurred during reading. - Error message is set. - @retval -*/ - -ulong -cli_safe_read(MYSQL *mysql) -{ - NET *net= &mysql->net; - ulong len=0; - - if (net->vio != 0) - len=my_net_read(net); - - if (len == packet_error || len == 0) - { - DBUG_PRINT("error",("Wrong connection or packet. fd: %s len: %lu", - vio_description(net->vio),len)); -#ifdef MYSQL_SERVER - if (net->vio && vio_was_interrupted(net->vio)) - return (packet_error); -#endif /*MYSQL_SERVER*/ - end_server(mysql); - set_mysql_error(mysql, net->last_errno == ER_NET_PACKET_TOO_LARGE ? - CR_NET_PACKET_TOO_LARGE: CR_SERVER_LOST, unknown_sqlstate); - return (packet_error); - } - if (net->read_pos[0] == 255) - { - if (len > 3) - { - char *pos=(char*) net->read_pos+1; - net->last_errno=uint2korr(pos); - pos+=2; - len-=2; - if (protocol_41(mysql) && pos[0] == '#') - { - strmake(net->sqlstate, pos+1, SQLSTATE_LENGTH); - pos+= SQLSTATE_LENGTH+1; - } - else - { - /* - The SQL state hasn't been received -- it should be reset to HY000 - (unknown error sql state). - */ - - strmov(net->sqlstate, unknown_sqlstate); - } - - (void) strmake(net->last_error,(char*) pos, - min((uint) len,(uint) sizeof(net->last_error)-1)); - } - else - set_mysql_error(mysql, CR_UNKNOWN_ERROR, unknown_sqlstate); - /* - Cover a protocol design error: error packet does not - contain the server status. Therefore, the client has no way - to find out whether there are more result sets of - a multiple-result-set statement pending. Luckily, in 5.0 an - error always aborts execution of a statement, wherever it is - a multi-statement or a stored procedure, so it should be - safe to unconditionally turn off the flag here. - */ - mysql->server_status&= ~SERVER_MORE_RESULTS_EXISTS; - - DBUG_PRINT("error",("Got error: %d/%s (%s)", - net->last_errno, - net->sqlstate, - net->last_error)); - return(packet_error); - } - return len; -} - -void free_rows(MYSQL_DATA *cur) -{ - if (cur) - { - free_root(&cur->alloc,MYF(0)); - my_free(cur); - } -} - -my_bool -cli_advanced_command(MYSQL *mysql, enum enum_server_command command, - const uchar *header, ulong header_length, - const uchar *arg, ulong arg_length, my_bool skip_check, - MYSQL_STMT *stmt) -{ - NET *net= &mysql->net; - my_bool result= 1; - my_bool stmt_skip= stmt ? stmt->state != MYSQL_STMT_INIT_DONE : FALSE; - DBUG_ENTER("cli_advanced_command"); - - if (mysql->net.vio == 0) - { /* Do reconnect if possible */ - if (mysql_reconnect(mysql) || stmt_skip) - DBUG_RETURN(1); - } - if (mysql->status != MYSQL_STATUS_READY || - mysql->server_status & SERVER_MORE_RESULTS_EXISTS) - { - DBUG_PRINT("error",("state: %d", mysql->status)); - set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate); - DBUG_RETURN(1); - } - - net_clear_error(net); - mysql->info=0; - mysql->affected_rows= ~(my_ulonglong) 0; - /* - We don't want to clear the protocol buffer on COM_QUIT, because if - the previous command was a shutdown command, we may have the - response for the COM_QUIT already in the communication buffer - */ - net_clear(&mysql->net, (command != COM_QUIT)); - - if (net_write_command(net,(uchar) command, header, header_length, - arg, arg_length)) - { - DBUG_PRINT("error",("Can't send command to server. Error: %d", - socket_errno)); - if (net->last_errno == ER_NET_PACKET_TOO_LARGE) - { - set_mysql_error(mysql, CR_NET_PACKET_TOO_LARGE, unknown_sqlstate); - goto end; - } - end_server(mysql); - if (mysql_reconnect(mysql) || stmt_skip) - goto end; - if (net_write_command(net,(uchar) command, header, header_length, - arg, arg_length)) - { - set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate); - goto end; - } - } - result=0; - if (!skip_check) - result= ((mysql->packet_length=cli_safe_read(mysql)) == packet_error ? - 1 : 0); -end: - DBUG_PRINT("exit",("result: %d", result)); - DBUG_RETURN(result); -} - -void free_old_query(MYSQL *mysql) -{ - DBUG_ENTER("free_old_query"); - if (mysql->fields) - free_root(&mysql->field_alloc,MYF(0)); - init_alloc_root(&mysql->field_alloc,8192,0); /* Assume rowlength < 8192 */ - mysql->fields= 0; - mysql->field_count= 0; /* For API */ - mysql->warning_count= 0; - mysql->info= 0; - DBUG_VOID_RETURN; -} - - -/** - Finish reading of a partial result set from the server. - Get the EOF packet, and update mysql->status - and mysql->warning_count. - - @return TRUE if a communication or protocol error, an error - is set in this case, FALSE otherwise. -*/ - -my_bool flush_one_result(MYSQL *mysql) -{ - ulong packet_length; - - DBUG_ASSERT(mysql->status != MYSQL_STATUS_READY); - - do - { - packet_length= cli_safe_read(mysql); - /* - There is an error reading from the connection, - or (sic!) there were no error and no - data in the stream, i.e. no more data from the server. - Since we know our position in the stream (somewhere in - the middle of a result set), this latter case is an error too - -- each result set must end with a EOF packet. - cli_safe_read() has set an error for us, just return. - */ - if (packet_length == packet_error) - return TRUE; - } - while (packet_length > 8 || mysql->net.read_pos[0] != 254); - - /* Analyze EOF packet of the result set. */ - - if (protocol_41(mysql)) - { - char *pos= (char*) mysql->net.read_pos + 1; - mysql->warning_count=uint2korr(pos); - pos+=2; - mysql->server_status=uint2korr(pos); - pos+=2; - } - return FALSE; -} - - -/** - Read a packet from network. If it's an OK packet, flush it. - - @return TRUE if error, FALSE otherwise. In case of - success, is_ok_packet is set to TRUE or FALSE, - based on what we got from network. -*/ - -my_bool opt_flush_ok_packet(MYSQL *mysql, my_bool *is_ok_packet) -{ - ulong packet_length= cli_safe_read(mysql); - - if (packet_length == packet_error) - return TRUE; - - /* cli_safe_read always reads a non-empty packet. */ - DBUG_ASSERT(packet_length); - - *is_ok_packet= mysql->net.read_pos[0] == 0; - if (*is_ok_packet) - { - uchar *pos= mysql->net.read_pos + 1; - - net_field_length_ll(&pos); /* affected rows */ - net_field_length_ll(&pos); /* insert id */ - - mysql->server_status=uint2korr(pos); - pos+=2; - - if (protocol_41(mysql)) - { - mysql->warning_count=uint2korr(pos); - pos+=2; - } - } - return FALSE; -} - - -/* - Flush result set sent from server -*/ - -static void cli_flush_use_result(MYSQL *mysql, my_bool flush_all_results) -{ - /* Clear the current execution status */ - DBUG_ENTER("cli_flush_use_result"); - DBUG_PRINT("warning",("Not all packets read, clearing them")); - - if (flush_one_result(mysql)) - DBUG_VOID_RETURN; /* An error occurred */ - - if (! flush_all_results) - DBUG_VOID_RETURN; - - while (mysql->server_status & SERVER_MORE_RESULTS_EXISTS) - { - my_bool is_ok_packet; - if (opt_flush_ok_packet(mysql, &is_ok_packet)) - DBUG_VOID_RETURN; /* An error occurred. */ - if (is_ok_packet) - { - /* - Indeed what we got from network was an OK packet, and we - know that OK is the last one in a multi-result-set, so - just return. - */ - DBUG_VOID_RETURN; - } - /* - It's a result set, not an OK packet. A result set contains - of two result set subsequences: field metadata, terminated - with EOF packet, and result set data, again terminated with - EOF packet. Read and flush them. - */ - if (flush_one_result(mysql) || flush_one_result(mysql)) - DBUG_VOID_RETURN; /* An error occurred. */ - } - - DBUG_VOID_RETURN; -} - - -#ifdef __WIN__ -static my_bool is_NT(void) -{ - char *os=getenv("OS"); - return (os && !strcmp(os, "Windows_NT")) ? 1 : 0; -} -#endif - - -#ifdef CHECK_LICENSE -/** - Check server side variable 'license'. - - If the variable does not exist or does not contain 'Commercial', - we're talking to non-commercial server from commercial client. - - @retval 0 success - @retval !0 network error or the server is not commercial. - Error code is saved in mysql->net.last_errno. -*/ - -static int check_license(MYSQL *mysql) -{ - MYSQL_ROW row; - MYSQL_RES *res; - NET *net= &mysql->net; - static const char query[]= "SELECT @@license"; - static const char required_license[]= STRINGIFY_ARG(LICENSE); - - if (mysql_real_query(mysql, query, sizeof(query)-1)) - { - if (net->last_errno == ER_UNKNOWN_SYSTEM_VARIABLE) - { - set_mysql_extended_error(mysql, CR_WRONG_LICENSE, unknown_sqlstate, - ER(CR_WRONG_LICENSE), required_license); - } - return 1; - } - if (!(res= mysql_use_result(mysql))) - return 1; - row= mysql_fetch_row(res); - /* - If no rows in result set, or column value is NULL (none of these - two is ever true for server variables now), or column value - mismatch, set wrong license error. - */ - if (!net->last_errno && - (!row || !row[0] || - strncmp(row[0], required_license, sizeof(required_license)))) - { - set_mysql_extended_error(mysql, CR_WRONG_LICENSE, unknown_sqlstate, - ER(CR_WRONG_LICENSE), required_license); - } - mysql_free_result(res); - return net->last_errno; -} -#endif /* CHECK_LICENSE */ - - -/************************************************************************** - Shut down connection -**************************************************************************/ - -void end_server(MYSQL *mysql) -{ - int save_errno= errno; - DBUG_ENTER("end_server"); - if (mysql->net.vio != 0) - { - DBUG_PRINT("info",("Net: %s", vio_description(mysql->net.vio))); -#ifdef MYSQL_SERVER - slave_io_thread_detach_vio(); -#endif - vio_delete(mysql->net.vio); - mysql->net.vio= 0; /* Marker */ - mysql_prune_stmt_list(mysql); - } - net_end(&mysql->net); - free_old_query(mysql); - errno= save_errno; - DBUG_VOID_RETURN; -} - - -void STDCALL -mysql_free_result(MYSQL_RES *result) -{ - DBUG_ENTER("mysql_free_result"); - DBUG_PRINT("enter",("mysql_res: 0x%lx", (long) result)); - if (result) - { - MYSQL *mysql= result->handle; - if (mysql) - { - if (mysql->unbuffered_fetch_owner == &result->unbuffered_fetch_cancelled) - mysql->unbuffered_fetch_owner= 0; - if (mysql->status == MYSQL_STATUS_USE_RESULT) - { - (*mysql->methods->flush_use_result)(mysql, FALSE); - mysql->status=MYSQL_STATUS_READY; - if (mysql->unbuffered_fetch_owner) - *mysql->unbuffered_fetch_owner= TRUE; - } - } - free_rows(result->data); - if (result->fields) - free_root(&result->field_alloc,MYF(0)); - my_free(result->row); - my_free(result); - } - DBUG_VOID_RETURN; -} - -/**************************************************************************** - Get options from my.cnf -****************************************************************************/ - -static const char *default_options[]= -{ - "port","socket","compress","password","pipe", "timeout", "user", - "init-command", "host", "database", "debug", "return-found-rows", - "ssl-key" ,"ssl-cert" ,"ssl-ca" ,"ssl-capath", - "character-sets-dir", "default-character-set", "interactive-timeout", - "connect-timeout", "local-infile", "disable-local-infile", - "ssl-cipher", "max-allowed-packet", "protocol", "shared-memory-base-name", - "multi-results", "multi-statements", "multi-queries", "secure-auth", - "report-data-truncation", "plugin-dir", "default-auth", - NullS -}; -enum option_id { - OPT_port=1, OPT_socket, OPT_compress, OPT_password, OPT_pipe, OPT_timeout, OPT_user, - OPT_init_command, OPT_host, OPT_database, OPT_debug, OPT_return_found_rows, - OPT_ssl_key, OPT_ssl_cert, OPT_ssl_ca, OPT_ssl_capath, - OPT_character_sets_dir, OPT_default_character_set, OPT_interactive_timeout, - OPT_connect_timeout, OPT_local_infile, OPT_disable_local_infile, - OPT_replication_probe, OPT_enable_reads_from_master, OPT_repl_parse_query, - OPT_ssl_cipher, OPT_max_allowed_packet, OPT_protocol, OPT_shared_memory_base_name, - OPT_multi_results, OPT_multi_statements, OPT_multi_queries, OPT_secure_auth, - OPT_report_data_truncation, OPT_plugin_dir, OPT_default_auth, -}; - -static TYPELIB option_types={array_elements(default_options)-1, - "options",default_options, NULL}; - -const char *sql_protocol_names_lib[] = -{ "TCP", "SOCKET", "PIPE", "MEMORY", NullS }; -TYPELIB sql_protocol_typelib = {array_elements(sql_protocol_names_lib)-1,"", - sql_protocol_names_lib, NULL}; - -static int add_init_command(struct st_mysql_options *options, const char *cmd) -{ - char *tmp; - - if (!options->init_commands) - { - options->init_commands= (DYNAMIC_ARRAY*)my_malloc(sizeof(DYNAMIC_ARRAY), - MYF(MY_WME)); - init_dynamic_array(options->init_commands,sizeof(char*),0,5); - } - - if (!(tmp= my_strdup(cmd,MYF(MY_WME))) || - insert_dynamic(options->init_commands, (uchar*)&tmp)) - { - my_free(tmp); - return 1; - } - - return 0; -} - -#define EXTENSION_SET_STRING(OPTS, X, STR) \ - if ((OPTS)->extension) \ - my_free((OPTS)->extension->X); \ - else \ - (OPTS)->extension= (struct st_mysql_options_extention *) \ - my_malloc(sizeof(struct st_mysql_options_extention), \ - MYF(MY_WME | MY_ZEROFILL)); \ - (OPTS)->extension->X= my_strdup((STR), MYF(MY_WME)); - -void mysql_read_default_options(struct st_mysql_options *options, - const char *filename,const char *group) -{ - int argc; - char *argv_buff[1],**argv; - const char *groups[3]; - DBUG_ENTER("mysql_read_default_options"); - DBUG_PRINT("enter",("file: %s group: %s",filename,group ? group :"NULL")); - - argc=1; argv=argv_buff; argv_buff[0]= (char*) "client"; - groups[0]= (char*) "client"; groups[1]= (char*) group; groups[2]=0; - - my_load_defaults(filename, groups, &argc, &argv, NULL); - if (argc != 1) /* If some default option */ - { - char **option=argv; - while (*++option) - { - if (option[0] == args_separator) /* skip arguments separator */ - continue; - /* DBUG_PRINT("info",("option: %s",option[0])); */ - if (option[0][0] == '-' && option[0][1] == '-') - { - char *end=strcend(*option,'='); - char *opt_arg=0; - if (*end) - { - opt_arg=end+1; - *end=0; /* Remove '=' */ - } - /* Change all '_' in variable name to '-' */ - for (end= *option ; *(end= strcend(end,'_')) ; ) - *end= '-'; - switch (find_type(*option+2,&option_types,2)) { - case OPT_port: - if (opt_arg) - options->port=atoi(opt_arg); - break; - case OPT_socket: - if (opt_arg) - { - my_free(options->unix_socket); - options->unix_socket=my_strdup(opt_arg,MYF(MY_WME)); - } - break; - case OPT_compress: - options->compress=1; - options->client_flag|= CLIENT_COMPRESS; - break; - case OPT_password: - if (opt_arg) - { - my_free(options->password); - options->password=my_strdup(opt_arg,MYF(MY_WME)); - } - break; - case OPT_pipe: - options->protocol = MYSQL_PROTOCOL_PIPE; - case OPT_connect_timeout: - case OPT_timeout: - if (opt_arg) - options->connect_timeout=atoi(opt_arg); - break; - case OPT_user: - if (opt_arg) - { - my_free(options->user); - options->user=my_strdup(opt_arg,MYF(MY_WME)); - } - break; - case OPT_init_command: - add_init_command(options,opt_arg); - break; - case OPT_host: - if (opt_arg) - { - my_free(options->host); - options->host=my_strdup(opt_arg,MYF(MY_WME)); - } - break; - case OPT_database: - if (opt_arg) - { - my_free(options->db); - options->db=my_strdup(opt_arg,MYF(MY_WME)); - } - break; - case OPT_debug: -#ifdef MYSQL_CLIENT - mysql_debug(opt_arg ? opt_arg : "d:t:o,/tmp/client.trace"); - break; -#endif - case OPT_return_found_rows: - options->client_flag|=CLIENT_FOUND_ROWS; - break; -#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - case OPT_ssl_key: - my_free(options->ssl_key); - options->ssl_key = my_strdup(opt_arg, MYF(MY_WME)); - break; - case OPT_ssl_cert: - my_free(options->ssl_cert); - options->ssl_cert = my_strdup(opt_arg, MYF(MY_WME)); - break; - case OPT_ssl_ca: - my_free(options->ssl_ca); - options->ssl_ca = my_strdup(opt_arg, MYF(MY_WME)); - break; - case OPT_ssl_capath: - my_free(options->ssl_capath); - options->ssl_capath = my_strdup(opt_arg, MYF(MY_WME)); - break; - case OPT_ssl_cipher: - my_free(options->ssl_cipher); - options->ssl_cipher= my_strdup(opt_arg, MYF(MY_WME)); - break; -#else - case OPT_ssl_key: - case OPT_ssl_cert: - case OPT_ssl_ca: - case OPT_ssl_capath: - case OPT_ssl_cipher: - break; -#endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY */ - case OPT_character_sets_dir: - my_free(options->charset_dir); - options->charset_dir = my_strdup(opt_arg, MYF(MY_WME)); - break; - case OPT_default_character_set: - my_free(options->charset_name); - options->charset_name = my_strdup(opt_arg, MYF(MY_WME)); - break; - case OPT_interactive_timeout: - options->client_flag|= CLIENT_INTERACTIVE; - break; - case OPT_local_infile: - if (!opt_arg || atoi(opt_arg) != 0) - options->client_flag|= CLIENT_LOCAL_FILES; - else - options->client_flag&= ~CLIENT_LOCAL_FILES; - break; - case OPT_disable_local_infile: - options->client_flag&= ~CLIENT_LOCAL_FILES; - break; - case OPT_max_allowed_packet: - if (opt_arg) - options->max_allowed_packet= atoi(opt_arg); - break; - case OPT_protocol: - if ((options->protocol= find_type(opt_arg, - &sql_protocol_typelib,0)) <= 0) - { - fprintf(stderr, "Unknown option to protocol: %s\n", opt_arg); - exit(1); - } - break; - case OPT_shared_memory_base_name: -#ifdef HAVE_SMEM - if (options->shared_memory_base_name != def_shared_memory_base_name) - my_free(options->shared_memory_base_name); - options->shared_memory_base_name=my_strdup(opt_arg,MYF(MY_WME)); -#endif - break; - case OPT_multi_results: - options->client_flag|= CLIENT_MULTI_RESULTS; - break; - case OPT_multi_statements: - case OPT_multi_queries: - options->client_flag|= CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS; - break; - case OPT_secure_auth: - options->secure_auth= TRUE; - break; - case OPT_report_data_truncation: - options->report_data_truncation= opt_arg ? test(atoi(opt_arg)) : 1; - break; - case OPT_plugin_dir: - { - char buff[FN_REFLEN], buff2[FN_REFLEN]; - if (strlen(opt_arg) >= FN_REFLEN) - opt_arg[FN_REFLEN]= '\0'; - if (my_realpath(buff, opt_arg, 0)) - { - DBUG_PRINT("warning",("failed to normalize the plugin path: %s", - opt_arg)); - break; - } - convert_dirname(buff, buff2, NULL); - EXTENSION_SET_STRING(options, plugin_dir, buff2); - } - break; - case OPT_default_auth: - EXTENSION_SET_STRING(options, default_auth, opt_arg); - break; - default: - DBUG_PRINT("warning",("unknown option: %s",option[0])); - } - } - } - } - free_defaults(argv); - DBUG_VOID_RETURN; -} - - -/************************************************************************** - Get column lengths of the current row - If one uses mysql_use_result, res->lengths contains the length information, - else the lengths are calculated from the offset between pointers. -**************************************************************************/ - -static void cli_fetch_lengths(ulong *to, MYSQL_ROW column, - unsigned int field_count) -{ - ulong *prev_length; - char *start=0; - MYSQL_ROW end; - - prev_length=0; /* Keep gcc happy */ - for (end=column + field_count + 1 ; column != end ; column++, to++) - { - if (!*column) - { - *to= 0; /* Null */ - continue; - } - if (start) /* Found end of prev string */ - *prev_length= (ulong) (*column-start-1); - start= *column; - prev_length= to; - } -} - -/*************************************************************************** - Change field rows to field structs -***************************************************************************/ - -MYSQL_FIELD * -unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, - my_bool default_value, uint server_capabilities) -{ - MYSQL_ROWS *row; - MYSQL_FIELD *field,*result; - ulong lengths[9]; /* Max of fields */ - DBUG_ENTER("unpack_fields"); - - field= result= (MYSQL_FIELD*) alloc_root(alloc, - (uint) sizeof(*field)*fields); - if (!result) - { - free_rows(data); /* Free old data */ - DBUG_RETURN(0); - } - bzero((char*) field, (uint) sizeof(MYSQL_FIELD)*fields); - if (server_capabilities & CLIENT_PROTOCOL_41) - { - /* server is 4.1, and returns the new field result format */ - for (row=data->data; row ; row = row->next,field++) - { - uchar *pos; - /* fields count may be wrong */ - DBUG_ASSERT((uint) (field - result) < fields); - cli_fetch_lengths(&lengths[0], row->data, default_value ? 8 : 7); - field->catalog= strmake_root(alloc,(char*) row->data[0], lengths[0]); - field->db= strmake_root(alloc,(char*) row->data[1], lengths[1]); - field->table= strmake_root(alloc,(char*) row->data[2], lengths[2]); - field->org_table= strmake_root(alloc,(char*) row->data[3], lengths[3]); - field->name= strmake_root(alloc,(char*) row->data[4], lengths[4]); - field->org_name= strmake_root(alloc,(char*) row->data[5], lengths[5]); - - field->catalog_length= lengths[0]; - field->db_length= lengths[1]; - field->table_length= lengths[2]; - field->org_table_length= lengths[3]; - field->name_length= lengths[4]; - field->org_name_length= lengths[5]; - - /* Unpack fixed length parts */ - pos= (uchar*) row->data[6]; - field->charsetnr= uint2korr(pos); - field->length= (uint) uint4korr(pos+2); - field->type= (enum enum_field_types) pos[6]; - field->flags= uint2korr(pos+7); - field->decimals= (uint) pos[9]; - - if (IS_NUM(field->type)) - field->flags|= NUM_FLAG; - if (default_value && row->data[7]) - { - field->def=strmake_root(alloc,(char*) row->data[7], lengths[7]); - field->def_length= lengths[7]; - } - else - field->def=0; - field->max_length= 0; - } - } -#ifndef DELETE_SUPPORT_OF_4_0_PROTOCOL - else - { - /* old protocol, for backward compatibility */ - for (row=data->data; row ; row = row->next,field++) - { - cli_fetch_lengths(&lengths[0], row->data, default_value ? 6 : 5); - field->org_table= field->table= strdup_root(alloc,(char*) row->data[0]); - field->name= strdup_root(alloc,(char*) row->data[1]); - field->length= (uint) uint3korr(row->data[2]); - field->type= (enum enum_field_types) (uchar) row->data[3][0]; - - field->catalog=(char*) ""; - field->db= (char*) ""; - field->catalog_length= 0; - field->db_length= 0; - field->org_table_length= field->table_length= lengths[0]; - field->name_length= lengths[1]; - - if (server_capabilities & CLIENT_LONG_FLAG) - { - field->flags= uint2korr(row->data[4]); - field->decimals=(uint) (uchar) row->data[4][2]; - } - else - { - field->flags= (uint) (uchar) row->data[4][0]; - field->decimals=(uint) (uchar) row->data[4][1]; - } - if (IS_NUM(field->type)) - field->flags|= NUM_FLAG; - if (default_value && row->data[5]) - { - field->def=strdup_root(alloc,(char*) row->data[5]); - field->def_length= lengths[5]; - } - else - field->def=0; - field->max_length= 0; - } - } -#endif /* DELETE_SUPPORT_OF_4_0_PROTOCOL */ - free_rows(data); /* Free old data */ - DBUG_RETURN(result); -} - -/* Read all rows (fields or data) from server */ - -MYSQL_DATA *cli_read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields, - unsigned int fields) -{ - uint field; - ulong pkt_len; - ulong len; - uchar *cp; - char *to, *end_to; - MYSQL_DATA *result; - MYSQL_ROWS **prev_ptr,*cur; - NET *net = &mysql->net; - DBUG_ENTER("cli_read_rows"); - - if ((pkt_len= cli_safe_read(mysql)) == packet_error) - DBUG_RETURN(0); - if (!(result=(MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA), - MYF(MY_WME | MY_ZEROFILL)))) - { - set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate); - DBUG_RETURN(0); - } - init_alloc_root(&result->alloc,8192,0); /* Assume rowlength < 8192 */ - result->alloc.min_malloc=sizeof(MYSQL_ROWS); - prev_ptr= &result->data; - result->rows=0; - result->fields=fields; - - /* - The last EOF packet is either a single 254 character or (in MySQL 4.1) - 254 followed by 1-7 status bytes. - - This doesn't conflict with normal usage of 254 which stands for a - string where the length of the string is 8 bytes. (see net_field_length()) - */ - - while (*(cp=net->read_pos) != 254 || pkt_len >= 8) - { - result->rows++; - if (!(cur= (MYSQL_ROWS*) alloc_root(&result->alloc, - sizeof(MYSQL_ROWS))) || - !(cur->data= ((MYSQL_ROW) - alloc_root(&result->alloc, - (fields+1)*sizeof(char *)+pkt_len)))) - { - free_rows(result); - set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate); - DBUG_RETURN(0); - } - *prev_ptr=cur; - prev_ptr= &cur->next; - to= (char*) (cur->data+fields+1); - end_to=to+pkt_len-1; - for (field=0 ; field < fields ; field++) - { - if ((len=(ulong) net_field_length(&cp)) == NULL_LENGTH) - { /* null field */ - cur->data[field] = 0; - } - else - { - cur->data[field] = to; - if (len > (ulong) (end_to - to)) - { - free_rows(result); - set_mysql_error(mysql, CR_MALFORMED_PACKET, unknown_sqlstate); - DBUG_RETURN(0); - } - memcpy(to,(char*) cp,len); to[len]=0; - to+=len+1; - cp+=len; - if (mysql_fields) - { - if (mysql_fields[field].max_length < len) - mysql_fields[field].max_length=len; - } - } - } - cur->data[field]=to; /* End of last field */ - if ((pkt_len=cli_safe_read(mysql)) == packet_error) - { - free_rows(result); - DBUG_RETURN(0); - } - } - *prev_ptr=0; /* last pointer is null */ - if (pkt_len > 1) /* MySQL 4.1 protocol */ - { - mysql->warning_count= uint2korr(cp+1); - mysql->server_status= uint2korr(cp+3); - DBUG_PRINT("info",("status: %u warning_count: %u", - mysql->server_status, mysql->warning_count)); - } - DBUG_PRINT("exit", ("Got %lu rows", (ulong) result->rows)); - DBUG_RETURN(result); -} - -/* - Read one row. Uses packet buffer as storage for fields. - When next packet is read, the previous field values are destroyed -*/ - - -static int -read_one_row(MYSQL *mysql,uint fields,MYSQL_ROW row, ulong *lengths) -{ - uint field; - ulong pkt_len,len; - uchar *pos, *prev_pos, *end_pos; - NET *net= &mysql->net; - - if ((pkt_len=cli_safe_read(mysql)) == packet_error) - return -1; - if (pkt_len <= 8 && net->read_pos[0] == 254) - { - if (pkt_len > 1) /* MySQL 4.1 protocol */ - { - mysql->warning_count= uint2korr(net->read_pos+1); - mysql->server_status= uint2korr(net->read_pos+3); - } - return 1; /* End of data */ - } - prev_pos= 0; /* allowed to write at packet[-1] */ - pos=net->read_pos; - end_pos=pos+pkt_len; - for (field=0 ; field < fields ; field++) - { - if ((len=(ulong) net_field_length(&pos)) == NULL_LENGTH) - { /* null field */ - row[field] = 0; - *lengths++=0; - } - else - { - if (len > (ulong) (end_pos - pos)) - { - set_mysql_error(mysql, CR_UNKNOWN_ERROR, unknown_sqlstate); - return -1; - } - row[field] = (char*) pos; - pos+=len; - *lengths++=len; - } - if (prev_pos) - *prev_pos=0; /* Terminate prev field */ - prev_pos=pos; - } - row[field]=(char*) prev_pos+1; /* End of last field */ - *prev_pos=0; /* Terminate last field */ - return 0; -} - - -/**************************************************************************** - Init MySQL structure or allocate one -****************************************************************************/ - -MYSQL * STDCALL -mysql_init(MYSQL *mysql) -{ - if (mysql_server_init(0, NULL, NULL)) - return 0; - if (!mysql) - { - if (!(mysql=(MYSQL*) my_malloc(sizeof(*mysql),MYF(MY_WME | MY_ZEROFILL)))) - { - set_mysql_error(NULL, CR_OUT_OF_MEMORY, unknown_sqlstate); - return 0; - } - mysql->free_me=1; - } - else - bzero((char*) (mysql), sizeof(*(mysql))); - mysql->options.connect_timeout= CONNECT_TIMEOUT; - mysql->charset=default_client_charset_info; - strmov(mysql->net.sqlstate, not_error_sqlstate); - - /* - Only enable LOAD DATA INFILE by default if configured with - --enable-local-infile - */ - -#if defined(ENABLED_LOCAL_INFILE) && !defined(MYSQL_SERVER) - mysql->options.client_flag|= CLIENT_LOCAL_FILES; -#endif - -#ifdef HAVE_SMEM - mysql->options.shared_memory_base_name= (char*) def_shared_memory_base_name; -#endif - - mysql->options.methods_to_use= MYSQL_OPT_GUESS_CONNECTION; - mysql->options.report_data_truncation= TRUE; /* default */ - - /* - By default we don't reconnect because it could silently corrupt data (after - reconnection you potentially lose table locks, user variables, session - variables (transactions but they are specifically dealt with in - mysql_reconnect()). - This is a change: < 5.0.3 mysql->reconnect was set to 1 by default. - How this change impacts existing apps: - - existing apps which relyed on the default will see a behaviour change; - they will have to set reconnect=1 after mysql_real_connect(). - - existing apps which explicitely asked for reconnection (the only way they - could do it was by setting mysql.reconnect to 1 after mysql_real_connect()) - will not see a behaviour change. - - existing apps which explicitely asked for no reconnection - (mysql.reconnect=0) will not see a behaviour change. - */ - mysql->reconnect= 0; - - return mysql; -} - - -/* - Fill in SSL part of MYSQL structure and set 'use_ssl' flag. - NB! Errors are not reported until you do mysql_real_connect. -*/ - -#define strdup_if_not_null(A) (A) == 0 ? 0 : my_strdup((A),MYF(MY_WME)) - -my_bool STDCALL -mysql_ssl_set(MYSQL *mysql __attribute__((unused)) , - const char *key __attribute__((unused)), - const char *cert __attribute__((unused)), - const char *ca __attribute__((unused)), - const char *capath __attribute__((unused)), - const char *cipher __attribute__((unused))) -{ - DBUG_ENTER("mysql_ssl_set"); -#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - mysql->options.ssl_key= strdup_if_not_null(key); - mysql->options.ssl_cert= strdup_if_not_null(cert); - mysql->options.ssl_ca= strdup_if_not_null(ca); - mysql->options.ssl_capath= strdup_if_not_null(capath); - mysql->options.ssl_cipher= strdup_if_not_null(cipher); -#endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY */ - DBUG_RETURN(0); -} - - -/* - Free strings in the SSL structure and clear 'use_ssl' flag. - NB! Errors are not reported until you do mysql_real_connect. -*/ - -#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - -static void -mysql_ssl_free(MYSQL *mysql __attribute__((unused))) -{ - struct st_VioSSLFd *ssl_fd= (struct st_VioSSLFd*) mysql->connector_fd; - DBUG_ENTER("mysql_ssl_free"); - - my_free(mysql->options.ssl_key); - my_free(mysql->options.ssl_cert); - my_free(mysql->options.ssl_ca); - my_free(mysql->options.ssl_capath); - my_free(mysql->options.ssl_cipher); - if (ssl_fd) - SSL_CTX_free(ssl_fd->ssl_context); - my_free(mysql->connector_fd); - mysql->options.ssl_key = 0; - mysql->options.ssl_cert = 0; - mysql->options.ssl_ca = 0; - mysql->options.ssl_capath = 0; - mysql->options.ssl_cipher= 0; - mysql->options.use_ssl = FALSE; - mysql->connector_fd = 0; - DBUG_VOID_RETURN; -} - -#endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY */ - -/* - Return the SSL cipher (if any) used for current - connection to the server. - - SYNOPSYS - mysql_get_ssl_cipher() - mysql pointer to the mysql connection - -*/ - -const char * STDCALL -mysql_get_ssl_cipher(MYSQL *mysql __attribute__((unused))) -{ - DBUG_ENTER("mysql_get_ssl_cipher"); -#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - if (mysql->net.vio && mysql->net.vio->ssl_arg) - DBUG_RETURN(SSL_get_cipher_name((SSL*)mysql->net.vio->ssl_arg)); -#endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY */ - DBUG_RETURN(NULL); -} - - -/* - Check the server's (subject) Common Name against the - hostname we connected to - - SYNOPSIS - ssl_verify_server_cert() - vio pointer to a SSL connected vio - server_hostname name of the server that we connected to - - RETURN VALUES - 0 Success - 1 Failed to validate server - - */ - -#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - -static int ssl_verify_server_cert(Vio *vio, const char* server_hostname) -{ - SSL *ssl; - X509 *server_cert; - char *cp1, *cp2; - char buf[256]; - DBUG_ENTER("ssl_verify_server_cert"); - DBUG_PRINT("enter", ("server_hostname: %s", server_hostname)); - - if (!(ssl= (SSL*)vio->ssl_arg)) - { - DBUG_PRINT("error", ("No SSL pointer found")); - DBUG_RETURN(1); - } - - if (!server_hostname) - { - DBUG_PRINT("error", ("No server hostname supplied")); - DBUG_RETURN(1); - } - - if (!(server_cert= SSL_get_peer_certificate(ssl))) - { - DBUG_PRINT("error", ("Could not get server certificate")); - DBUG_RETURN(1); - } - - /* - We already know that the certificate exchanged was valid; the SSL library - handled that. Now we need to verify that the contents of the certificate - are what we expect. - */ - - X509_NAME_oneline(X509_get_subject_name(server_cert), buf, sizeof(buf)); - X509_free (server_cert); - - DBUG_PRINT("info", ("hostname in cert: %s", buf)); - cp1= strstr(buf, "/CN="); - if (cp1) - { - cp1+= 4; /* Skip the "/CN=" that we found */ - /* Search for next / which might be the delimiter for email */ - cp2= strchr(cp1, '/'); - if (cp2) - *cp2= '\0'; - DBUG_PRINT("info", ("Server hostname in cert: %s", cp1)); - if (!strcmp(cp1, server_hostname)) - { - /* Success */ - DBUG_RETURN(0); - } - } - DBUG_PRINT("error", ("SSL certificate validation failure")); - DBUG_RETURN(1); -} - -#endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY */ - - -/* - Note that the mysql argument must be initialized with mysql_init() - before calling mysql_real_connect ! -*/ - -static my_bool cli_read_query_result(MYSQL *mysql); -static MYSQL_RES *cli_use_result(MYSQL *mysql); - -int cli_read_change_user_result(MYSQL *mysql) -{ - return cli_safe_read(mysql); -} - -static MYSQL_METHODS client_methods= -{ - cli_read_query_result, /* read_query_result */ - cli_advanced_command, /* advanced_command */ - cli_read_rows, /* read_rows */ - cli_use_result, /* use_result */ - cli_fetch_lengths, /* fetch_lengths */ - cli_flush_use_result, /* flush_use_result */ - cli_read_change_user_result /* read_change_user_result */ -#ifndef MYSQL_SERVER - ,cli_list_fields, /* list_fields */ - cli_read_prepare_result, /* read_prepare_result */ - cli_stmt_execute, /* stmt_execute */ - cli_read_binary_rows, /* read_binary_rows */ - cli_unbuffered_fetch, /* unbuffered_fetch */ - NULL, /* free_embedded_thd */ - cli_read_statistics, /* read_statistics */ - cli_read_query_result, /* next_result */ - cli_read_binary_rows /* read_rows_from_cursor */ -#endif -}; - - - -typedef enum my_cs_match_type_enum -{ - /* MySQL and OS charsets are fully compatible */ - my_cs_exact, - /* MySQL charset is very close to OS charset */ - my_cs_approx, - /* - MySQL knows this charset, but it is not supported as client character set. - */ - my_cs_unsupp -} my_cs_match_type; - - -typedef struct str2str_st -{ - const char *os_name; - const char *my_name; - my_cs_match_type param; -} MY_CSET_OS_NAME; - -const MY_CSET_OS_NAME charsets[]= -{ -#ifdef __WIN__ - {"cp437", "cp850", my_cs_approx}, - {"cp850", "cp850", my_cs_exact}, - {"cp852", "cp852", my_cs_exact}, - {"cp858", "cp850", my_cs_approx}, - {"cp866", "cp866", my_cs_exact}, - {"cp874", "tis620", my_cs_approx}, - {"cp932", "cp932", my_cs_exact}, - {"cp936", "gbk", my_cs_approx}, - {"cp949", "euckr", my_cs_approx}, - {"cp950", "big5", my_cs_exact}, - {"cp1200", "utf16le", my_cs_unsupp}, - {"cp1201", "utf16", my_cs_unsupp}, - {"cp1250", "cp1250", my_cs_exact}, - {"cp1251", "cp1251", my_cs_exact}, - {"cp1252", "latin1", my_cs_exact}, - {"cp1253", "greek", my_cs_exact}, - {"cp1254", "latin5", my_cs_exact}, - {"cp1255", "hebrew", my_cs_approx}, - {"cp1256", "cp1256", my_cs_exact}, - {"cp1257", "cp1257", my_cs_exact}, - {"cp10000", "macroman", my_cs_exact}, - {"cp10001", "sjis", my_cs_approx}, - {"cp10002", "big5", my_cs_approx}, - {"cp10008", "gb2312", my_cs_approx}, - {"cp10021", "tis620", my_cs_approx}, - {"cp10029", "macce", my_cs_exact}, - {"cp12001", "utf32", my_cs_unsupp}, - {"cp20107", "swe7", my_cs_exact}, - {"cp20127", "latin1", my_cs_approx}, - {"cp20866", "koi8r", my_cs_exact}, - {"cp20932", "ujis", my_cs_exact}, - {"cp20936", "gb2312", my_cs_approx}, - {"cp20949", "euckr", my_cs_approx}, - {"cp21866", "koi8u", my_cs_exact}, - {"cp28591", "latin1", my_cs_approx}, - {"cp28592", "latin2", my_cs_exact}, - {"cp28597", "greek", my_cs_exact}, - {"cp28598", "hebrew", my_cs_exact}, - {"cp28599", "latin5", my_cs_exact}, - {"cp28603", "latin7", my_cs_exact}, -#ifdef UNCOMMENT_THIS_WHEN_WL_4579_IS_DONE - {"cp28605", "latin9", my_cs_exact}, -#endif - {"cp38598", "hebrew", my_cs_exact}, - {"cp51932", "ujis", my_cs_exact}, - {"cp51936", "gb2312", my_cs_exact}, - {"cp51949", "euckr", my_cs_exact}, - {"cp51950", "big5", my_cs_exact}, -#ifdef UNCOMMENT_THIS_WHEN_WL_WL_4024_IS_DONE - {"cp54936", "gb18030", my_cs_exact}, -#endif - {"cp65001", "utf8", my_cs_exact}, - -#else /* not Windows */ - - {"646", "latin1", my_cs_approx}, /* Default on Solaris */ - {"ANSI_X3.4-1968", "latin1", my_cs_approx}, - {"ansi1251", "cp1251", my_cs_exact}, - {"armscii8", "armscii8", my_cs_exact}, - {"armscii-8", "armscii8", my_cs_exact}, - {"ASCII", "latin1", my_cs_approx}, - {"Big5", "big5", my_cs_exact}, - {"cp1251", "cp1251", my_cs_exact}, - {"cp1255", "hebrew", my_cs_approx}, - {"CP866", "cp866", my_cs_exact}, - {"eucCN", "gb2312", my_cs_exact}, - {"euc-CN", "gb2312", my_cs_exact}, - {"eucJP", "ujis", my_cs_exact}, - {"euc-JP", "ujis", my_cs_exact}, - {"eucKR", "euckr", my_cs_exact}, - {"euc-KR", "euckr", my_cs_exact}, -#ifdef UNCOMMENT_THIS_WHEN_WL_WL_4024_IS_DONE - {"gb18030", "gb18030", my_cs_exact}, -#endif - {"gb2312", "gb2312", my_cs_exact}, - {"gbk", "gbk", my_cs_exact}, - {"georgianps", "geostd8", my_cs_exact}, - {"georgian-ps", "geostd8", my_cs_exact}, - {"IBM-1252", "cp1252", my_cs_exact}, - - {"iso88591", "latin1", my_cs_approx}, - {"ISO_8859-1", "latin1", my_cs_approx}, - {"ISO8859-1", "latin1", my_cs_approx}, - {"ISO-8859-1", "latin1", my_cs_approx}, - - {"iso885913", "latin7", my_cs_exact}, - {"ISO_8859-13", "latin7", my_cs_exact}, - {"ISO8859-13", "latin7", my_cs_exact}, - {"ISO-8859-13", "latin7", my_cs_exact}, - -#ifdef UNCOMMENT_THIS_WHEN_WL_4579_IS_DONE - {"iso885915", "latin9", my_cs_exact}, - {"ISO_8859-15", "latin9", my_cs_exact}, - {"ISO8859-15", "latin9", my_cs_exact}, - {"ISO-8859-15", "latin9", my_cs_exact}, -#endif - - {"iso88592", "latin2", my_cs_exact}, - {"ISO_8859-2", "latin2", my_cs_exact}, - {"ISO8859-2", "latin2", my_cs_exact}, - {"ISO-8859-2", "latin2", my_cs_exact}, - - {"iso88597", "greek", my_cs_exact}, - {"ISO_8859-7", "greek", my_cs_exact}, - {"ISO8859-7", "greek", my_cs_exact}, - {"ISO-8859-7", "greek", my_cs_exact}, - - {"iso88598", "hebrew", my_cs_exact}, - {"ISO_8859-8", "hebrew", my_cs_exact}, - {"ISO8859-8", "hebrew", my_cs_exact}, - {"ISO-8859-8", "hebrew", my_cs_exact}, - - {"iso88599", "latin5", my_cs_exact}, - {"ISO_8859-9", "latin5", my_cs_exact}, - {"ISO8859-9", "latin5", my_cs_exact}, - {"ISO-8859-9", "latin5", my_cs_exact}, - - {"koi8r", "koi8r", my_cs_exact}, - {"KOI8-R", "koi8r", my_cs_exact}, - {"koi8u", "koi8u", my_cs_exact}, - {"KOI8-U", "koi8u", my_cs_exact}, - - {"roman8", "hp8", my_cs_exact}, /* Default on HP UX */ - - {"Shift_JIS", "sjis", my_cs_exact}, - {"SJIS", "sjis", my_cs_exact}, - {"shiftjisx0213", "sjis", my_cs_exact}, - - {"tis620", "tis620", my_cs_exact}, - {"tis-620", "tis620", my_cs_exact}, - - {"ujis", "ujis", my_cs_exact}, - - {"US-ASCII", "latin1", my_cs_approx}, - - {"utf8", "utf8", my_cs_exact}, - {"utf-8", "utf8", my_cs_exact}, -#endif - {NULL, NULL, 0} -}; - - -static const char * -my_os_charset_to_mysql_charset(const char *csname) -{ - const MY_CSET_OS_NAME *csp; - for (csp= charsets; csp->os_name; csp++) - { - if (!my_strcasecmp(&my_charset_latin1, csp->os_name, csname)) - { - switch (csp->param) - { - case my_cs_exact: - return csp->my_name; - - case my_cs_approx: - /* - Maybe we should print a warning eventually: - character set correspondence is not exact. - */ - return csp->my_name; - - default: - my_printf_error(ER_UNKNOWN_ERROR, - "OS character set '%s'" - " is not supported by MySQL client", - MYF(0), csp->my_name); - goto def; - } - } - } - - my_printf_error(ER_UNKNOWN_ERROR, - "Unknown OS character set '%s'.", - MYF(0), csname); - -def: - csname= MYSQL_DEFAULT_CHARSET_NAME; - my_printf_error(ER_UNKNOWN_ERROR, - "Switching to the default character set '%s'.", - MYF(0), csname); - return csname; -} - - -#ifndef __WIN__ -#include /* for getenv() */ -#ifdef HAVE_LANGINFO_H -#include -#endif -#ifdef HAVE_LOCALE_H -#include -#endif -#endif /* __WIN__ */ - - -static int -mysql_autodetect_character_set(MYSQL *mysql) -{ - const char *csname= MYSQL_DEFAULT_CHARSET_NAME; - -#ifdef __WIN__ - char cpbuf[64]; - { - my_snprintf(cpbuf, sizeof(cpbuf), "cp%d", (int) GetConsoleCP()); - csname= my_os_charset_to_mysql_charset(cpbuf); - } -#elif defined(HAVE_SETLOCALE) && defined(HAVE_NL_LANGINFO) - { - if (setlocale(LC_CTYPE, "") && (csname= nl_langinfo(CODESET))) - csname= my_os_charset_to_mysql_charset(csname); - } -#endif - - if (!(mysql->options.charset_name= my_strdup(csname, MYF(MY_WME)))) - return 1; - return 0; -} - - -static void -mysql_set_character_set_with_default_collation(MYSQL *mysql) -{ - const char *save= charsets_dir; - if (mysql->options.charset_dir) - charsets_dir=mysql->options.charset_dir; - - if ((mysql->charset= get_charset_by_csname(mysql->options.charset_name, - MY_CS_PRIMARY, MYF(MY_WME)))) - { - /* Try to set compiled default collation when it's possible. */ - CHARSET_INFO *collation; - if ((collation= - get_charset_by_name(MYSQL_DEFAULT_COLLATION_NAME, MYF(MY_WME))) && - my_charset_same(mysql->charset, collation)) - { - mysql->charset= collation; - } - else - { - /* - Default compiled collation not found, or is not applicable - to the requested character set. - Continue with the default collation of the character set. - */ - } - } - charsets_dir= save; -} - - -C_MODE_START -int mysql_init_character_set(MYSQL *mysql) -{ - /* Set character set */ - if (!mysql->options.charset_name) - { - if (!(mysql->options.charset_name= - my_strdup(MYSQL_DEFAULT_CHARSET_NAME,MYF(MY_WME)))) - return 1; - } - else if (!strcmp(mysql->options.charset_name, - MYSQL_AUTODETECT_CHARSET_NAME) && - mysql_autodetect_character_set(mysql)) - return 1; - - mysql_set_character_set_with_default_collation(mysql); - - if (!mysql->charset) - { - if (mysql->options.charset_dir) - set_mysql_extended_error(mysql, CR_CANT_READ_CHARSET, unknown_sqlstate, - ER(CR_CANT_READ_CHARSET), - mysql->options.charset_name, - mysql->options.charset_dir); - else - { - char cs_dir_name[FN_REFLEN]; - get_charsets_dir(cs_dir_name); - set_mysql_extended_error(mysql, CR_CANT_READ_CHARSET, unknown_sqlstate, - ER(CR_CANT_READ_CHARSET), - mysql->options.charset_name, - cs_dir_name); - } - return 1; - } - return 0; -} -C_MODE_END - -/*********** client side authentication support **************************/ - -typedef struct st_mysql_client_plugin_AUTHENTICATION auth_plugin_t; -static int client_mpvio_write_packet(struct st_plugin_vio*, const uchar*, int); -static int native_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql); -static int old_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql); - -static auth_plugin_t native_password_client_plugin= -{ - MYSQL_CLIENT_AUTHENTICATION_PLUGIN, - MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION, - native_password_plugin_name, - "R.J.Silk, Sergei Golubchik", - "Native MySQL authentication", - {1, 0, 0}, - "GPL", - NULL, - NULL, - NULL, - NULL, - native_password_auth_client -}; - -static auth_plugin_t old_password_client_plugin= -{ - MYSQL_CLIENT_AUTHENTICATION_PLUGIN, - MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION, - old_password_plugin_name, - "R.J.Silk, Sergei Golubchik", - "Old MySQL-3.23 authentication", - {1, 0, 0}, - "GPL", - NULL, - NULL, - NULL, - NULL, - old_password_auth_client -}; - -struct st_mysql_client_plugin *mysql_client_builtins[]= -{ - (struct st_mysql_client_plugin *)&native_password_client_plugin, - (struct st_mysql_client_plugin *)&old_password_client_plugin, - 0 -}; - - - -/* this is a "superset" of MYSQL_PLUGIN_VIO, in C++ I use inheritance */ -typedef struct { - int (*read_packet)(struct st_plugin_vio *vio, uchar **buf); - int (*write_packet)(struct st_plugin_vio *vio, const uchar *pkt, int pkt_len); - void (*info)(struct st_plugin_vio *vio, struct st_plugin_vio_info *info); - /* -= end of MYSQL_PLUGIN_VIO =- */ - MYSQL *mysql; - auth_plugin_t *plugin; /**< what plugin we're under */ - const char *db; - struct { - uchar *pkt; /**< pointer into NET::buff */ - uint pkt_len; - } cached_server_reply; - int packets_read, packets_written; /**< counters for send/received packets */ - int mysql_change_user; /**< if it's mysql_change_user() */ - int last_read_packet_len; /**< the length of the last *read* packet */ -} MCPVIO_EXT; - -/** - sends a COM_CHANGE_USER command with a caller provided payload - - Packet format: - - Bytes Content - ----- ---- - n user name - \0-terminated string - n password - 3.23 scramble - \0-terminated string (9 bytes) - otherwise - length (1 byte) coded - n database name - \0-terminated string - 2 character set number (if the server >= 4.1.x) - n client auth plugin name - \0-terminated string, - (if the server supports plugin auth) - - @retval 0 ok - @retval 1 error -*/ -static int send_change_user_packet(MCPVIO_EXT *mpvio, - const uchar *data, int data_len) -{ - MYSQL *mysql= mpvio->mysql; - char *buff, *end; - int res= 1; - - buff= my_alloca(USERNAME_LENGTH + data_len + 1 + NAME_LEN + 2 + NAME_LEN); - - end= strmake(buff, mysql->user, USERNAME_LENGTH) + 1; - - if (!data_len) - *end++= 0; - else - { - if (mysql->client_flag & CLIENT_SECURE_CONNECTION) - { - DBUG_ASSERT(data_len <= 255); - if (data_len > 255) - { - set_mysql_error(mysql, CR_MALFORMED_PACKET, unknown_sqlstate); - goto error; - } - *end++= data_len; - } - else - { - DBUG_ASSERT(data_len == SCRAMBLE_LENGTH_323 + 1); - DBUG_ASSERT(data[SCRAMBLE_LENGTH_323] == 0); - } - memcpy(end, data, data_len); - end+= data_len; - } - end= strmake(end, mpvio->db ? mpvio->db : "", NAME_LEN) + 1; - - if (mysql->server_capabilities & CLIENT_PROTOCOL_41) - { - int2store(end, (ushort) mysql->charset->number); - end+= 2; - } - - if (mysql->server_capabilities & CLIENT_PLUGIN_AUTH) - end= strmake(end, mpvio->plugin->name, NAME_LEN) + 1; - - res= simple_command(mysql, COM_CHANGE_USER, - (uchar*)buff, (ulong)(end-buff), 1); - -error: - my_afree(buff); - return res; -} - -/** - sends a client authentication packet (second packet in the 3-way handshake) - - Packet format (when the server is 4.0 or earlier): - - Bytes Content - ----- ---- - 2 client capabilities - 3 max packet size - n user name, \0-terminated - 9 scramble_323, \0-terminated - - Packet format (when the server is 4.1 or newer): - - Bytes Content - ----- ---- - 4 client capabilities - 4 max packet size - 1 charset number - 23 reserved (always 0) - n user name, \0-terminated - n plugin auth data (e.g. scramble), length (1 byte) coded - n database name, \0-terminated - (if CLIENT_CONNECT_WITH_DB is set in the capabilities) - n client auth plugin name - \0-terminated string, - (if CLIENT_PLUGIN_AUTH is set in the capabilities) - - @retval 0 ok - @retval 1 error -*/ -static int send_client_reply_packet(MCPVIO_EXT *mpvio, - const uchar *data, int data_len) -{ - MYSQL *mysql= mpvio->mysql; - NET *net= &mysql->net; - char *buff, *end; - - /* see end= buff+32 below, fixed size of the packet is 32 bytes */ - buff= my_alloca(33 + USERNAME_LENGTH + data_len + NAME_LEN + NAME_LEN); - - mysql->client_flag|= mysql->options.client_flag; - mysql->client_flag|= CLIENT_CAPABILITIES; - - if (mysql->client_flag & CLIENT_MULTI_STATEMENTS) - mysql->client_flag|= CLIENT_MULTI_RESULTS; - -#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - if (mysql->options.ssl_key || mysql->options.ssl_cert || - mysql->options.ssl_ca || mysql->options.ssl_capath || - mysql->options.ssl_cipher) - mysql->options.use_ssl= 1; - if (mysql->options.use_ssl) - mysql->client_flag|= CLIENT_SSL; -#endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY*/ - if (mpvio->db) - mysql->client_flag|= CLIENT_CONNECT_WITH_DB; - - /* Remove options that server doesn't support */ - mysql->client_flag= mysql->client_flag & - (~(CLIENT_COMPRESS | CLIENT_SSL | CLIENT_PROTOCOL_41) - | mysql->server_capabilities); - -#ifndef HAVE_COMPRESS - mysql->client_flag&= ~CLIENT_COMPRESS; -#endif - - if (mysql->client_flag & CLIENT_PROTOCOL_41) - { - /* 4.1 server and 4.1 client has a 32 byte option flag */ - int4store(buff,mysql->client_flag); - int4store(buff+4, net->max_packet_size); - buff[8]= (char) mysql->charset->number; - bzero(buff+9, 32-9); - end= buff+32; - } - else - { - int2store(buff, mysql->client_flag); - int3store(buff+2, net->max_packet_size); - end= buff+5; - } -#ifdef HAVE_OPENSSL - if (mysql->client_flag & CLIENT_SSL) - { - /* Do the SSL layering. */ - struct st_mysql_options *options= &mysql->options; - struct st_VioSSLFd *ssl_fd; - - /* - Send mysql->client_flag, max_packet_size - unencrypted otherwise - the server does not know we want to do SSL - */ - if (my_net_write(net, (uchar*)buff, (size_t) (end-buff)) || net_flush(net)) - { - set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate, - ER(CR_SERVER_LOST_EXTENDED), - "sending connection information to server", - errno); - goto error; - } - - /* Create the VioSSLConnectorFd - init SSL and load certs */ - if (!(ssl_fd= new_VioSSLConnectorFd(options->ssl_key, - options->ssl_cert, - options->ssl_ca, - options->ssl_capath, - options->ssl_cipher))) - { - set_mysql_error(mysql, CR_SSL_CONNECTION_ERROR, unknown_sqlstate); - goto error; - } - mysql->connector_fd= (unsigned char *) ssl_fd; - - /* Connect to the server */ - DBUG_PRINT("info", ("IO layer change in progress...")); - if (sslconnect(ssl_fd, net->vio, - (long) (mysql->options.connect_timeout))) - { - set_mysql_error(mysql, CR_SSL_CONNECTION_ERROR, unknown_sqlstate); - goto error; - } - DBUG_PRINT("info", ("IO layer change done!")); - - /* Verify server cert */ - if ((mysql->client_flag & CLIENT_SSL_VERIFY_SERVER_CERT) && - ssl_verify_server_cert(net->vio, mysql->host)) - { - set_mysql_error(mysql, CR_SSL_CONNECTION_ERROR, unknown_sqlstate); - goto error; - } - } -#endif /* HAVE_OPENSSL */ - - DBUG_PRINT("info",("Server version = '%s' capabilites: %lu status: %u client_flag: %lu", - mysql->server_version, mysql->server_capabilities, - mysql->server_status, mysql->client_flag)); - - compile_time_assert(MYSQL_USERNAME_LENGTH == USERNAME_LENGTH); - - /* This needs to be changed as it's not useful with big packets */ - if (mysql->user[0]) - strmake(end, mysql->user, USERNAME_LENGTH); - else - read_user_name(end); - - /* We have to handle different version of handshake here */ - DBUG_PRINT("info",("user: %s",end)); - end= strend(end) + 1; - if (data_len) - { - if (mysql->server_capabilities & CLIENT_SECURE_CONNECTION) - { - *end++= data_len; - memcpy(end, data, data_len); - end+= data_len; - } - else - { - DBUG_ASSERT(data_len == SCRAMBLE_LENGTH_323 + 1); /* incl. \0 at the end */ - memcpy(end, data, data_len); - end+= data_len; - } - } - else - *end++= 0; - - /* Add database if needed */ - if (mpvio->db && (mysql->server_capabilities & CLIENT_CONNECT_WITH_DB)) - { - end= strmake(end, mpvio->db, NAME_LEN) + 1; - mysql->db= my_strdup(mpvio->db, MYF(MY_WME)); - } - - if (mysql->server_capabilities & CLIENT_PLUGIN_AUTH) - end= strmake(end, mpvio->plugin->name, NAME_LEN) + 1; - - /* Write authentication package */ - if (my_net_write(net, (uchar*) buff, (size_t) (end-buff)) || net_flush(net)) - { - set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate, - ER(CR_SERVER_LOST_EXTENDED), - "sending authentication information", - errno); - goto error; - } - my_afree(buff); - return 0; - -error: - my_afree(buff); - return 1; -} - -/** - vio->read_packet() callback method for client authentication plugins - - This function is called by a client authentication plugin, when it wants - to read data from the server. -*/ -static int client_mpvio_read_packet(struct st_plugin_vio *mpv, uchar **buf) -{ - MCPVIO_EXT *mpvio= (MCPVIO_EXT*)mpv; - MYSQL *mysql= mpvio->mysql; - ulong pkt_len; - - /* there are cached data left, feed it to a plugin */ - if (mpvio->cached_server_reply.pkt) - { - *buf= mpvio->cached_server_reply.pkt; - mpvio->cached_server_reply.pkt= 0; - mpvio->packets_read++; - return mpvio->cached_server_reply.pkt_len; - } - - if (mpvio->packets_read == 0) - { - /* - the server handshake packet came from the wrong plugin, - or it's mysql_change_user(). Either way, there is no data - for a plugin to read. send a dummy packet to the server - to initiate a dialog. - */ - if (client_mpvio_write_packet(mpv, 0, 0)) - return (int)packet_error; - } - - /* otherwise read the data */ - pkt_len= (*mysql->methods->read_change_user_result)(mysql); - mpvio->last_read_packet_len= pkt_len; - *buf= mysql->net.read_pos; - - /* was it a request to change plugins ? */ - if (**buf == 254) - return (int)packet_error; /* if yes, this plugin shan't continue */ - - /* - the server sends \1\255 or \1\254 instead of just \255 or \254 - - for us to not confuse it with an error or "change plugin" packets. - We remove this escaping \1 here. - - See also server_mpvio_write_packet() where the escaping is done. - */ - if (pkt_len && **buf == 1) - { - (*buf)++; - pkt_len--; - } - mpvio->packets_read++; - return pkt_len; -} - -/** - vio->write_packet() callback method for client authentication plugins - - This function is called by a client authentication plugin, when it wants - to send data to the server. - - It transparently wraps the data into a change user or authentication - handshake packet, if neccessary. -*/ -static int client_mpvio_write_packet(struct st_plugin_vio *mpv, - const uchar *pkt, int pkt_len) -{ - int res; - MCPVIO_EXT *mpvio= (MCPVIO_EXT*)mpv; - - if (mpvio->packets_written == 0) - { - if (mpvio->mysql_change_user) - res= send_change_user_packet(mpvio, pkt, pkt_len); - else - res= send_client_reply_packet(mpvio, pkt, pkt_len); - } - else - { - NET *net= &mpvio->mysql->net; - if (mpvio->mysql->thd) - res= 1; /* no chit-chat in embedded */ - else - res= my_net_write(net, pkt, pkt_len) || net_flush(net); - if (res) - set_mysql_extended_error(mpvio->mysql, CR_SERVER_LOST, unknown_sqlstate, - ER(CR_SERVER_LOST_EXTENDED), - "sending authentication information", - errno); - } - mpvio->packets_written++; - return res; -} - -/** - fills MYSQL_PLUGIN_VIO_INFO structure with the information about the - connection -*/ -void mpvio_info(Vio *vio, MYSQL_PLUGIN_VIO_INFO *info) -{ - bzero(info, sizeof(*info)); - switch (vio->type) { - case VIO_TYPE_TCPIP: - info->protocol= MYSQL_VIO_TCP; - info->socket= vio->sd; - return; - case VIO_TYPE_SOCKET: - info->protocol= MYSQL_VIO_SOCKET; - info->socket= vio->sd; - return; - case VIO_TYPE_SSL: - { - struct sockaddr addr; - socklen_t addrlen= sizeof(addr); - if (getsockname(vio->sd, &addr, &addrlen)) - return; - info->protocol= addr.sa_family == AF_UNIX ? - MYSQL_VIO_SOCKET : MYSQL_VIO_TCP; - info->socket= vio->sd; - return; - } -#ifdef _WIN32 - case VIO_TYPE_NAMEDPIPE: - info->protocol= MYSQL_VIO_PIPE; - info->handle= vio->hPipe; - return; -#ifdef HAVE_SMEM - case VIO_TYPE_SHARED_MEMORY: - info->protocol= MYSQL_VIO_MEMORY; - info->handle= vio->handle_file_map; /* or what ? */ - return; -#endif -#endif - default: DBUG_ASSERT(0); - } -} - -static void client_mpvio_info(MYSQL_PLUGIN_VIO *vio, - MYSQL_PLUGIN_VIO_INFO *info) -{ - MCPVIO_EXT *mpvio= (MCPVIO_EXT*)vio; - mpvio_info(mpvio->mysql->net.vio, info); -} - -/** - Client side of the plugin driver authentication. - - @note this is used by both the mysql_real_connect and mysql_change_user - - @param mysql mysql - @param data pointer to the plugin auth data (scramble) in the - handshake packet - @param data_len the length of the data - @param data_plugin a plugin that data were prepared for - or 0 if it's mysql_change_user() - @param db initial db to use, can be 0 - - @retval 0 ok - @retval 1 error -*/ -int run_plugin_auth(MYSQL *mysql, char *data, uint data_len, - const char *data_plugin, const char *db) -{ - const char *auth_plugin_name; - auth_plugin_t *auth_plugin; - MCPVIO_EXT mpvio; - ulong pkt_length; - int res; - - DBUG_ENTER ("run_plugin_auth"); - /* determine the default/initial plugin to use */ - if (mysql->options.extension && mysql->options.extension->default_auth && - mysql->server_capabilities & CLIENT_PLUGIN_AUTH) - { - auth_plugin_name= mysql->options.extension->default_auth; - if (!(auth_plugin= (auth_plugin_t*) mysql_client_find_plugin(mysql, - auth_plugin_name, MYSQL_CLIENT_AUTHENTICATION_PLUGIN))) - DBUG_RETURN (1); /* oops, not found */ - } - else - { - auth_plugin= mysql->server_capabilities & CLIENT_PROTOCOL_41 ? - &native_password_client_plugin : &old_password_client_plugin; - auth_plugin_name= auth_plugin->name; - } - - DBUG_PRINT ("info", ("using plugin %s", auth_plugin_name)); - - mysql->net.last_errno= 0; /* just in case */ - - if (data_plugin && strcmp(data_plugin, auth_plugin_name)) - { - /* data was prepared for a different plugin, don't show it to this one */ - data= 0; - data_len= 0; - } - - mpvio.mysql_change_user= data_plugin == 0; - mpvio.cached_server_reply.pkt= (uchar*)data; - mpvio.cached_server_reply.pkt_len= data_len; - mpvio.read_packet= client_mpvio_read_packet; - mpvio.write_packet= client_mpvio_write_packet; - mpvio.info= client_mpvio_info; - mpvio.mysql= mysql; - mpvio.packets_read= mpvio.packets_written= 0; - mpvio.db= db; - mpvio.plugin= auth_plugin; - - res= auth_plugin->authenticate_user((struct st_plugin_vio *)&mpvio, mysql); - DBUG_PRINT ("info", ("authenticate_user returned %s", - res == CR_OK ? "CR_OK" : - res == CR_ERROR ? "CR_ERROR" : - res == CR_OK_HANDSHAKE_COMPLETE ? - "CR_OK_HANDSHAKE_COMPLETE" : "error")); - - compile_time_assert(CR_OK == -1); - compile_time_assert(CR_ERROR == 0); - if (res > CR_OK && mysql->net.read_pos[0] != 254) - { - /* - the plugin returned an error. write it down in mysql, - unless the error code is CR_ERROR and mysql->net.last_errno - is already set (the plugin has done it) - */ - DBUG_PRINT ("info", ("res=%d", res)); - if (res > CR_ERROR) - set_mysql_error(mysql, res, unknown_sqlstate); - else - if (!mysql->net.last_errno) - set_mysql_error(mysql, CR_UNKNOWN_ERROR, unknown_sqlstate); - DBUG_RETURN (1); - } - - /* read the OK packet (or use the cached value in mysql->net.read_pos */ - if (res == CR_OK) - pkt_length= (*mysql->methods->read_change_user_result)(mysql); - else /* res == CR_OK_HANDSHAKE_COMPLETE */ - pkt_length= mpvio.last_read_packet_len; - - DBUG_PRINT ("info", ("OK packet length=%lu", pkt_length)); - if (pkt_length == packet_error) - { - if (mysql->net.last_errno == CR_SERVER_LOST) - set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate, - ER(CR_SERVER_LOST_EXTENDED), - "reading authorization packet", - errno); - DBUG_RETURN (1); - } - - if (mysql->net.read_pos[0] == 254) - { - /* The server asked to use a different authentication plugin */ - if (pkt_length == 1) - { - /* old "use short scramble" packet */ - DBUG_PRINT ("info", ("old use short scramble packet from server")); - auth_plugin_name= old_password_plugin_name; - mpvio.cached_server_reply.pkt= (uchar*)mysql->scramble; - mpvio.cached_server_reply.pkt_len= SCRAMBLE_LENGTH + 1; - } - else - { - /* new "use different plugin" packet */ - uint len; - auth_plugin_name= (char*)mysql->net.read_pos + 1; - len= strlen(auth_plugin_name); /* safe as my_net_read always appends \0 */ - mpvio.cached_server_reply.pkt_len= pkt_length - len - 2; - mpvio.cached_server_reply.pkt= mysql->net.read_pos + len + 2; - DBUG_PRINT ("info", ("change plugin packet from server for plugin %s", - auth_plugin_name)); - } - - if (!(auth_plugin= (auth_plugin_t *) mysql_client_find_plugin(mysql, - auth_plugin_name, MYSQL_CLIENT_AUTHENTICATION_PLUGIN))) - DBUG_RETURN (1); - - mpvio.plugin= auth_plugin; - res= auth_plugin->authenticate_user((struct st_plugin_vio *)&mpvio, mysql); - - DBUG_PRINT ("info", ("second authenticate_user returned %s", - res == CR_OK ? "CR_OK" : - res == CR_ERROR ? "CR_ERROR" : - res == CR_OK_HANDSHAKE_COMPLETE ? - "CR_OK_HANDSHAKE_COMPLETE" : "error")); - if (res > CR_OK) - { - if (res > CR_ERROR) - set_mysql_error(mysql, res, unknown_sqlstate); - else - if (!mysql->net.last_errno) - set_mysql_error(mysql, CR_UNKNOWN_ERROR, unknown_sqlstate); - DBUG_RETURN (1); - } - - if (res != CR_OK_HANDSHAKE_COMPLETE) - { - /* Read what server thinks about out new auth message report */ - if (cli_safe_read(mysql) == packet_error) - { - if (mysql->net.last_errno == CR_SERVER_LOST) - set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate, - ER(CR_SERVER_LOST_EXTENDED), - "reading final connect information", - errno); - DBUG_RETURN (1); - } - } - } - /* - net->read_pos[0] should always be 0 here if the server implements - the protocol correctly - */ - DBUG_RETURN (mysql->net.read_pos[0] != 0); -} - -MYSQL * STDCALL -CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user, - const char *passwd, const char *db, - uint port, const char *unix_socket,ulong client_flag) -{ - char buff[NAME_LEN+USERNAME_LENGTH+100]; - int scramble_data_len, pkt_scramble_len= 0; - char *end,*host_info= 0, *server_version_end, *pkt_end; - char *scramble_data; - const char *scramble_plugin; - ulong pkt_length; - NET *net= &mysql->net; -#ifdef MYSQL_SERVER - thr_alarm_t alarmed; - ALARM alarm_buff; -#endif -#ifdef __WIN__ - HANDLE hPipe=INVALID_HANDLE_VALUE; -#endif -#ifdef HAVE_SYS_UN_H - struct sockaddr_un UNIXaddr; -#endif - DBUG_ENTER("mysql_real_connect"); - - DBUG_PRINT("enter",("host: %s db: %s user: %s (client)", - host ? host : "(Null)", - db ? db : "(Null)", - user ? user : "(Null)")); - - /* Test whether we're already connected */ - if (net->vio) - { - set_mysql_error(mysql, CR_ALREADY_CONNECTED, unknown_sqlstate); - DBUG_RETURN(0); - } - - mysql->methods= &client_methods; - net->vio = 0; /* If something goes wrong */ - mysql->client_flag=0; /* For handshake */ - - /* use default options */ - if (mysql->options.my_cnf_file || mysql->options.my_cnf_group) - { - mysql_read_default_options(&mysql->options, - (mysql->options.my_cnf_file ? - mysql->options.my_cnf_file : "my"), - mysql->options.my_cnf_group); - my_free(mysql->options.my_cnf_file); - my_free(mysql->options.my_cnf_group); - mysql->options.my_cnf_file=mysql->options.my_cnf_group=0; - } - - /* Some empty-string-tests are done because of ODBC */ - if (!host || !host[0]) - host=mysql->options.host; - if (!user || !user[0]) - { - user=mysql->options.user; - if (!user) - user= ""; - } - if (!passwd) - { - passwd=mysql->options.password; -#if !defined(DONT_USE_MYSQL_PWD) && !defined(MYSQL_SERVER) - if (!passwd) - passwd=getenv("MYSQL_PWD"); /* get it from environment */ -#endif - if (!passwd) - passwd= ""; - } - if (!db || !db[0]) - db=mysql->options.db; - if (!port) - port=mysql->options.port; - if (!unix_socket) - unix_socket=mysql->options.unix_socket; - - mysql->server_status=SERVER_STATUS_AUTOCOMMIT; - DBUG_PRINT("info", ("Connecting")); - - /* - Part 0: Grab a socket and connect it to the server - */ -#if defined(HAVE_SMEM) - if ((!mysql->options.protocol || - mysql->options.protocol == MYSQL_PROTOCOL_MEMORY) && - (!host || !strcmp(host,LOCAL_HOST))) - { - DBUG_PRINT("info", ("Using shared memory")); - if ((create_shared_memory(mysql,net, mysql->options.connect_timeout)) == - INVALID_HANDLE_VALUE) - { - DBUG_PRINT("error", - ("host: '%s' socket: '%s' shared memory: %s have_tcpip: %d", - host ? host : "", - unix_socket ? unix_socket : "", - (int) mysql->options.shared_memory_base_name, - (int) have_tcpip)); - if (mysql->options.protocol == MYSQL_PROTOCOL_MEMORY) - goto error; - - /* - Try also with PIPE or TCP/IP. Clear the error from - create_shared_memory(). - */ - - net_clear_error(net); - } - else - { - mysql->options.protocol=MYSQL_PROTOCOL_MEMORY; - unix_socket = 0; - host=mysql->options.shared_memory_base_name; - my_snprintf(host_info=buff, sizeof(buff)-1, - ER(CR_SHARED_MEMORY_CONNECTION), host); - } - } -#endif /* HAVE_SMEM */ -#if defined(HAVE_SYS_UN_H) - if (!net->vio && - (!mysql->options.protocol || - mysql->options.protocol == MYSQL_PROTOCOL_SOCKET) && - (unix_socket || mysql_unix_port) && - (!host || !strcmp(host,LOCAL_HOST))) - { - my_socket sock= socket(AF_UNIX, SOCK_STREAM, 0); - DBUG_PRINT("info", ("Using socket")); - if (sock == SOCKET_ERROR) - { - set_mysql_extended_error(mysql, CR_SOCKET_CREATE_ERROR, - unknown_sqlstate, - ER(CR_SOCKET_CREATE_ERROR), - socket_errno); - goto error; - } - - net->vio= vio_new(sock, VIO_TYPE_SOCKET, - VIO_LOCALHOST | VIO_BUFFERED_READ); - if (!net->vio) - { - DBUG_PRINT("error",("Unknow protocol %d ", mysql->options.protocol)); - set_mysql_error(mysql, CR_CONN_UNKNOW_PROTOCOL, unknown_sqlstate); - closesocket(sock); - goto error; - } - - host= LOCAL_HOST; - if (!unix_socket) - unix_socket= mysql_unix_port; - host_info= (char*) ER(CR_LOCALHOST_CONNECTION); - DBUG_PRINT("info", ("Using UNIX sock '%s'", unix_socket)); - - bzero((char*) &UNIXaddr, sizeof(UNIXaddr)); - UNIXaddr.sun_family= AF_UNIX; - strmake(UNIXaddr.sun_path, unix_socket, sizeof(UNIXaddr.sun_path)-1); - - if (my_connect(sock, (struct sockaddr *) &UNIXaddr, sizeof(UNIXaddr), - mysql->options.connect_timeout)) - { - DBUG_PRINT("error",("Got error %d on connect to local server", - socket_errno)); - set_mysql_extended_error(mysql, CR_CONNECTION_ERROR, - unknown_sqlstate, - ER(CR_CONNECTION_ERROR), - unix_socket, socket_errno); - vio_delete(net->vio); - net->vio= 0; - goto error; - } - mysql->options.protocol=MYSQL_PROTOCOL_SOCKET; - } -#elif defined(__WIN__) - if (!net->vio && - (mysql->options.protocol == MYSQL_PROTOCOL_PIPE || - (host && !strcmp(host,LOCAL_HOST_NAMEDPIPE)) || - (! have_tcpip && (unix_socket || !host && is_NT())))) - { - if ((hPipe= create_named_pipe(mysql, mysql->options.connect_timeout, - (char**) &host, (char**) &unix_socket)) == - INVALID_HANDLE_VALUE) - { - DBUG_PRINT("error", - ("host: '%s' socket: '%s' have_tcpip: %d", - host ? host : "", - unix_socket ? unix_socket : "", - (int) have_tcpip)); - if (mysql->options.protocol == MYSQL_PROTOCOL_PIPE || - (host && !strcmp(host,LOCAL_HOST_NAMEDPIPE)) || - (unix_socket && !strcmp(unix_socket,MYSQL_NAMEDPIPE))) - goto error; - /* Try also with TCP/IP */ - } - else - { - net->vio= vio_new_win32pipe(hPipe); - my_snprintf(host_info=buff, sizeof(buff)-1, - ER(CR_NAMEDPIPE_CONNECTION), unix_socket); - } - } -#endif - DBUG_PRINT("info", ("net->vio: %p protocol: %d", - net->vio, mysql->options.protocol)); - if (!net->vio && - (!mysql->options.protocol || - mysql->options.protocol == MYSQL_PROTOCOL_TCP)) - { - struct addrinfo *res_lst, hints, *t_res; - int gai_errno; - char port_buf[NI_MAXSERV]; - my_socket sock= SOCKET_ERROR; - int saved_error= 0, status= -1; - - unix_socket=0; /* This is not used */ - - if (!port) - port= mysql_port; - - if (!host) - host= LOCAL_HOST; - - my_snprintf(host_info=buff, sizeof(buff)-1, ER(CR_TCP_CONNECTION), host); - DBUG_PRINT("info",("Server name: '%s'. TCP sock: %d", host, port)); -#ifdef MYSQL_SERVER - thr_alarm_init(&alarmed); - thr_alarm(&alarmed, mysql->options.connect_timeout, &alarm_buff); -#endif - - DBUG_PRINT("info",("IP '%s'", "client")); - -#ifdef MYSQL_SERVER - thr_end_alarm(&alarmed); -#endif - - memset(&hints, 0, sizeof(hints)); - hints.ai_socktype= SOCK_STREAM; - hints.ai_protocol= IPPROTO_TCP; - hints.ai_family= AF_UNSPEC; - - DBUG_PRINT("info",("IPV6 getaddrinfo %s", host)); - my_snprintf(port_buf, NI_MAXSERV, "%d", port); - gai_errno= getaddrinfo(host, port_buf, &hints, &res_lst); - - if (gai_errno != 0) - { - /* - For DBUG we are keeping the right message but for client we default to - historical error message. - */ - DBUG_PRINT("info",("IPV6 getaddrinfo error %d", gai_errno)); - set_mysql_extended_error(mysql, CR_UNKNOWN_HOST, unknown_sqlstate, - ER(CR_UNKNOWN_HOST), host, errno); - - goto error; - } - - /* - A hostname might map to multiple IP addresses (IPv4/IPv6). Go over the - list of IP addresses until a successful connection can be established. - */ - DBUG_PRINT("info", ("Try connect on all addresses for host.")); - for (t_res= res_lst; t_res; t_res= t_res->ai_next) - { - DBUG_PRINT("info", ("Create socket, family: %d type: %d proto: %d", - t_res->ai_family, t_res->ai_socktype, - t_res->ai_protocol)); - sock= socket(t_res->ai_family, t_res->ai_socktype, t_res->ai_protocol); - if (sock == SOCKET_ERROR) - { - saved_error= socket_errno; - continue; - } - - DBUG_PRINT("info", ("Connect socket")); - status= my_connect(sock, t_res->ai_addr, t_res->ai_addrlen, - mysql->options.connect_timeout); - /* - Here we rely on my_connect() to return success only if the - connect attempt was really successful. Otherwise we would stop - trying another address, believing we were successful. - */ - if (!status) - break; - - /* - Save value as socket errno might be overwritten due to - calling a socket function below. - */ - saved_error= socket_errno; - - DBUG_PRINT("info", ("No success, close socket, try next address.")); - closesocket(sock); - } - DBUG_PRINT("info", - ("End of connect attempts, sock: %d status: %d error: %d", - sock, status, saved_error)); - - freeaddrinfo(res_lst); - - if (sock == SOCKET_ERROR) - { - set_mysql_extended_error(mysql, CR_IPSOCK_ERROR, unknown_sqlstate, - ER(CR_IPSOCK_ERROR), saved_error); - goto error; - } - - if (status) - { - DBUG_PRINT("error",("Got error %d on connect to '%s'", saved_error, host)); - set_mysql_extended_error(mysql, CR_CONN_HOST_ERROR, unknown_sqlstate, - ER(CR_CONN_HOST_ERROR), host, saved_error); - goto error; - } - - net->vio= vio_new(sock, VIO_TYPE_TCPIP, VIO_BUFFERED_READ); - if (! net->vio ) - { - DBUG_PRINT("error",("Unknow protocol %d ", mysql->options.protocol)); - set_mysql_error(mysql, CR_CONN_UNKNOW_PROTOCOL, unknown_sqlstate); - closesocket(sock); - goto error; - } - } - - DBUG_PRINT("info", ("net->vio: %p", net->vio)); - if (!net->vio) - { - DBUG_PRINT("error",("Unknow protocol %d ",mysql->options.protocol)); - set_mysql_error(mysql, CR_CONN_UNKNOW_PROTOCOL, unknown_sqlstate); - goto error; - } - - if (my_net_init(net, net->vio)) - { - vio_delete(net->vio); - net->vio = 0; - set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate); - goto error; - } - vio_keepalive(net->vio,TRUE); - - /* If user set read_timeout, let it override the default */ - if (mysql->options.read_timeout) - my_net_set_read_timeout(net, mysql->options.read_timeout); - - /* If user set write_timeout, let it override the default */ - if (mysql->options.write_timeout) - my_net_set_write_timeout(net, mysql->options.write_timeout); - - if (mysql->options.max_allowed_packet) - net->max_packet_size= mysql->options.max_allowed_packet; - - /* Get version info */ - mysql->protocol_version= PROTOCOL_VERSION; /* Assume this */ - if (mysql->options.connect_timeout && - vio_poll_read(net->vio, mysql->options.connect_timeout)) - { - set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate, - ER(CR_SERVER_LOST_EXTENDED), - "waiting for initial communication packet", - errno); - goto error; - } - - /* - Part 1: Connection established, read and parse first packet - */ - DBUG_PRINT("info", ("Read first packet.")); - - if ((pkt_length=cli_safe_read(mysql)) == packet_error) - { - if (mysql->net.last_errno == CR_SERVER_LOST) - set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate, - ER(CR_SERVER_LOST_EXTENDED), - "reading initial communication packet", - errno); - goto error; - } - pkt_end= (char*)net->read_pos + pkt_length; - /* Check if version of protocol matches current one */ - mysql->protocol_version= net->read_pos[0]; - DBUG_DUMP("packet",(uchar*) net->read_pos,10); - DBUG_PRINT("info",("mysql protocol version %d, server=%d", - PROTOCOL_VERSION, mysql->protocol_version)); - if (mysql->protocol_version != PROTOCOL_VERSION) - { - set_mysql_extended_error(mysql, CR_VERSION_ERROR, unknown_sqlstate, - ER(CR_VERSION_ERROR), mysql->protocol_version, - PROTOCOL_VERSION); - goto error; - } - server_version_end= end= strend((char*) net->read_pos+1); - mysql->thread_id=uint4korr(end+1); - end+=5; - /* - Scramble is split into two parts because old clients do not understand - long scrambles; here goes the first part. - */ - scramble_data= end; - scramble_data_len= SCRAMBLE_LENGTH_323 + 1; - scramble_plugin= old_password_plugin_name; - end+= scramble_data_len; - - if (pkt_end >= end + 1) - mysql->server_capabilities=uint2korr(end); - if (pkt_end >= end + 18) - { - /* New protocol with 16 bytes to describe server characteristics */ - mysql->server_language=end[2]; - mysql->server_status=uint2korr(end+3); - mysql->server_capabilities|= uint2korr(end+5) << 16; - pkt_scramble_len= end[7]; - } - end+= 18; - - if (mysql->options.secure_auth && passwd[0] && - !(mysql->server_capabilities & CLIENT_SECURE_CONNECTION)) - { - set_mysql_error(mysql, CR_SECURE_AUTH, unknown_sqlstate); - goto error; - } - - if (mysql_init_character_set(mysql)) - goto error; - - /* Save connection information */ - if (!my_multi_malloc(MYF(0), - &mysql->host_info, (uint) strlen(host_info)+1, - &mysql->host, (uint) strlen(host)+1, - &mysql->unix_socket,unix_socket ? - (uint) strlen(unix_socket)+1 : (uint) 1, - &mysql->server_version, - (uint) (server_version_end - (char*) net->read_pos + 1), - NullS) || - !(mysql->user=my_strdup(user,MYF(0))) || - !(mysql->passwd=my_strdup(passwd,MYF(0)))) - { - set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate); - goto error; - } - strmov(mysql->host_info,host_info); - strmov(mysql->host,host); - if (unix_socket) - strmov(mysql->unix_socket,unix_socket); - else - mysql->unix_socket=0; - strmov(mysql->server_version,(char*) net->read_pos+1); - mysql->port=port; - - if (pkt_end >= end + SCRAMBLE_LENGTH - SCRAMBLE_LENGTH_323 + 1) - { - /* - move the first scramble part - directly in the NET buffer - - to get a full continuous scramble. We've read all the header, - and can overwrite it now. - */ - memmove(end - SCRAMBLE_LENGTH_323, scramble_data, - SCRAMBLE_LENGTH_323); - scramble_data= end - SCRAMBLE_LENGTH_323; - if (mysql->server_capabilities & CLIENT_PLUGIN_AUTH) - { - scramble_data_len= pkt_scramble_len; - scramble_plugin= scramble_data + scramble_data_len; - if (scramble_data + scramble_data_len > pkt_end) - scramble_data_len= pkt_end - scramble_data; - } - else - { - scramble_data_len= pkt_end - scramble_data; - scramble_plugin= native_password_plugin_name; - } - } - else - mysql->server_capabilities&= ~CLIENT_SECURE_CONNECTION; - - mysql->client_flag= client_flag; - - /* - Part 2: invoke the plugin to send the authentication data to the server - */ - - if (run_plugin_auth(mysql, scramble_data, scramble_data_len, - scramble_plugin, db)) - goto error; - - /* - Part 3: authenticated, finish the initialization of the connection - */ - - if (mysql->client_flag & CLIENT_COMPRESS) /* We will use compression */ - net->compress=1; - -#ifdef CHECK_LICENSE - if (check_license(mysql)) - goto error; -#endif - - if (db && !mysql->db && mysql_select_db(mysql, db)) - { - if (mysql->net.last_errno == CR_SERVER_LOST) - set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate, - ER(CR_SERVER_LOST_EXTENDED), - "Setting intital database", - errno); - goto error; - } - - /* - Using init_commands is not supported when connecting from within the - server. - */ -#ifndef MYSQL_SERVER - if (mysql->options.init_commands) - { - DYNAMIC_ARRAY *init_commands= mysql->options.init_commands; - char **ptr= (char**)init_commands->buffer; - char **end_command= ptr + init_commands->elements; - - my_bool reconnect=mysql->reconnect; - mysql->reconnect=0; - - for (; ptr < end_command; ptr++) - { - int status; - - if (mysql_real_query(mysql,*ptr, (ulong) strlen(*ptr))) - goto error; - - do { - if (mysql->fields) - { - MYSQL_RES *res; - if (!(res= cli_use_result(mysql))) - goto error; - mysql_free_result(res); - } - if ((status= mysql_next_result(mysql)) > 0) - goto error; - } while (status == 0); - } - mysql->reconnect=reconnect; - } -#endif - - DBUG_PRINT("exit", ("Mysql handler: 0x%lx", (long) mysql)); - DBUG_RETURN(mysql); - -error: - DBUG_PRINT("error",("message: %u/%s (%s)", - net->last_errno, - net->sqlstate, - net->last_error)); - { - /* Free alloced memory */ - end_server(mysql); - mysql_close_free(mysql); - if (!(client_flag & CLIENT_REMEMBER_OPTIONS)) - mysql_close_free_options(mysql); - } - DBUG_RETURN(0); -} - - -my_bool mysql_reconnect(MYSQL *mysql) -{ - MYSQL tmp_mysql; - DBUG_ENTER("mysql_reconnect"); - DBUG_ASSERT(mysql); - DBUG_PRINT("enter", ("mysql->reconnect: %d", mysql->reconnect)); - - if (!mysql->reconnect || - (mysql->server_status & SERVER_STATUS_IN_TRANS) || !mysql->host_info) - { - /* Allow reconnect next time */ - mysql->server_status&= ~SERVER_STATUS_IN_TRANS; - set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate); - DBUG_RETURN(1); - } - mysql_init(&tmp_mysql); - tmp_mysql.options= mysql->options; - tmp_mysql.options.my_cnf_file= tmp_mysql.options.my_cnf_group= 0; - - if (!mysql_real_connect(&tmp_mysql,mysql->host,mysql->user,mysql->passwd, - mysql->db, mysql->port, mysql->unix_socket, - mysql->client_flag | CLIENT_REMEMBER_OPTIONS)) - { - mysql->net.last_errno= tmp_mysql.net.last_errno; - strmov(mysql->net.last_error, tmp_mysql.net.last_error); - strmov(mysql->net.sqlstate, tmp_mysql.net.sqlstate); - DBUG_RETURN(1); - } - if (mysql_set_character_set(&tmp_mysql, mysql->charset->csname)) - { - DBUG_PRINT("error", ("mysql_set_character_set() failed")); - bzero((char*) &tmp_mysql.options,sizeof(tmp_mysql.options)); - mysql_close(&tmp_mysql); - mysql->net.last_errno= tmp_mysql.net.last_errno; - strmov(mysql->net.last_error, tmp_mysql.net.last_error); - strmov(mysql->net.sqlstate, tmp_mysql.net.sqlstate); - DBUG_RETURN(1); - } - - DBUG_PRINT("info", ("reconnect succeded")); - tmp_mysql.reconnect= 1; - tmp_mysql.free_me= mysql->free_me; - - /* Move prepared statements (if any) over to the new mysql object */ - tmp_mysql.stmts= mysql->stmts; - mysql->stmts= 0; - - /* Don't free options as these are now used in tmp_mysql */ - bzero((char*) &mysql->options,sizeof(mysql->options)); - mysql->free_me=0; - mysql_close(mysql); - *mysql=tmp_mysql; - net_clear(&mysql->net, 1); - mysql->affected_rows= ~(my_ulonglong) 0; - DBUG_RETURN(0); -} - - -/************************************************************************** - Set current database -**************************************************************************/ - -int STDCALL -mysql_select_db(MYSQL *mysql, const char *db) -{ - int error; - DBUG_ENTER("mysql_select_db"); - DBUG_PRINT("enter",("db: '%s'",db)); - - if ((error=simple_command(mysql,COM_INIT_DB, (const uchar*) db, - (ulong) strlen(db),0))) - DBUG_RETURN(error); - my_free(mysql->db); - mysql->db=my_strdup(db,MYF(MY_WME)); - DBUG_RETURN(0); -} - - -/************************************************************************* - Send a QUIT to the server and close the connection - If handle is alloced by mysql connect free it. -*************************************************************************/ - -static void mysql_close_free_options(MYSQL *mysql) -{ - DBUG_ENTER("mysql_close_free_options"); - - my_free(mysql->options.user); - my_free(mysql->options.host); - my_free(mysql->options.password); - my_free(mysql->options.unix_socket); - my_free(mysql->options.db); - my_free(mysql->options.my_cnf_file); - my_free(mysql->options.my_cnf_group); - my_free(mysql->options.charset_dir); - my_free(mysql->options.charset_name); - my_free(mysql->options.client_ip); - if (mysql->options.init_commands) - { - DYNAMIC_ARRAY *init_commands= mysql->options.init_commands; - char **ptr= (char**)init_commands->buffer; - char **end= ptr + init_commands->elements; - for (; ptroptions.shared_memory_base_name != def_shared_memory_base_name) - my_free(mysql->options.shared_memory_base_name); -#endif /* HAVE_SMEM */ - if (mysql->options.extension) - { - my_free(mysql->options.extension->plugin_dir); - my_free(mysql->options.extension->default_auth); - my_free(mysql->options.extension); - } - bzero((char*) &mysql->options,sizeof(mysql->options)); - DBUG_VOID_RETURN; -} - - -static void mysql_close_free(MYSQL *mysql) -{ - my_free(mysql->host_info); - my_free(mysql->user); - my_free(mysql->passwd); - my_free(mysql->db); -#if defined(EMBEDDED_LIBRARY) || MYSQL_VERSION_ID >= 50100 - my_free(mysql->info_buffer); - mysql->info_buffer= 0; -#endif - /* Clear pointers for better safety */ - mysql->host_info= mysql->user= mysql->passwd= mysql->db= 0; -} - - -/** - For use when the connection to the server has been lost (in which case - the server has discarded all information about prepared statements - associated with the connection). - - Mark all statements in mysql->stmts by setting stmt->mysql= 0 if the - statement has transitioned beyond the MYSQL_STMT_INIT_DONE state, and - unlink the statement from the mysql->stmts list. - - The remaining pruned list of statements (if any) is kept in mysql->stmts. - - @param mysql pointer to the MYSQL object - - @return none -*/ -static void mysql_prune_stmt_list(MYSQL *mysql) -{ - LIST *element= mysql->stmts; - LIST *pruned_list= 0; - - for (; element; element= element->next) - { - MYSQL_STMT *stmt= (MYSQL_STMT *) element->data; - if (stmt->state != MYSQL_STMT_INIT_DONE) - { - stmt->mysql= 0; - stmt->last_errno= CR_SERVER_LOST; - strmov(stmt->last_error, ER(CR_SERVER_LOST)); - strmov(stmt->sqlstate, unknown_sqlstate); - } - else - { - pruned_list= list_add(pruned_list, element); - } - } - - mysql->stmts= pruned_list; -} - - -/* - Clear connection pointer of every statement: this is necessary - to give error on attempt to use a prepared statement of closed - connection. - - SYNOPSYS - mysql_detach_stmt_list() - stmt_list pointer to mysql->stmts - func_name name of calling function - - NOTE - There is similar code in mysql_reconnect(), so changes here - should also be reflected there. -*/ - -void mysql_detach_stmt_list(LIST **stmt_list __attribute__((unused)), - const char *func_name __attribute__((unused))) -{ -#ifdef MYSQL_CLIENT - /* Reset connection handle in all prepared statements. */ - LIST *element= *stmt_list; - char buff[MYSQL_ERRMSG_SIZE]; - DBUG_ENTER("mysql_detach_stmt_list"); - - my_snprintf(buff, sizeof(buff)-1, ER(CR_STMT_CLOSED), func_name); - for (; element; element= element->next) - { - MYSQL_STMT *stmt= (MYSQL_STMT *) element->data; - set_stmt_error(stmt, CR_STMT_CLOSED, unknown_sqlstate, buff); - stmt->mysql= 0; - /* No need to call list_delete for statement here */ - } - *stmt_list= 0; - DBUG_VOID_RETURN; -#endif /* MYSQL_CLIENT */ -} - - -void STDCALL mysql_close(MYSQL *mysql) -{ - DBUG_ENTER("mysql_close"); - if (mysql) /* Some simple safety */ - { - /* If connection is still up, send a QUIT message */ - if (mysql->net.vio != 0) - { - free_old_query(mysql); - mysql->status=MYSQL_STATUS_READY; /* Force command */ - mysql->reconnect=0; - simple_command(mysql,COM_QUIT,(uchar*) 0,0,1); - end_server(mysql); /* Sets mysql->net.vio= 0 */ - } - mysql_close_free_options(mysql); - mysql_close_free(mysql); - mysql_detach_stmt_list(&mysql->stmts, "mysql_close"); -#ifndef MYSQL_SERVER - if (mysql->thd) - (*mysql->methods->free_embedded_thd)(mysql); -#endif - if (mysql->free_me) - my_free(mysql); - } - DBUG_VOID_RETURN; -} - - -static my_bool cli_read_query_result(MYSQL *mysql) -{ - uchar *pos; - ulong field_count; - MYSQL_DATA *fields; - ulong length; - DBUG_ENTER("cli_read_query_result"); - - if ((length = cli_safe_read(mysql)) == packet_error) - DBUG_RETURN(1); - free_old_query(mysql); /* Free old result */ -#ifdef MYSQL_CLIENT /* Avoid warn of unused labels*/ -get_info: -#endif - pos=(uchar*) mysql->net.read_pos; - if ((field_count= net_field_length(&pos)) == 0) - { - mysql->affected_rows= net_field_length_ll(&pos); - mysql->insert_id= net_field_length_ll(&pos); - DBUG_PRINT("info",("affected_rows: %lu insert_id: %lu", - (ulong) mysql->affected_rows, - (ulong) mysql->insert_id)); - if (protocol_41(mysql)) - { - mysql->server_status=uint2korr(pos); pos+=2; - mysql->warning_count=uint2korr(pos); pos+=2; - } - else if (mysql->server_capabilities & CLIENT_TRANSACTIONS) - { - /* MySQL 4.0 protocol */ - mysql->server_status=uint2korr(pos); pos+=2; - mysql->warning_count= 0; - } - DBUG_PRINT("info",("status: %u warning_count: %u", - mysql->server_status, mysql->warning_count)); - if (pos < mysql->net.read_pos+length && net_field_length(&pos)) - mysql->info=(char*) pos; - DBUG_RETURN(0); - } -#ifdef MYSQL_CLIENT - if (field_count == NULL_LENGTH) /* LOAD DATA LOCAL INFILE */ - { - int error; - - if (!(mysql->options.client_flag & CLIENT_LOCAL_FILES)) - { - set_mysql_error(mysql, CR_MALFORMED_PACKET, unknown_sqlstate); - DBUG_RETURN(1); - } - - error= handle_local_infile(mysql,(char*) pos); - if ((length= cli_safe_read(mysql)) == packet_error || error) - DBUG_RETURN(1); - goto get_info; /* Get info packet */ - } -#endif - if (!(mysql->server_status & SERVER_STATUS_AUTOCOMMIT)) - mysql->server_status|= SERVER_STATUS_IN_TRANS; - - if (!(fields=cli_read_rows(mysql,(MYSQL_FIELD*)0, protocol_41(mysql) ? 7:5))) - DBUG_RETURN(1); - if (!(mysql->fields=unpack_fields(fields,&mysql->field_alloc, - (uint) field_count,0, - mysql->server_capabilities))) - DBUG_RETURN(1); - mysql->status= MYSQL_STATUS_GET_RESULT; - mysql->field_count= (uint) field_count; - DBUG_PRINT("exit",("ok")); - DBUG_RETURN(0); -} - - -/* - Send the query and return so we can do something else. - Needs to be followed by mysql_read_query_result() when we want to - finish processing it. -*/ - -int STDCALL -mysql_send_query(MYSQL* mysql, const char* query, ulong length) -{ - DBUG_ENTER("mysql_send_query"); - DBUG_RETURN(simple_command(mysql, COM_QUERY, (uchar*) query, length, 1)); -} - - -int STDCALL -mysql_real_query(MYSQL *mysql, const char *query, ulong length) -{ - DBUG_ENTER("mysql_real_query"); - DBUG_PRINT("enter",("handle: 0x%lx", (long) mysql)); - DBUG_PRINT("query",("Query = '%-.4096s'",query)); - - if (mysql_send_query(mysql,query,length)) - DBUG_RETURN(1); - DBUG_RETURN((int) (*mysql->methods->read_query_result)(mysql)); -} - - -/************************************************************************** - Alloc result struct for buffered results. All rows are read to buffer. - mysql_data_seek may be used. -**************************************************************************/ - -MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql) -{ - MYSQL_RES *result; - DBUG_ENTER("mysql_store_result"); - - if (!mysql->fields) - DBUG_RETURN(0); - if (mysql->status != MYSQL_STATUS_GET_RESULT) - { - set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate); - DBUG_RETURN(0); - } - mysql->status=MYSQL_STATUS_READY; /* server is ready */ - if (!(result=(MYSQL_RES*) my_malloc((uint) (sizeof(MYSQL_RES)+ - sizeof(ulong) * - mysql->field_count), - MYF(MY_WME | MY_ZEROFILL)))) - { - set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate); - DBUG_RETURN(0); - } - result->methods= mysql->methods; - result->eof=1; /* Marker for buffered */ - result->lengths=(ulong*) (result+1); - if (!(result->data= - (*mysql->methods->read_rows)(mysql,mysql->fields,mysql->field_count))) - { - my_free(result); - DBUG_RETURN(0); - } - mysql->affected_rows= result->row_count= result->data->rows; - result->data_cursor= result->data->data; - result->fields= mysql->fields; - result->field_alloc= mysql->field_alloc; - result->field_count= mysql->field_count; - /* The rest of result members is bzeroed in malloc */ - mysql->fields=0; /* fields is now in result */ - clear_alloc_root(&mysql->field_alloc); - /* just in case this was mistakenly called after mysql_stmt_execute() */ - mysql->unbuffered_fetch_owner= 0; - DBUG_RETURN(result); /* Data fetched */ -} - - -/************************************************************************** - Alloc struct for use with unbuffered reads. Data is fetched by domand - when calling to mysql_fetch_row. - mysql_data_seek is a noop. - - No other queries may be specified with the same MYSQL handle. - There shouldn't be much processing per row because mysql server shouldn't - have to wait for the client (and will not wait more than 30 sec/packet). -**************************************************************************/ - -static MYSQL_RES * cli_use_result(MYSQL *mysql) -{ - MYSQL_RES *result; - DBUG_ENTER("cli_use_result"); - - if (!mysql->fields) - DBUG_RETURN(0); - if (mysql->status != MYSQL_STATUS_GET_RESULT) - { - set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate); - DBUG_RETURN(0); - } - if (!(result=(MYSQL_RES*) my_malloc(sizeof(*result)+ - sizeof(ulong)*mysql->field_count, - MYF(MY_WME | MY_ZEROFILL)))) - DBUG_RETURN(0); - result->lengths=(ulong*) (result+1); - result->methods= mysql->methods; - if (!(result->row=(MYSQL_ROW) - my_malloc(sizeof(result->row[0])*(mysql->field_count+1), MYF(MY_WME)))) - { /* Ptrs: to one row */ - my_free(result); - DBUG_RETURN(0); - } - result->fields= mysql->fields; - result->field_alloc= mysql->field_alloc; - result->field_count= mysql->field_count; - result->current_field=0; - result->handle= mysql; - result->current_row= 0; - mysql->fields=0; /* fields is now in result */ - clear_alloc_root(&mysql->field_alloc); - mysql->status=MYSQL_STATUS_USE_RESULT; - mysql->unbuffered_fetch_owner= &result->unbuffered_fetch_cancelled; - DBUG_RETURN(result); /* Data is read to be fetched */ -} - - -/************************************************************************** - Return next row of the query results -**************************************************************************/ - -MYSQL_ROW STDCALL -mysql_fetch_row(MYSQL_RES *res) -{ - DBUG_ENTER("mysql_fetch_row"); - if (!res->data) - { /* Unbufferred fetch */ - if (!res->eof) - { - MYSQL *mysql= res->handle; - if (mysql->status != MYSQL_STATUS_USE_RESULT) - { - set_mysql_error(mysql, - res->unbuffered_fetch_cancelled ? - CR_FETCH_CANCELED : CR_COMMANDS_OUT_OF_SYNC, - unknown_sqlstate); - } - else if (!(read_one_row(mysql, res->field_count, res->row, res->lengths))) - { - res->row_count++; - DBUG_RETURN(res->current_row=res->row); - } - DBUG_PRINT("info",("end of data")); - res->eof=1; - mysql->status=MYSQL_STATUS_READY; - /* - Reset only if owner points to us: there is a chance that somebody - started new query after mysql_stmt_close(): - */ - if (mysql->unbuffered_fetch_owner == &res->unbuffered_fetch_cancelled) - mysql->unbuffered_fetch_owner= 0; - /* Don't clear handle in mysql_free_result */ - res->handle=0; - } - DBUG_RETURN((MYSQL_ROW) NULL); - } - { - MYSQL_ROW tmp; - if (!res->data_cursor) - { - DBUG_PRINT("info",("end of data")); - DBUG_RETURN(res->current_row=(MYSQL_ROW) NULL); - } - tmp = res->data_cursor->data; - res->data_cursor = res->data_cursor->next; - DBUG_RETURN(res->current_row=tmp); - } -} - - -/************************************************************************** - Get column lengths of the current row - If one uses mysql_use_result, res->lengths contains the length information, - else the lengths are calculated from the offset between pointers. -**************************************************************************/ - -ulong * STDCALL -mysql_fetch_lengths(MYSQL_RES *res) -{ - MYSQL_ROW column; - - if (!(column=res->current_row)) - return 0; /* Something is wrong */ - if (res->data) - (*res->methods->fetch_lengths)(res->lengths, column, res->field_count); - return res->lengths; -} - - -int STDCALL -mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg) -{ - DBUG_ENTER("mysql_option"); - DBUG_PRINT("enter",("option: %d",(int) option)); - switch (option) { - case MYSQL_OPT_CONNECT_TIMEOUT: - mysql->options.connect_timeout= *(uint*) arg; - break; - case MYSQL_OPT_READ_TIMEOUT: - mysql->options.read_timeout= *(uint*) arg; - break; - case MYSQL_OPT_WRITE_TIMEOUT: - mysql->options.write_timeout= *(uint*) arg; - break; - case MYSQL_OPT_COMPRESS: - mysql->options.compress= 1; /* Remember for connect */ - mysql->options.client_flag|= CLIENT_COMPRESS; - break; - case MYSQL_OPT_NAMED_PIPE: /* This option is depricated */ - mysql->options.protocol=MYSQL_PROTOCOL_PIPE; /* Force named pipe */ - break; - case MYSQL_OPT_LOCAL_INFILE: /* Allow LOAD DATA LOCAL ?*/ - if (!arg || test(*(uint*) arg)) - mysql->options.client_flag|= CLIENT_LOCAL_FILES; - else - mysql->options.client_flag&= ~CLIENT_LOCAL_FILES; - break; - case MYSQL_INIT_COMMAND: - add_init_command(&mysql->options,arg); - break; - case MYSQL_READ_DEFAULT_FILE: - my_free(mysql->options.my_cnf_file); - mysql->options.my_cnf_file=my_strdup(arg,MYF(MY_WME)); - break; - case MYSQL_READ_DEFAULT_GROUP: - my_free(mysql->options.my_cnf_group); - mysql->options.my_cnf_group=my_strdup(arg,MYF(MY_WME)); - break; - case MYSQL_SET_CHARSET_DIR: - my_free(mysql->options.charset_dir); - mysql->options.charset_dir=my_strdup(arg,MYF(MY_WME)); - break; - case MYSQL_SET_CHARSET_NAME: - my_free(mysql->options.charset_name); - mysql->options.charset_name=my_strdup(arg,MYF(MY_WME)); - break; - case MYSQL_OPT_PROTOCOL: - mysql->options.protocol= *(uint*) arg; - break; - case MYSQL_SHARED_MEMORY_BASE_NAME: -#ifdef HAVE_SMEM - if (mysql->options.shared_memory_base_name != def_shared_memory_base_name) - my_free(mysql->options.shared_memory_base_name); - mysql->options.shared_memory_base_name=my_strdup(arg,MYF(MY_WME)); -#endif - break; - case MYSQL_OPT_USE_REMOTE_CONNECTION: - case MYSQL_OPT_USE_EMBEDDED_CONNECTION: - case MYSQL_OPT_GUESS_CONNECTION: - mysql->options.methods_to_use= option; - break; - case MYSQL_SET_CLIENT_IP: - mysql->options.client_ip= my_strdup(arg, MYF(MY_WME)); - break; - case MYSQL_SECURE_AUTH: - mysql->options.secure_auth= *(my_bool *) arg; - break; - case MYSQL_REPORT_DATA_TRUNCATION: - mysql->options.report_data_truncation= test(*(my_bool *) arg); - break; - case MYSQL_OPT_RECONNECT: - mysql->reconnect= *(my_bool *) arg; - break; - case MYSQL_OPT_SSL_VERIFY_SERVER_CERT: - if (*(my_bool*) arg) - mysql->options.client_flag|= CLIENT_SSL_VERIFY_SERVER_CERT; - else - mysql->options.client_flag&= ~CLIENT_SSL_VERIFY_SERVER_CERT; - break; - case MYSQL_PLUGIN_DIR: - EXTENSION_SET_STRING(&mysql->options, plugin_dir, arg); - break; - case MYSQL_DEFAULT_AUTH: - EXTENSION_SET_STRING(&mysql->options, default_auth, arg); - break; - default: - DBUG_RETURN(1); - } - DBUG_RETURN(0); -} - - -/**************************************************************************** - Functions to get information from the MySQL structure - These are functions to make shared libraries more usable. -****************************************************************************/ - -/* MYSQL_RES */ -my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res) -{ - return res->row_count; -} - -unsigned int STDCALL mysql_num_fields(MYSQL_RES *res) -{ - return res->field_count; -} - -uint STDCALL mysql_errno(MYSQL *mysql) -{ - return mysql ? mysql->net.last_errno : mysql_server_last_errno; -} - - -const char * STDCALL mysql_error(MYSQL *mysql) -{ - return mysql ? mysql->net.last_error : mysql_server_last_error; -} - - -/* - Get version number for server in a form easy to test on - - SYNOPSIS - mysql_get_server_version() - mysql Connection - - EXAMPLE - 4.1.0-alfa -> 40100 - - NOTES - We will ensure that a newer server always has a bigger number. - - RETURN - Signed number > 323000 -*/ - -ulong STDCALL -mysql_get_server_version(MYSQL *mysql) -{ - uint major, minor, version; - char *pos= mysql->server_version, *end_pos; - major= (uint) strtoul(pos, &end_pos, 10); pos=end_pos+1; - minor= (uint) strtoul(pos, &end_pos, 10); pos=end_pos+1; - version= (uint) strtoul(pos, &end_pos, 10); - return (ulong) major*10000L+(ulong) (minor*100+version); -} - - -/* - mysql_set_character_set function sends SET NAMES cs_name to - the server (which changes character_set_client, character_set_result - and character_set_connection) and updates mysql->charset so other - functions like mysql_real_escape will work correctly. -*/ -int STDCALL mysql_set_character_set(MYSQL *mysql, const char *cs_name) -{ - struct charset_info_st *cs; - const char *save_csdir= charsets_dir; - - if (mysql->options.charset_dir) - charsets_dir= mysql->options.charset_dir; - - if (strlen(cs_name) < MY_CS_NAME_SIZE && - (cs= get_charset_by_csname(cs_name, MY_CS_PRIMARY, MYF(0)))) - { - char buff[MY_CS_NAME_SIZE + 10]; - charsets_dir= save_csdir; - /* Skip execution of "SET NAMES" for pre-4.1 servers */ - if (mysql_get_server_version(mysql) < 40100) - return 0; - sprintf(buff, "SET NAMES %s", cs_name); - if (!mysql_real_query(mysql, buff, (uint) strlen(buff))) - { - mysql->charset= cs; - } - } - else - { - char cs_dir_name[FN_REFLEN]; - get_charsets_dir(cs_dir_name); - set_mysql_extended_error(mysql, CR_CANT_READ_CHARSET, unknown_sqlstate, - ER(CR_CANT_READ_CHARSET), cs_name, cs_dir_name); - } - charsets_dir= save_csdir; - return mysql->net.last_errno; -} - -/** - client authentication plugin that does native MySQL authentication - using a 20-byte (4.1+) scramble -*/ -static int native_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) -{ - int pkt_len; - uchar *pkt; - - DBUG_ENTER("native_password_auth_client"); - - - if (((MCPVIO_EXT *)vio)->mysql_change_user) - { - /* - in mysql_change_user() the client sends the first packet. - we use the old scramble. - */ - pkt= (uchar*)mysql->scramble; - pkt_len= SCRAMBLE_LENGTH + 1; - } - else - { - /* read the scramble */ - if ((pkt_len= vio->read_packet(vio, &pkt)) < 0) - DBUG_RETURN(CR_ERROR); - - if (pkt_len != SCRAMBLE_LENGTH + 1) - DBUG_RETURN(CR_SERVER_HANDSHAKE_ERR); - - /* save it in MYSQL */ - memcpy(mysql->scramble, pkt, SCRAMBLE_LENGTH); - mysql->scramble[SCRAMBLE_LENGTH] = 0; - } - - if (mysql->passwd[0]) - { - char scrambled[SCRAMBLE_LENGTH + 1]; - DBUG_PRINT("info", ("sending scramble")); - scramble(scrambled, (char*)pkt, mysql->passwd); - if (vio->write_packet(vio, (uchar*)scrambled, SCRAMBLE_LENGTH)) - DBUG_RETURN(CR_ERROR); - } - else - { - DBUG_PRINT("info", ("no password")); - if (vio->write_packet(vio, 0, 0)) /* no password */ - DBUG_RETURN(CR_ERROR); - } - - DBUG_RETURN(CR_OK); -} - -/** - client authentication plugin that does old MySQL authentication - using an 8-byte (4.0-) scramble -*/ -static int old_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) -{ - uchar *pkt; - int pkt_len; - - DBUG_ENTER("old_password_auth_client"); - - if (((MCPVIO_EXT *)vio)->mysql_change_user) - { - /* - in mysql_change_user() the client sends the first packet. - we use the old scramble. - */ - pkt= (uchar*)mysql->scramble; - pkt_len= SCRAMBLE_LENGTH_323 + 1; - } - else - { - /* read the scramble */ - if ((pkt_len= vio->read_packet(vio, &pkt)) < 0) - DBUG_RETURN(CR_ERROR); - - if (pkt_len != SCRAMBLE_LENGTH_323 + 1 && - pkt_len != SCRAMBLE_LENGTH + 1) - DBUG_RETURN(CR_SERVER_HANDSHAKE_ERR); - - /* save it in MYSQL */ - memcpy(mysql->scramble, pkt, pkt_len); - mysql->scramble[pkt_len] = 0; - } - - if (mysql->passwd[0]) - { - char scrambled[SCRAMBLE_LENGTH_323 + 1]; - scramble_323(scrambled, (char*)pkt, mysql->passwd); - if (vio->write_packet(vio, (uchar*)scrambled, SCRAMBLE_LENGTH_323 + 1)) - DBUG_RETURN(CR_ERROR); - } - else - if (vio->write_packet(vio, 0, 0)) /* no password */ - DBUG_RETURN(CR_ERROR); - - DBUG_RETURN(CR_OK); -} diff --git a/deps/mysqllite/sql-common/client_plugin.c b/deps/mysqllite/sql-common/client_plugin.c deleted file mode 100644 index 6b4cca8aeeab8d..00000000000000 --- a/deps/mysqllite/sql-common/client_plugin.c +++ /dev/null @@ -1,471 +0,0 @@ -/* Copyright (C) 2010 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/** - @file - - Support code for the client side (libmysql) plugins - - Client plugins are somewhat different from server plugins, they are simpler. - - They do not need to be installed or in any way explicitly loaded on the - client, they are loaded automatically on demand. - One client plugin per shared object, soname *must* match the plugin name. - - There is no reference counting and no unloading either. -*/ - -#include -#include "mysql.h" -#include -#include -#include - -#include -#include "errmsg.h" -#include - -struct st_client_plugin_int { - struct st_client_plugin_int *next; - void *dlhandle; - struct st_mysql_client_plugin *plugin; -}; - -static my_bool initialized= 0; -static MEM_ROOT mem_root; - -static const char *plugin_declarations_sym= "_mysql_client_plugin_declaration_"; -static uint plugin_version[MYSQL_CLIENT_MAX_PLUGINS]= -{ - 0, /* these two are taken by Connector/C */ - 0, /* these two are taken by Connector/C */ - MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION -}; - -/* - Loaded plugins are stored in a linked list. - The list is append-only, the elements are added to the head (like in a stack). - The elements are added under a mutex, but the list can be read and traversed - without any mutex because once an element is added to the list, it stays - there. The main purpose of a mutex is to prevent two threads from - loading the same plugin twice in parallel. -*/ -struct st_client_plugin_int *plugin_list[MYSQL_CLIENT_MAX_PLUGINS]; -static pthread_mutex_t LOCK_load_client_plugin; - -static int is_not_initialized(MYSQL *mysql, const char *name) -{ - if (initialized) - return 0; - - set_mysql_extended_error(mysql, CR_AUTH_PLUGIN_CANNOT_LOAD, - unknown_sqlstate, ER(CR_AUTH_PLUGIN_CANNOT_LOAD), - name, "not initialized"); - return 1; -} - -/** - finds a plugin in the list - - @param name plugin name to search for - @param type plugin type - - @note this does NOT necessarily need a mutex, take care! - - @retval a pointer to a found plugin or 0 -*/ -static struct st_mysql_client_plugin * -find_plugin(const char *name, int type) -{ - struct st_client_plugin_int *p; - - DBUG_ASSERT(initialized); - DBUG_ASSERT(type >= 0 && type < MYSQL_CLIENT_MAX_PLUGINS); - if (type < 0 || type >= MYSQL_CLIENT_MAX_PLUGINS) - return 0; - - for (p= plugin_list[type]; p; p= p->next) - { - if (strcmp(p->plugin->name, name) == 0) - return p->plugin; - } - return NULL; -} - -/** - verifies the plugin and adds it to the list - - @param mysql MYSQL structure (for error reporting) - @param plugin plugin to install - @param dlhandle a handle to the shared object (returned by dlopen) - or 0 if the plugin was not dynamically loaded - @param argc number of arguments in the 'va_list args' - @param args arguments passed to the plugin initialization function - - @retval a pointer to an installed plugin or 0 -*/ -static struct st_mysql_client_plugin * -add_plugin(MYSQL *mysql, struct st_mysql_client_plugin *plugin, void *dlhandle, - int argc, va_list args) -{ - const char *errmsg; - struct st_client_plugin_int plugin_int, *p; - char errbuf[1024]; - - DBUG_ASSERT(initialized); - - plugin_int.plugin= plugin; - plugin_int.dlhandle= dlhandle; - - if (plugin->type >= MYSQL_CLIENT_MAX_PLUGINS) - { - errmsg= "Unknown client plugin type"; - goto err1; - } - - if (plugin->interface_version < plugin_version[plugin->type] || - (plugin->interface_version >> 8) > - (plugin_version[plugin->type] >> 8)) - { - errmsg= "Incompatible client plugin interface"; - goto err1; - } - - /* Call the plugin initialization function, if any */ - if (plugin->init && plugin->init(errbuf, sizeof(errbuf), argc, args)) - { - errmsg= errbuf; - goto err1; - } - - p= (struct st_client_plugin_int *) - memdup_root(&mem_root, &plugin_int, sizeof(plugin_int)); - - if (!p) - { - errmsg= "Out of memory"; - goto err2; - } - - safe_mutex_assert_owner(&LOCK_load_client_plugin); - - p->next= plugin_list[plugin->type]; - plugin_list[plugin->type]= p; - - return plugin; - -err2: - if (plugin->deinit) - plugin->deinit(); -err1: - set_mysql_extended_error(mysql, CR_AUTH_PLUGIN_CANNOT_LOAD, unknown_sqlstate, - ER(CR_AUTH_PLUGIN_CANNOT_LOAD), plugin->name, - errmsg); - if (dlhandle) - dlclose(dlhandle); - return NULL; -} - -/** - Loads plugins which are specified in the environment variable - LIBMYSQL_PLUGINS. - - Multiple plugins must be separated by semicolon. This function doesn't - return or log an error. - - The function is be called by mysql_client_plugin_init - - @todo - Support extended syntax, passing parameters to plugins, for example - LIBMYSQL_PLUGINS="plugin1(param1,param2);plugin2;..." - or - LIBMYSQL_PLUGINS="plugin1=int:param1,str:param2;plugin2;..." -*/ -static void load_env_plugins(MYSQL *mysql) -{ - char *plugs, *free_env, *s= getenv("LIBMYSQL_PLUGINS"); - - /* no plugins to load */ - if(!s) - return; - - free_env= plugs= my_strdup(s, MYF(MY_WME)); - - do { - if ((s= strchr(plugs, ';'))) - *s= '\0'; - mysql_load_plugin(mysql, plugs, -1, 0); - plugs= s + 1; - } while (s); - - my_free(free_env); -} - -/********** extern functions to be used by libmysql *********************/ - -/** - Initializes the client plugin layer. - - This function must be called before any other client plugin function. - - @retval 0 successful - @retval != 0 error occured -*/ -int mysql_client_plugin_init() -{ - MYSQL mysql; - struct st_mysql_client_plugin **builtin; - - if (initialized) - return 0; - - bzero(&mysql, sizeof(mysql)); /* dummy mysql for set_mysql_extended_error */ - - pthread_mutex_init(&LOCK_load_client_plugin, MY_MUTEX_INIT_SLOW); - init_alloc_root(&mem_root, 128, 128); - - bzero(&plugin_list, sizeof(plugin_list)); - - initialized= 1; - - pthread_mutex_lock(&LOCK_load_client_plugin); - - for (builtin= mysql_client_builtins; *builtin; builtin++) - add_plugin(&mysql, *builtin, 0, 0, 0); - - pthread_mutex_unlock(&LOCK_load_client_plugin); - - load_env_plugins(&mysql); - - return 0; -} - -/** - Deinitializes the client plugin layer. - - Unloades all client plugins and frees any associated resources. -*/ -void mysql_client_plugin_deinit() -{ - int i; - struct st_client_plugin_int *p; - - if (!initialized) - return; - - for (i=0; i < MYSQL_CLIENT_MAX_PLUGINS; i++) - for (p= plugin_list[i]; p; p= p->next) - { - if (p->plugin->deinit) - p->plugin->deinit(); - if (p->dlhandle) - dlclose(p->dlhandle); - } - - bzero(&plugin_list, sizeof(plugin_list)); - initialized= 0; - free_root(&mem_root, MYF(0)); - pthread_mutex_destroy(&LOCK_load_client_plugin); -} - -/************* public facing functions, for client consumption *********/ - -/* see for a full description */ -struct st_mysql_client_plugin * -mysql_client_register_plugin(MYSQL *mysql, - struct st_mysql_client_plugin *plugin) -{ - if (is_not_initialized(mysql, plugin->name)) - return NULL; - - pthread_mutex_lock(&LOCK_load_client_plugin); - - /* make sure the plugin wasn't loaded meanwhile */ - if (find_plugin(plugin->name, plugin->type)) - { - set_mysql_extended_error(mysql, CR_AUTH_PLUGIN_CANNOT_LOAD, - unknown_sqlstate, ER(CR_AUTH_PLUGIN_CANNOT_LOAD), - plugin->name, "it is already loaded"); - plugin= NULL; - } - else - plugin= add_plugin(mysql, plugin, 0, 0, 0); - - pthread_mutex_unlock(&LOCK_load_client_plugin); - return plugin; -} - -/* see for a full description */ -struct st_mysql_client_plugin * -mysql_load_plugin_v(MYSQL *mysql, const char *name, int type, - int argc, va_list args) -{ - const char *errmsg; - char dlpath[FN_REFLEN+1]; - void *sym, *dlhandle; - struct st_mysql_client_plugin *plugin; -#ifdef _WIN32 - char win_errormsg[2048]; -#endif - - DBUG_ENTER ("mysql_load_plugin_v"); - DBUG_PRINT ("entry", ("name=%s type=%d int argc=%d", name, type, argc)); - if (is_not_initialized(mysql, name)) - { - DBUG_PRINT ("leave", ("mysql not initialized")); - DBUG_RETURN (NULL); - } - - pthread_mutex_lock(&LOCK_load_client_plugin); - - /* make sure the plugin wasn't loaded meanwhile */ - if (type >= 0 && find_plugin(name, type)) - { - errmsg= "it is already loaded"; - goto err; - } - - /* Compile dll path */ - strxnmov(dlpath, sizeof(dlpath) - 1, - mysql->options.extension && mysql->options.extension->plugin_dir ? - mysql->options.extension->plugin_dir : PLUGINDIR, "/", - name, SO_EXT, NullS); - - DBUG_PRINT ("info", ("dlopeninig %s", dlpath)); - /* Open new dll handle */ - if (!(dlhandle= dlopen(dlpath, RTLD_NOW))) - { -#if defined(__APPLE__) - /* Apple supports plugins with .so also, so try this as well */ - strxnmov(dlpath, sizeof(dlpath) - 1, - mysql->options.extension && mysql->options.extension->plugin_dir ? - mysql->options.extension->plugin_dir : PLUGINDIR, "/", - name, ".so", NullS); - if ((dlhandle= dlopen(dlpath, RTLD_NOW))) - goto have_plugin; -#endif - - DBUG_PRINT ("info", ("failed to dlopen")); -#ifdef _WIN32 - if(FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, - 0, GetLastError(), 0, win_errormsg, 2048, NULL)) - errmsg= win_errormsg; - else - errmsg= ""; -#else - errmsg= dlerror(); -#endif - goto err; - } - -#if defined(__APPLE__) -have_plugin: -#endif - if (!(sym= dlsym(dlhandle, plugin_declarations_sym))) - { - errmsg= "not a plugin"; - dlclose(dlhandle); - goto err; - } - - plugin= (struct st_mysql_client_plugin*)sym; - - if (type >=0 && type != plugin->type) - { - errmsg= "type mismatch"; - goto err; - } - - if (strcmp(name, plugin->name)) - { - errmsg= "name mismatch"; - goto err; - } - - if (type < 0 && find_plugin(name, plugin->type)) - { - errmsg= "it is already loaded"; - goto err; - } - - plugin= add_plugin(mysql, plugin, dlhandle, argc, args); - - pthread_mutex_unlock(&LOCK_load_client_plugin); - - DBUG_PRINT ("leave", ("plugin loaded ok")); - DBUG_RETURN (plugin); - -err: - pthread_mutex_unlock(&LOCK_load_client_plugin); - DBUG_PRINT ("leave", ("plugin load error : %s", errmsg)); - set_mysql_extended_error(mysql, CR_AUTH_PLUGIN_CANNOT_LOAD, unknown_sqlstate, - ER(CR_AUTH_PLUGIN_CANNOT_LOAD), name, errmsg); - DBUG_RETURN (NULL); -} - -/* see for a full description */ -struct st_mysql_client_plugin * -mysql_load_plugin(MYSQL *mysql, const char *name, int type, int argc, ...) -{ - struct st_mysql_client_plugin *p; - va_list args; - va_start(args, argc); - p= mysql_load_plugin_v(mysql, name, type, argc, args); - va_end(args); - return p; -} - -/* see for a full description */ -struct st_mysql_client_plugin * -mysql_client_find_plugin(MYSQL *mysql, const char *name, int type) -{ - struct st_mysql_client_plugin *p; - - DBUG_ENTER ("mysql_client_find_plugin"); - DBUG_PRINT ("entry", ("name=%s, type=%d", name, type)); - if (is_not_initialized(mysql, name)) - DBUG_RETURN (NULL); - - if (type < 0 || type >= MYSQL_CLIENT_MAX_PLUGINS) - { - set_mysql_extended_error(mysql, CR_AUTH_PLUGIN_CANNOT_LOAD, unknown_sqlstate, - ER(CR_AUTH_PLUGIN_CANNOT_LOAD), name, - "invalid type"); - } - - if ((p= find_plugin(name, type))) - { - DBUG_PRINT ("leave", ("found %p", p)); - DBUG_RETURN (p); - } - - /* not found, load it */ - p= mysql_load_plugin(mysql, name, type, 0); - DBUG_PRINT ("leave", ("loaded %p", p)); - DBUG_RETURN (p); -} - - -/* see for a full description */ -int STDCALL mysql_plugin_options(struct st_mysql_client_plugin *plugin, - const char *option, - const void *value) -{ - DBUG_ENTER("mysql_plugin_options"); - /* does the plugin support options call? */ - if (!plugin || !plugin->options) - DBUG_RETURN(1); - DBUG_RETURN(plugin->options(option, value)); -} diff --git a/deps/mysqllite/sql-common/my_time.c b/deps/mysqllite/sql-common/my_time.c deleted file mode 100644 index 38384600fc168f..00000000000000 --- a/deps/mysqllite/sql-common/my_time.c +++ /dev/null @@ -1,1256 +0,0 @@ -/* Copyright (C) 2004-2006 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include -#include -/* Windows version of localtime_r() is declared in my_ptrhead.h */ -#include - -ulonglong log_10_int[20]= -{ - 1, 10, 100, 1000, 10000UL, 100000UL, 1000000UL, 10000000UL, - ULL(100000000), ULL(1000000000), ULL(10000000000), ULL(100000000000), - ULL(1000000000000), ULL(10000000000000), ULL(100000000000000), - ULL(1000000000000000), ULL(10000000000000000), ULL(100000000000000000), - ULL(1000000000000000000), ULL(10000000000000000000) -}; - - -/* Position for YYYY-DD-MM HH-MM-DD.FFFFFF AM in default format */ - -static uchar internal_format_positions[]= -{0, 1, 2, 3, 4, 5, 6, (uchar) 255}; - -static char time_separator=':'; - -static ulong const days_at_timestart=719528; /* daynr at 1970.01.01 */ -uchar days_in_month[]= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0}; - -/* - Offset of system time zone from UTC in seconds used to speed up - work of my_system_gmt_sec() function. -*/ -static long my_time_zone=0; - - -/* Calc days in one year. works with 0 <= year <= 99 */ - -uint calc_days_in_year(uint year) -{ - return ((year & 3) == 0 && (year%100 || (year%400 == 0 && year)) ? - 366 : 365); -} - -/** - @brief Check datetime value for validity according to flags. - - @param[in] ltime Date to check. - @param[in] not_zero_date ltime is not the zero date - @param[in] flags flags to check - (see str_to_datetime() flags in my_time.h) - @param[out] was_cut set to 2 if value was invalid according to flags. - (Feb 29 in non-leap etc.) This remains unchanged - if value is not invalid. - - @details Here we assume that year and month is ok! - If month is 0 we allow any date. (This only happens if we allow zero - date parts in str_to_datetime()) - Disallow dates with zero year and non-zero month and/or day. - - @return - 0 OK - 1 error -*/ - -my_bool check_date(const MYSQL_TIME *ltime, my_bool not_zero_date, - ulonglong flags, int *was_cut) -{ - if (not_zero_date) - { - if ((((flags & TIME_NO_ZERO_IN_DATE) || !(flags & TIME_FUZZY_DATE)) && - (ltime->month == 0 || ltime->day == 0)) || - (!(flags & TIME_INVALID_DATES) && - ltime->month && ltime->day > days_in_month[ltime->month-1] && - (ltime->month != 2 || calc_days_in_year(ltime->year) != 366 || - ltime->day != 29))) - { - *was_cut= 2; - return TRUE; - } - } - else if (flags & TIME_NO_ZERO_DATE) - { - /* - We don't set *was_cut here to signal that the problem was a zero date - and not an invalid date - */ - return TRUE; - } - return FALSE; -} - - -/* - Convert a timestamp string to a MYSQL_TIME value. - - SYNOPSIS - str_to_datetime() - str String to parse - length Length of string - l_time Date is stored here - flags Bitmap of following items - TIME_FUZZY_DATE Set if we should allow partial dates - TIME_DATETIME_ONLY Set if we only allow full datetimes. - TIME_NO_ZERO_IN_DATE Don't allow partial dates - TIME_NO_ZERO_DATE Don't allow 0000-00-00 date - TIME_INVALID_DATES Allow 2000-02-31 - was_cut 0 Value OK - 1 If value was cut during conversion - 2 check_date(date,flags) considers date invalid - - DESCRIPTION - At least the following formats are recogniced (based on number of digits) - YYMMDD, YYYYMMDD, YYMMDDHHMMSS, YYYYMMDDHHMMSS - YY-MM-DD, YYYY-MM-DD, YY-MM-DD HH.MM.SS - YYYYMMDDTHHMMSS where T is a the character T (ISO8601) - Also dates where all parts are zero are allowed - - The second part may have an optional .###### fraction part. - - NOTES - This function should work with a format position vector as long as the - following things holds: - - All date are kept together and all time parts are kept together - - Date and time parts must be separated by blank - - Second fractions must come after second part and be separated - by a '.'. (The second fractions are optional) - - AM/PM must come after second fractions (or after seconds if no fractions) - - Year must always been specified. - - If time is before date, then we will use datetime format only if - the argument consist of two parts, separated by space. - Otherwise we will assume the argument is a date. - - The hour part must be specified in hour-minute-second order. - - RETURN VALUES - MYSQL_TIMESTAMP_NONE String wasn't a timestamp, like - [DD [HH:[MM:[SS]]]].fraction. - l_time is not changed. - MYSQL_TIMESTAMP_DATE DATE string (YY MM and DD parts ok) - MYSQL_TIMESTAMP_DATETIME Full timestamp - MYSQL_TIMESTAMP_ERROR Timestamp with wrong values. - All elements in l_time is set to 0 -*/ - -#define MAX_DATE_PARTS 8 - -enum enum_mysql_timestamp_type -str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time, - ulonglong flags, int *was_cut) -{ - uint field_length, UNINIT_VAR(year_length), digits, i, number_of_fields; - uint date[MAX_DATE_PARTS], date_len[MAX_DATE_PARTS]; - uint add_hours= 0, start_loop; - ulong not_zero_date, allow_space; - my_bool is_internal_format; - const char *pos, *UNINIT_VAR(last_field_pos); - const char *end=str+length; - const uchar *format_position; - my_bool found_delimitier= 0, found_space= 0; - uint frac_pos, frac_len; - DBUG_ENTER("str_to_datetime"); - DBUG_PRINT("ENTER",("str: %.*s",length,str)); - - LINT_INIT(field_length); - - *was_cut= 0; - - /* Skip space at start */ - for (; str != end && my_isspace(&my_charset_latin1, *str) ; str++) - ; - if (str == end || ! my_isdigit(&my_charset_latin1, *str)) - { - *was_cut= 1; - DBUG_RETURN(MYSQL_TIMESTAMP_NONE); - } - - is_internal_format= 0; - /* This has to be changed if want to activate different timestamp formats */ - format_position= internal_format_positions; - - /* - Calculate number of digits in first part. - If length= 8 or >= 14 then year is of format YYYY. - (YYYY-MM-DD, YYYYMMDD, YYYYYMMDDHHMMSS) - */ - for (pos=str; - pos != end && (my_isdigit(&my_charset_latin1,*pos) || *pos == 'T'); - pos++) - ; - - digits= (uint) (pos-str); - start_loop= 0; /* Start of scan loop */ - date_len[format_position[0]]= 0; /* Length of year field */ - if (pos == end || *pos == '.') - { - /* Found date in internal format (only numbers like YYYYMMDD) */ - year_length= (digits == 4 || digits == 8 || digits >= 14) ? 4 : 2; - field_length= year_length; - is_internal_format= 1; - format_position= internal_format_positions; - } - else - { - if (format_position[0] >= 3) /* If year is after HHMMDD */ - { - /* - If year is not in first part then we have to determinate if we got - a date field or a datetime field. - We do this by checking if there is two numbers separated by - space in the input. - */ - while (pos < end && !my_isspace(&my_charset_latin1, *pos)) - pos++; - while (pos < end && !my_isdigit(&my_charset_latin1, *pos)) - pos++; - if (pos == end) - { - if (flags & TIME_DATETIME_ONLY) - { - *was_cut= 1; - DBUG_RETURN(MYSQL_TIMESTAMP_NONE); /* Can't be a full datetime */ - } - /* Date field. Set hour, minutes and seconds to 0 */ - date[0]= date[1]= date[2]= date[3]= date[4]= 0; - start_loop= 5; /* Start with first date part */ - } - } - - field_length= format_position[0] == 0 ? 4 : 2; - } - - /* - Only allow space in the first "part" of the datetime field and: - - after days, part seconds - - before and after AM/PM (handled by code later) - - 2003-03-03 20:00:20 AM - 20:00:20.000000 AM 03-03-2000 - */ - i= max((uint) format_position[0], (uint) format_position[1]); - set_if_bigger(i, (uint) format_position[2]); - allow_space= ((1 << i) | (1 << format_position[6])); - allow_space&= (1 | 2 | 4 | 8); - - not_zero_date= 0; - for (i = start_loop; - i < MAX_DATE_PARTS-1 && str != end && - my_isdigit(&my_charset_latin1,*str); - i++) - { - const char *start= str; - ulong tmp_value= (uint) (uchar) (*str++ - '0'); - - /* - Internal format means no delimiters; every field has a fixed - width. Otherwise, we scan until we find a delimiter and discard - leading zeroes -- except for the microsecond part, where leading - zeroes are significant, and where we never process more than six - digits. - */ - my_bool scan_until_delim= !is_internal_format && - ((i != format_position[6])); - - while (str != end && my_isdigit(&my_charset_latin1,str[0]) && - (scan_until_delim || --field_length)) - { - tmp_value=tmp_value*10 + (ulong) (uchar) (*str - '0'); - str++; - } - date_len[i]= (uint) (str - start); - if (tmp_value > 999999) /* Impossible date part */ - { - *was_cut= 1; - DBUG_RETURN(MYSQL_TIMESTAMP_NONE); - } - date[i]=tmp_value; - not_zero_date|= tmp_value; - - /* Length of next field */ - field_length= format_position[i+1] == 0 ? 4 : 2; - - if ((last_field_pos= str) == end) - { - i++; /* Register last found part */ - break; - } - /* Allow a 'T' after day to allow CCYYMMDDT type of fields */ - if (i == format_position[2] && *str == 'T') - { - str++; /* ISO8601: CCYYMMDDThhmmss */ - continue; - } - if (i == format_position[5]) /* Seconds */ - { - if (*str == '.') /* Followed by part seconds */ - { - str++; - field_length= 6; /* 6 digits */ - } - continue; - } - while (str != end && - (my_ispunct(&my_charset_latin1,*str) || - my_isspace(&my_charset_latin1,*str))) - { - if (my_isspace(&my_charset_latin1,*str)) - { - if (!(allow_space & (1 << i))) - { - *was_cut= 1; - DBUG_RETURN(MYSQL_TIMESTAMP_NONE); - } - found_space= 1; - } - str++; - found_delimitier= 1; /* Should be a 'normal' date */ - } - /* Check if next position is AM/PM */ - if (i == format_position[6]) /* Seconds, time for AM/PM */ - { - i++; /* Skip AM/PM part */ - if (format_position[7] != 255) /* If using AM/PM */ - { - if (str+2 <= end && (str[1] == 'M' || str[1] == 'm')) - { - if (str[0] == 'p' || str[0] == 'P') - add_hours= 12; - else if (str[0] != 'a' || str[0] != 'A') - continue; /* Not AM/PM */ - str+= 2; /* Skip AM/PM */ - /* Skip space after AM/PM */ - while (str != end && my_isspace(&my_charset_latin1,*str)) - str++; - } - } - } - last_field_pos= str; - } - if (found_delimitier && !found_space && (flags & TIME_DATETIME_ONLY)) - { - *was_cut= 1; - DBUG_RETURN(MYSQL_TIMESTAMP_NONE); /* Can't be a datetime */ - } - - str= last_field_pos; - - number_of_fields= i - start_loop; - while (i < MAX_DATE_PARTS) - { - date_len[i]= 0; - date[i++]= 0; - } - - if (!is_internal_format) - { - year_length= date_len[(uint) format_position[0]]; - if (!year_length) /* Year must be specified */ - { - *was_cut= 1; - DBUG_RETURN(MYSQL_TIMESTAMP_NONE); - } - - l_time->year= date[(uint) format_position[0]]; - l_time->month= date[(uint) format_position[1]]; - l_time->day= date[(uint) format_position[2]]; - l_time->hour= date[(uint) format_position[3]]; - l_time->minute= date[(uint) format_position[4]]; - l_time->second= date[(uint) format_position[5]]; - - frac_pos= (uint) format_position[6]; - frac_len= date_len[frac_pos]; - if (frac_len < 6) - date[frac_pos]*= (uint) log_10_int[6 - frac_len]; - l_time->second_part= date[frac_pos]; - - if (format_position[7] != (uchar) 255) - { - if (l_time->hour > 12) - { - *was_cut= 1; - goto err; - } - l_time->hour= l_time->hour%12 + add_hours; - } - } - else - { - l_time->year= date[0]; - l_time->month= date[1]; - l_time->day= date[2]; - l_time->hour= date[3]; - l_time->minute= date[4]; - l_time->second= date[5]; - if (date_len[6] < 6) - date[6]*= (uint) log_10_int[6 - date_len[6]]; - l_time->second_part=date[6]; - } - l_time->neg= 0; - - if (year_length == 2 && not_zero_date) - l_time->year+= (l_time->year < YY_PART_YEAR ? 2000 : 1900); - - if (number_of_fields < 3 || - l_time->year > 9999 || l_time->month > 12 || - l_time->day > 31 || l_time->hour > 23 || - l_time->minute > 59 || l_time->second > 59) - { - /* Only give warning for a zero date if there is some garbage after */ - if (!not_zero_date) /* If zero date */ - { - for (; str != end ; str++) - { - if (!my_isspace(&my_charset_latin1, *str)) - { - not_zero_date= 1; /* Give warning */ - break; - } - } - } - *was_cut= test(not_zero_date); - goto err; - } - - if (check_date(l_time, not_zero_date != 0, flags, was_cut)) - goto err; - - l_time->time_type= (number_of_fields <= 3 ? - MYSQL_TIMESTAMP_DATE : MYSQL_TIMESTAMP_DATETIME); - - for (; str != end ; str++) - { - if (!my_isspace(&my_charset_latin1,*str)) - { - *was_cut= 1; - break; - } - } - - DBUG_RETURN(l_time->time_type); - -err: - bzero((char*) l_time, sizeof(*l_time)); - DBUG_RETURN(MYSQL_TIMESTAMP_ERROR); -} - - -/* - Convert a time string to a MYSQL_TIME struct. - - SYNOPSIS - str_to_time() - str A string in full TIMESTAMP format or - [-] DAYS [H]H:MM:SS, [H]H:MM:SS, [M]M:SS, [H]HMMSS, - [M]MSS or [S]S - There may be an optional [.second_part] after seconds - length Length of str - l_time Store result here - warning Set MYSQL_TIME_WARN_TRUNCATED flag if the input string - was cut during conversion, and/or - MYSQL_TIME_WARN_OUT_OF_RANGE flag, if the value is - out of range. - - NOTES - Because of the extra days argument, this function can only - work with times where the time arguments are in the above order. - - RETURN - 0 ok - 1 error -*/ - -my_bool str_to_time(const char *str, uint length, MYSQL_TIME *l_time, - int *warning) -{ - ulong date[5]; - ulonglong value; - const char *end=str+length, *end_of_days; - my_bool found_days,found_hours; - uint state; - - l_time->neg=0; - *warning= 0; - for (; str != end && my_isspace(&my_charset_latin1,*str) ; str++) - length--; - if (str != end && *str == '-') - { - l_time->neg=1; - str++; - length--; - } - if (str == end) - return 1; - - /* Check first if this is a full TIMESTAMP */ - if (length >= 12) - { /* Probably full timestamp */ - int was_cut; - enum enum_mysql_timestamp_type - res= str_to_datetime(str, length, l_time, - (TIME_FUZZY_DATE | TIME_DATETIME_ONLY), &was_cut); - if ((int) res >= (int) MYSQL_TIMESTAMP_ERROR) - { - if (was_cut) - *warning|= MYSQL_TIME_WARN_TRUNCATED; - return res == MYSQL_TIMESTAMP_ERROR; - } - } - - /* Not a timestamp. Try to get this as a DAYS_TO_SECOND string */ - for (value=0; str != end && my_isdigit(&my_charset_latin1,*str) ; str++) - value=value*10L + (long) (*str - '0'); - - /* Skip all space after 'days' */ - end_of_days= str; - for (; str != end && my_isspace(&my_charset_latin1, str[0]) ; str++) - ; - - LINT_INIT(state); - found_days=found_hours=0; - if ((uint) (end-str) > 1 && str != end_of_days && - my_isdigit(&my_charset_latin1, *str)) - { /* Found days part */ - date[0]= (ulong) value; - state= 1; /* Assume next is hours */ - found_days= 1; - } - else if ((end-str) > 1 && *str == time_separator && - my_isdigit(&my_charset_latin1, str[1])) - { - date[0]= 0; /* Assume we found hours */ - date[1]= (ulong) value; - state=2; - found_hours=1; - str++; /* skip ':' */ - } - else - { - /* String given as one number; assume HHMMSS format */ - date[0]= 0; - date[1]= (ulong) (value/10000); - date[2]= (ulong) (value/100 % 100); - date[3]= (ulong) (value % 100); - state=4; - goto fractional; - } - - /* Read hours, minutes and seconds */ - for (;;) - { - for (value=0; str != end && my_isdigit(&my_charset_latin1,*str) ; str++) - value=value*10L + (long) (*str - '0'); - date[state++]= (ulong) value; - if (state == 4 || (end-str) < 2 || *str != time_separator || - !my_isdigit(&my_charset_latin1,str[1])) - break; - str++; /* Skip time_separator (':') */ - } - - if (state != 4) - { /* Not HH:MM:SS */ - /* Fix the date to assume that seconds was given */ - if (!found_hours && !found_days) - { - bmove_upp((uchar*) (date+4), (uchar*) (date+state), - sizeof(long)*(state-1)); - bzero((uchar*) date, sizeof(long)*(4-state)); - } - else - bzero((uchar*) (date+state), sizeof(long)*(4-state)); - } - -fractional: - /* Get fractional second part */ - if ((end-str) >= 2 && *str == '.' && my_isdigit(&my_charset_latin1,str[1])) - { - int field_length= 5; - str++; value=(uint) (uchar) (*str - '0'); - while (++str != end && my_isdigit(&my_charset_latin1, *str)) - { - if (field_length-- > 0) - value= value*10 + (uint) (uchar) (*str - '0'); - } - if (field_length > 0) - value*= (long) log_10_int[field_length]; - else if (field_length < 0) - *warning|= MYSQL_TIME_WARN_TRUNCATED; - date[4]= (ulong) value; - } - else - date[4]=0; - - /* Check for exponent part: E | E */ - /* (may occur as result of %g formatting of time value) */ - if ((end - str) > 1 && - (*str == 'e' || *str == 'E') && - (my_isdigit(&my_charset_latin1, str[1]) || - ((str[1] == '-' || str[1] == '+') && - (end - str) > 2 && - my_isdigit(&my_charset_latin1, str[2])))) - return 1; - - if (internal_format_positions[7] != 255) - { - /* Read a possible AM/PM */ - while (str != end && my_isspace(&my_charset_latin1, *str)) - str++; - if (str+2 <= end && (str[1] == 'M' || str[1] == 'm')) - { - if (str[0] == 'p' || str[0] == 'P') - { - str+= 2; - date[1]= date[1]%12 + 12; - } - else if (str[0] == 'a' || str[0] == 'A') - str+=2; - } - } - - /* Integer overflow checks */ - if (date[0] > UINT_MAX || date[1] > UINT_MAX || - date[2] > UINT_MAX || date[3] > UINT_MAX || - date[4] > UINT_MAX) - return 1; - - l_time->year= 0; /* For protocol::store_time */ - l_time->month= 0; - l_time->day= date[0]; - l_time->hour= date[1]; - l_time->minute= date[2]; - l_time->second= date[3]; - l_time->second_part= date[4]; - l_time->time_type= MYSQL_TIMESTAMP_TIME; - - /* Check if the value is valid and fits into MYSQL_TIME range */ - if (check_time_range(l_time, warning)) - return 1; - - /* Check if there is garbage at end of the MYSQL_TIME specification */ - if (str != end) - { - do - { - if (!my_isspace(&my_charset_latin1,*str)) - { - *warning|= MYSQL_TIME_WARN_TRUNCATED; - break; - } - } while (++str != end); - } - return 0; -} - - -/* - Check 'time' value to lie in the MYSQL_TIME range - - SYNOPSIS: - check_time_range() - time pointer to MYSQL_TIME value - warning set MYSQL_TIME_WARN_OUT_OF_RANGE flag if the value is out of range - - DESCRIPTION - If the time value lies outside of the range [-838:59:59, 838:59:59], - set it to the closest endpoint of the range and set - MYSQL_TIME_WARN_OUT_OF_RANGE flag in the 'warning' variable. - - RETURN - 0 time value is valid, but was possibly truncated - 1 time value is invalid -*/ - -int check_time_range(struct st_mysql_time *my_time, int *warning) -{ - longlong hour; - - if (my_time->minute >= 60 || my_time->second >= 60) - return 1; - - hour= my_time->hour + (24*my_time->day); - if (hour <= TIME_MAX_HOUR && - (hour != TIME_MAX_HOUR || my_time->minute != TIME_MAX_MINUTE || - my_time->second != TIME_MAX_SECOND || !my_time->second_part)) - return 0; - - my_time->day= 0; - my_time->hour= TIME_MAX_HOUR; - my_time->minute= TIME_MAX_MINUTE; - my_time->second= TIME_MAX_SECOND; - my_time->second_part= 0; - *warning|= MYSQL_TIME_WARN_OUT_OF_RANGE; - return 0; -} - - -/* - Prepare offset of system time zone from UTC for my_system_gmt_sec() func. - - SYNOPSIS - my_init_time() -*/ -void my_init_time(void) -{ - time_t seconds; - struct tm *l_time,tm_tmp; - MYSQL_TIME my_time; - my_bool not_used; - - seconds= (time_t) time((time_t*) 0); - localtime_r(&seconds,&tm_tmp); - l_time= &tm_tmp; - my_time_zone= 3600; /* Comp. for -3600 in my_gmt_sec */ - my_time.year= (uint) l_time->tm_year+1900; - my_time.month= (uint) l_time->tm_mon+1; - my_time.day= (uint) l_time->tm_mday; - my_time.hour= (uint) l_time->tm_hour; - my_time.minute= (uint) l_time->tm_min; - my_time.second= (uint) l_time->tm_sec; - my_system_gmt_sec(&my_time, &my_time_zone, ¬_used); /* Init my_time_zone */ -} - - -/* - Handle 2 digit year conversions - - SYNOPSIS - year_2000_handling() - year 2 digit year - - RETURN - Year between 1970-2069 -*/ - -uint year_2000_handling(uint year) -{ - if ((year=year+1900) < 1900+YY_PART_YEAR) - year+=100; - return year; -} - - -/* - Calculate nr of day since year 0 in new date-system (from 1615) - - SYNOPSIS - calc_daynr() - year Year (exact 4 digit year, no year conversions) - month Month - day Day - - NOTES: 0000-00-00 is a valid date, and will return 0 - - RETURN - Days since 0000-00-00 -*/ - -long calc_daynr(uint year,uint month,uint day) -{ - long delsum; - int temp; - int y= year; /* may be < 0 temporarily */ - DBUG_ENTER("calc_daynr"); - - if (y == 0 && month == 0 && day == 0) - DBUG_RETURN(0); /* Skip errors */ - /* Cast to int to be able to handle month == 0 */ - delsum= (long) (365 * y + 31 *((int) month - 1) + (int) day); - if (month <= 2) - y--; - else - delsum-= (long) ((int) month * 4 + 23) / 10; - temp=(int) ((y/100+1)*3)/4; - DBUG_PRINT("exit",("year: %d month: %d day: %d -> daynr: %ld", - y+(month <= 2),month,day,delsum+y/4-temp)); - DBUG_RETURN(delsum+(int) y/4-temp); -} /* calc_daynr */ - - -/* - Convert time in MYSQL_TIME representation in system time zone to its - my_time_t form (number of seconds in UTC since begginning of Unix Epoch). - - SYNOPSIS - my_system_gmt_sec() - t - time value to be converted - my_timezone - pointer to long where offset of system time zone - from UTC will be stored for caching - in_dst_time_gap - set to true if time falls into spring time-gap - - NOTES - The idea is to cache the time zone offset from UTC (including daylight - saving time) for the next call to make things faster. But currently we - just calculate this offset during startup (by calling my_init_time() - function) and use it all the time. - Time value provided should be legal time value (e.g. '2003-01-01 25:00:00' - is not allowed). - - RETURN VALUE - Time in UTC seconds since Unix Epoch representation. -*/ -my_time_t -my_system_gmt_sec(const MYSQL_TIME *t_src, long *my_timezone, - my_bool *in_dst_time_gap) -{ - uint loop; - time_t tmp= 0; - int shift= 0; - MYSQL_TIME tmp_time; - MYSQL_TIME *t= &tmp_time; - struct tm *l_time,tm_tmp; - long diff, current_timezone; - - /* - Use temp variable to avoid trashing input data, which could happen in - case of shift required for boundary dates processing. - */ - memcpy(&tmp_time, t_src, sizeof(MYSQL_TIME)); - - if (!validate_timestamp_range(t)) - return 0; - - /* - Calculate the gmt time based on current time and timezone - The -1 on the end is to ensure that if have a date that exists twice - (like 2002-10-27 02:00:0 MET), we will find the initial date. - - By doing -3600 we will have to call localtime_r() several times, but - I couldn't come up with a better way to get a repeatable result :( - - We can't use mktime() as it's buggy on many platforms and not thread safe. - - Note: this code assumes that our time_t estimation is not too far away - from real value (we assume that localtime_r(tmp) will return something - within 24 hrs from t) which is probably true for all current time zones. - - Note2: For the dates, which have time_t representation close to - MAX_INT32 (efficient time_t limit for supported platforms), we should - do a small trick to avoid overflow. That is, convert the date, which is - two days earlier, and then add these days to the final value. - - The same trick is done for the values close to 0 in time_t - representation for platfroms with unsigned time_t (QNX). - - To be more verbose, here is a sample (extracted from the code below): - (calc_daynr(2038, 1, 19) - (long) days_at_timestart)*86400L + 4*3600L - would return -2147480896 because of the long type overflow. In result - we would get 1901 year in localtime_r(), which is an obvious error. - - Alike problem raises with the dates close to Epoch. E.g. - (calc_daynr(1969, 12, 31) - (long) days_at_timestart)*86400L + 23*3600L - will give -3600. - - On some platforms, (E.g. on QNX) time_t is unsigned and localtime(-3600) - wil give us a date around 2106 year. Which is no good. - - Theoreticaly, there could be problems with the latter conversion: - there are at least two timezones, which had time switches near 1 Jan - of 1970 (because of political reasons). These are America/Hermosillo and - America/Mazatlan time zones. They changed their offset on - 1970-01-01 08:00:00 UTC from UTC-8 to UTC-7. For these zones - the code below will give incorrect results for dates close to - 1970-01-01, in the case OS takes into account these historical switches. - Luckily, it seems that we support only one platform with unsigned - time_t. It's QNX. And QNX does not support historical timezone data at all. - E.g. there are no /usr/share/zoneinfo/ files or any other mean to supply - historical information for localtime_r() etc. That is, the problem is not - relevant to QNX. - - We are safe with shifts close to MAX_INT32, as there are no known - time switches on Jan 2038 yet :) - */ - if ((t->year == TIMESTAMP_MAX_YEAR) && (t->month == 1) && (t->day > 4)) - { - /* - Below we will pass (uint) (t->day - shift) to calc_daynr. - As we don't want to get an overflow here, we will shift - only safe dates. That's why we have (t->day > 4) above. - */ - t->day-= 2; - shift= 2; - } -#ifdef TIME_T_UNSIGNED - else - { - /* - We can get 0 in time_t representaion only on 1969, 31 of Dec or on - 1970, 1 of Jan. For both dates we use shift, which is added - to t->day in order to step out a bit from the border. - This is required for platforms, where time_t is unsigned. - As far as I know, among the platforms we support it's only QNX. - Note: the order of below if-statements is significant. - */ - - if ((t->year == TIMESTAMP_MIN_YEAR + 1) && (t->month == 1) - && (t->day <= 10)) - { - t->day+= 2; - shift= -2; - } - - if ((t->year == TIMESTAMP_MIN_YEAR) && (t->month == 12) - && (t->day == 31)) - { - t->year++; - t->month= 1; - t->day= 2; - shift= -2; - } - } -#endif - - tmp= (time_t) (((calc_daynr((uint) t->year, (uint) t->month, (uint) t->day) - - (long) days_at_timestart)*86400L + (long) t->hour*3600L + - (long) (t->minute*60 + t->second)) + (time_t) my_time_zone - - 3600); - - current_timezone= my_time_zone; - localtime_r(&tmp,&tm_tmp); - l_time=&tm_tmp; - for (loop=0; - loop < 2 && - (t->hour != (uint) l_time->tm_hour || - t->minute != (uint) l_time->tm_min || - t->second != (uint) l_time->tm_sec); - loop++) - { /* One check should be enough ? */ - /* Get difference in days */ - int days= t->day - l_time->tm_mday; - if (days < -1) - days= 1; /* Month has wrapped */ - else if (days > 1) - days= -1; - diff=(3600L*(long) (days*24+((int) t->hour - (int) l_time->tm_hour)) + - (long) (60*((int) t->minute - (int) l_time->tm_min)) + - (long) ((int) t->second - (int) l_time->tm_sec)); - current_timezone+= diff+3600; /* Compensate for -3600 above */ - tmp+= (time_t) diff; - localtime_r(&tmp,&tm_tmp); - l_time=&tm_tmp; - } - /* - Fix that if we are in the non existing daylight saving time hour - we move the start of the next real hour. - - This code doesn't handle such exotical thing as time-gaps whose length - is more than one hour or non-integer (latter can theoretically happen - if one of seconds will be removed due leap correction, or because of - general time correction like it happened for Africa/Monrovia time zone - in year 1972). - */ - if (loop == 2 && t->hour != (uint) l_time->tm_hour) - { - int days= t->day - l_time->tm_mday; - if (days < -1) - days=1; /* Month has wrapped */ - else if (days > 1) - days= -1; - diff=(3600L*(long) (days*24+((int) t->hour - (int) l_time->tm_hour))+ - (long) (60*((int) t->minute - (int) l_time->tm_min)) + - (long) ((int) t->second - (int) l_time->tm_sec)); - if (diff == 3600) - tmp+=3600 - t->minute*60 - t->second; /* Move to next hour */ - else if (diff == -3600) - tmp-=t->minute*60 + t->second; /* Move to previous hour */ - - *in_dst_time_gap= 1; - } - *my_timezone= current_timezone; - - - /* shift back, if we were dealing with boundary dates */ - tmp+= shift*86400L; - - /* - This is possible for dates, which slightly exceed boundaries. - Conversion will pass ok for them, but we don't allow them. - First check will pass for platforms with signed time_t. - instruction above (tmp+= shift*86400L) could exceed - MAX_INT32 (== TIMESTAMP_MAX_VALUE) and overflow will happen. - So, tmp < TIMESTAMP_MIN_VALUE will be triggered. On platfroms - with unsigned time_t tmp+= shift*86400L might result in a number, - larger then TIMESTAMP_MAX_VALUE, so another check will work. - */ - if ((tmp < TIMESTAMP_MIN_VALUE) || (tmp > TIMESTAMP_MAX_VALUE)) - tmp= 0; - - return (my_time_t) tmp; -} /* my_system_gmt_sec */ - - -/* Set MYSQL_TIME structure to 0000-00-00 00:00:00.000000 */ - -void set_zero_time(MYSQL_TIME *tm, enum enum_mysql_timestamp_type time_type) -{ - bzero((void*) tm, sizeof(*tm)); - tm->time_type= time_type; -} - - -/* - Functions to convert time/date/datetime value to a string, - using default format. - This functions don't check that given MYSQL_TIME structure members are - in valid range. If they are not, return value won't reflect any - valid date either. Additionally, make_time doesn't take into - account time->day member: it's assumed that days have been converted - to hours already. - - RETURN - number of characters written to 'to' -*/ - -int my_time_to_str(const MYSQL_TIME *l_time, char *to) -{ - uint extra_hours= 0; - return sprintf(to, "%s%02u:%02u:%02u", (l_time->neg ? "-" : ""), - extra_hours+ l_time->hour, l_time->minute, l_time->second); -} - -int my_date_to_str(const MYSQL_TIME *l_time, char *to) -{ - return sprintf(to, "%04u-%02u-%02u", - l_time->year, l_time->month, l_time->day); -} - -int my_datetime_to_str(const MYSQL_TIME *l_time, char *to) -{ - return sprintf(to, "%04u-%02u-%02u %02u:%02u:%02u", - l_time->year, l_time->month, l_time->day, - l_time->hour, l_time->minute, l_time->second); -} - - -/* - Convert struct DATE/TIME/DATETIME value to string using built-in - MySQL time conversion formats. - - SYNOPSIS - my_TIME_to_string() - - NOTE - The string must have at least MAX_DATE_STRING_REP_LENGTH bytes reserved. -*/ - -int my_TIME_to_str(const MYSQL_TIME *l_time, char *to) -{ - switch (l_time->time_type) { - case MYSQL_TIMESTAMP_DATETIME: - return my_datetime_to_str(l_time, to); - case MYSQL_TIMESTAMP_DATE: - return my_date_to_str(l_time, to); - case MYSQL_TIMESTAMP_TIME: - return my_time_to_str(l_time, to); - case MYSQL_TIMESTAMP_NONE: - case MYSQL_TIMESTAMP_ERROR: - to[0]='\0'; - return 0; - default: - DBUG_ASSERT(0); - return 0; - } -} - - -/* - Convert datetime value specified as number to broken-down TIME - representation and form value of DATETIME type as side-effect. - - SYNOPSIS - number_to_datetime() - nr - datetime value as number - time_res - pointer for structure for broken-down representation - flags - flags to use in validating date, as in str_to_datetime() - was_cut 0 Value ok - 1 If value was cut during conversion - 2 check_date(date,flags) considers date invalid - - DESCRIPTION - Convert a datetime value of formats YYMMDD, YYYYMMDD, YYMMDDHHMSS, - YYYYMMDDHHMMSS to broken-down MYSQL_TIME representation. Return value in - YYYYMMDDHHMMSS format as side-effect. - - This function also checks if datetime value fits in DATETIME range. - - RETURN VALUE - -1 Timestamp with wrong values - anything else DATETIME as integer in YYYYMMDDHHMMSS format - Datetime value in YYYYMMDDHHMMSS format. -*/ - -longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res, - ulonglong flags, int *was_cut) -{ - long part1,part2; - - *was_cut= 0; - bzero((char*) time_res, sizeof(*time_res)); - time_res->time_type=MYSQL_TIMESTAMP_DATE; - - if (nr == LL(0) || nr >= LL(10000101000000)) - { - time_res->time_type=MYSQL_TIMESTAMP_DATETIME; - goto ok; - } - if (nr < 101) - goto err; - if (nr <= (YY_PART_YEAR-1)*10000L+1231L) - { - nr= (nr+20000000L)*1000000L; /* YYMMDD, year: 2000-2069 */ - goto ok; - } - if (nr < (YY_PART_YEAR)*10000L+101L) - goto err; - if (nr <= 991231L) - { - nr= (nr+19000000L)*1000000L; /* YYMMDD, year: 1970-1999 */ - goto ok; - } - /* - Though officially we support DATE values from 1000-01-01 only, one can - easily insert a value like 1-1-1. So, for consistency reasons such dates - are allowed when TIME_FUZZY_DATE is set. - */ - if (nr < 10000101L && !(flags & TIME_FUZZY_DATE)) - goto err; - if (nr <= 99991231L) - { - nr= nr*1000000L; - goto ok; - } - if (nr < 101000000L) - goto err; - - time_res->time_type=MYSQL_TIMESTAMP_DATETIME; - - if (nr <= (YY_PART_YEAR-1)*LL(10000000000)+LL(1231235959)) - { - nr= nr+LL(20000000000000); /* YYMMDDHHMMSS, 2000-2069 */ - goto ok; - } - if (nr < YY_PART_YEAR*LL(10000000000)+ LL(101000000)) - goto err; - if (nr <= LL(991231235959)) - nr= nr+LL(19000000000000); /* YYMMDDHHMMSS, 1970-1999 */ - - ok: - part1=(long) (nr/LL(1000000)); - part2=(long) (nr - (longlong) part1*LL(1000000)); - time_res->year= (int) (part1/10000L); part1%=10000L; - time_res->month= (int) part1 / 100; - time_res->day= (int) part1 % 100; - time_res->hour= (int) (part2/10000L); part2%=10000L; - time_res->minute=(int) part2 / 100; - time_res->second=(int) part2 % 100; - - if (time_res->year <= 9999 && time_res->month <= 12 && - time_res->day <= 31 && time_res->hour <= 23 && - time_res->minute <= 59 && time_res->second <= 59 && - !check_date(time_res, (nr != 0), flags, was_cut)) - return nr; - - /* Don't want to have was_cut get set if NO_ZERO_DATE was violated. */ - if (!nr && (flags & TIME_NO_ZERO_DATE)) - return LL(-1); - - err: - *was_cut= 1; - return LL(-1); -} - - -/* Convert time value to integer in YYYYMMDDHHMMSS format */ - -ulonglong TIME_to_ulonglong_datetime(const MYSQL_TIME *my_time) -{ - return ((ulonglong) (my_time->year * 10000UL + - my_time->month * 100UL + - my_time->day) * ULL(1000000) + - (ulonglong) (my_time->hour * 10000UL + - my_time->minute * 100UL + - my_time->second)); -} - - -/* Convert MYSQL_TIME value to integer in YYYYMMDD format */ - -ulonglong TIME_to_ulonglong_date(const MYSQL_TIME *my_time) -{ - return (ulonglong) (my_time->year * 10000UL + my_time->month * 100UL + - my_time->day); -} - - -/* - Convert MYSQL_TIME value to integer in HHMMSS format. - This function doesn't take into account time->day member: - it's assumed that days have been converted to hours already. -*/ - -ulonglong TIME_to_ulonglong_time(const MYSQL_TIME *my_time) -{ - return (ulonglong) (my_time->hour * 10000UL + - my_time->minute * 100UL + - my_time->second); -} - - -/* - Convert struct MYSQL_TIME (date and time split into year/month/day/hour/... - to a number in format YYYYMMDDHHMMSS (DATETIME), - YYYYMMDD (DATE) or HHMMSS (TIME). - - SYNOPSIS - TIME_to_ulonglong() - - DESCRIPTION - The function is used when we need to convert value of time item - to a number if it's used in numeric context, i. e.: - SELECT NOW()+1, CURDATE()+0, CURTIMIE()+0; - SELECT ?+1; - - NOTE - This function doesn't check that given MYSQL_TIME structure members are - in valid range. If they are not, return value won't reflect any - valid date either. -*/ - -ulonglong TIME_to_ulonglong(const MYSQL_TIME *my_time) -{ - switch (my_time->time_type) { - case MYSQL_TIMESTAMP_DATETIME: - return TIME_to_ulonglong_datetime(my_time); - case MYSQL_TIMESTAMP_DATE: - return TIME_to_ulonglong_date(my_time); - case MYSQL_TIMESTAMP_TIME: - return TIME_to_ulonglong_time(my_time); - case MYSQL_TIMESTAMP_NONE: - case MYSQL_TIMESTAMP_ERROR: - return ULL(0); - default: - DBUG_ASSERT(0); - } - return 0; -} - diff --git a/deps/mysqllite/sql-common/pack.c b/deps/mysqllite/sql-common/pack.c deleted file mode 100644 index 7ff89471b45701..00000000000000 --- a/deps/mysqllite/sql-common/pack.c +++ /dev/null @@ -1,121 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include -#include - -/* Get the length of next field. Change parameter to point at fieldstart */ -ulong STDCALL net_field_length(uchar **packet) -{ - reg1 uchar *pos= (uchar *)*packet; - if (*pos < 251) - { - (*packet)++; - return (ulong) *pos; - } - if (*pos == 251) - { - (*packet)++; - return NULL_LENGTH; - } - if (*pos == 252) - { - (*packet)+=3; - return (ulong) uint2korr(pos+1); - } - if (*pos == 253) - { - (*packet)+=4; - return (ulong) uint3korr(pos+1); - } - (*packet)+=9; /* Must be 254 when here */ - return (ulong) uint4korr(pos+1); -} - -/* The same as above but returns longlong */ -my_ulonglong net_field_length_ll(uchar **packet) -{ - reg1 uchar *pos= *packet; - if (*pos < 251) - { - (*packet)++; - return (my_ulonglong) *pos; - } - if (*pos == 251) - { - (*packet)++; - return (my_ulonglong) NULL_LENGTH; - } - if (*pos == 252) - { - (*packet)+=3; - return (my_ulonglong) uint2korr(pos+1); - } - if (*pos == 253) - { - (*packet)+=4; - return (my_ulonglong) uint3korr(pos+1); - } - (*packet)+=9; /* Must be 254 when here */ -#ifdef NO_CLIENT_LONGLONG - return (my_ulonglong) uint4korr(pos+1); -#else - return (my_ulonglong) uint8korr(pos+1); -#endif -} - -/* - Store an integer with simple packing into a output package - - SYNOPSIS - net_store_length() - pkg Store the packed integer here - length integers to store - - NOTES - This is mostly used to store lengths of strings. - We have to cast the result for the LL() becasue of a bug in Forte CC - compiler. - - RETURN - Position in 'pkg' after the packed length -*/ - -uchar *net_store_length(uchar *packet, ulonglong length) -{ - if (length < (ulonglong) LL(251)) - { - *packet=(uchar) length; - return packet+1; - } - /* 251 is reserved for NULL */ - if (length < (ulonglong) LL(65536)) - { - *packet++=252; - int2store(packet,(uint) length); - return packet+2; - } - if (length < (ulonglong) LL(16777216)) - { - *packet++=253; - int3store(packet,(ulong) length); - return packet+3; - } - *packet++=254; - int8store(packet,length); - return packet+8; -} - diff --git a/deps/mysqllite/sql/net_serv.cc b/deps/mysqllite/sql/net_serv.cc deleted file mode 100644 index d60e2051ccdd38..00000000000000 --- a/deps/mysqllite/sql/net_serv.cc +++ /dev/null @@ -1,1186 +0,0 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/** - @file - - This file is the net layer API for the MySQL client/server protocol. - - Write and read of logical packets to/from socket. - - Writes are cached into net_buffer_length big packets. - Read packets are reallocated dynamicly when reading big packets. - Each logical packet has the following pre-info: - 3 byte length & 1 byte package-number. - - This file needs to be written in C as it's used by the libmysql client as a - C file. -*/ - -/* - HFTODO this must be hidden if we don't want client capabilities in - embedded library - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "probes_mysql.h" - -#ifdef EMBEDDED_LIBRARY -#undef MYSQL_SERVER -#undef MYSQL_CLIENT -#define MYSQL_CLIENT -#endif /*EMBEDDED_LIBRARY */ - - -/* - The following handles the differences when this is linked between the - client and the server. - - This gives an error if a too big packet is found. - The server can change this, but because the client can't normally do this - the client should have a bigger max_allowed_packet. -*/ - -#if defined(__WIN__) || !defined(MYSQL_SERVER) - /* The following is because alarms doesn't work on windows. */ -#ifndef NO_ALARM -#define NO_ALARM -#endif -#endif - -#ifndef NO_ALARM -#include "my_pthread.h" -void sql_print_error(const char *format,...); -#else -#define DONT_USE_THR_ALARM -#endif /* NO_ALARM */ - -#include "thr_alarm.h" - -#ifdef MYSQL_SERVER -/* - The following variables/functions should really not be declared - extern, but as it's hard to include sql_priv.h here, we have to - live with this for a while. -*/ -extern uint test_flags; -extern ulong bytes_sent, bytes_received, net_big_packet_count; -#ifndef MYSQL_INSTANCE_MANAGER -#ifdef HAVE_QUERY_CACHE -#define USE_QUERY_CACHE -extern void query_cache_insert(const char *packet, ulong length, - unsigned pkt_nr); -#endif // HAVE_QUERY_CACHE -#define update_statistics(A) A -#endif /* MYSQL_INSTANCE_MANGER */ -#endif /* defined(MYSQL_SERVER) && !defined(MYSQL_INSTANCE_MANAGER) */ - -#if !defined(MYSQL_SERVER) || defined(MYSQL_INSTANCE_MANAGER) -#define update_statistics(A) -#define thd_increment_bytes_sent(N) -#endif - -#define TEST_BLOCKING 8 -#define MAX_PACKET_LENGTH (256L*256L*256L-1) - -static my_bool net_write_buff(NET *net,const uchar *packet,ulong len); - - -/** Init with packet info. */ - -my_bool my_net_init(NET *net, Vio* vio) -{ - DBUG_ENTER("my_net_init"); - net->vio = vio; - my_net_local_init(net); /* Set some limits */ - if (!(net->buff=(uchar*) my_malloc((size_t) net->max_packet+ - NET_HEADER_SIZE + COMP_HEADER_SIZE, - MYF(MY_WME)))) - DBUG_RETURN(1); - net->buff_end=net->buff+net->max_packet; - net->error=0; net->return_status=0; - net->pkt_nr=net->compress_pkt_nr=0; - net->write_pos=net->read_pos = net->buff; - net->last_error[0]=0; - net->compress=0; net->reading_or_writing=0; - net->where_b = net->remain_in_buf=0; - net->last_errno=0; - net->unused= 0; -#if defined(MYSQL_SERVER) && !defined(EMBEDDED_LIBRARY) - net->skip_big_packet= FALSE; -#endif - - if (vio != 0) /* If real connection */ - { - net->fd = vio_fd(vio); /* For perl DBI/DBD */ -#if defined(MYSQL_SERVER) && !defined(__WIN__) - if (!(test_flags & TEST_BLOCKING)) - { - my_bool old_mode; - vio_blocking(vio, FALSE, &old_mode); - } -#endif - vio_fastsend(vio); - } - DBUG_RETURN(0); -} - - -void net_end(NET *net) -{ - DBUG_ENTER("net_end"); - my_free(net->buff); - net->buff=0; - DBUG_VOID_RETURN; -} - - -/** Realloc the packet buffer. */ - -my_bool net_realloc(NET *net, size_t length) -{ - uchar *buff; - size_t pkt_length; - DBUG_ENTER("net_realloc"); - DBUG_PRINT("enter",("length: %lu", (ulong) length)); - - if (length >= net->max_packet_size) - { - DBUG_PRINT("error", ("Packet too large. Max size: %lu", - net->max_packet_size)); - /* @todo: 1 and 2 codes are identical. */ - net->error= 1; - net->last_errno= ER_NET_PACKET_TOO_LARGE; -#ifdef MYSQL_SERVER - my_error(ER_NET_PACKET_TOO_LARGE, MYF(0)); -#endif - DBUG_RETURN(1); - } - pkt_length = (length+IO_SIZE-1) & ~(IO_SIZE-1); - /* - We must allocate some extra bytes for the end 0 and to be able to - read big compressed blocks + 1 safety byte since uint3korr() in - my_real_read() may actually read 4 bytes depending on build flags and - platform. - */ - if (!(buff= (uchar*) my_realloc((char*) net->buff, pkt_length + - NET_HEADER_SIZE + COMP_HEADER_SIZE + 1, - MYF(MY_WME)))) - { - /* @todo: 1 and 2 codes are identical. */ - net->error= 1; - net->last_errno= ER_OUT_OF_RESOURCES; - /* In the server the error is reported by MY_WME flag. */ - DBUG_RETURN(1); - } - net->buff=net->write_pos=buff; - net->buff_end=buff+(net->max_packet= (ulong) pkt_length); - DBUG_RETURN(0); -} - - -/** - Check if there is any data to be read from the socket. - - @param sd socket descriptor - - @retval - 0 No data to read - @retval - 1 Data or EOF to read - @retval - -1 Don't know if data is ready or not -*/ - -#if !defined(EMBEDDED_LIBRARY) - -static int net_data_is_ready(my_socket sd) -{ -#ifdef HAVE_POLL - struct pollfd ufds; - int res; - - ufds.fd= sd; - ufds.events= POLLIN | POLLPRI; - if (!(res= poll(&ufds, 1, 0))) - return 0; - if (res < 0 || !(ufds.revents & (POLLIN | POLLPRI))) - return 0; - return 1; -#else - fd_set sfds; - struct timeval tv; - int res; - -#ifndef __WIN__ - /* Windows uses an _array_ of 64 fd's as default, so it's safe */ - if (sd >= FD_SETSIZE) - return -1; -#define NET_DATA_IS_READY_CAN_RETURN_MINUS_ONE -#endif - - FD_ZERO(&sfds); - FD_SET(sd, &sfds); - - tv.tv_sec= tv.tv_usec= 0; - - if ((res= select((int) (sd + 1), &sfds, NULL, NULL, &tv)) < 0) - return 0; - else - return test(res ? FD_ISSET(sd, &sfds) : 0); -#endif /* HAVE_POLL */ -} - -#endif /* EMBEDDED_LIBRARY */ - -/** - Remove unwanted characters from connection - and check if disconnected. - - Read from socket until there is nothing more to read. Discard - what is read. - - If there is anything when to read 'net_clear' is called this - normally indicates an error in the protocol. - - When connection is properly closed (for TCP it means with - a FIN packet), then select() considers a socket "ready to read", - in the sense that there's EOF to read, but read() returns 0. - - @param net NET handler - @param clear_buffer if <> 0, then clear all data from comm buff -*/ - -void net_clear(NET *net, my_bool clear_buffer) -{ -#if !defined(EMBEDDED_LIBRARY) - size_t count; - int ready; -#endif - DBUG_ENTER("net_clear"); - -#if !defined(EMBEDDED_LIBRARY) - if (clear_buffer) - { - while ((ready= net_data_is_ready(net->vio->sd)) > 0) - { - /* The socket is ready */ - if ((long) (count= vio_read(net->vio, net->buff, - (size_t) net->max_packet)) > 0) - { - DBUG_PRINT("info",("skipped %ld bytes from file: %s", - (long) count, vio_description(net->vio))); -#if defined(EXTRA_DEBUG) - fprintf(stderr,"Note: net_clear() skipped %ld bytes from file: %s\n", - (long) count, vio_description(net->vio)); -#endif - } - else - { - DBUG_PRINT("info",("socket ready but only EOF to read - disconnected")); - net->error= 2; - break; - } - } -#ifdef NET_DATA_IS_READY_CAN_RETURN_MINUS_ONE - /* 'net_data_is_ready' returned "don't know" */ - if (ready == -1) - { - /* Read unblocking to clear net */ - my_bool old_mode; - if (!vio_blocking(net->vio, FALSE, &old_mode)) - { - while ((long) (count= vio_read(net->vio, net->buff, - (size_t) net->max_packet)) > 0) - DBUG_PRINT("info",("skipped %ld bytes from file: %s", - (long) count, vio_description(net->vio))); - vio_blocking(net->vio, TRUE, &old_mode); - } - } -#endif /* NET_DATA_IS_READY_CAN_RETURN_MINUS_ONE */ - } -#endif /* EMBEDDED_LIBRARY */ - net->pkt_nr=net->compress_pkt_nr=0; /* Ready for new command */ - net->write_pos=net->buff; - DBUG_VOID_RETURN; -} - - -/** Flush write_buffer if not empty. */ - -my_bool net_flush(NET *net) -{ - my_bool error= 0; - DBUG_ENTER("net_flush"); - if (net->buff != net->write_pos) - { - error=test(net_real_write(net, net->buff, - (size_t) (net->write_pos - net->buff))); - net->write_pos=net->buff; - } - /* Sync packet number if using compression */ - if (net->compress) - net->pkt_nr=net->compress_pkt_nr; - DBUG_RETURN(error); -} - - -/***************************************************************************** -** Write something to server/client buffer -*****************************************************************************/ - -/** - Write a logical packet with packet header. - - Format: Packet length (3 bytes), packet number(1 byte) - When compression is used a 3 byte compression length is added - - @note - If compression is used the original package is modified! -*/ - -my_bool -my_net_write(NET *net,const uchar *packet,size_t len) -{ - uchar buff[NET_HEADER_SIZE]; - int rc; - - if (unlikely(!net->vio)) /* nowhere to write */ - return 0; - - MYSQL_NET_WRITE_START(len); - - /* - Big packets are handled by splitting them in packets of MAX_PACKET_LENGTH - length. The last packet is always a packet that is < MAX_PACKET_LENGTH. - (The last packet may even have a length of 0) - */ - while (len >= MAX_PACKET_LENGTH) - { - const ulong z_size = MAX_PACKET_LENGTH; - int3store(buff, z_size); - buff[3]= (uchar) net->pkt_nr++; - if (net_write_buff(net, buff, NET_HEADER_SIZE) || - net_write_buff(net, packet, z_size)) - { - MYSQL_NET_WRITE_DONE(1); - return 1; - } - packet += z_size; - len-= z_size; - } - /* Write last packet */ - int3store(buff,len); - buff[3]= (uchar) net->pkt_nr++; - if (net_write_buff(net, buff, NET_HEADER_SIZE)) - { - MYSQL_NET_WRITE_DONE(1); - return 1; - } -#ifndef DEBUG_DATA_PACKETS - DBUG_DUMP("packet_header", buff, NET_HEADER_SIZE); -#endif - rc= test(net_write_buff(net,packet,len)); - MYSQL_NET_WRITE_DONE(rc); - return rc; -} - -/** - Send a command to the server. - - The reason for having both header and packet is so that libmysql - can easy add a header to a special command (like prepared statements) - without having to re-alloc the string. - - As the command is part of the first data packet, we have to do some data - juggling to put the command in there, without having to create a new - packet. - - This function will split big packets into sub-packets if needed. - (Each sub packet can only be 2^24 bytes) - - @param net NET handler - @param command Command in MySQL server (enum enum_server_command) - @param header Header to write after command - @param head_len Length of header - @param packet Query or parameter to query - @param len Length of packet - - @retval - 0 ok - @retval - 1 error -*/ - -my_bool -net_write_command(NET *net,uchar command, - const uchar *header, size_t head_len, - const uchar *packet, size_t len) -{ - size_t length=len+1+head_len; /* 1 extra byte for command */ - uchar buff[NET_HEADER_SIZE+1]; - uint header_size=NET_HEADER_SIZE+1; - int rc; - DBUG_ENTER("net_write_command"); - DBUG_PRINT("enter",("length: %lu", (ulong) len)); - - MYSQL_NET_WRITE_START(length); - - buff[4]=command; /* For first packet */ - - if (length >= MAX_PACKET_LENGTH) - { - /* Take into account that we have the command in the first header */ - len= MAX_PACKET_LENGTH - 1 - head_len; - do - { - int3store(buff, MAX_PACKET_LENGTH); - buff[3]= (uchar) net->pkt_nr++; - if (net_write_buff(net, buff, header_size) || - net_write_buff(net, header, head_len) || - net_write_buff(net, packet, len)) - { - MYSQL_NET_WRITE_DONE(1); - DBUG_RETURN(1); - } - packet+= len; - length-= MAX_PACKET_LENGTH; - len= MAX_PACKET_LENGTH; - head_len= 0; - header_size= NET_HEADER_SIZE; - } while (length >= MAX_PACKET_LENGTH); - len=length; /* Data left to be written */ - } - int3store(buff,length); - buff[3]= (uchar) net->pkt_nr++; - rc= test(net_write_buff(net, buff, header_size) || - (head_len && net_write_buff(net, header, head_len)) || - net_write_buff(net, packet, len) || net_flush(net)); - MYSQL_NET_WRITE_DONE(rc); - DBUG_RETURN(rc); -} - -/** - Caching the data in a local buffer before sending it. - - Fill up net->buffer and send it to the client when full. - - If the rest of the to-be-sent-packet is bigger than buffer, - send it in one big block (to avoid copying to internal buffer). - If not, copy the rest of the data to the buffer and return without - sending data. - - @param net Network handler - @param packet Packet to send - @param len Length of packet - - @note - The cached buffer can be sent as it is with 'net_flush()'. - In this code we have to be careful to not send a packet longer than - MAX_PACKET_LENGTH to net_real_write() if we are using the compressed - protocol as we store the length of the compressed packet in 3 bytes. - - @retval - 0 ok - @retval - 1 -*/ - -static my_bool -net_write_buff(NET *net, const uchar *packet, ulong len) -{ - ulong left_length; - if (net->compress && net->max_packet > MAX_PACKET_LENGTH) - left_length= (ulong) (MAX_PACKET_LENGTH - (net->write_pos - net->buff)); - else - left_length= (ulong) (net->buff_end - net->write_pos); - -#ifdef DEBUG_DATA_PACKETS - DBUG_DUMP("data", packet, len); -#endif - if (len > left_length) - { - if (net->write_pos != net->buff) - { - /* Fill up already used packet and write it */ - memcpy((char*) net->write_pos,packet,left_length); - if (net_real_write(net, net->buff, - (size_t) (net->write_pos - net->buff) + left_length)) - return 1; - net->write_pos= net->buff; - packet+= left_length; - len-= left_length; - } - if (net->compress) - { - /* - We can't have bigger packets than 16M with compression - Because the uncompressed length is stored in 3 bytes - */ - left_length= MAX_PACKET_LENGTH; - while (len > left_length) - { - if (net_real_write(net, packet, left_length)) - return 1; - packet+= left_length; - len-= left_length; - } - } - if (len > net->max_packet) - return net_real_write(net, packet, len) ? 1 : 0; - /* Send out rest of the blocks as full sized blocks */ - } - memcpy((char*) net->write_pos,packet,len); - net->write_pos+= len; - return 0; -} - - -/** - Read and write one packet using timeouts. - If needed, the packet is compressed before sending. - - @todo - - TODO is it needed to set this variable if we have no socket -*/ - -int -net_real_write(NET *net,const uchar *packet, size_t len) -{ - size_t length; - const uchar *pos,*end; - thr_alarm_t alarmed; -#ifndef NO_ALARM - ALARM alarm_buff; -#endif - uint retry_count=0; - my_bool net_blocking = vio_is_blocking(net->vio); - DBUG_ENTER("net_real_write"); - -#if defined(MYSQL_SERVER) && defined(USE_QUERY_CACHE) - query_cache_insert((char*) packet, len, net->pkt_nr); -#endif - - if (net->error == 2) - DBUG_RETURN(-1); /* socket can't be used */ - - net->reading_or_writing=2; -#ifdef HAVE_COMPRESS - if (net->compress) - { - size_t complen; - uchar *b; - uint header_length=NET_HEADER_SIZE+COMP_HEADER_SIZE; - if (!(b= (uchar*) my_malloc(len + NET_HEADER_SIZE + - COMP_HEADER_SIZE, MYF(MY_WME)))) - { - net->error= 2; - net->last_errno= ER_OUT_OF_RESOURCES; - /* In the server, the error is reported by MY_WME flag. */ - net->reading_or_writing= 0; - DBUG_RETURN(1); - } - memcpy(b+header_length,packet,len); - - if (my_compress(b+header_length, &len, &complen)) - complen=0; - int3store(&b[NET_HEADER_SIZE],complen); - int3store(b,len); - b[3]=(uchar) (net->compress_pkt_nr++); - len+= header_length; - packet= b; - } -#endif /* HAVE_COMPRESS */ - -#ifdef DEBUG_DATA_PACKETS - DBUG_DUMP("data", packet, len); -#endif - -#ifndef NO_ALARM - thr_alarm_init(&alarmed); - if (net_blocking) - thr_alarm(&alarmed, net->write_timeout, &alarm_buff); -#else - alarmed=0; - /* Write timeout is set in my_net_set_write_timeout */ -#endif /* NO_ALARM */ - - pos= packet; - end=pos+len; - while (pos != end) - { - if ((long) (length= vio_write(net->vio,pos,(size_t) (end-pos))) <= 0) - { - my_bool interrupted = vio_should_retry(net->vio); -#if !defined(__WIN__) - if ((interrupted || length == 0) && !thr_alarm_in_use(&alarmed)) - { - if (!thr_alarm(&alarmed, net->write_timeout, &alarm_buff)) - { /* Always true for client */ - my_bool old_mode; - while (vio_blocking(net->vio, TRUE, &old_mode) < 0) - { - if (vio_should_retry(net->vio) && retry_count++ < net->retry_count) - continue; -#ifdef EXTRA_DEBUG - fprintf(stderr, - "%s: my_net_write: fcntl returned error %d, aborting thread\n", - my_progname,vio_errno(net->vio)); -#endif /* EXTRA_DEBUG */ - net->error= 2; /* Close socket */ - net->last_errno= ER_NET_PACKET_TOO_LARGE; -#ifdef MYSQL_SERVER - my_error(ER_NET_PACKET_TOO_LARGE, MYF(0)); -#endif - goto end; - } - retry_count=0; - continue; - } - } - else -#endif /* !defined(__WIN__) */ - if (thr_alarm_in_use(&alarmed) && !thr_got_alarm(&alarmed) && - interrupted) - { - if (retry_count++ < net->retry_count) - continue; -#ifdef EXTRA_DEBUG - fprintf(stderr, "%s: write looped, aborting thread\n", - my_progname); -#endif /* EXTRA_DEBUG */ - } -#if defined(THREAD_SAFE_CLIENT) && !defined(MYSQL_SERVER) - if (vio_errno(net->vio) == SOCKET_EINTR) - { - DBUG_PRINT("warning",("Interrupted write. Retrying...")); - continue; - } -#endif /* defined(THREAD_SAFE_CLIENT) && !defined(MYSQL_SERVER) */ - net->error= 2; /* Close socket */ - net->last_errno= (interrupted ? ER_NET_WRITE_INTERRUPTED : - ER_NET_ERROR_ON_WRITE); -#ifdef MYSQL_SERVER - my_error(net->last_errno, MYF(0)); -#endif /* MYSQL_SERVER */ - break; - } - pos+=length; - update_statistics(thd_increment_bytes_sent(length)); - } -#ifndef __WIN__ - end: -#endif -#ifdef HAVE_COMPRESS - if (net->compress) - my_free((void*) packet); -#endif - if (thr_alarm_in_use(&alarmed)) - { - my_bool old_mode; - thr_end_alarm(&alarmed); - vio_blocking(net->vio, net_blocking, &old_mode); - } - net->reading_or_writing=0; - DBUG_RETURN(((int) (pos != end))); -} - - -/***************************************************************************** -** Read something from server/clinet -*****************************************************************************/ - -#ifndef NO_ALARM - -static my_bool net_safe_read(NET *net, uchar *buff, size_t length, - thr_alarm_t *alarmed) -{ - uint retry_count=0; - while (length > 0) - { - size_t tmp; - if ((long) (tmp= vio_read(net->vio, buff, length)) <= 0) - { - my_bool interrupted = vio_should_retry(net->vio); - if (!thr_got_alarm(alarmed) && interrupted) - { /* Probably in MIT threads */ - if (retry_count++ < net->retry_count) - continue; - } - return 1; - } - length-= tmp; - buff+= tmp; - } - return 0; -} - -/** - Help function to clear the commuication buffer when we get a too big packet. - - @param net Communication handle - @param remain Bytes to read - @param alarmed Parameter for thr_alarm() - @param alarm_buff Parameter for thr_alarm() - - @retval - 0 Was able to read the whole packet - @retval - 1 Got mailformed packet from client -*/ - -static my_bool my_net_skip_rest(NET *net, uint32 remain, thr_alarm_t *alarmed, - ALARM *alarm_buff) -{ - uint32 old=remain; - DBUG_ENTER("my_net_skip_rest"); - DBUG_PRINT("enter",("bytes_to_skip: %u", (uint) remain)); - - /* The following is good for debugging */ - update_statistics(thd_increment_net_big_packet_count(1)); - - if (!thr_alarm_in_use(alarmed)) - { - my_bool old_mode; - if (thr_alarm(alarmed,net->read_timeout, alarm_buff) || - vio_blocking(net->vio, TRUE, &old_mode) < 0) - DBUG_RETURN(1); /* Can't setup, abort */ - } - for (;;) - { - while (remain > 0) - { - size_t length= min(remain, net->max_packet); - if (net_safe_read(net, net->buff, length, alarmed)) - DBUG_RETURN(1); - update_statistics(thd_increment_bytes_received(length)); - remain -= (uint32) length; - } - if (old != MAX_PACKET_LENGTH) - break; - if (net_safe_read(net, net->buff, NET_HEADER_SIZE, alarmed)) - DBUG_RETURN(1); - old=remain= uint3korr(net->buff); - net->pkt_nr++; - } - DBUG_RETURN(0); -} -#endif /* NO_ALARM */ - - -/** - Reads one packet to net->buff + net->where_b. - Long packets are handled by my_net_read(). - This function reallocates the net->buff buffer if necessary. - - @return - Returns length of packet. -*/ - -static ulong -my_real_read(NET *net, size_t *complen) -{ - uchar *pos; - size_t length; - uint i,retry_count=0; - ulong len=packet_error; - thr_alarm_t alarmed; -#ifndef NO_ALARM - ALARM alarm_buff; -#endif - my_bool net_blocking=vio_is_blocking(net->vio); - uint32 remain= (net->compress ? NET_HEADER_SIZE+COMP_HEADER_SIZE : - NET_HEADER_SIZE); - *complen = 0; - - net->reading_or_writing=1; - thr_alarm_init(&alarmed); -#ifndef NO_ALARM - if (net_blocking) - thr_alarm(&alarmed,net->read_timeout,&alarm_buff); -#else - /* Read timeout is set in my_net_set_read_timeout */ -#endif /* NO_ALARM */ - - pos = net->buff + net->where_b; /* net->packet -4 */ - for (i=0 ; i < 2 ; i++) - { - while (remain > 0) - { - /* First read is done with non blocking mode */ - if ((long) (length= vio_read(net->vio, pos, remain)) <= 0L) - { - my_bool interrupted = vio_should_retry(net->vio); - - DBUG_PRINT("info",("vio_read returned %ld errno: %d", - (long) length, vio_errno(net->vio))); -#if !defined(__WIN__) || defined(MYSQL_SERVER) - /* - We got an error that there was no data on the socket. We now set up - an alarm to not 'read forever', change the socket to non blocking - mode and try again - */ - if ((interrupted || length == 0) && !thr_alarm_in_use(&alarmed)) - { - if (!thr_alarm(&alarmed,net->read_timeout,&alarm_buff)) /* Don't wait too long */ - { - my_bool old_mode; - while (vio_blocking(net->vio, TRUE, &old_mode) < 0) - { - if (vio_should_retry(net->vio) && - retry_count++ < net->retry_count) - continue; - DBUG_PRINT("error", - ("fcntl returned error %d, aborting thread", - vio_errno(net->vio))); -#ifdef EXTRA_DEBUG - fprintf(stderr, - "%s: read: fcntl returned error %d, aborting thread\n", - my_progname,vio_errno(net->vio)); -#endif /* EXTRA_DEBUG */ - len= packet_error; - net->error= 2; /* Close socket */ - net->last_errno= ER_NET_FCNTL_ERROR; -#ifdef MYSQL_SERVER - my_error(ER_NET_FCNTL_ERROR, MYF(0)); -#endif - goto end; - } - retry_count=0; - continue; - } - } -#endif /* (!defined(__WIN__) || defined(MYSQL_SERVER) */ - if (thr_alarm_in_use(&alarmed) && !thr_got_alarm(&alarmed) && - interrupted) - { /* Probably in MIT threads */ - if (retry_count++ < net->retry_count) - continue; -#ifdef EXTRA_DEBUG - fprintf(stderr, "%s: read looped with error %d, aborting thread\n", - my_progname,vio_errno(net->vio)); -#endif /* EXTRA_DEBUG */ - } -#if defined(THREAD_SAFE_CLIENT) && !defined(MYSQL_SERVER) - if (vio_errno(net->vio) == SOCKET_EINTR) - { - DBUG_PRINT("warning",("Interrupted read. Retrying...")); - continue; - } -#endif - DBUG_PRINT("error",("Couldn't read packet: remain: %u errno: %d length: %ld", - remain, vio_errno(net->vio), (long) length)); - len= packet_error; - net->error= 2; /* Close socket */ - net->last_errno= (vio_was_interrupted(net->vio) ? - ER_NET_READ_INTERRUPTED : - ER_NET_READ_ERROR); -#ifdef MYSQL_SERVER - my_error(net->last_errno, MYF(0)); -#endif - goto end; - } - remain -= (uint32) length; - pos+= length; - update_statistics(thd_increment_bytes_received(length)); - } - if (i == 0) - { /* First parts is packet length */ - ulong helping; - DBUG_DUMP("packet_header", net->buff+net->where_b, - NET_HEADER_SIZE); - if (net->buff[net->where_b + 3] != (uchar) net->pkt_nr) - { - if (net->buff[net->where_b] != (uchar) 255) - { - DBUG_PRINT("error", - ("Packets out of order (Found: %d, expected %u)", - (int) net->buff[net->where_b + 3], - net->pkt_nr)); - /* - We don't make noise server side, since the client is expected - to break the protocol for e.g. --send LOAD DATA .. LOCAL where - the server expects the client to send a file, but the client - may reply with a new command instead. - */ -#if defined (EXTRA_DEBUG) && !defined (MYSQL_SERVER) - fflush(stdout); - fprintf(stderr,"Error: Packets out of order (Found: %d, expected %d)\n", - (int) net->buff[net->where_b + 3], - (uint) (uchar) net->pkt_nr); - fflush(stderr); - DBUG_ASSERT(0); -#endif - } - len= packet_error; - /* Not a NET error on the client. XXX: why? */ -#ifdef MYSQL_SERVER - my_error(ER_NET_PACKETS_OUT_OF_ORDER, MYF(0)); -#endif - goto end; - } - net->compress_pkt_nr= ++net->pkt_nr; -#ifdef HAVE_COMPRESS - if (net->compress) - { - /* - The following uint3korr() may read 4 bytes, so make sure we don't - read unallocated or uninitialized memory. The right-hand expression - must match the size of the buffer allocated in net_realloc(). - */ - DBUG_ASSERT(net->where_b + NET_HEADER_SIZE + sizeof(uint32) <= - net->max_packet + NET_HEADER_SIZE + COMP_HEADER_SIZE + 1); - /* - If the packet is compressed then complen > 0 and contains the - number of bytes in the uncompressed packet - */ - *complen=uint3korr(&(net->buff[net->where_b + NET_HEADER_SIZE])); - } -#endif - - len=uint3korr(net->buff+net->where_b); - if (!len) /* End of big multi-packet */ - goto end; - helping = max(len,*complen) + net->where_b; - /* The necessary size of net->buff */ - if (helping >= net->max_packet) - { - if (net_realloc(net,helping)) - { -#if defined(MYSQL_SERVER) && !defined(NO_ALARM) - if (!net->compress && - net->skip_big_packet && - !my_net_skip_rest(net, (uint32) len, &alarmed, &alarm_buff)) - net->error= 3; /* Successfully skiped packet */ -#endif - len= packet_error; /* Return error and close connection */ - goto end; - } - } - pos=net->buff + net->where_b; - remain = (uint32) len; - } - } - -end: - if (thr_alarm_in_use(&alarmed)) - { - my_bool old_mode; - thr_end_alarm(&alarmed); - vio_blocking(net->vio, net_blocking, &old_mode); - } - net->reading_or_writing=0; -#ifdef DEBUG_DATA_PACKETS - if (len != packet_error) - DBUG_DUMP("data", net->buff+net->where_b, len); -#endif - return(len); -} - - -/** - Read a packet from the client/server and return it without the internal - package header. - - If the packet is the first packet of a multi-packet packet - (which is indicated by the length of the packet = 0xffffff) then - all sub packets are read and concatenated. - - If the packet was compressed, its uncompressed and the length of the - uncompressed packet is returned. - - @return - The function returns the length of the found packet or packet_error. - net->read_pos points to the read data. -*/ - -ulong -my_net_read(NET *net) -{ - size_t len, complen; - - MYSQL_NET_READ_START(); - -#ifdef HAVE_COMPRESS - if (!net->compress) - { -#endif - len = my_real_read(net,&complen); - if (len == MAX_PACKET_LENGTH) - { - /* First packet of a multi-packet. Concatenate the packets */ - ulong save_pos = net->where_b; - size_t total_length= 0; - do - { - net->where_b += len; - total_length += len; - len = my_real_read(net,&complen); - } while (len == MAX_PACKET_LENGTH); - if (len != packet_error) - len+= total_length; - net->where_b = save_pos; - } - net->read_pos = net->buff + net->where_b; - if (len != packet_error) - net->read_pos[len]=0; /* Safeguard for mysql_use_result */ - MYSQL_NET_READ_DONE(0, len); - return len; -#ifdef HAVE_COMPRESS - } - else - { - /* We are using the compressed protocol */ - - ulong buf_length; - ulong start_of_packet; - ulong first_packet_offset; - uint read_length, multi_byte_packet=0; - - if (net->remain_in_buf) - { - buf_length= net->buf_length; /* Data left in old packet */ - first_packet_offset= start_of_packet= (net->buf_length - - net->remain_in_buf); - /* Restore the character that was overwritten by the end 0 */ - net->buff[start_of_packet]= net->save_char; - } - else - { - /* reuse buffer, as there is nothing in it that we need */ - buf_length= start_of_packet= first_packet_offset= 0; - } - for (;;) - { - ulong packet_len; - - if (buf_length - start_of_packet >= NET_HEADER_SIZE) - { - read_length = uint3korr(net->buff+start_of_packet); - if (!read_length) - { - /* End of multi-byte packet */ - start_of_packet += NET_HEADER_SIZE; - break; - } - if (read_length + NET_HEADER_SIZE <= buf_length - start_of_packet) - { - if (multi_byte_packet) - { - /* Remove packet header for second packet */ - memmove(net->buff + first_packet_offset + start_of_packet, - net->buff + first_packet_offset + start_of_packet + - NET_HEADER_SIZE, - buf_length - start_of_packet); - start_of_packet += read_length; - buf_length -= NET_HEADER_SIZE; - } - else - start_of_packet+= read_length + NET_HEADER_SIZE; - - if (read_length != MAX_PACKET_LENGTH) /* last package */ - { - multi_byte_packet= 0; /* No last zero len packet */ - break; - } - multi_byte_packet= NET_HEADER_SIZE; - /* Move data down to read next data packet after current one */ - if (first_packet_offset) - { - memmove(net->buff,net->buff+first_packet_offset, - buf_length-first_packet_offset); - buf_length-=first_packet_offset; - start_of_packet -= first_packet_offset; - first_packet_offset=0; - } - continue; - } - } - /* Move data down to read next data packet after current one */ - if (first_packet_offset) - { - memmove(net->buff,net->buff+first_packet_offset, - buf_length-first_packet_offset); - buf_length-=first_packet_offset; - start_of_packet -= first_packet_offset; - first_packet_offset=0; - } - - net->where_b=buf_length; - if ((packet_len = my_real_read(net,&complen)) == packet_error) - { - MYSQL_NET_READ_DONE(1, 0); - return packet_error; - } - if (my_uncompress(net->buff + net->where_b, packet_len, - &complen)) - { - net->error= 2; /* caller will close socket */ - net->last_errno= ER_NET_UNCOMPRESS_ERROR; -#ifdef MYSQL_SERVER - my_error(ER_NET_UNCOMPRESS_ERROR, MYF(0)); -#endif - MYSQL_NET_READ_DONE(1, 0); - return packet_error; - } - buf_length+= complen; - } - - net->read_pos= net->buff+ first_packet_offset + NET_HEADER_SIZE; - net->buf_length= buf_length; - net->remain_in_buf= (ulong) (buf_length - start_of_packet); - len = ((ulong) (start_of_packet - first_packet_offset) - NET_HEADER_SIZE - - multi_byte_packet); - net->save_char= net->read_pos[len]; /* Must be saved */ - net->read_pos[len]=0; /* Safeguard for mysql_use_result */ - } -#endif /* HAVE_COMPRESS */ - MYSQL_NET_READ_DONE(0, len); - return len; -} - - -void my_net_set_read_timeout(NET *net, uint timeout) -{ - DBUG_ENTER("my_net_set_read_timeout"); - DBUG_PRINT("enter", ("timeout: %d", timeout)); - net->read_timeout= timeout; -#ifdef NO_ALARM - if (net->vio) - vio_timeout(net->vio, 0, timeout); -#endif - DBUG_VOID_RETURN; -} - - -void my_net_set_write_timeout(NET *net, uint timeout) -{ - DBUG_ENTER("my_net_set_write_timeout"); - DBUG_PRINT("enter", ("timeout: %d", timeout)); - net->write_timeout= timeout; -#ifdef NO_ALARM - if (net->vio) - vio_timeout(net->vio, 1, timeout); -#endif - DBUG_VOID_RETURN; -} diff --git a/deps/mysqllite/sql/password.c b/deps/mysqllite/sql/password.c deleted file mode 100644 index 3b69705cc87543..00000000000000 --- a/deps/mysqllite/sql/password.c +++ /dev/null @@ -1,562 +0,0 @@ -/* Copyright (C) 2000-2006 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* password checking routines */ -/***************************************************************************** - The main idea is that no password are sent between client & server on - connection and that no password are saved in mysql in a decodable form. - - On connection a random string is generated and sent to the client. - The client generates a new string with a random generator inited with - the hash values from the password and the sent string. - This 'check' string is sent to the server where it is compared with - a string generated from the stored hash_value of the password and the - random string. - - The password is saved (in user.password) by using the PASSWORD() function in - mysql. - - This is .c file because it's used in libmysqlclient, which is entirely in C. - (we need it to be portable to a variety of systems). - Example: - update user set password=PASSWORD("hello") where user="test" - This saves a hashed number as a string in the password field. - - The new authentication is performed in following manner: - - SERVER: public_seed=create_random_string() - send(public_seed) - - CLIENT: recv(public_seed) - hash_stage1=sha1("password") - hash_stage2=sha1(hash_stage1) - reply=xor(hash_stage1, sha1(public_seed,hash_stage2) - - // this three steps are done in scramble() - - send(reply) - - - SERVER: recv(reply) - hash_stage1=xor(reply, sha1(public_seed,hash_stage2)) - candidate_hash2=sha1(hash_stage1) - check(candidate_hash2==hash_stage2) - - // this three steps are done in check_scramble() - -*****************************************************************************/ - -#include -#include -#include -#include -#include -#include "mysql.h" - -/************ MySQL 3.23-4.0 authentication routines: untouched ***********/ - -/* - New (MySQL 3.21+) random generation structure initialization - SYNOPSIS - randominit() - rand_st OUT Structure to initialize - seed1 IN First initialization parameter - seed2 IN Second initialization parameter -*/ - -void randominit(struct rand_struct *rand_st, ulong seed1, ulong seed2) -{ /* For mysql 3.21.# */ -#ifdef HAVE_purify - bzero((char*) rand_st,sizeof(*rand_st)); /* Avoid UMC varnings */ -#endif - rand_st->max_value= 0x3FFFFFFFL; - rand_st->max_value_dbl=(double) rand_st->max_value; - rand_st->seed1=seed1%rand_st->max_value ; - rand_st->seed2=seed2%rand_st->max_value; -} - - -/* - Generate random number. - SYNOPSIS - my_rnd() - rand_st INOUT Structure used for number generation - RETURN VALUE - generated pseudo random number -*/ - -double my_rnd(struct rand_struct *rand_st) -{ - rand_st->seed1=(rand_st->seed1*3+rand_st->seed2) % rand_st->max_value; - rand_st->seed2=(rand_st->seed1+rand_st->seed2+33) % rand_st->max_value; - return (((double) rand_st->seed1)/rand_st->max_value_dbl); -} - - -/* - Generate binary hash from raw text string - Used for Pre-4.1 password handling - SYNOPSIS - hash_password() - result OUT store hash in this location - password IN plain text password to build hash - password_len IN password length (password may be not null-terminated) -*/ - -void hash_password(ulong *result, const char *password, uint password_len) -{ - register ulong nr=1345345333L, add=7, nr2=0x12345671L; - ulong tmp; - const char *password_end= password + password_len; - for (; password < password_end; password++) - { - if (*password == ' ' || *password == '\t') - continue; /* skip space in password */ - tmp= (ulong) (uchar) *password; - nr^= (((nr & 63)+add)*tmp)+ (nr << 8); - nr2+=(nr2 << 8) ^ nr; - add+=tmp; - } - result[0]=nr & (((ulong) 1L << 31) -1L); /* Don't use sign bit (str2int) */; - result[1]=nr2 & (((ulong) 1L << 31) -1L); -} - - -/* - Create password to be stored in user database from raw string - Used for pre-4.1 password handling - SYNOPSIS - my_make_scrambled_password_323() - to OUT store scrambled password here - password IN user-supplied password - pass_len IN length of password string -*/ - -void my_make_scrambled_password_323(char *to, const char *password, - size_t pass_len) -{ - ulong hash_res[2]; - hash_password(hash_res, password, (uint) pass_len); - sprintf(to, "%08lx%08lx", hash_res[0], hash_res[1]); -} - - -/* - Wrapper around my_make_scrambled_password_323() to maintain client lib ABI - compatibility. - In server code usage of my_make_scrambled_password_323() is preferred to - avoid strlen(). - SYNOPSIS - make_scrambled_password_323() - to OUT store scrambled password here - password IN NULL-terminated string with user-supplied password -*/ - -void make_scrambled_password_323(char *to, const char *password) -{ - my_make_scrambled_password_323(to, password, strlen(password)); -} - - -/* - Scramble string with password. - Used in pre 4.1 authentication phase. - SYNOPSIS - scramble_323() - to OUT Store scrambled message here. Buffer must be at least - SCRAMBLE_LENGTH_323+1 bytes long - message IN Message to scramble. Message must be at least - SRAMBLE_LENGTH_323 bytes long. - password IN Password to use while scrambling -*/ - -void scramble_323(char *to, const char *message, const char *password) -{ - struct rand_struct rand_st; - ulong hash_pass[2], hash_message[2]; - - if (password && password[0]) - { - char extra, *to_start=to; - const char *message_end= message + SCRAMBLE_LENGTH_323; - hash_password(hash_pass,password, (uint) strlen(password)); - hash_password(hash_message, message, SCRAMBLE_LENGTH_323); - randominit(&rand_st,hash_pass[0] ^ hash_message[0], - hash_pass[1] ^ hash_message[1]); - for (; message < message_end; message++) - *to++= (char) (floor(my_rnd(&rand_st)*31)+64); - extra=(char) (floor(my_rnd(&rand_st)*31)); - while (to_start != to) - *(to_start++)^=extra; - } - *to= 0; -} - - -/* - Check scrambled message - Used in pre 4.1 password handling - SYNOPSIS - check_scramble_323() - scrambled scrambled message to check. - message original random message which was used for scrambling; must - be exactly SCRAMBLED_LENGTH_323 bytes long and - NULL-terminated. - hash_pass password which should be used for scrambling - All params are IN. - - RETURN VALUE - 0 - password correct - !0 - password invalid -*/ - -my_bool -check_scramble_323(const unsigned char *scrambled, const char *message, - ulong *hash_pass) -{ - struct rand_struct rand_st; - ulong hash_message[2]; - uchar buff[16],*to,extra; /* Big enough for check */ - const uchar *pos; - - hash_password(hash_message, message, SCRAMBLE_LENGTH_323); - randominit(&rand_st,hash_pass[0] ^ hash_message[0], - hash_pass[1] ^ hash_message[1]); - to=buff; - DBUG_ASSERT(sizeof(buff) > SCRAMBLE_LENGTH_323); - for (pos=scrambled ; *pos && to < buff+sizeof(buff) ; pos++) - *to++=(char) (floor(my_rnd(&rand_st)*31)+64); - if (pos-scrambled != SCRAMBLE_LENGTH_323) - return 1; - extra=(char) (floor(my_rnd(&rand_st)*31)); - to=buff; - while (*scrambled) - { - if (*scrambled++ != (uchar) (*to++ ^ extra)) - return 1; /* Wrong password */ - } - return 0; -} - -static inline uint8 char_val(uint8 X) -{ - return (uint) (X >= '0' && X <= '9' ? X-'0' : - X >= 'A' && X <= 'Z' ? X-'A'+10 : X-'a'+10); -} - - -/* - Convert password from hex string (as stored in mysql.user) to binary form. - SYNOPSIS - get_salt_from_password_323() - res OUT store salt here - password IN password string as stored in mysql.user - NOTE - This function does not have length check for passwords. It will just crash - Password hashes in old format must have length divisible by 8 -*/ - -void get_salt_from_password_323(ulong *res, const char *password) -{ - res[0]= res[1]= 0; - if (password) - { - while (*password) - { - ulong val=0; - uint i; - for (i=0 ; i < 8 ; i++) - val=(val << 4)+char_val(*password++); - *res++=val; - } - } -} - - -/* - Convert scrambled password from binary form to asciiz hex string. - SYNOPSIS - make_password_from_salt_323() - to OUT store resulting string password here, at least 17 bytes - salt IN password in salt format, 2 ulongs -*/ - -void make_password_from_salt_323(char *to, const ulong *salt) -{ - sprintf(to,"%08lx%08lx", salt[0], salt[1]); -} - - -/* - **************** MySQL 4.1.1 authentication routines ************* -*/ - -/* - Generate string of printable random characters of requested length - SYNOPSIS - create_random_string() - to OUT buffer for generation; must be at least length+1 bytes - long; result string is always null-terminated - length IN how many random characters to put in buffer - rand_st INOUT structure used for number generation -*/ - -void create_random_string(char *to, uint length, struct rand_struct *rand_st) -{ - char *end= to + length; - /* Use pointer arithmetics as it is faster way to do so. */ - for (; to < end; to++) - *to= (char) (my_rnd(rand_st)*94+33); - *to= '\0'; -} - - -/* Character to use as version identifier for version 4.1 */ - -#define PVERSION41_CHAR '*' - - -/* - Convert given octet sequence to asciiz string of hex characters; - str..str+len and 'to' may not overlap. - SYNOPSIS - octet2hex() - buf OUT output buffer. Must be at least 2*len+1 bytes - str, len IN the beginning and the length of the input string - - RETURN - buf+len*2 -*/ - -char *octet2hex(char *to, const char *str, uint len) -{ - const char *str_end= str + len; - for (; str != str_end; ++str) - { - *to++= _dig_vec_upper[((uchar) *str) >> 4]; - *to++= _dig_vec_upper[((uchar) *str) & 0x0F]; - } - *to= '\0'; - return to; -} - - -/* - Convert given asciiz string of hex (0..9 a..f) characters to octet - sequence. - SYNOPSIS - hex2octet() - to OUT buffer to place result; must be at least len/2 bytes - str, len IN begin, length for character string; str and to may not - overlap; len % 2 == 0 -*/ - -static void -hex2octet(uint8 *to, const char *str, uint len) -{ - const char *str_end= str + len; - while (str < str_end) - { - register char tmp= char_val(*str++); - *to++= (tmp << 4) | char_val(*str++); - } -} - - -/* - Encrypt/Decrypt function used for password encryption in authentication. - Simple XOR is used here but it is OK as we crypt random strings. Note, - that XOR(s1, XOR(s1, s2)) == s2, XOR(s1, s2) == XOR(s2, s1) - SYNOPSIS - my_crypt() - to OUT buffer to hold crypted string; must be at least len bytes - long; to and s1 (or s2) may be the same. - s1, s2 IN input strings (of equal length) - len IN length of s1 and s2 -*/ - -static void -my_crypt(char *to, const uchar *s1, const uchar *s2, uint len) -{ - const uint8 *s1_end= s1 + len; - while (s1 < s1_end) - *to++= *s1++ ^ *s2++; -} - - -/* - MySQL 4.1.1 password hashing: SHA conversion (see RFC 2289, 3174) twice - applied to the password string, and then produced octet sequence is - converted to hex string. - The result of this function is used as return value from PASSWORD() and - is stored in the database. - SYNOPSIS - my_make_scrambled_password() - buf OUT buffer of size 2*SHA1_HASH_SIZE + 2 to store hex string - password IN password string - pass_len IN length of password string -*/ - -void my_make_scrambled_password(char *to, const char *password, - size_t pass_len) -{ - SHA1_CONTEXT sha1_context; - uint8 hash_stage2[SHA1_HASH_SIZE]; - - mysql_sha1_reset(&sha1_context); - /* stage 1: hash password */ - mysql_sha1_input(&sha1_context, (uint8 *) password, (uint) pass_len); - mysql_sha1_result(&sha1_context, (uint8 *) to); - /* stage 2: hash stage1 output */ - mysql_sha1_reset(&sha1_context); - mysql_sha1_input(&sha1_context, (uint8 *) to, SHA1_HASH_SIZE); - /* separate buffer is used to pass 'to' in octet2hex */ - mysql_sha1_result(&sha1_context, hash_stage2); - /* convert hash_stage2 to hex string */ - *to++= PVERSION41_CHAR; - octet2hex(to, (const char*) hash_stage2, SHA1_HASH_SIZE); -} - - -/* - Wrapper around my_make_scrambled_password() to maintain client lib ABI - compatibility. - In server code usage of my_make_scrambled_password() is preferred to - avoid strlen(). - SYNOPSIS - make_scrambled_password() - buf OUT buffer of size 2*SHA1_HASH_SIZE + 2 to store hex string - password IN NULL-terminated password string -*/ - -void make_scrambled_password(char *to, const char *password) -{ - my_make_scrambled_password(to, password, strlen(password)); -} - - -/* - Produce an obscure octet sequence from password and random - string, recieved from the server. This sequence corresponds to the - password, but password can not be easily restored from it. The sequence - is then sent to the server for validation. Trailing zero is not stored - in the buf as it is not needed. - This function is used by client to create authenticated reply to the - server's greeting. - SYNOPSIS - scramble() - buf OUT store scrambled string here. The buf must be at least - SHA1_HASH_SIZE bytes long. - message IN random message, must be exactly SCRAMBLE_LENGTH long and - NULL-terminated. - password IN users' password -*/ - -void -scramble(char *to, const char *message, const char *password) -{ - SHA1_CONTEXT sha1_context; - uint8 hash_stage1[SHA1_HASH_SIZE]; - uint8 hash_stage2[SHA1_HASH_SIZE]; - - mysql_sha1_reset(&sha1_context); - /* stage 1: hash password */ - mysql_sha1_input(&sha1_context, (uint8 *) password, (uint) strlen(password)); - mysql_sha1_result(&sha1_context, hash_stage1); - /* stage 2: hash stage 1; note that hash_stage2 is stored in the database */ - mysql_sha1_reset(&sha1_context); - mysql_sha1_input(&sha1_context, hash_stage1, SHA1_HASH_SIZE); - mysql_sha1_result(&sha1_context, hash_stage2); - /* create crypt string as sha1(message, hash_stage2) */; - mysql_sha1_reset(&sha1_context); - mysql_sha1_input(&sha1_context, (const uint8 *) message, SCRAMBLE_LENGTH); - mysql_sha1_input(&sha1_context, hash_stage2, SHA1_HASH_SIZE); - /* xor allows 'from' and 'to' overlap: lets take advantage of it */ - mysql_sha1_result(&sha1_context, (uint8 *) to); - my_crypt(to, (const uchar *) to, hash_stage1, SCRAMBLE_LENGTH); -} - - -/* - Check that scrambled message corresponds to the password; the function - is used by server to check that recieved reply is authentic. - This function does not check lengths of given strings: message must be - null-terminated, reply and hash_stage2 must be at least SHA1_HASH_SIZE - long (if not, something fishy is going on). - SYNOPSIS - check_scramble() - scramble clients' reply, presumably produced by scramble() - message original random string, previously sent to client - (presumably second argument of scramble()), must be - exactly SCRAMBLE_LENGTH long and NULL-terminated. - hash_stage2 hex2octet-decoded database entry - All params are IN. - - RETURN VALUE - 0 password is correct - !0 password is invalid -*/ - -my_bool -check_scramble(const uchar *scramble_arg, const char *message, - const uint8 *hash_stage2) -{ - SHA1_CONTEXT sha1_context; - uint8 buf[SHA1_HASH_SIZE]; - uint8 hash_stage2_reassured[SHA1_HASH_SIZE]; - - mysql_sha1_reset(&sha1_context); - /* create key to encrypt scramble */ - mysql_sha1_input(&sha1_context, (const uint8 *) message, SCRAMBLE_LENGTH); - mysql_sha1_input(&sha1_context, hash_stage2, SHA1_HASH_SIZE); - mysql_sha1_result(&sha1_context, buf); - /* encrypt scramble */ - my_crypt((char *) buf, buf, scramble_arg, SCRAMBLE_LENGTH); - /* now buf supposedly contains hash_stage1: so we can get hash_stage2 */ - mysql_sha1_reset(&sha1_context); - mysql_sha1_input(&sha1_context, buf, SHA1_HASH_SIZE); - mysql_sha1_result(&sha1_context, hash_stage2_reassured); - return memcmp(hash_stage2, hash_stage2_reassured, SHA1_HASH_SIZE); -} - - -/* - Convert scrambled password from asciiz hex string to binary form. - - SYNOPSIS - get_salt_from_password() - res OUT buf to hold password. Must be at least SHA1_HASH_SIZE - bytes long. - password IN 4.1.1 version value of user.password -*/ - -void get_salt_from_password(uint8 *hash_stage2, const char *password) -{ - hex2octet(hash_stage2, password+1 /* skip '*' */, SHA1_HASH_SIZE * 2); -} - -/* - Convert scrambled password from binary form to asciiz hex string. - SYNOPSIS - make_password_from_salt() - to OUT store resulting string here, 2*SHA1_HASH_SIZE+2 bytes - salt IN password in salt format -*/ - -void make_password_from_salt(char *to, const uint8 *hash_stage2) -{ - *to++= PVERSION41_CHAR; - octet2hex(to, (const char*) hash_stage2, SHA1_HASH_SIZE); -} diff --git a/deps/mysqllite/strings/CHARSET_INFO.txt b/deps/mysqllite/strings/CHARSET_INFO.txt deleted file mode 100644 index 6f0a810be372b4..00000000000000 --- a/deps/mysqllite/strings/CHARSET_INFO.txt +++ /dev/null @@ -1,281 +0,0 @@ - -CHARSET_INFO -============ -A structure containing data for charset+collation pair implementation. - -Virtual functions that use this data are collected into separate -structures, MY_CHARSET_HANDLER and MY_COLLATION_HANDLER. - - -typedef struct charset_info_st -{ - uint number; - uint primary_number; - uint binary_number; - uint state; - - const char *csname; - const char *name; - const char *comment; - - uchar *ctype; - uchar *to_lower; - uchar *to_upper; - uchar *sort_order; - - uint16 *tab_to_uni; - MY_UNI_IDX *tab_from_uni; - - uchar state_map[256]; - uchar ident_map[256]; - - uint strxfrm_multiply; - uint mbminlen; - uint mbmaxlen; - uint16 max_sort_char; /* For LIKE optimization */ - - MY_CHARSET_HANDLER *cset; - MY_COLLATION_HANDLER *coll; - -} CHARSET_INFO; - - -CHARSET_INFO fields description: -=============================== - - -Numbers (identifiers) ---------------------- - -number - an ID uniquely identifying this charset+collation pair. - -primary_number - ID of a charset+collation pair, which consists -of the same character set and the default collation of this -character set. Not really used now. Intended to optimize some -parts of the code where we need to find the default collation -using its non-default counterpart for the given character set. - -binary_number - ID of a charset+collation pair, which consists -of the same character set and the binary collation of this -character set. Not really used now. - -Names ------ - - csname - name of the character set for this charset+collation pair. - name - name of the collation for this charset+collation pair. - comment - a text comment, displayed in "Description" column of - SHOW CHARACTER SET output. - -Conversion tables ------------------ - - ctype - pointer to array[257] of "type of characters" - bit mask for each character, e.g., whether a - character is a digit, letter, separator, etc. - - Monty 2004-10-21: - If you look at the macros, we use ctype[(char)+1]. - ctype[0] is traditionally in most ctype libraries - reserved for EOF (-1). The idea is that you can use - the result from fgetc() directly with ctype[]. As - we have to be compatible with external ctype[] versions, - it's better to do it the same way as they do... - - to_lower - pointer to array[256] used in LCASE() - to_upper - pointer to array[256] used in UCASE() - sort_order - pointer to array[256] used for strings comparison - -In all Asian charsets these arrays are set up as follows: - -- All bytes in the range 0x80..0xFF were marked as letters in the - ctype array. - -- The to_lower and to_upper arrays map only ASCII letters. - UPPER() and LOWER() doesn't really work for multi-byte characters. - Most of the characters in Asian character sets are ideograms - anyway and they don't have case mapping. However, there are - still some characters from European alphabets. - For example: - _ujis 0x8FAAF2 - LATIN CAPITAL LETTER Y WITH ACUTE - _ujis 0x8FABF2 - LATIN SMALL LETTER Y WITH ACUTE - - But they don't map to each other with UPPER and LOWER operations. - -- The sort_order array is filled case insensitively for the - ASCII range 0x00..0x7F, and in "binary" fashion for the multi-byte - range 0x80..0xFF for these collations: - - cp932_japanese_ci, - euckr_korean_ci, - eucjpms_japanese_ci, - gb2312_chinese_ci, - sjis_japanese_ci, - ujis_japanese_ci. - - So multi-byte characters are sorted just according to their codes. - - -- Two collations are still case insensitive for the ASCII characters, - but have special sorting order for multi-byte characters - (something more complex than just according to codes): - - big5_chinese_ci - gbk_chinese_ci - - So handlers for these collations use only the 0x00..0x7F part - of their sort_order arrays, and apply the special functions - for multi-byte characters - -In Unicode character sets we have full support of UPPER/LOWER mapping, -for sorting order, and for character type detection. -"utf8_general_ci" still has the "old-fashioned" arrays -like to_upper, to_lower, sort_order and ctype, but they are -not really used (maybe only in some rare legacy functions). - - - -Unicode conversion data ------------------------ -For 8-bit character sets: - -tab_to_uni : array[256] of charset->Unicode translation -tab_from_uni: a structure for Unicode->charset translation - -Non-8-bit charsets have their own structures per charset -hidden in corresponding ctype-xxx.c file and don't use -tab_to_uni and tab_from_uni tables. - - -Parser maps ------------ -state_map[] -ident_map[] - -These maps are used to quickly identify whether a character is an -identifier part, a digit, a special character, or a part of another -SQL language lexical item. - -Probably can be combined with ctype array in the future. -But for some reasons these two arrays are used in the parser, -while a separate ctype[] array is used in the other part of the -code, like fulltext, etc. - - -Miscellaneous fields --------------------- - - strxfrm_multiply - how many times a sort key (that is, a string - that can be passed into memcmp() for comparison) - can be longer than the original string. - Usually it is 1. For some complex - collations it can be bigger. For example, - in latin1_german2_ci, a sort key is up to - two times longer than the original string. - e.g. Letter 'A' with two dots above is - substituted with 'AE'. - mbminlen - minimum multi-byte sequence length. - Now always 1 except for ucs2. For ucs2, - it is 2. - mbmaxlen - maximum multi-byte sequence length. - 1 for 8-bit charsets. Can be also 2 or 3. - - max_sort_char - for LIKE range - in case of 8-bit character sets - native code - of maximum character (max_str pad byte); - in case of UTF8 and UCS2 - Unicode code of the maximum - possible character (usually U+FFFF). This code is - converted to multi-byte representation (usually 0xEFBFBF) - and then used as a pad sequence for max_str. - in case of other multi-byte character sets - - max_str pad byte (usually 0xFF). - -MY_CHARSET_HANDLER -================== - -MY_CHARSET_HANDLER is a collection of character-set -related routines. Defined in m_ctype.h. Have the -following set of functions: - -Multi-byte routines ------------------- -ismbchar() - detects whether the given string is a multi-byte sequence -mbcharlen() - returns length of multi-byte sequence starting with - the given character -numchars() - returns number of characters in the given string, e.g. - in SQL function CHAR_LENGTH(). -charpos() - calculates the offset of the given position in the string. - Used in SQL functions LEFT(), RIGHT(), SUBSTRING(), - INSERT() - -well_formed_len() - - returns length of a given multi-byte string in bytes - Used in INSERTs to shorten the given string so it - a) is "well formed" according to the given character set - b) can fit into the given data type - -lengthsp() - returns the length of the given string without trailing spaces. - - -Unicode conversion routines ---------------------------- -mb_wc - converts the left multi-byte sequence into its Unicode code. -mc_mb - converts the given Unicode code into multi-byte sequence. - - -Case and sort conversion ------------------------- -caseup_str - converts the given 0-terminated string to uppercase -casedn_str - converts the given 0-terminated string to lowercase -caseup - converts the given string to lowercase using length -casedn - converts the given string to lowercase using length - -Number-to-string conversion routines ------------------------------------- -snprintf() -long10_to_str() -longlong10_to_str() - -The names are pretty self-describing. - -String padding routines ------------------------ -fill() - writes the given Unicode value into the given string - with the given length. Used to pad the string, usually - with space character, according to the given charset. - -String-to-number conversion routines ------------------------------------- -strntol() -strntoul() -strntoll() -strntoull() -strntod() - -These functions are almost the same as their STDLIB counterparts, -but also: - - accept length instead of 0-terminator - - are character set dependent - -Simple scanner routines ------------------------ -scan() - to skip leading spaces in the given string. - Used when a string value is inserted into a numeric field. - - - -MY_COLLATION_HANDLER -==================== -strnncoll() - compares two strings according to the given collation -strnncollsp() - like the above but ignores trailing spaces -strnxfrm() - makes a sort key suitable for memcmp() corresponding - to the given string -like_range() - creates a LIKE range, for optimizer -wildcmp() - wildcard comparison, for LIKE -strcasecmp() - 0-terminated string comparison -instr() - finds the first substring appearance in the string -hash_sort() - calculates hash value taking into account - the collation rules, e.g. case-insensitivity, - accent sensitivity, etc. - - diff --git a/deps/mysqllite/strings/README b/deps/mysqllite/strings/README deleted file mode 100644 index ddb811ede5e3a8..00000000000000 --- a/deps/mysqllite/strings/README +++ /dev/null @@ -1,82 +0,0 @@ -File : README -Author : Richard A. O'Keefe. -Updated: 30 April 1984 -Purpose: Explain the new strings package. - - The UNIX string libraries (described in the string(3) manual page) -differ from UNIX to UNIX (e.g. strtok is not in V7 or 4.1bsd). Worse, -the sources are not in the public domain, so that if there is a string -routine which is nearly what you want but not quite you can't take a -copy and modify it. And of course C programmers on non-UNIX systems -are at the mercy of their supplier. - - This package was designed to let me do reasonable things with C's -strings whatever UNIX (V7, PaNiX, UX63, 4.1bsd) I happen to be using. -Everything in the System III manual is here and does just what the S3 -manual says it does. There are also lots of new goodies. I'm sorry -about the names, but the routines do have to work on asphyxiated-at- -birth systems which truncate identifiers. The convention is that a -routine is called - str [n] [c] -If there is an "n", it means that the function takes an (int) "length" -argument, which bounds the number of characters to be moved or looked -at. If the function has a "set" argument, a "c" in the name indicates -that the complement of the set is used. Functions or variables whose -names start with _ are support routines which aren't really meant for -general use. I don't know what the "p" is doing in "strpbrk", but it -is there in the S3 manual so it's here too. "istrtok" does not follow -this rule, but with 7 letters what can you do? - - I have included new versions of atoi(3) and atol(3) as well. They -use a new primitive str2int, which takes a pair of bounds and a radix, -and does much more thorough checking than the normal atoi and atol do. -The result returned by atoi & atol is valid if and only if errno == 0. -There is also an output conversion routine int2str, with itoa and ltoa -as interface macros. Only after writing int2str did I notice that the -str2int routine has no provision for unsigned numbers. On reflection, -I don't greatly care. I'm afraid that int2str may depend on your "C" -compiler in unexpected ways. Do check the code with -S. - - Several of these routines have "asm" inclusions conditional on the -VaxAsm option. These insertions can make the routines which have them -quite a bit faster, but there is a snag. The VAX architects, for some -reason best known to themselves and their therapists, decided that all -"strings" were shorter than 2^16 bytes. Even when the length operands -are in 32-bit registers, only 16 bits count. So the "asm" versions do -not work for long strings. If you can guarantee that all your strings -will be short, define VaxAsm in the makefile, but in general, and when -using other machines, do not define it. - - To use this library, you need the "strings.a" library file and the -"strings.h" and "ctypes.h" header files. The other header files are -for compiling the library itself, though if you are hacking extensions -you may find them useful. General users really shouldn't see them. -I've defined a few macros I find useful in "strings.h"; if you have no -need for "index", "rindex", "streql", and "beql", just edit them out. -On the 4.1bsd system I am using declaring all these functions 'extern' -does not mean that they will all be loaded; but only the ones you use. -When using lesser systems you may find it necessary to break strings.h -up, or you could get by with just adding "extern" declarations for the -functions you want as you need them. Many of these functions have the -same names as functions in the "standard C library", by design as this -is a replacement/reimplementation of part of that library. So you may -have to talk the loader into loading this library first. Again, I've -found no problems on 4.1bsd. - - You may wonder at my failure to provide manual pages for this code. -For the things in V7, 4.?, or SIII, you should be able to use whichever -manual page came with that system, and anything I might write would be -so like it as to raise suspicions of violating AT&T copyrights. In the -sources you will find comments which provide far more documentation for -these routines than AT&T ever provided for their strings stuff, I just -don't happen to have put it in nroff -man form. Had I done so, the .3 -files would have outbulked the .c files! - - These files are in the public domain. This includes getopt.c, which -is the work of Henry Spencer, University of Toronto Zoology, who says of -it "None of this software is derived from Bell software. I had no access -to the source for Bell's versions at the time I wrote it. This software -is hereby explicitly placed in the public domain. It may be used for -any purpose on any machine by anyone." I would greatly prefer it if *my* -material received no military use. - diff --git a/deps/mysqllite/strings/bchange.c b/deps/mysqllite/strings/bchange.c deleted file mode 100644 index 0b2c62019b5fd0..00000000000000 --- a/deps/mysqllite/strings/bchange.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : bchange.c - Author : Michael widenius - Updated: 1987-03-20 - Defines: bchange() - - bchange(dst, old_length, src, new_length, tot_length) - replaces old_length characters at dst to new_length characters from - src in a buffer with tot_length bytes. -*/ - -#include -#include "m_string.h" - -void bchange(register uchar *dst, size_t old_length, register const uchar *src, - size_t new_length, size_t tot_length) -{ - size_t rest=tot_length-old_length; - if (old_length < new_length) - bmove_upp(dst+rest+new_length,dst+tot_length,rest); - else - bmove(dst+new_length,dst+old_length,rest); - memcpy(dst,src,new_length); -} diff --git a/deps/mysqllite/strings/bmove_upp.c b/deps/mysqllite/strings/bmove_upp.c deleted file mode 100644 index 05e786837f4424..00000000000000 --- a/deps/mysqllite/strings/bmove_upp.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : bmove.c - Author : Michael widenius - Updated: 1987-03-20 - Defines: bmove_upp() - - bmove_upp(dst, src, len) moves exactly "len" bytes from the source - "src-len" to the destination "dst-len" counting downwards. -*/ - -#include -#include "m_string.h" - -void bmove_upp(register uchar *dst, register const uchar *src, - register size_t len) -{ - while (len-- != 0) *--dst = *--src; -} diff --git a/deps/mysqllite/strings/ctype-big5.c b/deps/mysqllite/strings/ctype-big5.c deleted file mode 100644 index 3007d76a5a48cb..00000000000000 --- a/deps/mysqllite/strings/ctype-big5.c +++ /dev/null @@ -1,6983 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - * This file is basicly usa7 character sets with some extra functions - * for big5 handling -*/ - -/* - * This comment is parsed by configure to create ctype.c, - * so don't change it unless you know what you are doing. - * - * .configure. strxfrm_multiply_big5=1 - * .configure. mbmaxlen_big5=2 - */ - -#include -#include "m_string.h" -#include "m_ctype.h" - -#ifdef HAVE_CHARSET_big5 - -/* - Support for Chinese(BIG5) characters, by jou@nematic.ieo.nctu.edu.tw - modified by Wei He (hewei@mail.ied.ac.cn) - modified by Alex Barkov -*/ - -#define isbig5head(c) (0xa1<=(uchar)(c) && (uchar)(c)<=0xf9) -#define isbig5tail(c) ((0x40<=(uchar)(c) && (uchar)(c)<=0x7e) || \ - (0xa1<=(uchar)(c) && (uchar)(c)<=0xfe)) - -#define isbig5code(c,d) (isbig5head(c) && isbig5tail(d)) -#define big5code(c,d) (((uchar)(c) <<8) | (uchar)(d)) -#define big5head(e) ((uchar)(e>>8)) -#define big5tail(e) ((uchar)(e&0xff)) - -static uchar ctype_big5[257] = -{ - 0, /* For standard library */ - 32,32,32,32,32,32,32,32,32,40,40,40,40,40,32,32, - 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, - 72,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, - 132,132,132,132,132,132,132,132,132,132,16,16,16,16,16,16, - 16,129,129,129,129,129,129,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,16,16,16,16,16, - 16,130,130,130,130,130,130,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,16,16,16,16,32, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0, -}; - -static uchar to_lower_big5[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '[', '\\', ']', '^', '_', - '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '{', '|', '}', '~', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - -static uchar to_upper_big5[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', - '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '{', '|', '}', '~', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - -static uchar sort_order_big5[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '\\', ']', '[', '^', '_', - 'E', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '{', '|', '}', 'Y', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - - -static MY_UNICASE_INFO cA2[256]= -{ - /* A200-A20F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* A210-A21F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* A220-A22F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* A230-A23F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* A240-A24F */ - {0xA240,0xA240,0xFFFD}, - {0xA241,0xA241,0xFF0F}, - {0xA242,0xA242,0xFF3C}, - {0xA243,0xA243,0xFF04}, - {0xA244,0xA244,0x00A5}, - {0xA245,0xA245,0x3012}, - {0xA246,0xA246,0x00A2}, - {0xA247,0xA247,0x00A3}, - {0xA248,0xA248,0xFF05}, - {0xA249,0xA249,0xFF20}, - {0xA24A,0xA24A,0x2103}, - {0xA24B,0xA24B,0x2109}, - {0xA24C,0xA24C,0xFE69}, - {0xA24D,0xA24D,0xFE6A}, - {0xA24E,0xA24E,0xFE6B}, - {0xA24F,0xA24F,0x33D5}, - /* A250-A25F */ - {0xA250,0xA250,0x339C}, - {0xA251,0xA251,0x339D}, - {0xA252,0xA252,0x339E}, - {0xA253,0xA253,0x33CE}, - {0xA254,0xA254,0x33A1}, - {0xA255,0xA255,0x338E}, - {0xA256,0xA256,0x338F}, - {0xA257,0xA257,0x33C4}, - {0xA258,0xA258,0x00B0}, - {0xA259,0xA259,0x5159}, - {0xA25A,0xA25A,0x515B}, - {0xA25B,0xA25B,0x515E}, - {0xA25C,0xA25C,0x515D}, - {0xA25D,0xA25D,0x5161}, - {0xA25E,0xA25E,0x5163}, - {0xA25F,0xA25F,0x55E7}, - /* A260-A26F */ - {0xA260,0xA260,0x74E9}, - {0xA261,0xA261,0x7CCE}, - {0xA262,0xA262,0x2581}, - {0xA263,0xA263,0x2582}, - {0xA264,0xA264,0x2583}, - {0xA265,0xA265,0x2584}, - {0xA266,0xA266,0x2585}, - {0xA267,0xA267,0x2586}, - {0xA268,0xA268,0x2587}, - {0xA269,0xA269,0x2588}, - {0xA26A,0xA26A,0x258F}, - {0xA26B,0xA26B,0x258E}, - {0xA26C,0xA26C,0x258D}, - {0xA26D,0xA26D,0x258C}, - {0xA26E,0xA26E,0x258B}, - {0xA26F,0xA26F,0x258A}, - /* A270-A27F */ - {0xA270,0xA270,0x2589}, - {0xA271,0xA271,0x253C}, - {0xA272,0xA272,0x2534}, - {0xA273,0xA273,0x252C}, - {0xA274,0xA274,0x2524}, - {0xA275,0xA275,0x251C}, - {0xA276,0xA276,0x2594}, - {0xA277,0xA277,0x2500}, - {0xA278,0xA278,0x2502}, - {0xA279,0xA279,0x2595}, - {0xA27A,0xA27A,0x250C}, - {0xA27B,0xA27B,0x2510}, - {0xA27C,0xA27C,0x2514}, - {0xA27D,0xA27D,0x2518}, - {0xA27E,0xA27E,0x256D}, - {0x0000,0x0000,0x0000}, - /* A280-A28F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* A290-A29F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* A2A0-A2AF */ - {0x0000,0x0000,0x0000}, - {0xA2A1,0xA2A1,0x256E}, - {0xA2A2,0xA2A2,0x2570}, - {0xA2A3,0xA2A3,0x256F}, - {0xA2A4,0xA2A4,0x2550}, - {0xA2A5,0xA2A5,0x255E}, - {0xA2A6,0xA2A6,0x256A}, - {0xA2A7,0xA2A7,0x2561}, - {0xA2A8,0xA2A8,0x25E2}, - {0xA2A9,0xA2A9,0x25E3}, - {0xA2AA,0xA2AA,0x25E5}, - {0xA2AB,0xA2AB,0x25E4}, - {0xA2AC,0xA2AC,0x2571}, - {0xA2AD,0xA2AD,0x2572}, - {0xA2AE,0xA2AE,0x2573}, - {0xA2AF,0xA2AF,0xFF10}, - /* A2B0-A2BF */ - {0xA2B0,0xA2B0,0xFF11}, - {0xA2B1,0xA2B1,0xFF12}, - {0xA2B2,0xA2B2,0xFF13}, - {0xA2B3,0xA2B3,0xFF14}, - {0xA2B4,0xA2B4,0xFF15}, - {0xA2B5,0xA2B5,0xFF16}, - {0xA2B6,0xA2B6,0xFF17}, - {0xA2B7,0xA2B7,0xFF18}, - {0xA2B8,0xA2B8,0xFF19}, - {0xA2B9,0xA2B9,0x2160}, - {0xA2BA,0xA2BA,0x2161}, - {0xA2BB,0xA2BB,0x2162}, - {0xA2BC,0xA2BC,0x2163}, - {0xA2BD,0xA2BD,0x2164}, - {0xA2BE,0xA2BE,0x2165}, - {0xA2BF,0xA2BF,0x2166}, - /* A2C0-A2CF */ - {0xA2C0,0xA2C0,0x2167}, - {0xA2C1,0xA2C1,0x2168}, - {0xA2C2,0xA2C2,0x2169}, - {0xA2C3,0xA2C3,0x3021}, - {0xA2C4,0xA2C4,0x3022}, - {0xA2C5,0xA2C5,0x3023}, - {0xA2C6,0xA2C6,0x3024}, - {0xA2C7,0xA2C7,0x3025}, - {0xA2C8,0xA2C8,0x3026}, - {0xA2C9,0xA2C9,0x3027}, - {0xA2CA,0xA2CA,0x3028}, - {0xA2CB,0xA2CB,0x3029}, - {0xA2CC,0xA2CC,0xFFFD}, - {0xA2CD,0xA2CD,0x5344}, - {0xA2CE,0xA2CE,0xFFFD}, - {0xA2CF,0xA2E9,0xFF21}, - /* A2D0-A2DF */ - {0xA2D0,0xA2EA,0xFF22}, - {0xA2D1,0xA2EB,0xFF23}, - {0xA2D2,0xA2EC,0xFF24}, - {0xA2D3,0xA2ED,0xFF25}, - {0xA2D4,0xA2EE,0xFF26}, - {0xA2D5,0xA2EF,0xFF27}, - {0xA2D6,0xA2F0,0xFF28}, - {0xA2D7,0xA2F1,0xFF29}, - {0xA2D8,0xA2F2,0xFF2A}, - {0xA2D9,0xA2F3,0xFF2B}, - {0xA2DA,0xA2F4,0xFF2C}, - {0xA2DB,0xA2F5,0xFF2D}, - {0xA2DC,0xA2F6,0xFF2E}, - {0xA2DD,0xA2F7,0xFF2F}, - {0xA2DE,0xA2F8,0xFF30}, - {0xA2DF,0xA2F9,0xFF31}, - /* A2E0-A2EF */ - {0xA2E0,0xA2FA,0xFF32}, - {0xA2E1,0xA2FB,0xFF33}, - {0xA2E2,0xA2FC,0xFF34}, - {0xA2E3,0xA2FD,0xFF35}, - {0xA2E4,0xA2FE,0xFF36}, - {0xA2E5,0xA340,0xFF37}, - {0xA2E6,0xA341,0xFF38}, - {0xA2E7,0xA342,0xFF39}, - {0xA2E8,0xA343,0xFF3A}, - {0xA2CF,0xA2E9,0xFF41}, - {0xA2D0,0xA2EA,0xFF42}, - {0xA2D1,0xA2EB,0xFF43}, - {0xA2D2,0xA2EC,0xFF44}, - {0xA2D3,0xA2ED,0xFF45}, - {0xA2D4,0xA2EE,0xFF46}, - {0xA2D5,0xA2EF,0xFF47}, - /* A2F0-A2FF */ - {0xA2D6,0xA2F0,0xFF48}, - {0xA2D7,0xA2F1,0xFF49}, - {0xA2D8,0xA2F2,0xFF4A}, - {0xA2D9,0xA2F3,0xFF4B}, - {0xA2DA,0xA2F4,0xFF4C}, - {0xA2DB,0xA2F5,0xFF4D}, - {0xA2DC,0xA2F6,0xFF4E}, - {0xA2DD,0xA2F7,0xFF4F}, - {0xA2DE,0xA2F8,0xFF50}, - {0xA2DF,0xA2F9,0xFF51}, - {0xA2E0,0xA2FA,0xFF52}, - {0xA2E1,0xA2FB,0xFF53}, - {0xA2E2,0xA2FC,0xFF54}, - {0xA2E3,0xA2FD,0xFF55}, - {0xA2E4,0xA2FE,0xFF56}, - {0x0000,0x0000,0x0000} -}; - - -static MY_UNICASE_INFO cA3[256]= -{ - /* A300-A30F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* A310-A31F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* A320-A32F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* A330-A33F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* A340-A34F */ - {0xA2E5,0xA340,0xFF57}, - {0xA2E6,0xA341,0xFF58}, - {0xA2E7,0xA342,0xFF59}, - {0xA2E8,0xA343,0xFF5A}, - {0xA344,0xA35C,0x0391}, - {0xA345,0xA35D,0x0392}, - {0xA346,0xA35E,0x0393}, - {0xA347,0xA35F,0x0394}, - {0xA348,0xA360,0x0395}, - {0xA349,0xA361,0x0396}, - {0xA34A,0xA362,0x0397}, - {0xA34B,0xA363,0x0398}, - {0xA34C,0xA364,0x0399}, - {0xA34D,0xA365,0x039A}, - {0xA34E,0xA366,0x039B}, - {0xA34F,0xA367,0x039C}, - /* A350-A35F */ - {0xA350,0xA368,0x039D}, - {0xA351,0xA369,0x039E}, - {0xA352,0xA36A,0x039F}, - {0xA353,0xA36B,0x03A0}, - {0xA354,0xA36C,0x03A1}, - {0xA355,0xA36D,0x03A3}, - {0xA356,0xA36E,0x03A4}, - {0xA357,0xA36F,0x03A5}, - {0xA358,0xA370,0x03A6}, - {0xA359,0xA371,0x03A7}, - {0xA35A,0xA372,0x03A8}, - {0xA35B,0xA373,0x03A9}, - {0xA344,0xA35C,0x03B1}, - {0xA345,0xA35D,0x03B2}, - {0xA346,0xA35E,0x03B3}, - {0xA347,0xA35F,0x03B4}, - /* A360-A36F */ - {0xA348,0xA360,0x03B5}, - {0xA349,0xA361,0x03B6}, - {0xA34A,0xA362,0x03B7}, - {0xA34B,0xA363,0x03B8}, - {0xA34C,0xA364,0x03B9}, - {0xA34D,0xA365,0x03BA}, - {0xA34E,0xA366,0x03BB}, - {0xA34F,0xA367,0x03BC}, - {0xA350,0xA368,0x03BD}, - {0xA351,0xA369,0x03BE}, - {0xA352,0xA36A,0x03BF}, - {0xA353,0xA36B,0x03C0}, - {0xA354,0xA36C,0x03C1}, - {0xA355,0xA36D,0x03C3}, - {0xA356,0xA36E,0x03C4}, - {0xA357,0xA36F,0x03C5}, - /* A370-A37F */ - {0xA358,0xA370,0x03C6}, - {0xA359,0xA371,0x03C7}, - {0xA35A,0xA372,0x03C8}, - {0xA35B,0xA373,0x03C9}, - {0xA374,0xA374,0x3105}, - {0xA375,0xA375,0x3106}, - {0xA376,0xA376,0x3107}, - {0xA377,0xA377,0x3108}, - {0xA378,0xA378,0x3109}, - {0xA379,0xA379,0x310A}, - {0xA37A,0xA37A,0x310B}, - {0xA37B,0xA37B,0x310C}, - {0xA37C,0xA37C,0x310D}, - {0xA37D,0xA37D,0x310E}, - {0xA37E,0xA37E,0x310F}, - {0x0000,0x0000,0x0000}, - /* A380-A38F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* A390-A39F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* A3A0-A3AF */ - {0x0000,0x0000,0x0000}, - {0xA3A1,0xA3A1,0x3110}, - {0xA3A2,0xA3A2,0x3111}, - {0xA3A3,0xA3A3,0x3112}, - {0xA3A4,0xA3A4,0x3113}, - {0xA3A5,0xA3A5,0x3114}, - {0xA3A6,0xA3A6,0x3115}, - {0xA3A7,0xA3A7,0x3116}, - {0xA3A8,0xA3A8,0x3117}, - {0xA3A9,0xA3A9,0x3118}, - {0xA3AA,0xA3AA,0x3119}, - {0xA3AB,0xA3AB,0x311A}, - {0xA3AC,0xA3AC,0x311B}, - {0xA3AD,0xA3AD,0x311C}, - {0xA3AE,0xA3AE,0x311D}, - {0xA3AF,0xA3AF,0x311E}, - /* A3B0-A3BF */ - {0xA3B0,0xA3B0,0x311F}, - {0xA3B1,0xA3B1,0x3120}, - {0xA3B2,0xA3B2,0x3121}, - {0xA3B3,0xA3B3,0x3122}, - {0xA3B4,0xA3B4,0x3123}, - {0xA3B5,0xA3B5,0x3124}, - {0xA3B6,0xA3B6,0x3125}, - {0xA3B7,0xA3B7,0x3126}, - {0xA3B8,0xA3B8,0x3127}, - {0xA3B9,0xA3B9,0x3128}, - {0xA3BA,0xA3BA,0x3129}, - {0xA3BB,0xA3BB,0x02D9}, - {0xA3BC,0xA3BC,0x02C9}, - {0xA3BD,0xA3BD,0x02CA}, - {0xA3BE,0xA3BE,0x02C7}, - {0xA3BF,0xA3BF,0x02CB}, - /* A3C0-A3CF */ - {0xA3C0,0xA3C0,0x003F}, - {0xA3C1,0xA3C1,0x003F}, - {0xA3C2,0xA3C2,0x003F}, - {0xA3C3,0xA3C3,0x003F}, - {0xA3C4,0xA3C4,0x003F}, - {0xA3C5,0xA3C5,0x003F}, - {0xA3C6,0xA3C6,0x003F}, - {0xA3C7,0xA3C7,0x003F}, - {0xA3C8,0xA3C8,0x003F}, - {0xA3C9,0xA3C9,0x003F}, - {0xA3CA,0xA3CA,0x003F}, - {0xA3CB,0xA3CB,0x003F}, - {0xA3CC,0xA3CC,0x003F}, - {0xA3CD,0xA3CD,0x003F}, - {0xA3CE,0xA3CE,0x003F}, - {0xA3CF,0xA3CF,0x003F}, - /* A3D0-A3DF */ - {0xA3D0,0xA3D0,0x003F}, - {0xA3D1,0xA3D1,0x003F}, - {0xA3D2,0xA3D2,0x003F}, - {0xA3D3,0xA3D3,0x003F}, - {0xA3D4,0xA3D4,0x003F}, - {0xA3D5,0xA3D5,0x003F}, - {0xA3D6,0xA3D6,0x003F}, - {0xA3D7,0xA3D7,0x003F}, - {0xA3D8,0xA3D8,0x003F}, - {0xA3D9,0xA3D9,0x003F}, - {0xA3DA,0xA3DA,0x003F}, - {0xA3DB,0xA3DB,0x003F}, - {0xA3DC,0xA3DC,0x003F}, - {0xA3DD,0xA3DD,0x003F}, - {0xA3DE,0xA3DE,0x003F}, - {0xA3DF,0xA3DF,0x003F}, - /* A3E0-A3EF */ - {0xA3E0,0xA3E0,0x003F}, - {0xA3E1,0xA3E1,0x003F}, - {0xA3E2,0xA3E2,0x003F}, - {0xA3E3,0xA3E3,0x003F}, - {0xA3E4,0xA3E4,0x003F}, - {0xA3E5,0xA3E5,0x003F}, - {0xA3E6,0xA3E6,0x003F}, - {0xA3E7,0xA3E7,0x003F}, - {0xA3E8,0xA3E8,0x003F}, - {0xA3E9,0xA3E9,0x003F}, - {0xA3EA,0xA3EA,0x003F}, - {0xA3EB,0xA3EB,0x003F}, - {0xA3EC,0xA3EC,0x003F}, - {0xA3ED,0xA3ED,0x003F}, - {0xA3EE,0xA3EE,0x003F}, - {0xA3EF,0xA3EF,0x003F}, - /* A3F0-A3FF */ - {0xA3F0,0xA3F0,0x003F}, - {0xA3F1,0xA3F1,0x003F}, - {0xA3F2,0xA3F2,0x003F}, - {0xA3F3,0xA3F3,0x003F}, - {0xA3F4,0xA3F4,0x003F}, - {0xA3F5,0xA3F5,0x003F}, - {0xA3F6,0xA3F6,0x003F}, - {0xA3F7,0xA3F7,0x003F}, - {0xA3F8,0xA3F8,0x003F}, - {0xA3F9,0xA3F9,0x003F}, - {0xA3FA,0xA3FA,0x003F}, - {0xA3FB,0xA3FB,0x003F}, - {0xA3FC,0xA3FC,0x003F}, - {0xA3FD,0xA3FD,0x003F}, - {0xA3FE,0xA3FE,0x003F}, - {0x0000,0x0000,0x0000} -}; - - -static MY_UNICASE_INFO cC7[256]= -{ - /* C700-C70F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* C710-C71F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* C720-C72F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* C730-C73F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* C740-C74F */ - {0xC740,0xC740,0x30A8}, - {0xC741,0xC741,0x30A9}, - {0xC742,0xC742,0x30AA}, - {0xC743,0xC743,0x30AB}, - {0xC744,0xC744,0x30AC}, - {0xC745,0xC745,0x30AD}, - {0xC746,0xC746,0x30AE}, - {0xC747,0xC747,0x30AF}, - {0xC748,0xC748,0x30B0}, - {0xC749,0xC749,0x30B1}, - {0xC74A,0xC74A,0x30B2}, - {0xC74B,0xC74B,0x30B3}, - {0xC74C,0xC74C,0x30B4}, - {0xC74D,0xC74D,0x30B5}, - {0xC74E,0xC74E,0x30B6}, - {0xC74F,0xC74F,0x30B7}, - /* C750-C75F */ - {0xC750,0xC750,0x30B8}, - {0xC751,0xC751,0x30B9}, - {0xC752,0xC752,0x30BA}, - {0xC753,0xC753,0x30BB}, - {0xC754,0xC754,0x30BC}, - {0xC755,0xC755,0x30BD}, - {0xC756,0xC756,0x30BE}, - {0xC757,0xC757,0x30BF}, - {0xC758,0xC758,0x30C0}, - {0xC759,0xC759,0x30C1}, - {0xC75A,0xC75A,0x30C2}, - {0xC75B,0xC75B,0x30C3}, - {0xC75C,0xC75C,0x30C4}, - {0xC75D,0xC75D,0x30C5}, - {0xC75E,0xC75E,0x30C6}, - {0xC75F,0xC75F,0x30C7}, - /* C760-C76F */ - {0xC760,0xC760,0x30C8}, - {0xC761,0xC761,0x30C9}, - {0xC762,0xC762,0x30CA}, - {0xC763,0xC763,0x30CB}, - {0xC764,0xC764,0x30CC}, - {0xC765,0xC765,0x30CD}, - {0xC766,0xC766,0x30CE}, - {0xC767,0xC767,0x30CF}, - {0xC768,0xC768,0x30D0}, - {0xC769,0xC769,0x30D1}, - {0xC76A,0xC76A,0x30D2}, - {0xC76B,0xC76B,0x30D3}, - {0xC76C,0xC76C,0x30D4}, - {0xC76D,0xC76D,0x30D5}, - {0xC76E,0xC76E,0x30D6}, - {0xC76F,0xC76F,0x30D7}, - /* C770-C77F */ - {0xC770,0xC770,0x30D8}, - {0xC771,0xC771,0x30D9}, - {0xC772,0xC772,0x30DA}, - {0xC773,0xC773,0x30DB}, - {0xC774,0xC774,0x30DC}, - {0xC775,0xC775,0x30DD}, - {0xC776,0xC776,0x30DE}, - {0xC777,0xC777,0x30DF}, - {0xC778,0xC778,0x30E0}, - {0xC779,0xC779,0x30E1}, - {0xC77A,0xC77A,0x30E2}, - {0xC77B,0xC77B,0x30E3}, - {0xC77C,0xC77C,0x30E4}, - {0xC77D,0xC77D,0x30E5}, - {0xC77E,0xC77E,0x30E6}, - {0x0000,0x0000,0x0000}, - /* C780-C78F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* C790-C79F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* C7A0-C7AF */ - {0x0000,0x0000,0x0000}, - {0xC7A1,0xC7A1,0x30E7}, - {0xC7A2,0xC7A2,0x30E8}, - {0xC7A3,0xC7A3,0x30E9}, - {0xC7A4,0xC7A4,0x30EA}, - {0xC7A5,0xC7A5,0x30EB}, - {0xC7A6,0xC7A6,0x30EC}, - {0xC7A7,0xC7A7,0x30ED}, - {0xC7A8,0xC7A8,0x30EE}, - {0xC7A9,0xC7A9,0x30EF}, - {0xC7AA,0xC7AA,0x30F0}, - {0xC7AB,0xC7AB,0x30F1}, - {0xC7AC,0xC7AC,0x30F2}, - {0xC7AD,0xC7AD,0x30F3}, - {0xC7AE,0xC7AE,0x30F4}, - {0xC7AF,0xC7AF,0x30F5}, - /* C7B0-C7BF */ - {0xC7B0,0xC7B0,0x30F6}, - {0xC7B1,0xC7CC,0x0414}, - {0xC7B2,0xC7CD,0x0415}, - {0xC7B3,0xC7CE,0x0401}, - {0xC7B4,0xC7CF,0x0416}, - {0xC7B5,0xC7D0,0x0417}, - {0xC7B6,0xC7D1,0x0418}, - {0xC7B7,0xC7D2,0x0419}, - {0xC7B8,0xC7D3,0x041A}, - {0xC7B9,0xC7D4,0x041B}, - {0xC7BA,0xC7D5,0x041C}, - {0xC7BB,0xC7DC,0x0423}, - {0xC7BC,0xC7DD,0x0424}, - {0xC7BD,0xC7DE,0x0425}, - {0xC7BE,0xC7DF,0x0426}, - {0xC7BF,0xC7E0,0x0427}, - /* C7C0-C7CF */ - {0xC7C0,0xC7E1,0x0428}, - {0xC7C1,0xC7E2,0x0429}, - {0xC7C2,0xC7E3,0x042A}, - {0xC7C3,0xC7E4,0x042B}, - {0xC7C4,0xC7E5,0x042C}, - {0xC7C5,0xC7E6,0x042D}, - {0xC7C6,0xC7E7,0x042E}, - {0xC7C7,0xC7E8,0x042F}, - {0xC7C8,0xC7C8,0x0430}, - {0xC7C9,0xC7C9,0x0431}, - {0xC7CA,0xC7CA,0x0432}, - {0xC7CB,0xC7CB,0x0433}, - {0xC7B1,0xC7CC,0x0434}, - {0xC7B2,0xC7CD,0x0435}, - {0xC7B3,0xC7CE,0x0451}, - {0xC7B4,0xC7CF,0x0436}, - /* C7D0-C7DF */ - {0xC7B5,0xC7D0,0x0437}, - {0xC7B6,0xC7D1,0x0438}, - {0xC7B7,0xC7D2,0x0439}, - {0xC7B8,0xC7D3,0x043A}, - {0xC7B9,0xC7D4,0x043B}, - {0xC7BA,0xC7D5,0x043C}, - {0xC7D6,0xC7D6,0x043D}, - {0xC7D7,0xC7D7,0x043E}, - {0xC7D8,0xC7D8,0x043F}, - {0xC7D9,0xC7D9,0x0440}, - {0xC7DA,0xC7DA,0x0441}, - {0xC7DB,0xC7DB,0x0442}, - {0xC7BB,0xC7DC,0x0443}, - {0xC7BC,0xC7DD,0x0444}, - {0xC7BD,0xC7DE,0x0445}, - {0xC7BE,0xC7DF,0x0446}, - /* C7E0-C7EF */ - {0xC7BF,0xC7E0,0x0447}, - {0xC7C0,0xC7E1,0x0448}, - {0xC7C1,0xC7E2,0x0449}, - {0xC7C2,0xC7E3,0x044A}, - {0xC7C3,0xC7E4,0x044B}, - {0xC7C4,0xC7E5,0x044C}, - {0xC7C5,0xC7E6,0x044D}, - {0xC7C6,0xC7E7,0x044E}, - {0xC7C7,0xC7E8,0x044F}, - {0xC7E9,0xC7E9,0x2460}, - {0xC7EA,0xC7EA,0x2461}, - {0xC7EB,0xC7EB,0x2462}, - {0xC7EC,0xC7EC,0x2463}, - {0xC7ED,0xC7ED,0x2464}, - {0xC7EE,0xC7EE,0x2465}, - {0xC7EF,0xC7EF,0x2466}, - /* C7F0-C7FF */ - {0xC7F0,0xC7F0,0x2467}, - {0xC7F1,0xC7F1,0x2468}, - {0xC7F2,0xC7F2,0x2469}, - {0xC7F3,0xC7F3,0x2474}, - {0xC7F4,0xC7F4,0x2475}, - {0xC7F5,0xC7F5,0x2476}, - {0xC7F6,0xC7F6,0x2477}, - {0xC7F7,0xC7F7,0x2478}, - {0xC7F8,0xC7F8,0x2479}, - {0xC7F9,0xC7F9,0x247A}, - {0xC7FA,0xC7FA,0x247B}, - {0xC7FB,0xC7FB,0x247C}, - {0xC7FC,0xC7FC,0x247D}, - {0xC7FD,0xC7FD,0x003F}, - {0xC7FE,0xC7FE,0x003F}, - {0x0000,0x0000,0x0000} -}; - - -static MY_UNICASE_INFO *my_caseinfo_big5[256]= -{ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 8 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, cA2, cA3, NULL, NULL, NULL, NULL, /* A */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, cC7, /* C */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* F */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -}; - - -static uint16 big5strokexfrm(uint16 i) -{ - if ((i == 0xA440) || (i == 0xA441)) return 0xA440; - else if (((i >= 0xA442) && (i <= 0xA453)) || ((i >= 0xC940) && (i <= 0xC944))) return 0xA442; - else if (((i >= 0xA454) && (i <= 0xA47E)) || ((i >= 0xC945) && (i <= 0xC94C))) return 0xA454; - else if (((i >= 0xA4A1) && (i <= 0xA4FD)) || ((i >= 0xC94D) && (i <= 0xC962))) return 0xA4A1; - else if (((i >= 0xA4FE) && (i <= 0xA5DF)) || ((i >= 0xC963) && (i <= 0xC9AA))) return 0xA4FE; - else if (((i >= 0xA5E0) && (i <= 0xA6E9)) || ((i >= 0xC9AB) && (i <= 0xCA59))) return 0xA5E0; - else if (((i >= 0xA6EA) && (i <= 0xA8C2)) || ((i >= 0xCA5A) && (i <= 0xCBB0))) return 0xA6EA; - else if ((i == 0xA260) || ((i >= 0xA8C3) && (i <= 0xAB44)) || ((i >= 0xCBB1) && (i <= 0xCDDC))) return 0xA8C3; - else if ((i == 0xA259) || (i == 0xF9DA) || ((i >= 0xAB45) && (i <= 0xADBB)) || ((i >= 0xCDDD) && (i <= 0xD0C7))) return 0xAB45; - else if ((i == 0xA25A) || ((i >= 0xADBC) && (i <= 0xB0AD)) || ((i >= 0xD0C8) && (i <= 0xD44A))) return 0xADBC; - else if ((i == 0xA25B) || (i == 0xA25C) || ((i >= 0xB0AE) && (i <= 0xB3C2)) || ((i >= 0xD44B) && (i <= 0xD850))) return 0xB0AE; - else if ((i == 0xF9DB) || ((i >= 0xB3C3) && (i <= 0xB6C2)) || ((i >= 0xD851) && (i <= 0xDCB0))) return 0xB3C3; - else if ((i == 0xA25D) || (i == 0xA25F) || (i == 0xC6A1) || (i == 0xF9D6) || (i == 0xF9D8) || ((i >= 0xB6C3) && (i <= 0xB9AB)) || ((i >= 0xDCB1) && (i <= 0xE0EF))) return 0xB6C3; - else if ((i == 0xF9DC) || ((i >= 0xB9AC) && (i <= 0xBBF4)) || ((i >= 0xE0F0) && (i <= 0xE4E5))) return 0xB9AC; - else if ((i == 0xA261) || ((i >= 0xBBF5) && (i <= 0xBEA6)) || ((i >= 0xE4E6) && (i <= 0xE8F3))) return 0xBBF5; - else if ((i == 0xA25E) || (i == 0xF9D7) || (i == 0xF9D9) || ((i >= 0xBEA7) && (i <= 0xC074)) || ((i >= 0xE8F4) && (i <= 0xECB8))) return 0xBEA7; - else if (((i >= 0xC075) && (i <= 0xC24E)) || ((i >= 0xECB9) && (i <= 0xEFB6))) return 0xC075; - else if (((i >= 0xC24F) && (i <= 0xC35E)) || ((i >= 0xEFB7) && (i <= 0xF1EA))) return 0xC24F; - else if (((i >= 0xC35F) && (i <= 0xC454)) || ((i >= 0xF1EB) && (i <= 0xF3FC))) return 0xC35F; - else if (((i >= 0xC455) && (i <= 0xC4D6)) || ((i >= 0xF3FD) && (i <= 0xF5BF))) return 0xC455; - else if (((i >= 0xC4D7) && (i <= 0xC56A)) || ((i >= 0xF5C0) && (i <= 0xF6D5))) return 0xC4D7; - else if (((i >= 0xC56B) && (i <= 0xC5C7)) || ((i >= 0xF6D6) && (i <= 0xF7CF))) return 0xC56B; - else if (((i >= 0xC5C8) && (i <= 0xC5F0)) || ((i >= 0xF7D0) && (i <= 0xF8A4))) return 0xC5C8; - else if (((i >= 0xC5F1) && (i <= 0xC654)) || ((i >= 0xF8A5) && (i <= 0xF8ED))) return 0xC5F1; - else if (((i >= 0xC655) && (i <= 0xC664)) || ((i >= 0xF8EE) && (i <= 0xF96A))) return 0xC655; - else if (((i >= 0xC665) && (i <= 0xC66B)) || ((i >= 0xF96B) && (i <= 0xF9A1))) return 0xC665; - else if (((i >= 0xC66C) && (i <= 0xC675)) || ((i >= 0xF9A2) && (i <= 0xF9B9))) return 0xC66C; - else if (((i >= 0xC676) && (i <= 0xC678)) || ((i >= 0xF9BA) && (i <= 0xF9C5))) return 0xC676; - else if (((i >= 0xC679) && (i <= 0xC67C)) || ((i >= 0xF9C7) && (i <= 0xF9CB))) return 0xC679; - else if ((i == 0xC67D) || ((i >= 0xF9CC) && (i <= 0xF9CF))) return 0xC67D; - else if (i == 0xF9D0) return 0xF9D0; - else if ((i == 0xC67E) || (i == 0xF9D1)) return 0xC67E; - else if ((i == 0xF9C6) || (i == 0xF9D2)) return 0xF9C6; - else if (i == 0xF9D3) return 0xF9D3; - else if (i == 0xF9D4) return 0xF9D4; - else if (i == 0xF9D5) return 0xF9D5; - return 0xA140; -} - - - -static int my_strnncoll_big5_internal(const uchar **a_res, - const uchar **b_res, size_t length) -{ - const uchar *a= *a_res, *b= *b_res; - - while (length--) - { - if ((length > 0) && isbig5code(*a,*(a+1)) && isbig5code(*b, *(b+1))) - { - if (*a != *b || *(a+1) != *(b+1)) - return ((int) big5code(*a,*(a+1)) - - (int) big5code(*b,*(b+1))); - a+= 2; - b+= 2; - length--; - } - else if (sort_order_big5[*a++] != - sort_order_big5[*b++]) - return ((int) sort_order_big5[a[-1]] - - (int) sort_order_big5[b[-1]]); - } - *a_res= a; - *b_res= b; - return 0; -} - - -/* Compare strings */ - -static int my_strnncoll_big5(CHARSET_INFO *cs __attribute__((unused)), - const uchar *a, size_t a_length, - const uchar *b, size_t b_length, - my_bool b_is_prefix) -{ - size_t length= min(a_length, b_length); - int res= my_strnncoll_big5_internal(&a, &b, length); - return res ? res : (int)((b_is_prefix ? length : a_length) - b_length); -} - - -/* compare strings, ignore end space */ - -static int my_strnncollsp_big5(CHARSET_INFO * cs __attribute__((unused)), - const uchar *a, size_t a_length, - const uchar *b, size_t b_length, - my_bool diff_if_only_endspace_difference) -{ - size_t length= min(a_length, b_length); - int res= my_strnncoll_big5_internal(&a, &b, length); - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= 0; -#endif - - if (!res && a_length != b_length) - { - const uchar *end; - int swap= 1; - if (diff_if_only_endspace_difference) - res= 1; /* Assume 'a' is bigger */ - /* - Check the next not space character of the longer key. If it's < ' ', - then it's smaller than the other key. - */ - if (a_length < b_length) - { - /* put longer key in a */ - a_length= b_length; - a= b; - swap= -1; /* swap sign of result */ - res= -res; - } - for (end= a + a_length-length; a < end ; a++) - { - if (*a != ' ') - return (*a < ' ') ? -swap : swap; - } - } - return res; -} - - -static size_t my_strnxfrm_big5(CHARSET_INFO *cs __attribute__((unused)), - uchar *dest, size_t len, - const uchar *src, size_t srclen) -{ - uint16 e; - size_t dstlen= len; - uchar *dest_end= dest + dstlen; - - len = srclen; - while (len-- && dest < dest_end) - { - if ((len > 0) && isbig5code(*src, *(src+1))) - { - e = big5strokexfrm((uint16) big5code(*src, *(src+1))); - *dest++ = big5head(e); - if (dest < dest_end) - *dest++ = big5tail(e); - src +=2; - len--; - } else - *dest++ = sort_order_big5[(uchar) *src++]; - } - if (dstlen > srclen) - bfill(dest, dstlen - srclen, ' '); - return dstlen; -} - -#if 0 -static int my_strcoll_big5(const uchar *s1, const uchar *s2) -{ - - while (*s1 && *s2) - { - if (*(s1+1) && *(s2+1) && isbig5code(*s1,*(s1+1)) && isbig5code(*s2, *(s2+1))) - { - if (*s1 != *s2 || *(s1+1) != *(s2+1)) - return ((int) big5code(*s1,*(s1+1)) - - (int) big5code(*s2,*(s2+1))); - s1 +=2; - s2 +=2; - } else if (sort_order_big5[(uchar) *s1++] != sort_order_big5[(uchar) *s2++]) - return ((int) sort_order_big5[(uchar) s1[-1]] - - (int) sort_order_big5[(uchar) s2[-1]]); - } - return 0; -} - -static int my_strxfrm_big5(uchar *dest, const uchar *src, int len) -{ - uint16 e; - uchar *d = dest; - - if (len < 1) return 0; - if (!*src) - { - *d = '\0'; - return 0; - } - while (*src && (len > 1)) - { - if (*(src+1) && isbig5code(*src, *(src+1))) - { - e = big5strokexfrm((uint16) big5code(*src, *(src+1))); - *d++ = big5head(e); - *d++ = big5tail(e); - src +=2; - len--; - } else - *d++ = sort_order_big5[(uchar) *src++]; - } - *d = '\0'; - return (int) (d-dest); -} -#endif - - -static uint ismbchar_big5(CHARSET_INFO *cs __attribute__((unused)), - const char* p, const char *e) -{ - return (isbig5head(*(p)) && (e)-(p)>1 && isbig5tail(*((p)+1))? 2: 0); -} - - -static uint mbcharlen_big5(CHARSET_INFO *cs __attribute__((unused)), uint c) -{ - return (isbig5head(c)? 2 : 1); -} - - -/* page 0 0xA140-0xC7FC */ -static uint16 tab_big5_uni0[]={ -0x3000,0xFF0C,0x3001,0x3002,0xFF0E,0x2022,0xFF1B,0xFF1A, -0xFF1F,0xFF01,0xFE30,0x2026,0x2025,0xFE50,0xFF64,0xFE52, -0x00B7,0xFE54,0xFE55,0xFE56,0xFE57,0xFF5C,0x2013,0xFE31, -0x2014,0xFE33,0xFFFD,0xFE34,0xFE4F,0xFF08,0xFF09,0xFE35, -0xFE36,0xFF5B,0xFF5D,0xFE37,0xFE38,0x3014,0x3015,0xFE39, -0xFE3A,0x3010,0x3011,0xFE3B,0xFE3C,0x300A,0x300B,0xFE3D, -0xFE3E,0x3008,0x3009,0xFE3F,0xFE40,0x300C,0x300D,0xFE41, -0xFE42,0x300E,0x300F,0xFE43,0xFE44,0xFE59,0xFE5A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xFE5B,0xFE5C,0xFE5D,0xFE5E,0x2018,0x2019,0x201C, -0x201D,0x301D,0x301E,0x2035,0x2032,0xFF03,0xFF06,0xFF0A, -0x203B,0x00A7,0x3003,0x25CB,0x25CF,0x25B3,0x25B2,0x25CE, -0x2606,0x2605,0x25C7,0x25C6,0x25A1,0x25A0,0x25BD,0x25BC, -0x32A3,0x2105,0x203E,0xFFFD,0xFF3F,0xFFFD,0xFE49,0xFE4A, -0xFE4D,0xFE4E,0xFE4B,0xFE4C,0xFE5F,0xFE60,0xFE61,0xFF0B, -0xFF0D,0x00D7,0x00F7,0x00B1,0x221A,0xFF1C,0xFF1E,0xFF1D, -0x2266,0x2267,0x2260,0x221E,0x2252,0x2261,0xFE62,0xFE63, -0xFE64,0xFE65,0xFE66,0x223C,0x2229,0x222A,0x22A5,0x2220, -0x221F,0x22BF,0x33D2,0x33D1,0x222B,0x222E,0x2235,0x2234, -0x2640,0x2642,0x2641,0x2609,0x2191,0x2193,0x2190,0x2192, -0x2196,0x2197,0x2199,0x2198,0x2225,0x2223,0xFFFD, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xFFFD,0xFF0F,0xFF3C,0xFF04,0x00A5,0x3012,0x00A2,0x00A3, -0xFF05,0xFF20,0x2103,0x2109,0xFE69,0xFE6A,0xFE6B,0x33D5, -0x339C,0x339D,0x339E,0x33CE,0x33A1,0x338E,0x338F,0x33C4, -0x00B0,0x5159,0x515B,0x515E,0x515D,0x5161,0x5163,0x55E7, -0x74E9,0x7CCE,0x2581,0x2582,0x2583,0x2584,0x2585,0x2586, -0x2587,0x2588,0x258F,0x258E,0x258D,0x258C,0x258B,0x258A, -0x2589,0x253C,0x2534,0x252C,0x2524,0x251C,0x2594,0x2500, -0x2502,0x2595,0x250C,0x2510,0x2514,0x2518,0x256D, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x256E,0x2570,0x256F,0x2550,0x255E,0x256A,0x2561, -0x25E2,0x25E3,0x25E5,0x25E4,0x2571,0x2572,0x2573,0xFF10, -0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17,0xFF18, -0xFF19,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166, -0x2167,0x2168,0x2169,0x3021,0x3022,0x3023,0x3024,0x3025, -0x3026,0x3027,0x3028,0x3029,0xFFFD,0x5344,0xFFFD,0xFF21, -0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28,0xFF29, -0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31, -0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,0xFF39, -0xFF3A,0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47, -0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F, -0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xFF57,0xFF58,0xFF59,0xFF5A,0x0391,0x0392,0x0393,0x0394, -0x0395,0x0396,0x0397,0x0398,0x0399,0x039A,0x039B,0x039C, -0x039D,0x039E,0x039F,0x03A0,0x03A1,0x03A3,0x03A4,0x03A5, -0x03A6,0x03A7,0x03A8,0x03A9,0x03B1,0x03B2,0x03B3,0x03B4, -0x03B5,0x03B6,0x03B7,0x03B8,0x03B9,0x03BA,0x03BB,0x03BC, -0x03BD,0x03BE,0x03BF,0x03C0,0x03C1,0x03C3,0x03C4,0x03C5, -0x03C6,0x03C7,0x03C8,0x03C9,0x3105,0x3106,0x3107,0x3108, -0x3109,0x310A,0x310B,0x310C,0x310D,0x310E,0x310F, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116, -0x3117,0x3118,0x3119,0x311A,0x311B,0x311C,0x311D,0x311E, -0x311F,0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126, -0x3127,0x3128,0x3129,0x02D9,0x02C9,0x02CA,0x02C7,0x02CB, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4E00,0x4E59,0x4E01,0x4E03,0x4E43,0x4E5D,0x4E86,0x4E8C, -0x4EBA,0x513F,0x5165,0x516B,0x51E0,0x5200,0x5201,0x529B, -0x5315,0x5341,0x535C,0x53C8,0x4E09,0x4E0B,0x4E08,0x4E0A, -0x4E2B,0x4E38,0x51E1,0x4E45,0x4E48,0x4E5F,0x4E5E,0x4E8E, -0x4EA1,0x5140,0x5203,0x52FA,0x5343,0x53C9,0x53E3,0x571F, -0x58EB,0x5915,0x5927,0x5973,0x5B50,0x5B51,0x5B53,0x5BF8, -0x5C0F,0x5C22,0x5C38,0x5C71,0x5DDD,0x5DE5,0x5DF1,0x5DF2, -0x5DF3,0x5DFE,0x5E72,0x5EFE,0x5F0B,0x5F13,0x624D, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x4E11,0x4E10,0x4E0D,0x4E2D,0x4E30,0x4E39,0x4E4B, -0x5C39,0x4E88,0x4E91,0x4E95,0x4E92,0x4E94,0x4EA2,0x4EC1, -0x4EC0,0x4EC3,0x4EC6,0x4EC7,0x4ECD,0x4ECA,0x4ECB,0x4EC4, -0x5143,0x5141,0x5167,0x516D,0x516E,0x516C,0x5197,0x51F6, -0x5206,0x5207,0x5208,0x52FB,0x52FE,0x52FF,0x5316,0x5339, -0x5348,0x5347,0x5345,0x535E,0x5384,0x53CB,0x53CA,0x53CD, -0x58EC,0x5929,0x592B,0x592A,0x592D,0x5B54,0x5C11,0x5C24, -0x5C3A,0x5C6F,0x5DF4,0x5E7B,0x5EFF,0x5F14,0x5F15,0x5FC3, -0x6208,0x6236,0x624B,0x624E,0x652F,0x6587,0x6597,0x65A4, -0x65B9,0x65E5,0x66F0,0x6708,0x6728,0x6B20,0x6B62,0x6B79, -0x6BCB,0x6BD4,0x6BDB,0x6C0F,0x6C34,0x706B,0x722A,0x7236, -0x723B,0x7247,0x7259,0x725B,0x72AC,0x738B,0x4E19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4E16,0x4E15,0x4E14,0x4E18,0x4E3B,0x4E4D,0x4E4F,0x4E4E, -0x4EE5,0x4ED8,0x4ED4,0x4ED5,0x4ED6,0x4ED7,0x4EE3,0x4EE4, -0x4ED9,0x4EDE,0x5145,0x5144,0x5189,0x518A,0x51AC,0x51F9, -0x51FA,0x51F8,0x520A,0x52A0,0x529F,0x5305,0x5306,0x5317, -0x531D,0x4EDF,0x534A,0x5349,0x5361,0x5360,0x536F,0x536E, -0x53BB,0x53EF,0x53E4,0x53F3,0x53EC,0x53EE,0x53E9,0x53E8, -0x53FC,0x53F8,0x53F5,0x53EB,0x53E6,0x53EA,0x53F2,0x53F1, -0x53F0,0x53E5,0x53ED,0x53FB,0x56DB,0x56DA,0x5916, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x592E,0x5931,0x5974,0x5976,0x5B55,0x5B83,0x5C3C, -0x5DE8,0x5DE7,0x5DE6,0x5E02,0x5E03,0x5E73,0x5E7C,0x5F01, -0x5F18,0x5F17,0x5FC5,0x620A,0x6253,0x6254,0x6252,0x6251, -0x65A5,0x65E6,0x672E,0x672C,0x672A,0x672B,0x672D,0x6B63, -0x6BCD,0x6C11,0x6C10,0x6C38,0x6C41,0x6C40,0x6C3E,0x72AF, -0x7384,0x7389,0x74DC,0x74E6,0x7518,0x751F,0x7528,0x7529, -0x7530,0x7531,0x7532,0x7533,0x758B,0x767D,0x76AE,0x76BF, -0x76EE,0x77DB,0x77E2,0x77F3,0x793A,0x79BE,0x7A74,0x7ACB, -0x4E1E,0x4E1F,0x4E52,0x4E53,0x4E69,0x4E99,0x4EA4,0x4EA6, -0x4EA5,0x4EFF,0x4F09,0x4F19,0x4F0A,0x4F15,0x4F0D,0x4F10, -0x4F11,0x4F0F,0x4EF2,0x4EF6,0x4EFB,0x4EF0,0x4EF3,0x4EFD, -0x4F01,0x4F0B,0x5149,0x5147,0x5146,0x5148,0x5168, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5171,0x518D,0x51B0,0x5217,0x5211,0x5212,0x520E,0x5216, -0x52A3,0x5308,0x5321,0x5320,0x5370,0x5371,0x5409,0x540F, -0x540C,0x540A,0x5410,0x5401,0x540B,0x5404,0x5411,0x540D, -0x5408,0x5403,0x540E,0x5406,0x5412,0x56E0,0x56DE,0x56DD, -0x5733,0x5730,0x5728,0x572D,0x572C,0x572F,0x5729,0x5919, -0x591A,0x5937,0x5938,0x5984,0x5978,0x5983,0x597D,0x5979, -0x5982,0x5981,0x5B57,0x5B58,0x5B87,0x5B88,0x5B85,0x5B89, -0x5BFA,0x5C16,0x5C79,0x5DDE,0x5E06,0x5E76,0x5E74, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x5F0F,0x5F1B,0x5FD9,0x5FD6,0x620E,0x620C,0x620D, -0x6210,0x6263,0x625B,0x6258,0x6536,0x65E9,0x65E8,0x65EC, -0x65ED,0x66F2,0x66F3,0x6709,0x673D,0x6734,0x6731,0x6735, -0x6B21,0x6B64,0x6B7B,0x6C16,0x6C5D,0x6C57,0x6C59,0x6C5F, -0x6C60,0x6C50,0x6C55,0x6C61,0x6C5B,0x6C4D,0x6C4E,0x7070, -0x725F,0x725D,0x767E,0x7AF9,0x7C73,0x7CF8,0x7F36,0x7F8A, -0x7FBD,0x8001,0x8003,0x800C,0x8012,0x8033,0x807F,0x8089, -0x808B,0x808C,0x81E3,0x81EA,0x81F3,0x81FC,0x820C,0x821B, -0x821F,0x826E,0x8272,0x827E,0x866B,0x8840,0x884C,0x8863, -0x897F,0x9621,0x4E32,0x4EA8,0x4F4D,0x4F4F,0x4F47,0x4F57, -0x4F5E,0x4F34,0x4F5B,0x4F55,0x4F30,0x4F50,0x4F51,0x4F3D, -0x4F3A,0x4F38,0x4F43,0x4F54,0x4F3C,0x4F46,0x4F63, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4F5C,0x4F60,0x4F2F,0x4F4E,0x4F36,0x4F59,0x4F5D,0x4F48, -0x4F5A,0x514C,0x514B,0x514D,0x5175,0x51B6,0x51B7,0x5225, -0x5224,0x5229,0x522A,0x5228,0x52AB,0x52A9,0x52AA,0x52AC, -0x5323,0x5373,0x5375,0x541D,0x542D,0x541E,0x543E,0x5426, -0x544E,0x5427,0x5446,0x5443,0x5433,0x5448,0x5442,0x541B, -0x5429,0x544A,0x5439,0x543B,0x5438,0x542E,0x5435,0x5436, -0x5420,0x543C,0x5440,0x5431,0x542B,0x541F,0x542C,0x56EA, -0x56F0,0x56E4,0x56EB,0x574A,0x5751,0x5740,0x574D, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x5747,0x574E,0x573E,0x5750,0x574F,0x573B,0x58EF, -0x593E,0x599D,0x5992,0x59A8,0x599E,0x59A3,0x5999,0x5996, -0x598D,0x59A4,0x5993,0x598A,0x59A5,0x5B5D,0x5B5C,0x5B5A, -0x5B5B,0x5B8C,0x5B8B,0x5B8F,0x5C2C,0x5C40,0x5C41,0x5C3F, -0x5C3E,0x5C90,0x5C91,0x5C94,0x5C8C,0x5DEB,0x5E0C,0x5E8F, -0x5E87,0x5E8A,0x5EF7,0x5F04,0x5F1F,0x5F64,0x5F62,0x5F77, -0x5F79,0x5FD8,0x5FCC,0x5FD7,0x5FCD,0x5FF1,0x5FEB,0x5FF8, -0x5FEA,0x6212,0x6211,0x6284,0x6297,0x6296,0x6280,0x6276, -0x6289,0x626D,0x628A,0x627C,0x627E,0x6279,0x6273,0x6292, -0x626F,0x6298,0x626E,0x6295,0x6293,0x6291,0x6286,0x6539, -0x653B,0x6538,0x65F1,0x66F4,0x675F,0x674E,0x674F,0x6750, -0x6751,0x675C,0x6756,0x675E,0x6749,0x6746,0x6760, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6753,0x6757,0x6B65,0x6BCF,0x6C42,0x6C5E,0x6C99,0x6C81, -0x6C88,0x6C89,0x6C85,0x6C9B,0x6C6A,0x6C7A,0x6C90,0x6C70, -0x6C8C,0x6C68,0x6C96,0x6C92,0x6C7D,0x6C83,0x6C72,0x6C7E, -0x6C74,0x6C86,0x6C76,0x6C8D,0x6C94,0x6C98,0x6C82,0x7076, -0x707C,0x707D,0x7078,0x7262,0x7261,0x7260,0x72C4,0x72C2, -0x7396,0x752C,0x752B,0x7537,0x7538,0x7682,0x76EF,0x77E3, -0x79C1,0x79C0,0x79BF,0x7A76,0x7CFB,0x7F55,0x8096,0x8093, -0x809D,0x8098,0x809B,0x809A,0x80B2,0x826F,0x8292, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x828B,0x828D,0x898B,0x89D2,0x8A00,0x8C37,0x8C46, -0x8C55,0x8C9D,0x8D64,0x8D70,0x8DB3,0x8EAB,0x8ECA,0x8F9B, -0x8FB0,0x8FC2,0x8FC6,0x8FC5,0x8FC4,0x5DE1,0x9091,0x90A2, -0x90AA,0x90A6,0x90A3,0x9149,0x91C6,0x91CC,0x9632,0x962E, -0x9631,0x962A,0x962C,0x4E26,0x4E56,0x4E73,0x4E8B,0x4E9B, -0x4E9E,0x4EAB,0x4EAC,0x4F6F,0x4F9D,0x4F8D,0x4F73,0x4F7F, -0x4F6C,0x4F9B,0x4F8B,0x4F86,0x4F83,0x4F70,0x4F75,0x4F88, -0x4F69,0x4F7B,0x4F96,0x4F7E,0x4F8F,0x4F91,0x4F7A,0x5154, -0x5152,0x5155,0x5169,0x5177,0x5176,0x5178,0x51BD,0x51FD, -0x523B,0x5238,0x5237,0x523A,0x5230,0x522E,0x5236,0x5241, -0x52BE,0x52BB,0x5352,0x5354,0x5353,0x5351,0x5366,0x5377, -0x5378,0x5379,0x53D6,0x53D4,0x53D7,0x5473,0x5475, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5496,0x5478,0x5495,0x5480,0x547B,0x5477,0x5484,0x5492, -0x5486,0x547C,0x5490,0x5471,0x5476,0x548C,0x549A,0x5462, -0x5468,0x548B,0x547D,0x548E,0x56FA,0x5783,0x5777,0x576A, -0x5769,0x5761,0x5766,0x5764,0x577C,0x591C,0x5949,0x5947, -0x5948,0x5944,0x5954,0x59BE,0x59BB,0x59D4,0x59B9,0x59AE, -0x59D1,0x59C6,0x59D0,0x59CD,0x59CB,0x59D3,0x59CA,0x59AF, -0x59B3,0x59D2,0x59C5,0x5B5F,0x5B64,0x5B63,0x5B97,0x5B9A, -0x5B98,0x5B9C,0x5B99,0x5B9B,0x5C1A,0x5C48,0x5C45, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x5C46,0x5CB7,0x5CA1,0x5CB8,0x5CA9,0x5CAB,0x5CB1, -0x5CB3,0x5E18,0x5E1A,0x5E16,0x5E15,0x5E1B,0x5E11,0x5E78, -0x5E9A,0x5E97,0x5E9C,0x5E95,0x5E96,0x5EF6,0x5F26,0x5F27, -0x5F29,0x5F80,0x5F81,0x5F7F,0x5F7C,0x5FDD,0x5FE0,0x5FFD, -0x5FF5,0x5FFF,0x600F,0x6014,0x602F,0x6035,0x6016,0x602A, -0x6015,0x6021,0x6027,0x6029,0x602B,0x601B,0x6216,0x6215, -0x623F,0x623E,0x6240,0x627F,0x62C9,0x62CC,0x62C4,0x62BF, -0x62C2,0x62B9,0x62D2,0x62DB,0x62AB,0x62D3,0x62D4,0x62CB, -0x62C8,0x62A8,0x62BD,0x62BC,0x62D0,0x62D9,0x62C7,0x62CD, -0x62B5,0x62DA,0x62B1,0x62D8,0x62D6,0x62D7,0x62C6,0x62AC, -0x62CE,0x653E,0x65A7,0x65BC,0x65FA,0x6614,0x6613,0x660C, -0x6606,0x6602,0x660E,0x6600,0x660F,0x6615,0x660A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6607,0x670D,0x670B,0x676D,0x678B,0x6795,0x6771,0x679C, -0x6773,0x6777,0x6787,0x679D,0x6797,0x676F,0x6770,0x677F, -0x6789,0x677E,0x6790,0x6775,0x679A,0x6793,0x677C,0x676A, -0x6772,0x6B23,0x6B66,0x6B67,0x6B7F,0x6C13,0x6C1B,0x6CE3, -0x6CE8,0x6CF3,0x6CB1,0x6CCC,0x6CE5,0x6CB3,0x6CBD,0x6CBE, -0x6CBC,0x6CE2,0x6CAB,0x6CD5,0x6CD3,0x6CB8,0x6CC4,0x6CB9, -0x6CC1,0x6CAE,0x6CD7,0x6CC5,0x6CF1,0x6CBF,0x6CBB,0x6CE1, -0x6CDB,0x6CCA,0x6CAC,0x6CEF,0x6CDC,0x6CD6,0x6CE0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7095,0x708E,0x7092,0x708A,0x7099,0x722C,0x722D, -0x7238,0x7248,0x7267,0x7269,0x72C0,0x72CE,0x72D9,0x72D7, -0x72D0,0x73A9,0x73A8,0x739F,0x73AB,0x73A5,0x753D,0x759D, -0x7599,0x759A,0x7684,0x76C2,0x76F2,0x76F4,0x77E5,0x77FD, -0x793E,0x7940,0x7941,0x79C9,0x79C8,0x7A7A,0x7A79,0x7AFA, -0x7CFE,0x7F54,0x7F8C,0x7F8B,0x8005,0x80BA,0x80A5,0x80A2, -0x80B1,0x80A1,0x80AB,0x80A9,0x80B4,0x80AA,0x80AF,0x81E5, -0x81FE,0x820D,0x82B3,0x829D,0x8299,0x82AD,0x82BD,0x829F, -0x82B9,0x82B1,0x82AC,0x82A5,0x82AF,0x82B8,0x82A3,0x82B0, -0x82BE,0x82B7,0x864E,0x8671,0x521D,0x8868,0x8ECB,0x8FCE, -0x8FD4,0x8FD1,0x90B5,0x90B8,0x90B1,0x90B6,0x91C7,0x91D1, -0x9577,0x9580,0x961C,0x9640,0x963F,0x963B,0x9644, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9642,0x96B9,0x96E8,0x9752,0x975E,0x4E9F,0x4EAD,0x4EAE, -0x4FE1,0x4FB5,0x4FAF,0x4FBF,0x4FE0,0x4FD1,0x4FCF,0x4FDD, -0x4FC3,0x4FB6,0x4FD8,0x4FDF,0x4FCA,0x4FD7,0x4FAE,0x4FD0, -0x4FC4,0x4FC2,0x4FDA,0x4FCE,0x4FDE,0x4FB7,0x5157,0x5192, -0x5191,0x51A0,0x524E,0x5243,0x524A,0x524D,0x524C,0x524B, -0x5247,0x52C7,0x52C9,0x52C3,0x52C1,0x530D,0x5357,0x537B, -0x539A,0x53DB,0x54AC,0x54C0,0x54A8,0x54CE,0x54C9,0x54B8, -0x54A6,0x54B3,0x54C7,0x54C2,0x54BD,0x54AA,0x54C1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x54C4,0x54C8,0x54AF,0x54AB,0x54B1,0x54BB,0x54A9, -0x54A7,0x54BF,0x56FF,0x5782,0x578B,0x57A0,0x57A3,0x57A2, -0x57CE,0x57AE,0x5793,0x5955,0x5951,0x594F,0x594E,0x5950, -0x59DC,0x59D8,0x59FF,0x59E3,0x59E8,0x5A03,0x59E5,0x59EA, -0x59DA,0x59E6,0x5A01,0x59FB,0x5B69,0x5BA3,0x5BA6,0x5BA4, -0x5BA2,0x5BA5,0x5C01,0x5C4E,0x5C4F,0x5C4D,0x5C4B,0x5CD9, -0x5CD2,0x5DF7,0x5E1D,0x5E25,0x5E1F,0x5E7D,0x5EA0,0x5EA6, -0x5EFA,0x5F08,0x5F2D,0x5F65,0x5F88,0x5F85,0x5F8A,0x5F8B, -0x5F87,0x5F8C,0x5F89,0x6012,0x601D,0x6020,0x6025,0x600E, -0x6028,0x604D,0x6070,0x6068,0x6062,0x6046,0x6043,0x606C, -0x606B,0x606A,0x6064,0x6241,0x62DC,0x6316,0x6309,0x62FC, -0x62ED,0x6301,0x62EE,0x62FD,0x6307,0x62F1,0x62F7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x62EF,0x62EC,0x62FE,0x62F4,0x6311,0x6302,0x653F,0x6545, -0x65AB,0x65BD,0x65E2,0x6625,0x662D,0x6620,0x6627,0x662F, -0x661F,0x6628,0x6631,0x6624,0x66F7,0x67FF,0x67D3,0x67F1, -0x67D4,0x67D0,0x67EC,0x67B6,0x67AF,0x67F5,0x67E9,0x67EF, -0x67C4,0x67D1,0x67B4,0x67DA,0x67E5,0x67B8,0x67CF,0x67DE, -0x67F3,0x67B0,0x67D9,0x67E2,0x67DD,0x67D2,0x6B6A,0x6B83, -0x6B86,0x6BB5,0x6BD2,0x6BD7,0x6C1F,0x6CC9,0x6D0B,0x6D32, -0x6D2A,0x6D41,0x6D25,0x6D0C,0x6D31,0x6D1E,0x6D17, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6D3B,0x6D3D,0x6D3E,0x6D36,0x6D1B,0x6CF5,0x6D39, -0x6D27,0x6D38,0x6D29,0x6D2E,0x6D35,0x6D0E,0x6D2B,0x70AB, -0x70BA,0x70B3,0x70AC,0x70AF,0x70AD,0x70B8,0x70AE,0x70A4, -0x7230,0x7272,0x726F,0x7274,0x72E9,0x72E0,0x72E1,0x73B7, -0x73CA,0x73BB,0x73B2,0x73CD,0x73C0,0x73B3,0x751A,0x752D, -0x754F,0x754C,0x754E,0x754B,0x75AB,0x75A4,0x75A5,0x75A2, -0x75A3,0x7678,0x7686,0x7687,0x7688,0x76C8,0x76C6,0x76C3, -0x76C5,0x7701,0x76F9,0x76F8,0x7709,0x770B,0x76FE,0x76FC, -0x7707,0x77DC,0x7802,0x7814,0x780C,0x780D,0x7946,0x7949, -0x7948,0x7947,0x79B9,0x79BA,0x79D1,0x79D2,0x79CB,0x7A7F, -0x7A81,0x7AFF,0x7AFD,0x7C7D,0x7D02,0x7D05,0x7D00,0x7D09, -0x7D07,0x7D04,0x7D06,0x7F38,0x7F8E,0x7FBF,0x8004, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8010,0x800D,0x8011,0x8036,0x80D6,0x80E5,0x80DA,0x80C3, -0x80C4,0x80CC,0x80E1,0x80DB,0x80CE,0x80DE,0x80E4,0x80DD, -0x81F4,0x8222,0x82E7,0x8303,0x8305,0x82E3,0x82DB,0x82E6, -0x8304,0x82E5,0x8302,0x8309,0x82D2,0x82D7,0x82F1,0x8301, -0x82DC,0x82D4,0x82D1,0x82DE,0x82D3,0x82DF,0x82EF,0x8306, -0x8650,0x8679,0x867B,0x867A,0x884D,0x886B,0x8981,0x89D4, -0x8A08,0x8A02,0x8A03,0x8C9E,0x8CA0,0x8D74,0x8D73,0x8DB4, -0x8ECD,0x8ECC,0x8FF0,0x8FE6,0x8FE2,0x8FEA,0x8FE5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x8FED,0x8FEB,0x8FE4,0x8FE8,0x90CA,0x90CE,0x90C1, -0x90C3,0x914B,0x914A,0x91CD,0x9582,0x9650,0x964B,0x964C, -0x964D,0x9762,0x9769,0x97CB,0x97ED,0x97F3,0x9801,0x98A8, -0x98DB,0x98DF,0x9996,0x9999,0x4E58,0x4EB3,0x500C,0x500D, -0x5023,0x4FEF,0x5026,0x5025,0x4FF8,0x5029,0x5016,0x5006, -0x503C,0x501F,0x501A,0x5012,0x5011,0x4FFA,0x5000,0x5014, -0x5028,0x4FF1,0x5021,0x500B,0x5019,0x5018,0x4FF3,0x4FEE, -0x502D,0x502A,0x4FFE,0x502B,0x5009,0x517C,0x51A4,0x51A5, -0x51A2,0x51CD,0x51CC,0x51C6,0x51CB,0x5256,0x525C,0x5254, -0x525B,0x525D,0x532A,0x537F,0x539F,0x539D,0x53DF,0x54E8, -0x5510,0x5501,0x5537,0x54FC,0x54E5,0x54F2,0x5506,0x54FA, -0x5514,0x54E9,0x54ED,0x54E1,0x5509,0x54EE,0x54EA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x54E6,0x5527,0x5507,0x54FD,0x550F,0x5703,0x5704,0x57C2, -0x57D4,0x57CB,0x57C3,0x5809,0x590F,0x5957,0x5958,0x595A, -0x5A11,0x5A18,0x5A1C,0x5A1F,0x5A1B,0x5A13,0x59EC,0x5A20, -0x5A23,0x5A29,0x5A25,0x5A0C,0x5A09,0x5B6B,0x5C58,0x5BB0, -0x5BB3,0x5BB6,0x5BB4,0x5BAE,0x5BB5,0x5BB9,0x5BB8,0x5C04, -0x5C51,0x5C55,0x5C50,0x5CED,0x5CFD,0x5CFB,0x5CEA,0x5CE8, -0x5CF0,0x5CF6,0x5D01,0x5CF4,0x5DEE,0x5E2D,0x5E2B,0x5EAB, -0x5EAD,0x5EA7,0x5F31,0x5F92,0x5F91,0x5F90,0x6059, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6063,0x6065,0x6050,0x6055,0x606D,0x6069,0x606F, -0x6084,0x609F,0x609A,0x608D,0x6094,0x608C,0x6085,0x6096, -0x6247,0x62F3,0x6308,0x62FF,0x634E,0x633E,0x632F,0x6355, -0x6342,0x6346,0x634F,0x6349,0x633A,0x6350,0x633D,0x632A, -0x632B,0x6328,0x634D,0x634C,0x6548,0x6549,0x6599,0x65C1, -0x65C5,0x6642,0x6649,0x664F,0x6643,0x6652,0x664C,0x6645, -0x6641,0x66F8,0x6714,0x6715,0x6717,0x6821,0x6838,0x6848, -0x6846,0x6853,0x6839,0x6842,0x6854,0x6829,0x68B3,0x6817, -0x684C,0x6851,0x683D,0x67F4,0x6850,0x6840,0x683C,0x6843, -0x682A,0x6845,0x6813,0x6818,0x6841,0x6B8A,0x6B89,0x6BB7, -0x6C23,0x6C27,0x6C28,0x6C26,0x6C24,0x6CF0,0x6D6A,0x6D95, -0x6D88,0x6D87,0x6D66,0x6D78,0x6D77,0x6D59,0x6D93, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6D6C,0x6D89,0x6D6E,0x6D5A,0x6D74,0x6D69,0x6D8C,0x6D8A, -0x6D79,0x6D85,0x6D65,0x6D94,0x70CA,0x70D8,0x70E4,0x70D9, -0x70C8,0x70CF,0x7239,0x7279,0x72FC,0x72F9,0x72FD,0x72F8, -0x72F7,0x7386,0x73ED,0x7409,0x73EE,0x73E0,0x73EA,0x73DE, -0x7554,0x755D,0x755C,0x755A,0x7559,0x75BE,0x75C5,0x75C7, -0x75B2,0x75B3,0x75BD,0x75BC,0x75B9,0x75C2,0x75B8,0x768B, -0x76B0,0x76CA,0x76CD,0x76CE,0x7729,0x771F,0x7720,0x7728, -0x77E9,0x7830,0x7827,0x7838,0x781D,0x7834,0x7837, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7825,0x782D,0x7820,0x781F,0x7832,0x7955,0x7950, -0x7960,0x795F,0x7956,0x795E,0x795D,0x7957,0x795A,0x79E4, -0x79E3,0x79E7,0x79DF,0x79E6,0x79E9,0x79D8,0x7A84,0x7A88, -0x7AD9,0x7B06,0x7B11,0x7C89,0x7D21,0x7D17,0x7D0B,0x7D0A, -0x7D20,0x7D22,0x7D14,0x7D10,0x7D15,0x7D1A,0x7D1C,0x7D0D, -0x7D19,0x7D1B,0x7F3A,0x7F5F,0x7F94,0x7FC5,0x7FC1,0x8006, -0x8018,0x8015,0x8019,0x8017,0x803D,0x803F,0x80F1,0x8102, -0x80F0,0x8105,0x80ED,0x80F4,0x8106,0x80F8,0x80F3,0x8108, -0x80FD,0x810A,0x80FC,0x80EF,0x81ED,0x81EC,0x8200,0x8210, -0x822A,0x822B,0x8228,0x822C,0x82BB,0x832B,0x8352,0x8354, -0x834A,0x8338,0x8350,0x8349,0x8335,0x8334,0x834F,0x8332, -0x8339,0x8336,0x8317,0x8340,0x8331,0x8328,0x8343, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8654,0x868A,0x86AA,0x8693,0x86A4,0x86A9,0x868C,0x86A3, -0x869C,0x8870,0x8877,0x8881,0x8882,0x887D,0x8879,0x8A18, -0x8A10,0x8A0E,0x8A0C,0x8A15,0x8A0A,0x8A17,0x8A13,0x8A16, -0x8A0F,0x8A11,0x8C48,0x8C7A,0x8C79,0x8CA1,0x8CA2,0x8D77, -0x8EAC,0x8ED2,0x8ED4,0x8ECF,0x8FB1,0x9001,0x9006,0x8FF7, -0x9000,0x8FFA,0x8FF4,0x9003,0x8FFD,0x9005,0x8FF8,0x9095, -0x90E1,0x90DD,0x90E2,0x9152,0x914D,0x914C,0x91D8,0x91DD, -0x91D7,0x91DC,0x91D9,0x9583,0x9662,0x9663,0x9661, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x965B,0x965D,0x9664,0x9658,0x965E,0x96BB,0x98E2, -0x99AC,0x9AA8,0x9AD8,0x9B25,0x9B32,0x9B3C,0x4E7E,0x507A, -0x507D,0x505C,0x5047,0x5043,0x504C,0x505A,0x5049,0x5065, -0x5076,0x504E,0x5055,0x5075,0x5074,0x5077,0x504F,0x500F, -0x506F,0x506D,0x515C,0x5195,0x51F0,0x526A,0x526F,0x52D2, -0x52D9,0x52D8,0x52D5,0x5310,0x530F,0x5319,0x533F,0x5340, -0x533E,0x53C3,0x66FC,0x5546,0x556A,0x5566,0x5544,0x555E, -0x5561,0x5543,0x554A,0x5531,0x5556,0x554F,0x5555,0x552F, -0x5564,0x5538,0x552E,0x555C,0x552C,0x5563,0x5533,0x5541, -0x5557,0x5708,0x570B,0x5709,0x57DF,0x5805,0x580A,0x5806, -0x57E0,0x57E4,0x57FA,0x5802,0x5835,0x57F7,0x57F9,0x5920, -0x5962,0x5A36,0x5A41,0x5A49,0x5A66,0x5A6A,0x5A40, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5A3C,0x5A62,0x5A5A,0x5A46,0x5A4A,0x5B70,0x5BC7,0x5BC5, -0x5BC4,0x5BC2,0x5BBF,0x5BC6,0x5C09,0x5C08,0x5C07,0x5C60, -0x5C5C,0x5C5D,0x5D07,0x5D06,0x5D0E,0x5D1B,0x5D16,0x5D22, -0x5D11,0x5D29,0x5D14,0x5D19,0x5D24,0x5D27,0x5D17,0x5DE2, -0x5E38,0x5E36,0x5E33,0x5E37,0x5EB7,0x5EB8,0x5EB6,0x5EB5, -0x5EBE,0x5F35,0x5F37,0x5F57,0x5F6C,0x5F69,0x5F6B,0x5F97, -0x5F99,0x5F9E,0x5F98,0x5FA1,0x5FA0,0x5F9C,0x607F,0x60A3, -0x6089,0x60A0,0x60A8,0x60CB,0x60B4,0x60E6,0x60BD, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x60C5,0x60BB,0x60B5,0x60DC,0x60BC,0x60D8,0x60D5, -0x60C6,0x60DF,0x60B8,0x60DA,0x60C7,0x621A,0x621B,0x6248, -0x63A0,0x63A7,0x6372,0x6396,0x63A2,0x63A5,0x6377,0x6367, -0x6398,0x63AA,0x6371,0x63A9,0x6389,0x6383,0x639B,0x636B, -0x63A8,0x6384,0x6388,0x6399,0x63A1,0x63AC,0x6392,0x638F, -0x6380,0x637B,0x6369,0x6368,0x637A,0x655D,0x6556,0x6551, -0x6559,0x6557,0x555F,0x654F,0x6558,0x6555,0x6554,0x659C, -0x659B,0x65AC,0x65CF,0x65CB,0x65CC,0x65CE,0x665D,0x665A, -0x6664,0x6668,0x6666,0x665E,0x66F9,0x52D7,0x671B,0x6881, -0x68AF,0x68A2,0x6893,0x68B5,0x687F,0x6876,0x68B1,0x68A7, -0x6897,0x68B0,0x6883,0x68C4,0x68AD,0x6886,0x6885,0x6894, -0x689D,0x68A8,0x689F,0x68A1,0x6882,0x6B32,0x6BBA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6BEB,0x6BEC,0x6C2B,0x6D8E,0x6DBC,0x6DF3,0x6DD9,0x6DB2, -0x6DE1,0x6DCC,0x6DE4,0x6DFB,0x6DFA,0x6E05,0x6DC7,0x6DCB, -0x6DAF,0x6DD1,0x6DAE,0x6DDE,0x6DF9,0x6DB8,0x6DF7,0x6DF5, -0x6DC5,0x6DD2,0x6E1A,0x6DB5,0x6DDA,0x6DEB,0x6DD8,0x6DEA, -0x6DF1,0x6DEE,0x6DE8,0x6DC6,0x6DC4,0x6DAA,0x6DEC,0x6DBF, -0x6DE6,0x70F9,0x7109,0x710A,0x70FD,0x70EF,0x723D,0x727D, -0x7281,0x731C,0x731B,0x7316,0x7313,0x7319,0x7387,0x7405, -0x740A,0x7403,0x7406,0x73FE,0x740D,0x74E0,0x74F6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x74F7,0x751C,0x7522,0x7565,0x7566,0x7562,0x7570, -0x758F,0x75D4,0x75D5,0x75B5,0x75CA,0x75CD,0x768E,0x76D4, -0x76D2,0x76DB,0x7737,0x773E,0x773C,0x7736,0x7738,0x773A, -0x786B,0x7843,0x784E,0x7965,0x7968,0x796D,0x79FB,0x7A92, -0x7A95,0x7B20,0x7B28,0x7B1B,0x7B2C,0x7B26,0x7B19,0x7B1E, -0x7B2E,0x7C92,0x7C97,0x7C95,0x7D46,0x7D43,0x7D71,0x7D2E, -0x7D39,0x7D3C,0x7D40,0x7D30,0x7D33,0x7D44,0x7D2F,0x7D42, -0x7D32,0x7D31,0x7F3D,0x7F9E,0x7F9A,0x7FCC,0x7FCE,0x7FD2, -0x801C,0x804A,0x8046,0x812F,0x8116,0x8123,0x812B,0x8129, -0x8130,0x8124,0x8202,0x8235,0x8237,0x8236,0x8239,0x838E, -0x839E,0x8398,0x8378,0x83A2,0x8396,0x83BD,0x83AB,0x8392, -0x838A,0x8393,0x8389,0x83A0,0x8377,0x837B,0x837C, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8386,0x83A7,0x8655,0x5F6A,0x86C7,0x86C0,0x86B6,0x86C4, -0x86B5,0x86C6,0x86CB,0x86B1,0x86AF,0x86C9,0x8853,0x889E, -0x8888,0x88AB,0x8892,0x8896,0x888D,0x888B,0x8993,0x898F, -0x8A2A,0x8A1D,0x8A23,0x8A25,0x8A31,0x8A2D,0x8A1F,0x8A1B, -0x8A22,0x8C49,0x8C5A,0x8CA9,0x8CAC,0x8CAB,0x8CA8,0x8CAA, -0x8CA7,0x8D67,0x8D66,0x8DBE,0x8DBA,0x8EDB,0x8EDF,0x9019, -0x900D,0x901A,0x9017,0x9023,0x901F,0x901D,0x9010,0x9015, -0x901E,0x9020,0x900F,0x9022,0x9016,0x901B,0x9014, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x90E8,0x90ED,0x90FD,0x9157,0x91CE,0x91F5,0x91E6, -0x91E3,0x91E7,0x91ED,0x91E9,0x9589,0x966A,0x9675,0x9673, -0x9678,0x9670,0x9674,0x9676,0x9677,0x966C,0x96C0,0x96EA, -0x96E9,0x7AE0,0x7ADF,0x9802,0x9803,0x9B5A,0x9CE5,0x9E75, -0x9E7F,0x9EA5,0x9EBB,0x50A2,0x508D,0x5085,0x5099,0x5091, -0x5080,0x5096,0x5098,0x509A,0x6700,0x51F1,0x5272,0x5274, -0x5275,0x5269,0x52DE,0x52DD,0x52DB,0x535A,0x53A5,0x557B, -0x5580,0x55A7,0x557C,0x558A,0x559D,0x5598,0x5582,0x559C, -0x55AA,0x5594,0x5587,0x558B,0x5583,0x55B3,0x55AE,0x559F, -0x553E,0x55B2,0x559A,0x55BB,0x55AC,0x55B1,0x557E,0x5589, -0x55AB,0x5599,0x570D,0x582F,0x582A,0x5834,0x5824,0x5830, -0x5831,0x5821,0x581D,0x5820,0x58F9,0x58FA,0x5960, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5A77,0x5A9A,0x5A7F,0x5A92,0x5A9B,0x5AA7,0x5B73,0x5B71, -0x5BD2,0x5BCC,0x5BD3,0x5BD0,0x5C0A,0x5C0B,0x5C31,0x5D4C, -0x5D50,0x5D34,0x5D47,0x5DFD,0x5E45,0x5E3D,0x5E40,0x5E43, -0x5E7E,0x5ECA,0x5EC1,0x5EC2,0x5EC4,0x5F3C,0x5F6D,0x5FA9, -0x5FAA,0x5FA8,0x60D1,0x60E1,0x60B2,0x60B6,0x60E0,0x611C, -0x6123,0x60FA,0x6115,0x60F0,0x60FB,0x60F4,0x6168,0x60F1, -0x610E,0x60F6,0x6109,0x6100,0x6112,0x621F,0x6249,0x63A3, -0x638C,0x63CF,0x63C0,0x63E9,0x63C9,0x63C6,0x63CD, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x63D2,0x63E3,0x63D0,0x63E1,0x63D6,0x63ED,0x63EE, -0x6376,0x63F4,0x63EA,0x63DB,0x6452,0x63DA,0x63F9,0x655E, -0x6566,0x6562,0x6563,0x6591,0x6590,0x65AF,0x666E,0x6670, -0x6674,0x6676,0x666F,0x6691,0x667A,0x667E,0x6677,0x66FE, -0x66FF,0x671F,0x671D,0x68FA,0x68D5,0x68E0,0x68D8,0x68D7, -0x6905,0x68DF,0x68F5,0x68EE,0x68E7,0x68F9,0x68D2,0x68F2, -0x68E3,0x68CB,0x68CD,0x690D,0x6912,0x690E,0x68C9,0x68DA, -0x696E,0x68FB,0x6B3E,0x6B3A,0x6B3D,0x6B98,0x6B96,0x6BBC, -0x6BEF,0x6C2E,0x6C2F,0x6C2C,0x6E2F,0x6E38,0x6E54,0x6E21, -0x6E32,0x6E67,0x6E4A,0x6E20,0x6E25,0x6E23,0x6E1B,0x6E5B, -0x6E58,0x6E24,0x6E56,0x6E6E,0x6E2D,0x6E26,0x6E6F,0x6E34, -0x6E4D,0x6E3A,0x6E2C,0x6E43,0x6E1D,0x6E3E,0x6ECB, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6E89,0x6E19,0x6E4E,0x6E63,0x6E44,0x6E72,0x6E69,0x6E5F, -0x7119,0x711A,0x7126,0x7130,0x7121,0x7136,0x716E,0x711C, -0x724C,0x7284,0x7280,0x7336,0x7325,0x7334,0x7329,0x743A, -0x742A,0x7433,0x7422,0x7425,0x7435,0x7436,0x7434,0x742F, -0x741B,0x7426,0x7428,0x7525,0x7526,0x756B,0x756A,0x75E2, -0x75DB,0x75E3,0x75D9,0x75D8,0x75DE,0x75E0,0x767B,0x767C, -0x7696,0x7693,0x76B4,0x76DC,0x774F,0x77ED,0x785D,0x786C, -0x786F,0x7A0D,0x7A08,0x7A0B,0x7A05,0x7A00,0x7A98, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7A97,0x7A96,0x7AE5,0x7AE3,0x7B49,0x7B56,0x7B46, -0x7B50,0x7B52,0x7B54,0x7B4D,0x7B4B,0x7B4F,0x7B51,0x7C9F, -0x7CA5,0x7D5E,0x7D50,0x7D68,0x7D55,0x7D2B,0x7D6E,0x7D72, -0x7D61,0x7D66,0x7D62,0x7D70,0x7D73,0x5584,0x7FD4,0x7FD5, -0x800B,0x8052,0x8085,0x8155,0x8154,0x814B,0x8151,0x814E, -0x8139,0x8146,0x813E,0x814C,0x8153,0x8174,0x8212,0x821C, -0x83E9,0x8403,0x83F8,0x840D,0x83E0,0x83C5,0x840B,0x83C1, -0x83EF,0x83F1,0x83F4,0x8457,0x840A,0x83F0,0x840C,0x83CC, -0x83FD,0x83F2,0x83CA,0x8438,0x840E,0x8404,0x83DC,0x8407, -0x83D4,0x83DF,0x865B,0x86DF,0x86D9,0x86ED,0x86D4,0x86DB, -0x86E4,0x86D0,0x86DE,0x8857,0x88C1,0x88C2,0x88B1,0x8983, -0x8996,0x8A3B,0x8A60,0x8A55,0x8A5E,0x8A3C,0x8A41, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8A54,0x8A5B,0x8A50,0x8A46,0x8A34,0x8A3A,0x8A36,0x8A56, -0x8C61,0x8C82,0x8CAF,0x8CBC,0x8CB3,0x8CBD,0x8CC1,0x8CBB, -0x8CC0,0x8CB4,0x8CB7,0x8CB6,0x8CBF,0x8CB8,0x8D8A,0x8D85, -0x8D81,0x8DCE,0x8DDD,0x8DCB,0x8DDA,0x8DD1,0x8DCC,0x8DDB, -0x8DC6,0x8EFB,0x8EF8,0x8EFC,0x8F9C,0x902E,0x9035,0x9031, -0x9038,0x9032,0x9036,0x9102,0x90F5,0x9109,0x90FE,0x9163, -0x9165,0x91CF,0x9214,0x9215,0x9223,0x9209,0x921E,0x920D, -0x9210,0x9207,0x9211,0x9594,0x958F,0x958B,0x9591, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x9593,0x9592,0x958E,0x968A,0x968E,0x968B,0x967D, -0x9685,0x9686,0x968D,0x9672,0x9684,0x96C1,0x96C5,0x96C4, -0x96C6,0x96C7,0x96EF,0x96F2,0x97CC,0x9805,0x9806,0x9808, -0x98E7,0x98EA,0x98EF,0x98E9,0x98F2,0x98ED,0x99AE,0x99AD, -0x9EC3,0x9ECD,0x9ED1,0x4E82,0x50AD,0x50B5,0x50B2,0x50B3, -0x50C5,0x50BE,0x50AC,0x50B7,0x50BB,0x50AF,0x50C7,0x527F, -0x5277,0x527D,0x52DF,0x52E6,0x52E4,0x52E2,0x52E3,0x532F, -0x55DF,0x55E8,0x55D3,0x55E6,0x55CE,0x55DC,0x55C7,0x55D1, -0x55E3,0x55E4,0x55EF,0x55DA,0x55E1,0x55C5,0x55C6,0x55E5, -0x55C9,0x5712,0x5713,0x585E,0x5851,0x5858,0x5857,0x585A, -0x5854,0x586B,0x584C,0x586D,0x584A,0x5862,0x5852,0x584B, -0x5967,0x5AC1,0x5AC9,0x5ACC,0x5ABE,0x5ABD,0x5ABC, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5AB3,0x5AC2,0x5AB2,0x5D69,0x5D6F,0x5E4C,0x5E79,0x5EC9, -0x5EC8,0x5F12,0x5F59,0x5FAC,0x5FAE,0x611A,0x610F,0x6148, -0x611F,0x60F3,0x611B,0x60F9,0x6101,0x6108,0x614E,0x614C, -0x6144,0x614D,0x613E,0x6134,0x6127,0x610D,0x6106,0x6137, -0x6221,0x6222,0x6413,0x643E,0x641E,0x642A,0x642D,0x643D, -0x642C,0x640F,0x641C,0x6414,0x640D,0x6436,0x6416,0x6417, -0x6406,0x656C,0x659F,0x65B0,0x6697,0x6689,0x6687,0x6688, -0x6696,0x6684,0x6698,0x668D,0x6703,0x6994,0x696D, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x695A,0x6977,0x6960,0x6954,0x6975,0x6930,0x6982, -0x694A,0x6968,0x696B,0x695E,0x6953,0x6979,0x6986,0x695D, -0x6963,0x695B,0x6B47,0x6B72,0x6BC0,0x6BBF,0x6BD3,0x6BFD, -0x6EA2,0x6EAF,0x6ED3,0x6EB6,0x6EC2,0x6E90,0x6E9D,0x6EC7, -0x6EC5,0x6EA5,0x6E98,0x6EBC,0x6EBA,0x6EAB,0x6ED1,0x6E96, -0x6E9C,0x6EC4,0x6ED4,0x6EAA,0x6EA7,0x6EB4,0x714E,0x7159, -0x7169,0x7164,0x7149,0x7167,0x715C,0x716C,0x7166,0x714C, -0x7165,0x715E,0x7146,0x7168,0x7156,0x723A,0x7252,0x7337, -0x7345,0x733F,0x733E,0x746F,0x745A,0x7455,0x745F,0x745E, -0x7441,0x743F,0x7459,0x745B,0x745C,0x7576,0x7578,0x7600, -0x75F0,0x7601,0x75F2,0x75F1,0x75FA,0x75FF,0x75F4,0x75F3, -0x76DE,0x76DF,0x775B,0x776B,0x7766,0x775E,0x7763, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7779,0x776A,0x776C,0x775C,0x7765,0x7768,0x7762,0x77EE, -0x788E,0x78B0,0x7897,0x7898,0x788C,0x7889,0x787C,0x7891, -0x7893,0x787F,0x797A,0x797F,0x7981,0x842C,0x79BD,0x7A1C, -0x7A1A,0x7A20,0x7A14,0x7A1F,0x7A1E,0x7A9F,0x7AA0,0x7B77, -0x7BC0,0x7B60,0x7B6E,0x7B67,0x7CB1,0x7CB3,0x7CB5,0x7D93, -0x7D79,0x7D91,0x7D81,0x7D8F,0x7D5B,0x7F6E,0x7F69,0x7F6A, -0x7F72,0x7FA9,0x7FA8,0x7FA4,0x8056,0x8058,0x8086,0x8084, -0x8171,0x8170,0x8178,0x8165,0x816E,0x8173,0x816B, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x8179,0x817A,0x8166,0x8205,0x8247,0x8482,0x8477, -0x843D,0x8431,0x8475,0x8466,0x846B,0x8449,0x846C,0x845B, -0x843C,0x8435,0x8461,0x8463,0x8469,0x846D,0x8446,0x865E, -0x865C,0x865F,0x86F9,0x8713,0x8708,0x8707,0x8700,0x86FE, -0x86FB,0x8702,0x8703,0x8706,0x870A,0x8859,0x88DF,0x88D4, -0x88D9,0x88DC,0x88D8,0x88DD,0x88E1,0x88CA,0x88D5,0x88D2, -0x899C,0x89E3,0x8A6B,0x8A72,0x8A73,0x8A66,0x8A69,0x8A70, -0x8A87,0x8A7C,0x8A63,0x8AA0,0x8A71,0x8A85,0x8A6D,0x8A62, -0x8A6E,0x8A6C,0x8A79,0x8A7B,0x8A3E,0x8A68,0x8C62,0x8C8A, -0x8C89,0x8CCA,0x8CC7,0x8CC8,0x8CC4,0x8CB2,0x8CC3,0x8CC2, -0x8CC5,0x8DE1,0x8DDF,0x8DE8,0x8DEF,0x8DF3,0x8DFA,0x8DEA, -0x8DE4,0x8DE6,0x8EB2,0x8F03,0x8F09,0x8EFE,0x8F0A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8F9F,0x8FB2,0x904B,0x904A,0x9053,0x9042,0x9054,0x903C, -0x9055,0x9050,0x9047,0x904F,0x904E,0x904D,0x9051,0x903E, -0x9041,0x9112,0x9117,0x916C,0x916A,0x9169,0x91C9,0x9237, -0x9257,0x9238,0x923D,0x9240,0x923E,0x925B,0x924B,0x9264, -0x9251,0x9234,0x9249,0x924D,0x9245,0x9239,0x923F,0x925A, -0x9598,0x9698,0x9694,0x9695,0x96CD,0x96CB,0x96C9,0x96CA, -0x96F7,0x96FB,0x96F9,0x96F6,0x9756,0x9774,0x9776,0x9810, -0x9811,0x9813,0x980A,0x9812,0x980C,0x98FC,0x98F4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x98FD,0x98FE,0x99B3,0x99B1,0x99B4,0x9AE1,0x9CE9, -0x9E82,0x9F0E,0x9F13,0x9F20,0x50E7,0x50EE,0x50E5,0x50D6, -0x50ED,0x50DA,0x50D5,0x50CF,0x50D1,0x50F1,0x50CE,0x50E9, -0x5162,0x51F3,0x5283,0x5282,0x5331,0x53AD,0x55FE,0x5600, -0x561B,0x5617,0x55FD,0x5614,0x5606,0x5609,0x560D,0x560E, -0x55F7,0x5616,0x561F,0x5608,0x5610,0x55F6,0x5718,0x5716, -0x5875,0x587E,0x5883,0x5893,0x588A,0x5879,0x5885,0x587D, -0x58FD,0x5925,0x5922,0x5924,0x596A,0x5969,0x5AE1,0x5AE6, -0x5AE9,0x5AD7,0x5AD6,0x5AD8,0x5AE3,0x5B75,0x5BDE,0x5BE7, -0x5BE1,0x5BE5,0x5BE6,0x5BE8,0x5BE2,0x5BE4,0x5BDF,0x5C0D, -0x5C62,0x5D84,0x5D87,0x5E5B,0x5E63,0x5E55,0x5E57,0x5E54, -0x5ED3,0x5ED6,0x5F0A,0x5F46,0x5F70,0x5FB9,0x6147, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x613F,0x614B,0x6177,0x6162,0x6163,0x615F,0x615A,0x6158, -0x6175,0x622A,0x6487,0x6458,0x6454,0x64A4,0x6478,0x645F, -0x647A,0x6451,0x6467,0x6434,0x646D,0x647B,0x6572,0x65A1, -0x65D7,0x65D6,0x66A2,0x66A8,0x669D,0x699C,0x69A8,0x6995, -0x69C1,0x69AE,0x69D3,0x69CB,0x699B,0x69B7,0x69BB,0x69AB, -0x69B4,0x69D0,0x69CD,0x69AD,0x69CC,0x69A6,0x69C3,0x69A3, -0x6B49,0x6B4C,0x6C33,0x6F33,0x6F14,0x6EFE,0x6F13,0x6EF4, -0x6F29,0x6F3E,0x6F20,0x6F2C,0x6F0F,0x6F02,0x6F22, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6EFF,0x6EEF,0x6F06,0x6F31,0x6F38,0x6F32,0x6F23, -0x6F15,0x6F2B,0x6F2F,0x6F88,0x6F2A,0x6EEC,0x6F01,0x6EF2, -0x6ECC,0x6EF7,0x7194,0x7199,0x717D,0x718A,0x7184,0x7192, -0x723E,0x7292,0x7296,0x7344,0x7350,0x7464,0x7463,0x746A, -0x7470,0x746D,0x7504,0x7591,0x7627,0x760D,0x760B,0x7609, -0x7613,0x76E1,0x76E3,0x7784,0x777D,0x777F,0x7761,0x78C1, -0x789F,0x78A7,0x78B3,0x78A9,0x78A3,0x798E,0x798F,0x798D, -0x7A2E,0x7A31,0x7AAA,0x7AA9,0x7AED,0x7AEF,0x7BA1,0x7B95, -0x7B8B,0x7B75,0x7B97,0x7B9D,0x7B94,0x7B8F,0x7BB8,0x7B87, -0x7B84,0x7CB9,0x7CBD,0x7CBE,0x7DBB,0x7DB0,0x7D9C,0x7DBD, -0x7DBE,0x7DA0,0x7DCA,0x7DB4,0x7DB2,0x7DB1,0x7DBA,0x7DA2, -0x7DBF,0x7DB5,0x7DB8,0x7DAD,0x7DD2,0x7DC7,0x7DAC, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7F70,0x7FE0,0x7FE1,0x7FDF,0x805E,0x805A,0x8087,0x8150, -0x8180,0x818F,0x8188,0x818A,0x817F,0x8182,0x81E7,0x81FA, -0x8207,0x8214,0x821E,0x824B,0x84C9,0x84BF,0x84C6,0x84C4, -0x8499,0x849E,0x84B2,0x849C,0x84CB,0x84B8,0x84C0,0x84D3, -0x8490,0x84BC,0x84D1,0x84CA,0x873F,0x871C,0x873B,0x8722, -0x8725,0x8734,0x8718,0x8755,0x8737,0x8729,0x88F3,0x8902, -0x88F4,0x88F9,0x88F8,0x88FD,0x88E8,0x891A,0x88EF,0x8AA6, -0x8A8C,0x8A9E,0x8AA3,0x8A8D,0x8AA1,0x8A93,0x8AA4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x8AAA,0x8AA5,0x8AA8,0x8A98,0x8A91,0x8A9A,0x8AA7, -0x8C6A,0x8C8D,0x8C8C,0x8CD3,0x8CD1,0x8CD2,0x8D6B,0x8D99, -0x8D95,0x8DFC,0x8F14,0x8F12,0x8F15,0x8F13,0x8FA3,0x9060, -0x9058,0x905C,0x9063,0x9059,0x905E,0x9062,0x905D,0x905B, -0x9119,0x9118,0x911E,0x9175,0x9178,0x9177,0x9174,0x9278, -0x9280,0x9285,0x9298,0x9296,0x927B,0x9293,0x929C,0x92A8, -0x927C,0x9291,0x95A1,0x95A8,0x95A9,0x95A3,0x95A5,0x95A4, -0x9699,0x969C,0x969B,0x96CC,0x96D2,0x9700,0x977C,0x9785, -0x97F6,0x9817,0x9818,0x98AF,0x98B1,0x9903,0x9905,0x990C, -0x9909,0x99C1,0x9AAF,0x9AB0,0x9AE6,0x9B41,0x9B42,0x9CF4, -0x9CF6,0x9CF3,0x9EBC,0x9F3B,0x9F4A,0x5104,0x5100,0x50FB, -0x50F5,0x50F9,0x5102,0x5108,0x5109,0x5105,0x51DC, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5287,0x5288,0x5289,0x528D,0x528A,0x52F0,0x53B2,0x562E, -0x563B,0x5639,0x5632,0x563F,0x5634,0x5629,0x5653,0x564E, -0x5657,0x5674,0x5636,0x562F,0x5630,0x5880,0x589F,0x589E, -0x58B3,0x589C,0x58AE,0x58A9,0x58A6,0x596D,0x5B09,0x5AFB, -0x5B0B,0x5AF5,0x5B0C,0x5B08,0x5BEE,0x5BEC,0x5BE9,0x5BEB, -0x5C64,0x5C65,0x5D9D,0x5D94,0x5E62,0x5E5F,0x5E61,0x5EE2, -0x5EDA,0x5EDF,0x5EDD,0x5EE3,0x5EE0,0x5F48,0x5F71,0x5FB7, -0x5FB5,0x6176,0x6167,0x616E,0x615D,0x6155,0x6182, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x617C,0x6170,0x616B,0x617E,0x61A7,0x6190,0x61AB, -0x618E,0x61AC,0x619A,0x61A4,0x6194,0x61AE,0x622E,0x6469, -0x646F,0x6479,0x649E,0x64B2,0x6488,0x6490,0x64B0,0x64A5, -0x6493,0x6495,0x64A9,0x6492,0x64AE,0x64AD,0x64AB,0x649A, -0x64AC,0x6499,0x64A2,0x64B3,0x6575,0x6577,0x6578,0x66AE, -0x66AB,0x66B4,0x66B1,0x6A23,0x6A1F,0x69E8,0x6A01,0x6A1E, -0x6A19,0x69FD,0x6A21,0x6A13,0x6A0A,0x69F3,0x6A02,0x6A05, -0x69ED,0x6A11,0x6B50,0x6B4E,0x6BA4,0x6BC5,0x6BC6,0x6F3F, -0x6F7C,0x6F84,0x6F51,0x6F66,0x6F54,0x6F86,0x6F6D,0x6F5B, -0x6F78,0x6F6E,0x6F8E,0x6F7A,0x6F70,0x6F64,0x6F97,0x6F58, -0x6ED5,0x6F6F,0x6F60,0x6F5F,0x719F,0x71AC,0x71B1,0x71A8, -0x7256,0x729B,0x734E,0x7357,0x7469,0x748B,0x7483, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x747E,0x7480,0x757F,0x7620,0x7629,0x761F,0x7624,0x7626, -0x7621,0x7622,0x769A,0x76BA,0x76E4,0x778E,0x7787,0x778C, -0x7791,0x778B,0x78CB,0x78C5,0x78BA,0x78CA,0x78BE,0x78D5, -0x78BC,0x78D0,0x7A3F,0x7A3C,0x7A40,0x7A3D,0x7A37,0x7A3B, -0x7AAF,0x7AAE,0x7BAD,0x7BB1,0x7BC4,0x7BB4,0x7BC6,0x7BC7, -0x7BC1,0x7BA0,0x7BCC,0x7CCA,0x7DE0,0x7DF4,0x7DEF,0x7DFB, -0x7DD8,0x7DEC,0x7DDD,0x7DE8,0x7DE3,0x7DDA,0x7DDE,0x7DE9, -0x7D9E,0x7DD9,0x7DF2,0x7DF9,0x7F75,0x7F77,0x7FAF, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7FE9,0x8026,0x819B,0x819C,0x819D,0x81A0,0x819A, -0x8198,0x8517,0x853D,0x851A,0x84EE,0x852C,0x852D,0x8513, -0x8511,0x8523,0x8521,0x8514,0x84EC,0x8525,0x84FF,0x8506, -0x8782,0x8774,0x8776,0x8760,0x8766,0x8778,0x8768,0x8759, -0x8757,0x874C,0x8753,0x885B,0x885D,0x8910,0x8907,0x8912, -0x8913,0x8915,0x890A,0x8ABC,0x8AD2,0x8AC7,0x8AC4,0x8A95, -0x8ACB,0x8AF8,0x8AB2,0x8AC9,0x8AC2,0x8ABF,0x8AB0,0x8AD6, -0x8ACD,0x8AB6,0x8AB9,0x8ADB,0x8C4C,0x8C4E,0x8C6C,0x8CE0, -0x8CDE,0x8CE6,0x8CE4,0x8CEC,0x8CED,0x8CE2,0x8CE3,0x8CDC, -0x8CEA,0x8CE1,0x8D6D,0x8D9F,0x8DA3,0x8E2B,0x8E10,0x8E1D, -0x8E22,0x8E0F,0x8E29,0x8E1F,0x8E21,0x8E1E,0x8EBA,0x8F1D, -0x8F1B,0x8F1F,0x8F29,0x8F26,0x8F2A,0x8F1C,0x8F1E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8F25,0x9069,0x906E,0x9068,0x906D,0x9077,0x9130,0x912D, -0x9127,0x9131,0x9187,0x9189,0x918B,0x9183,0x92C5,0x92BB, -0x92B7,0x92EA,0x92AC,0x92E4,0x92C1,0x92B3,0x92BC,0x92D2, -0x92C7,0x92F0,0x92B2,0x95AD,0x95B1,0x9704,0x9706,0x9707, -0x9709,0x9760,0x978D,0x978B,0x978F,0x9821,0x982B,0x981C, -0x98B3,0x990A,0x9913,0x9912,0x9918,0x99DD,0x99D0,0x99DF, -0x99DB,0x99D1,0x99D5,0x99D2,0x99D9,0x9AB7,0x9AEE,0x9AEF, -0x9B27,0x9B45,0x9B44,0x9B77,0x9B6F,0x9D06,0x9D09, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x9D03,0x9EA9,0x9EBE,0x9ECE,0x58A8,0x9F52,0x5112, -0x5118,0x5114,0x5110,0x5115,0x5180,0x51AA,0x51DD,0x5291, -0x5293,0x52F3,0x5659,0x566B,0x5679,0x5669,0x5664,0x5678, -0x566A,0x5668,0x5665,0x5671,0x566F,0x566C,0x5662,0x5676, -0x58C1,0x58BE,0x58C7,0x58C5,0x596E,0x5B1D,0x5B34,0x5B78, -0x5BF0,0x5C0E,0x5F4A,0x61B2,0x6191,0x61A9,0x618A,0x61CD, -0x61B6,0x61BE,0x61CA,0x61C8,0x6230,0x64C5,0x64C1,0x64CB, -0x64BB,0x64BC,0x64DA,0x64C4,0x64C7,0x64C2,0x64CD,0x64BF, -0x64D2,0x64D4,0x64BE,0x6574,0x66C6,0x66C9,0x66B9,0x66C4, -0x66C7,0x66B8,0x6A3D,0x6A38,0x6A3A,0x6A59,0x6A6B,0x6A58, -0x6A39,0x6A44,0x6A62,0x6A61,0x6A4B,0x6A47,0x6A35,0x6A5F, -0x6A48,0x6B59,0x6B77,0x6C05,0x6FC2,0x6FB1,0x6FA1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6FC3,0x6FA4,0x6FC1,0x6FA7,0x6FB3,0x6FC0,0x6FB9,0x6FB6, -0x6FA6,0x6FA0,0x6FB4,0x71BE,0x71C9,0x71D0,0x71D2,0x71C8, -0x71D5,0x71B9,0x71CE,0x71D9,0x71DC,0x71C3,0x71C4,0x7368, -0x749C,0x74A3,0x7498,0x749F,0x749E,0x74E2,0x750C,0x750D, -0x7634,0x7638,0x763A,0x76E7,0x76E5,0x77A0,0x779E,0x779F, -0x77A5,0x78E8,0x78DA,0x78EC,0x78E7,0x79A6,0x7A4D,0x7A4E, -0x7A46,0x7A4C,0x7A4B,0x7ABA,0x7BD9,0x7C11,0x7BC9,0x7BE4, -0x7BDB,0x7BE1,0x7BE9,0x7BE6,0x7CD5,0x7CD6,0x7E0A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7E11,0x7E08,0x7E1B,0x7E23,0x7E1E,0x7E1D,0x7E09, -0x7E10,0x7F79,0x7FB2,0x7FF0,0x7FF1,0x7FEE,0x8028,0x81B3, -0x81A9,0x81A8,0x81FB,0x8208,0x8258,0x8259,0x854A,0x8559, -0x8548,0x8568,0x8569,0x8543,0x8549,0x856D,0x856A,0x855E, -0x8783,0x879F,0x879E,0x87A2,0x878D,0x8861,0x892A,0x8932, -0x8925,0x892B,0x8921,0x89AA,0x89A6,0x8AE6,0x8AFA,0x8AEB, -0x8AF1,0x8B00,0x8ADC,0x8AE7,0x8AEE,0x8AFE,0x8B01,0x8B02, -0x8AF7,0x8AED,0x8AF3,0x8AF6,0x8AFC,0x8C6B,0x8C6D,0x8C93, -0x8CF4,0x8E44,0x8E31,0x8E34,0x8E42,0x8E39,0x8E35,0x8F3B, -0x8F2F,0x8F38,0x8F33,0x8FA8,0x8FA6,0x9075,0x9074,0x9078, -0x9072,0x907C,0x907A,0x9134,0x9192,0x9320,0x9336,0x92F8, -0x9333,0x932F,0x9322,0x92FC,0x932B,0x9304,0x931A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9310,0x9326,0x9321,0x9315,0x932E,0x9319,0x95BB,0x96A7, -0x96A8,0x96AA,0x96D5,0x970E,0x9711,0x9716,0x970D,0x9713, -0x970F,0x975B,0x975C,0x9766,0x9798,0x9830,0x9838,0x983B, -0x9837,0x982D,0x9839,0x9824,0x9910,0x9928,0x991E,0x991B, -0x9921,0x991A,0x99ED,0x99E2,0x99F1,0x9AB8,0x9ABC,0x9AFB, -0x9AED,0x9B28,0x9B91,0x9D15,0x9D23,0x9D26,0x9D28,0x9D12, -0x9D1B,0x9ED8,0x9ED4,0x9F8D,0x9F9C,0x512A,0x511F,0x5121, -0x5132,0x52F5,0x568E,0x5680,0x5690,0x5685,0x5687, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x568F,0x58D5,0x58D3,0x58D1,0x58CE,0x5B30,0x5B2A, -0x5B24,0x5B7A,0x5C37,0x5C68,0x5DBC,0x5DBA,0x5DBD,0x5DB8, -0x5E6B,0x5F4C,0x5FBD,0x61C9,0x61C2,0x61C7,0x61E6,0x61CB, -0x6232,0x6234,0x64CE,0x64CA,0x64D8,0x64E0,0x64F0,0x64E6, -0x64EC,0x64F1,0x64E2,0x64ED,0x6582,0x6583,0x66D9,0x66D6, -0x6A80,0x6A94,0x6A84,0x6AA2,0x6A9C,0x6ADB,0x6AA3,0x6A7E, -0x6A97,0x6A90,0x6AA0,0x6B5C,0x6BAE,0x6BDA,0x6C08,0x6FD8, -0x6FF1,0x6FDF,0x6FE0,0x6FDB,0x6FE4,0x6FEB,0x6FEF,0x6F80, -0x6FEC,0x6FE1,0x6FE9,0x6FD5,0x6FEE,0x6FF0,0x71E7,0x71DF, -0x71EE,0x71E6,0x71E5,0x71ED,0x71EC,0x71F4,0x71E0,0x7235, -0x7246,0x7370,0x7372,0x74A9,0x74B0,0x74A6,0x74A8,0x7646, -0x7642,0x764C,0x76EA,0x77B3,0x77AA,0x77B0,0x77AC, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x77A7,0x77AD,0x77EF,0x78F7,0x78FA,0x78F4,0x78EF,0x7901, -0x79A7,0x79AA,0x7A57,0x7ABF,0x7C07,0x7C0D,0x7BFE,0x7BF7, -0x7C0C,0x7BE0,0x7CE0,0x7CDC,0x7CDE,0x7CE2,0x7CDF,0x7CD9, -0x7CDD,0x7E2E,0x7E3E,0x7E46,0x7E37,0x7E32,0x7E43,0x7E2B, -0x7E3D,0x7E31,0x7E45,0x7E41,0x7E34,0x7E39,0x7E48,0x7E35, -0x7E3F,0x7E2F,0x7F44,0x7FF3,0x7FFC,0x8071,0x8072,0x8070, -0x806F,0x8073,0x81C6,0x81C3,0x81BA,0x81C2,0x81C0,0x81BF, -0x81BD,0x81C9,0x81BE,0x81E8,0x8209,0x8271,0x85AA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x8584,0x857E,0x859C,0x8591,0x8594,0x85AF,0x859B, -0x8587,0x85A8,0x858A,0x8667,0x87C0,0x87D1,0x87B3,0x87D2, -0x87C6,0x87AB,0x87BB,0x87BA,0x87C8,0x87CB,0x893B,0x8936, -0x8944,0x8938,0x893D,0x89AC,0x8B0E,0x8B17,0x8B19,0x8B1B, -0x8B0A,0x8B20,0x8B1D,0x8B04,0x8B10,0x8C41,0x8C3F,0x8C73, -0x8CFA,0x8CFD,0x8CFC,0x8CF8,0x8CFB,0x8DA8,0x8E49,0x8E4B, -0x8E48,0x8E4A,0x8F44,0x8F3E,0x8F42,0x8F45,0x8F3F,0x907F, -0x907D,0x9084,0x9081,0x9082,0x9080,0x9139,0x91A3,0x919E, -0x919C,0x934D,0x9382,0x9328,0x9375,0x934A,0x9365,0x934B, -0x9318,0x937E,0x936C,0x935B,0x9370,0x935A,0x9354,0x95CA, -0x95CB,0x95CC,0x95C8,0x95C6,0x96B1,0x96B8,0x96D6,0x971C, -0x971E,0x97A0,0x97D3,0x9846,0x98B6,0x9935,0x9A01, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x99FF,0x9BAE,0x9BAB,0x9BAA,0x9BAD,0x9D3B,0x9D3F,0x9E8B, -0x9ECF,0x9EDE,0x9EDC,0x9EDD,0x9EDB,0x9F3E,0x9F4B,0x53E2, -0x5695,0x56AE,0x58D9,0x58D8,0x5B38,0x5F5D,0x61E3,0x6233, -0x64F4,0x64F2,0x64FE,0x6506,0x64FA,0x64FB,0x64F7,0x65B7, -0x66DC,0x6726,0x6AB3,0x6AAC,0x6AC3,0x6ABB,0x6AB8,0x6AC2, -0x6AAE,0x6AAF,0x6B5F,0x6B78,0x6BAF,0x7009,0x700B,0x6FFE, -0x7006,0x6FFA,0x7011,0x700F,0x71FB,0x71FC,0x71FE,0x71F8, -0x7377,0x7375,0x74A7,0x74BF,0x7515,0x7656,0x7658, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7652,0x77BD,0x77BF,0x77BB,0x77BC,0x790E,0x79AE, -0x7A61,0x7A62,0x7A60,0x7AC4,0x7AC5,0x7C2B,0x7C27,0x7C2A, -0x7C1E,0x7C23,0x7C21,0x7CE7,0x7E54,0x7E55,0x7E5E,0x7E5A, -0x7E61,0x7E52,0x7E59,0x7F48,0x7FF9,0x7FFB,0x8077,0x8076, -0x81CD,0x81CF,0x820A,0x85CF,0x85A9,0x85CD,0x85D0,0x85C9, -0x85B0,0x85BA,0x85B9,0x85A6,0x87EF,0x87EC,0x87F2,0x87E0, -0x8986,0x89B2,0x89F4,0x8B28,0x8B39,0x8B2C,0x8B2B,0x8C50, -0x8D05,0x8E59,0x8E63,0x8E66,0x8E64,0x8E5F,0x8E55,0x8EC0, -0x8F49,0x8F4D,0x9087,0x9083,0x9088,0x91AB,0x91AC,0x91D0, -0x9394,0x938A,0x9396,0x93A2,0x93B3,0x93AE,0x93AC,0x93B0, -0x9398,0x939A,0x9397,0x95D4,0x95D6,0x95D0,0x95D5,0x96E2, -0x96DC,0x96D9,0x96DB,0x96DE,0x9724,0x97A3,0x97A6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x97AD,0x97F9,0x984D,0x984F,0x984C,0x984E,0x9853,0x98BA, -0x993E,0x993F,0x993D,0x992E,0x99A5,0x9A0E,0x9AC1,0x9B03, -0x9B06,0x9B4F,0x9B4E,0x9B4D,0x9BCA,0x9BC9,0x9BFD,0x9BC8, -0x9BC0,0x9D51,0x9D5D,0x9D60,0x9EE0,0x9F15,0x9F2C,0x5133, -0x56A5,0x58DE,0x58DF,0x58E2,0x5BF5,0x9F90,0x5EEC,0x61F2, -0x61F7,0x61F6,0x61F5,0x6500,0x650F,0x66E0,0x66DD,0x6AE5, -0x6ADD,0x6ADA,0x6AD3,0x701B,0x701F,0x7028,0x701A,0x701D, -0x7015,0x7018,0x7206,0x720D,0x7258,0x72A2,0x7378, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x737A,0x74BD,0x74CA,0x74E3,0x7587,0x7586,0x765F, -0x7661,0x77C7,0x7919,0x79B1,0x7A6B,0x7A69,0x7C3E,0x7C3F, -0x7C38,0x7C3D,0x7C37,0x7C40,0x7E6B,0x7E6D,0x7E79,0x7E69, -0x7E6A,0x7F85,0x7E73,0x7FB6,0x7FB9,0x7FB8,0x81D8,0x85E9, -0x85DD,0x85EA,0x85D5,0x85E4,0x85E5,0x85F7,0x87FB,0x8805, -0x880D,0x87F9,0x87FE,0x8960,0x895F,0x8956,0x895E,0x8B41, -0x8B5C,0x8B58,0x8B49,0x8B5A,0x8B4E,0x8B4F,0x8B46,0x8B59, -0x8D08,0x8D0A,0x8E7C,0x8E72,0x8E87,0x8E76,0x8E6C,0x8E7A, -0x8E74,0x8F54,0x8F4E,0x8FAD,0x908A,0x908B,0x91B1,0x91AE, -0x93E1,0x93D1,0x93DF,0x93C3,0x93C8,0x93DC,0x93DD,0x93D6, -0x93E2,0x93CD,0x93D8,0x93E4,0x93D7,0x93E8,0x95DC,0x96B4, -0x96E3,0x972A,0x9727,0x9761,0x97DC,0x97FB,0x985E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9858,0x985B,0x98BC,0x9945,0x9949,0x9A16,0x9A19,0x9B0D, -0x9BE8,0x9BE7,0x9BD6,0x9BDB,0x9D89,0x9D61,0x9D72,0x9D6A, -0x9D6C,0x9E92,0x9E97,0x9E93,0x9EB4,0x52F8,0x56A8,0x56B7, -0x56B6,0x56B4,0x56BC,0x58E4,0x5B40,0x5B43,0x5B7D,0x5BF6, -0x5DC9,0x61F8,0x61FA,0x6518,0x6514,0x6519,0x66E6,0x6727, -0x6AEC,0x703E,0x7030,0x7032,0x7210,0x737B,0x74CF,0x7662, -0x7665,0x7926,0x792A,0x792C,0x792B,0x7AC7,0x7AF6,0x7C4C, -0x7C43,0x7C4D,0x7CEF,0x7CF0,0x8FAE,0x7E7D,0x7E7C, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7E82,0x7F4C,0x8000,0x81DA,0x8266,0x85FB,0x85F9, -0x8611,0x85FA,0x8606,0x860B,0x8607,0x860A,0x8814,0x8815, -0x8964,0x89BA,0x89F8,0x8B70,0x8B6C,0x8B66,0x8B6F,0x8B5F, -0x8B6B,0x8D0F,0x8D0D,0x8E89,0x8E81,0x8E85,0x8E82,0x91B4, -0x91CB,0x9418,0x9403,0x93FD,0x95E1,0x9730,0x98C4,0x9952, -0x9951,0x99A8,0x9A2B,0x9A30,0x9A37,0x9A35,0x9C13,0x9C0D, -0x9E79,0x9EB5,0x9EE8,0x9F2F,0x9F5F,0x9F63,0x9F61,0x5137, -0x5138,0x56C1,0x56C0,0x56C2,0x5914,0x5C6C,0x5DCD,0x61FC, -0x61FE,0x651D,0x651C,0x6595,0x66E9,0x6AFB,0x6B04,0x6AFA, -0x6BB2,0x704C,0x721B,0x72A7,0x74D6,0x74D4,0x7669,0x77D3, -0x7C50,0x7E8F,0x7E8C,0x7FBC,0x8617,0x862D,0x861A,0x8823, -0x8822,0x8821,0x881F,0x896A,0x896C,0x89BD,0x8B74, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8B77,0x8B7D,0x8D13,0x8E8A,0x8E8D,0x8E8B,0x8F5F,0x8FAF, -0x91BA,0x942E,0x9433,0x9435,0x943A,0x9438,0x9432,0x942B, -0x95E2,0x9738,0x9739,0x9732,0x97FF,0x9867,0x9865,0x9957, -0x9A45,0x9A43,0x9A40,0x9A3E,0x9ACF,0x9B54,0x9B51,0x9C2D, -0x9C25,0x9DAF,0x9DB4,0x9DC2,0x9DB8,0x9E9D,0x9EEF,0x9F19, -0x9F5C,0x9F66,0x9F67,0x513C,0x513B,0x56C8,0x56CA,0x56C9, -0x5B7F,0x5DD4,0x5DD2,0x5F4E,0x61FF,0x6524,0x6B0A,0x6B61, -0x7051,0x7058,0x7380,0x74E4,0x758A,0x766E,0x766C, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x79B3,0x7C60,0x7C5F,0x807E,0x807D,0x81DF,0x8972, -0x896F,0x89FC,0x8B80,0x8D16,0x8D17,0x8E91,0x8E93,0x8F61, -0x9148,0x9444,0x9451,0x9452,0x973D,0x973E,0x97C3,0x97C1, -0x986B,0x9955,0x9A55,0x9A4D,0x9AD2,0x9B1A,0x9C49,0x9C31, -0x9C3E,0x9C3B,0x9DD3,0x9DD7,0x9F34,0x9F6C,0x9F6A,0x9F94, -0x56CC,0x5DD6,0x6200,0x6523,0x652B,0x652A,0x66EC,0x6B10, -0x74DA,0x7ACA,0x7C64,0x7C63,0x7C65,0x7E93,0x7E96,0x7E94, -0x81E2,0x8638,0x863F,0x8831,0x8B8A,0x9090,0x908F,0x9463, -0x9460,0x9464,0x9768,0x986F,0x995C,0x9A5A,0x9A5B,0x9A57, -0x9AD3,0x9AD4,0x9AD1,0x9C54,0x9C57,0x9C56,0x9DE5,0x9E9F, -0x9EF4,0x56D1,0x58E9,0x652C,0x705E,0x7671,0x7672,0x77D7, -0x7F50,0x7F88,0x8836,0x8839,0x8862,0x8B93,0x8B92, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8B96,0x8277,0x8D1B,0x91C0,0x946A,0x9742,0x9748,0x9744, -0x97C6,0x9870,0x9A5F,0x9B22,0x9B58,0x9C5F,0x9DF9,0x9DFA, -0x9E7C,0x9E7D,0x9F07,0x9F77,0x9F72,0x5EF3,0x6B16,0x7063, -0x7C6C,0x7C6E,0x883B,0x89C0,0x8EA1,0x91C1,0x9472,0x9470, -0x9871,0x995E,0x9AD6,0x9B23,0x9ECC,0x7064,0x77DA,0x8B9A, -0x9477,0x97C9,0x9A62,0x9A65,0x7E9C,0x8B9C,0x8EAA,0x91C5, -0x947D,0x947E,0x947C,0x9C77,0x9C78,0x9EF7,0x8C54,0x947F, -0x9E1A,0x7228,0x9A6A,0x9B31,0x9E1B,0x9E1E,0x7C72, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x30FE,0x309D,0x309E,0x3005,0x3041,0x3042,0x3043, -0x3044,0x3045,0x3046,0x3047,0x3048,0x3049,0x304A,0x304B, -0x304C,0x304D,0x304E,0x304F,0x3050,0x3051,0x3052,0x3053, -0x3054,0x3055,0x3056,0x3057,0x3058,0x3059,0x305A,0x305B, -0x305C,0x305D,0x305E,0x305F,0x3060,0x3061,0x3062,0x3063, -0x3064,0x3065,0x3066,0x3067,0x3068,0x3069,0x306A,0x306B, -0x306C,0x306D,0x306E,0x306F,0x3070,0x3071,0x3072,0x3073, -0x3074,0x3075,0x3076,0x3077,0x3078,0x3079,0x307A,0x307B, -0x307C,0x307D,0x307E,0x307F,0x3080,0x3081,0x3082,0x3083, -0x3084,0x3085,0x3086,0x3087,0x3088,0x3089,0x308A,0x308B, -0x308C,0x308D,0x308E,0x308F,0x3090,0x3091,0x3092,0x3093, -0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x30A8,0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF, -0x30B0,0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7, -0x30B8,0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF, -0x30C0,0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7, -0x30C8,0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF, -0x30D0,0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7, -0x30D8,0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF, -0x30E0,0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x30E7,0x30E8,0x30E9,0x30EA,0x30EB,0x30EC,0x30ED, -0x30EE,0x30EF,0x30F0,0x30F1,0x30F2,0x30F3,0x30F4,0x30F5, -0x30F6,0x0414,0x0415,0x0401,0x0416,0x0417,0x0418,0x0419, -0x041A,0x041B,0x041C,0x0423,0x0424,0x0425,0x0426,0x0427, -0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, -0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0451,0x0436, -0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E, -0x043F,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446, -0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E, -0x044F,0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466, -0x2467,0x2468,0x2469,0x2474,0x2475,0x2476,0x2477,0x2478, -0x2479,0x247A,0x247B,0x247C,0x247D}; - -/* page 1 0xC940-0xF9DC */ -static uint16 tab_big5_uni1[]={ -0x4E42,0x4E5C,0x51F5,0x531A,0x5382,0x4E07,0x4E0C,0x4E47, -0x4E8D,0x56D7,0xFA0C,0x5C6E,0x5F73,0x4E0F,0x5187,0x4E0E, -0x4E2E,0x4E93,0x4EC2,0x4EC9,0x4EC8,0x5198,0x52FC,0x536C, -0x53B9,0x5720,0x5903,0x592C,0x5C10,0x5DFF,0x65E1,0x6BB3, -0x6BCC,0x6C14,0x723F,0x4E31,0x4E3C,0x4EE8,0x4EDC,0x4EE9, -0x4EE1,0x4EDD,0x4EDA,0x520C,0x531C,0x534C,0x5722,0x5723, -0x5917,0x592F,0x5B81,0x5B84,0x5C12,0x5C3B,0x5C74,0x5C73, -0x5E04,0x5E80,0x5E82,0x5FC9,0x6209,0x6250,0x6C15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6C36,0x6C43,0x6C3F,0x6C3B,0x72AE,0x72B0,0x738A, -0x79B8,0x808A,0x961E,0x4F0E,0x4F18,0x4F2C,0x4EF5,0x4F14, -0x4EF1,0x4F00,0x4EF7,0x4F08,0x4F1D,0x4F02,0x4F05,0x4F22, -0x4F13,0x4F04,0x4EF4,0x4F12,0x51B1,0x5213,0x5209,0x5210, -0x52A6,0x5322,0x531F,0x534D,0x538A,0x5407,0x56E1,0x56DF, -0x572E,0x572A,0x5734,0x593C,0x5980,0x597C,0x5985,0x597B, -0x597E,0x5977,0x597F,0x5B56,0x5C15,0x5C25,0x5C7C,0x5C7A, -0x5C7B,0x5C7E,0x5DDF,0x5E75,0x5E84,0x5F02,0x5F1A,0x5F74, -0x5FD5,0x5FD4,0x5FCF,0x625C,0x625E,0x6264,0x6261,0x6266, -0x6262,0x6259,0x6260,0x625A,0x6265,0x65EF,0x65EE,0x673E, -0x6739,0x6738,0x673B,0x673A,0x673F,0x673C,0x6733,0x6C18, -0x6C46,0x6C52,0x6C5C,0x6C4F,0x6C4A,0x6C54,0x6C4B, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6C4C,0x7071,0x725E,0x72B4,0x72B5,0x738E,0x752A,0x767F, -0x7A75,0x7F51,0x8278,0x827C,0x8280,0x827D,0x827F,0x864D, -0x897E,0x9099,0x9097,0x9098,0x909B,0x9094,0x9622,0x9624, -0x9620,0x9623,0x4F56,0x4F3B,0x4F62,0x4F49,0x4F53,0x4F64, -0x4F3E,0x4F67,0x4F52,0x4F5F,0x4F41,0x4F58,0x4F2D,0x4F33, -0x4F3F,0x4F61,0x518F,0x51B9,0x521C,0x521E,0x5221,0x52AD, -0x52AE,0x5309,0x5363,0x5372,0x538E,0x538F,0x5430,0x5437, -0x542A,0x5454,0x5445,0x5419,0x541C,0x5425,0x5418, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x543D,0x544F,0x5441,0x5428,0x5424,0x5447,0x56EE, -0x56E7,0x56E5,0x5741,0x5745,0x574C,0x5749,0x574B,0x5752, -0x5906,0x5940,0x59A6,0x5998,0x59A0,0x5997,0x598E,0x59A2, -0x5990,0x598F,0x59A7,0x59A1,0x5B8E,0x5B92,0x5C28,0x5C2A, -0x5C8D,0x5C8F,0x5C88,0x5C8B,0x5C89,0x5C92,0x5C8A,0x5C86, -0x5C93,0x5C95,0x5DE0,0x5E0A,0x5E0E,0x5E8B,0x5E89,0x5E8C, -0x5E88,0x5E8D,0x5F05,0x5F1D,0x5F78,0x5F76,0x5FD2,0x5FD1, -0x5FD0,0x5FED,0x5FE8,0x5FEE,0x5FF3,0x5FE1,0x5FE4,0x5FE3, -0x5FFA,0x5FEF,0x5FF7,0x5FFB,0x6000,0x5FF4,0x623A,0x6283, -0x628C,0x628E,0x628F,0x6294,0x6287,0x6271,0x627B,0x627A, -0x6270,0x6281,0x6288,0x6277,0x627D,0x6272,0x6274,0x6537, -0x65F0,0x65F4,0x65F3,0x65F2,0x65F5,0x6745,0x6747, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6759,0x6755,0x674C,0x6748,0x675D,0x674D,0x675A,0x674B, -0x6BD0,0x6C19,0x6C1A,0x6C78,0x6C67,0x6C6B,0x6C84,0x6C8B, -0x6C8F,0x6C71,0x6C6F,0x6C69,0x6C9A,0x6C6D,0x6C87,0x6C95, -0x6C9C,0x6C66,0x6C73,0x6C65,0x6C7B,0x6C8E,0x7074,0x707A, -0x7263,0x72BF,0x72BD,0x72C3,0x72C6,0x72C1,0x72BA,0x72C5, -0x7395,0x7397,0x7393,0x7394,0x7392,0x753A,0x7539,0x7594, -0x7595,0x7681,0x793D,0x8034,0x8095,0x8099,0x8090,0x8092, -0x809C,0x8290,0x828F,0x8285,0x828E,0x8291,0x8293, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x828A,0x8283,0x8284,0x8C78,0x8FC9,0x8FBF,0x909F, -0x90A1,0x90A5,0x909E,0x90A7,0x90A0,0x9630,0x9628,0x962F, -0x962D,0x4E33,0x4F98,0x4F7C,0x4F85,0x4F7D,0x4F80,0x4F87, -0x4F76,0x4F74,0x4F89,0x4F84,0x4F77,0x4F4C,0x4F97,0x4F6A, -0x4F9A,0x4F79,0x4F81,0x4F78,0x4F90,0x4F9C,0x4F94,0x4F9E, -0x4F92,0x4F82,0x4F95,0x4F6B,0x4F6E,0x519E,0x51BC,0x51BE, -0x5235,0x5232,0x5233,0x5246,0x5231,0x52BC,0x530A,0x530B, -0x533C,0x5392,0x5394,0x5487,0x547F,0x5481,0x5491,0x5482, -0x5488,0x546B,0x547A,0x547E,0x5465,0x546C,0x5474,0x5466, -0x548D,0x546F,0x5461,0x5460,0x5498,0x5463,0x5467,0x5464, -0x56F7,0x56F9,0x576F,0x5772,0x576D,0x576B,0x5771,0x5770, -0x5776,0x5780,0x5775,0x577B,0x5773,0x5774,0x5762, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5768,0x577D,0x590C,0x5945,0x59B5,0x59BA,0x59CF,0x59CE, -0x59B2,0x59CC,0x59C1,0x59B6,0x59BC,0x59C3,0x59D6,0x59B1, -0x59BD,0x59C0,0x59C8,0x59B4,0x59C7,0x5B62,0x5B65,0x5B93, -0x5B95,0x5C44,0x5C47,0x5CAE,0x5CA4,0x5CA0,0x5CB5,0x5CAF, -0x5CA8,0x5CAC,0x5C9F,0x5CA3,0x5CAD,0x5CA2,0x5CAA,0x5CA7, -0x5C9D,0x5CA5,0x5CB6,0x5CB0,0x5CA6,0x5E17,0x5E14,0x5E19, -0x5F28,0x5F22,0x5F23,0x5F24,0x5F54,0x5F82,0x5F7E,0x5F7D, -0x5FDE,0x5FE5,0x602D,0x6026,0x6019,0x6032,0x600B, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6034,0x600A,0x6017,0x6033,0x601A,0x601E,0x602C, -0x6022,0x600D,0x6010,0x602E,0x6013,0x6011,0x600C,0x6009, -0x601C,0x6214,0x623D,0x62AD,0x62B4,0x62D1,0x62BE,0x62AA, -0x62B6,0x62CA,0x62AE,0x62B3,0x62AF,0x62BB,0x62A9,0x62B0, -0x62B8,0x653D,0x65A8,0x65BB,0x6609,0x65FC,0x6604,0x6612, -0x6608,0x65FB,0x6603,0x660B,0x660D,0x6605,0x65FD,0x6611, -0x6610,0x66F6,0x670A,0x6785,0x676C,0x678E,0x6792,0x6776, -0x677B,0x6798,0x6786,0x6784,0x6774,0x678D,0x678C,0x677A, -0x679F,0x6791,0x6799,0x6783,0x677D,0x6781,0x6778,0x6779, -0x6794,0x6B25,0x6B80,0x6B7E,0x6BDE,0x6C1D,0x6C93,0x6CEC, -0x6CEB,0x6CEE,0x6CD9,0x6CB6,0x6CD4,0x6CAD,0x6CE7,0x6CB7, -0x6CD0,0x6CC2,0x6CBA,0x6CC3,0x6CC6,0x6CED,0x6CF2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6CD2,0x6CDD,0x6CB4,0x6C8A,0x6C9D,0x6C80,0x6CDE,0x6CC0, -0x6D30,0x6CCD,0x6CC7,0x6CB0,0x6CF9,0x6CCF,0x6CE9,0x6CD1, -0x7094,0x7098,0x7085,0x7093,0x7086,0x7084,0x7091,0x7096, -0x7082,0x709A,0x7083,0x726A,0x72D6,0x72CB,0x72D8,0x72C9, -0x72DC,0x72D2,0x72D4,0x72DA,0x72CC,0x72D1,0x73A4,0x73A1, -0x73AD,0x73A6,0x73A2,0x73A0,0x73AC,0x739D,0x74DD,0x74E8, -0x753F,0x7540,0x753E,0x758C,0x7598,0x76AF,0x76F3,0x76F1, -0x76F0,0x76F5,0x77F8,0x77FC,0x77F9,0x77FB,0x77FA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x77F7,0x7942,0x793F,0x79C5,0x7A78,0x7A7B,0x7AFB, -0x7C75,0x7CFD,0x8035,0x808F,0x80AE,0x80A3,0x80B8,0x80B5, -0x80AD,0x8220,0x82A0,0x82C0,0x82AB,0x829A,0x8298,0x829B, -0x82B5,0x82A7,0x82AE,0x82BC,0x829E,0x82BA,0x82B4,0x82A8, -0x82A1,0x82A9,0x82C2,0x82A4,0x82C3,0x82B6,0x82A2,0x8670, -0x866F,0x866D,0x866E,0x8C56,0x8FD2,0x8FCB,0x8FD3,0x8FCD, -0x8FD6,0x8FD5,0x8FD7,0x90B2,0x90B4,0x90AF,0x90B3,0x90B0, -0x9639,0x963D,0x963C,0x963A,0x9643,0x4FCD,0x4FC5,0x4FD3, -0x4FB2,0x4FC9,0x4FCB,0x4FC1,0x4FD4,0x4FDC,0x4FD9,0x4FBB, -0x4FB3,0x4FDB,0x4FC7,0x4FD6,0x4FBA,0x4FC0,0x4FB9,0x4FEC, -0x5244,0x5249,0x52C0,0x52C2,0x533D,0x537C,0x5397,0x5396, -0x5399,0x5398,0x54BA,0x54A1,0x54AD,0x54A5,0x54CF, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x54C3,0x830D,0x54B7,0x54AE,0x54D6,0x54B6,0x54C5,0x54C6, -0x54A0,0x5470,0x54BC,0x54A2,0x54BE,0x5472,0x54DE,0x54B0, -0x57B5,0x579E,0x579F,0x57A4,0x578C,0x5797,0x579D,0x579B, -0x5794,0x5798,0x578F,0x5799,0x57A5,0x579A,0x5795,0x58F4, -0x590D,0x5953,0x59E1,0x59DE,0x59EE,0x5A00,0x59F1,0x59DD, -0x59FA,0x59FD,0x59FC,0x59F6,0x59E4,0x59F2,0x59F7,0x59DB, -0x59E9,0x59F3,0x59F5,0x59E0,0x59FE,0x59F4,0x59ED,0x5BA8, -0x5C4C,0x5CD0,0x5CD8,0x5CCC,0x5CD7,0x5CCB,0x5CDB, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x5CDE,0x5CDA,0x5CC9,0x5CC7,0x5CCA,0x5CD6,0x5CD3, -0x5CD4,0x5CCF,0x5CC8,0x5CC6,0x5CCE,0x5CDF,0x5CF8,0x5DF9, -0x5E21,0x5E22,0x5E23,0x5E20,0x5E24,0x5EB0,0x5EA4,0x5EA2, -0x5E9B,0x5EA3,0x5EA5,0x5F07,0x5F2E,0x5F56,0x5F86,0x6037, -0x6039,0x6054,0x6072,0x605E,0x6045,0x6053,0x6047,0x6049, -0x605B,0x604C,0x6040,0x6042,0x605F,0x6024,0x6044,0x6058, -0x6066,0x606E,0x6242,0x6243,0x62CF,0x630D,0x630B,0x62F5, -0x630E,0x6303,0x62EB,0x62F9,0x630F,0x630C,0x62F8,0x62F6, -0x6300,0x6313,0x6314,0x62FA,0x6315,0x62FB,0x62F0,0x6541, -0x6543,0x65AA,0x65BF,0x6636,0x6621,0x6632,0x6635,0x661C, -0x6626,0x6622,0x6633,0x662B,0x663A,0x661D,0x6634,0x6639, -0x662E,0x670F,0x6710,0x67C1,0x67F2,0x67C8,0x67BA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x67DC,0x67BB,0x67F8,0x67D8,0x67C0,0x67B7,0x67C5,0x67EB, -0x67E4,0x67DF,0x67B5,0x67CD,0x67B3,0x67F7,0x67F6,0x67EE, -0x67E3,0x67C2,0x67B9,0x67CE,0x67E7,0x67F0,0x67B2,0x67FC, -0x67C6,0x67ED,0x67CC,0x67AE,0x67E6,0x67DB,0x67FA,0x67C9, -0x67CA,0x67C3,0x67EA,0x67CB,0x6B28,0x6B82,0x6B84,0x6BB6, -0x6BD6,0x6BD8,0x6BE0,0x6C20,0x6C21,0x6D28,0x6D34,0x6D2D, -0x6D1F,0x6D3C,0x6D3F,0x6D12,0x6D0A,0x6CDA,0x6D33,0x6D04, -0x6D19,0x6D3A,0x6D1A,0x6D11,0x6D00,0x6D1D,0x6D42, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6D01,0x6D18,0x6D37,0x6D03,0x6D0F,0x6D40,0x6D07, -0x6D20,0x6D2C,0x6D08,0x6D22,0x6D09,0x6D10,0x70B7,0x709F, -0x70BE,0x70B1,0x70B0,0x70A1,0x70B4,0x70B5,0x70A9,0x7241, -0x7249,0x724A,0x726C,0x7270,0x7273,0x726E,0x72CA,0x72E4, -0x72E8,0x72EB,0x72DF,0x72EA,0x72E6,0x72E3,0x7385,0x73CC, -0x73C2,0x73C8,0x73C5,0x73B9,0x73B6,0x73B5,0x73B4,0x73EB, -0x73BF,0x73C7,0x73BE,0x73C3,0x73C6,0x73B8,0x73CB,0x74EC, -0x74EE,0x752E,0x7547,0x7548,0x75A7,0x75AA,0x7679,0x76C4, -0x7708,0x7703,0x7704,0x7705,0x770A,0x76F7,0x76FB,0x76FA, -0x77E7,0x77E8,0x7806,0x7811,0x7812,0x7805,0x7810,0x780F, -0x780E,0x7809,0x7803,0x7813,0x794A,0x794C,0x794B,0x7945, -0x7944,0x79D5,0x79CD,0x79CF,0x79D6,0x79CE,0x7A80, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7A7E,0x7AD1,0x7B00,0x7B01,0x7C7A,0x7C78,0x7C79,0x7C7F, -0x7C80,0x7C81,0x7D03,0x7D08,0x7D01,0x7F58,0x7F91,0x7F8D, -0x7FBE,0x8007,0x800E,0x800F,0x8014,0x8037,0x80D8,0x80C7, -0x80E0,0x80D1,0x80C8,0x80C2,0x80D0,0x80C5,0x80E3,0x80D9, -0x80DC,0x80CA,0x80D5,0x80C9,0x80CF,0x80D7,0x80E6,0x80CD, -0x81FF,0x8221,0x8294,0x82D9,0x82FE,0x82F9,0x8307,0x82E8, -0x8300,0x82D5,0x833A,0x82EB,0x82D6,0x82F4,0x82EC,0x82E1, -0x82F2,0x82F5,0x830C,0x82FB,0x82F6,0x82F0,0x82EA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x82E4,0x82E0,0x82FA,0x82F3,0x82ED,0x8677,0x8674, -0x867C,0x8673,0x8841,0x884E,0x8867,0x886A,0x8869,0x89D3, -0x8A04,0x8A07,0x8D72,0x8FE3,0x8FE1,0x8FEE,0x8FE0,0x90F1, -0x90BD,0x90BF,0x90D5,0x90C5,0x90BE,0x90C7,0x90CB,0x90C8, -0x91D4,0x91D3,0x9654,0x964F,0x9651,0x9653,0x964A,0x964E, -0x501E,0x5005,0x5007,0x5013,0x5022,0x5030,0x501B,0x4FF5, -0x4FF4,0x5033,0x5037,0x502C,0x4FF6,0x4FF7,0x5017,0x501C, -0x5020,0x5027,0x5035,0x502F,0x5031,0x500E,0x515A,0x5194, -0x5193,0x51CA,0x51C4,0x51C5,0x51C8,0x51CE,0x5261,0x525A, -0x5252,0x525E,0x525F,0x5255,0x5262,0x52CD,0x530E,0x539E, -0x5526,0x54E2,0x5517,0x5512,0x54E7,0x54F3,0x54E4,0x551A, -0x54FF,0x5504,0x5508,0x54EB,0x5511,0x5505,0x54F1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x550A,0x54FB,0x54F7,0x54F8,0x54E0,0x550E,0x5503,0x550B, -0x5701,0x5702,0x57CC,0x5832,0x57D5,0x57D2,0x57BA,0x57C6, -0x57BD,0x57BC,0x57B8,0x57B6,0x57BF,0x57C7,0x57D0,0x57B9, -0x57C1,0x590E,0x594A,0x5A19,0x5A16,0x5A2D,0x5A2E,0x5A15, -0x5A0F,0x5A17,0x5A0A,0x5A1E,0x5A33,0x5B6C,0x5BA7,0x5BAD, -0x5BAC,0x5C03,0x5C56,0x5C54,0x5CEC,0x5CFF,0x5CEE,0x5CF1, -0x5CF7,0x5D00,0x5CF9,0x5E29,0x5E28,0x5EA8,0x5EAE,0x5EAA, -0x5EAC,0x5F33,0x5F30,0x5F67,0x605D,0x605A,0x6067, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6041,0x60A2,0x6088,0x6080,0x6092,0x6081,0x609D, -0x6083,0x6095,0x609B,0x6097,0x6087,0x609C,0x608E,0x6219, -0x6246,0x62F2,0x6310,0x6356,0x632C,0x6344,0x6345,0x6336, -0x6343,0x63E4,0x6339,0x634B,0x634A,0x633C,0x6329,0x6341, -0x6334,0x6358,0x6354,0x6359,0x632D,0x6347,0x6333,0x635A, -0x6351,0x6338,0x6357,0x6340,0x6348,0x654A,0x6546,0x65C6, -0x65C3,0x65C4,0x65C2,0x664A,0x665F,0x6647,0x6651,0x6712, -0x6713,0x681F,0x681A,0x6849,0x6832,0x6833,0x683B,0x684B, -0x684F,0x6816,0x6831,0x681C,0x6835,0x682B,0x682D,0x682F, -0x684E,0x6844,0x6834,0x681D,0x6812,0x6814,0x6826,0x6828, -0x682E,0x684D,0x683A,0x6825,0x6820,0x6B2C,0x6B2F,0x6B2D, -0x6B31,0x6B34,0x6B6D,0x8082,0x6B88,0x6BE6,0x6BE4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6BE8,0x6BE3,0x6BE2,0x6BE7,0x6C25,0x6D7A,0x6D63,0x6D64, -0x6D76,0x6D0D,0x6D61,0x6D92,0x6D58,0x6D62,0x6D6D,0x6D6F, -0x6D91,0x6D8D,0x6DEF,0x6D7F,0x6D86,0x6D5E,0x6D67,0x6D60, -0x6D97,0x6D70,0x6D7C,0x6D5F,0x6D82,0x6D98,0x6D2F,0x6D68, -0x6D8B,0x6D7E,0x6D80,0x6D84,0x6D16,0x6D83,0x6D7B,0x6D7D, -0x6D75,0x6D90,0x70DC,0x70D3,0x70D1,0x70DD,0x70CB,0x7F39, -0x70E2,0x70D7,0x70D2,0x70DE,0x70E0,0x70D4,0x70CD,0x70C5, -0x70C6,0x70C7,0x70DA,0x70CE,0x70E1,0x7242,0x7278, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7277,0x7276,0x7300,0x72FA,0x72F4,0x72FE,0x72F6, -0x72F3,0x72FB,0x7301,0x73D3,0x73D9,0x73E5,0x73D6,0x73BC, -0x73E7,0x73E3,0x73E9,0x73DC,0x73D2,0x73DB,0x73D4,0x73DD, -0x73DA,0x73D7,0x73D8,0x73E8,0x74DE,0x74DF,0x74F4,0x74F5, -0x7521,0x755B,0x755F,0x75B0,0x75C1,0x75BB,0x75C4,0x75C0, -0x75BF,0x75B6,0x75BA,0x768A,0x76C9,0x771D,0x771B,0x7710, -0x7713,0x7712,0x7723,0x7711,0x7715,0x7719,0x771A,0x7722, -0x7727,0x7823,0x782C,0x7822,0x7835,0x782F,0x7828,0x782E, -0x782B,0x7821,0x7829,0x7833,0x782A,0x7831,0x7954,0x795B, -0x794F,0x795C,0x7953,0x7952,0x7951,0x79EB,0x79EC,0x79E0, -0x79EE,0x79ED,0x79EA,0x79DC,0x79DE,0x79DD,0x7A86,0x7A89, -0x7A85,0x7A8B,0x7A8C,0x7A8A,0x7A87,0x7AD8,0x7B10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7B04,0x7B13,0x7B05,0x7B0F,0x7B08,0x7B0A,0x7B0E,0x7B09, -0x7B12,0x7C84,0x7C91,0x7C8A,0x7C8C,0x7C88,0x7C8D,0x7C85, -0x7D1E,0x7D1D,0x7D11,0x7D0E,0x7D18,0x7D16,0x7D13,0x7D1F, -0x7D12,0x7D0F,0x7D0C,0x7F5C,0x7F61,0x7F5E,0x7F60,0x7F5D, -0x7F5B,0x7F96,0x7F92,0x7FC3,0x7FC2,0x7FC0,0x8016,0x803E, -0x8039,0x80FA,0x80F2,0x80F9,0x80F5,0x8101,0x80FB,0x8100, -0x8201,0x822F,0x8225,0x8333,0x832D,0x8344,0x8319,0x8351, -0x8325,0x8356,0x833F,0x8341,0x8326,0x831C,0x8322, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x8342,0x834E,0x831B,0x832A,0x8308,0x833C,0x834D, -0x8316,0x8324,0x8320,0x8337,0x832F,0x8329,0x8347,0x8345, -0x834C,0x8353,0x831E,0x832C,0x834B,0x8327,0x8348,0x8653, -0x8652,0x86A2,0x86A8,0x8696,0x868D,0x8691,0x869E,0x8687, -0x8697,0x8686,0x868B,0x869A,0x8685,0x86A5,0x8699,0x86A1, -0x86A7,0x8695,0x8698,0x868E,0x869D,0x8690,0x8694,0x8843, -0x8844,0x886D,0x8875,0x8876,0x8872,0x8880,0x8871,0x887F, -0x886F,0x8883,0x887E,0x8874,0x887C,0x8A12,0x8C47,0x8C57, -0x8C7B,0x8CA4,0x8CA3,0x8D76,0x8D78,0x8DB5,0x8DB7,0x8DB6, -0x8ED1,0x8ED3,0x8FFE,0x8FF5,0x9002,0x8FFF,0x8FFB,0x9004, -0x8FFC,0x8FF6,0x90D6,0x90E0,0x90D9,0x90DA,0x90E3,0x90DF, -0x90E5,0x90D8,0x90DB,0x90D7,0x90DC,0x90E4,0x9150, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x914E,0x914F,0x91D5,0x91E2,0x91DA,0x965C,0x965F,0x96BC, -0x98E3,0x9ADF,0x9B2F,0x4E7F,0x5070,0x506A,0x5061,0x505E, -0x5060,0x5053,0x504B,0x505D,0x5072,0x5048,0x504D,0x5041, -0x505B,0x504A,0x5062,0x5015,0x5045,0x505F,0x5069,0x506B, -0x5063,0x5064,0x5046,0x5040,0x506E,0x5073,0x5057,0x5051, -0x51D0,0x526B,0x526D,0x526C,0x526E,0x52D6,0x52D3,0x532D, -0x539C,0x5575,0x5576,0x553C,0x554D,0x5550,0x5534,0x552A, -0x5551,0x5562,0x5536,0x5535,0x5530,0x5552,0x5545, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x550C,0x5532,0x5565,0x554E,0x5539,0x5548,0x552D, -0x553B,0x5540,0x554B,0x570A,0x5707,0x57FB,0x5814,0x57E2, -0x57F6,0x57DC,0x57F4,0x5800,0x57ED,0x57FD,0x5808,0x57F8, -0x580B,0x57F3,0x57CF,0x5807,0x57EE,0x57E3,0x57F2,0x57E5, -0x57EC,0x57E1,0x580E,0x57FC,0x5810,0x57E7,0x5801,0x580C, -0x57F1,0x57E9,0x57F0,0x580D,0x5804,0x595C,0x5A60,0x5A58, -0x5A55,0x5A67,0x5A5E,0x5A38,0x5A35,0x5A6D,0x5A50,0x5A5F, -0x5A65,0x5A6C,0x5A53,0x5A64,0x5A57,0x5A43,0x5A5D,0x5A52, -0x5A44,0x5A5B,0x5A48,0x5A8E,0x5A3E,0x5A4D,0x5A39,0x5A4C, -0x5A70,0x5A69,0x5A47,0x5A51,0x5A56,0x5A42,0x5A5C,0x5B72, -0x5B6E,0x5BC1,0x5BC0,0x5C59,0x5D1E,0x5D0B,0x5D1D,0x5D1A, -0x5D20,0x5D0C,0x5D28,0x5D0D,0x5D26,0x5D25,0x5D0F, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5D30,0x5D12,0x5D23,0x5D1F,0x5D2E,0x5E3E,0x5E34,0x5EB1, -0x5EB4,0x5EB9,0x5EB2,0x5EB3,0x5F36,0x5F38,0x5F9B,0x5F96, -0x5F9F,0x608A,0x6090,0x6086,0x60BE,0x60B0,0x60BA,0x60D3, -0x60D4,0x60CF,0x60E4,0x60D9,0x60DD,0x60C8,0x60B1,0x60DB, -0x60B7,0x60CA,0x60BF,0x60C3,0x60CD,0x60C0,0x6332,0x6365, -0x638A,0x6382,0x637D,0x63BD,0x639E,0x63AD,0x639D,0x6397, -0x63AB,0x638E,0x636F,0x6387,0x6390,0x636E,0x63AF,0x6375, -0x639C,0x636D,0x63AE,0x637C,0x63A4,0x633B,0x639F, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6378,0x6385,0x6381,0x6391,0x638D,0x6370,0x6553, -0x65CD,0x6665,0x6661,0x665B,0x6659,0x665C,0x6662,0x6718, -0x6879,0x6887,0x6890,0x689C,0x686D,0x686E,0x68AE,0x68AB, -0x6956,0x686F,0x68A3,0x68AC,0x68A9,0x6875,0x6874,0x68B2, -0x688F,0x6877,0x6892,0x687C,0x686B,0x6872,0x68AA,0x6880, -0x6871,0x687E,0x689B,0x6896,0x688B,0x68A0,0x6889,0x68A4, -0x6878,0x687B,0x6891,0x688C,0x688A,0x687D,0x6B36,0x6B33, -0x6B37,0x6B38,0x6B91,0x6B8F,0x6B8D,0x6B8E,0x6B8C,0x6C2A, -0x6DC0,0x6DAB,0x6DB4,0x6DB3,0x6E74,0x6DAC,0x6DE9,0x6DE2, -0x6DB7,0x6DF6,0x6DD4,0x6E00,0x6DC8,0x6DE0,0x6DDF,0x6DD6, -0x6DBE,0x6DE5,0x6DDC,0x6DDD,0x6DDB,0x6DF4,0x6DCA,0x6DBD, -0x6DED,0x6DF0,0x6DBA,0x6DD5,0x6DC2,0x6DCF,0x6DC9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6DD0,0x6DF2,0x6DD3,0x6DFD,0x6DD7,0x6DCD,0x6DE3,0x6DBB, -0x70FA,0x710D,0x70F7,0x7117,0x70F4,0x710C,0x70F0,0x7104, -0x70F3,0x7110,0x70FC,0x70FF,0x7106,0x7113,0x7100,0x70F8, -0x70F6,0x710B,0x7102,0x710E,0x727E,0x727B,0x727C,0x727F, -0x731D,0x7317,0x7307,0x7311,0x7318,0x730A,0x7308,0x72FF, -0x730F,0x731E,0x7388,0x73F6,0x73F8,0x73F5,0x7404,0x7401, -0x73FD,0x7407,0x7400,0x73FA,0x73FC,0x73FF,0x740C,0x740B, -0x73F4,0x7408,0x7564,0x7563,0x75CE,0x75D2,0x75CF, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x75CB,0x75CC,0x75D1,0x75D0,0x768F,0x7689,0x76D3, -0x7739,0x772F,0x772D,0x7731,0x7732,0x7734,0x7733,0x773D, -0x7725,0x773B,0x7735,0x7848,0x7852,0x7849,0x784D,0x784A, -0x784C,0x7826,0x7845,0x7850,0x7964,0x7967,0x7969,0x796A, -0x7963,0x796B,0x7961,0x79BB,0x79FA,0x79F8,0x79F6,0x79F7, -0x7A8F,0x7A94,0x7A90,0x7B35,0x7B47,0x7B34,0x7B25,0x7B30, -0x7B22,0x7B24,0x7B33,0x7B18,0x7B2A,0x7B1D,0x7B31,0x7B2B, -0x7B2D,0x7B2F,0x7B32,0x7B38,0x7B1A,0x7B23,0x7C94,0x7C98, -0x7C96,0x7CA3,0x7D35,0x7D3D,0x7D38,0x7D36,0x7D3A,0x7D45, -0x7D2C,0x7D29,0x7D41,0x7D47,0x7D3E,0x7D3F,0x7D4A,0x7D3B, -0x7D28,0x7F63,0x7F95,0x7F9C,0x7F9D,0x7F9B,0x7FCA,0x7FCB, -0x7FCD,0x7FD0,0x7FD1,0x7FC7,0x7FCF,0x7FC9,0x801F, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x801E,0x801B,0x8047,0x8043,0x8048,0x8118,0x8125,0x8119, -0x811B,0x812D,0x811F,0x812C,0x811E,0x8121,0x8115,0x8127, -0x811D,0x8122,0x8211,0x8238,0x8233,0x823A,0x8234,0x8232, -0x8274,0x8390,0x83A3,0x83A8,0x838D,0x837A,0x8373,0x83A4, -0x8374,0x838F,0x8381,0x8395,0x8399,0x8375,0x8394,0x83A9, -0x837D,0x8383,0x838C,0x839D,0x839B,0x83AA,0x838B,0x837E, -0x83A5,0x83AF,0x8388,0x8397,0x83B0,0x837F,0x83A6,0x8387, -0x83AE,0x8376,0x839A,0x8659,0x8656,0x86BF,0x86B7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x86C2,0x86C1,0x86C5,0x86BA,0x86B0,0x86C8,0x86B9, -0x86B3,0x86B8,0x86CC,0x86B4,0x86BB,0x86BC,0x86C3,0x86BD, -0x86BE,0x8852,0x8889,0x8895,0x88A8,0x88A2,0x88AA,0x889A, -0x8891,0x88A1,0x889F,0x8898,0x88A7,0x8899,0x889B,0x8897, -0x88A4,0x88AC,0x888C,0x8893,0x888E,0x8982,0x89D6,0x89D9, -0x89D5,0x8A30,0x8A27,0x8A2C,0x8A1E,0x8C39,0x8C3B,0x8C5C, -0x8C5D,0x8C7D,0x8CA5,0x8D7D,0x8D7B,0x8D79,0x8DBC,0x8DC2, -0x8DB9,0x8DBF,0x8DC1,0x8ED8,0x8EDE,0x8EDD,0x8EDC,0x8ED7, -0x8EE0,0x8EE1,0x9024,0x900B,0x9011,0x901C,0x900C,0x9021, -0x90EF,0x90EA,0x90F0,0x90F4,0x90F2,0x90F3,0x90D4,0x90EB, -0x90EC,0x90E9,0x9156,0x9158,0x915A,0x9153,0x9155,0x91EC, -0x91F4,0x91F1,0x91F3,0x91F8,0x91E4,0x91F9,0x91EA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x91EB,0x91F7,0x91E8,0x91EE,0x957A,0x9586,0x9588,0x967C, -0x966D,0x966B,0x9671,0x966F,0x96BF,0x976A,0x9804,0x98E5, -0x9997,0x509B,0x5095,0x5094,0x509E,0x508B,0x50A3,0x5083, -0x508C,0x508E,0x509D,0x5068,0x509C,0x5092,0x5082,0x5087, -0x515F,0x51D4,0x5312,0x5311,0x53A4,0x53A7,0x5591,0x55A8, -0x55A5,0x55AD,0x5577,0x5645,0x55A2,0x5593,0x5588,0x558F, -0x55B5,0x5581,0x55A3,0x5592,0x55A4,0x557D,0x558C,0x55A6, -0x557F,0x5595,0x55A1,0x558E,0x570C,0x5829,0x5837, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x5819,0x581E,0x5827,0x5823,0x5828,0x57F5,0x5848, -0x5825,0x581C,0x581B,0x5833,0x583F,0x5836,0x582E,0x5839, -0x5838,0x582D,0x582C,0x583B,0x5961,0x5AAF,0x5A94,0x5A9F, -0x5A7A,0x5AA2,0x5A9E,0x5A78,0x5AA6,0x5A7C,0x5AA5,0x5AAC, -0x5A95,0x5AAE,0x5A37,0x5A84,0x5A8A,0x5A97,0x5A83,0x5A8B, -0x5AA9,0x5A7B,0x5A7D,0x5A8C,0x5A9C,0x5A8F,0x5A93,0x5A9D, -0x5BEA,0x5BCD,0x5BCB,0x5BD4,0x5BD1,0x5BCA,0x5BCE,0x5C0C, -0x5C30,0x5D37,0x5D43,0x5D6B,0x5D41,0x5D4B,0x5D3F,0x5D35, -0x5D51,0x5D4E,0x5D55,0x5D33,0x5D3A,0x5D52,0x5D3D,0x5D31, -0x5D59,0x5D42,0x5D39,0x5D49,0x5D38,0x5D3C,0x5D32,0x5D36, -0x5D40,0x5D45,0x5E44,0x5E41,0x5F58,0x5FA6,0x5FA5,0x5FAB, -0x60C9,0x60B9,0x60CC,0x60E2,0x60CE,0x60C4,0x6114, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x60F2,0x610A,0x6116,0x6105,0x60F5,0x6113,0x60F8,0x60FC, -0x60FE,0x60C1,0x6103,0x6118,0x611D,0x6110,0x60FF,0x6104, -0x610B,0x624A,0x6394,0x63B1,0x63B0,0x63CE,0x63E5,0x63E8, -0x63EF,0x63C3,0x649D,0x63F3,0x63CA,0x63E0,0x63F6,0x63D5, -0x63F2,0x63F5,0x6461,0x63DF,0x63BE,0x63DD,0x63DC,0x63C4, -0x63D8,0x63D3,0x63C2,0x63C7,0x63CC,0x63CB,0x63C8,0x63F0, -0x63D7,0x63D9,0x6532,0x6567,0x656A,0x6564,0x655C,0x6568, -0x6565,0x658C,0x659D,0x659E,0x65AE,0x65D0,0x65D2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x667C,0x666C,0x667B,0x6680,0x6671,0x6679,0x666A, -0x6672,0x6701,0x690C,0x68D3,0x6904,0x68DC,0x692A,0x68EC, -0x68EA,0x68F1,0x690F,0x68D6,0x68F7,0x68EB,0x68E4,0x68F6, -0x6913,0x6910,0x68F3,0x68E1,0x6907,0x68CC,0x6908,0x6970, -0x68B4,0x6911,0x68EF,0x68C6,0x6914,0x68F8,0x68D0,0x68FD, -0x68FC,0x68E8,0x690B,0x690A,0x6917,0x68CE,0x68C8,0x68DD, -0x68DE,0x68E6,0x68F4,0x68D1,0x6906,0x68D4,0x68E9,0x6915, -0x6925,0x68C7,0x6B39,0x6B3B,0x6B3F,0x6B3C,0x6B94,0x6B97, -0x6B99,0x6B95,0x6BBD,0x6BF0,0x6BF2,0x6BF3,0x6C30,0x6DFC, -0x6E46,0x6E47,0x6E1F,0x6E49,0x6E88,0x6E3C,0x6E3D,0x6E45, -0x6E62,0x6E2B,0x6E3F,0x6E41,0x6E5D,0x6E73,0x6E1C,0x6E33, -0x6E4B,0x6E40,0x6E51,0x6E3B,0x6E03,0x6E2E,0x6E5E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6E68,0x6E5C,0x6E61,0x6E31,0x6E28,0x6E60,0x6E71,0x6E6B, -0x6E39,0x6E22,0x6E30,0x6E53,0x6E65,0x6E27,0x6E78,0x6E64, -0x6E77,0x6E55,0x6E79,0x6E52,0x6E66,0x6E35,0x6E36,0x6E5A, -0x7120,0x711E,0x712F,0x70FB,0x712E,0x7131,0x7123,0x7125, -0x7122,0x7132,0x711F,0x7128,0x713A,0x711B,0x724B,0x725A, -0x7288,0x7289,0x7286,0x7285,0x728B,0x7312,0x730B,0x7330, -0x7322,0x7331,0x7333,0x7327,0x7332,0x732D,0x7326,0x7323, -0x7335,0x730C,0x742E,0x742C,0x7430,0x742B,0x7416, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x741A,0x7421,0x742D,0x7431,0x7424,0x7423,0x741D, -0x7429,0x7420,0x7432,0x74FB,0x752F,0x756F,0x756C,0x75E7, -0x75DA,0x75E1,0x75E6,0x75DD,0x75DF,0x75E4,0x75D7,0x7695, -0x7692,0x76DA,0x7746,0x7747,0x7744,0x774D,0x7745,0x774A, -0x774E,0x774B,0x774C,0x77DE,0x77EC,0x7860,0x7864,0x7865, -0x785C,0x786D,0x7871,0x786A,0x786E,0x7870,0x7869,0x7868, -0x785E,0x7862,0x7974,0x7973,0x7972,0x7970,0x7A02,0x7A0A, -0x7A03,0x7A0C,0x7A04,0x7A99,0x7AE6,0x7AE4,0x7B4A,0x7B3B, -0x7B44,0x7B48,0x7B4C,0x7B4E,0x7B40,0x7B58,0x7B45,0x7CA2, -0x7C9E,0x7CA8,0x7CA1,0x7D58,0x7D6F,0x7D63,0x7D53,0x7D56, -0x7D67,0x7D6A,0x7D4F,0x7D6D,0x7D5C,0x7D6B,0x7D52,0x7D54, -0x7D69,0x7D51,0x7D5F,0x7D4E,0x7F3E,0x7F3F,0x7F65, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7F66,0x7FA2,0x7FA0,0x7FA1,0x7FD7,0x8051,0x804F,0x8050, -0x80FE,0x80D4,0x8143,0x814A,0x8152,0x814F,0x8147,0x813D, -0x814D,0x813A,0x81E6,0x81EE,0x81F7,0x81F8,0x81F9,0x8204, -0x823C,0x823D,0x823F,0x8275,0x833B,0x83CF,0x83F9,0x8423, -0x83C0,0x83E8,0x8412,0x83E7,0x83E4,0x83FC,0x83F6,0x8410, -0x83C6,0x83C8,0x83EB,0x83E3,0x83BF,0x8401,0x83DD,0x83E5, -0x83D8,0x83FF,0x83E1,0x83CB,0x83CE,0x83D6,0x83F5,0x83C9, -0x8409,0x840F,0x83DE,0x8411,0x8406,0x83C2,0x83F3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x83D5,0x83FA,0x83C7,0x83D1,0x83EA,0x8413,0x83C3, -0x83EC,0x83EE,0x83C4,0x83FB,0x83D7,0x83E2,0x841B,0x83DB, -0x83FE,0x86D8,0x86E2,0x86E6,0x86D3,0x86E3,0x86DA,0x86EA, -0x86DD,0x86EB,0x86DC,0x86EC,0x86E9,0x86D7,0x86E8,0x86D1, -0x8848,0x8856,0x8855,0x88BA,0x88D7,0x88B9,0x88B8,0x88C0, -0x88BE,0x88B6,0x88BC,0x88B7,0x88BD,0x88B2,0x8901,0x88C9, -0x8995,0x8998,0x8997,0x89DD,0x89DA,0x89DB,0x8A4E,0x8A4D, -0x8A39,0x8A59,0x8A40,0x8A57,0x8A58,0x8A44,0x8A45,0x8A52, -0x8A48,0x8A51,0x8A4A,0x8A4C,0x8A4F,0x8C5F,0x8C81,0x8C80, -0x8CBA,0x8CBE,0x8CB0,0x8CB9,0x8CB5,0x8D84,0x8D80,0x8D89, -0x8DD8,0x8DD3,0x8DCD,0x8DC7,0x8DD6,0x8DDC,0x8DCF,0x8DD5, -0x8DD9,0x8DC8,0x8DD7,0x8DC5,0x8EEF,0x8EF7,0x8EFA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8EF9,0x8EE6,0x8EEE,0x8EE5,0x8EF5,0x8EE7,0x8EE8,0x8EF6, -0x8EEB,0x8EF1,0x8EEC,0x8EF4,0x8EE9,0x902D,0x9034,0x902F, -0x9106,0x912C,0x9104,0x90FF,0x90FC,0x9108,0x90F9,0x90FB, -0x9101,0x9100,0x9107,0x9105,0x9103,0x9161,0x9164,0x915F, -0x9162,0x9160,0x9201,0x920A,0x9225,0x9203,0x921A,0x9226, -0x920F,0x920C,0x9200,0x9212,0x91FF,0x91FD,0x9206,0x9204, -0x9227,0x9202,0x921C,0x9224,0x9219,0x9217,0x9205,0x9216, -0x957B,0x958D,0x958C,0x9590,0x9687,0x967E,0x9688, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x9689,0x9683,0x9680,0x96C2,0x96C8,0x96C3,0x96F1, -0x96F0,0x976C,0x9770,0x976E,0x9807,0x98A9,0x98EB,0x9CE6, -0x9EF9,0x4E83,0x4E84,0x4EB6,0x50BD,0x50BF,0x50C6,0x50AE, -0x50C4,0x50CA,0x50B4,0x50C8,0x50C2,0x50B0,0x50C1,0x50BA, -0x50B1,0x50CB,0x50C9,0x50B6,0x50B8,0x51D7,0x527A,0x5278, -0x527B,0x527C,0x55C3,0x55DB,0x55CC,0x55D0,0x55CB,0x55CA, -0x55DD,0x55C0,0x55D4,0x55C4,0x55E9,0x55BF,0x55D2,0x558D, -0x55CF,0x55D5,0x55E2,0x55D6,0x55C8,0x55F2,0x55CD,0x55D9, -0x55C2,0x5714,0x5853,0x5868,0x5864,0x584F,0x584D,0x5849, -0x586F,0x5855,0x584E,0x585D,0x5859,0x5865,0x585B,0x583D, -0x5863,0x5871,0x58FC,0x5AC7,0x5AC4,0x5ACB,0x5ABA,0x5AB8, -0x5AB1,0x5AB5,0x5AB0,0x5ABF,0x5AC8,0x5ABB,0x5AC6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5AB7,0x5AC0,0x5ACA,0x5AB4,0x5AB6,0x5ACD,0x5AB9,0x5A90, -0x5BD6,0x5BD8,0x5BD9,0x5C1F,0x5C33,0x5D71,0x5D63,0x5D4A, -0x5D65,0x5D72,0x5D6C,0x5D5E,0x5D68,0x5D67,0x5D62,0x5DF0, -0x5E4F,0x5E4E,0x5E4A,0x5E4D,0x5E4B,0x5EC5,0x5ECC,0x5EC6, -0x5ECB,0x5EC7,0x5F40,0x5FAF,0x5FAD,0x60F7,0x6149,0x614A, -0x612B,0x6145,0x6136,0x6132,0x612E,0x6146,0x612F,0x614F, -0x6129,0x6140,0x6220,0x9168,0x6223,0x6225,0x6224,0x63C5, -0x63F1,0x63EB,0x6410,0x6412,0x6409,0x6420,0x6424, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6433,0x6443,0x641F,0x6415,0x6418,0x6439,0x6437, -0x6422,0x6423,0x640C,0x6426,0x6430,0x6428,0x6441,0x6435, -0x642F,0x640A,0x641A,0x6440,0x6425,0x6427,0x640B,0x63E7, -0x641B,0x642E,0x6421,0x640E,0x656F,0x6592,0x65D3,0x6686, -0x668C,0x6695,0x6690,0x668B,0x668A,0x6699,0x6694,0x6678, -0x6720,0x6966,0x695F,0x6938,0x694E,0x6962,0x6971,0x693F, -0x6945,0x696A,0x6939,0x6942,0x6957,0x6959,0x697A,0x6948, -0x6949,0x6935,0x696C,0x6933,0x693D,0x6965,0x68F0,0x6978, -0x6934,0x6969,0x6940,0x696F,0x6944,0x6976,0x6958,0x6941, -0x6974,0x694C,0x693B,0x694B,0x6937,0x695C,0x694F,0x6951, -0x6932,0x6952,0x692F,0x697B,0x693C,0x6B46,0x6B45,0x6B43, -0x6B42,0x6B48,0x6B41,0x6B9B,0xFA0D,0x6BFB,0x6BFC, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6BF9,0x6BF7,0x6BF8,0x6E9B,0x6ED6,0x6EC8,0x6E8F,0x6EC0, -0x6E9F,0x6E93,0x6E94,0x6EA0,0x6EB1,0x6EB9,0x6EC6,0x6ED2, -0x6EBD,0x6EC1,0x6E9E,0x6EC9,0x6EB7,0x6EB0,0x6ECD,0x6EA6, -0x6ECF,0x6EB2,0x6EBE,0x6EC3,0x6EDC,0x6ED8,0x6E99,0x6E92, -0x6E8E,0x6E8D,0x6EA4,0x6EA1,0x6EBF,0x6EB3,0x6ED0,0x6ECA, -0x6E97,0x6EAE,0x6EA3,0x7147,0x7154,0x7152,0x7163,0x7160, -0x7141,0x715D,0x7162,0x7172,0x7178,0x716A,0x7161,0x7142, -0x7158,0x7143,0x714B,0x7170,0x715F,0x7150,0x7153, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7144,0x714D,0x715A,0x724F,0x728D,0x728C,0x7291, -0x7290,0x728E,0x733C,0x7342,0x733B,0x733A,0x7340,0x734A, -0x7349,0x7444,0x744A,0x744B,0x7452,0x7451,0x7457,0x7440, -0x744F,0x7450,0x744E,0x7442,0x7446,0x744D,0x7454,0x74E1, -0x74FF,0x74FE,0x74FD,0x751D,0x7579,0x7577,0x6983,0x75EF, -0x760F,0x7603,0x75F7,0x75FE,0x75FC,0x75F9,0x75F8,0x7610, -0x75FB,0x75F6,0x75ED,0x75F5,0x75FD,0x7699,0x76B5,0x76DD, -0x7755,0x775F,0x7760,0x7752,0x7756,0x775A,0x7769,0x7767, -0x7754,0x7759,0x776D,0x77E0,0x7887,0x789A,0x7894,0x788F, -0x7884,0x7895,0x7885,0x7886,0x78A1,0x7883,0x7879,0x7899, -0x7880,0x7896,0x787B,0x797C,0x7982,0x797D,0x7979,0x7A11, -0x7A18,0x7A19,0x7A12,0x7A17,0x7A15,0x7A22,0x7A13, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7A1B,0x7A10,0x7AA3,0x7AA2,0x7A9E,0x7AEB,0x7B66,0x7B64, -0x7B6D,0x7B74,0x7B69,0x7B72,0x7B65,0x7B73,0x7B71,0x7B70, -0x7B61,0x7B78,0x7B76,0x7B63,0x7CB2,0x7CB4,0x7CAF,0x7D88, -0x7D86,0x7D80,0x7D8D,0x7D7F,0x7D85,0x7D7A,0x7D8E,0x7D7B, -0x7D83,0x7D7C,0x7D8C,0x7D94,0x7D84,0x7D7D,0x7D92,0x7F6D, -0x7F6B,0x7F67,0x7F68,0x7F6C,0x7FA6,0x7FA5,0x7FA7,0x7FDB, -0x7FDC,0x8021,0x8164,0x8160,0x8177,0x815C,0x8169,0x815B, -0x8162,0x8172,0x6721,0x815E,0x8176,0x8167,0x816F, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x8144,0x8161,0x821D,0x8249,0x8244,0x8240,0x8242, -0x8245,0x84F1,0x843F,0x8456,0x8476,0x8479,0x848F,0x848D, -0x8465,0x8451,0x8440,0x8486,0x8467,0x8430,0x844D,0x847D, -0x845A,0x8459,0x8474,0x8473,0x845D,0x8507,0x845E,0x8437, -0x843A,0x8434,0x847A,0x8443,0x8478,0x8432,0x8445,0x8429, -0x83D9,0x844B,0x842F,0x8442,0x842D,0x845F,0x8470,0x8439, -0x844E,0x844C,0x8452,0x846F,0x84C5,0x848E,0x843B,0x8447, -0x8436,0x8433,0x8468,0x847E,0x8444,0x842B,0x8460,0x8454, -0x846E,0x8450,0x870B,0x8704,0x86F7,0x870C,0x86FA,0x86D6, -0x86F5,0x874D,0x86F8,0x870E,0x8709,0x8701,0x86F6,0x870D, -0x8705,0x88D6,0x88CB,0x88CD,0x88CE,0x88DE,0x88DB,0x88DA, -0x88CC,0x88D0,0x8985,0x899B,0x89DF,0x89E5,0x89E4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x89E1,0x89E0,0x89E2,0x89DC,0x89E6,0x8A76,0x8A86,0x8A7F, -0x8A61,0x8A3F,0x8A77,0x8A82,0x8A84,0x8A75,0x8A83,0x8A81, -0x8A74,0x8A7A,0x8C3C,0x8C4B,0x8C4A,0x8C65,0x8C64,0x8C66, -0x8C86,0x8C84,0x8C85,0x8CCC,0x8D68,0x8D69,0x8D91,0x8D8C, -0x8D8E,0x8D8F,0x8D8D,0x8D93,0x8D94,0x8D90,0x8D92,0x8DF0, -0x8DE0,0x8DEC,0x8DF1,0x8DEE,0x8DD0,0x8DE9,0x8DE3,0x8DE2, -0x8DE7,0x8DF2,0x8DEB,0x8DF4,0x8F06,0x8EFF,0x8F01,0x8F00, -0x8F05,0x8F07,0x8F08,0x8F02,0x8F0B,0x9052,0x903F, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x9044,0x9049,0x903D,0x9110,0x910D,0x910F,0x9111, -0x9116,0x9114,0x910B,0x910E,0x916E,0x916F,0x9248,0x9252, -0x9230,0x923A,0x9266,0x9233,0x9265,0x925E,0x9283,0x922E, -0x924A,0x9246,0x926D,0x926C,0x924F,0x9260,0x9267,0x926F, -0x9236,0x9261,0x9270,0x9231,0x9254,0x9263,0x9250,0x9272, -0x924E,0x9253,0x924C,0x9256,0x9232,0x959F,0x959C,0x959E, -0x959B,0x9692,0x9693,0x9691,0x9697,0x96CE,0x96FA,0x96FD, -0x96F8,0x96F5,0x9773,0x9777,0x9778,0x9772,0x980F,0x980D, -0x980E,0x98AC,0x98F6,0x98F9,0x99AF,0x99B2,0x99B0,0x99B5, -0x9AAD,0x9AAB,0x9B5B,0x9CEA,0x9CED,0x9CE7,0x9E80,0x9EFD, -0x50E6,0x50D4,0x50D7,0x50E8,0x50F3,0x50DB,0x50EA,0x50DD, -0x50E4,0x50D3,0x50EC,0x50F0,0x50EF,0x50E3,0x50E0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x51D8,0x5280,0x5281,0x52E9,0x52EB,0x5330,0x53AC,0x5627, -0x5615,0x560C,0x5612,0x55FC,0x560F,0x561C,0x5601,0x5613, -0x5602,0x55FA,0x561D,0x5604,0x55FF,0x55F9,0x5889,0x587C, -0x5890,0x5898,0x5886,0x5881,0x587F,0x5874,0x588B,0x587A, -0x5887,0x5891,0x588E,0x5876,0x5882,0x5888,0x587B,0x5894, -0x588F,0x58FE,0x596B,0x5ADC,0x5AEE,0x5AE5,0x5AD5,0x5AEA, -0x5ADA,0x5AED,0x5AEB,0x5AF3,0x5AE2,0x5AE0,0x5ADB,0x5AEC, -0x5ADE,0x5ADD,0x5AD9,0x5AE8,0x5ADF,0x5B77,0x5BE0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x5BE3,0x5C63,0x5D82,0x5D80,0x5D7D,0x5D86,0x5D7A, -0x5D81,0x5D77,0x5D8A,0x5D89,0x5D88,0x5D7E,0x5D7C,0x5D8D, -0x5D79,0x5D7F,0x5E58,0x5E59,0x5E53,0x5ED8,0x5ED1,0x5ED7, -0x5ECE,0x5EDC,0x5ED5,0x5ED9,0x5ED2,0x5ED4,0x5F44,0x5F43, -0x5F6F,0x5FB6,0x612C,0x6128,0x6141,0x615E,0x6171,0x6173, -0x6152,0x6153,0x6172,0x616C,0x6180,0x6174,0x6154,0x617A, -0x615B,0x6165,0x613B,0x616A,0x6161,0x6156,0x6229,0x6227, -0x622B,0x642B,0x644D,0x645B,0x645D,0x6474,0x6476,0x6472, -0x6473,0x647D,0x6475,0x6466,0x64A6,0x644E,0x6482,0x645E, -0x645C,0x644B,0x6453,0x6460,0x6450,0x647F,0x643F,0x646C, -0x646B,0x6459,0x6465,0x6477,0x6573,0x65A0,0x66A1,0x66A0, -0x669F,0x6705,0x6704,0x6722,0x69B1,0x69B6,0x69C9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x69A0,0x69CE,0x6996,0x69B0,0x69AC,0x69BC,0x6991,0x6999, -0x698E,0x69A7,0x698D,0x69A9,0x69BE,0x69AF,0x69BF,0x69C4, -0x69BD,0x69A4,0x69D4,0x69B9,0x69CA,0x699A,0x69CF,0x69B3, -0x6993,0x69AA,0x69A1,0x699E,0x69D9,0x6997,0x6990,0x69C2, -0x69B5,0x69A5,0x69C6,0x6B4A,0x6B4D,0x6B4B,0x6B9E,0x6B9F, -0x6BA0,0x6BC3,0x6BC4,0x6BFE,0x6ECE,0x6EF5,0x6EF1,0x6F03, -0x6F25,0x6EF8,0x6F37,0x6EFB,0x6F2E,0x6F09,0x6F4E,0x6F19, -0x6F1A,0x6F27,0x6F18,0x6F3B,0x6F12,0x6EED,0x6F0A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6F36,0x6F73,0x6EF9,0x6EEE,0x6F2D,0x6F40,0x6F30, -0x6F3C,0x6F35,0x6EEB,0x6F07,0x6F0E,0x6F43,0x6F05,0x6EFD, -0x6EF6,0x6F39,0x6F1C,0x6EFC,0x6F3A,0x6F1F,0x6F0D,0x6F1E, -0x6F08,0x6F21,0x7187,0x7190,0x7189,0x7180,0x7185,0x7182, -0x718F,0x717B,0x7186,0x7181,0x7197,0x7244,0x7253,0x7297, -0x7295,0x7293,0x7343,0x734D,0x7351,0x734C,0x7462,0x7473, -0x7471,0x7475,0x7472,0x7467,0x746E,0x7500,0x7502,0x7503, -0x757D,0x7590,0x7616,0x7608,0x760C,0x7615,0x7611,0x760A, -0x7614,0x76B8,0x7781,0x777C,0x7785,0x7782,0x776E,0x7780, -0x776F,0x777E,0x7783,0x78B2,0x78AA,0x78B4,0x78AD,0x78A8, -0x787E,0x78AB,0x789E,0x78A5,0x78A0,0x78AC,0x78A2,0x78A4, -0x7998,0x798A,0x798B,0x7996,0x7995,0x7994,0x7993, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7997,0x7988,0x7992,0x7990,0x7A2B,0x7A4A,0x7A30,0x7A2F, -0x7A28,0x7A26,0x7AA8,0x7AAB,0x7AAC,0x7AEE,0x7B88,0x7B9C, -0x7B8A,0x7B91,0x7B90,0x7B96,0x7B8D,0x7B8C,0x7B9B,0x7B8E, -0x7B85,0x7B98,0x5284,0x7B99,0x7BA4,0x7B82,0x7CBB,0x7CBF, -0x7CBC,0x7CBA,0x7DA7,0x7DB7,0x7DC2,0x7DA3,0x7DAA,0x7DC1, -0x7DC0,0x7DC5,0x7D9D,0x7DCE,0x7DC4,0x7DC6,0x7DCB,0x7DCC, -0x7DAF,0x7DB9,0x7D96,0x7DBC,0x7D9F,0x7DA6,0x7DAE,0x7DA9, -0x7DA1,0x7DC9,0x7F73,0x7FE2,0x7FE3,0x7FE5,0x7FDE, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x8024,0x805D,0x805C,0x8189,0x8186,0x8183,0x8187, -0x818D,0x818C,0x818B,0x8215,0x8497,0x84A4,0x84A1,0x849F, -0x84BA,0x84CE,0x84C2,0x84AC,0x84AE,0x84AB,0x84B9,0x84B4, -0x84C1,0x84CD,0x84AA,0x849A,0x84B1,0x84D0,0x849D,0x84A7, -0x84BB,0x84A2,0x8494,0x84C7,0x84CC,0x849B,0x84A9,0x84AF, -0x84A8,0x84D6,0x8498,0x84B6,0x84CF,0x84A0,0x84D7,0x84D4, -0x84D2,0x84DB,0x84B0,0x8491,0x8661,0x8733,0x8723,0x8728, -0x876B,0x8740,0x872E,0x871E,0x8721,0x8719,0x871B,0x8743, -0x872C,0x8741,0x873E,0x8746,0x8720,0x8732,0x872A,0x872D, -0x873C,0x8712,0x873A,0x8731,0x8735,0x8742,0x8726,0x8727, -0x8738,0x8724,0x871A,0x8730,0x8711,0x88F7,0x88E7,0x88F1, -0x88F2,0x88FA,0x88FE,0x88EE,0x88FC,0x88F6,0x88FB, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x88F0,0x88EC,0x88EB,0x899D,0x89A1,0x899F,0x899E,0x89E9, -0x89EB,0x89E8,0x8AAB,0x8A99,0x8A8B,0x8A92,0x8A8F,0x8A96, -0x8C3D,0x8C68,0x8C69,0x8CD5,0x8CCF,0x8CD7,0x8D96,0x8E09, -0x8E02,0x8DFF,0x8E0D,0x8DFD,0x8E0A,0x8E03,0x8E07,0x8E06, -0x8E05,0x8DFE,0x8E00,0x8E04,0x8F10,0x8F11,0x8F0E,0x8F0D, -0x9123,0x911C,0x9120,0x9122,0x911F,0x911D,0x911A,0x9124, -0x9121,0x911B,0x917A,0x9172,0x9179,0x9173,0x92A5,0x92A4, -0x9276,0x929B,0x927A,0x92A0,0x9294,0x92AA,0x928D, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x92A6,0x929A,0x92AB,0x9279,0x9297,0x927F,0x92A3, -0x92EE,0x928E,0x9282,0x9295,0x92A2,0x927D,0x9288,0x92A1, -0x928A,0x9286,0x928C,0x9299,0x92A7,0x927E,0x9287,0x92A9, -0x929D,0x928B,0x922D,0x969E,0x96A1,0x96FF,0x9758,0x977D, -0x977A,0x977E,0x9783,0x9780,0x9782,0x977B,0x9784,0x9781, -0x977F,0x97CE,0x97CD,0x9816,0x98AD,0x98AE,0x9902,0x9900, -0x9907,0x999D,0x999C,0x99C3,0x99B9,0x99BB,0x99BA,0x99C2, -0x99BD,0x99C7,0x9AB1,0x9AE3,0x9AE7,0x9B3E,0x9B3F,0x9B60, -0x9B61,0x9B5F,0x9CF1,0x9CF2,0x9CF5,0x9EA7,0x50FF,0x5103, -0x5130,0x50F8,0x5106,0x5107,0x50F6,0x50FE,0x510B,0x510C, -0x50FD,0x510A,0x528B,0x528C,0x52F1,0x52EF,0x5648,0x5642, -0x564C,0x5635,0x5641,0x564A,0x5649,0x5646,0x5658, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x565A,0x5640,0x5633,0x563D,0x562C,0x563E,0x5638,0x562A, -0x563A,0x571A,0x58AB,0x589D,0x58B1,0x58A0,0x58A3,0x58AF, -0x58AC,0x58A5,0x58A1,0x58FF,0x5AFF,0x5AF4,0x5AFD,0x5AF7, -0x5AF6,0x5B03,0x5AF8,0x5B02,0x5AF9,0x5B01,0x5B07,0x5B05, -0x5B0F,0x5C67,0x5D99,0x5D97,0x5D9F,0x5D92,0x5DA2,0x5D93, -0x5D95,0x5DA0,0x5D9C,0x5DA1,0x5D9A,0x5D9E,0x5E69,0x5E5D, -0x5E60,0x5E5C,0x7DF3,0x5EDB,0x5EDE,0x5EE1,0x5F49,0x5FB2, -0x618B,0x6183,0x6179,0x61B1,0x61B0,0x61A2,0x6189, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x619B,0x6193,0x61AF,0x61AD,0x619F,0x6192,0x61AA, -0x61A1,0x618D,0x6166,0x61B3,0x622D,0x646E,0x6470,0x6496, -0x64A0,0x6485,0x6497,0x649C,0x648F,0x648B,0x648A,0x648C, -0x64A3,0x649F,0x6468,0x64B1,0x6498,0x6576,0x657A,0x6579, -0x657B,0x65B2,0x65B3,0x66B5,0x66B0,0x66A9,0x66B2,0x66B7, -0x66AA,0x66AF,0x6A00,0x6A06,0x6A17,0x69E5,0x69F8,0x6A15, -0x69F1,0x69E4,0x6A20,0x69FF,0x69EC,0x69E2,0x6A1B,0x6A1D, -0x69FE,0x6A27,0x69F2,0x69EE,0x6A14,0x69F7,0x69E7,0x6A40, -0x6A08,0x69E6,0x69FB,0x6A0D,0x69FC,0x69EB,0x6A09,0x6A04, -0x6A18,0x6A25,0x6A0F,0x69F6,0x6A26,0x6A07,0x69F4,0x6A16, -0x6B51,0x6BA5,0x6BA3,0x6BA2,0x6BA6,0x6C01,0x6C00,0x6BFF, -0x6C02,0x6F41,0x6F26,0x6F7E,0x6F87,0x6FC6,0x6F92, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6F8D,0x6F89,0x6F8C,0x6F62,0x6F4F,0x6F85,0x6F5A,0x6F96, -0x6F76,0x6F6C,0x6F82,0x6F55,0x6F72,0x6F52,0x6F50,0x6F57, -0x6F94,0x6F93,0x6F5D,0x6F00,0x6F61,0x6F6B,0x6F7D,0x6F67, -0x6F90,0x6F53,0x6F8B,0x6F69,0x6F7F,0x6F95,0x6F63,0x6F77, -0x6F6A,0x6F7B,0x71B2,0x71AF,0x719B,0x71B0,0x71A0,0x719A, -0x71A9,0x71B5,0x719D,0x71A5,0x719E,0x71A4,0x71A1,0x71AA, -0x719C,0x71A7,0x71B3,0x7298,0x729A,0x7358,0x7352,0x735E, -0x735F,0x7360,0x735D,0x735B,0x7361,0x735A,0x7359, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7362,0x7487,0x7489,0x748A,0x7486,0x7481,0x747D, -0x7485,0x7488,0x747C,0x7479,0x7508,0x7507,0x757E,0x7625, -0x761E,0x7619,0x761D,0x761C,0x7623,0x761A,0x7628,0x761B, -0x769C,0x769D,0x769E,0x769B,0x778D,0x778F,0x7789,0x7788, -0x78CD,0x78BB,0x78CF,0x78CC,0x78D1,0x78CE,0x78D4,0x78C8, -0x78C3,0x78C4,0x78C9,0x799A,0x79A1,0x79A0,0x799C,0x79A2, -0x799B,0x6B76,0x7A39,0x7AB2,0x7AB4,0x7AB3,0x7BB7,0x7BCB, -0x7BBE,0x7BAC,0x7BCE,0x7BAF,0x7BB9,0x7BCA,0x7BB5,0x7CC5, -0x7CC8,0x7CCC,0x7CCB,0x7DF7,0x7DDB,0x7DEA,0x7DE7,0x7DD7, -0x7DE1,0x7E03,0x7DFA,0x7DE6,0x7DF6,0x7DF1,0x7DF0,0x7DEE, -0x7DDF,0x7F76,0x7FAC,0x7FB0,0x7FAD,0x7FED,0x7FEB,0x7FEA, -0x7FEC,0x7FE6,0x7FE8,0x8064,0x8067,0x81A3,0x819F, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x819E,0x8195,0x81A2,0x8199,0x8197,0x8216,0x824F,0x8253, -0x8252,0x8250,0x824E,0x8251,0x8524,0x853B,0x850F,0x8500, -0x8529,0x850E,0x8509,0x850D,0x851F,0x850A,0x8527,0x851C, -0x84FB,0x852B,0x84FA,0x8508,0x850C,0x84F4,0x852A,0x84F2, -0x8515,0x84F7,0x84EB,0x84F3,0x84FC,0x8512,0x84EA,0x84E9, -0x8516,0x84FE,0x8528,0x851D,0x852E,0x8502,0x84FD,0x851E, -0x84F6,0x8531,0x8526,0x84E7,0x84E8,0x84F0,0x84EF,0x84F9, -0x8518,0x8520,0x8530,0x850B,0x8519,0x852F,0x8662, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x8756,0x8763,0x8764,0x8777,0x87E1,0x8773,0x8758, -0x8754,0x875B,0x8752,0x8761,0x875A,0x8751,0x875E,0x876D, -0x876A,0x8750,0x874E,0x875F,0x875D,0x876F,0x876C,0x877A, -0x876E,0x875C,0x8765,0x874F,0x877B,0x8775,0x8762,0x8767, -0x8769,0x885A,0x8905,0x890C,0x8914,0x890B,0x8917,0x8918, -0x8919,0x8906,0x8916,0x8911,0x890E,0x8909,0x89A2,0x89A4, -0x89A3,0x89ED,0x89F0,0x89EC,0x8ACF,0x8AC6,0x8AB8,0x8AD3, -0x8AD1,0x8AD4,0x8AD5,0x8ABB,0x8AD7,0x8ABE,0x8AC0,0x8AC5, -0x8AD8,0x8AC3,0x8ABA,0x8ABD,0x8AD9,0x8C3E,0x8C4D,0x8C8F, -0x8CE5,0x8CDF,0x8CD9,0x8CE8,0x8CDA,0x8CDD,0x8CE7,0x8DA0, -0x8D9C,0x8DA1,0x8D9B,0x8E20,0x8E23,0x8E25,0x8E24,0x8E2E, -0x8E15,0x8E1B,0x8E16,0x8E11,0x8E19,0x8E26,0x8E27, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8E14,0x8E12,0x8E18,0x8E13,0x8E1C,0x8E17,0x8E1A,0x8F2C, -0x8F24,0x8F18,0x8F1A,0x8F20,0x8F23,0x8F16,0x8F17,0x9073, -0x9070,0x906F,0x9067,0x906B,0x912F,0x912B,0x9129,0x912A, -0x9132,0x9126,0x912E,0x9185,0x9186,0x918A,0x9181,0x9182, -0x9184,0x9180,0x92D0,0x92C3,0x92C4,0x92C0,0x92D9,0x92B6, -0x92CF,0x92F1,0x92DF,0x92D8,0x92E9,0x92D7,0x92DD,0x92CC, -0x92EF,0x92C2,0x92E8,0x92CA,0x92C8,0x92CE,0x92E6,0x92CD, -0x92D5,0x92C9,0x92E0,0x92DE,0x92E7,0x92D1,0x92D3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x92B5,0x92E1,0x92C6,0x92B4,0x957C,0x95AC,0x95AB, -0x95AE,0x95B0,0x96A4,0x96A2,0x96D3,0x9705,0x9708,0x9702, -0x975A,0x978A,0x978E,0x9788,0x97D0,0x97CF,0x981E,0x981D, -0x9826,0x9829,0x9828,0x9820,0x981B,0x9827,0x98B2,0x9908, -0x98FA,0x9911,0x9914,0x9916,0x9917,0x9915,0x99DC,0x99CD, -0x99CF,0x99D3,0x99D4,0x99CE,0x99C9,0x99D6,0x99D8,0x99CB, -0x99D7,0x99CC,0x9AB3,0x9AEC,0x9AEB,0x9AF3,0x9AF2,0x9AF1, -0x9B46,0x9B43,0x9B67,0x9B74,0x9B71,0x9B66,0x9B76,0x9B75, -0x9B70,0x9B68,0x9B64,0x9B6C,0x9CFC,0x9CFA,0x9CFD,0x9CFF, -0x9CF7,0x9D07,0x9D00,0x9CF9,0x9CFB,0x9D08,0x9D05,0x9D04, -0x9E83,0x9ED3,0x9F0F,0x9F10,0x511C,0x5113,0x5117,0x511A, -0x5111,0x51DE,0x5334,0x53E1,0x5670,0x5660,0x566E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5673,0x5666,0x5663,0x566D,0x5672,0x565E,0x5677,0x571C, -0x571B,0x58C8,0x58BD,0x58C9,0x58BF,0x58BA,0x58C2,0x58BC, -0x58C6,0x5B17,0x5B19,0x5B1B,0x5B21,0x5B14,0x5B13,0x5B10, -0x5B16,0x5B28,0x5B1A,0x5B20,0x5B1E,0x5BEF,0x5DAC,0x5DB1, -0x5DA9,0x5DA7,0x5DB5,0x5DB0,0x5DAE,0x5DAA,0x5DA8,0x5DB2, -0x5DAD,0x5DAF,0x5DB4,0x5E67,0x5E68,0x5E66,0x5E6F,0x5EE9, -0x5EE7,0x5EE6,0x5EE8,0x5EE5,0x5F4B,0x5FBC,0x619D,0x61A8, -0x6196,0x61C5,0x61B4,0x61C6,0x61C1,0x61CC,0x61BA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x61BF,0x61B8,0x618C,0x64D7,0x64D6,0x64D0,0x64CF, -0x64C9,0x64BD,0x6489,0x64C3,0x64DB,0x64F3,0x64D9,0x6533, -0x657F,0x657C,0x65A2,0x66C8,0x66BE,0x66C0,0x66CA,0x66CB, -0x66CF,0x66BD,0x66BB,0x66BA,0x66CC,0x6723,0x6A34,0x6A66, -0x6A49,0x6A67,0x6A32,0x6A68,0x6A3E,0x6A5D,0x6A6D,0x6A76, -0x6A5B,0x6A51,0x6A28,0x6A5A,0x6A3B,0x6A3F,0x6A41,0x6A6A, -0x6A64,0x6A50,0x6A4F,0x6A54,0x6A6F,0x6A69,0x6A60,0x6A3C, -0x6A5E,0x6A56,0x6A55,0x6A4D,0x6A4E,0x6A46,0x6B55,0x6B54, -0x6B56,0x6BA7,0x6BAA,0x6BAB,0x6BC8,0x6BC7,0x6C04,0x6C03, -0x6C06,0x6FAD,0x6FCB,0x6FA3,0x6FC7,0x6FBC,0x6FCE,0x6FC8, -0x6F5E,0x6FC4,0x6FBD,0x6F9E,0x6FCA,0x6FA8,0x7004,0x6FA5, -0x6FAE,0x6FBA,0x6FAC,0x6FAA,0x6FCF,0x6FBF,0x6FB8, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6FA2,0x6FC9,0x6FAB,0x6FCD,0x6FAF,0x6FB2,0x6FB0,0x71C5, -0x71C2,0x71BF,0x71B8,0x71D6,0x71C0,0x71C1,0x71CB,0x71D4, -0x71CA,0x71C7,0x71CF,0x71BD,0x71D8,0x71BC,0x71C6,0x71DA, -0x71DB,0x729D,0x729E,0x7369,0x7366,0x7367,0x736C,0x7365, -0x736B,0x736A,0x747F,0x749A,0x74A0,0x7494,0x7492,0x7495, -0x74A1,0x750B,0x7580,0x762F,0x762D,0x7631,0x763D,0x7633, -0x763C,0x7635,0x7632,0x7630,0x76BB,0x76E6,0x779A,0x779D, -0x77A1,0x779C,0x779B,0x77A2,0x77A3,0x7795,0x7799, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7797,0x78DD,0x78E9,0x78E5,0x78EA,0x78DE,0x78E3, -0x78DB,0x78E1,0x78E2,0x78ED,0x78DF,0x78E0,0x79A4,0x7A44, -0x7A48,0x7A47,0x7AB6,0x7AB8,0x7AB5,0x7AB1,0x7AB7,0x7BDE, -0x7BE3,0x7BE7,0x7BDD,0x7BD5,0x7BE5,0x7BDA,0x7BE8,0x7BF9, -0x7BD4,0x7BEA,0x7BE2,0x7BDC,0x7BEB,0x7BD8,0x7BDF,0x7CD2, -0x7CD4,0x7CD7,0x7CD0,0x7CD1,0x7E12,0x7E21,0x7E17,0x7E0C, -0x7E1F,0x7E20,0x7E13,0x7E0E,0x7E1C,0x7E15,0x7E1A,0x7E22, -0x7E0B,0x7E0F,0x7E16,0x7E0D,0x7E14,0x7E25,0x7E24,0x7F43, -0x7F7B,0x7F7C,0x7F7A,0x7FB1,0x7FEF,0x802A,0x8029,0x806C, -0x81B1,0x81A6,0x81AE,0x81B9,0x81B5,0x81AB,0x81B0,0x81AC, -0x81B4,0x81B2,0x81B7,0x81A7,0x81F2,0x8255,0x8256,0x8257, -0x8556,0x8545,0x856B,0x854D,0x8553,0x8561,0x8558, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8540,0x8546,0x8564,0x8541,0x8562,0x8544,0x8551,0x8547, -0x8563,0x853E,0x855B,0x8571,0x854E,0x856E,0x8575,0x8555, -0x8567,0x8560,0x858C,0x8566,0x855D,0x8554,0x8565,0x856C, -0x8663,0x8665,0x8664,0x879B,0x878F,0x8797,0x8793,0x8792, -0x8788,0x8781,0x8796,0x8798,0x8779,0x8787,0x87A3,0x8785, -0x8790,0x8791,0x879D,0x8784,0x8794,0x879C,0x879A,0x8789, -0x891E,0x8926,0x8930,0x892D,0x892E,0x8927,0x8931,0x8922, -0x8929,0x8923,0x892F,0x892C,0x891F,0x89F1,0x8AE0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x8AE2,0x8AF2,0x8AF4,0x8AF5,0x8ADD,0x8B14,0x8AE4, -0x8ADF,0x8AF0,0x8AC8,0x8ADE,0x8AE1,0x8AE8,0x8AFF,0x8AEF, -0x8AFB,0x8C91,0x8C92,0x8C90,0x8CF5,0x8CEE,0x8CF1,0x8CF0, -0x8CF3,0x8D6C,0x8D6E,0x8DA5,0x8DA7,0x8E33,0x8E3E,0x8E38, -0x8E40,0x8E45,0x8E36,0x8E3C,0x8E3D,0x8E41,0x8E30,0x8E3F, -0x8EBD,0x8F36,0x8F2E,0x8F35,0x8F32,0x8F39,0x8F37,0x8F34, -0x9076,0x9079,0x907B,0x9086,0x90FA,0x9133,0x9135,0x9136, -0x9193,0x9190,0x9191,0x918D,0x918F,0x9327,0x931E,0x9308, -0x931F,0x9306,0x930F,0x937A,0x9338,0x933C,0x931B,0x9323, -0x9312,0x9301,0x9346,0x932D,0x930E,0x930D,0x92CB,0x931D, -0x92FA,0x9325,0x9313,0x92F9,0x92F7,0x9334,0x9302,0x9324, -0x92FF,0x9329,0x9339,0x9335,0x932A,0x9314,0x930C, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x930B,0x92FE,0x9309,0x9300,0x92FB,0x9316,0x95BC,0x95CD, -0x95BE,0x95B9,0x95BA,0x95B6,0x95BF,0x95B5,0x95BD,0x96A9, -0x96D4,0x970B,0x9712,0x9710,0x9799,0x9797,0x9794,0x97F0, -0x97F8,0x9835,0x982F,0x9832,0x9924,0x991F,0x9927,0x9929, -0x999E,0x99EE,0x99EC,0x99E5,0x99E4,0x99F0,0x99E3,0x99EA, -0x99E9,0x99E7,0x9AB9,0x9ABF,0x9AB4,0x9ABB,0x9AF6,0x9AFA, -0x9AF9,0x9AF7,0x9B33,0x9B80,0x9B85,0x9B87,0x9B7C,0x9B7E, -0x9B7B,0x9B82,0x9B93,0x9B92,0x9B90,0x9B7A,0x9B95, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x9B7D,0x9B88,0x9D25,0x9D17,0x9D20,0x9D1E,0x9D14, -0x9D29,0x9D1D,0x9D18,0x9D22,0x9D10,0x9D19,0x9D1F,0x9E88, -0x9E86,0x9E87,0x9EAE,0x9EAD,0x9ED5,0x9ED6,0x9EFA,0x9F12, -0x9F3D,0x5126,0x5125,0x5122,0x5124,0x5120,0x5129,0x52F4, -0x5693,0x568C,0x568D,0x5686,0x5684,0x5683,0x567E,0x5682, -0x567F,0x5681,0x58D6,0x58D4,0x58CF,0x58D2,0x5B2D,0x5B25, -0x5B32,0x5B23,0x5B2C,0x5B27,0x5B26,0x5B2F,0x5B2E,0x5B7B, -0x5BF1,0x5BF2,0x5DB7,0x5E6C,0x5E6A,0x5FBE,0x5FBB,0x61C3, -0x61B5,0x61BC,0x61E7,0x61E0,0x61E5,0x61E4,0x61E8,0x61DE, -0x64EF,0x64E9,0x64E3,0x64EB,0x64E4,0x64E8,0x6581,0x6580, -0x65B6,0x65DA,0x66D2,0x6A8D,0x6A96,0x6A81,0x6AA5,0x6A89, -0x6A9F,0x6A9B,0x6AA1,0x6A9E,0x6A87,0x6A93,0x6A8E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6A95,0x6A83,0x6AA8,0x6AA4,0x6A91,0x6A7F,0x6AA6,0x6A9A, -0x6A85,0x6A8C,0x6A92,0x6B5B,0x6BAD,0x6C09,0x6FCC,0x6FA9, -0x6FF4,0x6FD4,0x6FE3,0x6FDC,0x6FED,0x6FE7,0x6FE6,0x6FDE, -0x6FF2,0x6FDD,0x6FE2,0x6FE8,0x71E1,0x71F1,0x71E8,0x71F2, -0x71E4,0x71F0,0x71E2,0x7373,0x736E,0x736F,0x7497,0x74B2, -0x74AB,0x7490,0x74AA,0x74AD,0x74B1,0x74A5,0x74AF,0x7510, -0x7511,0x7512,0x750F,0x7584,0x7643,0x7648,0x7649,0x7647, -0x76A4,0x76E9,0x77B5,0x77AB,0x77B2,0x77B7,0x77B6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x77B4,0x77B1,0x77A8,0x77F0,0x78F3,0x78FD,0x7902, -0x78FB,0x78FC,0x78F2,0x7905,0x78F9,0x78FE,0x7904,0x79AB, -0x79A8,0x7A5C,0x7A5B,0x7A56,0x7A58,0x7A54,0x7A5A,0x7ABE, -0x7AC0,0x7AC1,0x7C05,0x7C0F,0x7BF2,0x7C00,0x7BFF,0x7BFB, -0x7C0E,0x7BF4,0x7C0B,0x7BF3,0x7C02,0x7C09,0x7C03,0x7C01, -0x7BF8,0x7BFD,0x7C06,0x7BF0,0x7BF1,0x7C10,0x7C0A,0x7CE8, -0x7E2D,0x7E3C,0x7E42,0x7E33,0x9848,0x7E38,0x7E2A,0x7E49, -0x7E40,0x7E47,0x7E29,0x7E4C,0x7E30,0x7E3B,0x7E36,0x7E44, -0x7E3A,0x7F45,0x7F7F,0x7F7E,0x7F7D,0x7FF4,0x7FF2,0x802C, -0x81BB,0x81C4,0x81CC,0x81CA,0x81C5,0x81C7,0x81BC,0x81E9, -0x825B,0x825A,0x825C,0x8583,0x8580,0x858F,0x85A7,0x8595, -0x85A0,0x858B,0x85A3,0x857B,0x85A4,0x859A,0x859E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8577,0x857C,0x8589,0x85A1,0x857A,0x8578,0x8557,0x858E, -0x8596,0x8586,0x858D,0x8599,0x859D,0x8581,0x85A2,0x8582, -0x8588,0x8585,0x8579,0x8576,0x8598,0x8590,0x859F,0x8668, -0x87BE,0x87AA,0x87AD,0x87C5,0x87B0,0x87AC,0x87B9,0x87B5, -0x87BC,0x87AE,0x87C9,0x87C3,0x87C2,0x87CC,0x87B7,0x87AF, -0x87C4,0x87CA,0x87B4,0x87B6,0x87BF,0x87B8,0x87BD,0x87DE, -0x87B2,0x8935,0x8933,0x893C,0x893E,0x8941,0x8952,0x8937, -0x8942,0x89AD,0x89AF,0x89AE,0x89F2,0x89F3,0x8B1E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x8B18,0x8B16,0x8B11,0x8B05,0x8B0B,0x8B22,0x8B0F, -0x8B12,0x8B15,0x8B07,0x8B0D,0x8B08,0x8B06,0x8B1C,0x8B13, -0x8B1A,0x8C4F,0x8C70,0x8C72,0x8C71,0x8C6F,0x8C95,0x8C94, -0x8CF9,0x8D6F,0x8E4E,0x8E4D,0x8E53,0x8E50,0x8E4C,0x8E47, -0x8F43,0x8F40,0x9085,0x907E,0x9138,0x919A,0x91A2,0x919B, -0x9199,0x919F,0x91A1,0x919D,0x91A0,0x93A1,0x9383,0x93AF, -0x9364,0x9356,0x9347,0x937C,0x9358,0x935C,0x9376,0x9349, -0x9350,0x9351,0x9360,0x936D,0x938F,0x934C,0x936A,0x9379, -0x9357,0x9355,0x9352,0x934F,0x9371,0x9377,0x937B,0x9361, -0x935E,0x9363,0x9367,0x9380,0x934E,0x9359,0x95C7,0x95C0, -0x95C9,0x95C3,0x95C5,0x95B7,0x96AE,0x96B0,0x96AC,0x9720, -0x971F,0x9718,0x971D,0x9719,0x979A,0x97A1,0x979C, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x979E,0x979D,0x97D5,0x97D4,0x97F1,0x9841,0x9844,0x984A, -0x9849,0x9845,0x9843,0x9925,0x992B,0x992C,0x992A,0x9933, -0x9932,0x992F,0x992D,0x9931,0x9930,0x9998,0x99A3,0x99A1, -0x9A02,0x99FA,0x99F4,0x99F7,0x99F9,0x99F8,0x99F6,0x99FB, -0x99FD,0x99FE,0x99FC,0x9A03,0x9ABE,0x9AFE,0x9AFD,0x9B01, -0x9AFC,0x9B48,0x9B9A,0x9BA8,0x9B9E,0x9B9B,0x9BA6,0x9BA1, -0x9BA5,0x9BA4,0x9B86,0x9BA2,0x9BA0,0x9BAF,0x9D33,0x9D41, -0x9D67,0x9D36,0x9D2E,0x9D2F,0x9D31,0x9D38,0x9D30, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x9D45,0x9D42,0x9D43,0x9D3E,0x9D37,0x9D40,0x9D3D, -0x7FF5,0x9D2D,0x9E8A,0x9E89,0x9E8D,0x9EB0,0x9EC8,0x9EDA, -0x9EFB,0x9EFF,0x9F24,0x9F23,0x9F22,0x9F54,0x9FA0,0x5131, -0x512D,0x512E,0x5698,0x569C,0x5697,0x569A,0x569D,0x5699, -0x5970,0x5B3C,0x5C69,0x5C6A,0x5DC0,0x5E6D,0x5E6E,0x61D8, -0x61DF,0x61ED,0x61EE,0x61F1,0x61EA,0x61F0,0x61EB,0x61D6, -0x61E9,0x64FF,0x6504,0x64FD,0x64F8,0x6501,0x6503,0x64FC, -0x6594,0x65DB,0x66DA,0x66DB,0x66D8,0x6AC5,0x6AB9,0x6ABD, -0x6AE1,0x6AC6,0x6ABA,0x6AB6,0x6AB7,0x6AC7,0x6AB4,0x6AAD, -0x6B5E,0x6BC9,0x6C0B,0x7007,0x700C,0x700D,0x7001,0x7005, -0x7014,0x700E,0x6FFF,0x7000,0x6FFB,0x7026,0x6FFC,0x6FF7, -0x700A,0x7201,0x71FF,0x71F9,0x7203,0x71FD,0x7376, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x74B8,0x74C0,0x74B5,0x74C1,0x74BE,0x74B6,0x74BB,0x74C2, -0x7514,0x7513,0x765C,0x7664,0x7659,0x7650,0x7653,0x7657, -0x765A,0x76A6,0x76BD,0x76EC,0x77C2,0x77BA,0x78FF,0x790C, -0x7913,0x7914,0x7909,0x7910,0x7912,0x7911,0x79AD,0x79AC, -0x7A5F,0x7C1C,0x7C29,0x7C19,0x7C20,0x7C1F,0x7C2D,0x7C1D, -0x7C26,0x7C28,0x7C22,0x7C25,0x7C30,0x7E5C,0x7E50,0x7E56, -0x7E63,0x7E58,0x7E62,0x7E5F,0x7E51,0x7E60,0x7E57,0x7E53, -0x7FB5,0x7FB3,0x7FF7,0x7FF8,0x8075,0x81D1,0x81D2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x81D0,0x825F,0x825E,0x85B4,0x85C6,0x85C0,0x85C3, -0x85C2,0x85B3,0x85B5,0x85BD,0x85C7,0x85C4,0x85BF,0x85CB, -0x85CE,0x85C8,0x85C5,0x85B1,0x85B6,0x85D2,0x8624,0x85B8, -0x85B7,0x85BE,0x8669,0x87E7,0x87E6,0x87E2,0x87DB,0x87EB, -0x87EA,0x87E5,0x87DF,0x87F3,0x87E4,0x87D4,0x87DC,0x87D3, -0x87ED,0x87D8,0x87E3,0x87A4,0x87D7,0x87D9,0x8801,0x87F4, -0x87E8,0x87DD,0x8953,0x894B,0x894F,0x894C,0x8946,0x8950, -0x8951,0x8949,0x8B2A,0x8B27,0x8B23,0x8B33,0x8B30,0x8B35, -0x8B47,0x8B2F,0x8B3C,0x8B3E,0x8B31,0x8B25,0x8B37,0x8B26, -0x8B36,0x8B2E,0x8B24,0x8B3B,0x8B3D,0x8B3A,0x8C42,0x8C75, -0x8C99,0x8C98,0x8C97,0x8CFE,0x8D04,0x8D02,0x8D00,0x8E5C, -0x8E62,0x8E60,0x8E57,0x8E56,0x8E5E,0x8E65,0x8E67, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8E5B,0x8E5A,0x8E61,0x8E5D,0x8E69,0x8E54,0x8F46,0x8F47, -0x8F48,0x8F4B,0x9128,0x913A,0x913B,0x913E,0x91A8,0x91A5, -0x91A7,0x91AF,0x91AA,0x93B5,0x938C,0x9392,0x93B7,0x939B, -0x939D,0x9389,0x93A7,0x938E,0x93AA,0x939E,0x93A6,0x9395, -0x9388,0x9399,0x939F,0x938D,0x93B1,0x9391,0x93B2,0x93A4, -0x93A8,0x93B4,0x93A3,0x93A5,0x95D2,0x95D3,0x95D1,0x96B3, -0x96D7,0x96DA,0x5DC2,0x96DF,0x96D8,0x96DD,0x9723,0x9722, -0x9725,0x97AC,0x97AE,0x97A8,0x97AB,0x97A4,0x97AA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x97A2,0x97A5,0x97D7,0x97D9,0x97D6,0x97D8,0x97FA, -0x9850,0x9851,0x9852,0x98B8,0x9941,0x993C,0x993A,0x9A0F, -0x9A0B,0x9A09,0x9A0D,0x9A04,0x9A11,0x9A0A,0x9A05,0x9A07, -0x9A06,0x9AC0,0x9ADC,0x9B08,0x9B04,0x9B05,0x9B29,0x9B35, -0x9B4A,0x9B4C,0x9B4B,0x9BC7,0x9BC6,0x9BC3,0x9BBF,0x9BC1, -0x9BB5,0x9BB8,0x9BD3,0x9BB6,0x9BC4,0x9BB9,0x9BBD,0x9D5C, -0x9D53,0x9D4F,0x9D4A,0x9D5B,0x9D4B,0x9D59,0x9D56,0x9D4C, -0x9D57,0x9D52,0x9D54,0x9D5F,0x9D58,0x9D5A,0x9E8E,0x9E8C, -0x9EDF,0x9F01,0x9F00,0x9F16,0x9F25,0x9F2B,0x9F2A,0x9F29, -0x9F28,0x9F4C,0x9F55,0x5134,0x5135,0x5296,0x52F7,0x53B4, -0x56AB,0x56AD,0x56A6,0x56A7,0x56AA,0x56AC,0x58DA,0x58DD, -0x58DB,0x5912,0x5B3D,0x5B3E,0x5B3F,0x5DC3,0x5E70, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5FBF,0x61FB,0x6507,0x6510,0x650D,0x6509,0x650C,0x650E, -0x6584,0x65DE,0x65DD,0x66DE,0x6AE7,0x6AE0,0x6ACC,0x6AD1, -0x6AD9,0x6ACB,0x6ADF,0x6ADC,0x6AD0,0x6AEB,0x6ACF,0x6ACD, -0x6ADE,0x6B60,0x6BB0,0x6C0C,0x7019,0x7027,0x7020,0x7016, -0x702B,0x7021,0x7022,0x7023,0x7029,0x7017,0x7024,0x701C, -0x702A,0x720C,0x720A,0x7207,0x7202,0x7205,0x72A5,0x72A6, -0x72A4,0x72A3,0x72A1,0x74CB,0x74C5,0x74B7,0x74C3,0x7516, -0x7660,0x77C9,0x77CA,0x77C4,0x77F1,0x791D,0x791B, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7921,0x791C,0x7917,0x791E,0x79B0,0x7A67,0x7A68, -0x7C33,0x7C3C,0x7C39,0x7C2C,0x7C3B,0x7CEC,0x7CEA,0x7E76, -0x7E75,0x7E78,0x7E70,0x7E77,0x7E6F,0x7E7A,0x7E72,0x7E74, -0x7E68,0x7F4B,0x7F4A,0x7F83,0x7F86,0x7FB7,0x7FFD,0x7FFE, -0x8078,0x81D7,0x81D5,0x8264,0x8261,0x8263,0x85EB,0x85F1, -0x85ED,0x85D9,0x85E1,0x85E8,0x85DA,0x85D7,0x85EC,0x85F2, -0x85F8,0x85D8,0x85DF,0x85E3,0x85DC,0x85D1,0x85F0,0x85E6, -0x85EF,0x85DE,0x85E2,0x8800,0x87FA,0x8803,0x87F6,0x87F7, -0x8809,0x880C,0x880B,0x8806,0x87FC,0x8808,0x87FF,0x880A, -0x8802,0x8962,0x895A,0x895B,0x8957,0x8961,0x895C,0x8958, -0x895D,0x8959,0x8988,0x89B7,0x89B6,0x89F6,0x8B50,0x8B48, -0x8B4A,0x8B40,0x8B53,0x8B56,0x8B54,0x8B4B,0x8B55, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8B51,0x8B42,0x8B52,0x8B57,0x8C43,0x8C77,0x8C76,0x8C9A, -0x8D06,0x8D07,0x8D09,0x8DAC,0x8DAA,0x8DAD,0x8DAB,0x8E6D, -0x8E78,0x8E73,0x8E6A,0x8E6F,0x8E7B,0x8EC2,0x8F52,0x8F51, -0x8F4F,0x8F50,0x8F53,0x8FB4,0x9140,0x913F,0x91B0,0x91AD, -0x93DE,0x93C7,0x93CF,0x93C2,0x93DA,0x93D0,0x93F9,0x93EC, -0x93CC,0x93D9,0x93A9,0x93E6,0x93CA,0x93D4,0x93EE,0x93E3, -0x93D5,0x93C4,0x93CE,0x93C0,0x93D2,0x93E7,0x957D,0x95DA, -0x95DB,0x96E1,0x9729,0x972B,0x972C,0x9728,0x9726, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x97B3,0x97B7,0x97B6,0x97DD,0x97DE,0x97DF,0x985C, -0x9859,0x985D,0x9857,0x98BF,0x98BD,0x98BB,0x98BE,0x9948, -0x9947,0x9943,0x99A6,0x99A7,0x9A1A,0x9A15,0x9A25,0x9A1D, -0x9A24,0x9A1B,0x9A22,0x9A20,0x9A27,0x9A23,0x9A1E,0x9A1C, -0x9A14,0x9AC2,0x9B0B,0x9B0A,0x9B0E,0x9B0C,0x9B37,0x9BEA, -0x9BEB,0x9BE0,0x9BDE,0x9BE4,0x9BE6,0x9BE2,0x9BF0,0x9BD4, -0x9BD7,0x9BEC,0x9BDC,0x9BD9,0x9BE5,0x9BD5,0x9BE1,0x9BDA, -0x9D77,0x9D81,0x9D8A,0x9D84,0x9D88,0x9D71,0x9D80,0x9D78, -0x9D86,0x9D8B,0x9D8C,0x9D7D,0x9D6B,0x9D74,0x9D75,0x9D70, -0x9D69,0x9D85,0x9D73,0x9D7B,0x9D82,0x9D6F,0x9D79,0x9D7F, -0x9D87,0x9D68,0x9E94,0x9E91,0x9EC0,0x9EFC,0x9F2D,0x9F40, -0x9F41,0x9F4D,0x9F56,0x9F57,0x9F58,0x5337,0x56B2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x56B5,0x56B3,0x58E3,0x5B45,0x5DC6,0x5DC7,0x5EEE,0x5EEF, -0x5FC0,0x5FC1,0x61F9,0x6517,0x6516,0x6515,0x6513,0x65DF, -0x66E8,0x66E3,0x66E4,0x6AF3,0x6AF0,0x6AEA,0x6AE8,0x6AF9, -0x6AF1,0x6AEE,0x6AEF,0x703C,0x7035,0x702F,0x7037,0x7034, -0x7031,0x7042,0x7038,0x703F,0x703A,0x7039,0x7040,0x703B, -0x7033,0x7041,0x7213,0x7214,0x72A8,0x737D,0x737C,0x74BA, -0x76AB,0x76AA,0x76BE,0x76ED,0x77CC,0x77CE,0x77CF,0x77CD, -0x77F2,0x7925,0x7923,0x7927,0x7928,0x7924,0x7929, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x79B2,0x7A6E,0x7A6C,0x7A6D,0x7AF7,0x7C49,0x7C48, -0x7C4A,0x7C47,0x7C45,0x7CEE,0x7E7B,0x7E7E,0x7E81,0x7E80, -0x7FBA,0x7FFF,0x8079,0x81DB,0x81D9,0x820B,0x8268,0x8269, -0x8622,0x85FF,0x8601,0x85FE,0x861B,0x8600,0x85F6,0x8604, -0x8609,0x8605,0x860C,0x85FD,0x8819,0x8810,0x8811,0x8817, -0x8813,0x8816,0x8963,0x8966,0x89B9,0x89F7,0x8B60,0x8B6A, -0x8B5D,0x8B68,0x8B63,0x8B65,0x8B67,0x8B6D,0x8DAE,0x8E86, -0x8E88,0x8E84,0x8F59,0x8F56,0x8F57,0x8F55,0x8F58,0x8F5A, -0x908D,0x9143,0x9141,0x91B7,0x91B5,0x91B2,0x91B3,0x940B, -0x9413,0x93FB,0x9420,0x940F,0x9414,0x93FE,0x9415,0x9410, -0x9428,0x9419,0x940D,0x93F5,0x9400,0x93F7,0x9407,0x940E, -0x9416,0x9412,0x93FA,0x9409,0x93F8,0x940A,0x93FF, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x93FC,0x940C,0x93F6,0x9411,0x9406,0x95DE,0x95E0,0x95DF, -0x972E,0x972F,0x97B9,0x97BB,0x97FD,0x97FE,0x9860,0x9862, -0x9863,0x985F,0x98C1,0x98C2,0x9950,0x994E,0x9959,0x994C, -0x994B,0x9953,0x9A32,0x9A34,0x9A31,0x9A2C,0x9A2A,0x9A36, -0x9A29,0x9A2E,0x9A38,0x9A2D,0x9AC7,0x9ACA,0x9AC6,0x9B10, -0x9B12,0x9B11,0x9C0B,0x9C08,0x9BF7,0x9C05,0x9C12,0x9BF8, -0x9C40,0x9C07,0x9C0E,0x9C06,0x9C17,0x9C14,0x9C09,0x9D9F, -0x9D99,0x9DA4,0x9D9D,0x9D92,0x9D98,0x9D90,0x9D9B, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x9DA0,0x9D94,0x9D9C,0x9DAA,0x9D97,0x9DA1,0x9D9A, -0x9DA2,0x9DA8,0x9D9E,0x9DA3,0x9DBF,0x9DA9,0x9D96,0x9DA6, -0x9DA7,0x9E99,0x9E9B,0x9E9A,0x9EE5,0x9EE4,0x9EE7,0x9EE6, -0x9F30,0x9F2E,0x9F5B,0x9F60,0x9F5E,0x9F5D,0x9F59,0x9F91, -0x513A,0x5139,0x5298,0x5297,0x56C3,0x56BD,0x56BE,0x5B48, -0x5B47,0x5DCB,0x5DCF,0x5EF1,0x61FD,0x651B,0x6B02,0x6AFC, -0x6B03,0x6AF8,0x6B00,0x7043,0x7044,0x704A,0x7048,0x7049, -0x7045,0x7046,0x721D,0x721A,0x7219,0x737E,0x7517,0x766A, -0x77D0,0x792D,0x7931,0x792F,0x7C54,0x7C53,0x7CF2,0x7E8A, -0x7E87,0x7E88,0x7E8B,0x7E86,0x7E8D,0x7F4D,0x7FBB,0x8030, -0x81DD,0x8618,0x862A,0x8626,0x861F,0x8623,0x861C,0x8619, -0x8627,0x862E,0x8621,0x8620,0x8629,0x861E,0x8625, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8829,0x881D,0x881B,0x8820,0x8824,0x881C,0x882B,0x884A, -0x896D,0x8969,0x896E,0x896B,0x89FA,0x8B79,0x8B78,0x8B45, -0x8B7A,0x8B7B,0x8D10,0x8D14,0x8DAF,0x8E8E,0x8E8C,0x8F5E, -0x8F5B,0x8F5D,0x9146,0x9144,0x9145,0x91B9,0x943F,0x943B, -0x9436,0x9429,0x943D,0x943C,0x9430,0x9439,0x942A,0x9437, -0x942C,0x9440,0x9431,0x95E5,0x95E4,0x95E3,0x9735,0x973A, -0x97BF,0x97E1,0x9864,0x98C9,0x98C6,0x98C0,0x9958,0x9956, -0x9A39,0x9A3D,0x9A46,0x9A44,0x9A42,0x9A41,0x9A3A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x9A3F,0x9ACD,0x9B15,0x9B17,0x9B18,0x9B16,0x9B3A, -0x9B52,0x9C2B,0x9C1D,0x9C1C,0x9C2C,0x9C23,0x9C28,0x9C29, -0x9C24,0x9C21,0x9DB7,0x9DB6,0x9DBC,0x9DC1,0x9DC7,0x9DCA, -0x9DCF,0x9DBE,0x9DC5,0x9DC3,0x9DBB,0x9DB5,0x9DCE,0x9DB9, -0x9DBA,0x9DAC,0x9DC8,0x9DB1,0x9DAD,0x9DCC,0x9DB3,0x9DCD, -0x9DB2,0x9E7A,0x9E9C,0x9EEB,0x9EEE,0x9EED,0x9F1B,0x9F18, -0x9F1A,0x9F31,0x9F4E,0x9F65,0x9F64,0x9F92,0x4EB9,0x56C6, -0x56C5,0x56CB,0x5971,0x5B4B,0x5B4C,0x5DD5,0x5DD1,0x5EF2, -0x6521,0x6520,0x6526,0x6522,0x6B0B,0x6B08,0x6B09,0x6C0D, -0x7055,0x7056,0x7057,0x7052,0x721E,0x721F,0x72A9,0x737F, -0x74D8,0x74D5,0x74D9,0x74D7,0x766D,0x76AD,0x7935,0x79B4, -0x7A70,0x7A71,0x7C57,0x7C5C,0x7C59,0x7C5B,0x7C5A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7CF4,0x7CF1,0x7E91,0x7F4F,0x7F87,0x81DE,0x826B,0x8634, -0x8635,0x8633,0x862C,0x8632,0x8636,0x882C,0x8828,0x8826, -0x882A,0x8825,0x8971,0x89BF,0x89BE,0x89FB,0x8B7E,0x8B84, -0x8B82,0x8B86,0x8B85,0x8B7F,0x8D15,0x8E95,0x8E94,0x8E9A, -0x8E92,0x8E90,0x8E96,0x8E97,0x8F60,0x8F62,0x9147,0x944C, -0x9450,0x944A,0x944B,0x944F,0x9447,0x9445,0x9448,0x9449, -0x9446,0x973F,0x97E3,0x986A,0x9869,0x98CB,0x9954,0x995B, -0x9A4E,0x9A53,0x9A54,0x9A4C,0x9A4F,0x9A48,0x9A4A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x9A49,0x9A52,0x9A50,0x9AD0,0x9B19,0x9B2B,0x9B3B, -0x9B56,0x9B55,0x9C46,0x9C48,0x9C3F,0x9C44,0x9C39,0x9C33, -0x9C41,0x9C3C,0x9C37,0x9C34,0x9C32,0x9C3D,0x9C36,0x9DDB, -0x9DD2,0x9DDE,0x9DDA,0x9DCB,0x9DD0,0x9DDC,0x9DD1,0x9DDF, -0x9DE9,0x9DD9,0x9DD8,0x9DD6,0x9DF5,0x9DD5,0x9DDD,0x9EB6, -0x9EF0,0x9F35,0x9F33,0x9F32,0x9F42,0x9F6B,0x9F95,0x9FA2, -0x513D,0x5299,0x58E8,0x58E7,0x5972,0x5B4D,0x5DD8,0x882F, -0x5F4F,0x6201,0x6203,0x6204,0x6529,0x6525,0x6596,0x66EB, -0x6B11,0x6B12,0x6B0F,0x6BCA,0x705B,0x705A,0x7222,0x7382, -0x7381,0x7383,0x7670,0x77D4,0x7C67,0x7C66,0x7E95,0x826C, -0x863A,0x8640,0x8639,0x863C,0x8631,0x863B,0x863E,0x8830, -0x8832,0x882E,0x8833,0x8976,0x8974,0x8973,0x89FE, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8B8C,0x8B8E,0x8B8B,0x8B88,0x8C45,0x8D19,0x8E98,0x8F64, -0x8F63,0x91BC,0x9462,0x9455,0x945D,0x9457,0x945E,0x97C4, -0x97C5,0x9800,0x9A56,0x9A59,0x9B1E,0x9B1F,0x9B20,0x9C52, -0x9C58,0x9C50,0x9C4A,0x9C4D,0x9C4B,0x9C55,0x9C59,0x9C4C, -0x9C4E,0x9DFB,0x9DF7,0x9DEF,0x9DE3,0x9DEB,0x9DF8,0x9DE4, -0x9DF6,0x9DE1,0x9DEE,0x9DE6,0x9DF2,0x9DF0,0x9DE2,0x9DEC, -0x9DF4,0x9DF3,0x9DE8,0x9DED,0x9EC2,0x9ED0,0x9EF2,0x9EF3, -0x9F06,0x9F1C,0x9F38,0x9F37,0x9F36,0x9F43,0x9F4F, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x9F71,0x9F70,0x9F6E,0x9F6F,0x56D3,0x56CD,0x5B4E, -0x5C6D,0x652D,0x66ED,0x66EE,0x6B13,0x705F,0x7061,0x705D, -0x7060,0x7223,0x74DB,0x74E5,0x77D5,0x7938,0x79B7,0x79B6, -0x7C6A,0x7E97,0x7F89,0x826D,0x8643,0x8838,0x8837,0x8835, -0x884B,0x8B94,0x8B95,0x8E9E,0x8E9F,0x8EA0,0x8E9D,0x91BE, -0x91BD,0x91C2,0x946B,0x9468,0x9469,0x96E5,0x9746,0x9743, -0x9747,0x97C7,0x97E5,0x9A5E,0x9AD5,0x9B59,0x9C63,0x9C67, -0x9C66,0x9C62,0x9C5E,0x9C60,0x9E02,0x9DFE,0x9E07,0x9E03, -0x9E06,0x9E05,0x9E00,0x9E01,0x9E09,0x9DFF,0x9DFD,0x9E04, -0x9EA0,0x9F1E,0x9F46,0x9F74,0x9F75,0x9F76,0x56D4,0x652E, -0x65B8,0x6B18,0x6B19,0x6B17,0x6B1A,0x7062,0x7226,0x72AA, -0x77D8,0x77D9,0x7939,0x7C69,0x7C6B,0x7CF6,0x7E9A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7E98,0x7E9B,0x7E99,0x81E0,0x81E1,0x8646,0x8647,0x8648, -0x8979,0x897A,0x897C,0x897B,0x89FF,0x8B98,0x8B99,0x8EA5, -0x8EA4,0x8EA3,0x946E,0x946D,0x946F,0x9471,0x9473,0x9749, -0x9872,0x995F,0x9C68,0x9C6E,0x9C6D,0x9E0B,0x9E0D,0x9E10, -0x9E0F,0x9E12,0x9E11,0x9EA1,0x9EF5,0x9F09,0x9F47,0x9F78, -0x9F7B,0x9F7A,0x9F79,0x571E,0x7066,0x7C6F,0x883C,0x8DB2, -0x8EA6,0x91C3,0x9474,0x9478,0x9476,0x9475,0x9A60,0x9C74, -0x9C73,0x9C71,0x9C75,0x9E14,0x9E13,0x9EF6,0x9F0A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x9FA4,0x7068,0x7065,0x7CF7,0x866A,0x883E,0x883D, -0x883F,0x8B9E,0x8C9C,0x8EA9,0x8EC9,0x974B,0x9873,0x9874, -0x98CC,0x9961,0x99AB,0x9A64,0x9A66,0x9A67,0x9B24,0x9E15, -0x9E17,0x9F48,0x6207,0x6B1E,0x7227,0x864C,0x8EA8,0x9482, -0x9480,0x9481,0x9A69,0x9A68,0x9B2E,0x9E19,0x7229,0x864B, -0x8B9F,0x9483,0x9C79,0x9EB7,0x7675,0x9A6B,0x9C7A,0x9E1D, -0x7069,0x706A,0x9EA4,0x9F7E,0x9F49,0x9F98,0x7881,0x92B9, -0x88CF,0x58BB,0x6052,0x7CA7,0x5AFA}; - -static int func_big5_uni_onechar(int code){ - if ((code>=0xA140)&&(code<=0xC7FC)) - return(tab_big5_uni0[code-0xA140]); - if ((code>=0xC940)&&(code<=0xF9DC)) - return(tab_big5_uni1[code-0xC940]); - return(0); -} - - -/* page 0 0x00A2-0x00F7 */ -static uint16 tab_uni_big50[]={ -0xA246,0xA247, 0,0xA244, 0,0xA1B1, 0, 0, - 0, 0, 0, 0, 0, 0,0xA258,0xA1D3, - 0, 0, 0, 0, 0,0xA150, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA1D1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA1D2}; - -/* page 1 0x02C7-0x0451 */ -static uint16 tab_uni_big51[]={ -0xA3BE, 0,0xA3BC,0xA3BD,0xA3BF, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xA3BB, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xA344,0xA345,0xA346,0xA347,0xA348,0xA349, -0xA34A,0xA34B,0xA34C,0xA34D,0xA34E,0xA34F,0xA350,0xA351, -0xA352,0xA353,0xA354, 0,0xA355,0xA356,0xA357,0xA358, -0xA359,0xA35A,0xA35B, 0, 0, 0, 0, 0, - 0, 0,0xA35C,0xA35D,0xA35E,0xA35F,0xA360,0xA361, -0xA362,0xA363,0xA364,0xA365,0xA366,0xA367,0xA368,0xA369, -0xA36A,0xA36B,0xA36C, 0,0xA36D,0xA36E,0xA36F,0xA370, -0xA371,0xA372,0xA373, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xC7B3, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xC7B1,0xC7B2,0xC7B4, -0xC7B5,0xC7B6,0xC7B7,0xC7B8,0xC7B9,0xC7BA, 0, 0, - 0, 0, 0, 0,0xC7BB,0xC7BC,0xC7BD,0xC7BE, -0xC7BF,0xC7C0,0xC7C1,0xC7C2,0xC7C3,0xC7C4,0xC7C5,0xC7C6, -0xC7C7,0xC7C8,0xC7C9,0xC7CA,0xC7CB,0xC7CC,0xC7CD,0xC7CF, -0xC7D0,0xC7D1,0xC7D2,0xC7D3,0xC7D4,0xC7D5,0xC7D6,0xC7D7, -0xC7D8,0xC7D9,0xC7DA,0xC7DB,0xC7DC,0xC7DD,0xC7DE,0xC7DF, -0xC7E0,0xC7E1,0xC7E2,0xC7E3,0xC7E4,0xC7E5,0xC7E6,0xC7E7, -0xC7E8, 0,0xC7CE}; - -/* page 2 0x2013-0x22BF */ -static uint16 tab_uni_big52[]={ -0xA156,0xA158, 0, 0, 0,0xA1A5,0xA1A6, 0, - 0,0xA1A7,0xA1A8, 0, 0, 0, 0,0xA145, - 0, 0,0xA14C,0xA14B, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xA1AC, - 0, 0,0xA1AB, 0, 0, 0, 0, 0, -0xA1B0, 0, 0,0xA1C2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA24A, 0,0xA1C1, 0, 0, 0,0xA24B, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA2B9,0xA2BA,0xA2BB, -0xA2BC,0xA2BD,0xA2BE,0xA2BF,0xA2C0,0xA2C1,0xA2C2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA1F6,0xA1F4,0xA1F7, -0xA1F5, 0, 0,0xA1F8,0xA1F9,0xA1FB,0xA1FA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xA1D4, - 0, 0, 0,0xA1DB,0xA1E8,0xA1E7, 0, 0, -0xA1FD, 0,0xA1FC, 0, 0, 0,0xA1E4,0xA1E5, -0xA1EC, 0, 0,0xA1ED, 0, 0, 0, 0, - 0,0xA1EF,0xA1EE, 0, 0, 0, 0, 0, - 0,0xA1E3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xA1DC, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA1DA,0xA1DD, 0, - 0, 0, 0,0xA1D8,0xA1D9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xA1E6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xA1E9}; - -/* page 3 0x2460-0x2642 */ -static uint16 tab_uni_big53[]={ -0xC7E9,0xC7EA,0xC7EB,0xC7EC,0xC7ED,0xC7EE,0xC7EF,0xC7F0, -0xC7F1,0xC7F2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xC7F3,0xC7F4,0xC7F5,0xC7F6, -0xC7F7,0xC7F8,0xC7F9,0xC7FA,0xC7FB,0xC7FC, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA277, 0,0xA278, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xA27A, 0, 0, 0, -0xA27B, 0, 0, 0,0xA27C, 0, 0, 0, -0xA27D, 0, 0, 0,0xA275, 0, 0, 0, - 0, 0, 0, 0,0xA274, 0, 0, 0, - 0, 0, 0, 0,0xA273, 0, 0, 0, - 0, 0, 0, 0,0xA272, 0, 0, 0, - 0, 0, 0, 0,0xA271, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA2A4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xA2A5, 0, - 0,0xA2A7, 0, 0, 0, 0, 0, 0, - 0, 0,0xA2A6, 0, 0,0xA27E,0xA2A1,0xA2A3, -0xA2A2,0xA2AC,0xA2AD,0xA2AE, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xA262,0xA263,0xA264,0xA265,0xA266,0xA267,0xA268, -0xA269,0xA270,0xA26F,0xA26E,0xA26D,0xA26C,0xA26B,0xA26A, - 0, 0, 0, 0,0xA276,0xA279, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA1BD,0xA1BC, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xA1B6,0xA1B5, 0, 0, 0, 0, - 0, 0, 0, 0,0xA1BF,0xA1BE, 0, 0, - 0, 0, 0, 0, 0, 0,0xA1BB,0xA1BA, - 0, 0, 0,0xA1B3, 0, 0,0xA1B7,0xA1B4, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xA2A8,0xA2A9,0xA2AB,0xA2AA, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA1B9,0xA1B8, 0, - 0,0xA1F3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA1F0,0xA1F2,0xA1F1}; - -/* page 4 0x3000-0x3129 */ -static uint16 tab_uni_big54[]={ -0xA140,0xA142,0xA143,0xA1B2, 0,0xC6A4, 0, 0, -0xA171,0xA172,0xA16D,0xA16E,0xA175,0xA176,0xA179,0xA17A, -0xA169,0xA16A,0xA245, 0,0xA165,0xA166, 0, 0, - 0, 0, 0, 0, 0,0xA1A9,0xA1AA, 0, - 0,0xA2C3,0xA2C4,0xA2C5,0xA2C6,0xA2C7,0xA2C8,0xA2C9, -0xA2CA,0xA2CB, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xC6A5,0xC6A6,0xC6A7,0xC6A8,0xC6A9,0xC6AA,0xC6AB, -0xC6AC,0xC6AD,0xC6AE,0xC6AF,0xC6B0,0xC6B1,0xC6B2,0xC6B3, -0xC6B4,0xC6B5,0xC6B6,0xC6B7,0xC6B8,0xC6B9,0xC6BA,0xC6BB, -0xC6BC,0xC6BD,0xC6BE,0xC6BF,0xC6C0,0xC6C1,0xC6C2,0xC6C3, -0xC6C4,0xC6C5,0xC6C6,0xC6C7,0xC6C8,0xC6C9,0xC6CA,0xC6CB, -0xC6CC,0xC6CD,0xC6CE,0xC6CF,0xC6D0,0xC6D1,0xC6D2,0xC6D3, -0xC6D4,0xC6D5,0xC6D6,0xC6D7,0xC6D8,0xC6D9,0xC6DA,0xC6DB, -0xC6DC,0xC6DD,0xC6DE,0xC6DF,0xC6E0,0xC6E1,0xC6E2,0xC6E3, -0xC6E4,0xC6E5,0xC6E6,0xC6E7,0xC6E8,0xC6E9,0xC6EA,0xC6EB, -0xC6EC,0xC6ED,0xC6EE,0xC6EF,0xC6F0,0xC6F1,0xC6F2,0xC6F3, -0xC6F4,0xC6F5,0xC6F6,0xC6F7, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xC6A2,0xC6A3, 0, - 0,0xC6F8,0xC6F9,0xC6FA,0xC6FB,0xC6FC,0xC6FD,0xC6FE, -0xC740,0xC741,0xC742,0xC743,0xC744,0xC745,0xC746,0xC747, -0xC748,0xC749,0xC74A,0xC74B,0xC74C,0xC74D,0xC74E,0xC74F, -0xC750,0xC751,0xC752,0xC753,0xC754,0xC755,0xC756,0xC757, -0xC758,0xC759,0xC75A,0xC75B,0xC75C,0xC75D,0xC75E,0xC75F, -0xC760,0xC761,0xC762,0xC763,0xC764,0xC765,0xC766,0xC767, -0xC768,0xC769,0xC76A,0xC76B,0xC76C,0xC76D,0xC76E,0xC76F, -0xC770,0xC771,0xC772,0xC773,0xC774,0xC775,0xC776,0xC777, -0xC778,0xC779,0xC77A,0xC77B,0xC77C,0xC77D,0xC77E,0xC7A1, -0xC7A2,0xC7A3,0xC7A4,0xC7A5,0xC7A6,0xC7A7,0xC7A8,0xC7A9, -0xC7AA,0xC7AB,0xC7AC,0xC7AD,0xC7AE,0xC7AF,0xC7B0, 0, - 0, 0, 0, 0, 0, 0,0xC6A1, 0, - 0, 0, 0, 0, 0,0xA374,0xA375,0xA376, -0xA377,0xA378,0xA379,0xA37A,0xA37B,0xA37C,0xA37D,0xA37E, -0xA3A1,0xA3A2,0xA3A3,0xA3A4,0xA3A5,0xA3A6,0xA3A7,0xA3A8, -0xA3A9,0xA3AA,0xA3AB,0xA3AC,0xA3AD,0xA3AE,0xA3AF,0xA3B0, -0xA3B1,0xA3B2,0xA3B3,0xA3B4,0xA3B5,0xA3B6,0xA3B7,0xA3B8, -0xA3B9,0xA3BA}; - -/* page 5 0x32A3-0x32A3 */ -static uint16 tab_uni_big55[]={ -0xA1C0}; - -/* page 6 0x338E-0x33D5 */ -static uint16 tab_uni_big56[]={ -0xA255,0xA256, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xA250,0xA251, -0xA252, 0, 0,0xA254, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xA257, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA253, 0, 0,0xA1EB,0xA1EA, 0, 0,0xA24F -}; - -/* page 7 0x4E00-0x9483 */ -static uint16 tab_uni_big57[]={ -0xA440,0xA442, 0,0xA443, 0, 0, 0,0xC945, -0xA456,0xA454,0xA457,0xA455,0xC946,0xA4A3,0xC94F,0xC94D, -0xA4A2,0xA4A1, 0, 0,0xA542,0xA541,0xA540, 0, -0xA543,0xA4FE, 0, 0, 0, 0,0xA5E0,0xA5E1, - 0, 0, 0, 0, 0, 0,0xA8C3, 0, - 0, 0, 0,0xA458, 0,0xA4A4,0xC950, 0, -0xA4A5,0xC963,0xA6EA,0xCBB1, 0, 0, 0, 0, -0xA459,0xA4A6, 0,0xA544,0xC964, 0, 0, 0, - 0, 0,0xC940,0xA444, 0,0xA45B, 0,0xC947, -0xA45C, 0, 0,0xA4A7, 0,0xA545,0xA547,0xA546, - 0, 0,0xA5E2,0xA5E3, 0, 0,0xA8C4, 0, -0xADBC,0xA441, 0, 0,0xC941,0xA445,0xA45E,0xA45D, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xA5E4, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xA8C5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xB0AE,0xD44B, - 0, 0,0xB6C3,0xDCB1,0xDCB2, 0,0xA446, 0, -0xA4A9, 0, 0,0xA8C6,0xA447,0xC948,0xA45F, 0, - 0,0xA4AA,0xA4AC,0xC951,0xA4AD,0xA4AB, 0, 0, - 0,0xA5E5, 0,0xA8C7, 0, 0,0xA8C8,0xAB45, - 0,0xA460,0xA4AE, 0,0xA5E6,0xA5E8,0xA5E7, 0, -0xA6EB, 0, 0,0xA8C9,0xA8CA,0xAB46,0xAB47, 0, - 0, 0, 0,0xADBD, 0, 0,0xDCB3, 0, - 0,0xF6D6,0xA448, 0, 0, 0, 0, 0, -0xA4B0,0xA4AF,0xC952,0xA4B1,0xA4B7, 0,0xA4B2,0xA4B3, -0xC954,0xC953,0xA4B5,0xA4B6, 0,0xA4B4, 0, 0, - 0, 0, 0, 0,0xA54A,0xA54B,0xA54C,0xA54D, -0xA549,0xA550,0xC96A, 0,0xC966,0xC969,0xA551,0xA561, - 0,0xC968, 0,0xA54E,0xA54F,0xA548, 0, 0, -0xC965,0xC967, 0, 0, 0, 0, 0, 0, -0xA5F5,0xC9B0,0xA5F2,0xA5F6,0xC9BA,0xC9AE,0xA5F3,0xC9B2, - 0, 0, 0,0xA5F4, 0,0xA5F7, 0,0xA5E9, -0xC9B1,0xA5F8,0xC9B5, 0,0xC9B9,0xC9B6, 0, 0, -0xC9B3,0xA5EA,0xA5EC,0xA5F9, 0,0xA5EE,0xC9AB,0xA5F1, -0xA5EF,0xA5F0,0xC9BB,0xC9B8,0xC9AF,0xA5ED, 0, 0, -0xC9AC,0xA5EB, 0, 0, 0,0xC9B4, 0, 0, - 0, 0,0xC9B7, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xC9AD,0xCA66, 0,0xA742, -0xA6F4, 0, 0,0xCA67,0xA6F1, 0,0xA744, 0, -0xA6F9, 0,0xA6F8,0xCA5B,0xA6FC,0xA6F7,0xCA60,0xCA68, - 0,0xCA64, 0,0xA6FA, 0, 0,0xA6FD,0xA6EE, -0xA747,0xCA5D, 0, 0,0xCBBD,0xA6EC,0xA743,0xA6ED, -0xA6F5,0xA6F6,0xCA62,0xCA5E,0xA6FB,0xA6F3,0xCA5A,0xA6EF, -0xCA65,0xA745,0xA748,0xA6F2,0xA740,0xA746,0xA6F0,0xCA63, -0xA741,0xCA69,0xCA5C,0xA6FE,0xCA5F, 0, 0,0xCA61, - 0,0xA8D8,0xCBBF,0xCBCB,0xA8D0, 0,0xCBCC,0xA8CB, -0xA8D5, 0, 0,0xA8CE,0xCBB9,0xA8D6,0xCBB8,0xCBBC, -0xCBC3,0xCBC1,0xA8DE,0xA8D9,0xCBB3,0xCBB5,0xA8DB,0xA8CF, -0xCBB6,0xCBC2,0xCBC9,0xA8D4,0xCBBB,0xCBB4,0xA8D3,0xCBB7, -0xA8D7,0xCBBA, 0,0xA8D2, 0,0xA8CD, 0,0xA8DC, -0xCBC4,0xA8DD,0xCBC8, 0,0xCBC6,0xCBCA,0xA8DA,0xCBBE, -0xCBB2, 0,0xCBC0,0xA8D1,0xCBC5,0xA8CC,0xCBC7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xAB56,0xAB4A, - 0, 0,0xCDE0,0xCDE8, 0,0xAB49,0xAB51,0xAB5D, - 0,0xCDEE,0xCDEC,0xCDE7, 0, 0, 0,0xAB4B, -0xCDED,0xCDE3,0xAB59,0xAB50,0xAB58,0xCDDE, 0,0xCDEA, - 0,0xCDE1,0xAB54,0xCDE2, 0,0xCDDD,0xAB5B,0xAB4E, -0xAB57,0xAB4D, 0,0xCDDF,0xCDE4, 0,0xCDEB,0xAB55, -0xAB52,0xCDE6,0xAB5A,0xCDE9,0xCDE5,0xAB4F,0xAB5C,0xAB53, -0xAB4C,0xAB48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xCDEF, 0,0xADD7,0xADC1, - 0,0xADD1, 0,0xADD6,0xD0D0,0xD0CF,0xD0D4,0xD0D5, -0xADC4, 0,0xADCD, 0, 0, 0,0xADDA, 0, -0xADCE, 0, 0, 0, 0,0xD0C9,0xADC7,0xD0CA, - 0,0xADDC, 0,0xADD3,0xADBE,0xADBF,0xD0DD,0xB0BF, - 0,0xADCC,0xADCB,0xD0CB,0xADCF,0xD45B,0xADC6,0xD0D6, -0xADD5,0xADD4,0xADCA,0xD0CE,0xD0D7, 0,0xD0C8,0xADC9, -0xD0D8,0xADD2,0xD0CC,0xADC0, 0,0xADC3,0xADC2,0xD0D9, -0xADD0,0xADC5,0xADD9,0xADDB,0xD0D3,0xADD8, 0,0xD0DB, -0xD0CD,0xD0DC, 0,0xD0D1, 0,0xD0DA, 0,0xD0D2, - 0, 0, 0, 0,0xADC8, 0, 0, 0, -0xD463,0xD457, 0,0xB0B3, 0,0xD45C,0xD462,0xB0B2, -0xD455,0xB0B6,0xD459,0xD452,0xB0B4,0xD456,0xB0B9,0xB0BE, - 0,0xD467, 0,0xD451, 0,0xB0BA, 0,0xD466, - 0, 0,0xB0B5,0xD458,0xB0B1,0xD453,0xD44F,0xD45D, -0xD450,0xD44E,0xD45A,0xD460,0xD461,0xB0B7, 0, 0, -0xD85B,0xD45E,0xD44D,0xD45F, 0,0xB0C1,0xD464,0xB0C0, -0xD44C, 0,0xD454,0xD465,0xB0BC,0xB0BB,0xB0B8,0xB0BD, - 0, 0,0xB0AF, 0, 0,0xB0B0, 0, 0, -0xB3C8, 0,0xD85E,0xD857, 0,0xB3C5, 0,0xD85F, - 0, 0, 0,0xD855,0xD858,0xB3C4,0xD859, 0, - 0,0xB3C7,0xD85D, 0,0xD853,0xD852,0xB3C9, 0, -0xB3CA,0xB3C6,0xB3CB,0xD851,0xD85C,0xD85A,0xD854, 0, - 0, 0,0xB3C3,0xD856, 0, 0, 0, 0, - 0, 0, 0, 0,0xB6CA,0xB6C4,0xDCB7,0xB6CD, -0xDCBD,0xDCC0,0xB6C6,0xB6C7,0xDCBA,0xB6C5,0xDCC3,0xB6CB, -0xDCC4, 0,0xDCBF,0xB6CC, 0,0xDCB4,0xB6C9,0xDCB5, - 0,0xDCBE,0xDCBC, 0,0xDCB8,0xB6C8,0xDCB6,0xB6CE, -0xDCBB,0xDCC2,0xDCB9,0xDCC1, 0, 0,0xB9B6,0xB9B3, - 0,0xB9B4, 0,0xE0F9,0xE0F1,0xB9B2,0xB9AF,0xE0F2, - 0, 0,0xB9B1,0xE0F5, 0,0xE0F7, 0, 0, -0xE0FE, 0, 0,0xE0FD,0xE0F8,0xB9AE,0xE0F0,0xB9AC, -0xE0F3,0xB9B7,0xE0F6, 0,0xE0FA,0xB9B0,0xB9AD,0xE0FC, -0xE0FB,0xB9B5, 0,0xE0F4, 0,0xBBF8,0xE4EC, 0, -0xE4E9,0xBBF9, 0,0xBBF7, 0,0xE4F0,0xE4ED,0xE4E6, -0xBBF6, 0,0xBBFA,0xE4E7,0xBBF5,0xBBFD,0xE4EA,0xE4EB, -0xBBFB,0xBBFC,0xE4F1,0xE4EE,0xE4EF, 0, 0, 0, -0xBEAA,0xE8F8,0xBEA7,0xE8F5,0xBEA9,0xBEAB, 0,0xE8F6, -0xBEA8, 0,0xE8F7, 0,0xE8F4, 0, 0,0xC076, -0xECBD,0xC077,0xECBB, 0,0xECBC,0xECBA,0xECB9, 0, - 0,0xECBE,0xC075, 0, 0,0xEFB8,0xEFB9, 0, -0xE4E8,0xEFB7,0xC078,0xC35F,0xF1EB,0xF1EC, 0,0xC4D7, -0xC4D8,0xF5C1,0xF5C0,0xC56C,0xC56B,0xF7D0, 0,0xA449, -0xA461,0xA4B9, 0,0xA4B8,0xA553,0xA552,0xA5FC,0xA5FB, -0xA5FD,0xA5FA, 0,0xA74A,0xA749,0xA74B, 0, 0, - 0, 0,0xA8E0, 0,0xA8DF,0xA8E1, 0,0xAB5E, - 0,0xA259,0xD0DE,0xA25A,0xB0C2,0xA25C,0xA25B,0xD860, - 0,0xA25D,0xB9B8,0xA25E, 0,0xA44A, 0,0xA4BA, -0xA5FE,0xA8E2, 0,0xA44B,0xA4BD,0xA4BB,0xA4BC, 0, - 0,0xA640, 0, 0, 0,0xA74C,0xA8E4,0xA8E3, -0xA8E5, 0, 0, 0,0xADDD, 0, 0, 0, -0xBEAC, 0, 0, 0, 0, 0, 0,0xC94E, - 0,0xA554,0xA555, 0, 0,0xA641, 0,0xCA6A, - 0,0xAB60,0xAB5F,0xD0E0,0xD0DF,0xB0C3, 0,0xA4BE, -0xC955, 0, 0, 0, 0, 0,0xCBCD, 0, -0xAB61, 0,0xADE0, 0,0xADDE,0xADDF, 0, 0, - 0, 0,0xBEAD, 0,0xA556, 0, 0, 0, -0xA642,0xC9BC, 0, 0, 0, 0,0xA74D,0xA74E, - 0,0xCA6B, 0, 0,0xCBCE,0xA8E6,0xCBCF, 0, - 0, 0, 0, 0,0xD0E2,0xD0E3,0xADE3, 0, -0xD0E4, 0,0xD0E1,0xADE4,0xADE2,0xADE1,0xD0E5, 0, -0xD468, 0, 0, 0,0xD861, 0, 0,0xDCC5, -0xE140, 0, 0, 0,0xBBFE,0xBEAE,0xE8F9, 0, -0xA44C,0xA45A, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xB0C4,0xB3CD, 0,0xB9B9, 0,0xC942,0xA4BF, 0, -0xA559,0xA557,0xA558, 0, 0,0xA8E7, 0, 0, -0xA44D,0xA44E, 0,0xA462, 0, 0,0xA4C0,0xA4C1, -0xA4C2,0xC9BE,0xA55A, 0,0xC96B, 0,0xA646, 0, -0xC9BF,0xA644,0xA645,0xC9BD, 0, 0,0xA647,0xA643, - 0, 0, 0, 0,0xCA6C,0xAAEC,0xCA6D, 0, - 0,0xCA6E, 0, 0,0xA750,0xA74F, 0, 0, -0xA753,0xA751,0xA752, 0, 0, 0,0xA8ED, 0, -0xA8EC,0xCBD4,0xCBD1,0xCBD2, 0,0xCBD0,0xA8EE,0xA8EA, -0xA8E9, 0,0xA8EB,0xA8E8, 0, 0, 0, 0, - 0,0xA8EF, 0,0xAB63,0xCDF0, 0,0xCBD3,0xAB68, - 0,0xCDF1,0xAB64,0xAB67,0xAB66,0xAB65,0xAB62, 0, - 0, 0,0xD0E8, 0,0xADE7,0xD0EB,0xADE5, 0, - 0, 0,0xD0E7,0xADE8,0xADE6,0xADE9,0xD0E9,0xD0EA, - 0,0xD0E6,0xD0EC, 0, 0, 0, 0, 0, - 0,0xB3D1,0xB0C5,0xD469,0xD46B,0xD46A,0xD46C,0xB0C6, - 0, 0,0xB3CE, 0,0xB3CF,0xB3D0, 0,0xB6D0, -0xDCC7, 0,0xDCC6,0xDCC8,0xDCC9,0xB6D1, 0,0xB6CF, -0xE141,0xE142,0xB9BB,0xB9BA,0xE35A, 0, 0,0xBC40, -0xBC41,0xBC42,0xBC44,0xE4F2,0xE4F3,0xBC43, 0, 0, - 0,0xBEAF, 0,0xBEB0, 0, 0,0xF1ED,0xF5C3, -0xF5C2,0xF7D1, 0,0xA44F, 0, 0, 0,0xA55C, -0xA55B, 0, 0,0xA648, 0, 0,0xC9C0, 0, - 0,0xA755,0xA756,0xA754,0xA757,0xCA6F,0xCA70, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xA8F1,0xCBD5, 0,0xA8F0, 0, -0xCDF2,0xAB6C,0xCDF3,0xAB6B, 0, 0, 0,0xAB69, - 0,0xAB6A, 0, 0, 0,0xD0ED, 0, 0, - 0, 0,0xB0C7,0xD46E, 0,0xB0CA,0xD46D,0xB1E5, -0xB0C9,0xB0C8, 0,0xB3D4, 0,0xB3D3,0xB3D2,0xB6D2, - 0, 0,0xB6D5,0xB6D6,0xB6D4, 0,0xB6D3, 0, - 0,0xE143, 0,0xE144, 0, 0, 0,0xE4F5, -0xBC45,0xE4F4, 0,0xBEB1,0xECBF,0xC079, 0,0xF1EE, -0xC455, 0,0xA463,0xA4C3,0xC956, 0,0xA4C4,0xA4C5, - 0, 0, 0, 0, 0,0xA55D,0xA55E, 0, -0xA649,0xCA71,0xCBD6,0xCBD7, 0,0xAB6D,0xD0EE,0xB0CC, -0xB0CB,0xD863,0xD862, 0, 0,0xA450,0xA4C6,0xA55F, - 0,0xB0CD,0xC943, 0,0xC96C,0xA560, 0,0xC9C2, -0xA64B,0xA64A,0xC9C1,0xA758, 0, 0, 0, 0, - 0, 0,0xADEA, 0, 0,0xD46F, 0,0xB6D7, -0xE145,0xB9BC, 0, 0,0xE8FA, 0, 0,0xF3FD, - 0,0xA4C7, 0, 0,0xCBD8,0xCDF4,0xB0D0,0xB0CE, -0xB0CF,0xA451, 0,0xA464,0xA2CD,0xA4CA, 0,0xA4C9, -0xA4C8,0xA563,0xA562, 0,0xC96D,0xC9C3, 0, 0, - 0,0xA8F5,0xA8F2,0xA8F4,0xA8F3, 0, 0,0xAB6E, - 0, 0,0xB3D5, 0,0xA452, 0,0xA4CB, 0, -0xA565,0xA564, 0,0xCA72, 0, 0,0xA8F6, 0, - 0, 0, 0, 0,0xC957, 0,0xA567,0xA566, -0xA64C,0xA64D,0xCA73,0xA759, 0,0xA75A, 0,0xA8F7, -0xA8F8,0xA8F9, 0,0xAB6F,0xCDF5, 0, 0,0xADEB, - 0, 0,0xC944, 0,0xA4CC, 0, 0, 0, - 0, 0,0xC9C4, 0, 0, 0,0xCA74,0xCA75, - 0, 0,0xCBD9, 0,0xCBDA, 0,0xCDF7,0xCDF6, -0xCDF9,0xCDF8,0xAB70, 0,0xD470,0xADED,0xD0EF,0xADEC, - 0, 0, 0, 0,0xD864,0xB3D6, 0,0xD865, - 0, 0, 0, 0,0xE146,0xB9BD, 0, 0, - 0, 0,0xBC46, 0,0xF1EF, 0, 0, 0, - 0,0xC958, 0,0xA568, 0, 0, 0, 0, - 0, 0, 0,0xB0D1, 0, 0, 0, 0, -0xA453,0xA465,0xA4CE,0xA4CD, 0,0xA4CF, 0, 0, - 0, 0, 0, 0,0xA8FB, 0,0xA8FA,0xA8FC, - 0, 0, 0,0xAB71, 0, 0, 0,0xADEE, - 0,0xE8FB,0xC24F,0xA466,0xA56A,0xA579,0xA574, 0, -0xA56F,0xA56E,0xA575,0xA573,0xA56C,0xA57A,0xA56D,0xA569, -0xA578,0xA577,0xA576,0xA56B, 0,0xA572, 0, 0, -0xA571, 0, 0,0xA57B,0xA570, 0, 0, 0, - 0,0xA653, 0,0xA659,0xA655, 0,0xA65B,0xC9C5, -0xA658,0xA64E,0xA651,0xA654,0xA650,0xA657,0xA65A,0xA64F, -0xA652,0xA656,0xA65C, 0, 0, 0, 0, 0, -0xCA7E,0xCA7B, 0,0xA767,0xCA7C,0xA75B,0xA75D,0xA775, -0xA770, 0, 0, 0,0xCAA5,0xCA7D,0xA75F,0xA761, -0xCAA4,0xA768,0xCA78,0xA774,0xA776,0xA75C,0xA76D, 0, -0xCA76,0xA773, 0,0xA764, 0,0xA76E,0xA76F,0xCA77, -0xA76C,0xA76A, 0,0xA76B,0xA771,0xCAA1,0xA75E, 0, -0xA772,0xCAA3,0xA766,0xA763, 0,0xCA7A,0xA762,0xCAA6, -0xA765, 0,0xA769, 0, 0, 0,0xA760,0xCAA2, - 0, 0, 0, 0,0xCA79, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCBEB,0xCBEA,0xA94F,0xCBED,0xCBEF,0xCBE4,0xCBE7,0xCBEE, -0xA950, 0, 0,0xCBE1,0xCBE5, 0, 0,0xCBE9, -0xCE49,0xA94B,0xCE4D,0xA8FD,0xCBE6,0xA8FE,0xA94C,0xA945, -0xA941, 0,0xCBE2,0xA944,0xA949,0xA952,0xCBE3,0xCBDC, -0xA943,0xCBDD,0xCBDF, 0,0xA946, 0,0xA948,0xCBDB, -0xCBE0, 0, 0,0xA951,0xA94D,0xCBE8,0xA953, 0, -0xA94A,0xCBDE,0xA947, 0, 0,0xA942,0xA940, 0, -0xCBEC, 0,0xA94E, 0, 0, 0, 0, 0, -0xCE48,0xCDFB,0xCE4B, 0, 0,0xCDFD,0xAB78,0xABA8, -0xAB74,0xABA7,0xAB7D,0xABA4,0xAB72,0xCDFC,0xCE43,0xABA3, -0xCE4F,0xABA5, 0,0xAB79, 0, 0,0xCE45,0xCE42, -0xAB77, 0,0xCDFA,0xABA6,0xCE4A,0xAB7C,0xCE4C,0xABA9, -0xAB73,0xAB7E,0xAB7B,0xCE40,0xABA1,0xCE46,0xCE47,0xAB7A, -0xABA2,0xAB76, 0, 0, 0, 0,0xAB75,0xCDFE, - 0, 0, 0, 0, 0, 0,0xCE44, 0, - 0, 0, 0, 0, 0, 0,0xCE4E, 0, -0xD144,0xADFB,0xD0F1, 0,0xD0F6,0xADF4,0xAE40,0xD0F4, -0xADEF,0xADF9,0xADFE,0xD0FB, 0,0xADFA,0xADFD, 0, - 0,0xD0FE,0xADF5,0xD0F5, 0, 0, 0,0xD142, -0xD143, 0,0xADF7,0xD141,0xADF3,0xAE43, 0,0xD0F8, - 0,0xADF1, 0,0xD146,0xD0F9,0xD0FD,0xADF6,0xAE42, -0xD0FA,0xADFC,0xD140,0xD147,0xD4A1, 0,0xD145,0xAE44, -0xADF0,0xD0FC,0xD0F3, 0,0xADF8, 0, 0,0xD0F2, - 0, 0,0xD0F7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xD0F0,0xAE41, - 0, 0,0xD477, 0,0xB0E4,0xD4A7,0xB0E2,0xB0DF, -0xD47C,0xB0DB,0xD4A2,0xB0E6,0xD476,0xD47B,0xD47A,0xADF2, -0xB0E1,0xD4A5, 0,0xD4A8,0xD473, 0,0xB3E8, 0, -0xD4A9,0xB0E7, 0,0xB0D9,0xB0D6,0xD47E,0xB0D3, 0, -0xD4A6, 0,0xB0DA,0xD4AA, 0,0xD474,0xD4A4,0xB0DD, -0xD475,0xD478,0xD47D, 0, 0,0xB0DE,0xB0DC,0xB0E8, - 0, 0, 0, 0,0xB0E3, 0,0xB0D7,0xB1D2, - 0,0xB0D8,0xD479,0xB0E5,0xB0E0,0xD4A3,0xB0D5, 0, - 0, 0,0xB0D4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xD471,0xD472,0xD86A, - 0, 0, 0,0xB3D7,0xB3DA,0xD875,0xB3EE,0xD878, -0xB3D8,0xD871,0xB3DE,0xB3E4,0xB5BD, 0, 0,0xB3E2, -0xD86E,0xB3EF,0xB3DB,0xB3E3,0xD876,0xDCD7,0xD87B,0xD86F, - 0,0xD866,0xD873,0xD86D,0xB3E1,0xD879, 0, 0, -0xB3DD,0xB3F1,0xB3EA, 0,0xB3DF,0xB3DC, 0,0xB3E7, - 0,0xD87A,0xD86C,0xD872,0xD874,0xD868,0xD877,0xB3D9, -0xD867, 0,0xB3E0,0xB3F0,0xB3EC,0xD869,0xB3E6, 0, - 0,0xB3ED,0xB3E9,0xB3E5, 0,0xD870, 0, 0, - 0, 0, 0,0xB3EB, 0, 0, 0,0xDCD5, -0xDCD1, 0,0xDCE0,0xDCCA,0xDCD3,0xB6E5,0xB6E6,0xB6DE, -0xDCDC,0xB6E8,0xDCCF,0xDCCE,0xDCCC,0xDCDE,0xB6DC,0xDCD8, -0xDCCD,0xB6DF,0xDCD6,0xB6DA,0xDCD2,0xDCD9,0xDCDB, 0, - 0,0xDCDF,0xB6E3,0xDCCB,0xB6DD,0xDCD0, 0,0xB6D8, - 0,0xB6E4,0xDCDA,0xB6E0,0xB6E1,0xB6E7,0xB6DB,0xA25F, -0xB6D9,0xDCD4, 0, 0, 0, 0, 0,0xB6E2, - 0, 0,0xDCDD, 0, 0, 0,0xB9CD,0xB9C8, - 0,0xE155,0xE151, 0,0xE14B,0xB9C2,0xB9BE,0xE154, -0xB9BF,0xE14E,0xE150, 0,0xE153, 0,0xB9C4, 0, -0xB9CB,0xB9C5, 0, 0,0xE149,0xB9C6,0xB9C7,0xE14C, -0xB9CC, 0,0xE14A,0xE14F,0xB9C3,0xE148,0xB9C9,0xB9C1, - 0, 0, 0,0xB9C0,0xE14D,0xE152, 0,0xB9CA, - 0, 0, 0, 0, 0, 0, 0,0xE147, - 0,0xBC4D,0xE547, 0,0xE544, 0,0xBC47,0xBC53, -0xBC54, 0,0xBC4A,0xE542,0xBC4C,0xE4F9,0xBC52, 0, -0xE546,0xBC49,0xE548,0xBC48, 0,0xE543,0xE545,0xBC4B, -0xE541,0xE4FA,0xE4F7, 0, 0,0xD86B,0xE4FD, 0, -0xE4F6,0xE4FC,0xE4FB, 0,0xE4F8, 0,0xBC4F, 0, - 0, 0, 0,0xBC4E, 0, 0, 0,0xBC50, -0xE4FE,0xBEB2,0xE540, 0, 0, 0,0xE945, 0, -0xE8FD, 0,0xBEBE,0xE942,0xBEB6,0xBEBA,0xE941, 0, -0xBEB9,0xBEB5,0xBEB8,0xBEB3,0xBEBD,0xE943,0xE8FE,0xBEBC, -0xE8FC,0xBEBB,0xE944,0xE940,0xBC51, 0,0xBEBF,0xE946, -0xBEB7,0xBEB4, 0, 0, 0, 0,0xECC6,0xECC8, -0xC07B,0xECC9,0xECC7,0xECC5,0xECC4,0xC07D,0xECC3,0xC07E, - 0, 0, 0, 0,0xECC1,0xECC2,0xC07A,0xC0A1, -0xC07C, 0, 0,0xECC0, 0,0xC250, 0,0xEFBC, -0xEFBA,0xEFBF,0xEFBD, 0,0xEFBB,0xEFBE, 0, 0, - 0, 0, 0, 0, 0,0xC360,0xF1F2,0xF1F3, -0xC456, 0,0xF1F4,0xF1F0,0xF1F5,0xF1F1,0xC251, 0, - 0, 0,0xF3FE,0xF441,0xC459,0xF440,0xC458,0xC457, - 0, 0, 0, 0,0xC45A,0xF5C5,0xF5C6, 0, -0xC4DA,0xC4D9,0xC4DB,0xF5C4, 0,0xF6D8,0xF6D7, 0, -0xC56D,0xC56F,0xC56E,0xF6D9,0xC5C8,0xF8A6, 0, 0, - 0,0xC5F1, 0,0xF8A5,0xF8EE, 0, 0,0xC949, - 0, 0,0xA57D,0xA57C, 0,0xA65F,0xA65E,0xC9C7, -0xA65D,0xC9C6, 0, 0,0xA779,0xCAA9, 0,0xCAA8, - 0, 0,0xA777,0xA77A, 0, 0,0xCAA7, 0, -0xA778, 0, 0, 0, 0, 0, 0,0xCBF0, - 0,0xCBF1,0xA954, 0, 0, 0, 0,0xABAA, - 0,0xD148,0xD149,0xAE45,0xAE46, 0, 0,0xD4AC, -0xB0E9,0xB0EB,0xD4AB,0xB0EA,0xD87C,0xB3F2, 0, 0, - 0, 0,0xB6E9,0xB6EA,0xDCE1, 0,0xB9CF, 0, -0xB9CE, 0,0xE549,0xE948,0xE947, 0,0xF96B,0xA467, -0xC959, 0,0xC96E,0xC96F, 0, 0, 0, 0, -0xA662,0xA666,0xC9C9, 0,0xA664,0xA663,0xC9C8,0xA665, -0xA661, 0, 0,0xA660,0xC9CA, 0, 0, 0, - 0, 0, 0,0xA7A6, 0, 0,0xA7A3, 0, -0xA77D,0xCAAA, 0, 0, 0,0xCAAB, 0,0xA7A1, - 0,0xCAAD,0xA77B,0xCAAE,0xCAAC,0xA77E,0xA7A2,0xA7A5, -0xA7A4,0xA77C,0xCAAF, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xA959,0xCBFE, 0,0xA95B, 0,0xA95A, 0, -0xCC40,0xA958,0xA957,0xCBF5, 0,0xCBF4, 0,0xCBF2, -0xCBF7,0xCBF6,0xCBF3,0xCBFC,0xCBFD,0xCBFA,0xCBF8,0xA956, - 0, 0, 0,0xCBFB,0xA95C,0xCC41, 0, 0, -0xCBF9, 0,0xABAB,0xA955, 0, 0, 0, 0, - 0, 0, 0,0xABAC,0xCE54, 0, 0,0xCE5A, - 0, 0, 0,0xABB2,0xCE58,0xCE5E, 0,0xCE55, -0xCE59,0xCE5B,0xCE5D,0xCE57, 0,0xCE56,0xCE51,0xCE52, -0xABAD, 0,0xABAF,0xABAE,0xCE53,0xCE5C, 0, 0, - 0, 0, 0, 0, 0, 0,0xABB1, 0, - 0, 0, 0, 0, 0,0xCE50,0xD153, 0, -0xD152,0xD157,0xD14E, 0,0xD151,0xD150, 0,0xD154, - 0,0xD158,0xAE47,0xAE4A, 0, 0,0xD14F,0xD155, - 0, 0, 0,0xAE49,0xD14A, 0,0xABB0,0xD4BA, -0xD156, 0,0xD14D, 0,0xAE48,0xD14C, 0, 0, - 0, 0, 0, 0,0xD4B1, 0, 0,0xB0EC, -0xB0F0,0xD4C1,0xD4AF,0xD4BD,0xB0F1,0xD4BF, 0,0xD4C5, - 0,0xD4C9, 0, 0,0xD4C0,0xD4B4,0xD4BC, 0, -0xD4CA,0xD4C8,0xD4BE,0xD4B9,0xD4B2,0xD8A6,0xD4B0,0xB0F5, -0xD4B7,0xB0F6,0xB0F2,0xD4AD,0xD4C3,0xD4B5, 0, 0, -0xD4B3,0xD4C6,0xB0F3, 0,0xD4CC,0xB0ED,0xB0EF,0xD4BB, -0xD4B6,0xAE4B,0xB0EE,0xD4B8,0xD4C7,0xD4CB,0xD4C2, 0, -0xD4C4, 0, 0, 0,0xD4AE, 0, 0, 0, - 0,0xD8A1, 0,0xD8AA,0xD8A9,0xB3FA,0xD8A2, 0, -0xB3FB,0xB3F9, 0,0xD8A4,0xB3F6,0xD8A8, 0,0xD8A3, -0xD8A5,0xD87D,0xB3F4, 0,0xD8B2,0xD8B1,0xD8AE,0xB3F3, -0xB3F7,0xB3F8,0xD14B,0xD8AB,0xB3F5,0xB0F4,0xD8AD,0xD87E, -0xD8B0,0xD8AF, 0,0xD8B3, 0,0xDCEF, 0,0xD8AC, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD8A7,0xDCE7,0xB6F4,0xB6F7,0xB6F2,0xDCE6,0xDCEA,0xDCE5, - 0,0xB6EC,0xB6F6,0xDCE2,0xB6F0,0xDCE9, 0,0xB6EE, -0xB6ED,0xDCEC,0xB6EF,0xDCEE, 0,0xDCEB,0xB6EB, 0, - 0, 0,0xB6F5,0xDCF0,0xDCE4,0xDCED, 0, 0, -0xDCE3, 0, 0,0xB6F1, 0,0xB6F3, 0,0xDCE8, - 0,0xDCF1, 0, 0,0xE15D,0xB9D0,0xE163, 0, - 0,0xB9D5,0xE15F,0xE166,0xE157,0xB9D7,0xB9D1,0xE15C, -0xBC55,0xE15B,0xE164,0xB9D2, 0,0xB9D6,0xE15A,0xE160, -0xE165,0xE156,0xB9D4,0xE15E, 0, 0,0xE162,0xE168, -0xE158,0xE161, 0,0xB9D3,0xE167, 0, 0, 0, -0xE159, 0, 0, 0,0xBC59,0xE54B,0xBC57,0xBC56, -0xE54D,0xE552, 0,0xE54E, 0,0xE551,0xBC5C, 0, -0xBEA5,0xBC5B, 0,0xE54A,0xE550, 0,0xBC5A,0xE54F, - 0,0xE54C, 0,0xBC58, 0, 0, 0, 0, - 0, 0,0xE94D,0xF9D9,0xE94F,0xE94A,0xBEC1,0xE94C, - 0,0xBEC0,0xE94E, 0, 0,0xBEC3,0xE950,0xBEC2, -0xE949,0xE94B, 0, 0, 0, 0,0xC0A5,0xECCC, - 0,0xC0A4,0xECCD,0xC0A3,0xECCB,0xC0A2,0xECCA, 0, -0xC253,0xC252,0xF1F6,0xF1F8, 0,0xF1F7,0xC361,0xC362, - 0, 0,0xC363,0xF442,0xC45B, 0, 0,0xF7D3, -0xF7D2,0xC5F2, 0,0xA468,0xA4D0, 0, 0,0xA7A7, - 0, 0, 0, 0,0xCE5F, 0, 0, 0, - 0,0xB3FC,0xB3FD, 0,0xDCF2,0xB9D8,0xE169,0xE553, - 0, 0, 0,0xC95A, 0, 0,0xCAB0, 0, - 0, 0, 0, 0,0xCC42,0xCE60,0xD159,0xAE4C, - 0, 0,0xF1F9, 0,0xC4DC,0xA469,0xA57E,0xC970, - 0,0xA667,0xA668, 0,0xA95D, 0, 0, 0, -0xB0F7, 0,0xB9DA, 0,0xB9DB,0xB9D9, 0,0xA46A, - 0,0xA4D1,0xA4D3,0xA4D2,0xC95B,0xA4D4,0xA5A1,0xC971, - 0,0xA5A2, 0, 0, 0, 0, 0,0xA669, -0xA66A, 0, 0, 0,0xC9CB, 0,0xA7A8, 0, -0xCAB1, 0, 0, 0,0xA961,0xCC43, 0,0xA95F, -0xA960,0xA95E,0xD15A, 0, 0, 0,0xABB6,0xABB5, -0xABB7,0xABB4, 0,0xCE61,0xA962,0xABB3, 0,0xAE4D, -0xAE4E, 0,0xAE4F, 0,0xD4CD, 0, 0, 0, -0xB3FE,0xD8B4,0xB0F8, 0, 0, 0, 0,0xB6F8, - 0,0xB9DD,0xB9DC,0xE16A, 0,0xBC5D,0xBEC4, 0, -0xEFC0,0xF6DA,0xF7D4,0xA46B,0xA5A3, 0,0xA5A4,0xC9D1, -0xA66C,0xA66F, 0,0xC9CF,0xC9CD,0xA66E,0xC9D0,0xC9D2, -0xC9CC,0xA671,0xA670,0xA66D,0xA66B,0xC9CE, 0, 0, - 0, 0,0xA7B3, 0, 0,0xA7B0,0xCAB6,0xCAB9, -0xCAB8, 0,0xA7AA,0xA7B2, 0, 0,0xA7AF,0xCAB5, -0xCAB3,0xA7AE, 0, 0, 0,0xA7A9,0xA7AC, 0, -0xCAB4,0xCABB,0xCAB7,0xA7AD,0xA7B1,0xA7B4,0xCAB2,0xCABA, -0xA7AB, 0, 0, 0, 0, 0,0xA967,0xA96F, - 0,0xCC4F,0xCC48,0xA970,0xCC53,0xCC44,0xCC4B, 0, - 0,0xA966,0xCC45,0xA964,0xCC4C,0xCC50,0xA963, 0, -0xCC51,0xCC4A, 0,0xCC4D, 0,0xA972,0xA969,0xCC54, -0xCC52, 0,0xA96E,0xA96C,0xCC49,0xA96B,0xCC47,0xCC46, -0xA96A,0xA968,0xA971,0xA96D,0xA965, 0,0xCC4E, 0, -0xABB9, 0,0xABC0,0xCE6F,0xABB8,0xCE67,0xCE63, 0, -0xCE73,0xCE62, 0,0xABBB,0xCE6C,0xABBE,0xABC1, 0, -0xABBC,0xCE70,0xABBF, 0,0xAE56,0xCE76,0xCE64, 0, - 0,0xCE66,0xCE6D,0xCE71,0xCE75,0xCE72,0xCE6B,0xCE6E, - 0, 0,0xCE68,0xABC3,0xCE6A,0xCE69,0xCE74,0xABBA, -0xCE65,0xABC2, 0,0xABBD, 0, 0, 0, 0, - 0,0xAE5C,0xD162, 0,0xAE5B, 0, 0,0xD160, - 0,0xAE50, 0,0xAE55, 0,0xD15F,0xD15C,0xD161, -0xAE51,0xD15B, 0,0xAE54,0xAE52, 0,0xD163,0xAE53, -0xAE57, 0, 0,0xAE58, 0,0xAE5A, 0, 0, - 0,0xAE59, 0, 0, 0,0xD15D,0xD15E, 0, - 0, 0, 0,0xD164, 0,0xD4D4,0xB0F9,0xD8C2, -0xD4D3,0xD4E6, 0, 0,0xB140, 0,0xD4E4, 0, -0xB0FE,0xB0FA,0xD4ED,0xD4DD,0xD4E0, 0,0xB143,0xD4EA, -0xD4E2,0xB0FB,0xB144, 0,0xD4E7,0xD4E5, 0, 0, -0xD4D6,0xD4EB,0xD4DF,0xD4DA, 0,0xD4D0,0xD4EC,0xD4DC, -0xD4CF, 0,0xB142,0xD4E1,0xD4EE,0xD4DE,0xD4D2,0xD4D7, -0xD4CE, 0,0xB141, 0,0xD4DB,0xD4D8,0xB0FC,0xD4D1, - 0,0xD4E9,0xB0FD, 0,0xD4D9,0xD4D5, 0, 0, -0xD4E8, 0, 0, 0, 0, 0, 0,0xB440, -0xD8BB, 0,0xD8B8,0xD8C9,0xD8BD,0xD8CA, 0,0xB442, - 0, 0, 0,0xD8C6,0xD8C3, 0, 0, 0, - 0, 0,0xD8C4,0xD8C7,0xD8CB, 0,0xD4E3,0xD8CD, -0xDD47, 0,0xB443,0xD8CE,0xD8B6,0xD8C0, 0,0xD8C5, - 0, 0,0xB441,0xB444,0xD8CC,0xD8CF,0xD8BA,0xD8B7, - 0, 0,0xD8B9, 0, 0,0xD8BE,0xD8BC,0xB445, - 0,0xD8C8, 0, 0,0xD8BF, 0,0xD8C1,0xD8B5, -0xDCFA,0xDCF8,0xB742,0xB740,0xDD43,0xDCF9,0xDD44,0xDD40, -0xDCF7,0xDD46,0xDCF6,0xDCFD,0xB6FE,0xB6FD,0xB6FC,0xDCFB, -0xDD41,0xB6F9,0xB741, 0,0xDCF4, 0,0xDCFE,0xDCF3, -0xDCFC,0xB6FA,0xDD42,0xDCF5,0xB6FB,0xDD45, 0, 0, - 0, 0, 0, 0, 0,0xE16E,0xB9E2,0xB9E1, -0xB9E3,0xE17A,0xE170,0xE176,0xE16B,0xE179,0xE178,0xE17C, -0xE175,0xB9DE,0xE174,0xB9E4, 0,0xE16D,0xB9DF, 0, -0xE17B,0xB9E0,0xE16F,0xE172,0xE177,0xE171,0xE16C, 0, - 0, 0, 0,0xE173,0xE555,0xBC61,0xE558,0xE557, -0xE55A,0xE55C,0xF9DC,0xBC5F, 0,0xE556, 0,0xE554, - 0,0xE55D,0xE55B,0xE559, 0,0xE55F, 0,0xE55E, -0xBC63,0xBC5E, 0,0xBC60,0xBC62, 0, 0,0xE560, -0xE957, 0, 0,0xE956,0xE955, 0,0xE958,0xE951, - 0,0xE952,0xE95A,0xE953, 0,0xBEC5,0xE95C, 0, -0xE95B,0xE954, 0,0xECD1,0xC0A8,0xECCF,0xECD4,0xECD3, -0xE959, 0,0xC0A7, 0,0xECD2,0xECCE,0xECD6,0xECD5, -0xC0A6, 0,0xECD0, 0,0xBEC6, 0, 0, 0, -0xC254, 0, 0, 0,0xEFC1,0xF1FA,0xF1FB,0xF1FC, -0xC45C, 0, 0,0xC45D, 0,0xF443, 0,0xF5C8, -0xF5C7, 0, 0,0xF6DB,0xF6DC,0xF7D5,0xF8A7, 0, -0xA46C,0xA46D, 0,0xA46E,0xA4D5,0xA5A5,0xC9D3,0xA672, -0xA673, 0,0xA7B7,0xA7B8,0xA7B6,0xA7B5, 0,0xA973, - 0, 0,0xCC55,0xA975,0xA974,0xCC56, 0, 0, - 0,0xABC4, 0,0xAE5D,0xD165, 0,0xD4F0, 0, -0xB145,0xB447,0xD4EF,0xB446, 0,0xB9E5, 0,0xE17D, -0xBEC7, 0,0xC0A9,0xECD7, 0,0xC45E, 0,0xC570, - 0,0xC972, 0,0xA5A6,0xC973,0xA676, 0,0xA674, -0xA675,0xA677, 0,0xA7BA,0xA7B9, 0,0xCABC,0xA7BB, - 0, 0,0xCABD,0xCC57, 0,0xCC58, 0,0xA976, -0xA978,0xA97A,0xA977,0xA97B,0xA979, 0, 0, 0, - 0, 0,0xABC8,0xABC5,0xABC7,0xABC9,0xABC6,0xD166, -0xCE77, 0, 0, 0,0xD168,0xD167,0xAE63, 0, -0xAE5F, 0, 0,0xAE60,0xAE62,0xAE64,0xAE61, 0, -0xAE66,0xAE65, 0, 0, 0, 0, 0,0xB14A, -0xD4F2,0xD4F1,0xB149, 0,0xB148,0xB147,0xB14B,0xB146, - 0, 0,0xD8D5,0xD8D2,0xB449,0xD8D1,0xD8D6, 0, -0xB44B,0xD8D4,0xB448,0xB44A,0xD8D3, 0,0xDD48, 0, -0xDD49,0xDD4A, 0, 0, 0, 0,0xB9E6,0xB9EE, -0xE17E,0xB9E8,0xB9EC,0xE1A1,0xB9ED,0xB9E9,0xB9EA,0xB9E7, -0xB9EB,0xBC66,0xD8D0,0xBC67,0xBC65, 0,0xBC64,0xE95D, -0xBEC8,0xECD8,0xECD9, 0, 0,0xC364,0xC45F, 0, -0xA46F, 0,0xA678, 0, 0, 0, 0, 0, - 0,0xABCA, 0,0xD169,0xAE67, 0, 0,0xB14E, -0xB14D,0xB14C,0xB44C,0xB44D,0xD8D7,0xB9EF,0xBEC9,0xA470, -0xC95C,0xA4D6,0xC974, 0, 0,0xC9D4,0xA679, 0, - 0, 0,0xA97C, 0, 0, 0, 0,0xDD4B, - 0, 0,0xA471, 0,0xA4D7,0xC9D5, 0, 0, -0xCABE, 0,0xCABF, 0,0xA7BC, 0, 0, 0, -0xD8D8,0xB44E, 0,0xDD4C, 0, 0, 0,0xC0AA, -0xA472,0xA4A8,0xA4D8,0xC975,0xA5A7, 0,0xA7C0,0xA7BF, -0xA7BD,0xA7BE, 0, 0,0xCC59,0xA97E,0xA9A1,0xCC5A, -0xA97D, 0, 0,0xABCE,0xCE78,0xABCD,0xABCB,0xABCC, -0xAE6A,0xAE68, 0, 0,0xD16B,0xAE69,0xD16A, 0, -0xAE5E,0xD4F3, 0, 0,0xB150,0xB151, 0, 0, -0xB14F, 0,0xB9F0,0xE1A2,0xBC68,0xBC69, 0,0xE561, -0xC0AB,0xEFC2,0xEFC3, 0,0xC4DD,0xF8A8,0xC94B,0xA4D9, - 0,0xA473, 0,0xC977,0xC976, 0, 0, 0, - 0,0xA67A,0xC9D7,0xC9D8,0xC9D6, 0,0xC9D9, 0, - 0, 0, 0, 0, 0, 0,0xCAC7, 0, -0xCAC2,0xCAC4,0xCAC6,0xCAC3,0xA7C4,0xCAC0, 0,0xCAC1, -0xA7C1,0xA7C2,0xCAC5,0xCAC8,0xA7C3,0xCAC9, 0, 0, - 0, 0, 0, 0, 0,0xCC68, 0,0xCC62, -0xCC5D,0xA9A3,0xCC65,0xCC63,0xCC5C,0xCC69,0xCC6C,0xCC67, -0xCC60,0xA9A5,0xCC66,0xA9A6,0xCC61,0xCC64,0xCC5B,0xCC5F, -0xCC6B,0xA9A7, 0,0xA9A8, 0,0xCC5E,0xCC6A,0xA9A2, -0xA9A4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xCEAB,0xCEA4, -0xCEAA,0xCEA3,0xCEA5,0xCE7D,0xCE7B, 0,0xCEAC,0xCEA9, -0xCE79, 0,0xABD0,0xCEA7,0xCEA8, 0,0xCEA6,0xCE7C, -0xCE7A,0xABCF,0xCEA2,0xCE7E, 0, 0,0xCEA1,0xCEAD, - 0, 0, 0, 0, 0, 0, 0, 0, -0xAE6F, 0,0xAE6E, 0,0xD16C,0xAE6B,0xD16E, 0, -0xAE70,0xD16F, 0, 0,0xAE73, 0,0xAE71,0xD170, -0xCEAE,0xD172, 0,0xAE6D, 0,0xAE6C, 0,0xD16D, -0xD171,0xAE72, 0, 0, 0, 0,0xB153,0xB152, - 0, 0, 0,0xD4F5,0xD4F9,0xD4FB,0xB154,0xD4FE, - 0,0xB158,0xD541, 0,0xB15A, 0,0xB156,0xB15E, - 0,0xB15B,0xD4F7,0xB155, 0,0xD4F6,0xD4F4,0xD543, -0xD4F8, 0,0xB157,0xD542,0xB15C,0xD4FD,0xD4FC,0xB15D, -0xD4FA,0xB159, 0, 0, 0, 0,0xD544, 0, -0xD540,0xD8E7,0xD8EE,0xD8E3,0xB451,0xD8DF,0xD8EF,0xD8D9, -0xD8EC,0xD8EA,0xD8E4, 0,0xD8ED,0xD8E6, 0,0xD8DE, -0xD8F0,0xD8DC,0xD8E9,0xD8DA, 0,0xD8F1, 0,0xB452, - 0,0xD8EB,0xDD4F,0xD8DD,0xB44F, 0,0xD8E1, 0, -0xB450,0xD8E0,0xD8E5, 0, 0,0xD8E2, 0, 0, - 0,0xD8E8, 0, 0, 0, 0,0xDD53, 0, - 0, 0,0xDD56,0xDD4E, 0,0xDD50, 0,0xDD55, -0xDD54,0xB743, 0,0xD8DB,0xDD52, 0, 0,0xB744, - 0,0xDD4D,0xDD51, 0, 0, 0, 0,0xE1A9, - 0,0xE1B0,0xE1A7, 0,0xE1AE,0xE1A5,0xE1AD,0xE1B1, -0xE1A4,0xE1A8,0xE1A3, 0,0xB9F1, 0,0xE1A6,0xB9F2, -0xE1AC,0xE1AB,0xE1AA, 0, 0,0xE1AF, 0, 0, - 0, 0,0xE565,0xE567,0xBC6B,0xE568, 0,0xE563, - 0,0xE562,0xE56C, 0,0xE56A,0xBC6A,0xE56D,0xE564, -0xE569,0xE56B,0xE566, 0, 0, 0, 0,0xE961, -0xE966,0xE960,0xE965, 0,0xE95E,0xE968,0xE964,0xE969, -0xE963,0xE95F,0xE967, 0,0xE96A,0xE962, 0,0xECDA, -0xC0AF, 0,0xC0AD, 0,0xC0AC,0xC0AE, 0, 0, -0xEFC4, 0,0xF172,0xF1FD, 0, 0,0xF444,0xF445, - 0,0xC460, 0,0xF5C9, 0,0xC4DE, 0,0xF5CA, - 0,0xF6DE,0xC572, 0,0xC571,0xF6DD,0xC5C9, 0, -0xF7D6, 0, 0, 0, 0,0xA474,0xA67B,0xC9DA, -0xCACA,0xA8B5,0xB15F, 0, 0,0xA475,0xA5AA,0xA5A9, -0xA5A8, 0, 0,0xA7C5, 0, 0,0xAE74, 0, -0xDD57,0xA476,0xA477,0xA478,0xA4DA, 0, 0,0xABD1, - 0,0xCEAF, 0, 0, 0,0xB453,0xA479,0xC95D, - 0, 0,0xA5AB,0xA5AC,0xC978, 0,0xA67C, 0, - 0, 0,0xCACB, 0,0xA7C6, 0,0xCACC, 0, - 0,0xA9AE, 0, 0,0xCC6E,0xA9AC,0xA9AB,0xCC6D, -0xA9A9,0xCC6F,0xA9AA,0xA9AD, 0,0xABD2, 0,0xABD4, -0xCEB3,0xCEB0,0xCEB1,0xCEB2,0xCEB4,0xABD3, 0, 0, -0xD174,0xD173, 0,0xAE76, 0,0xAE75, 0, 0, - 0, 0, 0,0xB162,0xD546, 0,0xB161,0xB163, -0xB160, 0, 0, 0, 0,0xB455,0xD545, 0, -0xB456,0xD8F3, 0,0xB457,0xD8F2,0xB454, 0, 0, - 0, 0,0xDD5A,0xDD5C,0xB745,0xDD5B,0xDD59,0xDD58, - 0, 0, 0,0xE1B4,0xB9F7,0xB9F5, 0,0xB9F6, -0xE1B2,0xE1B3, 0,0xB9F3,0xE571,0xE56F, 0,0xBC6D, -0xE570,0xBC6E,0xBC6C,0xB9F4, 0, 0,0xE96D,0xE96B, -0xE96C,0xE56E,0xECDC,0xC0B0,0xECDB,0xEFC5,0xEFC6,0xE96E, -0xF1FE, 0,0xA47A,0xA5AD,0xA67E,0xC9DB,0xA67D, 0, -0xA9AF,0xB746, 0,0xA4DB,0xA5AE,0xABD5,0xB458, 0, -0xC979, 0,0xC97A, 0,0xC9DC, 0, 0,0xA7C8, -0xCAD0,0xCACE,0xA7C9,0xCACD,0xCACF,0xCAD1, 0,0xA7C7, - 0, 0, 0, 0, 0,0xA9B3,0xA9B4,0xA9B1, - 0, 0,0xA9B0,0xCEB8,0xA9B2, 0, 0, 0, -0xABD6, 0,0xCEB7,0xCEB9,0xCEB6,0xCEBA,0xABD7,0xAE79, -0xD175, 0,0xD177,0xAE77,0xD178,0xAE78,0xD176, 0, -0xCEB5,0xD547,0xD54A,0xD54B,0xD548,0xB167,0xB166,0xB164, -0xB165,0xD549, 0, 0, 0, 0,0xB168, 0, - 0,0xB45A,0xB45B, 0,0xB45C,0xDD5D,0xDD5F,0xDD61, -0xB748,0xB747,0xB459,0xDD60,0xDD5E, 0,0xE1B8, 0, - 0,0xE1B6,0xE1BC,0xB9F8,0xE1BD,0xE1BA,0xB9F9,0xE1B7, -0xE1B5,0xE1BB,0xBC70,0xE573,0xE1B9,0xBC72,0xE574,0xBC71, -0xBC74,0xE575,0xBC6F,0xBC73, 0,0xE973,0xE971,0xE970, -0xE972,0xE96F, 0, 0,0xC366, 0,0xF446,0xF447, - 0,0xF5CB,0xF6DF,0xC655, 0, 0,0xA9B5,0xA7CA, - 0, 0,0xABD8, 0, 0, 0,0xA47B,0xA4DC, - 0,0xA5AF,0xC9DD, 0,0xA7CB,0xCAD2, 0,0xCEBB, -0xABD9, 0,0xB9FA,0xA47C, 0, 0, 0,0xA6A1, - 0, 0,0xB749,0xA47D,0xA4DD,0xA4DE, 0,0xA5B1, -0xA5B0, 0,0xC9DE,0xA6A2, 0,0xCAD3, 0,0xA7CC, - 0, 0,0xCC71,0xCC72,0xCC73, 0,0xA9B6,0xA9B7, -0xCC70,0xA9B8, 0, 0, 0,0xABDA,0xCEBC, 0, -0xD17A,0xAE7A, 0,0xD179, 0,0xB169,0xD54C,0xB16A, -0xD54D, 0, 0, 0,0xB45D, 0, 0, 0, -0xDD62, 0, 0,0xE1BF,0xE1BE, 0,0xB9FB, 0, -0xBC75,0xE576,0xBECA,0xE974,0xC0B1, 0,0xC573,0xF7D8, - 0, 0, 0, 0,0xCC74, 0,0xCEBD,0xB16B, -0xD8F4,0xB74A, 0, 0, 0,0xC255, 0, 0, - 0, 0,0xA7CE, 0,0xA7CD,0xABDB, 0,0xD17B, - 0,0xB16D,0xB343,0xB16E,0xB16C,0xB45E, 0,0xE1C0, -0xB9FC,0xBC76, 0,0xC94C,0xC9DF, 0,0xCAD5,0xA7CF, -0xCAD4,0xA7D0, 0, 0,0xA9BC,0xCC77,0xCC76,0xA9BB, -0xA9B9,0xA9BA,0xCC75, 0, 0,0xABDD,0xCEBE,0xABE0, -0xABDC,0xABE2,0xABDE,0xABDF,0xABE1, 0, 0, 0, -0xAE7D,0xAE7C,0xAE7B, 0, 0, 0,0xD54F,0xB16F, -0xB172,0xB170, 0,0xD54E,0xB175, 0,0xB171,0xD550, -0xB174,0xB173, 0, 0, 0,0xD8F6,0xD8F5, 0, -0xB461,0xB45F,0xB460,0xD8F7,0xB74B,0xDD64,0xB74C,0xDD63, - 0, 0,0xE577, 0, 0,0xBC78,0xE1C1,0xBC77, - 0,0xB9FD, 0,0xECDE,0xE975,0xC0B2,0xECDD,0xF240, -0xF448,0xF449, 0,0xA4DF, 0,0xA5B2, 0, 0, - 0,0xC97B, 0, 0,0xA7D2,0xA7D4, 0,0xC9E2, -0xCAD8,0xCAD7,0xCAD6, 0,0xC9E1,0xC9E0,0xA6A4,0xA7D3, -0xA7D1,0xA6A3, 0, 0, 0,0xA9BD,0xCC78, 0, -0xA9BE,0xCADD, 0,0xCADF,0xCADE,0xCC79, 0, 0, -0xCADA, 0,0xA7D8,0xA7D6, 0,0xCAD9,0xCADB,0xCAE1, - 0,0xA7D5, 0,0xCADC,0xCAE5,0xA9C0, 0,0xCAE2, -0xA7D7, 0,0xCAE0,0xCAE3, 0,0xA9BF, 0,0xA9C1, -0xCAE4, 0, 0, 0, 0, 0, 0, 0, - 0,0xCCAF,0xCCA2,0xCC7E,0xCCAE,0xCCA9,0xABE7,0xA9C2, -0xCCAA,0xCCAD,0xABE3,0xCCAC,0xA9C3,0xA9C8,0xA9C6,0xCCA3, - 0,0xCC7C,0xCCA5,0xA9CD,0xCCB0,0xABE4,0xCCA6, 0, -0xABE5,0xA9C9,0xCCA8, 0,0xCECD,0xABE6,0xCC7B,0xA9CA, -0xABE8,0xA9CB,0xA9C7,0xA9CC,0xCCA7,0xCC7A,0xCCAB,0xA9C4, - 0, 0,0xCC7D,0xCCA4,0xCCA1,0xA9C5, 0,0xCEBF, - 0,0xCEC0, 0, 0, 0, 0, 0, 0, -0xCECA,0xD1A1,0xCECB,0xABEE,0xCECE,0xCEC4,0xABED,0xCEC6, - 0,0xCEC7, 0, 0,0xCEC9,0xABE9, 0, 0, -0xAEA3, 0,0xF9DA,0xCEC5,0xCEC1,0xAEA4, 0, 0, -0xCECF,0xAE7E,0xD17D,0xCEC8, 0,0xD17C,0xCEC3,0xCECC, - 0, 0,0xABEC,0xAEA1,0xABF2,0xAEA2,0xCED0,0xD17E, -0xABEB,0xAEA6,0xABF1,0xABF0,0xABEF,0xAEA5,0xCED1,0xAEA7, -0xABEA, 0,0xCEC2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xB176, -0xD1A4,0xD1A6, 0,0xD1A8,0xAEA8,0xAEAE,0xD553,0xD1AC, -0xD1A3,0xB178,0xD551, 0,0xAEAD,0xAEAB,0xD1AE, 0, -0xD552, 0,0xD1A5, 0,0xAEAC,0xD1A9,0xAEAF,0xD1AB, - 0, 0,0xAEAA,0xD1AA,0xD1AD,0xD1A7, 0,0xAEA9, -0xB179, 0,0xD1A2,0xB177, 0, 0, 0, 0, -0xB17A, 0, 0, 0, 0, 0, 0, 0, -0xD555,0xD55E,0xB464, 0,0xB17C,0xB1A3,0xB465,0xD560, -0xB1AA,0xD8F9,0xD556,0xB1A2,0xB1A5,0xB17E,0xD554,0xD562, -0xD565,0xD949, 0,0xD563,0xD8FD,0xB1A1,0xB1A8,0xB1AC, -0xD55D,0xD8F8,0xD561,0xB17B,0xD8FA,0xD564,0xD8FC,0xD559, - 0,0xB462, 0,0xD557,0xD558,0xB1A7, 0, 0, -0xB1A6,0xD55B,0xB1AB,0xD55F,0xB1A4,0xD55C, 0,0xB1A9, -0xB466,0xB463,0xD8FB, 0,0xD55A, 0,0xB17D, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xB46B,0xB46F,0xD940,0xB751,0xB46D,0xD944,0xB471,0xDD65, -0xD946,0xB753,0xB469,0xB46C,0xD947, 0,0xD948,0xD94E, -0xB473,0xB754, 0,0xD94A,0xD94F,0xD943,0xB75E, 0, -0xB755,0xB472,0xD941,0xD950, 0,0xB75D,0xB470,0xB74E, -0xD94D, 0,0xB474,0xD945,0xD8FE,0xB46A,0xD942, 0, -0xD94B, 0,0xB74D,0xB752,0xB467,0xD94C, 0,0xB750, - 0, 0, 0,0xB468, 0, 0, 0,0xB75C, -0xE1C3,0xDD70, 0,0xDD68,0xE1C2, 0,0xDD6C,0xDD6E, - 0, 0,0xDD6B, 0,0xB75B, 0,0xDD6A,0xB75F, - 0, 0, 0,0xE1D2, 0, 0,0xB75A,0xBA40, -0xDD71,0xE1C4, 0, 0,0xB758,0xDD69,0xDD6D,0xB9FE, -0xB74F,0xDD66,0xDD67,0xBA41,0xB757,0xB759,0xB756,0xDD6F, - 0, 0,0xE1C8,0xE1C9,0xE1CE,0xBC7D,0xE1D5, 0, -0xBA47, 0,0xBA46,0xE1D0, 0,0xBC7C,0xE1C5,0xBA45, - 0,0xE1D4,0xBA43,0xBA44, 0,0xE1D1,0xE5AA,0xBC7A, -0xB46E, 0,0xE1D3,0xBCA3,0xE1CB, 0,0xBC7B, 0, -0xBCA2,0xE1C6,0xE1CA,0xE1C7,0xE1CD,0xBA48,0xBC79,0xBA42, - 0,0xE57A,0xE1CF, 0,0xBCA1, 0,0xBCA4, 0, -0xE1CC, 0,0xBC7E,0xE579, 0, 0, 0, 0, - 0,0xE57E,0xBECE,0xE578,0xE9A3,0xE5A9,0xBCA8, 0, -0xBCA6,0xBECC,0xE5A6,0xE5A2,0xBCAC, 0,0xE978, 0, - 0, 0,0xBCAA,0xE5A1, 0,0xE976, 0,0xE5A5, - 0,0xE5A8,0xE57D, 0,0xBCAB, 0, 0,0xBCA5, -0xE977,0xBECD,0xE5A7,0xBCA7,0xBCA9,0xE5A4,0xBCAD,0xE5A3, -0xE57C,0xE57B,0xBECB,0xE5AB,0xE97A,0xECE0,0xBED0, 0, -0xE9A2, 0,0xE97E, 0,0xECE1, 0,0xBED1,0xE9A1, - 0,0xE97C,0xC0B4,0xECDF, 0,0xE979,0xE97B,0xC0B5, -0xBED3,0xC0B3,0xBED2,0xC0B7,0xE97D,0xBECF, 0, 0, - 0, 0, 0, 0, 0, 0,0xEFCF, 0, -0xEFC7, 0, 0, 0, 0, 0,0xECE7,0xEFC8, -0xECE3, 0, 0,0xC256,0xECE5,0xECE4,0xC0B6,0xECE2, -0xECE6,0xEFD0,0xEFCC,0xEFCE, 0,0xEFC9,0xEFCA, 0, -0xEFCD,0xEFCB,0xC367, 0, 0,0xC36A,0xC369,0xC368, -0xC461,0xF44A,0xC462,0xF241,0xC4DF,0xF5CC,0xC4E0,0xC574, -0xC5CA,0xF7D9, 0,0xF7DA,0xF7DB, 0, 0,0xF9BA, -0xA4E0,0xC97C,0xA5B3, 0,0xA6A6,0xA6A7,0xA6A5, 0, -0xA6A8,0xA7DA,0xA7D9, 0,0xCCB1,0xA9CF,0xA9CE, 0, - 0,0xD1AF,0xB1AD,0xB1AE, 0, 0, 0,0xB475, -0xDD72,0xB760,0xB761,0xDD74,0xDD76,0xDD75, 0,0xE1D7, - 0,0xE1D6,0xBA49,0xE1D8, 0,0xE5AC,0xBCAE, 0, -0xBED4, 0,0xC0B8,0xC257,0xC0B9, 0,0xA4E1, 0, - 0, 0,0xCAE6, 0, 0,0xCCB2,0xA9D1,0xA9D0, -0xA9D2,0xABF3,0xCED2,0xCED3, 0, 0,0xD1B0,0xAEB0, -0xB1AF,0xB476,0xD951,0xA4E2, 0,0xA47E,0xA4E3, 0, -0xC97D,0xA5B7,0xA5B6,0xA5B4,0xA5B5, 0, 0, 0, -0xA6AB,0xC9E9,0xC9EB,0xA6AA,0xC9E3, 0,0xC9E4, 0, -0xC9EA,0xC9E6,0xC9E8,0xA6A9,0xC9E5,0xC9EC,0xC9E7, 0, - 0, 0, 0, 0, 0,0xA7E1,0xA7EA,0xA7E8, -0xCAF0,0xCAED,0xCAF5,0xA7E6,0xCAF6, 0,0xA7DF,0xCAF3, - 0,0xA7E5,0xCAEF,0xCAEE,0xA7E3,0xCAF4,0xA7E4,0xA9D3, -0xA7DE,0xCAF1, 0,0xCAE7,0xA7DB, 0,0xA7EE,0xCAEC, -0xCAF2,0xA7E0,0xA7E2, 0,0xCAE8, 0,0xCAE9,0xCAEA, - 0,0xA7ED,0xA7E7,0xA7EC,0xCAEB,0xA7EB,0xA7DD,0xA7DC, -0xA7E9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA9E1,0xCCBE,0xCCB7,0xA9DC,0xA9EF,0xCCB3,0xCCBA,0xCCBC, -0xCCBF,0xA9EA, 0,0xCCBB,0xCCB4,0xA9E8,0xCCB8, 0, -0xCCC0,0xA9D9, 0,0xCCBD,0xA9E3,0xA9E2,0xCCB6,0xA9D7, - 0, 0,0xA9D8, 0,0xA9D6, 0,0xA9EE,0xA9E6, -0xA9E0,0xA9D4,0xCCB9,0xA9DF,0xA9D5,0xA9E7,0xA9F0,0xCED4, -0xA9E4,0xCCB5,0xA9DA,0xA9DD,0xA9DE, 0,0xA9EC,0xA9ED, -0xA9EB,0xA9E5,0xA9E9,0xA9DB,0xABF4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xCEDA,0xAC41,0xABF8,0xABFA,0xAC40, -0xCEE6,0xABFD,0xD1B1,0xAEB1,0xAC43,0xCED7,0xCEDF,0xABFE, -0xCEDE,0xCEDB,0xCEE3,0xCEE5,0xABF7,0xABFB,0xAC42,0xAEB3, -0xCEE0,0xABF9,0xAC45,0xCED9, 0, 0, 0,0xABFC, -0xAEB2,0xABF6, 0,0xCED6,0xCEDD,0xCED5,0xCED8,0xCEDC, -0xD1B2,0xAC44, 0,0xCEE1,0xCEE2,0xCEE4,0xABF5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xAEC1,0xD1BE,0xAEBF,0xAEC0,0xD1B4,0xD1C4, 0,0xAEB6, - 0, 0,0xD566,0xD1C6,0xD1C0, 0,0xD1B7, 0, -0xD1C9,0xD1BA,0xAEBC,0xD57D,0xD1BD,0xAEBE,0xAEB5, 0, -0xD1CB,0xD1BF,0xAEB8,0xD1B8,0xD1B5,0xD1B6,0xAEB9,0xD1C5, -0xD1CC,0xAEBB,0xD1BC,0xD1BB,0xAEC3,0xAEC2,0xAEB4,0xAEBA, -0xAEBD,0xD1C8, 0, 0,0xD1C2,0xAEB7,0xD1B3,0xD1CA, -0xD1C1,0xD1C3,0xD1C7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xD567, 0,0xB1B7, -0xB1CB,0xB1CA, 0,0xB1BF, 0,0xD579,0xD575,0xD572, -0xD5A6,0xB1BA,0xB1B2, 0, 0,0xD577,0xB4A8,0xB1B6, -0xD5A1, 0,0xB1CC,0xB1C9,0xD57B,0xD56A, 0, 0, -0xB1C8,0xD5A3,0xD569,0xB1BD,0xB1C1,0xD5A2, 0,0xD573, -0xB1C2,0xB1BC,0xD568, 0,0xB478,0xD5A5,0xD571,0xB1C7, -0xD574,0xD5A4,0xB1C6, 0,0xD952, 0,0xB1B3,0xD56F, -0xB1B8,0xB1C3, 0,0xB1BE,0xD578,0xD56E,0xD56C,0xD57E, -0xB1B0,0xB1C4,0xB1B4,0xB477,0xD57C,0xB1B5, 0,0xB1B1, -0xB1C0,0xB1BB,0xB1B9,0xD570,0xB1C5,0xD56D,0xD57A,0xD576, -0xD954,0xD953, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xD56B,0xD964, 0, -0xB47A, 0,0xD96A,0xD959,0xD967,0xDD77,0xB47D,0xD96B, -0xD96E,0xB47C,0xD95C,0xD96D,0xD96C,0xB47E,0xD955,0xB479, -0xB4A3, 0,0xB4A1,0xD969, 0,0xD95F,0xB4A5,0xD970, -0xD968,0xD971,0xB4AD,0xB4AB,0xD966,0xD965, 0,0xD963, -0xD95D,0xB4A4, 0,0xB4A2,0xD1B9,0xD956, 0,0xDDB7, -0xD957,0xB47B,0xB4AA,0xDD79, 0,0xB4A6,0xB4A7,0xD958, -0xD96F,0xDD78,0xD960,0xD95B,0xB4A9,0xD961,0xD95E, 0, - 0,0xB4AE, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xB770, 0, - 0,0xDD7C,0xDDB1,0xDDB6,0xDDAA,0xB76C,0xDDBB,0xB769, -0xDD7A, 0,0xDD7B,0xB762,0xB76B,0xDDA4,0xB76E,0xB76F, -0xDDA5, 0,0xDDB2,0xDDB8,0xB76A, 0,0xB764,0xDDA3, -0xDD7D,0xDDBA,0xDDA8,0xDDA9,0xDD7E,0xDDB4,0xDDAB,0xDDB5, -0xDDAD, 0,0xB765,0xE1D9,0xB768,0xB766,0xDDB9,0xDDB0, -0xDDAC, 0, 0,0xDDA1,0xBA53,0xDDAF,0xB76D,0xDDA7, - 0,0xDDA6, 0, 0, 0,0xB767,0xB763,0xE1EE, -0xDDB3,0xDDAE, 0,0xDDA2, 0, 0, 0, 0, - 0, 0, 0,0xE1E9, 0,0xE1DA,0xE1E5, 0, -0xE1EC,0xBA51,0xB4AC,0xE1EA,0xBA4C, 0, 0, 0, -0xBA4B,0xE1F1, 0,0xE1DB,0xE1E8,0xE1DC,0xE1E7,0xBA4F, -0xE1EB,0xD962, 0, 0, 0,0xE1F2,0xE1E3,0xBA52, -0xE5BA,0xBCAF, 0,0xE1F0,0xE1EF,0xBA54,0xE5AD,0xBCB0, -0xE5AE, 0,0xE1DF,0xE1E0,0xE1DD,0xE1E2,0xE1DE,0xE1F3, -0xBA4E,0xBCB1,0xBA50,0xBA55, 0,0xE1E1, 0,0xE1ED, - 0, 0,0xE1E6, 0, 0,0xE5B1, 0,0xBA4A, -0xBCB4,0xE9AA,0xE5B6,0xE5B5,0xE5B7, 0, 0,0xE5B4, -0xBCB5, 0,0xBCBB,0xBCB8, 0,0xBCB9,0xE5AF,0xE5B2, -0xE5BC,0xBCC1,0xBCBF, 0,0xE5B3,0xD95A,0xBCB2,0xE5B9, -0xE5B0, 0,0xBCC2,0xE5B8,0xBA4D,0xBCB7,0xE1E4, 0, - 0,0xBCBA, 0,0xBCBE,0xBCC0,0xBCBD,0xBCBC, 0, -0xBCB6,0xE5BB,0xBCB3,0xBCC3, 0, 0, 0, 0, - 0, 0, 0,0xBED8,0xBED9,0xE9A9,0xBEE2,0xBEDF, - 0,0xBED6,0xBEDD,0xE9AB,0xBEDB,0xBED5, 0,0xBEDC, - 0,0xE9A8,0xC0BB,0xBED7, 0,0xBEDE,0xC0BA,0xE9A7, -0xE9A6, 0,0xBEE0, 0,0xBEE1, 0,0xE9A5,0xE9A4, -0xC0BC,0xE9AE,0xBEDA,0xE9AC, 0, 0, 0, 0, -0xC0BD, 0,0xC0C2,0xECEA,0xECEC, 0,0xC0BF, 0, -0xECED,0xECE9, 0,0xECEB,0xC0C0,0xC0C3, 0,0xECE8, -0xC0BE,0xC0C1,0xC259,0xE9AD,0xC258, 0, 0,0xC25E, -0xEFD4, 0,0xC25C,0xC25D,0xEFD7,0xEFD3,0xC25A,0xEFD1, -0xC36B,0xEFD5, 0,0xEFD6,0xEFD2, 0,0xC25B,0xF242, - 0,0xF245, 0, 0,0xF246,0xF244,0xF247,0xC36C, -0xF243, 0, 0,0xF44E,0xC464,0xF44D,0xF44C,0xF44B, -0xC463,0xC465, 0,0xF5CD,0xC4E2,0xC4E1, 0, 0, -0xF6E1,0xF6E0,0xF6E3,0xC5CB,0xC575,0xF7DD,0xF6E2, 0, - 0,0xF7DC,0xC5CD,0xC5CC,0xC5F3,0xF8A9,0xF8EF,0xA4E4, - 0, 0,0xD972,0xE9AF, 0, 0,0xA6AC,0xCAF7, -0xA7F1,0xA7EF, 0,0xA7F0, 0,0xCCC1,0xA9F1,0xAC46, - 0,0xCEE7, 0,0xCEE8, 0,0xAC47,0xD1CE, 0, -0xAEC4,0xAEC5,0xD1CD, 0, 0, 0, 0,0xB1D3, - 0,0xB1CF, 0,0xD5A7,0xB1D6,0xB1D5,0xB1CE,0xB1D1, -0xB1D4,0xB1D0, 0, 0,0xD976,0xB1CD,0xB4AF, 0, - 0, 0,0xB4B1,0xB4B2,0xD975,0xD978,0xB4B0,0xD973, -0xD977, 0,0xD974, 0,0xB771, 0, 0,0xDDBC, - 0, 0,0xBA56,0xE1F4,0xBEE3,0xBCC4,0xE5BD,0xBCC5, -0xBCC6,0xE5BF,0xE5BE,0xE5C0,0xE9B1, 0, 0,0xE9B0, -0xECEF,0xECEE,0xC0C4,0xC0C5,0xF248, 0, 0,0xA4E5, - 0, 0, 0, 0,0xD979, 0, 0, 0, -0xB4B4,0xB4B3,0xDDBD, 0,0xEFD8,0xC4E3,0xF7DE,0xA4E6, - 0,0xAEC6, 0,0xB1D8,0xB1D7,0xD97A,0xD97B,0xB772, -0xE1F5,0xBA57,0xE9B2, 0,0xA4E7,0xA5B8, 0,0xA9F2, -0xCCC2, 0,0xCEE9,0xAC48,0xB1D9, 0,0xD97C,0xB4B5, -0xB773, 0,0xE5C1,0xE5C2, 0, 0,0xECF0,0xC25F, -0xF8F0,0xA4E8, 0,0xCCC3,0xA9F3,0xAC49, 0,0xCEEA, - 0,0xAEC7,0xD1D2,0xD1D0,0xD1D1,0xAEC8,0xD1CF, 0, - 0, 0, 0,0xB1DB,0xB1DC,0xD5A8,0xB1DD,0xB1DA, -0xD97D, 0,0xD97E,0xDDBE, 0, 0,0xBA59,0xBA58, - 0, 0,0xECF1,0xEFD9, 0,0xF24A,0xF249,0xF44F, - 0,0xC95E,0xAC4A, 0, 0,0xA4E9,0xA5B9, 0, -0xA6AE,0xA6AD, 0, 0,0xA6AF,0xA6B0,0xC9EE,0xC9ED, -0xCAF8,0xA7F2,0xCAFB,0xCAFA,0xCAF9,0xCAFC, 0, 0, - 0, 0,0xA9F4,0xCCC9,0xCCC5,0xCCCE, 0, 0, -0xA9FB, 0,0xA9F9,0xCCCA,0xCCC6,0xCCCD,0xA9F8,0xAA40, -0xCCC8,0xCCC4,0xA9FE,0xCCCB,0xA9F7,0xCCCC,0xA9FA,0xA9FC, -0xCCD0,0xCCCF,0xCCC7,0xA9F6,0xA9F5,0xA9FD, 0, 0, - 0, 0, 0, 0,0xCEEF,0xCEF5, 0,0xAC50, -0xAC4D,0xCEEC,0xCEF1, 0,0xAC53,0xAC4B,0xCEF0,0xAC4E, -0xAC51, 0, 0,0xCEF3, 0,0xAC4C,0xCEF8,0xAC4F, - 0,0xAC52,0xCEED,0xCEF2,0xCEF6,0xCEEE,0xCEEB, 0, - 0,0xCEF7,0xCEF4, 0, 0, 0, 0, 0, - 0,0xAED0,0xAEC9,0xAECC, 0,0xAECF, 0,0xD1D5, - 0,0xAECA,0xD1D3, 0,0xAECE, 0, 0,0xAECB, - 0,0xD1D6,0xAECD, 0, 0, 0, 0, 0, - 0,0xD5AC,0xB1DF,0xD5AB,0xD5AD,0xB1DE,0xB1E3,0xD1D4, - 0,0xD5AA,0xD5AE, 0,0xB1E0,0xD5A9,0xB1E2, 0, -0xB1E1, 0,0xD9A7, 0,0xD9A2, 0,0xB4B6,0xB4BA, -0xB4B7,0xD9A5,0xD9A8, 0,0xB4B8, 0,0xB4B9,0xB4BE, -0xDDC7,0xD9A6,0xB4BC,0xD9A3,0xD9A1, 0,0xB4BD, 0, -0xD9A4, 0, 0, 0,0xB779, 0,0xDDBF,0xB776, -0xB777,0xB775,0xDDC4,0xDDC3,0xDDC0,0xB77B, 0, 0, -0xDDC2,0xB4BB, 0, 0,0xDDC6,0xDDC1,0xB778,0xB774, -0xB77A,0xDDC5, 0, 0, 0,0xBA5C, 0,0xE1F8, -0xE1F7,0xE1F6,0xBA5A, 0, 0, 0, 0, 0, -0xBA5B,0xE5C5,0xE5C8,0xBCC8, 0, 0,0xBCC7,0xE5C9, -0xE5C4,0xBCCA,0xE5C6, 0,0xBCC9,0xE5C3, 0,0xE5C7, -0xBEE9,0xBEE6,0xE9BB,0xE9BA, 0,0xE9B9,0xE9B4, 0, -0xE9B5, 0, 0, 0,0xBEE7, 0,0xBEE4,0xBEE8, -0xE9B3,0xBEE5,0xE9B6,0xE9B7,0xE9BC, 0, 0,0xE9B8, - 0, 0,0xECF2, 0, 0, 0,0xC0C7, 0, -0xEFDC,0xC0C6,0xEFDA,0xEFDB,0xC260,0xC36E,0xF24B, 0, -0xC36D, 0, 0,0xF451,0xF452, 0,0xC466, 0, -0xF450,0xC4E4, 0,0xF7DF,0xC5CE,0xF8AA,0xF8AB, 0, -0xA4EA, 0,0xA6B1,0xA6B2,0xA7F3, 0,0xCCD1,0xAC54, -0xAED1,0xB1E4, 0, 0,0xB0D2, 0,0xB4BF,0xB4C0, -0xB3CC,0xD9A9, 0,0xB77C,0xE1FA,0xE1F9, 0, 0, -0xA4EB,0xA6B3,0xCCD2,0xAA42, 0,0xAA41, 0,0xCEF9, -0xCEFA, 0,0xD1D7,0xD1D8,0xAED2,0xAED3, 0,0xAED4, -0xD5AF, 0, 0,0xB1E6, 0,0xB4C2, 0,0xB4C1, -0xDDC8,0xDF7A,0xE1FB,0xE9BD, 0, 0,0xC261,0xC467, -0xA4EC, 0,0xA5BC,0xA5BD,0xA5BB,0xA5BE,0xA5BA, 0, - 0,0xA6B6, 0,0xC9F6,0xA6B5,0xA6B7, 0, 0, -0xC9F1,0xC9F0,0xC9F3,0xC9F2,0xC9F5,0xA6B4,0xC9EF,0xC9F4, - 0, 0, 0, 0, 0,0xCAFD,0xA7FD,0xCAFE, -0xCB43,0xA7FC, 0,0xCB47,0xCB42,0xCB45,0xA7F5,0xA7F6, -0xA7F7,0xA7F8, 0,0xA840, 0,0xCB41,0xA7FA,0xA841, - 0,0xCB40,0xCB46, 0,0xA7F9,0xCB44,0xA7FB,0xA7F4, -0xA7FE, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xAA57, 0,0xCCD4,0xAA43, 0,0xAA4D, -0xAA4E,0xAA46,0xAA58,0xAA48,0xCCDC,0xAA53,0xCCD7,0xAA49, -0xCCE6,0xCCE7,0xCCDF,0xCCD8,0xAA56,0xCCE4,0xAA51,0xAA4F, - 0,0xCCE5, 0,0xCCE3,0xCCDB,0xCCD3,0xCCDA,0xAA4A, - 0,0xAA50, 0,0xAA44,0xCCDE,0xCCDD,0xCCD5, 0, -0xAA52,0xCCE1,0xCCD6,0xAA55,0xCCE8,0xAA45, 0,0xAA4C, -0xCCD9,0xCCE2,0xAA54, 0,0xAA47,0xAA4B, 0,0xCCE0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xCF5B,0xAC5C, -0xAC69, 0,0xCF56,0xCF4C,0xAC62,0xCF4A,0xAC5B,0xCF45, -0xAC65,0xCF52,0xCEFE,0xCF41, 0, 0, 0, 0, -0xCF44,0xCEFB,0xCF51,0xCF61,0xAC60,0xCF46,0xCF58, 0, -0xCEFD,0xCF5F,0xCF60,0xCF63,0xCF5A,0xCF4B,0xCF53,0xAC66, -0xAC59,0xAC61,0xAC6D,0xAC56,0xAC58, 0, 0, 0, -0xCF43,0xAC6A,0xAC63,0xCF5D,0xCF40,0xAC6C,0xAC67,0xCF49, - 0, 0,0xAC6B,0xCF50,0xCF48,0xAC64,0xCF5C,0xCF54, - 0,0xAC5E,0xCF62,0xCF47,0xAC5A,0xCF59,0xCF4F,0xAC5F, -0xCF55,0xAC57,0xCEFC,0xAC68,0xAEE3,0xAC5D,0xCF4E,0xCF4D, -0xCF42, 0,0xCF5E, 0,0xCF57, 0, 0,0xAC55, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xD1EC,0xAEEA,0xD1ED, 0,0xD1E1,0xAEDF, -0xAEEB, 0,0xD1DA, 0,0xD1E3,0xD1EB, 0,0xD1D9, -0xD1F4,0xAED5, 0, 0, 0,0xD1F3,0xD1EE, 0, -0xD1EF,0xAEDD,0xAEE8,0xD1E5, 0,0xD1E6,0xD1F0,0xD1E7, - 0,0xD1E2,0xD1DC,0xD1DD,0xD1EA,0xD1E4, 0, 0, -0xAED6,0xAEDA,0xD1F2,0xD1DE,0xAEE6,0xAEE2, 0, 0, -0xAEE5,0xAEEC,0xAEDB,0xAEE7,0xD1E9,0xAEE9,0xAED8, 0, -0xAED7,0xD1DB, 0,0xD1DF,0xAEE0,0xD1F1,0xD1E8,0xD1E0, -0xAEE4,0xAEE1, 0,0xAED9,0xAEDC, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xD5C4, 0,0xD5B4,0xD5B5,0xD5B9, - 0,0xD5C8,0xD5C5, 0,0xD5BE,0xD5BD,0xB1ED,0xD5C1, -0xD5D0,0xD5B0, 0,0xD5D1,0xD5C3,0xD5D5,0xD5C9,0xB1EC, -0xD5C7,0xB1E7,0xB1FC,0xB1F2, 0,0xB1F6,0xB1F5,0xD5B1, - 0,0xD5CE,0xD5D4,0xD5CC,0xD5D3, 0, 0,0xD5C0, -0xD5B2,0xD5D2,0xD5C2,0xB1EA,0xB1F7, 0,0xD5CB,0xB1F0, - 0, 0, 0,0xD5CA,0xD5B3,0xB1F8, 0,0xB1FA, -0xD5CD,0xB1FB,0xB1E9,0xD5BA,0xD5CF, 0, 0,0xB1EF, -0xB1F9,0xD5BC,0xD5C6,0xD5B7,0xD5BB,0xB1F4,0xD5B6,0xB1E8, -0xB1F1,0xB1EE,0xD5BF,0xAEDE,0xD9C0,0xB1EB, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xB1F3, 0,0xD9C3,0xD9D9, -0xD9CE,0xB4D6, 0,0xB4D1,0xD9BD,0xB4D2,0xD9CD, 0, -0xD9C6,0xD9D3,0xB4CE,0xD9AB,0xD9D5,0xB4C4,0xD9B3,0xB4C7, -0xB4C6, 0,0xB4D7, 0,0xD9AD,0xD9CF,0xD9D0,0xB4C9, -0xB4C5,0xD9BB, 0,0xB4D0,0xD9B6, 0,0xD9D1,0xB4CC, -0xD9C9,0xD9D6,0xD9B0,0xD9B5,0xD9AF, 0,0xB4CB,0xD9C2, -0xDDDE,0xD9B1,0xB4CF,0xD9BA,0xD9D2,0xB4CA,0xD9B7,0xD9B4, -0xD9C5,0xB4CD,0xB4C3,0xB4D9,0xD9C8,0xD9C7, 0, 0, - 0, 0, 0, 0,0xD9AC,0xB4C8,0xD9D4,0xD9BC, -0xD9BE, 0,0xD9CB,0xD9CA,0xD9AA,0xB4D3,0xB4D5,0xD9B2, -0xD9B9,0xD9C1,0xB4D4,0xD9B8,0xD9C4,0xD9D7, 0,0xD9CC, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xD9D8, 0, 0, - 0, 0,0xD9AE, 0, 0, 0, 0,0xDDF2, -0xB7A6, 0,0xDDF0,0xDDDB,0xDDE0,0xDDD9, 0,0xDDEC, -0xDDCB,0xDDD2, 0,0xDDEA,0xDDF4,0xDDDC, 0,0xDDCF, -0xDDE2,0xDDE7,0xDDD3, 0,0xDDE4,0xDDD0, 0, 0, -0xDDD7,0xDDD8,0xB7A8,0xDDEB,0xDDE9, 0,0xDDCC,0xDDEE, - 0,0xDDEF,0xDDF1,0xB7AC,0xB7A4, 0,0xD5B8,0xDDD4, -0xDDE6,0xDDD5,0xB7A1,0xB7B1,0xDDED,0xB7AF,0xB7AB,0xDDCA, -0xB7A3, 0,0xDDCD,0xB7B0, 0,0xDDDD,0xDDC9, 0, -0xB7A9,0xDDE1,0xDDD1,0xB7AA,0xDDDA,0xB77E,0xB4D8,0xDDE3, -0xD9BF,0xDDCE, 0, 0,0xDDE8,0xB7A5,0xDDE5,0xB7A2, -0xDDDF,0xB7AD,0xDDD6,0xDDF3, 0, 0, 0, 0, - 0, 0,0xB7A7,0xDEC6, 0, 0,0xB7AE, 0, - 0, 0, 0, 0, 0,0xE24A,0xE248, 0, -0xE25E,0xE246, 0,0xE258,0xB77D,0xBA5F,0xE242,0xE25D, - 0,0xE247,0xE255,0xBA64,0xBA5D, 0,0xE25B, 0, -0xE240,0xE25A, 0,0xBA6F,0xE251,0xE261,0xBA6D,0xE249, -0xBA5E,0xE24B,0xE259,0xBA67,0xE244,0xBA6B,0xBA61,0xE24D, -0xE243,0xE1FC, 0,0xE257,0xBA68,0xE260,0xE1FD,0xBA65, - 0,0xE253, 0,0xBA66,0xE245,0xE250,0xE24C,0xE24E, - 0,0xBA60,0xE25F,0xBA6E,0xE24F, 0,0xE262, 0, - 0,0xE1FE,0xE254,0xBA63,0xBA6C,0xBA6A,0xE241,0xE256, -0xBA69, 0, 0,0xBA62,0xE252, 0, 0, 0, - 0,0xE25C, 0, 0, 0, 0, 0, 0, - 0, 0,0xE5D5, 0,0xE5D1,0xE5CD,0xE5E1,0xE5DE, -0xBCCD, 0, 0,0xE5E5,0xE5D4,0xBCD8,0xE5DB, 0, - 0,0xE5D0,0xE5DA,0xBCD5,0xE5EE, 0,0xE5EB,0xE5DD, -0xE5CE, 0, 0,0xE5E2,0xE5E4,0xBCD1,0xE5D8,0xE5D3, -0xE5CA,0xBCCE,0xBCD6, 0,0xE5E7,0xBCD7,0xE5CB,0xE5ED, -0xE5E0,0xE5E6,0xBCD4, 0, 0,0xE5E3, 0,0xE5EA, - 0,0xBCD9, 0,0xBCD3,0xE5DC,0xE5CF,0xE5EF,0xE5CC, -0xE5E8,0xBCD0, 0,0xE5D6, 0,0xE5D7,0xBCCF,0xBCCC, -0xE5D2,0xBCD2, 0,0xBCCB, 0,0xE5E9,0xE5EC,0xE5D9, -0xE9CA, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xE9C2, 0,0xE9BE,0xBEF6, 0, 0, -0xBEEB,0xBEF0,0xBEEC,0xE9CC,0xE9D7,0xBEEA,0xE9C4,0xE9CD, -0xE5DF,0xE9CE, 0, 0,0xBEF1, 0,0xE9DD,0xBEF5, -0xBEF8,0xE9C0, 0,0xBEF4, 0,0xE9DB,0xE9DC,0xE9D2, -0xE9D1,0xE9C9, 0, 0,0xE9D3,0xE9DA,0xE9D9, 0, -0xBEEF,0xBEED,0xE9CB,0xE9C8, 0,0xE9C5,0xE9D8,0xBEF7, -0xE9D6,0xBEF3,0xBEF2, 0,0xE9D0, 0,0xE9BF,0xE9C1, -0xE9C3,0xE9D5,0xE9CF,0xBEEE, 0,0xE9C6, 0,0xE9D4, - 0, 0, 0, 0, 0, 0,0xE9C7, 0, - 0, 0, 0, 0, 0, 0,0xC0CF,0xED45, -0xC0C8,0xECF5, 0,0xED41,0xC0CA,0xED48, 0,0xECFC, - 0,0xECF7, 0, 0,0xED49,0xECF3,0xECFE, 0, -0xC0D1,0xED44,0xED4A,0xECFD,0xC0C9,0xED40,0xECF4,0xC0D0, - 0, 0,0xED47,0xECF9,0xC0CC, 0,0xECFB,0xECF8, -0xC0D2,0xECFA,0xC0CB,0xC0CE,0xED43,0xECF6,0xED46, 0, -0xED42, 0, 0, 0,0xC263,0xEFE7,0xC268,0xC269, - 0, 0, 0,0xC262,0xEFE6, 0,0xEFE3,0xEFE4, -0xC266,0xEFDE,0xEFE2,0xC265, 0,0xEFDF, 0, 0, - 0, 0,0xC267,0xC264, 0,0xEFDD,0xEFE1,0xEFE5, - 0, 0, 0,0xF251,0xF24E,0xF257, 0,0xF256, -0xF254,0xF24F, 0,0xC372, 0, 0, 0, 0, - 0,0xF250,0xC371,0xC0CD,0xF253,0xC370,0xF258,0xF252, -0xF24D,0xEFE0, 0, 0, 0,0xC36F, 0,0xF24C, -0xF456, 0,0xF455,0xF255,0xC468, 0,0xF459,0xF45A, -0xF454,0xF458, 0,0xF453, 0, 0, 0, 0, -0xF5D1,0xF457,0xC4E7,0xC4E5,0xF5CF, 0, 0, 0, -0xF5D2, 0,0xF5CE,0xF5D0,0xC4E6, 0, 0, 0, -0xF6E5,0xF6E6,0xC576,0xF6E4, 0, 0, 0,0xF7E2, -0xC5CF,0xF7E0,0xF7E1,0xF8AC, 0, 0,0xC656,0xF8F3, -0xF8F1,0xF8F2,0xF8F4, 0, 0, 0,0xF9BB, 0, -0xA4ED,0xA6B8, 0,0xAA59, 0,0xCCE9, 0, 0, -0xCF64, 0, 0, 0,0xD1F5,0xD1F7, 0,0xD1F6, - 0,0xD1F8,0xB1FD,0xD5D7,0xD1F9, 0,0xD5D6,0xD5D8, -0xD5D9,0xD9DA,0xB4DB,0xD9DB,0xD9DD,0xB4DC,0xB4DA,0xD9DC, - 0,0xDDFA,0xDDF8,0xDDF7, 0,0xDDF6,0xDDF5,0xB7B2, -0xDDF9,0xBA70,0xE263,0xE265,0xBA71,0xE264,0xBCDB, 0, -0xBCDA,0xE5F0, 0, 0,0xE9DF,0xE9DE,0xE9E0, 0, - 0,0xBEF9, 0,0xED4B,0xC0D3, 0,0xEFE8,0xC26A, -0xF259,0xC577,0xA4EE,0xA5BF,0xA6B9,0xA842,0xAA5A,0xAA5B, - 0, 0,0xAC6E, 0, 0,0xD1FA, 0, 0, - 0, 0,0xB7B3, 0, 0, 0,0xE6D1,0xBEFA, -0xC26B,0xA4EF, 0,0xA6BA, 0, 0,0xCCEB,0xAA5C, -0xCCEA, 0,0xCF65,0xAC6F,0xCF66, 0,0xAC70, 0, -0xD1FC,0xAEEE,0xAEED, 0,0xD5DE,0xD5DC,0xD5DD,0xD5DB, - 0,0xD5DA, 0, 0,0xD9DE,0xD9E1,0xB4DE,0xD9DF, -0xB4DD,0xD9E0, 0,0xDDFB, 0, 0,0xE266,0xE267, -0xE268, 0,0xE5F3,0xE5F2,0xBCDC,0xE5F1,0xE5F4,0xE9E1, - 0, 0,0xE9E2,0xE9E3, 0,0xED4C,0xC0D4,0xC26C, -0xF25A, 0,0xC4E8,0xC95F, 0,0xAC71,0xCF67,0xAEEF, - 0, 0,0xB1FE, 0,0xB4DF,0xD9E2, 0,0xB7B5, -0xB7B4, 0, 0,0xE269,0xE26A,0xBCDD,0xBCDE,0xE9E5, -0xE9E4,0xEFE9,0xF7E3,0xA4F0,0xC960,0xA5C0, 0,0xA843, -0xCB48, 0,0xAC72,0xB7B6,0xA4F1, 0,0xCF68,0xAC73, -0xCF69, 0,0xC0D5,0xA4F2, 0, 0,0xCCEC, 0, -0xCF6A, 0,0xD242,0xD241,0xD1FE, 0,0xD1FD,0xD243, -0xD240, 0, 0,0xB240,0xB241, 0, 0,0xB4E0, -0xD9E3, 0,0xD9E4,0xD9E5, 0, 0, 0,0xDE41, -0xDE42,0xDE40, 0,0xDDFD,0xDDFE,0xB7B7,0xE26B,0xE5F7, -0xE5F6,0xE5F5,0xE5F8,0xE9E7,0xE9E6,0xBEFB,0xE9E8, 0, -0xC0D6,0xED4D, 0,0xEFEA,0xF25B,0xF6E7, 0,0xA4F3, -0xA5C2,0xA5C1, 0,0xAA5D,0xC961,0xC97E,0xA6BB, 0, -0xC9F7,0xCB49,0xCB4A,0xAA5E, 0,0xCCED, 0,0xAC74, -0xCF6B,0xCF6C, 0,0xAEF0,0xAEF4,0xD244,0xAEF3,0xAEF1, -0xAEF2, 0,0xD5DF,0xB242,0xB4E3, 0,0xB4E1,0xB4E2, -0xD9E6, 0, 0,0xBA72,0xA4F4, 0,0xC9A1, 0, -0xA5C3, 0, 0,0xC9A4, 0, 0,0xA5C6,0xC9A3, -0xA5C5,0xA5C4,0xA844,0xC9A2, 0, 0,0xC9F8, 0, - 0, 0,0xC9FC,0xC9FE,0xCA40,0xA6C5,0xA6C6,0xC9FB, -0xA6C1, 0,0xC9F9, 0,0xC9FD,0xA6C2, 0,0xA6BD, - 0,0xA6BE, 0,0xA6C4,0xC9FA,0xA6BC,0xA845,0xA6BF, -0xA6C0,0xA6C3, 0, 0, 0,0xCB5B,0xCB59,0xCB4C, -0xA851,0xCB53,0xA84C,0xCB4D, 0,0xCB55, 0,0xCB52, -0xA84F,0xCB51,0xA856,0xCB5A,0xA858, 0,0xA85A, 0, -0xCB4B, 0,0xA84D,0xCB5C, 0,0xA854,0xA857, 0, -0xCD45,0xA847,0xA85E,0xA855,0xCB4E,0xA84A,0xA859,0xCB56, -0xA848,0xA849,0xCD43,0xCB4F,0xA850,0xA85B,0xCB5D,0xCB50, -0xA84E, 0,0xA853,0xCCEE,0xA85C,0xCB57,0xA852, 0, -0xA85D,0xA846,0xCB54,0xA84B,0xCB58,0xCD44, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xAA6A,0xAA7A,0xCCF5,0xAA71, 0, -0xCD4B,0xAA62, 0,0xAA65,0xCD42, 0,0xCCF3,0xCCF7, -0xAA6D,0xAA6F,0xCCFA,0xAA76,0xAA68,0xAA66,0xAA67,0xAA75, -0xCD47,0xAA70,0xCCF9,0xCCFB,0xAA6E,0xAA73,0xCCFC,0xCD4A, - 0,0xAC75,0xAA79, 0,0xAA63,0xCD49, 0,0xCD4D, -0xCCF8,0xCD4F,0xCD40,0xAA6C,0xCCF4,0xAA6B,0xAA7D,0xAA72, - 0,0xCCF2,0xCF75,0xAA78,0xAA7C,0xCD41,0xCD46, 0, -0xAA7E,0xAA77,0xAA69,0xAA5F, 0,0xAA64, 0,0xCCF6, -0xAA60,0xCD4E, 0,0xCCF0,0xCCEF,0xCCFD,0xCCF1,0xAA7B, -0xAEF5,0xAA74,0xCCFE,0xAA61, 0,0xACA6, 0, 0, - 0,0xCD4C, 0, 0, 0, 0, 0, 0, -0xCF7C,0xCFA1, 0,0xCFA4,0xCF77, 0, 0,0xCFA7, -0xCFAA,0xCFAC,0xCF74,0xAC76,0xAC7B,0xD249,0xACAD,0xCFA5, -0xCFAD,0xCF7B,0xCF73, 0, 0, 0,0xD264,0xAC7E, -0xCFA2,0xCF78,0xCF7A,0xACA5, 0,0xCF7D,0xAC7D,0xCF70, -0xCFA8, 0,0xCFAB, 0, 0,0xAC7A, 0,0xACA8, -0xCF6D,0xACAA,0xAC78,0xACAE,0xCFA9,0xCF6F,0xACAB,0xD25E, -0xCD48,0xAC7C,0xAC77,0xCF76,0xCF6E,0xACAC,0xACA4,0xCFA3, -0xACA9,0xACA7,0xCF79,0xACA1,0xCF71,0xACA2,0xACA3,0xCF72, -0xCFA6,0xAC79,0xCF7E, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD24C,0xAEFD,0xAF43, 0, 0, 0,0xD255,0xD25B, -0xD257,0xD24A,0xD24D,0xD246,0xD247,0xAF4A,0xAEFA,0xD256, -0xD25F,0xAF45,0xAEF6, 0,0xAF40,0xD24E,0xAF42,0xD24F, -0xD259, 0, 0, 0,0xAF44,0xD268,0xD248,0xAEFC, -0xAEFB,0xAF48,0xD245,0xD266,0xD25A,0xD267,0xD261,0xD253, -0xD262, 0,0xD25C,0xD265,0xD263,0xAF49,0xD254,0xAEF9, -0xAEF8,0xAF41,0xAF47,0xD260,0xAF46,0xD251,0xB243, 0, -0xD269,0xD250,0xD24B,0xAEFE,0xAF4B,0xAEF7, 0,0xD258, -0xD25D, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xB265,0xD5E1,0xD5E5, 0,0xB252,0xB250, - 0, 0,0xB247,0xD5E3,0xD5E2,0xB25B, 0,0xD5E8, -0xB255, 0,0xD5FA,0xD647,0xB244,0xD5F7,0xD5F0,0xB267, -0xD5E0, 0,0xD5FC, 0,0xB264,0xB258,0xB263,0xB24E, -0xD5EC,0xD5FE,0xD5F6,0xB24F,0xB249,0xD645, 0,0xD5FD, -0xD640,0xB251,0xB259,0xD642,0xD5EA,0xD5FB,0xD5EF,0xD644, -0xB25E,0xB246,0xB25C,0xD5F4,0xD5F2,0xD5F3,0xB253,0xD5EE, -0xD5ED,0xB248,0xD5E7,0xD646,0xB24A,0xD5F1,0xB268, 0, -0xB262,0xD5E6,0xB25F,0xB25D,0xB266,0xD5F8,0xB261,0xD252, -0xD5F9,0xB260,0xD641,0xB245,0xD5F5,0xB257,0xD5E9,0xB256, - 0,0xB254,0xB24C,0xB24B,0xD9E7,0xD643, 0, 0, -0xD5EB, 0, 0,0xD9FC, 0,0xB24D, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xB541,0xB25A,0xB4EE,0xD9F6,0xB4FC, 0,0xD9EA, -0xB4EB,0xB4E7,0xDA49,0xB4ED,0xB4F1,0xB4EC,0xB4F5,0xDA4D, -0xDA44, 0, 0,0xD9F1,0xB4FA,0xB4F4,0xD9FD,0xB4E4, -0xDA4A,0xDA43,0xB4E8,0xD9F7,0xB4F7,0xDA55,0xDA56, 0, -0xB4E5,0xDA48,0xB4F9,0xD9FB,0xD9ED,0xD9EE,0xB4FD,0xD9F2, -0xD9F9,0xD9F3, 0,0xB4FB,0xB544,0xD9EF,0xD9E8,0xD9E9, - 0,0xD9EB,0xB4EA,0xD9F8, 0,0xB4F8,0xB542, 0, - 0,0xD9FA,0xDA53,0xDA4B,0xB4E6,0xDA51,0xB4F2, 0, -0xB4F0, 0,0xDA57,0xB4EF,0xDA41,0xD9F4,0xD9FE,0xB547, -0xDA45,0xDA42,0xD9F0,0xB543,0xDA4F,0xDA4C,0xDA54,0xB4E9, -0xDA40,0xB546, 0,0xDA47, 0, 0,0xB4F3,0xB4F6, - 0,0xDA46,0xB545,0xD9F5,0xD5E4, 0, 0,0xDA50, -0xDA4E,0xDA52, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD9EC,0xB540, 0, 0, 0,0xDE61,0xDE60,0xDE46, -0xB7BD, 0,0xDE5F,0xDE49,0xDE4A, 0,0xB7C7,0xDE68, -0xB7C2,0xDE5E, 0,0xDE43,0xB7C8,0xB7BE,0xDE52,0xDE48, -0xDE4B,0xDE63,0xB7B8,0xDE6A,0xDE62,0xB7C1,0xDE57,0xB7CC, - 0, 0,0xB7CB,0xB7C5, 0, 0,0xDE69,0xB7B9, -0xDE55,0xDE4C,0xDE59,0xDE65,0xB7CD, 0,0xB7BB,0xDE54, - 0,0xDE4D,0xB7C4, 0,0xB7C3,0xDE50,0xDE5A,0xDE64, -0xDE47,0xDE51,0xB7BC,0xDE5B,0xB7C9,0xB7C0,0xDE4E,0xB7BF, -0xDE45,0xDE53,0xDE67,0xB4FE,0xBAB0,0xDE56,0xE26C,0xDE58, -0xDE66,0xB7C6,0xDE4F,0xB7BA,0xB7CA,0xBCF0,0xDE44, 0, -0xDE5D, 0, 0, 0,0xDE5C, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE2AA,0xBAAD,0xE27D,0xE2A4,0xBAA2, - 0,0xE26E,0xBAAF, 0,0xBA77,0xE26D,0xE2B0,0xBAB1, -0xE271,0xE2A3, 0,0xE273,0xE2B3,0xE2AF,0xBA75,0xBAA1, -0xE653,0xBAAE,0xBA7D,0xE26F, 0,0xE2AE,0xBAA3,0xE2AB, -0xE2B8,0xE275,0xE27E, 0, 0,0xE2B6,0xE2AC,0xBA7C, - 0, 0,0xE27C,0xBA76,0xBA74,0xBAA8, 0, 0, -0xE27A,0xE277,0xE278, 0,0xE2B2, 0,0xE2B7,0xE2B5, -0xBA7A,0xE2B9,0xBA7E,0xBAA7, 0,0xE270,0xE5FA,0xE279, - 0,0xBA78,0xBAAC,0xBAA9,0xBA7B,0xE2A5,0xE274,0xBAAA, -0xE2A7,0xBAA4,0xBAA6,0xBA73, 0,0xE2A9,0xE2A1,0xE272, -0xBAA5,0xE2B1,0xE2B4,0xE27B,0xE2A8, 0,0xBA79,0xBCDF, -0xE2A6,0xE5F9, 0,0xE2AD, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE276,0xE644, -0xE64E,0xBCE2,0xE64D,0xE659,0xBCE4,0xE64B, 0,0xE64F, -0xBCEF, 0,0xE646,0xBCE7, 0,0xE652,0xE9F0,0xBCF3, -0xBCF2,0xE654,0xE643,0xE65E,0xBCED, 0,0xBCE3,0xE657, - 0,0xE65B,0xE660,0xE655,0xE649,0xBCE6,0xBCE9,0xBCF1, -0xBCEC, 0,0xE64C,0xE2A2, 0, 0,0xE648,0xE65F, -0xBCE8, 0,0xBCEB,0xE661,0xBCE0,0xE656,0xE5FB,0xE65C, -0xC0DF, 0,0xE64A, 0,0xBCE1,0xE645,0xBCE5,0xE5FC, -0xBAAB,0xE641, 0,0xE65A,0xE642,0xE640,0xBCEA, 0, -0xE658, 0,0xE5FE,0xE651,0xE650,0xE65D,0xE647,0xBCEE, - 0, 0, 0, 0, 0, 0,0xE9F3, 0, -0xBF49,0xBEFE,0xEA40,0xE9EB,0xBF41,0xE9F7,0xBF48,0xBF43, -0xE9F5,0xED4F,0xE9FB,0xEA42,0xE9FA,0xE9E9,0xE9F8,0xEA44, -0xEA46,0xBEFD,0xEA45,0xBF44,0xBF4A, 0,0xBF47, 0, -0xE9FE,0xBF46,0xE9F9, 0,0xE9ED,0xE9F2, 0,0xE9FD, -0xBF45,0xBF42,0xBEFC,0xBF40,0xE9F1, 0,0xE5FD,0xE9EC, -0xE9EF,0xEA41,0xE9F4,0xE9EA,0xED4E,0xEA43,0xE9EE,0xE9FC, - 0, 0, 0, 0,0xED51,0xC0E3, 0, 0, -0xC0D7, 0, 0,0xC0DB,0xED53,0xED59,0xED57,0xC0D9, -0xC0DA,0xC0E1,0xED5A,0xED52,0xC0DC, 0,0xED56,0xED55, -0xED5B,0xC0E2, 0,0xC0DD,0xC0E0,0xED54,0xC0E4,0xC0DE, -0xC0E5,0xC0D8,0xED58, 0,0xED50, 0, 0,0xEFF7, - 0, 0,0xC271,0xEFF4,0xEFF6, 0,0xC26F,0xEFF2, -0xEFF3,0xEFEE, 0, 0,0xE9F6,0xEFEF,0xC270,0xEFEB, - 0,0xC26D,0xEFF8,0xC26E,0xEFEC,0xEFED,0xEFF1,0xC273, - 0,0xC272, 0, 0,0xEFF0,0xC378,0xF25F,0xF265, -0xC379,0xF25C,0xC376,0xC373,0xF267,0xC377, 0,0xC374, -0xF25E,0xF261,0xF262,0xF263,0xF266, 0,0xEFF5,0xF25D, -0xC375,0xF264,0xF268,0xF260, 0, 0, 0,0xF45D, -0xC46A,0xF460,0xC46B,0xF468,0xF45F,0xF45C, 0,0xF45E, -0xF462,0xF465,0xF464,0xF467,0xF45B, 0,0xC469,0xF463, -0xF466,0xF469,0xF461,0xF5D3,0xF5D4,0xF5D8,0xF5D9, 0, -0xF5D6,0xF5D7,0xF5D5, 0,0xC4E9, 0, 0, 0, - 0,0xC578,0xF6EB, 0, 0,0xF6E8,0xF6E9,0xF6EA, -0xC579, 0,0xF7E5,0xF7E4, 0,0xF8AF,0xC5F4,0xF8AD, -0xF8B0,0xF8AE,0xF8F5,0xC657,0xC665,0xF9A3,0xF96C, 0, -0xF9A2,0xF9D0,0xF9D1,0xA4F5, 0, 0, 0, 0, -0xA6C7,0xCA41, 0, 0,0xCB5E, 0,0xA85F, 0, -0xA862, 0,0xCB5F, 0,0xA860,0xA861, 0, 0, - 0, 0,0xCD58,0xCD5A,0xCD55,0xCD52,0xCD54, 0, - 0, 0,0xAAA4, 0, 0, 0,0xAAA2, 0, - 0,0xCD56,0xAAA3,0xCD53,0xCD50,0xAAA1,0xCD57, 0, -0xCD51,0xAAA5,0xCD59, 0, 0, 0, 0,0xCFAF, - 0,0xCFB3, 0, 0,0xACB7, 0, 0, 0, - 0,0xCFB6, 0,0xACAF,0xACB2,0xACB4,0xACB6,0xACB3, -0xCFB2,0xCFB1, 0,0xACB1,0xCFB4,0xCFB5, 0,0xCFAE, -0xACB5, 0,0xACB0, 0, 0, 0,0xCFB0, 0, - 0, 0, 0, 0, 0,0xD277,0xD278,0xD279, -0xAF50, 0,0xAF4C,0xD26E, 0,0xD276,0xD27B,0xAF51, - 0,0xD26C,0xD272,0xD26B,0xD275, 0, 0,0xD271, -0xAF4D,0xAF4F,0xD27A, 0,0xD26A,0xD26D,0xD273, 0, -0xD274,0xD27C,0xD270, 0,0xAF4E, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xB26D, -0xD64E, 0, 0,0xD650,0xD64C, 0,0xD658,0xD64A, -0xD657,0xB269,0xD648,0xDA5B,0xD652,0xB26C, 0,0xD653, -0xD656, 0,0xD65A, 0,0xD64F, 0,0xD654, 0, - 0,0xB26A,0xB26B,0xD659,0xD64D,0xD649,0xD65B, 0, -0xD651, 0, 0,0xD655, 0, 0, 0,0xD64B, - 0,0xB548,0xB549,0xDA65,0xB54F, 0,0xDA59,0xDA62, -0xDA58,0xB54C,0xDA60,0xDA5E, 0,0xDA5F,0xB54A, 0, -0xDA63, 0, 0, 0, 0, 0,0xDA5C,0xDA5A, -0xB54B,0xDA5D,0xDA61, 0, 0, 0,0xB54D, 0, - 0, 0,0xDA64, 0, 0, 0, 0, 0, - 0,0xDE70,0xDE77,0xDE79,0xDEA1, 0,0xB7DA,0xDE6B, - 0,0xB7D2, 0,0xDE7A,0xB7D7,0xDEA2,0xB7CE, 0, -0xDE7D, 0,0xDE6D,0xDE7E,0xDE6C, 0,0xB7DC, 0, -0xDE78,0xB7CF,0xDEA3, 0,0xB7D4,0xDE71,0xB7D9,0xDE7C, -0xDE6F,0xDE76,0xDE72,0xDE6E,0xB7D1,0xB7D8,0xB7D6,0xB7D3, -0xB7DB,0xB7D0,0xDE75, 0,0xB7D5, 0,0xB54E, 0, -0xDE7B, 0,0xDE73, 0, 0, 0, 0, 0, -0xDE74, 0, 0,0xE2C1, 0,0xBAB4, 0, 0, -0xE2BD,0xE2C3,0xE2BF, 0,0xBAB6,0xE2BE,0xE2C2,0xE2BA, - 0,0xE2BC,0xBAB5, 0, 0, 0, 0,0xE2C0, -0xE2BB, 0,0xBAB7, 0,0xBAB2, 0, 0,0xE2C4, - 0,0xBAB3,0xE667,0xE664,0xE670,0xE66A,0xE66C,0xBCF4, -0xE666,0xE66E, 0, 0,0xE66D,0xE66B, 0,0xE671, -0xBCF7,0xE668,0xE66F, 0,0xBCF5, 0, 0,0xE663, -0xE665,0xBCF6,0xE662,0xE672, 0,0xE669, 0, 0, -0xEA4A,0xBF51, 0, 0,0xEA55,0xEA53,0xBF4B,0xEA49, -0xEA4C,0xEA4D,0xEA48,0xBF55,0xBF56,0xEA47,0xEA56,0xEA51, -0xBF4F,0xBF4C,0xEA50,0xEA4E, 0, 0,0xBF52,0xEA52, -0xBF4D, 0,0xBF4E, 0,0xEA4F,0xBF50,0xEA4B, 0, -0xEA54,0xBF53,0xEA57,0xEA58,0xBF54, 0, 0,0xC0E7, -0xC0EE,0xED5C,0xED62, 0,0xED60,0xC0EA,0xC0E9,0xC0E6, -0xED5E, 0, 0, 0,0xC0EC,0xC0EB,0xC0E8, 0, -0xED61,0xED5D,0xED5F, 0,0xC0ED, 0, 0, 0, -0xC277,0xEFFB, 0,0xC274,0xC275,0xEFFD,0xC276,0xEFFA, - 0,0xEFF9,0xF26C,0xEFFC, 0,0xF26D,0xC37A,0xF26B, - 0, 0,0xF26A, 0,0xF269,0xC37B, 0, 0, -0xC46C, 0, 0,0xF46A,0xF46B, 0, 0, 0, - 0,0xF5DC,0xF5DB,0xC4EA, 0,0xF5DA,0xF6EC,0xF6ED, - 0, 0,0xF7E6,0xF8B1, 0, 0,0xF8F6,0xF9BC, -0xC679,0xF9C6,0xA4F6, 0,0xAAA6,0xAAA7, 0, 0, -0xACB8, 0, 0, 0, 0,0xC0EF,0xA4F7, 0, -0xAAA8,0xAF52,0xB7DD,0xA4F8, 0,0xB26E,0xBAB8,0xC962, - 0,0xCFB7,0xD27D, 0,0xE2C5, 0,0xC0F0,0xA4F9, -0xAAA9,0xCFB8,0xCFB9,0xDA66,0xB550, 0, 0,0xDEA4, - 0, 0,0xB7DE,0xE2C6, 0, 0,0xBCF8, 0, -0xC37C,0xA4FA,0xDA67,0xA4FB, 0,0xA6C9,0xCA42,0xA6C8, -0xA865,0xA864,0xA863,0xCB60, 0, 0, 0,0xAAAA, - 0,0xAAAB,0xCD5B, 0,0xCFBA, 0,0xCFBD,0xACBA, -0xCFBB, 0,0xACB9,0xCFBC,0xACBB, 0,0xD2A2,0xD2A1, -0xD27E,0xAF53, 0,0xD65D,0xD65E,0xB26F,0xD65C,0xD65F, -0xB552,0xB270, 0, 0,0xB551,0xDA6B,0xDA6A, 0, -0xDA68,0xDA69, 0,0xDA6C,0xDEA6,0xDEA5,0xDEA9, 0, -0xDEA8,0xDEA7,0xBAB9,0xE2C9, 0,0xE2C8,0xBABA,0xE2C7, -0xE673, 0,0xE674,0xBCF9, 0,0xEA59,0xEA5A, 0, - 0,0xF272,0xC37D,0xF271,0xF270,0xF26E,0xF26F,0xC4EB, -0xF46C,0xF6EE,0xF8F7, 0,0xA4FC, 0,0xC9A5,0xA5C7, -0xC9A6, 0, 0, 0,0xCA43,0xCA44, 0, 0, - 0, 0,0xCB66, 0, 0,0xCB62, 0,0xCB61, -0xAAAC,0xCB65,0xA867,0xCB63,0xA866,0xCB67,0xCB64, 0, - 0,0xCD5F,0xCFBE,0xCD5D,0xCD64, 0,0xAAAD, 0, -0xAAB0,0xCD65,0xCD61, 0,0xCD62, 0,0xCD5C,0xAAAF, -0xCD5E,0xAAAE,0xCD63, 0,0xCD60, 0, 0,0xCFC2, -0xACBD,0xACBE, 0,0xCFC5,0xCFBF, 0,0xCFC4, 0, -0xCFC0,0xACBC,0xCFC3,0xCFC1, 0, 0, 0, 0, - 0, 0, 0,0xD2A8,0xD2A5, 0,0xD2A7,0xAF58, -0xAF57,0xAF55,0xD2A4,0xD2A9,0xAF54,0xAF56,0xD2A6,0xD667, -0xD2A3,0xD2AA, 0, 0, 0, 0, 0,0xD662, -0xD666, 0,0xD665,0xDA6E,0xDA79, 0, 0,0xD668, - 0,0xD663,0xDA6D,0xB274, 0, 0,0xB273,0xD661, -0xD664,0xB275, 0,0xB272,0xB271,0xD660,0xD669, 0, - 0, 0,0xDA70,0xDA77, 0,0xB554,0xDA76,0xDA73, - 0,0xB556, 0, 0, 0,0xDA75, 0, 0, -0xDA6F,0xDA71,0xDA74,0xDA72,0xB555,0xDA78,0xB553,0xB7DF, - 0, 0,0xDEAD,0xDEAC,0xDEAA, 0,0xB7E2,0xB7E1, -0xDEAE, 0,0xDEAB,0xE2CA,0xBABB,0xB7E0, 0, 0, - 0,0xDEB0,0xDEAF, 0,0xE2CD,0xE2CB,0xBCFA, 0, -0xBABC,0xE2CC,0xE676, 0, 0, 0, 0,0xBCFB, -0xE675,0xE67E,0xE67D,0xE67B, 0,0xE67A,0xE677,0xE678, -0xE679,0xE67C,0xE6A1, 0, 0,0xEA5F,0xEA5C,0xEA5D, -0xBF57,0xEA5B,0xEA61,0xEA60,0xEA5E, 0,0xED64,0xED65, -0xC0F1, 0,0xC0F2,0xED63, 0,0xC279,0xEFFE,0xC278, -0xC37E, 0,0xC3A1,0xC46D,0xF46E,0xF46D,0xF5DD,0xF6EF, -0xC57A,0xF7E8,0xF7E7,0xF7E9,0xA5C8,0xCFC6,0xAF59,0xB276, -0xD66A,0xA5C9,0xC9A7,0xA4FD, 0, 0,0xCA45, 0, - 0, 0,0xCB6C,0xCB6A,0xCB6B,0xCB68,0xA868,0xCB69, - 0, 0, 0, 0, 0,0xCD6D, 0,0xAAB3, -0xCD6B,0xCD67,0xCD6A, 0,0xCD66,0xAAB5,0xCD69, 0, -0xAAB2,0xAAB1, 0,0xAAB4,0xCD6C,0xCD68, 0, 0, - 0, 0,0xACC2,0xACC5,0xCFCE,0xCFCD,0xCFCC,0xACBF, -0xCFD5,0xCFCB, 0,0xACC1,0xD2AF, 0,0xCFD2,0xCFD0, -0xACC4, 0,0xCFC8,0xCFD3, 0,0xCFCA,0xCFD4,0xCFD1, -0xCFC9, 0,0xACC0,0xCFD6,0xCFC7,0xACC3, 0, 0, - 0, 0,0xD2B4,0xD2AB,0xD2B6, 0,0xD2AE,0xD2B9, -0xD2BA,0xD2AC,0xD2B8,0xD2B5,0xD2B3,0xD2B7,0xAF5F, 0, -0xAF5D, 0, 0,0xD2B1, 0,0xD2AD, 0,0xD2B0, -0xD2BB,0xD2B2,0xAF5E,0xCFCF, 0,0xAF5A,0xAF5C, 0, - 0, 0, 0, 0,0xD678,0xD66D,0xD66B, 0, -0xD66C, 0,0xD673, 0,0xD674,0xD670,0xB27B,0xD675, -0xD672,0xD66F, 0,0xB279,0xD66E,0xB277,0xB27A,0xD671, -0xD679,0xAF5B,0xB278,0xD677,0xD676,0xB27C, 0, 0, - 0, 0, 0, 0, 0, 0,0xDA7E, 0, - 0, 0,0xDAA1,0xB560, 0,0xDAA7, 0, 0, -0xDAA9,0xDAA2,0xB55A,0xDAA6,0xDAA5,0xB55B,0xB561, 0, -0xB562,0xDAA8,0xB558,0xDA7D,0xDA7B,0xDAA3,0xDA7A,0xB55F, -0xDA7C,0xDAA4,0xDAAA,0xB559,0xB55E,0xB55C,0xB55D, 0, - 0, 0,0xB557, 0, 0, 0, 0,0xB7E9, -0xDEB7,0xB7E8,0xDEBB, 0,0xDEB1, 0,0xDEBC, 0, - 0, 0,0xDEB2,0xDEB3, 0,0xDEBD,0xDEBA,0xDEB8, -0xDEB9,0xDEB5,0xDEB4, 0,0xDEBE,0xB7E5, 0,0xDEB6, - 0,0xB7EA,0xB7E4,0xB7EB,0xB7EC, 0,0xB7E7,0xB7E6, - 0, 0,0xE2CE,0xBABE,0xBABD, 0, 0,0xE2D3, - 0,0xBCFC,0xBABF, 0, 0,0xBAC1,0xE2D4,0xB7E3, -0xBAC0,0xE2D0,0xE2D2,0xE2CF, 0,0xE2D1, 0, 0, - 0,0xE6AB, 0, 0,0xE6AA,0xE6A7,0xBD40,0xEA62, -0xBD41,0xE6A6, 0,0xBCFE, 0,0xE6A8,0xE6A5,0xE6A2, -0xE6A9,0xE6A3,0xE6A4,0xBCFD, 0, 0, 0, 0, -0xED69, 0,0xEA66, 0,0xEA65,0xEA67, 0,0xED66, -0xBF5A, 0,0xEA63, 0,0xBF58, 0,0xBF5C,0xBF5B, -0xEA64,0xEA68, 0,0xBF59, 0,0xED6D,0xC0F5,0xC27A, -0xC0F6,0xC0F3,0xED6A,0xED68, 0,0xED6B, 0,0xED6E, -0xC0F4,0xED6C,0xED67, 0, 0,0xF042,0xF045,0xF275, -0xF040, 0,0xF46F,0xF046, 0,0xC3A2,0xF044,0xC27B, -0xF041,0xF043,0xF047,0xF276, 0,0xF274, 0, 0, - 0, 0,0xC3A3,0xF273, 0, 0, 0,0xC46E, - 0, 0, 0, 0,0xC4ED,0xF6F1,0xC4EC,0xF6F3, -0xF6F0,0xF6F2,0xC5D0,0xF8B2,0xA5CA,0xCD6E,0xD2BC,0xD2BD, -0xB27D,0xDEBF,0xBF5D,0xC3A4,0xC57B,0xF8B3,0xA5CB, 0, -0xCD6F,0xA260, 0, 0,0xCFD7, 0,0xCFD8, 0, - 0, 0, 0, 0,0xD2BE,0xD2BF,0xB27E,0xB2A1, - 0, 0, 0,0xDAAB, 0,0xDEC2,0xDEC1,0xDEC0, -0xE2D5, 0,0xE2D6,0xE2D7,0xBAC2, 0, 0,0xE6AD, -0xE6AC, 0, 0,0xEA69,0xBF5E,0xBF5F, 0,0xED72, -0xED6F,0xED70,0xED71,0xF049,0xF048,0xC27C,0xF277,0xF5DE, -0xA5CC, 0,0xACC6, 0,0xB2A2,0xDEC3, 0,0xA5CD, - 0,0xD2C0,0xB2A3, 0, 0,0xB563,0xB564, 0, -0xA5CE,0xA5CF,0xCA46,0xA86A,0xA869,0xACC7,0xCFD9,0xDAAC, -0xA5D0,0xA5D1,0xA5D2,0xA5D3, 0, 0, 0,0xA86B, -0xA86C,0xCB6E,0xCB6D, 0, 0,0xAAB6,0xCD72,0xCD70, -0xCD71, 0, 0, 0, 0, 0, 0,0xCFDA, -0xCFDB, 0, 0,0xACCB,0xACC9, 0,0xACCA,0xACC8, - 0, 0, 0, 0,0xAF60, 0, 0, 0, - 0,0xAF64,0xAF63,0xD2C1,0xAF62,0xAF61, 0,0xD2C2, - 0, 0,0xB2A6,0xD67B,0xD67A,0xB2A4,0xB2A5, 0, - 0, 0,0xB566,0xB565,0xDAAE, 0, 0,0xDAAD, -0xB2A7, 0, 0, 0, 0, 0,0xB7ED,0xDEC5, -0xB7EE,0xDEC4, 0, 0, 0,0xE2D8,0xE6AE,0xBD42, -0xEA6A, 0, 0, 0,0xED73, 0,0xC3A6,0xC3A5, - 0, 0,0xC57C,0xA5D4,0xCD73, 0, 0,0xB2A8, -0xE2D9,0xBAC3, 0, 0,0xCB6F,0xCB70, 0, 0, -0xCD74,0xAAB8,0xAAB9, 0, 0,0xAAB7, 0, 0, - 0, 0,0xACCF,0xACD0,0xACCD,0xACCE, 0,0xCFDC, - 0, 0,0xCFDD,0xACCC, 0, 0, 0, 0, -0xD2C3, 0,0xAF68,0xAF69, 0,0xB2AB,0xD2C9, 0, -0xAF6E,0xAF6C,0xD2CA,0xD2C5,0xAF6B,0xAF6A,0xAF65,0xD2C8, -0xD2C7,0xD2C4,0xAF6D, 0,0xD2C6,0xAF66, 0,0xAF67, - 0, 0,0xB2AC,0xD6A1,0xD6A2,0xB2AD,0xD67C,0xD67E, -0xD6A4,0xD6A3,0xD67D, 0,0xB2A9,0xB2AA, 0,0xDAB6, -0xB56B,0xB56A,0xDAB0,0xB568, 0,0xDAB3,0xB56C,0xDAB4, -0xB56D,0xDAB1,0xB567,0xB569,0xDAB5, 0,0xDAB2,0xDAAF, - 0, 0, 0, 0, 0,0xDED2, 0,0xDEC7, -0xB7F0,0xB7F3,0xB7F2,0xB7F7,0xB7F6,0xDED3,0xDED1,0xDECA, -0xDECE,0xDECD,0xB7F4,0xDED0,0xDECC,0xDED4,0xDECB,0xB7F5, -0xB7EF,0xB7F1, 0,0xDEC9, 0, 0, 0, 0, -0xE2DB,0xBAC7,0xE2DF,0xBAC6,0xE2DC,0xBAC5, 0,0xDEC8, -0xDECF,0xE2DE, 0,0xBAC8,0xE2E0,0xE2DD,0xE2DA, 0, - 0,0xE6B1,0xE6B5,0xE6B7,0xE6B3,0xE6B2,0xE6B0,0xBD45, -0xBD43,0xBD48,0xBD49,0xE6B4,0xBD46,0xE6AF,0xBD47,0xBAC4, -0xE6B6,0xBD44, 0, 0, 0,0xEA6C, 0,0xEA6B, -0xEA73,0xEA6D,0xEA72,0xEA6F,0xBF60,0xEA71, 0, 0, -0xBF61, 0,0xBF62, 0,0xEA70,0xEA6E, 0, 0, - 0, 0,0xC0F8,0xED74, 0, 0,0xC0F7,0xED77, -0xED75,0xED76, 0, 0,0xC0F9, 0, 0, 0, -0xF04D, 0,0xC2A1,0xF04E, 0, 0,0xC27D,0xF04F, -0xC27E,0xF04C,0xF050, 0,0xF04A, 0, 0,0xC3A7, -0xF278,0xC3A8,0xC46F, 0,0xF04B,0xC470, 0, 0, - 0,0xC4EE,0xF5DF, 0,0xC57E,0xF6F4,0xC57D, 0, -0xF7EA,0xC5F5,0xC5F6, 0, 0,0xF9CC, 0, 0, -0xACD1,0xCFDE, 0,0xB56E,0xB56F,0xA5D5,0xA6CA,0xCA47, - 0,0xCB71,0xA86D, 0,0xAABA, 0,0xACD2,0xACD3, -0xACD4,0xD6A6,0xD2CB,0xAF6F, 0, 0,0xB2AE,0xD6A5, - 0, 0,0xDAB8,0xB571, 0,0xDAB7,0xB570, 0, - 0,0xDED5,0xBD4A,0xE6BB,0xE6B8,0xE6B9,0xE6BA, 0, - 0, 0, 0, 0,0xED78, 0,0xF051, 0, - 0, 0,0xF471,0xF470, 0,0xF6F5,0xA5D6,0xCD75, -0xAF70, 0, 0, 0,0xB572,0xDED6, 0, 0, -0xE2E1, 0,0xBD4B,0xEA74, 0,0xF052,0xF472,0xA5D7, - 0, 0,0xAABB,0xACD7,0xCFDF,0xACD8,0xACD6, 0, -0xACD5,0xD2CC,0xAF71, 0, 0,0xAF72,0xAF73, 0, - 0, 0,0xB2B0,0xD6A7,0xB2AF, 0, 0, 0, - 0, 0,0xDAB9,0xB2B1,0xB573,0xDED7,0xB7F8,0xB7F9, - 0,0xBAC9, 0,0xBACA,0xBD4C,0xBF64,0xEA75,0xBF63, - 0,0xED79,0xC0FA, 0,0xF053,0xF473,0xA5D8,0xA86E, -0xCD78,0xCD77,0xAABC,0xCD76,0xAABD,0xCD79, 0,0xCFE5, -0xACDB,0xACDA,0xCFE7,0xCFE6,0xACDF, 0,0xACDE, 0, - 0,0xACD9, 0,0xCFE1,0xCFE2,0xCFE3, 0,0xACE0, -0xCFE0,0xACDC,0xCFE4,0xACDD, 0, 0, 0, 0, -0xD2CF,0xD2D3,0xD2D1,0xD2D0, 0,0xD2D4, 0, 0, - 0,0xD2D5,0xD2D6,0xD2CE, 0,0xD2CD, 0,0xAF75, -0xAF76, 0,0xD2D7,0xD2D2, 0,0xD6B0, 0,0xD2D8, -0xAF77,0xAF74, 0, 0, 0,0xD6AA, 0,0xD6A9, - 0,0xD6AB,0xD6AC,0xD6AE,0xD6AD,0xD6B2,0xB2B5,0xB2B2, -0xB2B6,0xD6A8,0xB2B7,0xD6B1,0xB2B4,0xD6AF,0xB2B3, 0, - 0, 0, 0, 0,0xDABC,0xDABE,0xDABA,0xDABB, - 0, 0,0xDABF,0xDAC1,0xDAC2,0xDABD,0xDAC0,0xB574, - 0, 0,0xDEDB, 0,0xDEE0,0xDED8,0xDEDC, 0, - 0,0xDEE1,0xDEDD,0xB7FA,0xB843, 0,0xB7FD,0xDED9, -0xDEDA,0xBACE,0xB846,0xB7FE, 0,0xB844,0xB7FC,0xDEDF, -0xB845,0xDEDE,0xB841,0xB7FB,0xB842,0xDEE2,0xE2E6,0xE2E8, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xB840, 0, 0,0xE2E3,0xBACC,0xE2E9,0xBACD, -0xE2E7,0xE2E2,0xE2E5,0xE2EA,0xBACB,0xE2E4, 0,0xBD4E, -0xE6BF,0xE6BE, 0,0xBD51,0xBD4F,0xE6BC,0xBD4D,0xE6BD, - 0,0xBD50, 0, 0, 0,0xEA7D, 0,0xEAA1, - 0,0xEA7E,0xEA76,0xEA7A,0xEA79,0xEA77,0xBF66,0xBF67, -0xBF65,0xEA78,0xEA7B,0xEA7C, 0,0xBF68, 0,0xC140, -0xEDA3, 0,0xC0FC,0xED7B,0xC0FE,0xC141, 0, 0, -0xC0FD,0xEDA2,0xED7C,0xC0FB,0xEDA1,0xED7A,0xED7E,0xED7D, - 0, 0,0xF055,0xC2A4,0xC2A5,0xC2A2, 0,0xC2A3, - 0, 0,0xF054, 0,0xF27B, 0, 0,0xC3A9, - 0,0xF279,0xF27A, 0,0xF474,0xF477,0xF475,0xF476, -0xF5E0, 0, 0,0xC4EF,0xF7EB,0xF8B4, 0,0xC5F7, -0xF8F8,0xF8F9,0xC666,0xA5D9,0xACE1, 0,0xDAC3, 0, -0xDEE3, 0,0xA5DA,0xA86F, 0,0xAABE, 0,0xCFE8, -0xCFE9,0xAF78, 0, 0,0xDAC4,0xB575,0xB847,0xC142, -0xEDA4,0xF27C,0xF478,0xA5DB, 0, 0, 0,0xCDA1, -0xCD7A,0xCD7C,0xCD7E,0xCD7D,0xCD7B,0xAABF, 0, 0, - 0, 0,0xACE2,0xCFF2, 0,0xCFED,0xCFEA, 0, - 0,0xCFF1, 0, 0,0xACE4,0xACE5,0xCFF0,0xCFEF, -0xCFEE,0xCFEB,0xCFEC,0xCFF3,0xACE3, 0, 0, 0, - 0, 0, 0, 0, 0,0xAF7C, 0,0xAFA4, -0xAFA3,0xD2E1,0xD2DB,0xD2D9, 0,0xAFA1,0xD6B9,0xAF7A, -0xD2DE,0xD2E2,0xD2E4,0xD2E0,0xD2DA,0xAFA2,0xD2DF,0xD2DD, -0xAF79,0xD2E5,0xAFA5,0xD2E3,0xAF7D,0xD2DC, 0,0xAF7E, -0xAF7B, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xB2B9, 0,0xD6BA, 0, 0, -0xD6B3,0xD6B5,0xD6B7, 0,0xD6B8,0xD6B6,0xB2BA, 0, -0xD6BB, 0,0xD6B4, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xDAC8,0xB576,0xDAD0, 0, -0xDAC5, 0,0xDAD1, 0,0xDAC6,0xDAC7, 0, 0, -0xDACF,0xDACE,0xDACB,0xB2B8,0xB577,0xDAC9,0xDACC,0xB578, -0xDACD,0xDACA, 0, 0, 0, 0, 0, 0, - 0,0xDEEE, 0,0xDEF2,0xB84E, 0,0xE2F0,0xB851, -0xDEF0,0xF9D6, 0,0xDEED,0xDEE8,0xDEEA,0xDEEB,0xDEE4, - 0,0xB84D, 0, 0,0xB84C, 0,0xB848,0xDEE7, - 0,0xB84F, 0,0xB850,0xDEE6,0xDEE9,0xDEF1,0xB84A, -0xB84B,0xDEEF,0xDEE5, 0, 0, 0,0xE2F2,0xBAD0, -0xE2F4,0xDEEC,0xE2F6,0xBAD4,0xE2F7,0xE2F3, 0,0xBAD1, -0xE2EF,0xBAD3,0xE2EC,0xE2F1,0xE2F5,0xE2EE, 0, 0, -0xB849, 0,0xE2EB,0xBAD2,0xE2ED, 0, 0, 0, - 0, 0,0xBD54,0xE6C1,0xBD58, 0,0xBD56, 0, - 0,0xBACF, 0,0xE6C8,0xE6C9,0xBD53, 0, 0, -0xE6C7,0xE6CA,0xBD55,0xBD52,0xE6C3,0xE6C0,0xE6C5,0xE6C2, -0xBD59,0xE6C4, 0, 0,0xE6C6,0xBD57, 0, 0, - 0, 0,0xBF6A,0xEAA8, 0,0xEAA2,0xEAA6,0xEAAC, -0xEAAD,0xEAA9,0xEAAA,0xEAA7, 0,0xEAA4, 0,0xBF6C, -0xBF69,0xEAA3,0xEAA5, 0,0xBF6B,0xEAAB, 0,0xC146, - 0, 0,0xEDAA,0xEDA5,0xC145, 0, 0,0xC143, - 0,0xEDAC,0xC144,0xEDA8,0xEDA9,0xEDA6,0xEDAD,0xF056, - 0,0xC147,0xEDA7, 0,0xEDAE,0xEDAB, 0, 0, - 0,0xF05A, 0, 0,0xF057, 0,0xC2A6, 0, -0xF05B,0xF05D,0xF05C,0xF058,0xF059, 0, 0,0xF2A3, - 0,0xC3AA, 0,0xF27E,0xF2A2,0xF27D,0xF2A4, 0, - 0,0xF2A1, 0,0xF47A,0xF47D,0xF479,0xC471,0xF47B, -0xF47C,0xF47E,0xC472,0xC474,0xC473,0xF5E1, 0,0xF5E3, - 0,0xF5E2, 0, 0, 0,0xF6F6, 0, 0, -0xF8B5,0xF8FA,0xA5DC, 0, 0,0xCB72,0xAAC0,0xCDA3, -0xAAC1,0xAAC2,0xCDA2, 0,0xCFF8,0xCFF7,0xACE6,0xACE9, -0xACE8,0xACE7,0xCFF4,0xCFF6,0xCFF5, 0, 0,0xD2E8, -0xAFA7,0xD2EC,0xD2EB,0xD2EA,0xD2E6,0xAFA6,0xAFAA,0xAFAD, - 0, 0,0xAFAE,0xD2E7,0xD2E9,0xAFAC,0xAFAB,0xAFA9, -0xAFA8,0xD6C2, 0,0xD6C0,0xD6BC,0xB2BB, 0,0xD6BD, -0xB2BC,0xD6BE,0xD6BF,0xD6C1, 0,0xB2BD, 0, 0, -0xDAD5, 0,0xDAD4,0xDAD3,0xDAD2, 0, 0, 0, - 0,0xDEF6,0xB852, 0,0xDEF3,0xDEF5, 0,0xB853, - 0,0xB854,0xDEF4, 0, 0, 0, 0, 0, -0xE341, 0,0xE2F9,0xE2FA, 0,0xBAD7,0xBAD5,0xBAD6, -0xE343, 0,0xE342,0xE2FE,0xE2FD,0xE2FC,0xE2FB,0xE340, -0xE2F8, 0,0xE6CB,0xE6D0,0xE6CE, 0, 0, 0, -0xE6CD,0xE6CC,0xE6CF, 0,0xEAAE, 0,0xBF6D,0xC148, -0xEDB0, 0,0xC149,0xEDAF,0xF05F,0xF05E,0xC2A7, 0, -0xF2A5,0xC3AB,0xF4A1,0xC5A1,0xF6F7, 0,0xF8B7,0xF8B6, -0xC9A8,0xACEA,0xACEB,0xD6C3, 0,0xB856,0xA5DD,0xA872, -0xA871,0xA870, 0, 0, 0,0xCDA4, 0, 0, -0xAAC4,0xAAC3, 0,0xACEE, 0,0xCFFA,0xCFFD,0xCFFB, - 0,0xACEC,0xACED, 0, 0,0xCFF9,0xCFFC, 0, -0xAFB5, 0, 0, 0,0xD2F3,0xD2F5,0xD2F4,0xAFB2, -0xD2EF, 0, 0,0xAFB0,0xAFAF, 0,0xAFB3,0xAFB1, - 0,0xAFB4,0xD2F2,0xD2ED,0xD2EE,0xD2F1,0xD2F0, 0, - 0, 0, 0, 0, 0, 0,0xD6C6,0xD6C7, -0xD6C5, 0,0xD6C4,0xB2BE, 0, 0, 0, 0, -0xB57D, 0,0xDAD6,0xDAD8,0xDADA,0xB57C, 0, 0, -0xB57A, 0,0xDAD7,0xB57B,0xDAD9,0xB579, 0, 0, -0xDF41,0xDEF7,0xDEFA,0xDEFE,0xB85A,0xDEFC, 0,0xDEFB, -0xDEF8,0xDEF9,0xB858,0xDF40,0xB857, 0,0xB85C,0xB85B, -0xB859, 0,0xDEFD, 0, 0, 0,0xE349, 0, -0xE348, 0, 0,0xE344, 0, 0,0xBAD8,0xE347, -0xE346,0xBAD9, 0, 0, 0, 0, 0,0xBD5E, - 0,0xE6D2, 0,0xBD5F,0xBD5B,0xBD5D, 0,0xBD5A, -0xBD5C, 0, 0, 0,0xEAAF, 0,0xBF70,0xEAB1, -0xEAB0, 0,0xE345,0xBF72,0xBF71,0xBF6E,0xBF6F, 0, - 0, 0, 0, 0,0xEDB5, 0,0xEDB3,0xC14A, -0xEDB4, 0,0xEDB6,0xEDB2,0xEDB1, 0, 0,0xF060, -0xC2AA,0xC2A8,0xC2A9, 0, 0, 0, 0,0xF2A6, -0xF2A7,0xC3AD, 0,0xC3AC,0xF4A3,0xF4A4,0xF4A2, 0, -0xF6F8,0xF6F9, 0, 0,0xA5DE,0xCA48,0xA873, 0, -0xCDA5,0xAAC6,0xAAC5,0xCDA6, 0, 0,0xD040,0xACEF, -0xCFFE,0xACF0, 0, 0,0xAFB6,0xD2F8,0xD2F6,0xD2FC, -0xAFB7,0xD2F7,0xD2FB,0xD2F9,0xD2FA, 0, 0,0xD6C8, -0xD6CA, 0,0xB2BF, 0,0xD6C9,0xB2C0,0xB5A2,0xB5A1, -0xB57E,0xDADB, 0, 0, 0, 0,0xDF44,0xB85D, -0xB85E, 0,0xDF43,0xDF42, 0, 0, 0, 0, -0xE34A,0xBADB,0xBADA,0xE34B,0xE34C, 0,0xBD61,0xBD60, - 0,0xEAB5,0xE6D3,0xE6D5,0xE6D4,0xEAB4,0xEAB2,0xEAB6, -0xEAB3, 0,0xBF73, 0, 0, 0,0xEDB7,0xC14B, -0xEDB8,0xEDB9, 0, 0,0xC2AB,0xC2AC, 0,0xC475, - 0, 0,0xC5D1,0xA5DF, 0, 0, 0, 0, - 0,0xD041, 0, 0, 0, 0, 0, 0, -0xD2FD,0xAFB8, 0, 0, 0, 0, 0,0xB3BA, -0xB3B9, 0, 0,0xB5A4,0xDADD,0xB5A3,0xDADC, 0, - 0, 0, 0,0xDF45, 0,0xBADC,0xE34D,0xBADD, - 0, 0, 0, 0, 0, 0,0xC476,0xF4A5, - 0,0xA6CB,0xAAC7,0xCDA7, 0,0xACF2, 0,0xACF1, -0xD042,0xD043, 0, 0,0xD340,0xD342,0xAFB9, 0, -0xD344,0xD347,0xD345, 0, 0, 0,0xD346,0xD343, -0xD2FE,0xAFBA,0xD348,0xD341, 0, 0, 0, 0, -0xD6D3,0xB2C6,0xD6DC,0xB2C3, 0,0xD6D5,0xB2C7, 0, -0xB2C1, 0,0xD6D0,0xD6DD,0xD6D1,0xD6CE,0xB2C5, 0, -0xB2C2, 0,0xD6D4,0xD6D7,0xB2C4,0xD6D8,0xB2C8,0xD6D9, -0xD6CF,0xD6D6,0xD6DA,0xD6D2,0xD6CD,0xD6CB, 0, 0, -0xD6DB, 0, 0,0xDADF, 0, 0, 0, 0, -0xDAE4, 0, 0, 0,0xDAE0,0xDAE6,0xB5A7,0xD6CC, -0xDAE1,0xB5A5,0xDADE,0xB5AC,0xDAE2,0xB5AB,0xDAE3,0xB5AD, -0xB5A8,0xB5AE,0xB5A9, 0,0xB5AA, 0,0xB5A6, 0, -0xDAE5, 0, 0, 0, 0, 0, 0, 0, -0xB861,0xDF50, 0,0xDF53,0xDF47,0xDF4C,0xDF46,0xB863, - 0,0xDF4A, 0, 0, 0,0xDF48,0xB862, 0, -0xDF4F,0xDF4E,0xDF4B,0xDF4D,0xDF49,0xBAE1,0xDF52,0xB85F, -0xDF51, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xE35D, 0,0xBAE8,0xE358, 0,0xBAE7, -0xE34E, 0,0xE350,0xBAE0,0xE355,0xE354,0xE357,0xBAE5, -0xE352,0xE351, 0, 0,0xBAE4,0xBADF,0xE353,0xBAE2, -0xE359,0xE35B, 0,0xE356,0xE34F,0xBAE3, 0, 0, -0xBD69,0xBADE, 0, 0,0xE35C, 0, 0, 0, - 0, 0, 0, 0,0xE6D9,0xBD62, 0,0xE6DB, - 0,0xBD63, 0, 0,0xBD65,0xE6DE, 0,0xE6D6, -0xBAE6,0xE6DC, 0, 0, 0, 0,0xE6D8, 0, -0xB860,0xBD68, 0, 0,0xBD64, 0,0xBD66,0xBD67, - 0,0xBF76,0xE6DD,0xE6D7,0xBD6A, 0,0xE6DA, 0, - 0, 0, 0, 0,0xEAC0,0xEABB, 0, 0, -0xEAC5,0xBF74,0xEABD,0xBF78,0xEAC3,0xEABA,0xEAB7,0xEAC6, -0xC151,0xBF79,0xEAC2,0xEAB8,0xBF77,0xEABC,0xBF7B,0xEAB9, -0xEABE,0xBF7A,0xEAC1,0xEAC4, 0, 0, 0, 0, -0xEDCB,0xEDCC,0xEDBC,0xEDC3,0xEDC1, 0, 0,0xC14F, -0xEDC8,0xEABF, 0,0xEDBF, 0,0xEDC9,0xC14E,0xEDBE, -0xEDBD,0xEDC7,0xEDC4,0xEDC6, 0,0xEDBA,0xEDCA,0xC14C, - 0,0xEDC5,0xEDCE,0xEDC2,0xC150,0xC14D,0xEDC0,0xEDBB, -0xEDCD,0xBF75, 0, 0, 0, 0, 0, 0, - 0,0xF063, 0, 0,0xF061,0xF067,0xC2B0,0xF065, -0xF064,0xC2B2,0xF06A,0xC2B1, 0,0xF06B,0xF068,0xC2AE, -0xF069,0xF062,0xC2AF,0xC2AD,0xF2AB,0xF066, 0, 0, -0xF06C, 0, 0,0xF2A8, 0, 0, 0,0xC3B2, -0xC3B0,0xF2AA, 0,0xF2AC,0xF2A9,0xC3B1,0xC3AE,0xC3AF, -0xC3B3, 0, 0,0xC478, 0,0xF4AA, 0,0xF4A9, -0xF4A7,0xF4A6,0xF4A8, 0,0xC477,0xC479, 0, 0, -0xC4F0, 0, 0,0xF5E5,0xF5E4, 0, 0,0xF6FA, - 0,0xF6FC,0xF6FE,0xF6FD,0xF6FB, 0, 0,0xC5A3, -0xC5A2, 0, 0,0xC5D3,0xC5D2,0xC5D4,0xF7ED,0xF7EC, - 0,0xF8FB,0xF8B8,0xF8FC,0xC658, 0,0xC659,0xF96D, - 0, 0,0xC67E,0xA6CC, 0,0xCDA8, 0, 0, -0xD045,0xD046,0xD044, 0, 0,0xACF3, 0,0xD047, -0xD048,0xD049, 0, 0,0xD349,0xD34F, 0, 0, -0xD34D,0xAFBB,0xD34B, 0,0xD34C,0xD34E, 0, 0, - 0,0xD34A,0xB2C9, 0,0xD6DE,0xB2CB,0xD6E0,0xB2CA, -0xD6DF, 0, 0, 0, 0, 0,0xDAE8,0xB5AF, - 0,0xDAEA,0xDAE7,0xD6E1, 0,0xB5B0, 0,0xF9DB, -0xDAE9, 0, 0, 0, 0, 0, 0,0xDF56, - 0,0xB864,0xDF54,0xB865,0xDF55,0xB866, 0, 0, - 0,0xBAE9,0xE361,0xE35E,0xE360,0xBAEA,0xBAEB,0xE35F, - 0, 0, 0, 0, 0,0xE6DF, 0, 0, -0xE6E0, 0,0xBD6B,0xE6E2,0xE6E1, 0,0xA261, 0, -0xEACA,0xEACB,0xEAC7, 0,0xEAC8,0xBF7C,0xBF7D,0xEAC9, - 0,0xC157, 0, 0,0xC153,0xC158,0xC154,0xC156, -0xC152, 0,0xC155, 0, 0, 0, 0,0xC2B3, -0xEDCF, 0,0xF2AE, 0,0xF2AD, 0,0xF4AB,0xC47A, -0xC47B,0xF741,0xF5E6, 0,0xF740, 0,0xF8FD,0xF9A4, -0xA6CD, 0, 0,0xA874, 0,0xCDA9,0xAAC8, 0, -0xACF6,0xD04C,0xACF4,0xD04A,0xACF9,0xACF5,0xACFA,0xACF8, -0xD04B,0xACF7,0xAFBF,0xAFBE,0xD35A,0xAFC7,0xD353,0xD359, -0xAFC3,0xD352,0xD358,0xD356,0xAFC2,0xAFC4,0xD355,0xAFBD, -0xD354,0xAFC8,0xAFC5,0xAFC9,0xAFC6,0xD351,0xD350,0xD357, -0xAFC0,0xAFBC,0xAFC1, 0, 0, 0, 0, 0, -0xD6F0,0xD6E9, 0,0xB5B5,0xD6E8, 0,0xB2CF,0xB2D6, -0xB2D3,0xB2D9,0xB2D8,0xB2D4, 0,0xD6E2,0xD6E5, 0, -0xD6E4,0xB2D0,0xD6E6,0xD6EF,0xB2D1,0xD6E3,0xD6EC,0xD6ED, -0xB2D2,0xD6EA,0xB2D7,0xB2CD,0xB2D5,0xD6E7,0xB2CC,0xD6EB, - 0, 0,0xD6EE, 0, 0, 0,0xDAFB,0xDAF2, -0xB5B2,0xDAF9,0xDAF6,0xDAEE,0xDAF7,0xB5B4,0xDAEF, 0, -0xDAEB, 0, 0,0xB86C,0xDAF4, 0,0xB5B1,0xDAFA, - 0,0xB5B8,0xB5BA,0xDAED, 0, 0,0xB5B9,0xDAF0, -0xB5B3,0xDAF8,0xDAF1,0xDAF5, 0,0xDAF3,0xB5B6,0xDAEC, -0xB5BB,0xB2CE,0xB5B7,0xB5BC, 0, 0, 0, 0, - 0,0xB868,0xDF5D,0xDF5F,0xDF61,0xDF65, 0,0xDF5B, -0xDF59,0xB86A, 0,0xDF60,0xDF64,0xDF5C,0xDF58, 0, -0xDF57, 0, 0, 0,0xDF62,0xDF5A,0xDF5E,0xB86B, - 0,0xB869,0xDF66,0xB867,0xDF63, 0,0xE372, 0, - 0, 0, 0, 0,0xBAEE,0xE36A,0xBD78,0xE374, -0xBAF1,0xE378,0xBAF7,0xE365, 0, 0,0xE375,0xE362, - 0,0xE377,0xE366, 0,0xBAFE,0xBAFB,0xE376,0xE370, -0xBAED,0xBAF5,0xBAF4, 0,0xBAF3,0xBAF9, 0,0xE363, -0xBAFA,0xE371,0xBAF6,0xBAEC,0xE373,0xBAEF,0xBAF0,0xBAF8, -0xE368,0xE367,0xE364, 0,0xE36C,0xE369,0xE36D,0xBAFD, - 0,0xE379,0xBAF2,0xE36E,0xE36F, 0,0xE36B, 0, - 0, 0,0xBAFC, 0, 0, 0, 0,0xE6E7, -0xBD70,0xBD79,0xBD75,0xE6E4, 0,0xBD72,0xBD76,0xE6F0, -0xBD6C,0xE6E8, 0,0xBD74, 0, 0,0xE6EB,0xE6E6, -0xBD73,0xBD77,0xE6E5, 0,0xBD71, 0,0xE6EF,0xBD6E, -0xE6EE,0xE6ED,0xBD7A,0xE572,0xBD6D, 0,0xE6EC,0xE6E3, - 0,0xBD7B,0xE6EA,0xBD6F, 0, 0, 0, 0, - 0, 0, 0,0xE6E9, 0, 0, 0, 0, -0xBFA2,0xBFA7,0xBF7E,0xEAD8,0xEACF,0xEADB,0xEAD3,0xEAD9, -0xBFA8,0xBFA1,0xEACC,0xEAD2,0xEADC,0xEAD5,0xEADA,0xEACE, - 0, 0,0xEAD6,0xBFA3,0xEAD4,0xBFA6,0xBFA5,0xEAD0, -0xEAD1,0xEACD,0xEAD7,0xBFA4,0xEADE,0xEADD, 0, 0, - 0,0xEDDA,0xEDD6,0xC15F, 0,0xEDD0,0xC159,0xC169, -0xEDDC,0xC161,0xC15D,0xEDD3,0xC164,0xC167,0xEDDE,0xC15C, -0xEDD5,0xC165,0xEDE0,0xEDDD,0xEDD1,0xC160,0xC15A,0xC168, -0xEDD8,0xC163,0xEDD2,0xC15E,0xEDDF,0xC162,0xC15B,0xEDD9, -0xC166,0xEDD7, 0, 0,0xEDDB, 0, 0, 0, -0xF06E,0xF074,0xC2B9,0xF077,0xC2B4,0xC2B5,0xF06F,0xF076, -0xF071,0xC2BA,0xC2B7, 0,0xF06D, 0,0xC2B6,0xF073, -0xF075,0xC2B8,0xF072,0xF070, 0, 0, 0, 0, -0xF2B8,0xC3B7,0xC3B8,0xC3B4, 0,0xC3B5, 0,0xF2B4, -0xF2B2, 0,0xF2B6,0xC3BA,0xF2B7,0xF2B0,0xF2AF,0xF2B3, -0xF2B1,0xC3B6,0xF2B5,0xF4AC,0xC47E,0xC47D,0xF4AD, 0, -0xF4AF,0xF4AE,0xC4A1, 0, 0, 0,0xF5EB,0xF5E8, -0xF5E9, 0,0xF5E7,0xF5EA,0xC4F2,0xF5EC, 0,0xC4F1, - 0,0xF742, 0,0xC5D5,0xC5D7,0xF7EE,0xC5D6,0xF8B9, -0xF940,0xF942,0xF8FE,0xF941,0xC66C, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xA6CE, 0, -0xACFB,0xD26F,0xAFCA, 0, 0,0xB2DA,0xDAFC,0xDAFD, - 0, 0, 0,0xEADF,0xC16A,0xEDE1, 0, 0, -0xC2BB, 0,0xF2BA,0xF2B9,0xC4A2,0xF5ED, 0,0xF743, -0xC5F8,0xCA49, 0, 0,0xAAC9,0xA875, 0, 0, -0xD04D, 0, 0,0xD360,0xD35B,0xD35F,0xD35D,0xAFCB, -0xD35E,0xD35C, 0,0xD6F1, 0,0xDAFE,0xDB40,0xDF69, -0xDF6A,0xB86E,0xB86F,0xDF68,0xDF6B,0xDF67,0xB86D, 0, -0xBB40, 0,0xB870,0xE37A, 0,0xBD7C,0xE6F1,0xBD7D, - 0,0xBFA9,0xEAE2,0xEAE0,0xEAE1,0xEDE4,0xEDE3,0xEDE2, - 0, 0, 0,0xF2BB, 0,0xC3B9,0xF2BC,0xF744, -0xC5F9,0xF8BA,0xA6CF,0xAACB,0xAACA,0xD04F,0xACFC, 0, - 0,0xD04E,0xD362, 0,0xAFCC,0xD6F2,0xD361, 0, - 0, 0,0xB2DC,0xD6F5,0xD6F3,0xD6F4,0xB2DB, 0, -0xDB42,0xDB43,0xDB41, 0,0xB873,0xDF6D,0xDF6C,0xDF6E, -0xB872,0xB871, 0, 0,0xE6F2,0xE6F4, 0,0xBD7E, -0xE6F3,0xEAE3,0xBFAA,0xF079, 0,0xF078,0xC3BB,0xF2BD, -0xC3BD,0xC3BC,0xF4B0,0xF5EE,0xC4F3,0xA6D0,0xD050,0xACFD, -0xD365,0xAFCE,0xD364,0xD363, 0,0xAFCD, 0,0xD6FB, - 0,0xD6FD,0xD6F6,0xD6F7,0xB2DD,0xD6F8,0xB2DE,0xD6FC, -0xD6F9,0xD6FA,0xB2DF, 0,0xB5BE,0xB5BF, 0,0xDB44, - 0, 0, 0,0xDF6F,0xDF70, 0,0xE37E,0xBB43, -0xBB41,0xBB42,0xE37B,0xE37C, 0,0xE37D,0xE6F9, 0, -0xE6FA,0xBDA1,0xE6F7,0xE6F6,0xE6F8,0xE6F5,0xBFAD,0xEAE4, -0xBFAB,0xBFAC,0xEDE6,0xC16B,0xEDE5,0xEFA8, 0,0xF07A, -0xF07B,0xC2BC, 0,0xC2BD,0xC16C,0xF2BE,0xF2BF,0xF4B1, -0xC4A3,0xA6D1, 0,0xA6D2,0xACFE,0xAACC,0xAFCF,0xD051, - 0, 0, 0,0xB5C0,0xA6D3,0xAD41,0xD052,0xD053, -0xAD40,0xAD42,0xA6D4, 0,0xD054,0xAFD1,0xD366,0xAFD3, -0xAFD0,0xAFD2, 0,0xD741,0xB2E0, 0,0xD740,0xD6FE, - 0,0xDF71, 0, 0,0xE3A1, 0,0xBDA2, 0, -0xBFAE,0xEAE6,0xEAE5, 0,0xEDE7, 0, 0, 0, -0xF5EF, 0, 0,0xA6D5,0xCB73,0xCDAA,0xAD43,0xD055, - 0,0xD368, 0, 0, 0,0xAFD4,0xD367,0xAFD5, - 0, 0, 0,0xD743, 0, 0,0xB2E2,0xD742, -0xD744, 0,0xB2E1, 0, 0, 0, 0,0xDB46, -0xDB47,0xDB45,0xB5C1, 0, 0, 0,0xB874, 0, -0xB875, 0,0xBB45, 0,0xE3A3,0xE3A2,0xBB44, 0, - 0, 0, 0, 0,0xE6FB, 0, 0,0xE6FC, - 0, 0, 0, 0,0xEAE7, 0, 0,0xC170, -0xC16F,0xC16D,0xC16E,0xC171, 0,0xF07C,0xC2BF,0xC2BE, -0xF2C0,0xF4B2, 0, 0, 0,0xC5A5,0xC5A4,0xA6D6, - 0, 0,0xD1FB, 0,0xB877,0xB5C2,0xB876,0xBB46, - 0,0xA6D7,0xC9A9,0xA6D8,0xA6D9, 0, 0,0xCDAB, -0xCB76, 0,0xCB77,0xA877, 0,0xCB74,0xA876, 0, -0xA879,0xCB75,0xA87B,0xA87A,0xCB78,0xA878, 0, 0, - 0,0xAAD1,0xAACF,0xCDAD, 0,0xAACE, 0, 0, - 0,0xAAD3,0xAAD5,0xAAD2, 0,0xCDB0,0xCDAC,0xAAD6, - 0,0xAAD0,0xA87C, 0,0xAAD4,0xCDAF, 0, 0, -0xCDAE, 0,0xAACD, 0, 0, 0, 0, 0, - 0, 0,0xD05B,0xAD47,0xAD48,0xD05D, 0,0xD057, -0xD05A,0xD063,0xD061, 0,0xAD49,0xD067,0xAD4C,0xD064, -0xD05C,0xD059, 0, 0,0xDB49,0xD062,0xAD44,0xD065, -0xD056,0xD05F,0xAD46,0xAD4B,0xD060,0xAD4F,0xAD4D, 0, -0xD058,0xAD4A, 0,0xD05E,0xAD4E,0xAD45,0xD066, 0, - 0, 0, 0, 0, 0,0xAFDA, 0,0xAFE3, -0xAFD8,0xAFD6,0xD36A,0xAFDE,0xAFDB,0xD36C, 0, 0, -0xAFDD,0xD36B,0xD369,0xD36E,0xAFE2,0xAFE0,0xDB48, 0, -0xD36F,0xD36D,0xAFD7, 0, 0,0xAFD9,0xAFDC, 0, -0xAFDF, 0,0xAFE1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xD74E,0xB2E4, 0, -0xD745,0xD747, 0,0xD748, 0,0xD750,0xD74C,0xD74A, - 0,0xD74D,0xD751,0xB2E5,0xB2E9,0xD746, 0,0xD74F, - 0,0xB2E7, 0,0xB2E6,0xD74B,0xD749, 0,0xB2E3, -0xB2E8, 0, 0, 0, 0, 0, 0, 0, - 0,0xB5C8,0xDB51, 0, 0,0xDB4F,0xB5CA, 0, - 0, 0, 0,0xDB4A,0xDFA1, 0,0xB5C9,0xDB4E, - 0, 0,0xDB4B,0xB5C5,0xB5CB,0xDB50,0xB5C7,0xDB4D, -0xBB47,0xB5C6,0xDB4C,0xB5CC,0xB5C4,0xB5C3, 0, 0, - 0, 0, 0,0xDF77,0xDF75, 0,0xDF7B, 0, -0xDF73,0xDFA2,0xDF78, 0,0xDF72,0xB87B,0xB8A3,0xDF7D, - 0,0xDF76, 0,0xB87E, 0, 0,0xB87C,0xDF7E, -0xB879,0xB878,0xDF79,0xB87D,0xB5CD, 0,0xDF7C,0xDF74, -0xB87A,0xB8A1,0xB8A2, 0, 0, 0, 0,0xBB4C, -0xBB48, 0,0xBB4D,0xE3A6, 0, 0,0xE3A5,0xE3A7, -0xBB4A,0xE3A4,0xBB4B,0xE3AA,0xE3A9,0xE3A8, 0,0xBB49, - 0, 0, 0, 0, 0,0xE741, 0,0xE744, -0xBDA8,0xE743,0xBDA7,0xBDA3,0xBDA4,0xBDA5,0xE740,0xE6FE, -0xBDA6, 0,0xE742,0xE6FD, 0, 0,0xEAE9,0xEAF3, -0xBFB1,0xBFB0, 0,0xEAED,0xEAEF, 0,0xEAEA, 0, -0xEAEE,0xEAE8,0xEAF1,0xBFAF,0xEAF0,0xEAEC, 0,0xEAF2, - 0,0xEAEB,0xC174,0xEDE8,0xEDEE,0xC178,0xC17A,0xC177, -0xC176, 0,0xC175,0xC173,0xEDE9,0xEDEC,0xC172,0xEDED, - 0,0xC179,0xEDEB, 0,0xEDEA,0xC2C0, 0,0xC2C1, -0xF0A1,0xF07D,0xF07E, 0, 0,0xF2C2, 0,0xF2C1, -0xC3BE,0xF4B4,0xC4A4,0xF4B3, 0,0xF5F0,0xF745,0xC5A6, -0xF943,0xF944,0xC5D8,0xA6DA, 0,0xAAD7,0xDB52,0xBB4E, -0xC17B,0xEDEF,0xA6DB, 0,0xAFE5,0xAFE4,0xDB53, 0, - 0, 0,0xEAF4,0xA6DC,0xAD50, 0, 0,0xDB54, -0xDB55,0xDB56,0xBB4F,0xBFB2,0xA6DD, 0,0xAAD8,0xD068, -0xAFE6,0xD370,0xB2EA, 0,0xDB57,0xB8A4, 0,0xBB50, -0xBFB3,0xC17C,0xC2C2,0xF4B5,0xA6DE,0xAAD9, 0, 0, -0xAFE7,0xD752,0xB5CE, 0,0xBB51,0xE3AB,0xE745, 0, - 0, 0, 0,0xA6DF,0xB5CF,0xDFA3,0xBB52,0xA6E0, -0xCDB1,0xD069,0xAD51, 0, 0,0xD372, 0, 0, -0xAFEA, 0,0xAFE8,0xAFE9,0xAFEB, 0, 0,0xD371, - 0, 0,0xD757,0xD754,0xD756,0xB2EB,0xB2ED,0xB2EC, -0xD753,0xB2EE,0xD755, 0,0xDB58,0xDB59, 0,0xDB5A, -0xDFA6, 0,0xDFA7, 0,0xDFA5,0xDFA8, 0,0xB8A5, - 0,0xDFA4, 0,0xBB53, 0, 0,0xE74A,0xE746, -0xE749,0xE74B,0xE748,0xE747, 0,0xEAF5,0xEAF6,0xEAF7, -0xBFB4,0xBFB5,0xEDF1,0xEDF0,0xEDF2, 0,0xF0A3,0xF0A2, - 0,0xF2C4, 0,0xF2C5,0xF2C3, 0,0xC4A5, 0, -0xF4B6,0xF4B7, 0,0xF746,0xF7EF,0xF8BB,0xA6E1,0xA87D, - 0,0xC17D,0xA6E2, 0,0xD758,0xDB5B, 0,0xC641, -0xCA4A, 0, 0, 0,0xCA4B,0xCA4D,0xA6E3,0xCA4E, -0xCA4C, 0, 0,0xCBA2,0xCBA3,0xCB7B, 0, 0, - 0, 0,0xCBA1,0xA8A1, 0,0xA8A2,0xCB7C,0xCB7A, -0xCB79,0xCB7D,0xA87E,0xCB7E,0xD06A, 0, 0, 0, -0xCDB6,0xAADC,0xCDB5,0xCDB7, 0,0xAADB,0xCDBC,0xAADF, -0xCDB2,0xCDC0,0xCDC6,0xAAE6,0xCDC3,0xAAE3, 0,0xCDB9, -0xCDBF,0xCDC1, 0,0xCDB4,0xAAE2,0xAADD,0xCDBA,0xAAE4, -0xAAE7,0xAAE1, 0,0xAADA,0xCDBE,0xCDB8,0xCDC5,0xAAE9, -0xAAE5,0xAAE0,0xCDBD,0xAFEC,0xCDBB,0xAADE,0xAAE8, 0, -0xCDB3, 0,0xCDC2,0xCDC4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xAD62,0xAD5C,0xAD64,0xAD61,0xD071,0xD074,0xAD5D, - 0,0xD06B, 0,0xAD56,0xAD60, 0,0xAD63,0xAD65, -0xD0A2,0xD077, 0,0xAD55,0xD0A1,0xAD59,0xAD57,0xAD52, -0xD06F, 0,0xD07E,0xD073,0xD076,0xD0A5, 0,0xAD66, -0xD07D,0xAD5E,0xD078,0xD0A4,0xD075,0xD079,0xD07C, 0, - 0,0xD06D,0xD0A3,0xD07B, 0, 0,0xD06C, 0, -0xD070,0xAD5F,0xAD5A,0xAD53,0xAD58,0xAD54,0xAD67,0xD06E, -0xD3A5,0xAD5B, 0, 0,0xD07A,0xCE41, 0, 0, - 0, 0, 0, 0, 0, 0,0xD3A8,0xAFFA, - 0,0xD376, 0,0xD3A3,0xD37D, 0,0xD3B2, 0, -0xD3AA, 0,0xD37E, 0,0xD3A9,0xD378,0xD37C,0xD3B5, -0xAFFD,0xD3AD,0xD3A4,0xAFED,0xD3B3,0xD374, 0,0xD3AC, - 0,0xAFFC,0xAFF7,0xD373,0xAFF5,0xAFF4,0xAFF9,0xD3AB, -0xAFF1,0xAFF8,0xD072,0xDB5C,0xD3A6, 0, 0,0xD37A, -0xAFFB,0xD37B,0xD3A1,0xAFFE,0xD375,0xD3AF, 0,0xD3AE, -0xD3B6,0xAFF3,0xAFF0,0xD3B4,0xD3B0,0xD3A7,0xD3A2,0xAFF6, -0xAFF2,0xD377,0xAFEE,0xD3B1,0xAFEF, 0,0xD379, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xD75E,0xD760,0xD765,0xD779,0xB2FC, -0xB2F2, 0,0xD75D,0xB2FD,0xB2FE,0xD768,0xD76F,0xD775, - 0,0xD762, 0,0xD769, 0, 0,0xB340,0xD777, -0xD772,0xB2FA,0xB2F8,0xD76E,0xD76A,0xD75C,0xB2EF,0xD761, -0xD759, 0,0xB2F7,0xB2F9,0xD766,0xD763,0xB2F4,0xD773, -0xB2F1,0xD764,0xD77A,0xD76C, 0,0xD76B,0xB2F0, 0, -0xB2FB, 0,0xB2F3,0xD75A,0xD75F,0xD770,0xD776,0xB341, -0xD75B,0xD767,0xD76D,0xB2F6, 0, 0,0xD778,0xD771, -0xD774, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xB2F5, 0,0xDB6C, -0xDB60,0xB5D7,0xDB7D,0xDBA7,0xDBAA,0xB5D5,0xDB68,0xDBA3, -0xDB69,0xDB77,0xB5E2,0xDB73,0xB5DF, 0,0xDB74,0xDB5D, - 0,0xDBA4, 0, 0,0xB5E8,0xDBA1,0xDB75,0xDBAC, -0xDB70,0xDFC8, 0,0xDBAF,0xB5E6,0xDB6E,0xDB7A,0xB5E9, -0xB5D4,0xDB72,0xDBAD,0xDB6B,0xDB64,0xDB6F, 0,0xDB63, -0xDB61,0xB5D0,0xDBA5,0xDB6A,0xDBA8, 0,0xDBA9,0xB5D8, -0xB5DD,0xB5D9,0xB5E1,0xDB7E,0xB5DA,0xDB76,0xDB66, 0, -0xB5D2,0xDB5E,0xDBA2,0xDBAB,0xDB65,0xB5E0,0xDBB0,0xDB71, - 0,0xDB6D, 0,0xB5D1,0xB5E5, 0,0xDB7C,0xB5E7, - 0,0xDB78,0xB5DC,0xB5D6,0xB5DE,0xB5D3,0xB5E4,0xDB79, -0xDB67,0xDB7B,0xDB62,0xDBA6, 0, 0, 0, 0, - 0, 0, 0,0xDBAE, 0, 0, 0, 0, - 0, 0, 0,0xDB5F, 0, 0, 0, 0, - 0,0xDFC7, 0,0xDFDD,0xB855,0xDFCC, 0,0xDFCA, -0xDFB5,0xB8A9,0xDFC5,0xDFD9,0xDFC1,0xB8B1,0xDFD8,0xDFBF, -0xB5E3,0xDFCF,0xDFC0,0xDFD6,0xB8B0,0xB8A8, 0,0xDFAA, -0xDFB2, 0,0xDFCB,0xDFC3,0xDFDC,0xDFC6,0xB8B6,0xDFD7, - 0,0xB8AD, 0,0xDFC9,0xDFD1,0xDFB6,0xDFD0, 0, -0xDFE1,0xDFB1,0xDFD2, 0,0xDFDF, 0,0xDFAB,0xB5DB, - 0,0xDFB9,0xDFB8,0xB8AF, 0,0xDFBC,0xDFBE,0xDFCD, -0xDFDE,0xB8B2, 0,0xB8B3, 0,0xDFB0,0xB8AB,0xDFB4, -0xDFDA,0xB8B4, 0,0xB8AC,0xB8AE,0xB8B5,0xDFE0,0xDFD3, -0xDFCE, 0, 0,0xDFBB,0xDFBA,0xB8AA,0xDFAC,0xB8A7, -0xDFC4,0xDFAD,0xDFC2, 0, 0,0xDFB7,0xDFDB, 0, - 0, 0,0xB8A6, 0, 0, 0,0xDFB3, 0, - 0, 0, 0, 0, 0,0xDFAF,0xDFD5,0xDFAE, -0xBB60,0xE3D3, 0, 0,0xE3C2, 0, 0,0xE3AC, -0xE3CA,0xBB58,0xE3BB,0xE3C5,0xBB5B,0xE3BE,0xBB59,0xE3AF, -0xE3CD,0xE3AE,0xE3C1, 0,0xE3AD, 0, 0,0xE3BF, -0xE3C8,0xE3C6,0xE3BA,0xE3B5,0xE3B3, 0,0xE3B4,0xE3C7, -0xE3D2,0xE3BC,0xBB5A, 0,0xE3B7, 0,0xE3CB, 0, -0xBB5D,0xE3B6,0xE3B0,0xE3C0,0xBB61, 0, 0,0xBB55, -0xBB5E,0xE3B8,0xE3B2, 0,0xBB57,0xDFD4,0xBB56,0xE3C3, - 0,0xBB54,0xBB63,0xBB5C,0xE3C4,0xE3B9,0xE3B1,0xE3CC, -0xE3BD,0xBB62,0xE3D0,0xBB5F,0xE3CF, 0,0xE3C9,0xE3CE, - 0, 0, 0,0xE3D1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE773, -0xE774,0xE767,0xE766,0xE762,0xBDB4, 0,0xBDAC,0xE776, -0xE775,0xDFA9,0xE75F,0xE763,0xE75D, 0,0xE770,0xE761, - 0,0xE777,0xE75A,0xE758,0xE764,0xE76E,0xE769,0xBDB6, -0xE74F, 0,0xE76D, 0, 0, 0,0xBDB7,0xDFBD, -0xE75B,0xE752,0xE755,0xE77B,0xE75C,0xE753,0xE751,0xE74E, - 0,0xBDB0,0xE765,0xBDAF,0xBDB3,0xE760,0xE768,0xBDA9, -0xE778,0xE77C,0xBDAB, 0,0xE757,0xE76B,0xE76F,0xE754, -0xE779,0xBDB2, 0,0xBDB1,0xE74C,0xBDB5,0xE772,0xE756, -0xE76A,0xE750,0xE75E,0xE759,0xBDAD,0xBDAE,0xE76C,0xE77D, -0xE77A,0xE771, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE74D, 0,0xBDAA,0xEB49, 0, -0xEB40,0xEB43, 0,0xBFBB,0xEB45,0xEAF9,0xEB41,0xEB47, -0xBFB8,0xBFBC,0xBFB6, 0, 0,0xEAFB,0xEB4C, 0, - 0,0xEB46, 0,0xEAFC,0xEB55,0xEB4F,0xEAF8,0xEE46, -0xEAFE,0xBFB7, 0,0xEB4A, 0,0xEB54,0xBFBF, 0, -0xEB51,0xEAFD,0xEB44,0xEB48,0xEB42,0xEB56,0xEB53,0xEB50, -0xBFB9,0xBFBA,0xBFBE,0xEAFA,0xEB57,0xBFBD,0xEB4D, 0, - 0,0xEB4B, 0, 0, 0,0xEB4E,0xEE53,0xEE40, -0xEE45,0xEE52,0xEE44,0xEDFB,0xEE41, 0,0xC1A2, 0, -0xEDF4,0xEE4D,0xEE4F,0xEDF3,0xC1A1,0xEE51,0xEE49,0xC1A8, -0xEE50,0xEE42,0xC1AA,0xEDF9,0xEB52,0xEE4A,0xEE47,0xEDF5, -0xEE55,0xC1A4, 0, 0,0xC1A5,0xEDF7,0xEE48, 0, -0xEE54,0xEE4B,0xEDFD,0xC1A7,0xC1A3,0xEE4C,0xEDFE,0xEE56, -0xEDF8,0xEE43,0xEE4E,0xEDFA,0xEDFC, 0,0xC2CB,0xEDF6, -0xC1A9,0xC2C4,0xC17E, 0, 0, 0, 0,0xC1A6, -0xC2C8,0xF0B3, 0,0xF0A9,0xF0A4,0xF0AA,0xF0B4,0xF0B8, -0xF0B7,0xC2CA,0xC2C9, 0, 0,0xF0AB,0xF0B9,0xF0AE, -0xF0A6, 0,0xF0A8,0xF0A7,0xF0AD,0xF0B2,0xF0A5,0xF0AC, -0xF0B1,0xC2C7, 0,0xF0AF, 0,0xC2C5,0xF0B0,0xC2C3, -0xC2C6,0xF2D5,0xF0B5, 0, 0,0xC3C2, 0,0xF2CD, -0xF2D1,0xF2C9,0xF2CC, 0,0xF2D4,0xC3C0,0xF2D9,0xF2D2, - 0,0xF2CA,0xF2DA,0xF2D3,0xC3C3,0xC3C4,0xF2D7, 0, -0xF2CB,0xC3BF,0xC3C1,0xF2C6,0xF2CE,0xF2C8, 0,0xF2D8, -0xF2D6,0xF2C7,0xF2CF, 0, 0, 0,0xF4BE,0xC3C5, -0xF2D0,0xC4A7,0xC4A9,0xC4A6, 0,0xF4C3,0xF4BB,0xF4B9, -0xF4BD,0xF4BA, 0, 0,0xF4BF,0xF4C1,0xC4AA,0xC4AC, - 0,0xF4C0,0xC4AD,0xC4AB,0xF4C2, 0, 0, 0, - 0,0xC4A8, 0, 0, 0, 0, 0,0xC4F4, -0xF5F1,0xF5F7,0xC4F6,0xF4BC,0xF5F6, 0,0xF5FD,0xF5F4, -0xF5FB,0xF5FA,0xF4B8,0xF5F5,0xF0B6,0xF5FE,0xF5F3,0xF5F8, - 0,0xF5FC,0xF5F2, 0,0xF74A,0xC4F5,0xF5F9, 0, - 0,0xF7F4,0xF74B,0xF749,0xF747,0xF748,0xF74C, 0, -0xC5D9,0xF7F2,0xF7F0,0xF7F5,0xF7F3, 0,0xF7F6,0xC5DA, -0xF7F1, 0, 0,0xF8BC, 0, 0,0xF945,0xF946, -0xF947, 0, 0,0xF9C7,0xF9BD,0xCA4F,0xAAEA, 0, -0xAD68, 0,0xD3B8,0xD3B7,0xB040,0xB342,0xD77C, 0, - 0,0xD77B, 0,0xB5EA,0xB8B8, 0,0xB8B7,0xB8B9, - 0,0xE3D4,0xE77E,0xEB58,0xEB5A,0xEB59, 0,0xC1AB, -0xEE57,0xF0BA,0xF9A5,0xA6E4, 0,0xCDC9,0xCDCA,0xCDC8, -0xCDC7,0xAAEB, 0,0xD0A9,0xD0A7, 0, 0,0xD0A6, - 0,0xAD69,0xAD6B,0xAD6A,0xD0A8, 0, 0, 0, - 0, 0, 0, 0, 0,0xD3C4,0xD3C1,0xD3BF, - 0, 0,0xB041,0xD3C2,0xB046,0xD3BC,0xD3CB, 0, -0xD3CD,0xD3BD, 0,0xB043,0xD3CE,0xD3C9,0xD3BB,0xD3C0, -0xD3CA,0xD3C6,0xD3C3, 0,0xB048,0xD3CC,0xD3BE, 0, - 0,0xD3C7,0xD3B9,0xB047,0xB044,0xD3C5, 0,0xD3C8, -0xD3BA,0xB045,0xB042, 0, 0, 0, 0,0xB34C, -0xD7A5,0xB34B, 0,0xD7A8,0xD7AB,0xB348,0xB346,0xD77E, -0xD7A9,0xD7A7,0xD7A4,0xD7AC,0xD7AD,0xD7AF,0xD7B0,0xD77D, -0xB345,0xD7A2,0xD7A1,0xD7AE,0xB347,0xD7A3,0xB349,0xB344, -0xD7A6,0xB34D, 0,0xB34A,0xD7AA, 0, 0, 0, -0xB5F1,0xDBBF, 0,0xDBB4,0xB5EE, 0,0xDFE7,0xDBBD, -0xDBB1,0xB5EC,0xDBB6,0xB5EF,0xDBBA,0xDBB8,0xB5F2,0xB5EB, - 0, 0,0xDBB2,0xDBB5,0xB5F0, 0,0xDBB3, 0, -0xDBBE,0xDBBC,0xDBB7,0xDBB9,0xDBBB,0xB5ED, 0, 0, - 0, 0, 0, 0, 0,0xDFE8,0xDFEE,0xDFE4, -0xDFEA,0xB8BA,0xDFE6,0xB8C0, 0, 0,0xB8BF, 0, -0xB8BE,0xDFED,0xB8C1,0xB8C2,0xDFE3,0xDFF0,0xB8C3,0xB8BD, -0xB8BC,0xDFEC,0xB8C4,0xDFE2,0xDFE5,0xDFEF,0xDFEB, 0, - 0,0xE3F4,0xE3E9,0xB8BB, 0, 0, 0, 0, -0xBB6A,0xE3DD,0xE3F2,0xE3DE,0xBB65, 0,0xE3DB, 0, -0xE3E4,0xE3DC,0xBB67,0xE3D6,0xE3F1,0xBB68,0xE3EE,0xE3EF, -0xE3D7,0xBB6D,0xE3E6, 0,0xE3E0,0xE3E7,0xE3DA, 0, -0xE3F3,0xE3EB,0xE3E5,0xE3D5,0xBB69,0xE3EC, 0,0xBB6C, -0xE3F0, 0,0xE3EA,0xBB66,0xE3E8, 0,0xE3E2,0xBB64, -0xE3D9,0xE3E1,0xE3ED,0xE3DF, 0, 0,0xE3E3, 0, - 0, 0, 0, 0,0xBDC1,0xDFE9,0xE7B2,0xE7BB, -0xE7B1,0xE7AD,0xE7AA,0xBDC2,0xE7A8,0xBB6B,0xE7A1,0xBDC0, -0xE7A7,0xBDBF,0xE7AC,0xE7A9,0xE7B9,0xE7B4,0xE7AE,0xE7B3, -0xBDBB,0xE7AB,0xE7BE,0xE7A2,0xE7A3,0xE7BA,0xBDBC,0xE7BF, -0xBDBE,0xE7C0,0xE7B0,0xE3D8,0xE7B6,0xE7AF,0xE7B8,0xE7B5, - 0, 0, 0,0xE7A6,0xBDB9,0xE7BD,0xBDBA,0xE7A4, -0xBDBD,0xEB64,0xE7B7,0xE7BC, 0, 0, 0, 0, - 0,0xEB61,0xBDB8,0xBFC0,0xEB6B,0xEB67, 0,0xEB65, -0xEB60,0xEB6F, 0, 0, 0,0xBFC4, 0,0xEB5C, -0xEB68,0xEB69,0xEB5F,0xEB5E,0xEB6C, 0,0xEB62,0xEB5D, -0xEB63, 0,0xEB6E,0xEB5B,0xEB6D,0xEB6A,0xBFC2,0xBFC1, - 0, 0,0xBFC3,0xEB66,0xF0CB, 0, 0, 0, - 0, 0,0xEE59,0xC1B1,0xEE5D,0xEE5A,0xEE61,0xEE67, -0xEE5C, 0,0xEE70,0xC1AE,0xEE6A,0xEE5F,0xEE6B,0xEE66, -0xEE6D,0xEE5E,0xC1B3,0xC1B2,0xEE60,0xEE6E,0xEE58,0xEE6C, -0xC1AC, 0,0xEE64,0xEE63,0xEE68,0xEE5B,0xC1B0, 0, -0xC1B4,0xEE62,0xEE69,0xC1B5,0xEE65, 0, 0, 0, - 0,0xC1AD,0xC1AF,0xF0C7,0xF0C5, 0, 0,0xF0CC, -0xF0C9,0xF0CD, 0,0xF0BE,0xF0C6,0xF0D1,0xEE6F,0xF0C2, -0xC2CF,0xE7A5,0xF0BD,0xF0CA,0xF0C4,0xF0C1,0xF0BC,0xF0BB, -0xF0D0, 0,0xF0C0,0xF0BF,0xC2CD,0xF0C8, 0,0xC2CC, - 0, 0,0xC2CE,0xF0C3,0xF0CF, 0,0xF2DE,0xF2DF, - 0,0xC3C9,0xF2DC,0xC3C6,0xF2E4, 0,0xC3CA,0xF2E6, -0xF2DB,0xF0CE,0xF2E8,0xF2DD, 0,0xC3C7,0xF2E3, 0, -0xF2E5,0xF2E0,0xF2E7,0xF2E2,0xF2E1,0xC3C8, 0, 0, -0xF4C5,0xF4C6, 0,0xF4C8,0xC4AE,0xC4AF,0xF4C9,0xF4C7, - 0,0xF4C4, 0,0xF642,0xF645,0xF641, 0,0xC4FA, -0xF643,0xC4F9,0xC4F8,0xC4F7,0xF644,0xF751,0xF74F, 0, -0xF74E,0xF640,0xF750,0xF646,0xF74D, 0,0xF7F9,0xF7D7, -0xF7F7,0xC5DB,0xF7F8,0xF7FA, 0,0xF8BF,0xC5FA,0xF8BE, -0xF8BD,0xC5FB, 0,0xC65A,0xF96E,0xF9A7,0xF9A6,0xF9A8, -0xA6E5,0xD0AA, 0,0xD3CF,0xD3D0, 0, 0, 0, -0xDBC0, 0,0xF647,0xF8C0,0xA6E6,0xAD6C,0xD0AB, 0, - 0, 0,0xD7B1,0xB34E, 0,0xDBC2,0xDBC1,0xB5F3, - 0,0xB8C5,0xE7C1,0xBDC3, 0,0xBDC4, 0, 0, - 0,0xBFC5,0xC5FC,0xA6E7, 0, 0, 0,0xD0AC, -0xAAED,0xD0AE,0xD0AD,0xAD6D, 0,0xD3D1, 0,0xD3D8, -0xB049,0xD3D6,0xD3D4, 0,0xD3DB,0xD3D2,0xD3D3,0xB04A, - 0,0xB04E, 0, 0,0xD3DC,0xB04D,0xD3DA,0xD3D7, -0xD3D5,0xB04B,0xB04C,0xD3D9, 0, 0, 0, 0, -0xB350,0xD7B2, 0,0xB355,0xD7C2,0xB354,0xD7C4, 0, - 0,0xD7B8,0xB352,0xD7C3, 0,0xD7B3,0xB353,0xD7BF, -0xD7BB,0xD7BD,0xD7B7,0xD7BE, 0, 0,0xB34F,0xD7BA, - 0,0xD7B9,0xD7B5, 0,0xD7C0, 0, 0,0xD7BC, -0xD7B4, 0,0xD7B6,0xB351,0xD7C1, 0, 0, 0, - 0,0xB5F6,0xDBCD, 0, 0, 0,0xDBC9,0xDBCB, -0xDBC6,0xDBC5,0xDBC3, 0,0xDBCA,0xDBCC,0xDBC8, 0, -0xDBC7,0xB5F4,0xB5F5, 0, 0, 0, 0, 0, - 0,0xDBCF,0xB8CD,0xDFF2,0xDFF8,0xDFF3,0xDFF4,0xF9D8, -0xDFF9, 0,0xB8CF, 0,0xB8C7,0xB8CE,0xDFF1,0xDBC4, -0xB8CA,0xB8C8,0xDFF7,0xDFF6,0xB8C9,0xB8CB,0xDFF5,0xB8C6, - 0,0xB8CC, 0, 0, 0, 0, 0,0xE3F6, -0xBB74, 0, 0,0xE442,0xE441, 0,0xE3FB,0xBB76, -0xE440,0xE3F7,0xE3F8,0xBB6E,0xBB70, 0,0xE3FD,0xE3F5, -0xBB72,0xBB71,0xE3F9,0xE3FE,0xE3FC,0xBB73,0xE3FA, 0, - 0,0xDBCE,0xBB6F, 0, 0,0xE7C2,0xE7C9,0xBDC6, - 0,0xE7CD,0xBDCA,0xE7C5,0xE7C3, 0,0xE7CC, 0, -0xBDC5,0xE7CB,0xBDC7,0xBDC8,0xE7C4,0xBDC9,0xE7CA,0xE7C6, -0xE7C7,0xE7C8,0xBB75, 0, 0, 0,0xEB70,0xEB7C, - 0,0xBFCA,0xEB77,0xEB79, 0,0xBFC8,0xEB71,0xEB75, - 0,0xEB78,0xBFC6,0xBFC9,0xEB7B,0xEB73,0xEB74,0xEB7A, -0xEB72,0xEB76,0xBFC7,0xEE72, 0,0xEE71,0xC1B7,0xEE77, -0xC1B9, 0, 0,0xC1B6,0xEE73,0xC1BA,0xEE74, 0, - 0,0xEE75,0xEE78, 0,0xC1B8, 0,0xF0D6, 0, - 0,0xF0D9, 0,0xF0D3,0xF0D5, 0, 0,0xF0D4, -0xF0D7,0xF0D8,0xEE76,0xF0D2, 0, 0,0xC3CD,0xF2EC, -0xF2EF,0xF2F1,0xF2EA,0xF2EB,0xF2EE,0xF2F0,0xC3CE,0xC3CC, -0xC3CB,0xF2ED,0xF2E9,0xF4CA,0xC4B0, 0,0xF4CB, 0, - 0,0xF649,0xC4FB,0xF64B,0xC4FC,0xF648,0xF64A,0xC5A8, - 0,0xF752,0xC5A7,0xF7FD,0xF7FC, 0,0xF7FB, 0, - 0,0xF948,0xF949,0xF94B,0xF94A, 0,0xCA50,0xA6E8, - 0,0xAD6E,0xD7C5,0xB5F7, 0,0xDFFA,0xC2D0, 0, -0xF2F2, 0, 0,0xA8A3, 0, 0, 0,0xB357, - 0, 0, 0,0xB356, 0,0xDBD0,0xB5F8,0xDBD2, -0xDBD1, 0, 0,0xDFFB,0xB8D0,0xE443,0xE446,0xE445, - 0,0xE444,0xE7CE,0xE7D0,0xE7CF, 0,0xBFCC, 0, - 0, 0,0xBFCB, 0,0xC1BB,0xEE79,0xEE7B,0xEE7A, - 0, 0,0xC2D1, 0, 0, 0,0xF2F4,0xF2F3, - 0,0xF4CC,0xC4B1, 0, 0,0xC4FD,0xF754,0xF753, -0xC65B, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xA8A4,0xD0AF,0xAD6F,0xD7C8,0xD7C6, 0, - 0,0xD7C7,0xDBD4,0xDBD5,0xE043,0xDBD3, 0,0xDFFC, -0xE041,0xE040,0xE042,0xB8D1,0xDFFE,0xDFFD,0xE044, 0, -0xE449,0xE447, 0,0xE448,0xE7D3,0xE7D1, 0, 0, -0xE7D2,0xEB7D,0xEE7C,0xEE7D,0xC2D2, 0,0xF2F5,0xF4CD, -0xC4B2, 0,0xF64C,0xF755,0xC5A9, 0,0xF7FE,0xF94C, -0xA8A5, 0,0xAD71,0xAD72,0xD0B0, 0, 0,0xD0B1, -0xAD70, 0,0xB054, 0,0xB052, 0,0xB051,0xB058, -0xB050,0xB059,0xD3DD,0xB056, 0,0xB053,0xB057,0xB055, -0xB04F, 0, 0,0xB35F, 0,0xB359,0xD7CC,0xB35E, - 0, 0,0xB360,0xB35A, 0,0xB35B, 0,0xD7CA, - 0, 0,0xB358, 0,0xD7CB,0xB35D, 0, 0, -0xD7C9,0xB35C, 0, 0,0xB644, 0,0xB646, 0, - 0,0xDBD8,0xB645,0xB5F9,0xB5FD, 0,0xB8E4,0xE049, -0xDBDA,0xB5FE, 0, 0,0xDBDD,0xDBDE,0xB643, 0, -0xDBE0, 0,0xDBE2, 0,0xDBE3,0xDBD7,0xDBD6,0xDBE4, -0xB642,0xDBE1,0xDBDF, 0,0xB640,0xB5FB,0xB647,0xDBDB, -0xDBDC,0xDBD9, 0,0xB641, 0, 0,0xB5FC, 0, -0xB5FA,0xE048,0xB8DF,0xB8DA, 0, 0,0xB8D5, 0, -0xB8E5,0xB8D6, 0,0xB8D2,0xB8E1,0xB8DE,0xB8E0, 0, -0xB8D7,0xB8DC,0xB8D3,0xB8D4,0xE050,0xE04D,0xE045,0xE04A, - 0,0xB8E2,0xE051,0xB8E3,0xB8D9, 0, 0,0xE047, - 0,0xE04F,0xE04B,0xE04E,0xE04C,0xB8DD,0xE046,0xB8D8, - 0, 0, 0,0xE44C,0xBB78,0xBB7B, 0,0xE44E, - 0,0xBBA5,0xE44D,0xBB7D, 0,0xBDCF,0xE44F, 0, -0xBBA4,0xE44B,0xBBA6, 0, 0, 0,0xBB79, 0, -0xB8DB,0xBB7C, 0,0xBB7A,0xBB7E,0xBBA2,0xBB77,0xBBA7, -0xBBA3, 0,0xBBA1,0xE44A, 0, 0, 0, 0, -0xBDD6, 0,0xBDD2, 0, 0, 0,0xBDD9, 0, -0xE7D6,0xBDDA,0xE7E2,0xE7DB,0xBDCB,0xE7E3,0xE7DD,0xBDD5, -0xE7DE, 0,0xBDD4,0xE7E1,0xBDCE,0xE7DF,0xE7D5,0xBDCD, -0xEBAA,0xBDD3, 0,0xBDD0, 0,0xBDD8, 0,0xE7D4, - 0,0xE7D8,0xBDCC,0xE7D7,0xE7D9,0xE7DA,0xBDD7,0xE7DC, -0xE7E0,0xE7E4, 0,0xBDDB,0xBFD2,0xEBA5,0xEBAB,0xEBA8, -0xEB7E,0xEBAC,0xEBA1, 0,0xEBA7, 0,0xBFCD,0xBFD3, -0xEBAD, 0, 0,0xBFCF, 0,0xBFD9,0xBFD4,0xEBAF, -0xEBA9,0xBFD0,0xEBA2,0xBFDA,0xEBA3,0xEBA4,0xBFDB,0xBFD8, -0xBDD1, 0,0xBFCE,0xEBB0,0xBFDC, 0,0xBFD5,0xEBAE, -0xBFD1,0xBFD6,0xBFD7, 0,0xC1C3,0xEEA4,0xEEAD,0xEEAA, -0xEEAC, 0,0xC1C0,0xEEA5, 0,0xEEAB,0xC1BC,0xEEA7, -0xC1C4,0xEEA3,0xEEA8,0xEEAF,0xEBA6,0xEEA9,0xEEA2,0xC1BD, -0xEEA1,0xC1BE,0xEEB0,0xC1BF,0xEEAE,0xC1C2,0xEE7E, 0, -0xC1C1, 0,0xEEA6,0xF0DC,0xF0EA,0xF0E5,0xF0E7,0xF0DB, -0xC2D3, 0,0xF0DA,0xC2D6,0xC2D5, 0,0xF0E9,0xF0E1, -0xF0DE,0xF0E4, 0,0xF0DD, 0,0xF0DF,0xF0E8,0xF0E6, - 0,0xC2D4,0xF0ED,0xF0EB,0xF0E2,0xF0EC,0xF0E3, 0, -0xF2F9,0xC3CF,0xF341, 0, 0,0xF64F,0xC3D6,0xF0E0, -0xF2F7,0xC3D2,0xF2F8,0xF2FD, 0, 0,0xC3D4,0xC3D5, -0xF2F6,0xF340,0xF342,0xF2FA,0xF2FC,0xF2FE,0xF2FB,0xF343, -0xC3D1,0xC3D7,0xC3D3, 0,0xC3D0,0xF4D0, 0,0xC4B7, -0xF4CE, 0, 0,0xF4D2, 0,0xF4D3,0xC4B5,0xF4D4, -0xF4D1, 0,0xF4CF,0xC4B8,0xC4B4,0xF4D5, 0,0xC4B6, -0xC4B3, 0, 0, 0,0xC4FE, 0, 0,0xC540, -0xF64E,0xF64D,0xF650,0xF651, 0,0xC541,0xF756,0xF75B, -0xC5AA, 0,0xF758, 0,0xF757,0xF75A,0xF759, 0, -0xF843, 0,0xC5DC,0xF842,0xF840, 0,0xF841, 0, - 0, 0,0xC5FE,0xC5FD,0xF8C1,0xF8C2,0xC640, 0, -0xF94D,0xF94E,0xC667, 0,0xC66D, 0,0xF9A9,0xF9C8, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xA8A6, - 0,0xD7CD, 0,0xD7CE,0xE052,0xE450,0xE7E5,0xC1C6, - 0,0xC1C5,0xF0EE,0xF344, 0,0xF844,0xA8A7,0xD3DE, -0xB05A,0xB361,0xE054,0xE053,0xBDDC,0xE7E6,0xBDDD,0xEEB1, -0xC2D7, 0, 0, 0,0xC676,0xA8A8,0xCDCB,0xD3DF, - 0, 0,0xB362, 0,0xD7CF,0xD7D0, 0,0xDBE5, - 0,0xB648,0xB8E6, 0,0xE056,0xE055,0xE057, 0, -0xE451,0xE452,0xBBA8,0xBFDD,0xBDDE,0xBFDE, 0,0xEEB5, -0xEEB2,0xEEB4,0xEEB3,0xC1C7, 0,0xF0EF,0xF346,0xF345, -0xCBA4,0xB05C,0xB05B,0xD3E0, 0,0xD7D1, 0, 0, -0xDBE7,0xDBE6,0xB649, 0,0xE059,0xE05A,0xE058, 0, - 0,0xB8E8,0xB8E7, 0,0xBBAA,0xBBA9, 0,0xE7E7, -0xEBB3,0xEBB1,0xEBB2,0xBFDF,0xEEB7,0xEEB6, 0,0xF0F2, -0xF0F1,0xF0F0,0xF347, 0,0xF9AA,0xA8A9,0xAD73, 0, -0xAD74,0xB05D,0xB05E,0xD3E2,0xD3E1,0xD7D2, 0,0xB368, -0xB366,0xB363,0xB367,0xB365,0xB364, 0, 0,0xB64A, -0xDBEA, 0,0xB8ED,0xB64C,0xB651,0xDBEC,0xB653,0xB652, -0xB655,0xDBEB,0xDBE8,0xB64F,0xB64B,0xB64D,0xDBE9,0xB654, -0xB650,0xB64E,0xB8EF,0xB8EE,0xB8EC,0xB8F0, 0,0xB8EA, -0xB8EB, 0,0xB8E9, 0,0xE05B, 0, 0,0xE454, - 0,0xBBAC,0xBBAD,0xBBAB, 0,0xE453, 0,0xE455, - 0,0xE7EA,0xE7EC, 0,0xBDE7,0xE7ED,0xBDE0,0xE7E9, -0xBDDF,0xBDE9,0xBDE5,0xBDE6,0xBDE2,0xE7E8,0xBDE1,0xE7EE, -0xE7EB, 0,0xBDE8, 0,0xBDE3,0xBDE4,0xEBB5, 0, -0xEBB7,0xEBB6, 0,0xEBB8,0xBFE0,0xEBB4, 0, 0, -0xC1CB,0xEEB8,0xC1C8,0xC1CC,0xC1CA,0xC1C9,0xF0F3, 0, -0xF0F6, 0,0xF0F5, 0,0xF0F4,0xC2D8,0xF348,0xF349, -0xC3D8,0xF34A,0xC3D9, 0, 0,0xC4BA, 0,0xC4B9, -0xF652, 0, 0,0xC542,0xF653,0xF75C,0xC5AB,0xC5AC, - 0,0xF845, 0,0xC642, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xA8AA, 0,0xB36A,0xB369, -0xE05C,0xE05D, 0,0xBBAE,0xEBB9,0xBDEA,0xEBBA,0xEEB9, -0xA8AB, 0,0xD0B2,0xAD76,0xAD75, 0,0xD3E3,0xB05F, -0xD3E4,0xD7D5, 0,0xD7D4, 0,0xD7D3, 0, 0, -0xDBEE,0xB658, 0, 0,0xDBED,0xB657, 0, 0, - 0,0xDBEF,0xB656, 0,0xE05F,0xE062,0xE060,0xE061, -0xE065,0xE05E,0xE066,0xE063,0xE064,0xBBB0,0xE456, 0, - 0,0xBBAF, 0,0xE7F2,0xE7F0, 0, 0,0xBDEB, -0xE7EF,0xE7F1, 0,0xBDEC, 0,0xEBBB, 0,0xEBBC, -0xC1CD, 0,0xF34C,0xF34E,0xF34B,0xF34D,0xF4D6,0xF654, - 0, 0,0xF96F,0xA8AC,0xAD77,0xD3E5,0xD3E7,0xD3E6, - 0,0xD7D8,0xB36C, 0,0xD7D6, 0,0xB36B,0xD7D9, - 0,0xD7DA,0xD7D7, 0, 0,0xDBFB,0xB660,0xDBF3, -0xDBF9, 0, 0,0xB65B,0xB65E,0xDBF2,0xB659,0xDBF6, -0xE06C,0xB65D, 0,0xDBF1, 0,0xDBF7,0xDBF4,0xDBFA, -0xDBF0,0xDBF8,0xB65C,0xB65F,0xDBF5,0xB65A, 0,0xB8F2, -0xE068,0xB8F1,0xE06F,0xE06E,0xB8F8, 0,0xB8F9,0xE070, -0xB8F3,0xE06D,0xB8F7,0xE072,0xE069, 0,0xE06B,0xB8F4, -0xE067,0xE06A,0xE071,0xB8F5,0xE073, 0, 0, 0, - 0, 0,0xB8F6, 0,0xBBB1,0xE45B,0xE461,0xE459, -0xE462, 0,0xE458,0xE45D,0xE463,0xE460,0xE45F,0xE45E, - 0,0xE457,0xE45C, 0, 0,0xE45A, 0,0xBDF1, -0xBDEE,0xE7FB,0xE841,0xE843,0xE840,0xE7F8,0xE7FA,0xE845, -0xE842,0xE7FC,0xE846,0xE7F9,0xE844,0xBDEF,0xBDF5,0xBDF3, -0xE7F3,0xBDF4,0xBDF0,0xE7F4,0xE7F6,0xE7F5,0xE7FD,0xE7FE, - 0,0xBDF2, 0,0xBDED, 0, 0,0xE7F7, 0, -0xEBC6,0xBFE2, 0,0xEBBD,0xBFE3,0xBFE6,0xEBC2, 0, -0xEBBF,0xBFE5, 0, 0,0xEBC3,0xEBC4,0xEBBE,0xEBC7, -0xEBC0,0xEBC5,0xBFE4, 0,0xBFE1,0xEBC1, 0,0xEEBF, -0xC1D0,0xC1CE,0xC1D1,0xC1CF,0xEEBE,0xEEBB,0xEEBA, 0, -0xEEBD, 0, 0,0xEEBC,0xF145,0xC2DE,0xF0FB,0xF0FA, - 0,0xC2D9,0xF141,0xF140,0xF0F7,0xF143,0xF0FC,0xC2DD, -0xF0F9,0xF142,0xF0F8,0xC2DA,0xC2DC,0xF0FD,0xC2DB,0xF0FE, - 0,0xF144,0xF352, 0,0xC3DE,0xF34F, 0,0xF353, - 0, 0,0xC3DB,0xF351,0xC3E0, 0,0xC3DD, 0, -0xF350, 0,0xC3DF,0xF354,0xC3DA, 0, 0, 0, - 0,0xC4BC,0xC4BE, 0,0xF4D9,0xC4BD,0xF4D7,0xC3DC, -0xF4D8,0xC4BB,0xC543,0xC545,0xF656,0xC544,0xF655, 0, -0xF761,0xC5AD,0xF760,0xC5AE,0xF75E,0xF75D,0xF762,0xF763, -0xF846, 0,0xF75F, 0, 0,0xF8C6,0xF8C3,0xF8C4, -0xF8C5,0xC65C, 0,0xF951,0xF950,0xF94F,0xF970, 0, -0xF9BE,0xF9AB,0xC66E,0xA8AD,0xB060, 0, 0, 0, - 0, 0,0xB8FA, 0, 0, 0, 0, 0, - 0, 0,0xBDF6, 0, 0,0xEBC8, 0, 0, -0xC2DF, 0,0xF355, 0, 0, 0, 0, 0, - 0,0xF9AC,0xA8AE,0xAAEE,0xAD79,0xAD78, 0,0xB063, - 0,0xD3E8,0xB061,0xD3E9,0xB062, 0, 0,0xD7DF, -0xD7DB, 0, 0,0xB36D,0xD7DE,0xD7DD,0xD7DC,0xB36E, -0xD7E0,0xD7E1, 0, 0, 0,0xDC43,0xDC41,0xDC45, -0xDC46,0xDC4C, 0,0xDC48,0xDC4A, 0,0xDC42,0xDBFC, - 0,0xDC49, 0, 0,0xDC4B,0xDC44,0xDC47,0xDBFD, -0xB662,0xDC40,0xDBFE,0xB661,0xB663, 0,0xB8FD,0xE075, -0xE077,0xE076,0xE07B,0xB8FB, 0,0xE078,0xE074,0xE079, -0xE07A,0xB8FC,0xB8FE,0xE07C, 0,0xE467,0xE466, 0, -0xE464,0xE465,0xBBB3,0xBBB5,0xBBB2,0xBBB4,0xE84D,0xE84E, -0xE849, 0,0xE84A,0xBDF8,0xBDFD,0xBDF7,0xBDFE,0xBDF9, -0xE84B, 0, 0,0xE84C,0xE848,0xBE40,0xBDFB, 0, - 0,0xBDFA,0xBDFC, 0,0xE847, 0,0xEBCA,0xBFE8, - 0, 0,0xEBCC,0xBFEA,0xEBCF,0xEBCB,0xEBC9,0xEBCE, -0xBFE9,0xEBCD, 0,0xBFE7, 0, 0,0xC1D3,0xC1D6, -0xEEC1, 0,0xC1D4,0xEEC0,0xC1D2,0xC1D5,0xF146,0xF147, -0xF148,0xC2E0, 0,0xF149, 0,0xC2E1,0xC3E2,0xF358, -0xF359,0xF357,0xF356,0xF35A,0xC3E1,0xF4DD,0xF4DB,0xF4DC, -0xF4DE,0xF4DA,0xF4DF,0xF658, 0,0xF659,0xF657,0xC546, -0xF764,0xC5AF,0xF765,0xF848,0xF847, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xA8AF,0xB664, 0, 0,0xB940, - 0, 0, 0,0xBBB6, 0, 0,0xBFEC, 0, -0xBFEB, 0, 0, 0, 0,0xC3E3,0xC47C,0xC547, -0xA8B0,0xB064,0xB941, 0,0xF35B, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xCBA6, - 0, 0,0xA8B1, 0,0xA8B4,0xA8B3,0xA8B2, 0, - 0,0xCBA5, 0,0xCDCD, 0,0xCDCF,0xAAEF, 0, - 0,0xAAF1,0xCDCC,0xCDCE,0xAAF0,0xCDD1,0xCDD0,0xCDD2, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD0B6,0xD0B4,0xAD7C,0xD0B3,0xADA3,0xAD7E,0xAD7B, 0, -0xADA4, 0,0xAD7D,0xADA2, 0,0xADA1,0xD0B5, 0, -0xAD7A, 0, 0, 0,0xB06A,0xD3EB,0xD3F1,0xB067, -0xB06E, 0,0xB069,0xD3EE,0xD3F0,0xB06C,0xD3EA,0xD3ED, -0xB068,0xB065,0xD3EC,0xB06B,0xD3EF,0xB06D,0xB066, 0, - 0, 0, 0,0xD7E3,0xD7E6,0xB370, 0,0xB37A, -0xB376,0xD7E4, 0, 0,0xB37E,0xB377,0xB37C,0xB372, - 0,0xB36F,0xB371,0xB37D,0xD7E5,0xB375,0xB378,0xB374, -0xB379,0xD7E7,0xB37B,0xB373,0xD7E2, 0, 0, 0, - 0, 0, 0, 0, 0,0xDC4D,0xB665,0xDC4F, - 0,0xB667,0xB669, 0,0xDC4E,0xB666,0xB66A, 0, -0xB668, 0, 0, 0,0xB947,0xE0A3,0xB94F,0xE07E, - 0,0xB950,0xB945, 0,0xE0A1, 0, 0,0xB94A, - 0,0xE0A2,0xB943,0xB942, 0,0xB94D,0xB94C,0xB94B, -0xB949,0xB94E,0xE07D,0xB944,0xB946,0xB948, 0, 0, -0xBBB8,0xBBBB, 0,0xBBBF,0xBBB9,0xBBBE,0xBBBC, 0, -0xBBB7, 0,0xBBBD,0xBBBA, 0, 0, 0,0xE852, -0xBE43,0xBE41, 0,0xE853, 0,0xBE44,0xBE42,0xE851, -0xE850, 0,0xBFF0,0xE84F,0xBFEE,0xBFED,0xEBD0,0xBE45, -0xBFEF,0xEBD1,0xBFF2,0xEBD2,0xBFF1,0xC1D8,0xEEC3,0xC1D7, -0xC1DC,0xC1DA,0xC1DB,0xC2E3,0xC1D9,0xEEC2,0xEBD3,0xC2E2, -0xC2E4, 0,0xC3E4,0xC3E5, 0,0xF4E0, 0,0xC5DE, -0xC5DD,0xA8B6, 0, 0,0xCA55,0xB06F, 0,0xCA52, -0xCA53,0xCA51, 0,0xCA54, 0, 0,0xCBAA,0xCBA7, -0xCBAC,0xCBA8,0xA8B7,0xA8BA, 0,0xCBA9,0xA8B9,0xCBAB, - 0, 0,0xA8B8, 0, 0, 0, 0,0xCDD5, -0xCDD7,0xAAF4,0xCDD3,0xCDD6,0xCDD4,0xAAF2,0xAAF5, 0, -0xAAF3, 0, 0, 0, 0,0xD0B8,0xD0BC,0xD0B9, - 0,0xADA7, 0,0xADA8, 0,0xD0BB, 0,0xD0BD, -0xD0BF, 0,0xADA5,0xD0BE, 0, 0,0xADA6, 0, - 0, 0, 0, 0,0xD7EE,0xD0BA,0xD3F2,0xD3FB, -0xD3F9,0xD3F4,0xD3F5,0xD3FA,0xD3FC,0xB071, 0,0xD3F7, -0xD3F3,0xB070,0xB072,0xD3F6,0xD3FD,0xD3F8, 0, 0, -0xB3A1,0xD7F1,0xD7E9,0xD7EF,0xD7F0,0xB3A2, 0,0xD7E8, -0xD7EA,0xD0B7,0xD7EC,0xD7ED,0xD7EB,0xB66C, 0, 0, - 0,0xDC56,0xEBD4,0xDC57,0xDC54,0xB3A3,0xB66E,0xDC53, -0xDC59,0xDC58,0xB66B,0xDC5C,0xDC52,0xDC5B,0xDC50,0xDC5A, -0xDC55,0xB66D, 0,0xE0AA, 0,0xE0A5,0xE0AB,0xE0A6, -0xE0A4,0xE0A7,0xB951, 0,0xE0A9, 0,0xE0A8,0xB952, -0xBBC1,0xBBC0,0xE46E,0xE471,0xE469,0xE46D,0xBBC2,0xE46C, -0xE46A,0xE470,0xE46B,0xE468,0xE46F, 0,0xE859,0xBE48, -0xF14A,0xE856,0xE857,0xE855,0xDC51,0xBE47,0xE85A,0xE854, -0xBE46,0xBE49,0xE858,0xEBD5,0xBFF3,0xEBD6,0xEBD7, 0, -0xEEC4,0xC1DD,0xF14B,0xF14C, 0, 0,0xF14D,0xF35D, -0xF35C,0xF4E2, 0,0xF4E1,0xF65B,0xF65C,0xF65A,0xF766, -0xC5B0,0xA8BB,0xADAA,0xADA9,0xB075,0xB074,0xD440,0xD441, -0xD3FE, 0,0xB073,0xD7F5, 0,0xD7F6,0xD7F2,0xB3A4, -0xD7F3, 0,0xD7F4, 0, 0, 0, 0,0xDC5F, -0xDC61,0xDC5D,0xDC60,0xB66F,0xDC5E,0xB670, 0, 0, -0xDD73,0xB955,0xB954, 0,0xB953, 0,0xE0AC,0xE0AD, - 0, 0,0xE473,0xE475,0xBBC6,0xBBC3, 0,0xBBC5, -0xBBC4,0xE474,0xE472, 0, 0, 0, 0, 0, -0xE861,0xE85E,0xE85F,0xBE4D,0xE860,0xE85B,0xE85C,0xBE4A, - 0,0xBE4B,0xE85D,0xBE4C, 0,0xEBDB, 0,0xEBDC, -0xEBD9,0xEBDA,0xBFF4,0xEBD8, 0, 0, 0, 0, - 0,0xEEC8,0xEEC5,0xEEC7,0xC1E0,0xEECB,0xC1DF,0xEEC9, -0xEECC,0xEECA,0xEEC6,0xC1DE, 0,0xF14F, 0,0xF150, -0xF14E, 0,0xF152,0xC2E5,0xC2E6,0xF35F,0xC3E7,0xF151, -0xF35E,0xC3E6,0xF4E5,0xF4E6,0xC4BF,0xF4E4, 0,0xF4E3, - 0,0xF65D,0xC548, 0,0xF849,0xF8C8,0xF8C7, 0, -0xC643,0xC65D,0xF8C9,0xF971, 0,0xC66F,0xA8BC,0xAAF6, - 0,0xB956, 0,0xC4C0,0xA8BD,0xADAB,0xB3A5,0xB671, -0xC2E7,0xAAF7, 0,0xD0C1,0xD0C0,0xD442, 0,0xB078, -0xB076,0xB07A,0xD444, 0,0xB079,0xB077, 0, 0, - 0, 0,0xD443,0xB3A8,0xD7FC, 0,0xB3A7,0xB3A9, -0xD842,0xB3AB,0xD7FE,0xD840,0xD7F7,0xB3AA,0xD843, 0, - 0,0xD7F9, 0,0xD7FA,0xD7F8,0xB3A6, 0,0xD841, -0xD7FB,0xD7FD, 0, 0, 0,0xDC6D, 0,0xDC6C, -0xDC6A,0xDC62,0xDC71,0xDC65,0xDC6F,0xDC76,0xDC6E,0xB679, - 0,0xB675,0xDC63, 0,0xDC69,0xB677, 0,0xDC68, -0xB678,0xB67A,0xDC6B, 0,0xB672,0xB673,0xDC77,0xDC75, - 0,0xDC74,0xDC66, 0,0xDC72, 0,0xB676, 0, - 0, 0, 0,0xB674,0xDC73,0xDC64,0xDC67,0xDC70, - 0, 0, 0, 0, 0,0xE4BA,0xE0B7, 0, -0xE0B0,0xE0C3,0xE0CC,0xE0B3,0xB961, 0,0xE0C0,0xB957, -0xB959,0xB965,0xE0B1, 0, 0,0xB95A,0xB95C,0xB966, -0xB95B, 0, 0, 0, 0,0xB964,0xE0B9, 0, -0xE0AE,0xB962,0xE0B8,0xB95E,0xE0CA,0xB963,0xE0C8,0xE0BC, -0xE0C6,0xB960,0xE0AF,0xE0C9,0xE0C4, 0,0xE0CB,0xB958, - 0, 0,0xB967,0xB95D, 0, 0,0xE0B5, 0, -0xE0BD,0xE0C1, 0,0xE0C5,0xB95F,0xE0B4,0xE0B2,0xE0BE, - 0, 0, 0, 0,0xE0BB,0xE0BA, 0,0xE0BF, -0xE0C2, 0,0xE0C7, 0, 0, 0,0xE478, 0, -0xBBC7,0xE4A4,0xE47A,0xBBCC,0xBBD0,0xE4AD,0xE4B5,0xE4A6, -0xBBC8, 0,0xE4AA,0xE0B6, 0,0xBBC9,0xE4B1,0xE4B6, -0xE4AE, 0,0xE4B0,0xE4B9,0xE4B2,0xE47E,0xE4A9, 0, - 0,0xBBD1, 0,0xBBCD,0xE47C,0xE4AB,0xBBCB,0xE4A5, -0xBBCA,0xE4B3,0xE4A2,0xE479,0xBBCE,0xE4B8, 0, 0, -0xE47B,0xE4AF,0xE4AC,0xE4A7,0xE477,0xE476,0xE4A1,0xE4B4, -0xBBCF,0xE4B7,0xE47D,0xE4A3,0xBE52, 0, 0, 0, - 0, 0,0xBE5A,0xBE55,0xE8A4,0xE8A1,0xE867,0xBE50, - 0,0xF9D7, 0,0xBE4F,0xBE56, 0, 0, 0, -0xE865,0xBE54,0xE871,0xE863,0xE864,0xBE4E,0xE8A3,0xBE58, -0xE874,0xE879,0xE873,0xEBEE,0xE86F,0xE877,0xE875,0xE868, -0xE862,0xE87D,0xBE57,0xE87E, 0,0xE878, 0,0xE86D, -0xE86B,0xE866, 0, 0, 0,0xE86E,0xE87B,0xE86A, -0xE87A,0xE8A2, 0, 0,0xBE53, 0,0xE876,0xE87C, -0xE872,0xE86C,0xBE51, 0, 0, 0,0xE4A8,0xE870, -0xBE59,0xE869, 0, 0, 0, 0, 0,0xEBF4, -0xBFF7,0xEBF3,0xEBF0,0xEC44,0xBFFB, 0,0xEC41,0xEBF8, -0xEC43,0xEBE9,0xEBF6, 0,0xBFFD, 0,0xEBE1, 0, -0xEBDF,0xEC42, 0,0xEC40,0xEBFE,0xEBED,0xEBEC,0xEBE2, -0xC040, 0,0xEBE8,0xEBF2,0xEBFD,0xC043,0xEC45, 0, -0xC1E8,0xC045,0xBFFE,0xEBE6, 0,0xEBEF,0xEBDE,0xEBE0, -0xBFF5,0xC042,0xBFFA,0xEBE7,0xEBF7,0xEBF1,0xC041,0xEBDD, -0xC1E3,0xEBF9,0xEBFC,0xBFFC, 0,0xEBEB,0xC044,0xBFF9, - 0, 0, 0,0xBFF8,0xEBF5,0xEBFB,0xBFF6, 0, -0xEBE4,0xEBFA, 0, 0,0xEBE5, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xEBEA,0xEED2, - 0,0xEED7,0xC1E5,0xC1E7,0xEEDD,0xC1E1,0xEEEC,0xEEE3, -0xEED8,0xEED9,0xEEE2, 0,0xC1EE,0xEEE1,0xEED1,0xEEE0, -0xEED4,0xEEED,0xC1ED,0xC1EB,0xEED5, 0,0xEEE8, 0, -0xEEDA,0xEEE7, 0,0xEEE9,0xEED0,0xC1E6, 0,0xEEEA, - 0, 0,0xEEDE, 0,0xC1EA,0xEEDB, 0, 0, -0xC1EC,0xEEE4, 0, 0, 0,0xC1E4,0xEED6,0xEEE5, - 0,0xEEDF,0xEBE3,0xEEE6,0xEED3, 0,0xC1E9, 0, -0xEEEB, 0,0xC1E2,0xEECE, 0, 0, 0, 0, -0xF160,0xF159,0xC2E9, 0,0xF154,0xF163,0xF15B,0xEEDC, - 0,0xF165,0xF155, 0,0xC2E8,0xF15F,0xC2EA,0xC2F2, -0xC2F0,0xF161,0xC2F1,0xF157, 0,0xF158,0xF15D,0xF162, - 0,0xEECD,0xC2EB,0xF16A,0xF167,0xF16B,0xF15E,0xF15A, -0xF168,0xF36A,0xF15C, 0,0xC2EE, 0,0xC2ED,0xEECF, -0xC2EF,0xF164,0xF166,0xC2EC,0xF169,0xF153, 0,0xF156, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF373, 0,0xF363,0xC3EB,0xF371, 0, 0,0xF361, -0xC3EC, 0,0xF36C, 0,0xF368,0xC3F1,0xF372,0xF362, -0xF365,0xC3E9,0xF374, 0,0xF36D,0xF370,0xC3EF,0xC3F4, -0xC3F2,0xF369,0xF364, 0,0xC3ED,0xC3EE,0xF360,0xC3EA, - 0,0xC3E8,0xC3F0,0xF36F,0xC3F3, 0,0xF36B,0xF375, -0xC3F5, 0, 0, 0,0xF367, 0,0xF36E, 0, - 0, 0, 0, 0, 0,0xF4F3,0xF542,0xF4F5, -0xF4FC,0xF366,0xF4FA,0xF4E9,0xF540,0xC4C3,0xF4ED,0xF4FE, -0xF4F4, 0, 0,0xC4C2, 0, 0,0xF544,0xF4F6, - 0,0xF4FB,0xF4FD,0xF4E7,0xF541,0xF4F2,0xF4F7,0xF4EB, -0xF4EF,0xF543,0xF4F9,0xF4E8,0xF4EC,0xF4EE,0xF4F8, 0, -0xC4C1,0xF4F1, 0, 0, 0, 0, 0, 0, -0xF4EA, 0, 0, 0, 0, 0, 0, 0, -0xF4F0,0xF661,0xF666,0xC54F,0xF668, 0,0xC549, 0, -0xF664,0xF66A,0xC54E,0xC54A, 0,0xC54B,0xF660,0xF667, -0xC54D,0xF665,0xC54C,0xF65F,0xF663,0xF662, 0,0xF65E, -0xF669, 0, 0, 0,0xC5B1,0xF76D,0xF770,0xF76C, -0xF76E,0xF76F,0xF769,0xF76A,0xF767, 0, 0,0xF76B, -0xF768,0xC5B2,0xC5B3, 0, 0,0xF84B, 0,0xF84D, - 0, 0, 0, 0, 0,0xF84C,0xF84E, 0, -0xC5E0, 0,0xF84A,0xC5DF,0xC5E1, 0, 0, 0, -0xF8CB,0xF8CC,0xC644,0xF8CA, 0,0xF953,0xF952,0xF954, -0xC65F,0xF955,0xC65E,0xF956,0xF972,0xF975,0xF974,0xC668, -0xF973, 0, 0, 0,0xC672,0xC670,0xC671,0xC677, -0xF9C0,0xF9C1,0xF9BF,0xF9C9}; - -/* page 8 0x9577-0x9FA4 */ -static uint16 tab_uni_big58[]={ -0xAAF8, 0, 0,0xD844,0xDC78,0xE8A5,0xF376, 0, - 0,0xAAF9, 0,0xADAC,0xB07B, 0, 0,0xD845, - 0,0xD846,0xB3AC, 0,0xB67D,0xDC7A,0xDC79,0xB6A3, -0xB67C,0xDC7B,0xB67E,0xB6A2,0xB6A1,0xB67B, 0, 0, - 0,0xB968, 0, 0,0xE0D0,0xE0CE, 0,0xE0CF, -0xE0CD, 0,0xBBD2, 0,0xBBD5,0xBBD7,0xBBD6, 0, - 0,0xBBD3,0xBBD4, 0,0xE8A7,0xE8A6,0xBE5B,0xE8A8, - 0,0xE8A9,0xBE5C, 0, 0, 0,0xEC4D,0xEC4B, -0xEEF3, 0,0xEC49,0xEC4A,0xC046,0xEC46,0xEC4E,0xEC48, -0xEC4C,0xEEEF, 0, 0,0xEEF1, 0,0xEEF2,0xC1F3, -0xEEEE,0xC1F2,0xEEF0,0xC1EF,0xC1F0,0xC1F1,0xEC47, 0, - 0,0xC2F5,0xF16E,0xF16C,0xF16D,0xC2F3,0xC2F6,0xC2F4, - 0, 0, 0,0xF377,0xF378,0xC3F6, 0,0xF545, -0xF547,0xF546,0xC4C4,0xC550,0xF66D,0xF66C,0xF66B, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xAAFA, 0,0xC9AA, - 0,0xCA58,0xA6E9,0xCA56,0xCA59,0xCA57, 0, 0, - 0,0xCBAE, 0,0xA8C1, 0,0xA8C2,0xCBB0,0xA8BF, -0xCBAF,0xCBAD,0xA8C0,0xA8BE, 0, 0, 0, 0, - 0, 0,0xCDD8,0xCDDB,0xAAFD,0xCDDA,0xCDD9, 0, -0xAAFC,0xAAFB, 0,0xAB40,0xCDDC,0xAAFE, 0, 0, - 0, 0, 0,0xD0C6,0xADAE,0xADAF,0xADB0,0xD0C7, -0xD0C3,0xADAD,0xD0C4, 0,0xD0C5,0xD0C2, 0, 0, - 0,0xB0A4, 0, 0,0xB0A1,0xD445,0xB0A2,0xB0A5, -0xD446, 0,0xB07E,0xB07C,0xB07D,0xB0A3, 0, 0, - 0, 0, 0,0xB3AD,0xD849,0xB3B5,0xD848, 0, -0xD84B,0xB3B1,0xD84A,0xB6AB,0xB3AF,0xB3B2,0xB3AE,0xB3B3, -0xB3B4,0xB3B0, 0, 0, 0,0xD847,0xB6A7,0xDC7D, - 0,0xDCA3, 0, 0,0xDCA2,0xB6AC,0xB6A8,0xB6A9, -0xDC7C,0xDC7E,0xDCA1,0xB6A4,0xB6A6, 0,0xB6AA,0xB6A5, - 0, 0,0xE0D3,0xE0D1,0xE0D2,0xB96A,0xB96B, 0, -0xE0D4,0xB969,0xBBD8, 0,0xBBDA,0xBBD9, 0,0xE4BB, - 0, 0,0xE4BC,0xE8AB, 0,0xE8AA, 0, 0, -0xC047,0xC048,0xEC4F,0xC049, 0,0xEEF6, 0,0xEEF4, - 0,0xEEF5,0xC1F4, 0,0xF16F,0xC3F7, 0, 0, - 0,0xC1F5,0xAB41, 0,0xB0A6,0xD447, 0, 0, -0xD84C,0xB3B6,0xB6AD,0xDCA4,0xDCA6,0xB6AF,0xB6AE,0xB6B0, -0xB6B1,0xDCA5,0xB96E,0xB96F,0xB96D,0xBBDB,0xB96C,0xE0D5, - 0, 0, 0,0xBBDC,0xE8AC,0xEC50,0xC04A,0xC1F6, -0xF170,0xF174,0xC2F9,0xF171,0xC2FA,0xC2F8,0xF175,0xC2FB, -0xF173, 0,0xF379,0xC2F7,0xC3F8, 0,0xF8CD, 0, - 0,0xAB42,0xB3B8,0xB3B7, 0, 0, 0, 0, -0xB6B2,0xDCA8,0xDCA7,0xB6B3, 0, 0,0xE0D9,0xB973, -0xB970,0xE0D8,0xB972,0xE0D6,0xB971, 0,0xE0D7, 0, -0xE4BD,0xBBDD, 0,0xE8AF, 0,0xBE5D,0xE8AD,0xBE5E, -0xBE5F,0xE8AE,0xBE60, 0,0xEC51, 0,0xC04E,0xC04B, -0xC050,0xEC53,0xC04C,0xEC52,0xC04F, 0, 0,0xC04D, - 0,0xEEF9,0xEEFB, 0, 0,0xC1F7,0xEEFA,0xC1F8, -0xEEF8,0xEEF7, 0,0xF177,0xF176,0xC2FC,0xF178,0xF37E, -0xC3FA,0xF37D,0xF37A,0xC3F9,0xF37B,0xF37C, 0,0xF548, -0xF549,0xC4C5, 0,0xC553, 0, 0,0xF66E, 0, - 0,0xC551,0xC552,0xF66F, 0, 0,0xC5B4,0xC5B5, -0xF771, 0, 0,0xC645,0xF8CF,0xC647, 0,0xF8CE, -0xF8D0,0xC646,0xF957, 0,0xF9AD, 0, 0, 0, - 0, 0, 0,0xAB43, 0, 0, 0,0xB974, - 0,0xE4BE, 0,0xE8B0,0xC051,0xC052, 0,0xAB44, - 0,0xBE61,0xC3FB,0xADB1, 0, 0, 0,0xC053, - 0,0xC5E2,0xADB2,0xD84D, 0,0xDCA9, 0,0xDCAB, - 0,0xDCAA, 0,0xE0DD,0xE0DA,0xB975, 0,0xB976, -0xE0DB,0xE0DC, 0,0xE4C0,0xE4C5,0xBBDE,0xE4BF,0xE4C1, -0xE4C8,0xE4C3,0xE4C7,0xE4C4,0xE4C2,0xE4C6,0xBBDF, 0, - 0,0xE8B3, 0,0xE8B1,0xBE63, 0,0xBE62,0xE8B2, -0xBE64, 0, 0, 0, 0,0xEC56, 0, 0, -0xEC55,0xC054,0xEC54,0xEEFC, 0,0xEEFE,0xEF41,0xEF40, - 0,0xC1F9,0xEEFD,0xF1A1,0xC2FD,0xF17D,0xF1A2,0xC2FE, - 0,0xF17B, 0,0xF17E,0xF17C,0xF179,0xC340,0xF17A, - 0, 0, 0, 0,0xF3A1, 0, 0,0xF3A3, -0xF3A2, 0,0xF54A, 0,0xF54B, 0, 0, 0, -0xF670, 0,0xC5B7, 0,0xC5B6,0xF84F,0xF850,0xC648, -0xF8D1, 0,0xC669, 0,0xADB3,0xB6B4,0xE4CA,0xE4C9, -0xE8B5,0xE8B4, 0, 0,0xC1FA,0xEF43,0xEF42,0xF1A5, -0xF1A3,0xF1A6,0xF1A4, 0, 0,0xC3FC,0xF3A4,0xF3A5, -0xF3A6, 0,0xF671, 0,0xF772, 0,0xF8D2, 0, - 0, 0, 0, 0, 0, 0,0xADB4, 0, - 0,0xEC57,0xEF44, 0,0xADB5, 0, 0,0xBBE0, - 0,0xEC58,0xC341,0xF1A7,0xC3FD, 0,0xF54C,0xF54D, -0xC554,0xF851,0xADB6,0xB3BB,0xB3BC,0xD84E,0xB6B5,0xB6B6, -0xDCAC,0xB6B7, 0,0xB97A, 0,0xB97C,0xE0DF,0xE0E0, -0xE0DE,0xB977,0xB978,0xB97B,0xB979, 0, 0,0xE4CB, -0xBBE1,0xBBE2, 0, 0,0xE8BC,0xBE67,0xE8B7,0xE8B6, - 0,0xE8BB,0xBE65, 0, 0,0xC05B, 0,0xE8B8, -0xE8BD,0xE8BA,0xE8B9, 0,0xBE66, 0,0xC059, 0, -0xEC5A,0xC055, 0,0xEC5B, 0, 0,0xEC59, 0, -0xC058,0xC056,0xC05A, 0,0xC057, 0, 0, 0, - 0, 0,0xEF45, 0,0xEF4A,0xEF46,0xEF49,0xC1FB, - 0,0xEDD4,0xEF48,0xEF47, 0,0xC344,0xC342,0xC345, -0xC343,0xF1A8,0xF1A9,0xF1AA,0xC346, 0, 0, 0, -0xF3AA,0xC440,0xF3A8, 0,0xC441,0xF3A7,0xF3A9,0xC3FE, -0xF551,0xF54E, 0,0xF54F,0xF550,0xF672,0xC556, 0, -0xC555, 0,0xF774,0xF773,0xC5B8, 0, 0, 0, -0xC5E3,0xC649,0xC660,0xF958,0xF9AE,0xF9AF, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xADB7,0xDCAD, 0, 0,0xE0E1,0xE4CC,0xE4CD, -0xBBE3, 0,0xBBE4,0xE8BE,0xBE68, 0, 0,0xC1FC, - 0,0xF1AB, 0,0xC347,0xF3AD,0xC442,0xF3AC,0xF3AE, -0xF3AB,0xF675,0xF552,0xF553, 0,0xC4C6, 0,0xF674, - 0, 0,0xF673, 0,0xF775,0xF9B0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xADB8, 0, 0, 0, -0xADB9, 0, 0,0xB0A7,0xD448, 0,0xD84F, 0, -0xB6B8, 0,0xB6BB,0xB6B9,0xDCAE, 0,0xB6BD, 0, -0xB6BA, 0, 0,0xB6BC, 0,0xB97E, 0,0xE0E2, - 0, 0,0xE0E3,0xE8C0, 0,0xB97D,0xB9A1,0xB9A2, - 0,0xE4CF, 0,0xE4CE,0xBBE5, 0,0xBBE6, 0, -0xE4D0,0xE8BF,0xBBE8,0xBE69, 0,0xBBE7, 0, 0, - 0,0xC05C,0xE8C1,0xBE6B,0xBE6A,0xE8C2,0xE8C5,0xE8C3, -0xE8C4,0xBE6C, 0,0xC061,0xC05F, 0, 0,0xC05E, -0xEC5D, 0,0xC060, 0, 0,0xEC5C,0xEF4B, 0, -0xEC5E,0xC05D,0xEC5F,0xEF4E,0xEF4C,0xEF4D,0xEF52,0xC34B, -0xEF51,0xEF54,0xEF53,0xEF50,0xEF4F, 0,0xC1FD, 0, - 0, 0, 0,0xF1AE, 0,0xF1AD,0xC34A,0xC348, -0xC349, 0,0xF1AC, 0,0xF3B1, 0,0xC443, 0, -0xF3B0,0xF3AF,0xC444, 0,0xF558,0xF557, 0,0xF555, - 0,0xF554,0xC4C8,0xC4C7,0xF559,0xF776,0xC5B9,0xF677, -0xC557,0xF676,0xF556, 0,0xF777,0xC5E4, 0,0xC661, -0xF959, 0,0xF9B1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xADBA, -0xD850,0xEF55,0xADBB, 0, 0,0xE4D2,0xE4D1,0xEC60, - 0, 0,0xEF57, 0,0xEF56, 0,0xC34C,0xF3B2, -0xF3B3,0xC4C9, 0, 0,0xF9B2,0xB0A8,0xB6BF,0xB6BE, -0xE0E4,0xE0E6,0xB9A4,0xE0E5,0xB9A3,0xB9A5,0xE0E7, 0, - 0, 0,0xE4D4,0xE4D6,0xE4D5, 0,0xE4D8, 0, - 0, 0,0xBBE9,0xE4D7,0xE4D3, 0, 0, 0, -0xE4D9, 0,0xE8CC, 0,0xE8CF,0xE8D1,0xE8C7,0xE8CB, -0xE8C8,0xBE6E,0xBE71,0xBE73,0xE8C9,0xE8CA,0xBE72,0xE8CD, -0xE8D0,0xE8CE,0xBE74, 0,0xBE70,0xE8C6,0xBE6D, 0, -0xBE6F, 0, 0,0xC063,0xEC66,0xEC64,0xEC63, 0, -0xEC69, 0,0xEC68,0xEC67, 0,0xEC62,0xC062,0xEC61, - 0,0xEC65,0xC064, 0, 0,0xEF5A, 0,0xEF5E, -0xEF5B,0xEF5D,0xEF5C,0xEF59,0xEF5F,0xEF62,0xEF60,0xEF61, -0xC240, 0,0xC1FE,0xEF58,0xEF63,0xF1B3,0xF1B6,0xF1B8, -0xF1B7, 0,0xF1B1,0xF1B5,0xF1B0, 0,0xF1B2,0xC34D, -0xF1AF, 0,0xF1B4, 0, 0,0xF3C0,0xF3B5,0xC445, - 0, 0,0xC446,0xF3B4,0xF3B9,0xF3BF,0xF3B7,0xF3BE, - 0,0xF3BB, 0,0xF3BA,0xF3BD,0xF3B8,0xF3B6, 0, -0xF3BC, 0,0xF560,0xF55E,0xC4CA,0xF55D,0xF563,0xF561, - 0,0xC4CB,0xF55C,0xF55A, 0,0xF55B,0xC4CD,0xF55F, -0xC4CC,0xF562,0xF678,0xF67E, 0, 0,0xF679,0xC55B, -0xF6A1,0xC55A,0xF67D,0xF67C,0xC559,0xF67B,0xC558,0xF67A, - 0,0xF77D,0xF7A1,0xF77E, 0,0xF77B,0xC5BB,0xF778, -0xF77C,0xF7A3, 0,0xF7A2,0xF779,0xF77A,0xC5BA,0xF852, -0xC5E7, 0,0xF853,0xC5E5,0xC5E6, 0, 0,0xF8D3, -0xC64A,0xF976, 0,0xC66A, 0,0xF9B3,0xC66B,0xF9B4, -0xF9B5,0xF9C3,0xF9C2,0xC67A,0xF9CD, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xB0A9, 0, 0,0xE0E9, 0,0xE0E8, 0, -0xBBEA,0xBBEB,0xE4DA, 0,0xE8D2,0xEC6C, 0, 0, -0xBE75,0xC065,0xEC6A, 0,0xEC6D,0xC066, 0,0xEF64, -0xEC6B,0xF1B9,0xC34E,0xF3C1, 0, 0, 0,0xF566, -0xF564, 0, 0,0xF565, 0, 0,0xF6A2, 0, -0xC55C,0xF7A4,0xC5EA,0xC5BC,0xC5E8,0xC5E9,0xF8D4,0xC662, - 0,0xB0AA, 0, 0, 0,0xF1BA, 0, 0, -0xD449, 0,0xB9A6, 0,0xE4DB, 0, 0,0xBBEC, -0xE4DC, 0, 0, 0,0xE8D4,0xE8D3,0xC068,0xBE76, -0xBE77, 0,0xE8D7,0xE8D6,0xE8D5, 0, 0,0xEC6E, -0xEC71, 0,0xEC70,0xEC6F,0xC067,0xEF68,0xEF66,0xEF65, - 0, 0,0xEF67, 0,0xC34F,0xF1BC,0xF1BD,0xC350, - 0,0xF1BB, 0,0xF3C3,0xF3C2,0xF3C5,0xC447,0xF3C4, - 0,0xF567,0xF569,0xF568, 0, 0,0xF6A3,0xF6A6, -0xF6A4,0xF6A5,0xF7A5,0xC5BD, 0, 0, 0,0xF854, -0xF855,0xF856, 0,0xC64B,0xC663,0xF9B6,0xB0AB, 0, -0xBE78,0xC069,0xF1BE, 0,0xF7A6, 0, 0,0xF9C4, -0xD44A, 0,0xC67B,0xB0AC,0xEC72, 0,0xF1BF, 0, -0xF3C6, 0, 0,0xF6A7,0xF7A7,0xB0AD, 0,0xE4DD, -0xE4DE, 0,0xBBED,0xBBEE,0xE8D9,0xBE7A,0xBE79,0xE8D8, - 0,0xEF69, 0,0xF1C0,0xF1C2,0xF1C1,0xC353,0xC352, -0xC351, 0,0xC55E,0xF6A8, 0,0xC55D,0xF7A9,0xF7A8, - 0,0xC64C,0xF8D5,0xB3BD,0xE0EA, 0, 0, 0, -0xE4E1,0xE4DF,0xE4E0, 0, 0,0xE8E2, 0,0xE8DD, -0xE8DA,0xE8E1, 0, 0, 0,0xE8E3, 0, 0, -0xBE7C,0xE8E0,0xE8DC, 0, 0,0xE8DB,0xE8DF,0xE8DE, -0xBE7B, 0, 0,0xEC7D,0xEC78,0xEC76,0xECA1,0xEC77, - 0,0xEC73, 0,0xEC79, 0, 0,0xEC74,0xEF72, -0xEC75,0xECA2, 0, 0, 0, 0, 0, 0, - 0,0xEC7C,0xC06A,0xEC7B,0xEC7A, 0,0xEC7E, 0, - 0, 0, 0,0xEF6A,0xEF6D, 0, 0,0xEF6C, - 0,0xEF74,0xEF6F,0xEF73, 0,0xEF71,0xEF70,0xEF6E, - 0,0xEF6B, 0,0xC243,0xC242, 0,0xC244,0xC241, -0xEF75, 0, 0, 0, 0, 0,0xF1C8,0xF1CB, - 0,0xF1C9,0xF1CD, 0, 0, 0,0xF1CE, 0, -0xF1C6,0xC358,0xF1C7, 0,0xF1C5,0xF1CC, 0,0xF1C4, -0xF1C3,0xC357,0xC355,0xC354, 0, 0, 0, 0, - 0, 0, 0, 0,0xF1CA,0xF3CF,0xF3D5,0xC44A, -0xF3D0, 0,0xF3D3,0xF3D7,0xC44B,0xF3D2, 0,0xF3CA, - 0,0xF3C9,0xF3D6,0xF3CD, 0,0xF3CB,0xF3D4,0xF3CC, -0xC449,0xC448, 0,0xF3C7,0xF3C8,0xF3D1, 0, 0, - 0,0xF3CE, 0, 0, 0, 0, 0, 0, -0xF56C,0xF56F, 0, 0, 0, 0,0xC356, 0, - 0, 0, 0, 0, 0, 0,0xF56D,0xF573, -0xF571,0xF56B,0xF576, 0,0xF56A, 0,0xC4CF,0xF572, - 0, 0, 0,0xF56E,0xC4CE,0xF575, 0, 0, -0xF574, 0, 0, 0, 0,0xF6AB,0xF6AA, 0, - 0, 0,0xF6B1, 0,0xF6AD,0xF6B0,0xC560, 0, - 0,0xF6AE,0xF6AF, 0,0xF6A9,0xF6AC,0xC55F, 0, - 0, 0,0xC5BF,0xF7B4,0xF7AF,0xF7B3, 0,0xF7B6, -0xF7B2, 0,0xF7AE, 0,0xC5C1,0xF7B1,0xF7B5,0xC5C0, -0xF7AC,0xF570,0xF7B0, 0, 0,0xF7AD, 0,0xF7AA, - 0,0xF7AB,0xC5BE,0xF85A,0xF85C,0xF85F,0xF85B,0xF860, - 0,0xF859, 0,0xF857, 0,0xC5EB,0xF85D,0xC5ED, -0xC5EC,0xF858,0xF85E, 0, 0, 0, 0,0xF8DA, -0xC64D,0xF8DB, 0,0xF8D9,0xF8D6, 0, 0,0xF8D8, -0xF8D7,0xF95A, 0, 0, 0, 0,0xF95C,0xF95B, - 0, 0,0xF979, 0,0xF978,0xF977,0xF97A, 0, -0xC673,0xC674,0xF9CA,0xF9CE, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xB3BE,0xDCAF, -0xE0ED, 0,0xB9A7,0xE0EB, 0, 0,0xE0EC, 0, - 0, 0,0xE4E2,0xE4E3,0xBBF1,0xBBEF,0xE4E4,0xBBF0, -0xE8E8, 0,0xE8EB,0xE8E5,0xE8EC,0xE8E4,0xE8E6, 0, -0xE8E7,0xE8EA, 0, 0,0xBEA1,0xE8EF,0xE8EE,0xBE7D, -0xE8E9,0xE8ED,0xBE7E, 0, 0, 0, 0, 0, - 0,0xECAC, 0,0xC06F, 0,0xECA7,0xC06B, 0, -0xECA4,0xECAA,0xECAD, 0,0xC070, 0,0xECA9,0xECA6, -0xECAE,0xECA5, 0,0xECAB,0xC06C, 0,0xECA3,0xC06D, - 0,0xC06E,0xECA8, 0, 0, 0,0xEFA9,0xEF7A, -0xEF7B,0xEF7E,0xEF7C, 0,0xEF76, 0, 0,0xEF79, -0xEFA5,0xEF7D, 0, 0,0xC245, 0,0xEFA7,0xEFA4, -0xC246,0xEFA6,0xEF77,0xEFA2,0xEFA3, 0,0xEFA1, 0, - 0, 0, 0,0xF1D2,0xF1D4,0xF1D7, 0, 0, -0xF1D1, 0,0xC359,0xF1D9,0xF1D0,0xF1DA, 0,0xF1D6, -0xF1D8,0xF1DC,0xF1D5,0xF1DD,0xF1D3,0xF1CF,0xC35A, 0, -0xF1DB,0xC35B,0xC44D, 0, 0, 0, 0, 0, -0xEF78,0xF3F1,0xF3E8,0xC44F,0xF3E4,0xC450, 0, 0, -0xF3ED,0xF3E7,0xF3DD,0xC44E,0xF3EA,0xF3E5,0xF3E6, 0, -0xF3D8,0xF3DF,0xF3EE, 0,0xF3EB, 0,0xF3E3, 0, -0xF3EF,0xF3DE,0xF3D9,0xF3EC, 0,0xF3DB,0xF3E9,0xF3E0, -0xF3F0,0xF3DC,0xC44C,0xF3DA,0xF3E1,0xF3E2, 0, 0, - 0,0xF57D, 0,0xF57B, 0,0xF5A2, 0,0xF5AE, -0xF5A5,0xF57C,0xF578,0xF5A7,0xF57E,0xF5A3,0xF57A,0xF5AA, -0xF577,0xF5A1,0xF5A6,0xF5A8,0xF5AB,0xF579, 0,0xF5AF, -0xF5B0,0xF5A9,0xF5AD,0xF5A4, 0,0xF6C1,0xF6C4, 0, -0xC561, 0,0xF6C3,0xF6C8,0xF6C6,0xC562,0xF6BD,0xF6B3, -0xF6B2,0xC564,0xF6BF,0xF6C0,0xF6BC,0xF6B4, 0,0xF6B9, -0xF5AC, 0,0xF6B5,0xC563,0xF6BB, 0,0xF6BA, 0, -0xF6B6,0xF6C2, 0,0xF6B7,0xF7BB,0xF6C5,0xF6C7,0xF6BE, -0xF6B8,0xF7BC,0xF7BE,0xF7B8,0xC5C2, 0,0xF7C5,0xF7C3, -0xC5C3,0xF7C2,0xF7C1,0xF7BA,0xF7B7,0xF7BD,0xF7C6,0xF7B9, -0xF7BF, 0,0xF869,0xF86E,0xF864,0xF867,0xC5EE,0xF86B, - 0,0xF872,0xF7C0, 0,0xF865,0xF86F,0xF873,0xF86A, -0xF863,0xF86D, 0,0xF86C,0xF871,0xF870,0xF7C4,0xF868, -0xF862,0xF866,0xC64E,0xC64F,0xF861, 0,0xF8E6,0xF8DD, -0xF8E5,0xF8E2,0xF8E3,0xF8DC,0xF8DF,0xF8E7,0xF8E1,0xF8E0, -0xF8DE, 0,0xF8E4, 0,0xF95D, 0,0xF95E, 0, -0xF960,0xF95F,0xF962,0xF961,0xF97C,0xF97B,0xF9B7, 0, -0xF9B8, 0,0xF9C5,0xC678,0xC67C, 0,0xF9CF,0xC67D, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xB3BF, 0, - 0, 0,0xC4D0,0xF6C9, 0,0xC650,0xC651, 0, -0xB3C0,0xE0EE, 0,0xB9A8,0xE8F0, 0, 0,0xECB0, -0xECB1,0xECAF,0xEFAB,0xEFAA,0xC247,0xF1DF,0xEFAC,0xF1DE, - 0, 0,0xF3F3,0xC451,0xC453,0xF3F2, 0, 0, -0xC452, 0,0xF5B1,0xF5B3,0xF5B2,0xF6CA,0xC565, 0, -0xC5EF,0xF8E8,0xF963, 0, 0,0xF9D2,0xB3C1, 0, -0xE4E5, 0,0xBEA2, 0, 0, 0,0xECB3,0xECB2, - 0,0xEFAD, 0, 0, 0,0xC454,0xC4D1,0xF7C7, -0xF9CB, 0, 0, 0,0xB3C2,0xBBF2, 0,0xBEA3, - 0,0xF3F4, 0,0xF874,0xB6C0, 0, 0, 0, - 0,0xEFAE, 0, 0, 0,0xC664,0xB6C1,0xBEA4, -0xC248,0xF875,0xB6C2, 0,0xE8F1,0xC072,0xECB4,0xECB5, - 0,0xC071, 0,0xEFAF,0xC24C,0xC24A,0xC24B,0xC249, -0xF1E0,0xC35C, 0, 0, 0,0xF5B5,0xF5B4,0xF5B7, -0xF5B6,0xC4D2, 0, 0,0xF6CB, 0,0xF6CD,0xF6CC, -0xC566,0xF7C8, 0,0xF876,0xF877,0xC5F0,0xF964,0xF97D, -0xC675, 0,0xDCB0,0xECB6,0xEFB0,0xF3F5,0xE0EF, 0, -0xEFB1,0xF1E2,0xF1E1, 0, 0, 0, 0,0xF878, -0xC652, 0,0xF965,0xF97E, 0, 0, 0,0xB9A9, -0xE8F2,0xE8F3, 0,0xECB7,0xB9AA, 0,0xC35D,0xF1E3, - 0,0xF6CF,0xC567,0xF6D0,0xF6CE,0xF879, 0,0xF8E9, - 0,0xB9AB, 0,0xEFB4,0xEFB3,0xEFB2,0xF1E4, 0, - 0,0xF1E8,0xF1E7,0xF1E6,0xF1E5,0xC35E,0xF3F6,0xF5B9, -0xC4D3,0xF5B8,0xF6D1,0xF7CB,0xF7CA,0xC5C4,0xF7C9,0xF87C, -0xF87B,0xF87A, 0, 0,0xBBF3, 0,0xECB8,0xC24D, - 0,0xF3F7,0xF3F8,0xF7CC,0xF87D, 0, 0,0xF8EA, -0xF966,0xF9B9,0xF9D4,0xBBF4,0xC24E,0xF1E9,0xF3F9,0xF6D2, -0xF87E, 0, 0,0xBEA6, 0,0xEFB5,0xF1EA,0xF3FA, -0xF3FB,0xF3FC,0xF5BE, 0,0xF5BA,0xC568,0xF5BD,0xF5BC, -0xC4D4,0xF5BB,0xC4D6, 0,0xC4D5,0xF6D4,0xF6D3,0xC569, -0xC56A, 0, 0,0xC5C6,0xF7CD,0xC5C5, 0,0xF8A3, -0xF8A4,0xF8A2,0xF8A1,0xC654, 0,0xF8EB,0xF8EC,0xF8ED, -0xC653,0xF967,0xF96A,0xF969,0xF968, 0, 0,0xF9D3, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xC073, 0, - 0,0xC365,0xF5BF,0xF6D5, 0,0xC5C7,0xF7CE, 0, - 0,0xF9D5, 0, 0, 0,0xC074, 0, 0, - 0,0xEFB6, 0,0xF7CF, 0,0xF9A1}; - -/* page 9 0xFA0C-0xFA0D */ -static uint16 tab_uni_big59[]={ -0xC94A,0xDDFC}; - -/* page 10 0xFE30-0xFFFD */ -static uint16 tab_uni_big510[]={ -0xA14A,0xA157, 0,0xA159,0xA15B,0xA15F,0xA160,0xA163, -0xA164,0xA167,0xA168,0xA16B,0xA16C,0xA16F,0xA170,0xA173, -0xA174,0xA177,0xA178,0xA17B,0xA17C, 0, 0, 0, - 0,0xA1C6,0xA1C7,0xA1CA,0xA1CB,0xA1C8,0xA1C9,0xA15C, -0xA14D, 0,0xA14F, 0,0xA151,0xA152,0xA153,0xA154, - 0,0xA17D,0xA17E,0xA1A1,0xA1A2,0xA1A3,0xA1A4,0xA1CC, -0xA1CD,0xA1CE,0xA1DE,0xA1DF,0xA1E0,0xA1E1,0xA1E2, 0, - 0,0xA24C,0xA24D,0xA24E, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xA149, 0,0xA1AD,0xA243,0xA248,0xA1AE, 0, -0xA15D,0xA15E,0xA1AF,0xA1CF,0xA141,0xA1D0,0xA144,0xA241, -0xA2AF,0xA2B0,0xA2B1,0xA2B2,0xA2B3,0xA2B4,0xA2B5,0xA2B6, -0xA2B7,0xA2B8,0xA147,0xA146,0xA1D5,0xA1D7,0xA1D6,0xA148, -0xA249,0xA2CF,0xA2D0,0xA2D1,0xA2D2,0xA2D3,0xA2D4,0xA2D5, -0xA2D6,0xA2D7,0xA2D8,0xA2D9,0xA2DA,0xA2DB,0xA2DC,0xA2DD, -0xA2DE,0xA2DF,0xA2E0,0xA2E1,0xA2E2,0xA2E3,0xA2E4,0xA2E5, -0xA2E6,0xA2E7,0xA2E8, 0,0xA242, 0, 0,0xA1C4, - 0,0xA2E9,0xA2EA,0xA2EB,0xA2EC,0xA2ED,0xA2EE,0xA2EF, -0xA2F0,0xA2F1,0xA2F2,0xA2F3,0xA2F4,0xA2F5,0xA2F6,0xA2F7, -0xA2F8,0xA2F9,0xA2FA,0xA2FB,0xA2FC,0xA2FD,0xA2FE,0xA340, -0xA341,0xA342,0xA343,0xA161,0xA155,0xA162, 0, 0, - 0, 0, 0, 0,0xA14E, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA2CE}; - -static int func_uni_big5_onechar(int code){ - if ((code>=0x00A2)&&(code<=0x00F7)) - return(tab_uni_big50[code-0x00A2]); - if ((code>=0x02C7)&&(code<=0x0451)) - return(tab_uni_big51[code-0x02C7]); - if ((code>=0x2013)&&(code<=0x22BF)) - return(tab_uni_big52[code-0x2013]); - if ((code>=0x2460)&&(code<=0x2642)) - return(tab_uni_big53[code-0x2460]); - if ((code>=0x3000)&&(code<=0x3129)) - return(tab_uni_big54[code-0x3000]); - if ((code>=0x32A3)&&(code<=0x32A3)) - return(tab_uni_big55[code-0x32A3]); - if ((code>=0x338E)&&(code<=0x33D5)) - return(tab_uni_big56[code-0x338E]); - if ((code>=0x4E00)&&(code<=0x9483)) - return(tab_uni_big57[code-0x4E00]); - if ((code>=0x9577)&&(code<=0x9FA4)) - return(tab_uni_big58[code-0x9577]); - if ((code>=0xFA0C)&&(code<=0xFA0D)) - return(tab_uni_big59[code-0xFA0C]); - if ((code>=0xFE30)&&(code<=0xFFFD)) - return(tab_uni_big510[code-0xFE30]); - return(0); -} - - -static int -my_wc_mb_big5(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, uchar *s, uchar *e) -{ - - int code; - - if (s >= e) - return MY_CS_TOOSMALL; - - if ((int) wc < 0x80) - { - s[0]= (uchar) wc; - return 1; - } - - if (!(code=func_uni_big5_onechar(wc))) - return MY_CS_ILUNI; - - if (s+2>e) - return MY_CS_TOOSMALL; - - s[0]=code>>8; - s[1]=code&0xFF; - - return 2; -} - - -static int -my_mb_wc_big5(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t *pwc,const uchar *s,const uchar *e) -{ - - int hi; - - if (s >= e) - return MY_CS_TOOSMALL; - - if ((hi= s[0]) < 0x80) - { - pwc[0]=hi; - return 1; - } - - if (s+2>e) - return MY_CS_TOOSMALL2; - - if (!(pwc[0]=func_big5_uni_onechar((hi<<8)+s[1]))) - return -2; - - return 2; -} - - -/* - Returns a well formed length of a BIG5 string. - CP950 and HKSCS additional characters are also accepted. -*/ -static -size_t my_well_formed_len_big5(CHARSET_INFO *cs __attribute__((unused)), - const char *b, const char *e, - size_t pos, int *error) -{ - const char *b0= b; - const char *emb= e - 1; /* Last possible end of an MB character */ - - *error= 0; - while (pos-- && b < e) - { - if ((uchar) b[0] < 128) - { - /* Single byte ascii character */ - b++; - } - else if ((b < emb) && isbig5code((uchar)*b, (uchar)b[1])) - { - /* Double byte character */ - b+= 2; - } - else - { - /* Wrong byte sequence */ - *error= 1; - break; - } - } - return (size_t) (b - b0); -} - - -static MY_COLLATION_HANDLER my_collation_big5_chinese_ci_handler = -{ - NULL, /* init */ - my_strnncoll_big5, - my_strnncollsp_big5, - my_strnxfrm_big5, - my_strnxfrmlen_simple, - my_like_range_mb, - my_wildcmp_mb, - my_strcasecmp_mb, - my_instr_mb, - my_hash_sort_simple, - my_propagate_simple -}; - -static MY_CHARSET_HANDLER my_charset_big5_handler= -{ - NULL, /* init */ - ismbchar_big5, - mbcharlen_big5, - my_numchars_mb, - my_charpos_mb, - my_well_formed_len_big5, - my_lengthsp_8bit, - my_numcells_8bit, - my_mb_wc_big5, /* mb_wc */ - my_wc_mb_big5, /* wc_mb */ - my_mb_ctype_mb, - my_caseup_str_mb, - my_casedn_str_mb, - my_caseup_mb, - my_casedn_mb, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_strtoll10_8bit, - my_strntoull10rnd_8bit, - my_scan_8bit -}; - -CHARSET_INFO my_charset_big5_chinese_ci= -{ - 1,0,0, /* number */ - MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ - "big5", /* cs name */ - "big5_chinese_ci", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_big5, - to_lower_big5, - to_upper_big5, - sort_order_big5, - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_caseinfo_big5, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 2, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xF9D5, /* max_sort_char */ - ' ', /* pad char */ - 1, /* escape_with_backslash_is_dangerous */ - &my_charset_big5_handler, - &my_collation_big5_chinese_ci_handler -}; - - -CHARSET_INFO my_charset_big5_bin= -{ - 84,0,0, /* number */ - MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "big5", /* cs name */ - "big5_bin", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_big5, - to_lower_big5, - to_upper_big5, - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_caseinfo_big5, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 2, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xF9FE, /* max_sort_char */ - ' ', /* pad char */ - 1, /* escape_with_backslash_is_dangerous */ - &my_charset_big5_handler, - &my_collation_mb_bin_handler -}; - - -#endif diff --git a/deps/mysqllite/strings/ctype-bin.c b/deps/mysqllite/strings/ctype-bin.c deleted file mode 100644 index 3b6a977e47c9b9..00000000000000 --- a/deps/mysqllite/strings/ctype-bin.c +++ /dev/null @@ -1,579 +0,0 @@ -/* Copyright (C) 2002 MySQL AB & tommy@valley.ne.jp. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; version 2 - of the License. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -/* This file is for binary pseudo charset, created by bar@mysql.com */ - - -#include -#include "m_string.h" -#include "m_ctype.h" - -static uchar ctype_bin[]= -{ - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - - -/* Dummy array for toupper / tolower / sortorder */ - -static uchar bin_char_array[] = -{ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - - -static my_bool -my_coll_init_8bit_bin(CHARSET_INFO *cs, - void *(*alloc)(size_t) __attribute__((unused))) -{ - cs->max_sort_char=255; - return FALSE; -} - -static int my_strnncoll_binary(CHARSET_INFO * cs __attribute__((unused)), - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - size_t len=min(slen,tlen); - int cmp= memcmp(s,t,len); - return cmp ? cmp : (int)((t_is_prefix ? len : slen) - tlen); -} - - -size_t my_lengthsp_binary(CHARSET_INFO *cs __attribute__((unused)), - const char *ptr __attribute__((unused)), - size_t length) -{ - return length; -} - - -/* - Compare two strings. Result is sign(first_argument - second_argument) - - SYNOPSIS - my_strnncollsp_binary() - cs Chararacter set - s String to compare - slen Length of 's' - t String to compare - tlen Length of 't' - - NOTE - This function is used for real binary strings, i.e. for - BLOB, BINARY(N) and VARBINARY(N). - It compares trailing spaces as spaces. - - RETURN - < 0 s < t - 0 s == t - > 0 s > t -*/ - -static int my_strnncollsp_binary(CHARSET_INFO * cs __attribute__((unused)), - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference - __attribute__((unused))) -{ - return my_strnncoll_binary(cs,s,slen,t,tlen,0); -} - - -static int my_strnncoll_8bit_bin(CHARSET_INFO * cs __attribute__((unused)), - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - size_t len=min(slen,tlen); - int cmp= memcmp(s,t,len); - return cmp ? cmp : (int)((t_is_prefix ? len : slen) - tlen); -} - - -/* - Compare two strings. Result is sign(first_argument - second_argument) - - SYNOPSIS - my_strnncollsp_8bit_bin() - cs Chararacter set - s String to compare - slen Length of 's' - t String to compare - tlen Length of 't' - diff_if_only_endspace_difference - Set to 1 if the strings should be regarded as different - if they only difference in end space - - NOTE - This function is used for character strings with binary collations. - The shorter string is extended with end space to be as long as the longer - one. - - RETURN - < 0 s < t - 0 s == t - > 0 s > t -*/ - -static int my_strnncollsp_8bit_bin(CHARSET_INFO * cs __attribute__((unused)), - const uchar *a, size_t a_length, - const uchar *b, size_t b_length, - my_bool diff_if_only_endspace_difference) -{ - const uchar *end; - size_t length; - int res; - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= 0; -#endif - - end= a + (length= min(a_length, b_length)); - while (a < end) - { - if (*a++ != *b++) - return ((int) a[-1] - (int) b[-1]); - } - res= 0; - if (a_length != b_length) - { - int swap= 1; - /* - Check the next not space character of the longer key. If it's < ' ', - then it's smaller than the other key. - */ - if (diff_if_only_endspace_difference) - res= 1; /* Assume 'a' is bigger */ - if (a_length < b_length) - { - /* put shorter key in s */ - a_length= b_length; - a= b; - swap= -1; /* swap sign of result */ - res= -res; - } - for (end= a + a_length-length; a < end ; a++) - { - if (*a != ' ') - return (*a < ' ') ? -swap : swap; - } - } - return res; -} - - -/* This function is used for all conversion functions */ - -static size_t my_case_str_bin(CHARSET_INFO *cs __attribute__((unused)), - char *str __attribute__((unused))) -{ - return 0; -} - - -static size_t my_case_bin(CHARSET_INFO *cs __attribute__((unused)), - char *src __attribute__((unused)), - size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) -{ - return srclen; -} - - -static int my_strcasecmp_bin(CHARSET_INFO * cs __attribute__((unused)), - const char *s, const char *t) -{ - return strcmp(s,t); -} - - -uint my_mbcharlen_8bit(CHARSET_INFO *cs __attribute__((unused)), - uint c __attribute__((unused))) -{ - return 1; -} - - -static int my_mb_wc_bin(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t *wc, - const uchar *str, - const uchar *end __attribute__((unused))) -{ - if (str >= end) - return MY_CS_TOOSMALL; - - *wc=str[0]; - return 1; -} - - -static int my_wc_mb_bin(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, - uchar *s, - uchar *e __attribute__((unused))) -{ - if (s >= e) - return MY_CS_TOOSMALL; - - if (wc < 256) - { - s[0]= (char) wc; - return 1; - } - return MY_CS_ILUNI; -} - - -void my_hash_sort_8bit_bin(CHARSET_INFO *cs __attribute__((unused)), - const uchar *key, size_t len, - ulong *nr1, ulong *nr2) -{ - const uchar *pos = key; - - /* - Remove trailing spaces. We have to do this to be able to compare - 'A ' and 'A' as identical - */ - key= skip_trailing_space(key, len); - - for (; pos < (uchar*) key ; pos++) - { - nr1[0]^=(ulong) ((((uint) nr1[0] & 63)+nr2[0]) * - ((uint)*pos)) + (nr1[0] << 8); - nr2[0]+=3; - } -} - - -void my_hash_sort_bin(CHARSET_INFO *cs __attribute__((unused)), - const uchar *key, size_t len,ulong *nr1, ulong *nr2) -{ - const uchar *pos = key; - - key+= len; - - for (; pos < (uchar*) key ; pos++) - { - nr1[0]^=(ulong) ((((uint) nr1[0] & 63)+nr2[0]) * - ((uint)*pos)) + (nr1[0] << 8); - nr2[0]+=3; - } -} - - -/* - The following defines is here to keep the following code identical to - the one in ctype-simple.c -*/ - -#define likeconv(s,A) (A) -#define INC_PTR(cs,A,B) (A)++ - - -int my_wildcmp_bin(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many) -{ - int result= -1; /* Not found, using wildcards */ - - while (wildstr != wildend) - { - while (*wildstr != w_many && *wildstr != w_one) - { - if (*wildstr == escape && wildstr+1 != wildend) - wildstr++; - if (str == str_end || likeconv(cs,*wildstr++) != likeconv(cs,*str++)) - return(1); /* No match */ - if (wildstr == wildend) - return(str != str_end); /* Match if both are at end */ - result=1; /* Found an anchor char */ - } - if (*wildstr == w_one) - { - do - { - if (str == str_end) /* Skip one char if possible */ - return(result); - INC_PTR(cs,str,str_end); - } while (++wildstr < wildend && *wildstr == w_one); - if (wildstr == wildend) - break; - } - if (*wildstr == w_many) - { /* Found w_many */ - uchar cmp; - wildstr++; - /* Remove any '%' and '_' from the wild search string */ - for (; wildstr != wildend ; wildstr++) - { - if (*wildstr == w_many) - continue; - if (*wildstr == w_one) - { - if (str == str_end) - return(-1); - INC_PTR(cs,str,str_end); - continue; - } - break; /* Not a wild character */ - } - if (wildstr == wildend) - return(0); /* match if w_many is last */ - if (str == str_end) - return(-1); - - if ((cmp= *wildstr) == escape && wildstr+1 != wildend) - cmp= *++wildstr; - - INC_PTR(cs,wildstr,wildend); /* This is compared through cmp */ - cmp=likeconv(cs,cmp); - do - { - while (str != str_end && (uchar) likeconv(cs,*str) != cmp) - str++; - if (str++ == str_end) - return(-1); - { - int tmp=my_wildcmp_bin(cs,str,str_end,wildstr,wildend,escape,w_one, - w_many); - if (tmp <= 0) - return(tmp); - } - } while (str != str_end && wildstr[0] != w_many); - return(-1); - } - } - return(str != str_end ? 1 : 0); -} - - -static size_t my_strnxfrm_bin(CHARSET_INFO *cs __attribute__((unused)), - uchar *dest, size_t dstlen, - const uchar *src, size_t srclen) -{ - if (dest != src) - memcpy(dest, src, min(dstlen,srclen)); - if (dstlen > srclen) - bfill(dest + srclen, dstlen - srclen, 0); - return dstlen; -} - - -static -size_t my_strnxfrm_8bit_bin(CHARSET_INFO *cs __attribute__((unused)), - uchar *dest, size_t dstlen, - const uchar *src, size_t srclen) -{ - if (dest != src) - memcpy(dest, src, min(dstlen,srclen)); - if (dstlen > srclen) - bfill(dest + srclen, dstlen - srclen, ' '); - return dstlen; -} - - -static -uint my_instr_bin(CHARSET_INFO *cs __attribute__((unused)), - const char *b, size_t b_length, - const char *s, size_t s_length, - my_match_t *match, uint nmatch) -{ - register const uchar *str, *search, *end, *search_end; - - if (s_length <= b_length) - { - if (!s_length) - { - if (nmatch) - { - match->beg= 0; - match->end= 0; - match->mb_len= 0; - } - return 1; /* Empty string is always found */ - } - - str= (const uchar*) b; - search= (const uchar*) s; - end= (const uchar*) b+b_length-s_length+1; - search_end= (const uchar*) s + s_length; - -skip: - while (str != end) - { - if ( (*str++) == (*search)) - { - register const uchar *i,*j; - - i= str; - j= search+1; - - while (j != search_end) - if ((*i++) != (*j++)) - goto skip; - - if (nmatch > 0) - { - match[0].beg= 0; - match[0].end= (size_t) (str- (const uchar*)b-1); - match[0].mb_len= match[0].end; - - if (nmatch > 1) - { - match[1].beg= match[0].end; - match[1].end= match[0].end+s_length; - match[1].mb_len= match[1].end-match[1].beg; - } - } - return 2; - } - } - } - return 0; -} - - -MY_COLLATION_HANDLER my_collation_8bit_bin_handler = -{ - my_coll_init_8bit_bin, - my_strnncoll_8bit_bin, - my_strnncollsp_8bit_bin, - my_strnxfrm_8bit_bin, - my_strnxfrmlen_simple, - my_like_range_simple, - my_wildcmp_bin, - my_strcasecmp_bin, - my_instr_bin, - my_hash_sort_8bit_bin, - my_propagate_simple -}; - - -static MY_COLLATION_HANDLER my_collation_binary_handler = -{ - NULL, /* init */ - my_strnncoll_binary, - my_strnncollsp_binary, - my_strnxfrm_bin, - my_strnxfrmlen_simple, - my_like_range_simple, - my_wildcmp_bin, - my_strcasecmp_bin, - my_instr_bin, - my_hash_sort_bin, - my_propagate_simple -}; - - -static MY_CHARSET_HANDLER my_charset_handler= -{ - NULL, /* init */ - NULL, /* ismbchar */ - my_mbcharlen_8bit, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_well_formed_len_8bit, - my_lengthsp_binary, - my_numcells_8bit, - my_mb_wc_bin, - my_wc_mb_bin, - my_mb_ctype_8bit, - my_case_str_bin, - my_case_str_bin, - my_case_bin, - my_case_bin, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_strtoll10_8bit, - my_strntoull10rnd_8bit, - my_scan_8bit -}; - - -CHARSET_INFO my_charset_bin = -{ - 63,0,0, /* number */ - MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_PRIMARY,/* state */ - "binary", /* cs name */ - "binary", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_bin, /* ctype */ - bin_char_array, /* to_lower */ - bin_char_array, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - 0, /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_handler, - &my_collation_binary_handler -}; diff --git a/deps/mysqllite/strings/ctype-cp932.c b/deps/mysqllite/strings/ctype-cp932.c deleted file mode 100644 index df4083c9f8d674..00000000000000 --- a/deps/mysqllite/strings/ctype-cp932.c +++ /dev/null @@ -1,34889 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* This file is for cp932 charaset (Windows Japanese), - and created based on ctype-sjis.c file */ - -#include -#include "m_string.h" -#include "m_ctype.h" - -#ifdef HAVE_CHARSET_cp932 - - -/* - * This comment is parsed by configure to create ctype.c, - * so don't change it unless you know what you are doing. - * - * .configure. strxfrm_multiply_cp932=1 - * .configure. mbmaxlen_cp932=2 - */ - -static uchar ctype_cp932[257] = -{ - 0, /* For standard library */ - 0040, 0040, 0040, 0040, 0040, 0040, 0040, 0040, /* NUL ^A - ^G */ - 0040, 0050, 0050, 0050, 0050, 0050, 0040, 0040, /* ^H - ^O */ - 0040, 0040, 0040, 0040, 0040, 0040, 0040, 0040, /* ^P - ^W */ - 0040, 0040, 0040, 0040, 0040, 0040, 0040, 0040, /* ^X - ^Z ^[ ^\ ^] ^^ ^_ */ - 0110, 0020, 0020, 0020, 0020, 0020, 0020, 0020, /* SPC ! " # $ % ^ ' */ - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, /* ( ) * + , - . / */ - 0204, 0204, 0204, 0204, 0204, 0204, 0204, 0204, /* 0 1 2 3 4 5 6 7 */ - 0204, 0204, 0020, 0020, 0020, 0020, 0020, 0020, /* 8 9 : ; < = > ? */ - 0020, 0201, 0201, 0201, 0201, 0201, 0201, 0001, /* @ A B C D E F G */ - 0001, 0001, 0001, 0001, 0001, 0001, 0001, 0001, /* H I J K L M N O */ - 0001, 0001, 0001, 0001, 0001, 0001, 0001, 0001, /* P Q R S T U V W */ - 0001, 0001, 0001, 0020, 0020, 0020, 0020, 0020, /* X Y Z [ \ ] ^ _ */ - 0020, 0202, 0202, 0202, 0202, 0202, 0202, 0002, /* ` a b c d e f g */ - 0002, 0002, 0002, 0002, 0002, 0002, 0002, 0002, /* h i j k l m n o */ - 0002, 0002, 0002, 0002, 0002, 0002, 0002, 0002, /* p q r s t u v w */ - 0002, 0002, 0002, 0020, 0020, 0020, 0020, 0040, /* x y z { | } + DEL */ - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0000, 0000, 0000 -}; - -static uchar to_lower_cp932[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '[', '\\', ']', '^', '_', - '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '{', '|', '}', '~', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377' -}; - -static uchar to_upper_cp932[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', - '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '{', '|', '}', '~', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377' -}; - -static uchar sort_order_cp932[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', - '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '{', '|', '}', '~', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377' -}; - -#define iscp932head(c) ((0x81<=(c) && (c)<=0x9f) || \ - ((0xe0<=(c)) && (c)<=0xfc)) -#define iscp932tail(c) ((0x40<=(c) && (c)<=0x7e) || \ - (0x80<=(c) && (c)<=0xfc)) - - -static uint ismbchar_cp932(CHARSET_INFO *cs __attribute__((unused)), - const char* p, const char *e) -{ - return (iscp932head((uchar) *p) && (e-p)>1 && iscp932tail((uchar)p[1]) ? 2: 0); -} - -static uint mbcharlen_cp932(CHARSET_INFO *cs __attribute__((unused)),uint c) -{ - return (iscp932head((uchar) c) ? 2 : 1); -} - - -#define cp932code(c,d) ((((uint) (uchar)(c)) << 8) | (uint) (uchar) (d)) - - -static MY_UNICASE_INFO c81[256]= -{ - /* 8100-810F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8110-811F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8120-812F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8130-813F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - - {0x8140,0x8140,0x3000}, /* 8140-814F */ - {0x8141,0x8141,0x3001}, - {0x8142,0x8142,0x3002}, - {0x8143,0x8143,0xFF0C}, - {0x8144,0x8144,0xFF0E}, - {0x8145,0x8145,0x30FB}, - {0x8146,0x8146,0xFF1A}, - {0x8147,0x8147,0xFF1B}, - {0x8148,0x8148,0xFF1F}, - {0x8149,0x8149,0xFF01}, - {0x814A,0x814A,0x309B}, - {0x814B,0x814B,0x309C}, - {0x814C,0x814C,0x00B4}, - {0x814D,0x814D,0xFF40}, - {0x814E,0x814E,0x00A8}, - {0x814F,0x814F,0xFF3E}, - {0x8150,0x8150,0xFFE3}, /* 8150-815F */ - {0x8151,0x8151,0xFF3F}, - {0x8152,0x8152,0x30FD}, - {0x8153,0x8153,0x30FE}, - {0x8154,0x8154,0x309D}, - {0x8155,0x8155,0x309E}, - {0x8156,0x8156,0x3003}, - {0x8157,0x8157,0x4EDD}, - {0x8158,0x8158,0x3005}, - {0x8159,0x8159,0x3006}, - {0x815A,0x815A,0x3007}, - {0x815B,0x815B,0x30FC}, - {0x815C,0x815C,0x2015}, - {0x815D,0x815D,0x2010}, - {0x815E,0x815E,0xFF0F}, - {0x815F,0x815F,0xFF3C}, - {0x8160,0x8160,0xFF5E}, /* 8160-816F */ - {0x8161,0x8161,0x2225}, - {0x8162,0x8162,0xFF5C}, - {0x8163,0x8163,0x2026}, - {0x8164,0x8164,0x2025}, - {0x8165,0x8165,0x2018}, - {0x8166,0x8166,0x2019}, - {0x8167,0x8167,0x201C}, - {0x8168,0x8168,0x201D}, - {0x8169,0x8169,0xFF08}, - {0x816A,0x816A,0xFF09}, - {0x816B,0x816B,0x3014}, - {0x816C,0x816C,0x3015}, - {0x816D,0x816D,0xFF3B}, - {0x816E,0x816E,0xFF3D}, - {0x816F,0x816F,0xFF5B}, - {0x8170,0x8170,0xFF5D}, /* 8170-817F */ - {0x8171,0x8171,0x3008}, - {0x8172,0x8172,0x3009}, - {0x8173,0x8173,0x300A}, - {0x8174,0x8174,0x300B}, - {0x8175,0x8175,0x300C}, - {0x8176,0x8176,0x300D}, - {0x8177,0x8177,0x300E}, - {0x8178,0x8178,0x300F}, - {0x8179,0x8179,0x3010}, - {0x817A,0x817A,0x3011}, - {0x817B,0x817B,0xFF0B}, - {0x817C,0x817C,0xFF0D}, - {0x817D,0x817D,0x00B1}, - {0x817E,0x817E,0x00D7}, - {0,0,0}, - {0x8180,0x8180,0x00F7}, /* 8180-818F */ - {0x8181,0x8181,0xFF1D}, - {0x8182,0x8182,0x2260}, - {0x8183,0x8183,0xFF1C}, - {0x8184,0x8184,0xFF1E}, - {0x8185,0x8185,0x2266}, - {0x8186,0x8186,0x2267}, - {0x8187,0x8187,0x221E}, - {0x8188,0x8188,0x2234}, - {0x8189,0x8189,0x2642}, - {0x818A,0x818A,0x2640}, - {0x818B,0x818B,0x00B0}, - {0x818C,0x818C,0x2032}, - {0x818D,0x818D,0x2033}, - {0x818E,0x818E,0x2103}, - {0x818F,0x818F,0xFFE5}, - {0x8190,0x8190,0xFF04}, /* 8190-819F*/ - {0x8191,0x8191,0xFFE0}, - {0x8192,0x8192,0xFFE1}, - {0x8193,0x8193,0xFF05}, - {0x8194,0x8194,0xFF03}, - {0x8195,0x8195,0xFF06}, - {0x8196,0x8196,0xFF0A}, - {0x8197,0x8197,0xFF20}, - {0x8198,0x8198,0x00A7}, - {0x8199,0x8199,0x2606}, - {0x819A,0x819A,0x2605}, - {0x819B,0x819B,0x25CB}, - {0x819C,0x819C,0x25CF}, - {0x819D,0x819D,0x25CE}, - {0x819E,0x819E,0x25C7}, - {0x819F,0x819F,0x25C6}, - {0x81A0,0x81A0,0x25A1}, /* 81A0-81AF */ - {0x81A1,0x81A1,0x25A0}, - {0x81A2,0x81A2,0x25B3}, - {0x81A3,0x81A3,0x25B2}, - {0x81A4,0x81A4,0x25BD}, - {0x81A5,0x81A5,0x25BC}, - {0x81A6,0x81A6,0x203B}, - {0x81A7,0x81A7,0x3012}, - {0x81A8,0x81A8,0x2192}, - {0x81A9,0x81A9,0x2190}, - {0x81AA,0x81AA,0x2191}, - {0x81AB,0x81AB,0x2193}, - {0x81AC,0x81AC,0x3013}, - {0x81AD,0x81AD,0x003F}, - {0x81AE,0x81AE,0x003F}, - {0x81AF,0x81AF,0x003F}, - {0x81B0,0x81B0,0x003F}, /* 81B0-81BF */ - {0x81B1,0x81B1,0x003F}, - {0x81B2,0x81B2,0x003F}, - {0x81B3,0x81B3,0x003F}, - {0x81B4,0x81B4,0x003F}, - {0x81B5,0x81B5,0x003F}, - {0x81B6,0x81B6,0x003F}, - {0x81B7,0x81B7,0x003F}, - {0x81B8,0x81B8,0x2208}, - {0x81B9,0x81B9,0x220B}, - {0x81BA,0x81BA,0x2286}, - {0x81BB,0x81BB,0x2287}, - {0x81BC,0x81BC,0x2282}, - {0x81BD,0x81BD,0x2283}, - {0x81BE,0x81BE,0x222A}, - {0x81BF,0x81BF,0x2229}, - {0x81C0,0x81C0,0x003F}, /* 81C0-81CF */ - {0x81C1,0x81C1,0x003F}, - {0x81C2,0x81C2,0x003F}, - {0x81C3,0x81C3,0x003F}, - {0x81C4,0x81C4,0x003F}, - {0x81C5,0x81C5,0x003F}, - {0x81C6,0x81C6,0x003F}, - {0x81C7,0x81C7,0x003F}, - {0x81C8,0x81C8,0x2227}, - {0x81C9,0x81C9,0x2228}, - {0x81CA,0x81CA,0xFFE2}, - {0x81CB,0x81CB,0x21D2}, - {0x81CC,0x81CC,0x21D4}, - {0x81CD,0x81CD,0x2200}, - {0x81CE,0x81CE,0x2203}, - {0x81CF,0x81CF,0x003F}, - {0x81D0,0x81D0,0x003F}, /* 81D0-81DF */ - {0x81D1,0x81D1,0x003F}, - {0x81D2,0x81D2,0x003F}, - {0x81D3,0x81D3,0x003F}, - {0x81D4,0x81D4,0x003F}, - {0x81D5,0x81D5,0x003F}, - {0x81D6,0x81D6,0x003F}, - {0x81D7,0x81D7,0x003F}, - {0x81D8,0x81D8,0x003F}, - {0x81D9,0x81D9,0x003F}, - {0x81DA,0x81DA,0x2220}, - {0x81DB,0x81DB,0x22A5}, - {0x81DC,0x81DC,0x2312}, - {0x81DD,0x81DD,0x2202}, - {0x81DE,0x81DE,0x2207}, - {0x81DF,0x81DF,0x2261}, - {0x81E0,0x81E0,0x2252}, /* 81E0-81EF */ - {0x81E1,0x81E1,0x226A}, - {0x81E2,0x81E2,0x226B}, - {0x81E3,0x81E3,0x221A}, - {0x81E4,0x81E4,0x223D}, - {0x81E5,0x81E5,0x221D}, - {0x81E6,0x81E6,0x2235}, - {0x81E7,0x81E7,0x222B}, - {0x81E8,0x81E8,0x222C}, - {0x81E9,0x81E9,0x003F}, - {0x81EA,0x81EA,0x003F}, - {0x81EB,0x81EB,0x003F}, - {0x81EC,0x81EC,0x003F}, - {0x81ED,0x81ED,0x003F}, - {0x81EE,0x81EE,0x003F}, - {0x81EF,0x81EF,0x003F}, - {0x81F0,0x81F0,0x212B}, /* 81F0-81FF */ - {0x81F1,0x81F1,0x2030}, - {0x81F2,0x81F2,0x266F}, - {0x81F3,0x81F3,0x266D}, - {0x81F4,0x81F4,0x266A}, - {0x81F5,0x81F5,0x2020}, - {0x81F6,0x81F6,0x2021}, - {0x81F7,0x81F7,0x00B6}, - {0x81F8,0x81F8,0x003F}, - {0x81F9,0x81F9,0x003F}, - {0x81FA,0x81FA,0x003F}, - {0x81FB,0x81FB,0x003F}, - {0x81FC,0x81FC,0x25EF}, - {0,0,0}, - {0,0,0}, - {0,0,0}, -}; - - -static MY_UNICASE_INFO c82[256]= -{ - /* 8200-820F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8210-821F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8220-822F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8230-823F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - - {0x8240,0x8240,0x003F}, /* 8240-824F */ - {0x8241,0x8241,0x003F}, - {0x8242,0x8242,0x003F}, - {0x8243,0x8243,0x003F}, - {0x8244,0x8244,0x003F}, - {0x8245,0x8245,0x003F}, - {0x8246,0x8246,0x003F}, - {0x8247,0x8247,0x003F}, - {0x8248,0x8248,0x003F}, - {0x8249,0x8249,0x003F}, - {0x824A,0x824A,0x003F}, - {0x824B,0x824B,0x003F}, - {0x824C,0x824C,0x003F}, - {0x824D,0x824D,0x003F}, - {0x824E,0x824E,0x003F}, - {0x824F,0x824F,0xFF10}, - {0x8250,0x8250,0xFF11}, /* 8250-825F */ - {0x8251,0x8251,0xFF12}, - {0x8252,0x8252,0xFF13}, - {0x8253,0x8253,0xFF14}, - {0x8254,0x8254,0xFF15}, - {0x8255,0x8255,0xFF16}, - {0x8256,0x8256,0xFF17}, - {0x8257,0x8257,0xFF18}, - {0x8258,0x8258,0xFF19}, - {0x8259,0x8259,0x003F}, - {0x825A,0x825A,0x003F}, - {0x825B,0x825B,0x003F}, - {0x825C,0x825C,0x003F}, - {0x825D,0x825D,0x003F}, - {0x825E,0x825E,0x003F}, - {0x825F,0x825F,0x003F}, - {0x8260,0x8281,0xFF21}, /* 8260-826F */ - {0x8261,0x8282,0xFF22}, - {0x8262,0x8283,0xFF23}, - {0x8263,0x8284,0xFF24}, - {0x8264,0x8285,0xFF25}, - {0x8265,0x8286,0xFF26}, - {0x8266,0x8287,0xFF27}, - {0x8267,0x8288,0xFF28}, - {0x8268,0x8289,0xFF29}, - {0x8269,0x828A,0xFF2A}, - {0x826A,0x828B,0xFF2B}, - {0x826B,0x828C,0xFF2C}, - {0x826C,0x828D,0xFF2D}, - {0x826D,0x828E,0xFF2E}, - {0x826E,0x828F,0xFF2F}, - {0x826F,0x8290,0xFF30}, - {0x8270,0x8291,0xFF31}, /* 8270-827F */ - {0x8271,0x8292,0xFF32}, - {0x8272,0x8293,0xFF33}, - {0x8273,0x8294,0xFF34}, - {0x8274,0x8295,0xFF35}, - {0x8275,0x8296,0xFF36}, - {0x8276,0x8297,0xFF37}, - {0x8277,0x8298,0xFF38}, - {0x8278,0x8299,0xFF39}, - {0x8279,0x829A,0xFF3A}, - {0x827A,0x827A,0x003F}, - {0x827B,0x827B,0x003F}, - {0x827C,0x827C,0x003F}, - {0x827D,0x827D,0x003F}, - {0x827E,0x827E,0x003F}, - {0,0,0}, - {0x8280,0x8280,0x003F}, /* 8280-828F */ - {0x8260,0x8281,0xFF41}, - {0x8261,0x8282,0xFF42}, - {0x8262,0x8283,0xFF43}, - {0x8263,0x8284,0xFF44}, - {0x8264,0x8285,0xFF45}, - {0x8265,0x8286,0xFF46}, - {0x8266,0x8287,0xFF47}, - {0x8267,0x8288,0xFF48}, - {0x8268,0x8289,0xFF49}, - {0x8269,0x828A,0xFF4A}, - {0x826A,0x828B,0xFF4B}, - {0x826B,0x828C,0xFF4C}, - {0x826C,0x828D,0xFF4D}, - {0x826D,0x828E,0xFF4E}, - {0x826E,0x828F,0xFF4F}, - {0x826F,0x8290,0xFF50}, /* 8290-829F */ - {0x8270,0x8291,0xFF51}, - {0x8271,0x8292,0xFF52}, - {0x8272,0x8293,0xFF53}, - {0x8273,0x8294,0xFF54}, - {0x8274,0x8295,0xFF55}, - {0x8275,0x8296,0xFF56}, - {0x8276,0x8297,0xFF57}, - {0x8277,0x8298,0xFF58}, - {0x8278,0x8299,0xFF59}, - {0x8279,0x829A,0xFF5A}, - {0x829B,0x829B,0x003F}, - {0x829C,0x829C,0x003F}, - {0x829D,0x829D,0x003F}, - {0x829E,0x829E,0x003F}, - {0x829F,0x829F,0x3041}, - {0x82A0,0x82A0,0x3042}, /* 82A0-82AF */ - {0x82A1,0x82A1,0x3043}, - {0x82A2,0x82A2,0x3044}, - {0x82A3,0x82A3,0x3045}, - {0x82A4,0x82A4,0x3046}, - {0x82A5,0x82A5,0x3047}, - {0x82A6,0x82A6,0x3048}, - {0x82A7,0x82A7,0x3049}, - {0x82A8,0x82A8,0x304A}, - {0x82A9,0x82A9,0x304B}, - {0x82AA,0x82AA,0x304C}, - {0x82AB,0x82AB,0x304D}, - {0x82AC,0x82AC,0x304E}, - {0x82AD,0x82AD,0x304F}, - {0x82AE,0x82AE,0x3050}, - {0x82AF,0x82AF,0x3051}, - {0x82B0,0x82B0,0x3052}, /* 82B0-82BF */ - {0x82B1,0x82B1,0x3053}, - {0x82B2,0x82B2,0x3054}, - {0x82B3,0x82B3,0x3055}, - {0x82B4,0x82B4,0x3056}, - {0x82B5,0x82B5,0x3057}, - {0x82B6,0x82B6,0x3058}, - {0x82B7,0x82B7,0x3059}, - {0x82B8,0x82B8,0x305A}, - {0x82B9,0x82B9,0x305B}, - {0x82BA,0x82BA,0x305C}, - {0x82BB,0x82BB,0x305D}, - {0x82BC,0x82BC,0x305E}, - {0x82BD,0x82BD,0x305F}, - {0x82BE,0x82BE,0x3060}, - {0x82BF,0x82BF,0x3061}, - {0x82C0,0x82C0,0x3062}, /* 82C0-82CF */ - {0x82C1,0x82C1,0x3063}, - {0x82C2,0x82C2,0x3064}, - {0x82C3,0x82C3,0x3065}, - {0x82C4,0x82C4,0x3066}, - {0x82C5,0x82C5,0x3067}, - {0x82C6,0x82C6,0x3068}, - {0x82C7,0x82C7,0x3069}, - {0x82C8,0x82C8,0x306A}, - {0x82C9,0x82C9,0x306B}, - {0x82CA,0x82CA,0x306C}, - {0x82CB,0x82CB,0x306D}, - {0x82CC,0x82CC,0x306E}, - {0x82CD,0x82CD,0x306F}, - {0x82CE,0x82CE,0x3070}, - {0x82CF,0x82CF,0x3071}, - {0x82D0,0x82D0,0x3072}, /* 82D0-82DF */ - {0x82D1,0x82D1,0x3073}, - {0x82D2,0x82D2,0x3074}, - {0x82D3,0x82D3,0x3075}, - {0x82D4,0x82D4,0x3076}, - {0x82D5,0x82D5,0x3077}, - {0x82D6,0x82D6,0x3078}, - {0x82D7,0x82D7,0x3079}, - {0x82D8,0x82D8,0x307A}, - {0x82D9,0x82D9,0x307B}, - {0x82DA,0x82DA,0x307C}, - {0x82DB,0x82DB,0x307D}, - {0x82DC,0x82DC,0x307E}, - {0x82DD,0x82DD,0x307F}, - {0x82DE,0x82DE,0x3080}, - {0x82DF,0x82DF,0x3081}, - {0x82E0,0x82E0,0x3082}, /* 82E0-82EF */ - {0x82E1,0x82E1,0x3083}, - {0x82E2,0x82E2,0x3084}, - {0x82E3,0x82E3,0x3085}, - {0x82E4,0x82E4,0x3086}, - {0x82E5,0x82E5,0x3087}, - {0x82E6,0x82E6,0x3088}, - {0x82E7,0x82E7,0x3089}, - {0x82E8,0x82E8,0x308A}, - {0x82E9,0x82E9,0x308B}, - {0x82EA,0x82EA,0x308C}, - {0x82EB,0x82EB,0x308D}, - {0x82EC,0x82EC,0x308E}, - {0x82ED,0x82ED,0x308F}, - {0x82EE,0x82EE,0x3090}, - {0x82EF,0x82EF,0x3091}, - {0x82F0,0x82F0,0x3092}, /* 82F0-82FF */ - {0x82F1,0x82F1,0x3093}, - {0x82F2,0x82F2,0x003F}, - {0x82F3,0x82F3,0x003F}, - {0x82F4,0x82F4,0x003F}, - {0x82F5,0x82F5,0x003F}, - {0x82F6,0x82F6,0x003F}, - {0x82F7,0x82F7,0x003F}, - {0x82F8,0x82F8,0x003F}, - {0x82F9,0x82F9,0x003F}, - {0x82FA,0x82FA,0x003F}, - {0x82FB,0x82FB,0x003F}, - {0x82FC,0x82FC,0x003F}, - {0,0,0} -}; - - -static MY_UNICASE_INFO c83[256]= -{ - /* 8300-830F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8310-831F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8320-832F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8330-833F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - - {0x8340,0x8340,0x30A1}, /* 8340 */ - {0x8341,0x8341,0x30A2}, - {0x8342,0x8342,0x30A3}, - {0x8343,0x8343,0x30A4}, - {0x8344,0x8344,0x30A5}, - {0x8345,0x8345,0x30A6}, - {0x8346,0x8346,0x30A7}, - {0x8347,0x8347,0x30A8}, - {0x8348,0x8348,0x30A9}, - {0x8349,0x8349,0x30AA}, - {0x834A,0x834A,0x30AB}, - {0x834B,0x834B,0x30AC}, - {0x834C,0x834C,0x30AD}, - {0x834D,0x834D,0x30AE}, - {0x834E,0x834E,0x30AF}, - {0x834F,0x834F,0x30B0}, - {0x8350,0x8350,0x30B1}, /* 8350 */ - {0x8351,0x8351,0x30B2}, - {0x8352,0x8352,0x30B3}, - {0x8353,0x8353,0x30B4}, - {0x8354,0x8354,0x30B5}, - {0x8355,0x8355,0x30B6}, - {0x8356,0x8356,0x30B7}, - {0x8357,0x8357,0x30B8}, - {0x8358,0x8358,0x30B9}, - {0x8359,0x8359,0x30BA}, - {0x835A,0x835A,0x30BB}, - {0x835B,0x835B,0x30BC}, - {0x835C,0x835C,0x30BD}, - {0x835D,0x835D,0x30BE}, - {0x835E,0x835E,0x30BF}, - {0x835F,0x835F,0x30C0}, - {0x8360,0x8360,0x30C1}, /* 8360 */ - {0x8361,0x8361,0x30C2}, - {0x8362,0x8362,0x30C3}, - {0x8363,0x8363,0x30C4}, - {0x8364,0x8364,0x30C5}, - {0x8365,0x8365,0x30C6}, - {0x8366,0x8366,0x30C7}, - {0x8367,0x8367,0x30C8}, - {0x8368,0x8368,0x30C9}, - {0x8369,0x8369,0x30CA}, - {0x836A,0x836A,0x30CB}, - {0x836B,0x836B,0x30CC}, - {0x836C,0x836C,0x30CD}, - {0x836D,0x836D,0x30CE}, - {0x836E,0x836E,0x30CF}, - {0x836F,0x836F,0x30D0}, - {0x8370,0x8370,0x30D1}, /* 8370 */ - {0x8371,0x8371,0x30D2}, - {0x8372,0x8372,0x30D3}, - {0x8373,0x8373,0x30D4}, - {0x8374,0x8374,0x30D5}, - {0x8375,0x8375,0x30D6}, - {0x8376,0x8376,0x30D7}, - {0x8377,0x8377,0x30D8}, - {0x8378,0x8378,0x30D9}, - {0x8379,0x8379,0x30DA}, - {0x837A,0x837A,0x30DB}, - {0x837B,0x837B,0x30DC}, - {0x837C,0x837C,0x30DD}, - {0x837D,0x837D,0x30DE}, - {0x837E,0x837E,0x30DF}, - {0,0,0}, - {0x8380,0x8380,0x30E0}, /* 8380 */ - {0x8381,0x8381,0x30E1}, - {0x8382,0x8382,0x30E2}, - {0x8383,0x8383,0x30E3}, - {0x8384,0x8384,0x30E4}, - {0x8385,0x8385,0x30E5}, - {0x8386,0x8386,0x30E6}, - {0x8387,0x8387,0x30E7}, - {0x8388,0x8388,0x30E8}, - {0x8389,0x8389,0x30E9}, - {0x838A,0x838A,0x30EA}, - {0x838B,0x838B,0x30EB}, - {0x838C,0x838C,0x30EC}, - {0x838D,0x838D,0x30ED}, - {0x838E,0x838E,0x30EE}, - {0x838F,0x838F,0x30EF}, - {0x8390,0x8390,0x30F0}, /* 8390 */ - {0x8391,0x8391,0x30F1}, - {0x8392,0x8392,0x30F2}, - {0x8393,0x8393,0x30F3}, - {0x8394,0x8394,0x30F4}, - {0x8395,0x8395,0x30F5}, - {0x8396,0x8396,0x30F6}, - {0x8397,0x8397,0x003F}, - {0x8398,0x8398,0x003F}, - {0x8399,0x8399,0x003F}, - {0x839A,0x839A,0x003F}, - {0x839B,0x839B,0x003F}, - {0x839C,0x839C,0x003F}, - {0x839D,0x839D,0x003F}, - {0x839E,0x839E,0x003F}, - {0x839F,0x83BF,0x0391}, - {0x83A0,0x83C0,0x0392}, /* 83A0 */ - {0x83A1,0x83C1,0x0393}, - {0x83A2,0x83C2,0x0394}, - {0x83A3,0x83C3,0x0395}, - {0x83A4,0x83C4,0x0396}, - {0x83A5,0x83C5,0x0397}, - {0x83A6,0x83C6,0x0398}, - {0x83A7,0x83C7,0x0399}, - {0x83A8,0x83C8,0x039A}, - {0x83A9,0x83C9,0x039B}, - {0x83AA,0x83CA,0x039C}, - {0x83AB,0x83CB,0x039D}, - {0x83AC,0x83CC,0x039E}, - {0x83AD,0x83CD,0x039F}, - {0x83AE,0x83CE,0x03A0}, - {0x83AF,0x83CF,0x03A1}, - {0x83B0,0x83D0,0x03A3}, /* 83B0 */ - {0x83B1,0x83D1,0x03A4}, - {0x83B2,0x83D2,0x03A5}, - {0x83B3,0x83D3,0x03A6}, - {0x83B4,0x83D4,0x03A7}, - {0x83B5,0x83D5,0x03A8}, - {0x83B6,0x83D6,0x03A9}, - {0x83B7,0x83B7,0x003F}, - {0x83B8,0x83B8,0x003F}, - {0x83B9,0x83B9,0x003F}, - {0x83BA,0x83BA,0x003F}, - {0x83BB,0x83BB,0x003F}, - {0x83BC,0x83BC,0x003F}, - {0x83BD,0x83BD,0x003F}, - {0x83BE,0x83BE,0x003F}, - {0x839F,0x83BF,0x03B1}, - {0x83A0,0x83C0,0x03B2}, /* 83C0 */ - {0x83A1,0x83C1,0x03B3}, - {0x83A2,0x83C2,0x03B4}, - {0x83A3,0x83C3,0x03B5}, - {0x83A4,0x83C4,0x03B6}, - {0x83A5,0x83C5,0x03B7}, - {0x83A6,0x83C6,0x03B8}, - {0x83A7,0x83C7,0x03B9}, - {0x83A8,0x83C8,0x03BA}, - {0x83A9,0x83C9,0x03BB}, - {0x83AA,0x83CA,0x03BC}, - {0x83AB,0x83CB,0x03BD}, - {0x83AC,0x83CC,0x03BE}, - {0x83AD,0x83CD,0x03BF}, - {0x83AE,0x83CE,0x03C0}, - {0x83AF,0x83CF,0x03C1}, - {0x83B0,0x83D0,0x03C3}, /* 83D0 */ - {0x83B1,0x83D1,0x03C4}, - {0x83B2,0x83D2,0x03C5}, - {0x83B3,0x83D3,0x03C6}, - {0x83B4,0x83D4,0x03C7}, - {0x83B5,0x83D5,0x03C8}, - {0x83B6,0x83D6,0x03C9}, - {0x83D7,0x83D7,0x003F}, - {0x83D8,0x83D8,0x003F}, - {0x83D9,0x83D9,0x003F}, - {0x83DA,0x83DA,0x003F}, - {0x83DB,0x83DB,0x003F}, - {0x83DC,0x83DC,0x003F}, - {0x83DD,0x83DD,0x003F}, - {0x83DE,0x83DE,0x003F}, - {0x83DF,0x83DF,0x003F}, - {0x83E0,0x83E0,0x003F}, /* 83E0 */ - {0x83E1,0x83E1,0x003F}, - {0x83E2,0x83E2,0x003F}, - {0x83E3,0x83E3,0x003F}, - {0x83E4,0x83E4,0x003F}, - {0x83E5,0x83E5,0x003F}, - {0x83E6,0x83E6,0x003F}, - {0x83E7,0x83E7,0x003F}, - {0x83E8,0x83E8,0x003F}, - {0x83E9,0x83E9,0x003F}, - {0x83EA,0x83EA,0x003F}, - {0x83EB,0x83EB,0x003F}, - {0x83EC,0x83EC,0x003F}, - {0x83ED,0x83ED,0x003F}, - {0x83EE,0x83EE,0x003F}, - {0x83EF,0x83EF,0x003F}, - {0x83F0,0x83F0,0x003F}, /* 83F0 */ - {0x83F1,0x83F1,0x003F}, - {0x83F2,0x83F2,0x003F}, - {0x83F3,0x83F3,0x003F}, - {0x83F4,0x83F4,0x003F}, - {0x83F5,0x83F5,0x003F}, - {0x83F6,0x83F6,0x003F}, - {0x83F7,0x83F7,0x003F}, - {0x83F8,0x83F8,0x003F}, - {0x83F9,0x83F9,0x003F}, - {0x83FA,0x83FA,0x003F}, - {0x83FB,0x83FB,0x003F}, - {0x83FC,0x83FC,0x003F}, - {0,0,0}, - {0,0,0}, - {0,0,0} -}; - - -static MY_UNICASE_INFO c84[256]= -{ - /* 8400-840F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8410-841F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8420-842F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8430-843F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - - {0x8440,0x8470,0x0410}, /* 8440 */ - {0x8441,0x8471,0x0411}, - {0x8442,0x8472,0x0412}, - {0x8443,0x8473,0x0413}, - {0x8444,0x8474,0x0414}, - {0x8445,0x8475,0x0415}, - {0x8446,0x8476,0x0401}, - {0x8447,0x8477,0x0416}, - {0x8448,0x8478,0x0417}, - {0x8449,0x8479,0x0418}, - {0x844A,0x847A,0x0419}, - {0x844B,0x847B,0x041A}, - {0x844C,0x847C,0x041B}, - {0x844D,0x847D,0x041C}, - {0x844E,0x847E,0x041D}, - {0x844F,0x8480,0x041E}, - {0x8450,0x8481,0x041F}, /* 8450 */ - {0x8451,0x8482,0x0420}, - {0x8452,0x8483,0x0421}, - {0x8453,0x8484,0x0422}, - {0x8454,0x8485,0x0423}, - {0x8455,0x8486,0x0424}, - {0x8456,0x8487,0x0425}, - {0x8457,0x8488,0x0426}, - {0x8458,0x8489,0x0427}, - {0x8459,0x848A,0x0428}, - {0x845A,0x848B,0x0429}, - {0x845B,0x848C,0x042A}, - {0x845C,0x848D,0x042B}, - {0x845D,0x848E,0x042C}, - {0x845E,0x848F,0x042D}, - {0x845F,0x8490,0x042E}, - {0x8460,0x8491,0x042F}, /* 8460 */ - {0x8461,0x8461,0x003F}, - {0x8462,0x8462,0x003F}, - {0x8463,0x8463,0x003F}, - {0x8464,0x8464,0x003F}, - {0x8465,0x8465,0x003F}, - {0x8466,0x8466,0x003F}, - {0x8467,0x8467,0x003F}, - {0x8468,0x8468,0x003F}, - {0x8469,0x8469,0x003F}, - {0x846A,0x846A,0x003F}, - {0x846B,0x846B,0x003F}, - {0x846C,0x846C,0x003F}, - {0x846D,0x846D,0x003F}, - {0x846E,0x846E,0x003F}, - {0x846F,0x846F,0x003F}, - {0x8440,0x8470,0x0430}, /* 8470 */ - {0x8441,0x8471,0x0431}, - {0x8442,0x8472,0x0432}, - {0x8443,0x8473,0x0433}, - {0x8444,0x8474,0x0434}, - {0x8445,0x8475,0x0435}, - {0x8446,0x8476,0x0451}, - {0x8447,0x8477,0x0436}, - {0x8448,0x8478,0x0437}, - {0x8449,0x8479,0x0438}, - {0x844A,0x847A,0x0439}, - {0x844B,0x847B,0x043A}, - {0x844C,0x847C,0x043B}, - {0x844D,0x847D,0x043C}, - {0x844E,0x847E,0x043D}, - {0,0,0}, - {0x844F,0x8480,0x043E}, /* 8480 */ - {0x8450,0x8481,0x043F}, - {0x8451,0x8482,0x0440}, - {0x8452,0x8483,0x0441}, - {0x8453,0x8484,0x0442}, - {0x8454,0x8485,0x0443}, - {0x8455,0x8486,0x0444}, - {0x8456,0x8487,0x0445}, - {0x8457,0x8488,0x0446}, - {0x8458,0x8489,0x0447}, - {0x8459,0x848A,0x0448}, - {0x845A,0x848B,0x0449}, - {0x845B,0x848C,0x044A}, - {0x845C,0x848D,0x044B}, - {0x845D,0x848E,0x044C}, - {0x845E,0x848F,0x044D}, - {0x845F,0x8490,0x044E}, /* 8490 */ - {0x8460,0x8491,0x044F}, - {0x8492,0x8492,0x003F}, - {0x8493,0x8493,0x003F}, - {0x8494,0x8494,0x003F}, - {0x8495,0x8495,0x003F}, - {0x8496,0x8496,0x003F}, - {0x8497,0x8497,0x003F}, - {0x8498,0x8498,0x003F}, - {0x8499,0x8499,0x003F}, - {0x849A,0x849A,0x003F}, - {0x849B,0x849B,0x003F}, - {0x849C,0x849C,0x003F}, - {0x849D,0x849D,0x003F}, - {0x849E,0x849E,0x003F}, - {0x849F,0x849F,0x2500}, - {0x84A0,0x84A0,0x2502}, /* 84A0 */ - {0x84A1,0x84A1,0x250C}, - {0x84A2,0x84A2,0x2510}, - {0x84A3,0x84A3,0x2518}, - {0x84A4,0x84A4,0x2514}, - {0x84A5,0x84A5,0x251C}, - {0x84A6,0x84A6,0x252C}, - {0x84A7,0x84A7,0x2524}, - {0x84A8,0x84A8,0x2534}, - {0x84A9,0x84A9,0x253C}, - {0x84AA,0x84AA,0x2501}, - {0x84AB,0x84AB,0x2503}, - {0x84AC,0x84AC,0x250F}, - {0x84AD,0x84AD,0x2513}, - {0x84AE,0x84AE,0x251B}, - {0x84AF,0x84AF,0x2517}, - {0x84B0,0x84B0,0x2523}, /* 84B0 */ - {0x84B1,0x84B1,0x2533}, - {0x84B2,0x84B2,0x252B}, - {0x84B3,0x84B3,0x253B}, - {0x84B4,0x84B4,0x254B}, - {0x84B5,0x84B5,0x2520}, - {0x84B6,0x84B6,0x252F}, - {0x84B7,0x84B7,0x2528}, - {0x84B8,0x84B8,0x2537}, - {0x84B9,0x84B9,0x253F}, - {0x84BA,0x84BA,0x251D}, - {0x84BB,0x84BB,0x2530}, - {0x84BC,0x84BC,0x2525}, - {0x84BD,0x84BD,0x2538}, - {0x84BE,0x84BE,0x2542}, - {0x84BF,0x84BF,0x003F}, - {0x84C0,0x84C0,0x003F}, /* 84C0 */ - {0x84C1,0x84C1,0x003F}, - {0x84C2,0x84C2,0x003F}, - {0x84C3,0x84C3,0x003F}, - {0x84C4,0x84C4,0x003F}, - {0x84C5,0x84C5,0x003F}, - {0x84C6,0x84C6,0x003F}, - {0x84C7,0x84C7,0x003F}, - {0x84C8,0x84C8,0x003F}, - {0x84C9,0x84C9,0x003F}, - {0x84CA,0x84CA,0x003F}, - {0x84CB,0x84CB,0x003F}, - {0x84CC,0x84CC,0x003F}, - {0x84CD,0x84CD,0x003F}, - {0x84CE,0x84CE,0x003F}, - {0x84CF,0x84CF,0x003F}, - {0x84D0,0x84D0,0x003F}, /* 84D0 */ - {0x84D1,0x84D1,0x003F}, - {0x84D2,0x84D2,0x003F}, - {0x84D3,0x84D3,0x003F}, - {0x84D4,0x84D4,0x003F}, - {0x84D5,0x84D5,0x003F}, - {0x84D6,0x84D6,0x003F}, - {0x84D7,0x84D7,0x003F}, - {0x84D8,0x84D8,0x003F}, - {0x84D9,0x84D9,0x003F}, - {0x84DA,0x84DA,0x003F}, - {0x84DB,0x84DB,0x003F}, - {0x84DC,0x84DC,0x003F}, - {0x84DD,0x84DD,0x003F}, - {0x84DE,0x84DE,0x003F}, - {0x84DF,0x84DF,0x003F}, - {0x84E0,0x84E0,0x003F}, /* 84E0 */ - {0x84E1,0x84E1,0x003F}, - {0x84E2,0x84E2,0x003F}, - {0x84E3,0x84E3,0x003F}, - {0x84E4,0x84E4,0x003F}, - {0x84E5,0x84E5,0x003F}, - {0x84E6,0x84E6,0x003F}, - {0x84E7,0x84E7,0x003F}, - {0x84E8,0x84E8,0x003F}, - {0x84E9,0x84E9,0x003F}, - {0x84EA,0x84EA,0x003F}, - {0x84EB,0x84EB,0x003F}, - {0x84EC,0x84EC,0x003F}, - {0x84ED,0x84ED,0x003F}, - {0x84EE,0x84EE,0x003F}, - {0x84EF,0x84EF,0x003F}, - {0x84F0,0x84F0,0x003F}, /* 84F0 */ - {0x84F1,0x84F1,0x003F}, - {0x84F2,0x84F2,0x003F}, - {0x84F3,0x84F3,0x003F}, - {0x84F4,0x84F4,0x003F}, - {0x84F5,0x84F5,0x003F}, - {0x84F6,0x84F6,0x003F}, - {0x84F7,0x84F7,0x003F}, - {0x84F8,0x84F8,0x003F}, - {0x84F9,0x84F9,0x003F}, - {0x84FA,0x84FA,0x003F}, - {0x84FB,0x84FB,0x003F}, - {0x84FC,0x84FC,0x003F}, - {0,0,0}, - {0,0,0}, - {0,0,0} -}; - - -static MY_UNICASE_INFO c87[256]= -{ - /* 8700-870F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8710-871F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8720-872F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* 8730-873F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - - {0x8740,0x8740,0x2460}, /* 8740 */ - {0x8741,0x8741,0x2461}, - {0x8742,0x8742,0x2462}, - {0x8743,0x8743,0x2463}, - {0x8744,0x8744,0x2464}, - {0x8745,0x8745,0x2465}, - {0x8746,0x8746,0x2466}, - {0x8747,0x8747,0x2467}, - {0x8748,0x8748,0x2468}, - {0x8749,0x8749,0x2469}, - {0x874A,0x874A,0x246A}, - {0x874B,0x874B,0x246B}, - {0x874C,0x874C,0x246C}, - {0x874D,0x874D,0x246D}, - {0x874E,0x874E,0x246E}, - {0x874F,0x874F,0x246F}, - {0x8750,0x8750,0x2470}, /* 8750 */ - {0x8751,0x8751,0x2471}, - {0x8752,0x8752,0x2472}, - {0x8753,0x8753,0x2473}, - {0x8754,0xEEEF,0x2160}, - {0x8755,0xEEF0,0x2161}, - {0x8756,0xEEF1,0x2162}, - {0x8757,0xEEF2,0x2163}, - {0x8758,0xEEF3,0x2164}, - {0x8759,0xEEF4,0x2165}, - {0x875A,0xEEF5,0x2166}, - {0x875B,0xEEF6,0x2167}, - {0x875C,0xEEF7,0x2168}, - {0x875D,0xEEF8,0x2169}, - {0x875E,0x875E,0x003F}, - {0x875F,0x875F,0x3349}, - {0x8760,0x8760,0x3314}, /* 8760 */ - {0x8761,0x8761,0x3322}, - {0x8762,0x8762,0x334D}, - {0x8763,0x8763,0x3318}, - {0x8764,0x8764,0x3327}, - {0x8765,0x8765,0x3303}, - {0x8766,0x8766,0x3336}, - {0x8767,0x8767,0x3351}, - {0x8768,0x8768,0x3357}, - {0x8769,0x8769,0x330D}, - {0x876A,0x876A,0x3326}, - {0x876B,0x876B,0x3323}, - {0x876C,0x876C,0x332B}, - {0x876D,0x876D,0x334A}, - {0x876E,0x876E,0x333B}, - {0x876F,0x876F,0x339C}, - {0x8770,0x8770,0x339D}, /* 8770 */ - {0x8771,0x8771,0x339E}, - {0x8772,0x8772,0x338E}, - {0x8773,0x8773,0x338F}, - {0x8774,0x8774,0x33C4}, - {0x8775,0x8775,0x33A1}, - {0x8776,0x8776,0x003F}, - {0x8777,0x8777,0x003F}, - {0x8778,0x8778,0x003F}, - {0x8779,0x8779,0x003F}, - {0x877A,0x877A,0x003F}, - {0x877B,0x877B,0x003F}, - {0x877C,0x877C,0x003F}, - {0x877D,0x877D,0x003F}, - {0x877E,0x877E,0x337B}, - {0,0,0}, - {0x8780,0x8780,0x301D}, /* 8780 */ - {0x8781,0x8781,0x301F}, - {0x8782,0x8782,0x2116}, - {0x8783,0x8783,0x33CD}, - {0x8784,0x8784,0x2121}, - {0x8785,0x8785,0x32A4}, - {0x8786,0x8786,0x32A5}, - {0x8787,0x8787,0x32A6}, - {0x8788,0x8788,0x32A7}, - {0x8789,0x8789,0x32A8}, - {0x878A,0x878A,0x3231}, - {0x878B,0x878B,0x3232}, - {0x878C,0x878C,0x3239}, - {0x878D,0x878D,0x337E}, - {0x878E,0x878E,0x337D}, - {0x878F,0x878F,0x337C}, - {0x8790,0x8790,0x2252}, /* 8790 */ - {0x8791,0x8791,0x2261}, - {0x8792,0x8792,0x222B}, - {0x8793,0x8793,0x222E}, - {0x8794,0x8794,0x2211}, - {0x8795,0x8795,0x221A}, - {0x8796,0x8796,0x22A5}, - {0x8797,0x8797,0x2220}, - {0x8798,0x8798,0x221F}, - {0x8799,0x8799,0x22BF}, - {0x879A,0x879A,0x2235}, - {0x879B,0x879B,0x2229}, - {0x879C,0x879C,0x222A}, - {0x879D,0x879D,0x003F}, - {0x879E,0x879E,0x003F}, - {0x879F,0x879F,0x003F}, - {0x87A0,0x87A0,0x003F}, /* 87A0 */ - {0x87A1,0x87A1,0x003F}, - {0x87A2,0x87A2,0x003F}, - {0x87A3,0x87A3,0x003F}, - {0x87A4,0x87A4,0x003F}, - {0x87A5,0x87A5,0x003F}, - {0x87A6,0x87A6,0x003F}, - {0x87A7,0x87A7,0x003F}, - {0x87A8,0x87A8,0x003F}, - {0x87A9,0x87A9,0x003F}, - {0x87AA,0x87AA,0x003F}, - {0x87AB,0x87AB,0x003F}, - {0x87AC,0x87AC,0x003F}, - {0x87AD,0x87AD,0x003F}, - {0x87AE,0x87AE,0x003F}, - {0x87AF,0x87AF,0x003F}, - {0x87B0,0x87B0,0x003F}, /* 87B0 */ - {0x87B1,0x87B1,0x003F}, - {0x87B2,0x87B2,0x003F}, - {0x87B3,0x87B3,0x003F}, - {0x87B4,0x87B4,0x003F}, - {0x87B5,0x87B5,0x003F}, - {0x87B6,0x87B6,0x003F}, - {0x87B7,0x87B7,0x003F}, - {0x87B8,0x87B8,0x003F}, - {0x87B9,0x87B9,0x003F}, - {0x87BA,0x87BA,0x003F}, - {0x87BB,0x87BB,0x003F}, - {0x87BC,0x87BC,0x003F}, - {0x87BD,0x87BD,0x003F}, - {0x87BE,0x87BE,0x003F}, - {0x87BF,0x87BF,0x003F}, - {0x87C0,0x87C0,0x003F}, /* 87C0 */ - {0x87C1,0x87C1,0x003F}, - {0x87C2,0x87C2,0x003F}, - {0x87C3,0x87C3,0x003F}, - {0x87C4,0x87C4,0x003F}, - {0x87C5,0x87C5,0x003F}, - {0x87C6,0x87C6,0x003F}, - {0x87C7,0x87C7,0x003F}, - {0x87C8,0x87C8,0x003F}, - {0x87C9,0x87C9,0x003F}, - {0x87CA,0x87CA,0x003F}, - {0x87CB,0x87CB,0x003F}, - {0x87CC,0x87CC,0x003F}, - {0x87CD,0x87CD,0x003F}, - {0x87CE,0x87CE,0x003F}, - {0x87CF,0x87CF,0x003F}, - {0x87D0,0x87D0,0x003F}, /* 87D0 */ - {0x87D1,0x87D1,0x003F}, - {0x87D2,0x87D2,0x003F}, - {0x87D3,0x87D3,0x003F}, - {0x87D4,0x87D4,0x003F}, - {0x87D5,0x87D5,0x003F}, - {0x87D6,0x87D6,0x003F}, - {0x87D7,0x87D7,0x003F}, - {0x87D8,0x87D8,0x003F}, - {0x87D9,0x87D9,0x003F}, - {0x87DA,0x87DA,0x003F}, - {0x87DB,0x87DB,0x003F}, - {0x87DC,0x87DC,0x003F}, - {0x87DD,0x87DD,0x003F}, - {0x87DE,0x87DE,0x003F}, - {0x87DF,0x87DF,0x003F}, - {0x87E0,0x87E0,0x003F}, /* 87E0 */ - {0x87E1,0x87E1,0x003F}, - {0x87E2,0x87E2,0x003F}, - {0x87E3,0x87E3,0x003F}, - {0x87E4,0x87E4,0x003F}, - {0x87E5,0x87E5,0x003F}, - {0x87E6,0x87E6,0x003F}, - {0x87E7,0x87E7,0x003F}, - {0x87E8,0x87E8,0x003F}, - {0x87E9,0x87E9,0x003F}, - {0x87EA,0x87EA,0x003F}, - {0x87EB,0x87EB,0x003F}, - {0x87EC,0x87EC,0x003F}, - {0x87ED,0x87ED,0x003F}, - {0x87EE,0x87EE,0x003F}, - {0x87EF,0x87EF,0x003F}, - {0x87F0,0x87F0,0x003F}, /* 87F0 */ - {0x87F1,0x87F1,0x003F}, - {0x87F2,0x87F2,0x003F}, - {0x87F3,0x87F3,0x003F}, - {0x87F4,0x87F4,0x003F}, - {0x87F5,0x87F5,0x003F}, - {0x87F6,0x87F6,0x003F}, - {0x87F7,0x87F7,0x003F}, - {0x87F8,0x87F8,0x003F}, - {0x87F9,0x87F9,0x003F}, - {0x87FA,0x87FA,0x003F}, - {0x87FB,0x87FB,0x003F}, - {0x87FC,0x87FC,0x003F}, - {0,0,0}, - {0,0,0}, - {0,0,0} -}; - - -static MY_UNICASE_INFO cEE[256]= -{ - /* EE00-EE0F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* EE10-EE1F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* EE20-EE2F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* EE30-EE3F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - - {0xEE40,0xEE40,0x72BE}, /* EE40 */ - {0xEE41,0xEE41,0x7324}, - {0xEE42,0xEE42,0xFA16}, - {0xEE43,0xEE43,0x7377}, - {0xEE44,0xEE44,0x73BD}, - {0xEE45,0xEE45,0x73C9}, - {0xEE46,0xEE46,0x73D6}, - {0xEE47,0xEE47,0x73E3}, - {0xEE48,0xEE48,0x73D2}, - {0xEE49,0xEE49,0x7407}, - {0xEE4A,0xEE4A,0x73F5}, - {0xEE4B,0xEE4B,0x7426}, - {0xEE4C,0xEE4C,0x742A}, - {0xEE4D,0xEE4D,0x7429}, - {0xEE4E,0xEE4E,0x742E}, - {0xEE4F,0xEE4F,0x7462}, - - {0xEE50,0xEE50,0x7489}, /* EE50 */ - {0xEE51,0xEE51,0x749F}, - {0xEE52,0xEE52,0x7501}, - {0xEE53,0xEE53,0x756F}, - {0xEE54,0xEE54,0x7682}, - {0xEE55,0xEE55,0x769C}, - {0xEE56,0xEE56,0x769E}, - {0xEE57,0xEE57,0x769B}, - {0xEE58,0xEE58,0x76A6}, - {0xEE59,0xEE59,0xFA17}, - {0xEE5A,0xEE5A,0x7746}, - {0xEE5B,0xEE5B,0x52AF}, - {0xEE5C,0xEE5C,0x7821}, - {0xEE5D,0xEE5D,0x784E}, - {0xEE5E,0xEE5E,0x7864}, - {0xEE5F,0xEE5F,0x787A}, - {0xEE60,0xEE60,0x7930}, /* EE60 */ - {0xEE61,0xEE61,0xFA18}, - {0xEE62,0xEE62,0xFA19}, - {0xEE63,0xEE63,0xFA1A}, - {0xEE64,0xEE64,0x7994}, - {0xEE65,0xEE65,0xFA1B}, - {0xEE66,0xEE66,0x799B}, - {0xEE67,0xEE67,0x7AD1}, - {0xEE68,0xEE68,0x7AE7}, - {0xEE69,0xEE69,0xFA1C}, - {0xEE6A,0xEE6A,0x7AEB}, - {0xEE6B,0xEE6B,0x7B9E}, - {0xEE6C,0xEE6C,0xFA1D}, - {0xEE6D,0xEE6D,0x7D48}, - {0xEE6E,0xEE6E,0x7D5C}, - {0xEE6F,0xEE6F,0x7DB7}, - {0xEE70,0xEE70,0x7DA0}, /* EE70 */ - {0xEE71,0xEE71,0x7DD6}, - {0xEE72,0xEE72,0x7E52}, - {0xEE73,0xEE73,0x7F47}, - {0xEE74,0xEE74,0x7FA1}, - {0xEE75,0xEE75,0xFA1E}, - {0xEE76,0xEE76,0x8301}, - {0xEE77,0xEE77,0x8362}, - {0xEE78,0xEE78,0x837F}, - {0xEE79,0xEE79,0x83C7}, - {0xEE7A,0xEE7A,0x83F6}, - {0xEE7B,0xEE7B,0x8448}, - {0xEE7C,0xEE7C,0x84B4}, - {0xEE7D,0xEE7D,0x8553}, - {0xEE7E,0xEE7E,0x8559}, - {0,0,0}, - {0xEE80,0xEE80,0x856B}, /* EE80 */ - {0xEE81,0xEE81,0xFA1F}, - {0xEE82,0xEE82,0x85B0}, - {0xEE83,0xEE83,0xFA20}, - {0xEE84,0xEE84,0xFA21}, - {0xEE85,0xEE85,0x8807}, - {0xEE86,0xEE86,0x88F5}, - {0xEE87,0xEE87,0x8A12}, - {0xEE88,0xEE88,0x8A37}, - {0xEE89,0xEE89,0x8A79}, - {0xEE8A,0xEE8A,0x8AA7}, - {0xEE8B,0xEE8B,0x8ABE}, - {0xEE8C,0xEE8C,0x8ADF}, - {0xEE8D,0xEE8D,0xFA22}, - {0xEE8E,0xEE8E,0x8AF6}, - {0xEE8F,0xEE8F,0x8B53}, - {0xEE90,0xEE90,0x8B7F}, /* EE90 */ - {0xEE91,0xEE91,0x8CF0}, - {0xEE92,0xEE92,0x8CF4}, - {0xEE93,0xEE93,0x8D12}, - {0xEE94,0xEE94,0x8D76}, - {0xEE95,0xEE95,0xFA23}, - {0xEE96,0xEE96,0x8ECF}, - {0xEE97,0xEE97,0xFA24}, - {0xEE98,0xEE98,0xFA25}, - {0xEE99,0xEE99,0x9067}, - {0xEE9A,0xEE9A,0x90DE}, - {0xEE9B,0xEE9B,0xFA26}, - {0xEE9C,0xEE9C,0x9115}, - {0xEE9D,0xEE9D,0x9127}, - {0xEE9E,0xEE9E,0x91DA}, - {0xEE9F,0xEE9F,0x91D7}, - {0xEEA0,0xEEA0,0x91DE}, /* EEA0 */ - {0xEEA1,0xEEA1,0x91ED}, - {0xEEA2,0xEEA2,0x91EE}, - {0xEEA3,0xEEA3,0x91E4}, - {0xEEA4,0xEEA4,0x91E5}, - {0xEEA5,0xEEA5,0x9206}, - {0xEEA6,0xEEA6,0x9210}, - {0xEEA7,0xEEA7,0x920A}, - {0xEEA8,0xEEA8,0x923A}, - {0xEEA9,0xEEA9,0x9240}, - {0xEEAA,0xEEAA,0x923C}, - {0xEEAB,0xEEAB,0x924E}, - {0xEEAC,0xEEAC,0x9259}, - {0xEEAD,0xEEAD,0x9251}, - {0xEEAE,0xEEAE,0x9239}, - {0xEEAF,0xEEAF,0x9267}, - {0xEEB0,0xEEB0,0x92A7}, /* EEB0 */ - {0xEEB1,0xEEB1,0x9277}, - {0xEEB2,0xEEB2,0x9278}, - {0xEEB3,0xEEB3,0x92E7}, - {0xEEB4,0xEEB4,0x92D7}, - {0xEEB5,0xEEB5,0x92D9}, - {0xEEB6,0xEEB6,0x92D0}, - {0xEEB7,0xEEB7,0xFA27}, - {0xEEB8,0xEEB8,0x92D5}, - {0xEEB9,0xEEB9,0x92E0}, - {0xEEBA,0xEEBA,0x92D3}, - {0xEEBB,0xEEBB,0x9325}, - {0xEEBC,0xEEBC,0x9321}, - {0xEEBD,0xEEBD,0x92FB}, - {0xEEBE,0xEEBE,0xFA28}, - {0xEEBF,0xEEBF,0x931E}, - {0xEEC0,0xEEC0,0x92FF}, /* EEC0 */ - {0xEEC1,0xEEC1,0x931D}, - {0xEEC2,0xEEC2,0x9302}, - {0xEEC3,0xEEC3,0x9370}, - {0xEEC4,0xEEC4,0x9357}, - {0xEEC5,0xEEC5,0x93A4}, - {0xEEC6,0xEEC6,0x93C6}, - {0xEEC7,0xEEC7,0x93DE}, - {0xEEC8,0xEEC8,0x93F8}, - {0xEEC9,0xEEC9,0x9431}, - {0xEECA,0xEECA,0x9445}, - {0xEECB,0xEECB,0x9448}, - {0xEECC,0xEECC,0x9592}, - {0xEECD,0xEECD,0xF9DC}, - {0xEECE,0xEECE,0xFA29}, - {0xEECF,0xEECF,0x969D}, - {0xEED0,0xEED0,0x96AF}, /* EED0 */ - {0xEED1,0xEED1,0x9733}, - {0xEED2,0xEED2,0x973B}, - {0xEED3,0xEED3,0x9743}, - {0xEED4,0xEED4,0x974D}, - {0xEED5,0xEED5,0x974F}, - {0xEED6,0xEED6,0x9751}, - {0xEED7,0xEED7,0x9755}, - {0xEED8,0xEED8,0x9857}, - {0xEED9,0xEED9,0x9865}, - {0xEEDA,0xEEDA,0xFA2A}, - {0xEEDB,0xEEDB,0xFA2B}, - {0xEEDC,0xEEDC,0x9927}, - {0xEEDD,0xEEDD,0xFA2C}, - {0xEEDE,0xEEDE,0x999E}, - {0xEEDF,0xEEDF,0x9A4E}, - {0xEEE0,0xEEE0,0x9AD9}, /* EEE0 */ - {0xEEE1,0xEEE1,0x9ADC}, - {0xEEE2,0xEEE2,0x9B75}, - {0xEEE3,0xEEE3,0x9B72}, - {0xEEE4,0xEEE4,0x9B8F}, - {0xEEE5,0xEEE5,0x9BB1}, - {0xEEE6,0xEEE6,0x9BBB}, - {0xEEE7,0xEEE7,0x9C00}, - {0xEEE8,0xEEE8,0x9D70}, - {0xEEE9,0xEEE9,0x9D6B}, - {0xEEEA,0xEEEA,0xFA2D}, - {0xEEEB,0xEEEB,0x9E19}, - {0xEEEC,0xEEEC,0x9ED1}, - {0xEEED,0xEEED,0x003F}, - {0xEEEE,0xEEEE,0x003F}, - {0x8754,0xEEEF,0x2170}, - {0x8755,0xEEF0,0x2171}, /* EEF0 */ - {0x8756,0xEEF1,0x2172}, - {0x8757,0xEEF2,0x2173}, - {0x8758,0xEEF3,0x2174}, - {0x8759,0xEEF4,0x2175}, - {0x875A,0xEEF5,0x2176}, - {0x875B,0xEEF6,0x2177}, - {0x875C,0xEEF7,0x2178}, - {0x875D,0xEEF8,0x2179}, - {0xEEF9,0xEEF9,0xFFE2}, - {0xEEFA,0xEEFA,0xFFE4}, - {0xEEFB,0xEEFB,0xFF07}, - {0xEEFC,0xEEFC,0xFF02}, - {0,0,0}, - {0,0,0}, - {0,0,0} -}; - - -static MY_UNICASE_INFO cFA[256]= -{ - /* FA00-FA0F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* FA10-FA1F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* FA20-FA2F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - /* FA30-FA3F */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - - {0xFA4A,0xFA40,0x2170}, /* FA40 */ - {0xFA4B,0xFA41,0x2171}, - {0xFA4C,0xFA42,0x2172}, - {0xFA4D,0xFA43,0x2173}, - {0xFA4E,0xFA44,0x2174}, - {0xFA4F,0xFA45,0x2175}, - {0xFA50,0xFA46,0x2176}, - {0xFA51,0xFA47,0x2177}, - {0xFA52,0xFA48,0x2178}, - {0xFA53,0xFA49,0x2179}, - {0xFA4A,0xFA40,0x2160}, - {0xFA4B,0xFA41,0x2161}, - {0xFA4C,0xFA42,0x2162}, - {0xFA4D,0xFA43,0x2163}, - {0xFA4E,0xFA44,0x2164}, - {0xFA4F,0xFA45,0x2165}, - {0xFA50,0xFA46,0x2166}, /* FA50 */ - {0xFA51,0xFA47,0x2167}, - {0xFA52,0xFA48,0x2168}, - {0xFA53,0xFA49,0x2169}, - {0xFA54,0xFA54,0xFFE2}, - {0xFA55,0xFA55,0xFFE4}, - {0xFA56,0xFA56,0xFF07}, - {0xFA57,0xFA57,0xFF02}, - {0xFA58,0xFA58,0x3231}, - {0xFA59,0xFA59,0x2116}, - {0xFA5A,0xFA5A,0x2121}, - {0xFA5B,0xFA5B,0x2235}, - {0xFA5C,0xFA5C,0x7E8A}, - {0xFA5D,0xFA5D,0x891C}, - {0xFA5E,0xFA5E,0x9348}, - {0xFA5F,0xFA5F,0x9288}, - {0xFA60,0xFA60,0x84DC}, /* FA60 */ - {0xFA61,0xFA61,0x4FC9}, - {0xFA62,0xFA62,0x70BB}, - {0xFA63,0xFA63,0x6631}, - {0xFA64,0xFA64,0x68C8}, - {0xFA65,0xFA65,0x92F9}, - {0xFA66,0xFA66,0x66FB}, - {0xFA67,0xFA67,0x5F45}, - {0xFA68,0xFA68,0x4E28}, - {0xFA69,0xFA69,0x4EE1}, - {0xFA6A,0xFA6A,0x4EFC}, - {0xFA6B,0xFA6B,0x4F00}, - {0xFA6C,0xFA6C,0x4F03}, - {0xFA6D,0xFA6D,0x4F39}, - {0xFA6E,0xFA6E,0x4F56}, - {0xFA6F,0xFA6F,0x4F92}, - {0xFA70,0xFA70,0x4F8A}, /* FA70 */ - {0xFA71,0xFA71,0x4F9A}, - {0xFA72,0xFA72,0x4F94}, - {0xFA73,0xFA73,0x4FCD}, - {0xFA74,0xFA74,0x5040}, - {0xFA75,0xFA75,0x5022}, - {0xFA76,0xFA76,0x4FFF}, - {0xFA77,0xFA77,0x501E}, - {0xFA78,0xFA78,0x5046}, - {0xFA79,0xFA79,0x5070}, - {0xFA7A,0xFA7A,0x5042}, - {0xFA7B,0xFA7B,0x5094}, - {0xFA7C,0xFA7C,0x50F4}, - {0xFA7D,0xFA7D,0x50D8}, - {0xFA7E,0xFA7E,0x514A}, - {0,0,0}, - {0xFA80,0xFA80,0x5164}, /* FA80 */ - {0xFA81,0xFA81,0x519D}, - {0xFA82,0xFA82,0x51BE}, - {0xFA83,0xFA83,0x51EC}, - {0xFA84,0xFA84,0x5215}, - {0xFA85,0xFA85,0x529C}, - {0xFA86,0xFA86,0x52A6}, - {0xFA87,0xFA87,0x52C0}, - {0xFA88,0xFA88,0x52DB}, - {0xFA89,0xFA89,0x5300}, - {0xFA8A,0xFA8A,0x5307}, - {0xFA8B,0xFA8B,0x5324}, - {0xFA8C,0xFA8C,0x5372}, - {0xFA8D,0xFA8D,0x5393}, - {0xFA8E,0xFA8E,0x53B2}, - {0xFA8F,0xFA8F,0x53DD}, - {0xFA90,0xFA90,0xFA0E}, /* FA90 */ - {0xFA91,0xFA91,0x549C}, - {0xFA92,0xFA92,0x548A}, - {0xFA93,0xFA93,0x54A9}, - {0xFA94,0xFA94,0x54FF}, - {0xFA95,0xFA95,0x5586}, - {0xFA96,0xFA96,0x5759}, - {0xFA97,0xFA97,0x5765}, - {0xFA98,0xFA98,0x57AC}, - {0xFA99,0xFA99,0x57C8}, - {0xFA9A,0xFA9A,0x57C7}, - {0xFA9B,0xFA9B,0xFA0F}, - {0xFA9C,0xFA9C,0xFA10}, - {0xFA9D,0xFA9D,0x589E}, - {0xFA9E,0xFA9E,0x58B2}, - {0xFA9F,0xFA9F,0x590B}, - {0xFAA0,0xFAA0,0x5953}, /* FAA0 */ - {0xFAA1,0xFAA1,0x595B}, - {0xFAA2,0xFAA2,0x595D}, - {0xFAA3,0xFAA3,0x5963}, - {0xFAA4,0xFAA4,0x59A4}, - {0xFAA5,0xFAA5,0x59BA}, - {0xFAA6,0xFAA6,0x5B56}, - {0xFAA7,0xFAA7,0x5BC0}, - {0xFAA8,0xFAA8,0x752F}, - {0xFAA9,0xFAA9,0x5BD8}, - {0xFAAA,0xFAAA,0x5BEC}, - {0xFAAB,0xFAAB,0x5C1E}, - {0xFAAC,0xFAAC,0x5CA6}, - {0xFAAD,0xFAAD,0x5CBA}, - {0xFAAE,0xFAAE,0x5CF5}, - {0xFAAF,0xFAAF,0x5D27}, - {0xFAB0,0xFAB0,0x5D53}, /* FAB0 */ - {0xFAB1,0xFAB1,0xFA11}, - {0xFAB2,0xFAB2,0x5D42}, - {0xFAB3,0xFAB3,0x5D6D}, - {0xFAB4,0xFAB4,0x5DB8}, - {0xFAB5,0xFAB5,0x5DB9}, - {0xFAB6,0xFAB6,0x5DD0}, - {0xFAB7,0xFAB7,0x5F21}, - {0xFAB8,0xFAB8,0x5F34}, - {0xFAB9,0xFAB9,0x5F67}, - {0xFABA,0xFABA,0x5FB7}, - {0xFABB,0xFABB,0x5FDE}, - {0xFABC,0xFABC,0x605D}, - {0xFABD,0xFABD,0x6085}, - {0xFABE,0xFABE,0x608A}, - {0xFABF,0xFABF,0x60DE}, - {0xFAC0,0xFAC0,0x60D5}, /* FAC0 */ - {0xFAC1,0xFAC1,0x6120}, - {0xFAC2,0xFAC2,0x60F2}, - {0xFAC3,0xFAC3,0x6111}, - {0xFAC4,0xFAC4,0x6137}, - {0xFAC5,0xFAC5,0x6130}, - {0xFAC6,0xFAC6,0x6198}, - {0xFAC7,0xFAC7,0x6213}, - {0xFAC8,0xFAC8,0x62A6}, - {0xFAC9,0xFAC9,0x63F5}, - {0xFACA,0xFACA,0x6460}, - {0xFACB,0xFACB,0x649D}, - {0xFACC,0xFACC,0x64CE}, - {0xFACD,0xFACD,0x654E}, - {0xFACE,0xFACE,0x6600}, - {0xFACF,0xFACF,0x6615}, - {0xFAD0,0xFAD0,0x663B}, /* FAD0 */ - {0xFAD1,0xFAD1,0x6609}, - {0xFAD2,0xFAD2,0x662E}, - {0xFAD3,0xFAD3,0x661E}, - {0xFAD4,0xFAD4,0x6624}, - {0xFAD5,0xFAD5,0x6665}, - {0xFAD6,0xFAD6,0x6657}, - {0xFAD7,0xFAD7,0x6659}, - {0xFAD8,0xFAD8,0xFA12}, - {0xFAD9,0xFAD9,0x6673}, - {0xFADA,0xFADA,0x6699}, - {0xFADB,0xFADB,0x66A0}, - {0xFADC,0xFADC,0x66B2}, - {0xFADD,0xFADD,0x66BF}, - {0xFADE,0xFADE,0x66FA}, - {0xFADF,0xFADF,0x670E}, - {0xFAE0,0xFAE0,0xF929}, /* FAE0 */ - {0xFAE1,0xFAE1,0x6766}, - {0xFAE2,0xFAE2,0x67BB}, - {0xFAE3,0xFAE3,0x6852}, - {0xFAE4,0xFAE4,0x67C0}, - {0xFAE5,0xFAE5,0x6801}, - {0xFAE6,0xFAE6,0x6844}, - {0xFAE7,0xFAE7,0x68CF}, - {0xFAE8,0xFAE8,0xFA13}, - {0xFAE9,0xFAE9,0x6968}, - {0xFAEA,0xFAEA,0xFA14}, - {0xFAEB,0xFAEB,0x6998}, - {0xFAEC,0xFAEC,0x69E2}, - {0xFAED,0xFAED,0x6A30}, - {0xFAEE,0xFAEE,0x6A6B}, - {0xFAEF,0xFAEF,0x6A46}, - {0xFAF0,0xFAF0,0x6A73}, /* FAF0 */ - {0xFAF1,0xFAF1,0x6A7E}, - {0xFAF2,0xFAF2,0x6AE2}, - {0xFAF3,0xFAF3,0x6AE4}, - {0xFAF4,0xFAF4,0x6BD6}, - {0xFAF5,0xFAF5,0x6C3F}, - {0xFAF6,0xFAF6,0x6C5C}, - {0xFAF7,0xFAF7,0x6C86}, - {0xFAF8,0xFAF8,0x6C6F}, - {0xFAF9,0xFAF9,0x6CDA}, - {0xFAFA,0xFAFA,0x6D04}, - {0xFAFB,0xFAFB,0x6D87}, - {0xFAFC,0xFAFC,0x6D6F}, - {0,0,0}, - {0,0,0}, - {0,0,0} -}; - - -static MY_UNICASE_INFO *my_caseinfo_cp932[256]= -{ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, c81, c82, c83, c84, NULL, NULL, c87, /* 8 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* A */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* C */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ - NULL, NULL, NULL, NULL, NULL, NULL, cEE, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* F */ - NULL, NULL, cFA, NULL, NULL, NULL, NULL, NULL -}; - - -static int my_strnncoll_cp932_internal(CHARSET_INFO *cs, - const uchar **a_res, size_t a_length, - const uchar **b_res, size_t b_length) -{ - const uchar *a= *a_res, *b= *b_res; - const uchar *a_end= a + a_length; - const uchar *b_end= b + b_length; - while (a < a_end && b < b_end) - { - if (ismbchar_cp932(cs,(char*) a, (char*) a_end) && - ismbchar_cp932(cs,(char*) b, (char*) b_end)) - { - uint a_char= cp932code(*a, *(a+1)); - uint b_char= cp932code(*b, *(b+1)); - if (a_char != b_char) - return a_char - b_char; - a += 2; - b += 2; - } else - { - if (sort_order_cp932[(uchar)*a] != sort_order_cp932[(uchar)*b]) - return sort_order_cp932[(uchar)*a] - sort_order_cp932[(uchar)*b]; - a++; - b++; - } - } - *a_res= a; - *b_res= b; - return 0; -} - - -static int my_strnncoll_cp932(CHARSET_INFO *cs __attribute__((unused)), - const uchar *a, size_t a_length, - const uchar *b, size_t b_length, - my_bool b_is_prefix) -{ - int res= my_strnncoll_cp932_internal(cs, &a, a_length, &b, b_length); - if (b_is_prefix && a_length > b_length) - a_length= b_length; - return res ? res : (int) (a_length - b_length); -} - - -static int my_strnncollsp_cp932(CHARSET_INFO *cs __attribute__((unused)), - const uchar *a, size_t a_length, - const uchar *b, size_t b_length, - my_bool diff_if_only_endspace_difference - __attribute__((unused))) -{ - const uchar *a_end= a + a_length; - const uchar *b_end= b + b_length; - int res= my_strnncoll_cp932_internal(cs, &a, a_length, &b, b_length); - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= 0; -#endif - - if (!res && (a != a_end || b != b_end)) - { - int swap= 1; - if (diff_if_only_endspace_difference) - res= 1; /* Assume 'a' is bigger */ - /* - Check the next not space character of the longer key. If it's < ' ', - then it's smaller than the other key. - */ - if (a == a_end) - { - /* put shorter key in a */ - a_end= b_end; - a= b; - swap= -1; /* swap sign of result */ - res= -res; - } - for (; a < a_end ; a++) - { - if (*a != (uchar) ' ') - return (*a < (uchar) ' ') ? -swap : swap; - } - } - return res; -} - - - -static size_t my_strnxfrm_cp932(CHARSET_INFO *cs __attribute__((unused)), - uchar *dest, size_t len, - const uchar *src, size_t srclen) -{ - uchar *d_end = dest + len; - uchar *s_end = (uchar*) src + srclen; - while (dest < d_end && src < s_end) - { - if (ismbchar_cp932(cs,(char*) src, (char*) s_end)) - { - *dest++ = *src++; - if (dest < d_end && src < s_end) - *dest++ = *src++; - } - else - *dest++ = sort_order_cp932[(uchar)*src++]; - } - if (len > srclen) - bfill(dest, len - srclen, ' '); - return len; -} - - -static uint16 cp932_to_unicode[65536]= -{ - 0x0000, 0x0001, 0x0002, 0x0003, /* 0000 */ - 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000A, 0x000B, - 0x000C, 0x000D, 0x000E, 0x000F, - 0x0010, 0x0011, 0x0012, 0x0013, - 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001A, 0x001B, - 0x001C, 0x001D, 0x001E, 0x001F, - 0x0020, 0x0021, 0x0022, 0x0023, /* 0020 */ - 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002A, 0x002B, - 0x002C, 0x002D, 0x002E, 0x002F, - 0x0030, 0x0031, 0x0032, 0x0033, - 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003A, 0x003B, - 0x003C, 0x003D, 0x003E, 0x003F, - 0x0040, 0x0041, 0x0042, 0x0043, /* 0040 */ - 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, - 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, - 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 0x005B, - 0x005C, 0x005D, 0x005E, 0x005F, - 0x0060, 0x0061, 0x0062, 0x0063, /* 0060 */ - 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006A, 0x006B, - 0x006C, 0x006D, 0x006E, 0x006F, - 0x0070, 0x0071, 0x0072, 0x0073, - 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007A, 0x007B, - 0x007C, 0x007D, 0x007E, 0x007F, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xFF61, 0xFF62, 0xFF63, /* 00A0 */ - 0xFF64, 0xFF65, 0xFF66, 0xFF67, - 0xFF68, 0xFF69, 0xFF6A, 0xFF6B, - 0xFF6C, 0xFF6D, 0xFF6E, 0xFF6F, - 0xFF70, 0xFF71, 0xFF72, 0xFF73, - 0xFF74, 0xFF75, 0xFF76, 0xFF77, - 0xFF78, 0xFF79, 0xFF7A, 0xFF7B, - 0xFF7C, 0xFF7D, 0xFF7E, 0xFF7F, - 0xFF80, 0xFF81, 0xFF82, 0xFF83, /* 00C0 */ - 0xFF84, 0xFF85, 0xFF86, 0xFF87, - 0xFF88, 0xFF89, 0xFF8A, 0xFF8B, - 0xFF8C, 0xFF8D, 0xFF8E, 0xFF8F, - 0xFF90, 0xFF91, 0xFF92, 0xFF93, - 0xFF94, 0xFF95, 0xFF96, 0xFF97, - 0xFF98, 0xFF99, 0xFF9A, 0xFF9B, - 0xFF9C, 0xFF9D, 0xFF9E, 0xFF9F, - 0x0000, 0x0000, 0x0000, 0x0000, /* 00E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 01A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 01C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 01E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 02A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 02C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 02E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 03A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 03C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 03E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 04A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 04C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 04E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 05A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 05C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 05E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 06A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 06C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 06E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 07A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 07C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 07E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 08A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 08C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 08E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 09A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 09C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 09E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0A40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0A60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0AE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0B40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0B60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0BC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0CC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0CE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0D60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0D80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0DE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0E40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0E60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0EA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0EC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0F40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0F60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0F80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0FC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0FE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 10A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 10C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 10E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 11A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 11C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 11E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 12A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 12C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 12E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 13A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 13C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 13E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 14A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 14C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 14E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 15A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 15C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 15E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 16A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 16C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 16E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 17A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 17C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 17E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 18A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 18C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 18E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 19A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 19C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 19E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1A40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1A60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1AE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1B40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1B60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1BC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1CC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1CE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1D60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1D80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1DE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1E40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1E60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1EA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1EC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1F40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1F60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1F80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1FC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1FE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 20A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 20C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 20E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 21A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 21C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 21E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 22A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 22C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 22E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 23A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 23C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 23E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 24A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 24C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 24E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 25A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 25C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 25E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 26A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 26C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 26E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 27A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 27C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 27E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 28A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 28C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 28E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 29A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 29C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 29E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2A40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2A60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2AE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2B40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2B60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2BC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2CC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2CE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2D60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2D80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2DE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2E40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2E60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2EA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2EC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2F40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2F60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2F80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2FC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2FE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 30A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 30C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 30E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 31A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 31C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 31E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 32A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 32C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 32E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 33A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 33C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 33E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 34A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 34C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 34E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 35A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 35C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 35E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 36A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 36C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 36E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 37A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 37C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 37E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 38A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 38C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 38E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 39A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 39C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 39E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3A40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3A60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3AE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3B40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3B60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3BC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3CC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3CE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3D60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3D80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3DE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3E40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3E60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3EA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3EC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3F40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3F60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3F80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3FC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3FE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 40A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 40C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 40E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 41A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 41C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 41E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 42A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 42C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 42E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 43A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 43C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 43E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 44A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 44C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 44E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 45A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 45C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 45E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 46A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 46C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 46E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 47A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 47C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 47E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 48A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 48C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 48E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 49A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 49C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 49E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4A40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4A60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4AE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4B40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4B60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4BC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4CC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4CE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4D60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4D80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4DE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4E40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4E60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4EA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4EC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4F40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4F60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4F80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4FC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4FE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 50A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 50C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 50E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 51A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 51C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 51E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 52A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 52C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 52E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 53A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 53C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 53E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 54A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 54C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 54E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 55A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 55C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 55E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 56A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 56C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 56E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 57A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 57C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 57E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 58A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 58C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 58E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 59A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 59C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 59E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5A40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5A60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5AE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5B40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5B60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5BC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5CC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5CE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5D60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5D80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5DE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5E40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5E60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5EA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5EC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5F40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5F60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5F80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5FC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5FE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 60A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 60C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 60E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 61A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 61C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 61E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 62A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 62C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 62E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 63A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 63C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 63E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 64A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 64C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 64E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 65A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 65C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 65E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 66A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 66C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 66E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 67A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 67C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 67E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 68A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 68C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 68E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 69A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 69C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 69E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6A40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6A60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6AE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6B40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6B60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6BC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6CC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6CE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6D60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6D80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6DE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6E40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6E60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6EA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6EC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6F40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6F60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6F80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6FC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6FE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 70A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 70C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 70E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 71A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 71C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 71E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 72A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 72C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 72E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 73A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 73C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 73E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 74A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 74C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 74E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 75A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 75C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 75E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 76A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 76C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 76E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 77A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 77C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 77E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 78A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 78C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 78E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 79A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 79C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 79E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7A40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7A60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7AE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7B40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7B60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7BC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7CC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7CE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7D60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7D80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7DE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7E40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7E60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7EA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7EC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7F40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7F60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7F80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7FC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7FE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 80A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 80C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 80E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x3000, 0x3001, 0x3002, 0xFF0C, /* 8140 */ - 0xFF0E, 0x30FB, 0xFF1A, 0xFF1B, - 0xFF1F, 0xFF01, 0x309B, 0x309C, - 0x00B4, 0xFF40, 0x00A8, 0xFF3E, - 0xFFE3, 0xFF3F, 0x30FD, 0x30FE, - 0x309D, 0x309E, 0x3003, 0x4EDD, - 0x3005, 0x3006, 0x3007, 0x30FC, - 0x2015, 0x2010, 0xFF0F, 0xFF3C, - 0xFF5E, 0x2225, 0xFF5C, 0x2026, /* 8160 */ - 0x2025, 0x2018, 0x2019, 0x201C, - 0x201D, 0xFF08, 0xFF09, 0x3014, - 0x3015, 0xFF3B, 0xFF3D, 0xFF5B, - 0xFF5D, 0x3008, 0x3009, 0x300A, - 0x300B, 0x300C, 0x300D, 0x300E, - 0x300F, 0x3010, 0x3011, 0xFF0B, - 0xFF0D, 0x00B1, 0x00D7, 0x0000, - 0x00F7, 0xFF1D, 0x2260, 0xFF1C, /* 8180 */ - 0xFF1E, 0x2266, 0x2267, 0x221E, - 0x2234, 0x2642, 0x2640, 0x00B0, - 0x2032, 0x2033, 0x2103, 0xFFE5, - 0xFF04, 0xFFE0, 0xFFE1, 0xFF05, - 0xFF03, 0xFF06, 0xFF0A, 0xFF20, - 0x00A7, 0x2606, 0x2605, 0x25CB, - 0x25CF, 0x25CE, 0x25C7, 0x25C6, - 0x25A1, 0x25A0, 0x25B3, 0x25B2, /* 81A0 */ - 0x25BD, 0x25BC, 0x203B, 0x3012, - 0x2192, 0x2190, 0x2191, 0x2193, - 0x3013, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x2208, 0x220B, 0x2286, 0x2287, - 0x2282, 0x2283, 0x222A, 0x2229, - 0x0000, 0x0000, 0x0000, 0x0000, /* 81C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x2227, 0x2228, 0xFFE2, 0x21D2, - 0x21D4, 0x2200, 0x2203, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2220, 0x22A5, - 0x2312, 0x2202, 0x2207, 0x2261, - 0x2252, 0x226A, 0x226B, 0x221A, /* 81E0 */ - 0x223D, 0x221D, 0x2235, 0x222B, - 0x222C, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x212B, 0x2030, 0x266F, 0x266D, - 0x266A, 0x2020, 0x2021, 0x00B6, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x25EF, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xFF10, - 0xFF11, 0xFF12, 0xFF13, 0xFF14, - 0xFF15, 0xFF16, 0xFF17, 0xFF18, - 0xFF19, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0xFF21, 0xFF22, 0xFF23, 0xFF24, /* 8260 */ - 0xFF25, 0xFF26, 0xFF27, 0xFF28, - 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, - 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30, - 0xFF31, 0xFF32, 0xFF33, 0xFF34, - 0xFF35, 0xFF36, 0xFF37, 0xFF38, - 0xFF39, 0xFF3A, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xFF41, 0xFF42, 0xFF43, /* 8280 */ - 0xFF44, 0xFF45, 0xFF46, 0xFF47, - 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, - 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, - 0xFF50, 0xFF51, 0xFF52, 0xFF53, - 0xFF54, 0xFF55, 0xFF56, 0xFF57, - 0xFF58, 0xFF59, 0xFF5A, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3041, - 0x3042, 0x3043, 0x3044, 0x3045, /* 82A0 */ - 0x3046, 0x3047, 0x3048, 0x3049, - 0x304A, 0x304B, 0x304C, 0x304D, - 0x304E, 0x304F, 0x3050, 0x3051, - 0x3052, 0x3053, 0x3054, 0x3055, - 0x3056, 0x3057, 0x3058, 0x3059, - 0x305A, 0x305B, 0x305C, 0x305D, - 0x305E, 0x305F, 0x3060, 0x3061, - 0x3062, 0x3063, 0x3064, 0x3065, /* 82C0 */ - 0x3066, 0x3067, 0x3068, 0x3069, - 0x306A, 0x306B, 0x306C, 0x306D, - 0x306E, 0x306F, 0x3070, 0x3071, - 0x3072, 0x3073, 0x3074, 0x3075, - 0x3076, 0x3077, 0x3078, 0x3079, - 0x307A, 0x307B, 0x307C, 0x307D, - 0x307E, 0x307F, 0x3080, 0x3081, - 0x3082, 0x3083, 0x3084, 0x3085, /* 82E0 */ - 0x3086, 0x3087, 0x3088, 0x3089, - 0x308A, 0x308B, 0x308C, 0x308D, - 0x308E, 0x308F, 0x3090, 0x3091, - 0x3092, 0x3093, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x30A1, 0x30A2, 0x30A3, 0x30A4, /* 8340 */ - 0x30A5, 0x30A6, 0x30A7, 0x30A8, - 0x30A9, 0x30AA, 0x30AB, 0x30AC, - 0x30AD, 0x30AE, 0x30AF, 0x30B0, - 0x30B1, 0x30B2, 0x30B3, 0x30B4, - 0x30B5, 0x30B6, 0x30B7, 0x30B8, - 0x30B9, 0x30BA, 0x30BB, 0x30BC, - 0x30BD, 0x30BE, 0x30BF, 0x30C0, - 0x30C1, 0x30C2, 0x30C3, 0x30C4, /* 8360 */ - 0x30C5, 0x30C6, 0x30C7, 0x30C8, - 0x30C9, 0x30CA, 0x30CB, 0x30CC, - 0x30CD, 0x30CE, 0x30CF, 0x30D0, - 0x30D1, 0x30D2, 0x30D3, 0x30D4, - 0x30D5, 0x30D6, 0x30D7, 0x30D8, - 0x30D9, 0x30DA, 0x30DB, 0x30DC, - 0x30DD, 0x30DE, 0x30DF, 0x0000, - 0x30E0, 0x30E1, 0x30E2, 0x30E3, /* 8380 */ - 0x30E4, 0x30E5, 0x30E6, 0x30E7, - 0x30E8, 0x30E9, 0x30EA, 0x30EB, - 0x30EC, 0x30ED, 0x30EE, 0x30EF, - 0x30F0, 0x30F1, 0x30F2, 0x30F3, - 0x30F4, 0x30F5, 0x30F6, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0391, - 0x0392, 0x0393, 0x0394, 0x0395, /* 83A0 */ - 0x0396, 0x0397, 0x0398, 0x0399, - 0x039A, 0x039B, 0x039C, 0x039D, - 0x039E, 0x039F, 0x03A0, 0x03A1, - 0x03A3, 0x03A4, 0x03A5, 0x03A6, - 0x03A7, 0x03A8, 0x03A9, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x03B1, - 0x03B2, 0x03B3, 0x03B4, 0x03B5, /* 83C0 */ - 0x03B6, 0x03B7, 0x03B8, 0x03B9, - 0x03BA, 0x03BB, 0x03BC, 0x03BD, - 0x03BE, 0x03BF, 0x03C0, 0x03C1, - 0x03C3, 0x03C4, 0x03C5, 0x03C6, - 0x03C7, 0x03C8, 0x03C9, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 83E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0410, 0x0411, 0x0412, 0x0413, /* 8440 */ - 0x0414, 0x0415, 0x0401, 0x0416, - 0x0417, 0x0418, 0x0419, 0x041A, - 0x041B, 0x041C, 0x041D, 0x041E, - 0x041F, 0x0420, 0x0421, 0x0422, - 0x0423, 0x0424, 0x0425, 0x0426, - 0x0427, 0x0428, 0x0429, 0x042A, - 0x042B, 0x042C, 0x042D, 0x042E, - 0x042F, 0x0000, 0x0000, 0x0000, /* 8460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0430, 0x0431, 0x0432, 0x0433, - 0x0434, 0x0435, 0x0451, 0x0436, - 0x0437, 0x0438, 0x0439, 0x043A, - 0x043B, 0x043C, 0x043D, 0x0000, - 0x043E, 0x043F, 0x0440, 0x0441, /* 8480 */ - 0x0442, 0x0443, 0x0444, 0x0445, - 0x0446, 0x0447, 0x0448, 0x0449, - 0x044A, 0x044B, 0x044C, 0x044D, - 0x044E, 0x044F, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2500, - 0x2502, 0x250C, 0x2510, 0x2518, /* 84A0 */ - 0x2514, 0x251C, 0x252C, 0x2524, - 0x2534, 0x253C, 0x2501, 0x2503, - 0x250F, 0x2513, 0x251B, 0x2517, - 0x2523, 0x2533, 0x252B, 0x253B, - 0x254B, 0x2520, 0x252F, 0x2528, - 0x2537, 0x253F, 0x251D, 0x2530, - 0x2525, 0x2538, 0x2542, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 84C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 84E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 85A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 85C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 85E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 86A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 86C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 86E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x2460, 0x2461, 0x2462, 0x2463, /* 8740 */ - 0x2464, 0x2465, 0x2466, 0x2467, - 0x2468, 0x2469, 0x246A, 0x246B, - 0x246C, 0x246D, 0x246E, 0x246F, - 0x2470, 0x2471, 0x2472, 0x2473, - 0x2160, 0x2161, 0x2162, 0x2163, - 0x2164, 0x2165, 0x2166, 0x2167, - 0x2168, 0x2169, 0x0000, 0x3349, - 0x3314, 0x3322, 0x334D, 0x3318, /* 8760 */ - 0x3327, 0x3303, 0x3336, 0x3351, - 0x3357, 0x330D, 0x3326, 0x3323, - 0x332B, 0x334A, 0x333B, 0x339C, - 0x339D, 0x339E, 0x338E, 0x338F, - 0x33C4, 0x33A1, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x337B, 0x0000, - 0x301D, 0x301F, 0x2116, 0x33CD, /* 8780 */ - 0x2121, 0x32A4, 0x32A5, 0x32A6, - 0x32A7, 0x32A8, 0x3231, 0x3232, - 0x3239, 0x337E, 0x337D, 0x337C, - 0x2252, 0x2261, 0x222B, 0x222E, - 0x2211, 0x221A, 0x22A5, 0x2220, - 0x221F, 0x22BF, 0x2235, 0x2229, - 0x222A, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 87A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 87C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 87E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4E9C, - 0x5516, 0x5A03, 0x963F, 0x54C0, /* 88A0 */ - 0x611B, 0x6328, 0x59F6, 0x9022, - 0x8475, 0x831C, 0x7A50, 0x60AA, - 0x63E1, 0x6E25, 0x65ED, 0x8466, - 0x82A6, 0x9BF5, 0x6893, 0x5727, - 0x65A1, 0x6271, 0x5B9B, 0x59D0, - 0x867B, 0x98F4, 0x7D62, 0x7DBE, - 0x9B8E, 0x6216, 0x7C9F, 0x88B7, - 0x5B89, 0x5EB5, 0x6309, 0x6697, /* 88C0 */ - 0x6848, 0x95C7, 0x978D, 0x674F, - 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, - 0x5049, 0x56F2, 0x5937, 0x59D4, - 0x5A01, 0x5C09, 0x60DF, 0x610F, - 0x6170, 0x6613, 0x6905, 0x70BA, - 0x754F, 0x7570, 0x79FB, 0x7DAD, - 0x7DEF, 0x80C3, 0x840E, 0x8863, - 0x8B02, 0x9055, 0x907A, 0x533B, /* 88E0 */ - 0x4E95, 0x4EA5, 0x57DF, 0x80B2, - 0x90C1, 0x78EF, 0x4E00, 0x58F1, - 0x6EA2, 0x9038, 0x7A32, 0x8328, - 0x828B, 0x9C2F, 0x5141, 0x5370, - 0x54BD, 0x54E1, 0x56E0, 0x59FB, - 0x5F15, 0x98F2, 0x6DEB, 0x80E4, - 0x852D, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x9662, 0x9670, 0x96A0, 0x97FB, /* 8940 */ - 0x540B, 0x53F3, 0x5B87, 0x70CF, - 0x7FBD, 0x8FC2, 0x96E8, 0x536F, - 0x9D5C, 0x7ABA, 0x4E11, 0x7893, - 0x81FC, 0x6E26, 0x5618, 0x5504, - 0x6B1D, 0x851A, 0x9C3B, 0x59E5, - 0x53A9, 0x6D66, 0x74DC, 0x958F, - 0x5642, 0x4E91, 0x904B, 0x96F2, - 0x834F, 0x990C, 0x53E1, 0x55B6, /* 8960 */ - 0x5B30, 0x5F71, 0x6620, 0x66F3, - 0x6804, 0x6C38, 0x6CF3, 0x6D29, - 0x745B, 0x76C8, 0x7A4E, 0x9834, - 0x82F1, 0x885B, 0x8A60, 0x92ED, - 0x6DB2, 0x75AB, 0x76CA, 0x99C5, - 0x60A6, 0x8B01, 0x8D8A, 0x95B2, - 0x698E, 0x53AD, 0x5186, 0x0000, - 0x5712, 0x5830, 0x5944, 0x5BB4, /* 8980 */ - 0x5EF6, 0x6028, 0x63A9, 0x63F4, - 0x6CBF, 0x6F14, 0x708E, 0x7114, - 0x7159, 0x71D5, 0x733F, 0x7E01, - 0x8276, 0x82D1, 0x8597, 0x9060, - 0x925B, 0x9D1B, 0x5869, 0x65BC, - 0x6C5A, 0x7525, 0x51F9, 0x592E, - 0x5965, 0x5F80, 0x5FDC, 0x62BC, - 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, /* 89A0 */ - 0x738B, 0x7FC1, 0x8956, 0x9D2C, - 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, - 0x837B, 0x5104, 0x5C4B, 0x61B6, - 0x81C6, 0x6876, 0x7261, 0x4E59, - 0x4FFA, 0x5378, 0x6069, 0x6E29, - 0x7A4F, 0x97F3, 0x4E0B, 0x5316, - 0x4EEE, 0x4F55, 0x4F3D, 0x4FA1, - 0x4F73, 0x52A0, 0x53EF, 0x5609, /* 89C0 */ - 0x590F, 0x5AC1, 0x5BB6, 0x5BE1, - 0x79D1, 0x6687, 0x679C, 0x67B6, - 0x6B4C, 0x6CB3, 0x706B, 0x73C2, - 0x798D, 0x79BE, 0x7A3C, 0x7B87, - 0x82B1, 0x82DB, 0x8304, 0x8377, - 0x83EF, 0x83D3, 0x8766, 0x8AB2, - 0x5629, 0x8CA8, 0x8FE6, 0x904E, - 0x971E, 0x868A, 0x4FC4, 0x5CE8, /* 89E0 */ - 0x6211, 0x7259, 0x753B, 0x81E5, - 0x82BD, 0x86FE, 0x8CC0, 0x96C5, - 0x9913, 0x99D5, 0x4ECB, 0x4F1A, - 0x89E3, 0x56DE, 0x584A, 0x58CA, - 0x5EFB, 0x5FEB, 0x602A, 0x6094, - 0x6062, 0x61D0, 0x6212, 0x62D0, - 0x6539, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x9B41, 0x6666, 0x68B0, 0x6D77, /* 8A40 */ - 0x7070, 0x754C, 0x7686, 0x7D75, - 0x82A5, 0x87F9, 0x958B, 0x968E, - 0x8C9D, 0x51F1, 0x52BE, 0x5916, - 0x54B3, 0x5BB3, 0x5D16, 0x6168, - 0x6982, 0x6DAF, 0x788D, 0x84CB, - 0x8857, 0x8A72, 0x93A7, 0x9AB8, - 0x6D6C, 0x99A8, 0x86D9, 0x57A3, - 0x67FF, 0x86CE, 0x920E, 0x5283, /* 8A60 */ - 0x5687, 0x5404, 0x5ED3, 0x62E1, - 0x64B9, 0x683C, 0x6838, 0x6BBB, - 0x7372, 0x78BA, 0x7A6B, 0x899A, - 0x89D2, 0x8D6B, 0x8F03, 0x90ED, - 0x95A3, 0x9694, 0x9769, 0x5B66, - 0x5CB3, 0x697D, 0x984D, 0x984E, - 0x639B, 0x7B20, 0x6A2B, 0x0000, - 0x6A7F, 0x68B6, 0x9C0D, 0x6F5F, /* 8A80 */ - 0x5272, 0x559D, 0x6070, 0x62EC, - 0x6D3B, 0x6E07, 0x6ED1, 0x845B, - 0x8910, 0x8F44, 0x4E14, 0x9C39, - 0x53F6, 0x691B, 0x6A3A, 0x9784, - 0x682A, 0x515C, 0x7AC3, 0x84B2, - 0x91DC, 0x938C, 0x565B, 0x9D28, - 0x6822, 0x8305, 0x8431, 0x7CA5, - 0x5208, 0x82C5, 0x74E6, 0x4E7E, /* 8AA0 */ - 0x4F83, 0x51A0, 0x5BD2, 0x520A, - 0x52D8, 0x52E7, 0x5DFB, 0x559A, - 0x582A, 0x59E6, 0x5B8C, 0x5B98, - 0x5BDB, 0x5E72, 0x5E79, 0x60A3, - 0x611F, 0x6163, 0x61BE, 0x63DB, - 0x6562, 0x67D1, 0x6853, 0x68FA, - 0x6B3E, 0x6B53, 0x6C57, 0x6F22, - 0x6F97, 0x6F45, 0x74B0, 0x7518, /* 8AC0 */ - 0x76E3, 0x770B, 0x7AFF, 0x7BA1, - 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, - 0x809D, 0x8266, 0x839E, 0x89B3, - 0x8ACC, 0x8CAB, 0x9084, 0x9451, - 0x9593, 0x9591, 0x95A2, 0x9665, - 0x97D3, 0x9928, 0x8218, 0x4E38, - 0x542B, 0x5CB8, 0x5DCC, 0x73A9, - 0x764C, 0x773C, 0x5CA9, 0x7FEB, /* 8AE0 */ - 0x8D0B, 0x96C1, 0x9811, 0x9854, - 0x9858, 0x4F01, 0x4F0E, 0x5371, - 0x559C, 0x5668, 0x57FA, 0x5947, - 0x5B09, 0x5BC4, 0x5C90, 0x5E0C, - 0x5E7E, 0x5FCC, 0x63EE, 0x673A, - 0x65D7, 0x65E2, 0x671F, 0x68CB, - 0x68C4, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x6A5F, 0x5E30, 0x6BC5, 0x6C17, /* 8B40 */ - 0x6C7D, 0x757F, 0x7948, 0x5B63, - 0x7A00, 0x7D00, 0x5FBD, 0x898F, - 0x8A18, 0x8CB4, 0x8D77, 0x8ECC, - 0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, - 0x4E80, 0x507D, 0x5100, 0x5993, - 0x5B9C, 0x622F, 0x6280, 0x64EC, - 0x6B3A, 0x72A0, 0x7591, 0x7947, - 0x7FA9, 0x87FB, 0x8ABC, 0x8B70, /* 8B60 */ - 0x63AC, 0x83CA, 0x97A0, 0x5409, - 0x5403, 0x55AB, 0x6854, 0x6A58, - 0x8A70, 0x7827, 0x6775, 0x9ECD, - 0x5374, 0x5BA2, 0x811A, 0x8650, - 0x9006, 0x4E18, 0x4E45, 0x4EC7, - 0x4F11, 0x53CA, 0x5438, 0x5BAE, - 0x5F13, 0x6025, 0x6551, 0x0000, - 0x673D, 0x6C42, 0x6C72, 0x6CE3, /* 8B80 */ - 0x7078, 0x7403, 0x7A76, 0x7AAE, - 0x7B08, 0x7D1A, 0x7CFE, 0x7D66, - 0x65E7, 0x725B, 0x53BB, 0x5C45, - 0x5DE8, 0x62D2, 0x62E0, 0x6319, - 0x6E20, 0x865A, 0x8A31, 0x8DDD, - 0x92F8, 0x6F01, 0x79A6, 0x9B5A, - 0x4EA8, 0x4EAB, 0x4EAC, 0x4F9B, - 0x4FA0, 0x50D1, 0x5147, 0x7AF6, /* 8BA0 */ - 0x5171, 0x51F6, 0x5354, 0x5321, - 0x537F, 0x53EB, 0x55AC, 0x5883, - 0x5CE1, 0x5F37, 0x5F4A, 0x602F, - 0x6050, 0x606D, 0x631F, 0x6559, - 0x6A4B, 0x6CC1, 0x72C2, 0x72ED, - 0x77EF, 0x80F8, 0x8105, 0x8208, - 0x854E, 0x90F7, 0x93E1, 0x97FF, - 0x9957, 0x9A5A, 0x4EF0, 0x51DD, /* 8BC0 */ - 0x5C2D, 0x6681, 0x696D, 0x5C40, - 0x66F2, 0x6975, 0x7389, 0x6850, - 0x7C81, 0x50C5, 0x52E4, 0x5747, - 0x5DFE, 0x9326, 0x65A4, 0x6B23, - 0x6B3D, 0x7434, 0x7981, 0x79BD, - 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, - 0x887F, 0x895F, 0x8B39, 0x8FD1, - 0x91D1, 0x541F, 0x9280, 0x4E5D, /* 8BE0 */ - 0x5036, 0x53E5, 0x533A, 0x72D7, - 0x7396, 0x77E9, 0x82E6, 0x8EAF, - 0x99C6, 0x99C8, 0x99D2, 0x5177, - 0x611A, 0x865E, 0x55B0, 0x7A7A, - 0x5076, 0x5BD3, 0x9047, 0x9685, - 0x4E32, 0x6ADB, 0x91E7, 0x5C51, - 0x5C48, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x6398, 0x7A9F, 0x6C93, 0x9774, /* 8C40 */ - 0x8F61, 0x7AAA, 0x718A, 0x9688, - 0x7C82, 0x6817, 0x7E70, 0x6851, - 0x936C, 0x52F2, 0x541B, 0x85AB, - 0x8A13, 0x7FA4, 0x8ECD, 0x90E1, - 0x5366, 0x8888, 0x7941, 0x4FC2, - 0x50BE, 0x5211, 0x5144, 0x5553, - 0x572D, 0x73EA, 0x578B, 0x5951, - 0x5F62, 0x5F84, 0x6075, 0x6176, /* 8C60 */ - 0x6167, 0x61A9, 0x63B2, 0x643A, - 0x656C, 0x666F, 0x6842, 0x6E13, - 0x7566, 0x7A3D, 0x7CFB, 0x7D4C, - 0x7D99, 0x7E4B, 0x7F6B, 0x830E, - 0x834A, 0x86CD, 0x8A08, 0x8A63, - 0x8B66, 0x8EFD, 0x981A, 0x9D8F, - 0x82B8, 0x8FCE, 0x9BE8, 0x0000, - 0x5287, 0x621F, 0x6483, 0x6FC0, /* 8C80 */ - 0x9699, 0x6841, 0x5091, 0x6B20, - 0x6C7A, 0x6F54, 0x7A74, 0x7D50, - 0x8840, 0x8A23, 0x6708, 0x4EF6, - 0x5039, 0x5026, 0x5065, 0x517C, - 0x5238, 0x5263, 0x55A7, 0x570F, - 0x5805, 0x5ACC, 0x5EFA, 0x61B2, - 0x61F8, 0x62F3, 0x6372, 0x691C, - 0x6A29, 0x727D, 0x72AC, 0x732E, /* 8CA0 */ - 0x7814, 0x786F, 0x7D79, 0x770C, - 0x80A9, 0x898B, 0x8B19, 0x8CE2, - 0x8ED2, 0x9063, 0x9375, 0x967A, - 0x9855, 0x9A13, 0x9E78, 0x5143, - 0x539F, 0x53B3, 0x5E7B, 0x5F26, - 0x6E1B, 0x6E90, 0x7384, 0x73FE, - 0x7D43, 0x8237, 0x8A00, 0x8AFA, - 0x9650, 0x4E4E, 0x500B, 0x53E4, /* 8CC0 */ - 0x547C, 0x56FA, 0x59D1, 0x5B64, - 0x5DF1, 0x5EAB, 0x5F27, 0x6238, - 0x6545, 0x67AF, 0x6E56, 0x72D0, - 0x7CCA, 0x88B4, 0x80A1, 0x80E1, - 0x83F0, 0x864E, 0x8A87, 0x8DE8, - 0x9237, 0x96C7, 0x9867, 0x9F13, - 0x4E94, 0x4E92, 0x4F0D, 0x5348, - 0x5449, 0x543E, 0x5A2F, 0x5F8C, /* 8CE0 */ - 0x5FA1, 0x609F, 0x68A7, 0x6A8E, - 0x745A, 0x7881, 0x8A9E, 0x8AA4, - 0x8B77, 0x9190, 0x4E5E, 0x9BC9, - 0x4EA4, 0x4F7C, 0x4FAF, 0x5019, - 0x5016, 0x5149, 0x516C, 0x529F, - 0x52B9, 0x52FE, 0x539A, 0x53E3, - 0x5411, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x540E, 0x5589, 0x5751, 0x57A2, /* 8D40 */ - 0x597D, 0x5B54, 0x5B5D, 0x5B8F, - 0x5DE5, 0x5DE7, 0x5DF7, 0x5E78, - 0x5E83, 0x5E9A, 0x5EB7, 0x5F18, - 0x6052, 0x614C, 0x6297, 0x62D8, - 0x63A7, 0x653B, 0x6602, 0x6643, - 0x66F4, 0x676D, 0x6821, 0x6897, - 0x69CB, 0x6C5F, 0x6D2A, 0x6D69, - 0x6E2F, 0x6E9D, 0x7532, 0x7687, /* 8D60 */ - 0x786C, 0x7A3F, 0x7CE0, 0x7D05, - 0x7D18, 0x7D5E, 0x7DB1, 0x8015, - 0x8003, 0x80AF, 0x80B1, 0x8154, - 0x818F, 0x822A, 0x8352, 0x884C, - 0x8861, 0x8B1B, 0x8CA2, 0x8CFC, - 0x90CA, 0x9175, 0x9271, 0x783F, - 0x92FC, 0x95A4, 0x964D, 0x0000, - 0x9805, 0x9999, 0x9AD8, 0x9D3B, /* 8D80 */ - 0x525B, 0x52AB, 0x53F7, 0x5408, - 0x58D5, 0x62F7, 0x6FE0, 0x8C6A, - 0x8F5F, 0x9EB9, 0x514B, 0x523B, - 0x544A, 0x56FD, 0x7A40, 0x9177, - 0x9D60, 0x9ED2, 0x7344, 0x6F09, - 0x8170, 0x7511, 0x5FFD, 0x60DA, - 0x9AA8, 0x72DB, 0x8FBC, 0x6B64, - 0x9803, 0x4ECA, 0x56F0, 0x5764, /* 8DA0 */ - 0x58BE, 0x5A5A, 0x6068, 0x61C7, - 0x660F, 0x6606, 0x6839, 0x68B1, - 0x6DF7, 0x75D5, 0x7D3A, 0x826E, - 0x9B42, 0x4E9B, 0x4F50, 0x53C9, - 0x5506, 0x5D6F, 0x5DE6, 0x5DEE, - 0x67FB, 0x6C99, 0x7473, 0x7802, - 0x8A50, 0x9396, 0x88DF, 0x5750, - 0x5EA7, 0x632B, 0x50B5, 0x50AC, /* 8DC0 */ - 0x518D, 0x6700, 0x54C9, 0x585E, - 0x59BB, 0x5BB0, 0x5F69, 0x624D, - 0x63A1, 0x683D, 0x6B73, 0x6E08, - 0x707D, 0x91C7, 0x7280, 0x7815, - 0x7826, 0x796D, 0x658E, 0x7D30, - 0x83DC, 0x88C1, 0x8F09, 0x969B, - 0x5264, 0x5728, 0x6750, 0x7F6A, - 0x8CA1, 0x51B4, 0x5742, 0x962A, /* 8DE0 */ - 0x583A, 0x698A, 0x80B4, 0x54B2, - 0x5D0E, 0x57FC, 0x7895, 0x9DFA, - 0x4F5C, 0x524A, 0x548B, 0x643E, - 0x6628, 0x6714, 0x67F5, 0x7A84, - 0x7B56, 0x7D22, 0x932F, 0x685C, - 0x9BAD, 0x7B39, 0x5319, 0x518A, - 0x5237, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x5BDF, 0x62F6, 0x64AE, 0x64E6, /* 8E40 */ - 0x672D, 0x6BBA, 0x85A9, 0x96D1, - 0x7690, 0x9BD6, 0x634C, 0x9306, - 0x9BAB, 0x76BF, 0x6652, 0x4E09, - 0x5098, 0x53C2, 0x5C71, 0x60E8, - 0x6492, 0x6563, 0x685F, 0x71E6, - 0x73CA, 0x7523, 0x7B97, 0x7E82, - 0x8695, 0x8B83, 0x8CDB, 0x9178, - 0x9910, 0x65AC, 0x66AB, 0x6B8B, /* 8E60 */ - 0x4ED5, 0x4ED4, 0x4F3A, 0x4F7F, - 0x523A, 0x53F8, 0x53F2, 0x55E3, - 0x56DB, 0x58EB, 0x59CB, 0x59C9, - 0x59FF, 0x5B50, 0x5C4D, 0x5E02, - 0x5E2B, 0x5FD7, 0x601D, 0x6307, - 0x652F, 0x5B5C, 0x65AF, 0x65BD, - 0x65E8, 0x679D, 0x6B62, 0x0000, - 0x6B7B, 0x6C0F, 0x7345, 0x7949, /* 8E80 */ - 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, - 0x80A2, 0x8102, 0x81F3, 0x8996, - 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, - 0x8AEE, 0x8CC7, 0x8CDC, 0x96CC, - 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, - 0x4F8D, 0x5150, 0x5B57, 0x5BFA, - 0x6148, 0x6301, 0x6642, 0x6B21, - 0x6ECB, 0x6CBB, 0x723E, 0x74BD, /* 8EA0 */ - 0x75D4, 0x78C1, 0x793A, 0x800C, - 0x8033, 0x81EA, 0x8494, 0x8F9E, - 0x6C50, 0x9E7F, 0x5F0F, 0x8B58, - 0x9D2B, 0x7AFA, 0x8EF8, 0x5B8D, - 0x96EB, 0x4E03, 0x53F1, 0x57F7, - 0x5931, 0x5AC9, 0x5BA4, 0x6089, - 0x6E7F, 0x6F06, 0x75BE, 0x8CEA, - 0x5B9F, 0x8500, 0x7BE0, 0x5072, /* 8EC0 */ - 0x67F4, 0x829D, 0x5C61, 0x854A, - 0x7E1E, 0x820E, 0x5199, 0x5C04, - 0x6368, 0x8D66, 0x659C, 0x716E, - 0x793E, 0x7D17, 0x8005, 0x8B1D, - 0x8ECA, 0x906E, 0x86C7, 0x90AA, - 0x501F, 0x52FA, 0x5C3A, 0x6753, - 0x707C, 0x7235, 0x914C, 0x91C8, - 0x932B, 0x82E5, 0x5BC2, 0x5F31, /* 8EE0 */ - 0x60F9, 0x4E3B, 0x53D6, 0x5B88, - 0x624B, 0x6731, 0x6B8A, 0x72E9, - 0x73E0, 0x7A2E, 0x816B, 0x8DA3, - 0x9152, 0x9996, 0x5112, 0x53D7, - 0x546A, 0x5BFF, 0x6388, 0x6A39, - 0x7DAC, 0x9700, 0x56DA, 0x53CE, - 0x5468, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x5B97, 0x5C31, 0x5DDE, 0x4FEE, /* 8F40 */ - 0x6101, 0x62FE, 0x6D32, 0x79C0, - 0x79CB, 0x7D42, 0x7E4D, 0x7FD2, - 0x81ED, 0x821F, 0x8490, 0x8846, - 0x8972, 0x8B90, 0x8E74, 0x8F2F, - 0x9031, 0x914B, 0x916C, 0x96C6, - 0x919C, 0x4EC0, 0x4F4F, 0x5145, - 0x5341, 0x5F93, 0x620E, 0x67D4, - 0x6C41, 0x6E0B, 0x7363, 0x7E26, /* 8F60 */ - 0x91CD, 0x9283, 0x53D4, 0x5919, - 0x5BBF, 0x6DD1, 0x795D, 0x7E2E, - 0x7C9B, 0x587E, 0x719F, 0x51FA, - 0x8853, 0x8FF0, 0x4FCA, 0x5CFB, - 0x6625, 0x77AC, 0x7AE3, 0x821C, - 0x99FF, 0x51C6, 0x5FAA, 0x65EC, - 0x696F, 0x6B89, 0x6DF3, 0x0000, - 0x6E96, 0x6F64, 0x76FE, 0x7D14, /* 8F80 */ - 0x5DE1, 0x9075, 0x9187, 0x9806, - 0x51E6, 0x521D, 0x6240, 0x6691, - 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2, - 0x7F72, 0x66F8, 0x85AF, 0x85F7, - 0x8AF8, 0x52A9, 0x53D9, 0x5973, - 0x5E8F, 0x5F90, 0x6055, 0x92E4, - 0x9664, 0x50B7, 0x511F, 0x52DD, - 0x5320, 0x5347, 0x53EC, 0x54E8, /* 8FA0 */ - 0x5546, 0x5531, 0x5617, 0x5968, - 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, - 0x5C0F, 0x5C11, 0x5C1A, 0x5E84, - 0x5E8A, 0x5EE0, 0x5F70, 0x627F, - 0x6284, 0x62DB, 0x638C, 0x6377, - 0x6607, 0x660C, 0x662D, 0x6676, - 0x677E, 0x68A2, 0x6A1F, 0x6A35, - 0x6CBC, 0x6D88, 0x6E09, 0x6E58, /* 8FC0 */ - 0x713C, 0x7126, 0x7167, 0x75C7, - 0x7701, 0x785D, 0x7901, 0x7965, - 0x79F0, 0x7AE0, 0x7B11, 0x7CA7, - 0x7D39, 0x8096, 0x83D6, 0x848B, - 0x8549, 0x885D, 0x88F3, 0x8A1F, - 0x8A3C, 0x8A54, 0x8A73, 0x8C61, - 0x8CDE, 0x91A4, 0x9266, 0x937E, - 0x9418, 0x969C, 0x9798, 0x4E0A, /* 8FE0 */ - 0x4E08, 0x4E1E, 0x4E57, 0x5197, - 0x5270, 0x57CE, 0x5834, 0x58CC, - 0x5B22, 0x5E38, 0x60C5, 0x64FE, - 0x6761, 0x6756, 0x6D44, 0x72B6, - 0x7573, 0x7A63, 0x84B8, 0x8B72, - 0x91B8, 0x9320, 0x5631, 0x57F4, - 0x98FE, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x62ED, 0x690D, 0x6B96, 0x71ED, /* 9040 */ - 0x7E54, 0x8077, 0x8272, 0x89E6, - 0x98DF, 0x8755, 0x8FB1, 0x5C3B, - 0x4F38, 0x4FE1, 0x4FB5, 0x5507, - 0x5A20, 0x5BDD, 0x5BE9, 0x5FC3, - 0x614E, 0x632F, 0x65B0, 0x664B, - 0x68EE, 0x699B, 0x6D78, 0x6DF1, - 0x7533, 0x75B9, 0x771F, 0x795E, - 0x79E6, 0x7D33, 0x81E3, 0x82AF, /* 9060 */ - 0x85AA, 0x89AA, 0x8A3A, 0x8EAB, - 0x8F9B, 0x9032, 0x91DD, 0x9707, - 0x4EBA, 0x4EC1, 0x5203, 0x5875, - 0x58EC, 0x5C0B, 0x751A, 0x5C3D, - 0x814E, 0x8A0A, 0x8FC5, 0x9663, - 0x976D, 0x7B25, 0x8ACF, 0x9808, - 0x9162, 0x56F3, 0x53A8, 0x0000, - 0x9017, 0x5439, 0x5782, 0x5E25, /* 9080 */ - 0x63A8, 0x6C34, 0x708A, 0x7761, - 0x7C8B, 0x7FE0, 0x8870, 0x9042, - 0x9154, 0x9310, 0x9318, 0x968F, - 0x745E, 0x9AC4, 0x5D07, 0x5D69, - 0x6570, 0x67A2, 0x8DA8, 0x96DB, - 0x636E, 0x6749, 0x6919, 0x83C5, - 0x9817, 0x96C0, 0x88FE, 0x6F84, - 0x647A, 0x5BF8, 0x4E16, 0x702C, /* 90A0 */ - 0x755D, 0x662F, 0x51C4, 0x5236, - 0x52E2, 0x59D3, 0x5F81, 0x6027, - 0x6210, 0x653F, 0x6574, 0x661F, - 0x6674, 0x68F2, 0x6816, 0x6B63, - 0x6E05, 0x7272, 0x751F, 0x76DB, - 0x7CBE, 0x8056, 0x58F0, 0x88FD, - 0x897F, 0x8AA0, 0x8A93, 0x8ACB, - 0x901D, 0x9192, 0x9752, 0x9759, /* 90C0 */ - 0x6589, 0x7A0E, 0x8106, 0x96BB, - 0x5E2D, 0x60DC, 0x621A, 0x65A5, - 0x6614, 0x6790, 0x77F3, 0x7A4D, - 0x7C4D, 0x7E3E, 0x810A, 0x8CAC, - 0x8D64, 0x8DE1, 0x8E5F, 0x78A9, - 0x5207, 0x62D9, 0x63A5, 0x6442, - 0x6298, 0x8A2D, 0x7A83, 0x7BC0, - 0x8AAC, 0x96EA, 0x7D76, 0x820C, /* 90E0 */ - 0x8749, 0x4ED9, 0x5148, 0x5343, - 0x5360, 0x5BA3, 0x5C02, 0x5C16, - 0x5DDD, 0x6226, 0x6247, 0x64B0, - 0x6813, 0x6834, 0x6CC9, 0x6D45, - 0x6D17, 0x67D3, 0x6F5C, 0x714E, - 0x717D, 0x65CB, 0x7A7F, 0x7BAD, - 0x7DDA, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x7E4A, 0x7FA8, 0x817A, 0x821B, /* 9140 */ - 0x8239, 0x85A6, 0x8A6E, 0x8CCE, - 0x8DF5, 0x9078, 0x9077, 0x92AD, - 0x9291, 0x9583, 0x9BAE, 0x524D, - 0x5584, 0x6F38, 0x7136, 0x5168, - 0x7985, 0x7E55, 0x81B3, 0x7CCE, - 0x564C, 0x5851, 0x5CA8, 0x63AA, - 0x66FE, 0x66FD, 0x695A, 0x72D9, - 0x758F, 0x758E, 0x790E, 0x7956, /* 9160 */ - 0x79DF, 0x7C97, 0x7D20, 0x7D44, - 0x8607, 0x8A34, 0x963B, 0x9061, - 0x9F20, 0x50E7, 0x5275, 0x53CC, - 0x53E2, 0x5009, 0x55AA, 0x58EE, - 0x594F, 0x723D, 0x5B8B, 0x5C64, - 0x531D, 0x60E3, 0x60F3, 0x635C, - 0x6383, 0x633F, 0x63BB, 0x0000, - 0x64CD, 0x65E9, 0x66F9, 0x5DE3, /* 9180 */ - 0x69CD, 0x69FD, 0x6F15, 0x71E5, - 0x4E89, 0x75E9, 0x76F8, 0x7A93, - 0x7CDF, 0x7DCF, 0x7D9C, 0x8061, - 0x8349, 0x8358, 0x846C, 0x84BC, - 0x85FB, 0x88C5, 0x8D70, 0x9001, - 0x906D, 0x9397, 0x971C, 0x9A12, - 0x50CF, 0x5897, 0x618E, 0x81D3, - 0x8535, 0x8D08, 0x9020, 0x4FC3, /* 91A0 */ - 0x5074, 0x5247, 0x5373, 0x606F, - 0x6349, 0x675F, 0x6E2C, 0x8DB3, - 0x901F, 0x4FD7, 0x5C5E, 0x8CCA, - 0x65CF, 0x7D9A, 0x5352, 0x8896, - 0x5176, 0x63C3, 0x5B58, 0x5B6B, - 0x5C0A, 0x640D, 0x6751, 0x905C, - 0x4ED6, 0x591A, 0x592A, 0x6C70, - 0x8A51, 0x553E, 0x5815, 0x59A5, /* 91C0 */ - 0x60F0, 0x6253, 0x67C1, 0x8235, - 0x6955, 0x9640, 0x99C4, 0x9A28, - 0x4F53, 0x5806, 0x5BFE, 0x8010, - 0x5CB1, 0x5E2F, 0x5F85, 0x6020, - 0x614B, 0x6234, 0x66FF, 0x6CF0, - 0x6EDE, 0x80CE, 0x817F, 0x82D4, - 0x888B, 0x8CB8, 0x9000, 0x902E, - 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, /* 91E0 */ - 0x53F0, 0x5927, 0x7B2C, 0x918D, - 0x984C, 0x9DF9, 0x6EDD, 0x7027, - 0x5353, 0x5544, 0x5B85, 0x6258, - 0x629E, 0x62D3, 0x6CA2, 0x6FEF, - 0x7422, 0x8A17, 0x9438, 0x6FC1, - 0x8AFE, 0x8338, 0x51E7, 0x86F8, - 0x53EA, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x53E9, 0x4F46, 0x9054, 0x8FB0, /* 9240 */ - 0x596A, 0x8131, 0x5DFD, 0x7AEA, - 0x8FBF, 0x68DA, 0x8C37, 0x72F8, - 0x9C48, 0x6A3D, 0x8AB0, 0x4E39, - 0x5358, 0x5606, 0x5766, 0x62C5, - 0x63A2, 0x65E6, 0x6B4E, 0x6DE1, - 0x6E5B, 0x70AD, 0x77ED, 0x7AEF, - 0x7BAA, 0x7DBB, 0x803D, 0x80C6, - 0x86CB, 0x8A95, 0x935B, 0x56E3, /* 9260 */ - 0x58C7, 0x5F3E, 0x65AD, 0x6696, - 0x6A80, 0x6BB5, 0x7537, 0x8AC7, - 0x5024, 0x77E5, 0x5730, 0x5F1B, - 0x6065, 0x667A, 0x6C60, 0x75F4, - 0x7A1A, 0x7F6E, 0x81F4, 0x8718, - 0x9045, 0x99B3, 0x7BC9, 0x755C, - 0x7AF9, 0x7B51, 0x84C4, 0x0000, - 0x9010, 0x79E9, 0x7A92, 0x8336, /* 9280 */ - 0x5AE1, 0x7740, 0x4E2D, 0x4EF2, - 0x5B99, 0x5FE0, 0x62BD, 0x663C, - 0x67F1, 0x6CE8, 0x866B, 0x8877, - 0x8A3B, 0x914E, 0x92F3, 0x99D0, - 0x6A17, 0x7026, 0x732A, 0x82E7, - 0x8457, 0x8CAF, 0x4E01, 0x5146, - 0x51CB, 0x558B, 0x5BF5, 0x5E16, - 0x5E33, 0x5E81, 0x5F14, 0x5F35, /* 92A0 */ - 0x5F6B, 0x5FB4, 0x61F2, 0x6311, - 0x66A2, 0x671D, 0x6F6E, 0x7252, - 0x753A, 0x773A, 0x8074, 0x8139, - 0x8178, 0x8776, 0x8ABF, 0x8ADC, - 0x8D85, 0x8DF3, 0x929A, 0x9577, - 0x9802, 0x9CE5, 0x52C5, 0x6357, - 0x76F4, 0x6715, 0x6C88, 0x73CD, - 0x8CC3, 0x93AE, 0x9673, 0x6D25, /* 92C0 */ - 0x589C, 0x690E, 0x69CC, 0x8FFD, - 0x939A, 0x75DB, 0x901A, 0x585A, - 0x6802, 0x63B4, 0x69FB, 0x4F43, - 0x6F2C, 0x67D8, 0x8FBB, 0x8526, - 0x7DB4, 0x9354, 0x693F, 0x6F70, - 0x576A, 0x58F7, 0x5B2C, 0x7D2C, - 0x722A, 0x540A, 0x91E3, 0x9DB4, - 0x4EAD, 0x4F4E, 0x505C, 0x5075, /* 92E0 */ - 0x5243, 0x8C9E, 0x5448, 0x5824, - 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, - 0x5EF7, 0x5F1F, 0x608C, 0x62B5, - 0x633A, 0x63D0, 0x68AF, 0x6C40, - 0x7887, 0x798E, 0x7A0B, 0x7DE0, - 0x8247, 0x8A02, 0x8AE6, 0x8E44, - 0x9013, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x90B8, 0x912D, 0x91D8, 0x9F0E, /* 9340 */ - 0x6CE5, 0x6458, 0x64E2, 0x6575, - 0x6EF4, 0x7684, 0x7B1B, 0x9069, - 0x93D1, 0x6EBA, 0x54F2, 0x5FB9, - 0x64A4, 0x8F4D, 0x8FED, 0x9244, - 0x5178, 0x586B, 0x5929, 0x5C55, - 0x5E97, 0x6DFB, 0x7E8F, 0x751C, - 0x8CBC, 0x8EE2, 0x985B, 0x70B9, - 0x4F1D, 0x6BBF, 0x6FB1, 0x7530, /* 9360 */ - 0x96FB, 0x514E, 0x5410, 0x5835, - 0x5857, 0x59AC, 0x5C60, 0x5F92, - 0x6597, 0x675C, 0x6E21, 0x767B, - 0x83DF, 0x8CED, 0x9014, 0x90FD, - 0x934D, 0x7825, 0x783A, 0x52AA, - 0x5EA6, 0x571F, 0x5974, 0x6012, - 0x5012, 0x515A, 0x51AC, 0x0000, - 0x51CD, 0x5200, 0x5510, 0x5854, /* 9380 */ - 0x5858, 0x5957, 0x5B95, 0x5CF6, - 0x5D8B, 0x60BC, 0x6295, 0x642D, - 0x6771, 0x6843, 0x68BC, 0x68DF, - 0x76D7, 0x6DD8, 0x6E6F, 0x6D9B, - 0x706F, 0x71C8, 0x5F53, 0x75D8, - 0x7977, 0x7B49, 0x7B54, 0x7B52, - 0x7CD6, 0x7D71, 0x5230, 0x8463, - 0x8569, 0x85E4, 0x8A0E, 0x8B04, /* 93A0 */ - 0x8C46, 0x8E0F, 0x9003, 0x900F, - 0x9419, 0x9676, 0x982D, 0x9A30, - 0x95D8, 0x50CD, 0x52D5, 0x540C, - 0x5802, 0x5C0E, 0x61A7, 0x649E, - 0x6D1E, 0x77B3, 0x7AE5, 0x80F4, - 0x8404, 0x9053, 0x9285, 0x5CE0, - 0x9D07, 0x533F, 0x5F97, 0x5FB3, - 0x6D9C, 0x7279, 0x7763, 0x79BF, /* 93C0 */ - 0x7BE4, 0x6BD2, 0x72EC, 0x8AAD, - 0x6803, 0x6A61, 0x51F8, 0x7A81, - 0x6934, 0x5C4A, 0x9CF6, 0x82EB, - 0x5BC5, 0x9149, 0x701E, 0x5678, - 0x5C6F, 0x60C7, 0x6566, 0x6C8C, - 0x8C5A, 0x9041, 0x9813, 0x5451, - 0x66C7, 0x920D, 0x5948, 0x90A3, - 0x5185, 0x4E4D, 0x51EA, 0x8599, /* 93E0 */ - 0x8B0E, 0x7058, 0x637A, 0x934B, - 0x6962, 0x99B4, 0x7E04, 0x7577, - 0x5357, 0x6960, 0x8EDF, 0x96E3, - 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, - 0x8FE9, 0x5302, 0x8CD1, 0x8089, - 0x8679, 0x5EFF, 0x65E5, 0x4E73, - 0x5165, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x5982, 0x5C3F, 0x97EE, 0x4EFB, /* 9440 */ - 0x598A, 0x5FCD, 0x8A8D, 0x6FE1, - 0x79B0, 0x7962, 0x5BE7, 0x8471, - 0x732B, 0x71B1, 0x5E74, 0x5FF5, - 0x637B, 0x649A, 0x71C3, 0x7C98, - 0x4E43, 0x5EFC, 0x4E4B, 0x57DC, - 0x56A2, 0x60A9, 0x6FC3, 0x7D0D, - 0x80FD, 0x8133, 0x81BF, 0x8FB2, - 0x8997, 0x86A4, 0x5DF4, 0x628A, /* 9460 */ - 0x64AD, 0x8987, 0x6777, 0x6CE2, - 0x6D3E, 0x7436, 0x7834, 0x5A46, - 0x7F75, 0x82AD, 0x99AC, 0x4FF3, - 0x5EC3, 0x62DD, 0x6392, 0x6557, - 0x676F, 0x76C3, 0x724C, 0x80CC, - 0x80BA, 0x8F29, 0x914D, 0x500D, - 0x57F9, 0x5A92, 0x6885, 0x0000, - 0x6973, 0x7164, 0x72FD, 0x8CB7, /* 9480 */ - 0x58F2, 0x8CE0, 0x966A, 0x9019, - 0x877F, 0x79E4, 0x77E7, 0x8429, - 0x4F2F, 0x5265, 0x535A, 0x62CD, - 0x67CF, 0x6CCA, 0x767D, 0x7B94, - 0x7C95, 0x8236, 0x8584, 0x8FEB, - 0x66DD, 0x6F20, 0x7206, 0x7E1B, - 0x83AB, 0x99C1, 0x9EA6, 0x51FD, - 0x7BB1, 0x7872, 0x7BB8, 0x8087, /* 94A0 */ - 0x7B48, 0x6AE8, 0x5E61, 0x808C, - 0x7551, 0x7560, 0x516B, 0x9262, - 0x6E8C, 0x767A, 0x9197, 0x9AEA, - 0x4F10, 0x7F70, 0x629C, 0x7B4F, - 0x95A5, 0x9CE9, 0x567A, 0x5859, - 0x86E4, 0x96BC, 0x4F34, 0x5224, - 0x534A, 0x53CD, 0x53DB, 0x5E06, - 0x642C, 0x6591, 0x677F, 0x6C3E, /* 94C0 */ - 0x6C4E, 0x7248, 0x72AF, 0x73ED, - 0x7554, 0x7E41, 0x822C, 0x85E9, - 0x8CA9, 0x7BC4, 0x91C6, 0x7169, - 0x9812, 0x98EF, 0x633D, 0x6669, - 0x756A, 0x76E4, 0x78D0, 0x8543, - 0x86EE, 0x532A, 0x5351, 0x5426, - 0x5983, 0x5E87, 0x5F7C, 0x60B2, - 0x6249, 0x6279, 0x62AB, 0x6590, /* 94E0 */ - 0x6BD4, 0x6CCC, 0x75B2, 0x76AE, - 0x7891, 0x79D8, 0x7DCB, 0x7F77, - 0x80A5, 0x88AB, 0x8AB9, 0x8CBB, - 0x907F, 0x975E, 0x98DB, 0x6A0B, - 0x7C38, 0x5099, 0x5C3E, 0x5FAE, - 0x6787, 0x6BD8, 0x7435, 0x7709, - 0x7F8E, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x9F3B, 0x67CA, 0x7A17, 0x5339, /* 9540 */ - 0x758B, 0x9AED, 0x5F66, 0x819D, - 0x83F1, 0x8098, 0x5F3C, 0x5FC5, - 0x7562, 0x7B46, 0x903C, 0x6867, - 0x59EB, 0x5A9B, 0x7D10, 0x767E, - 0x8B2C, 0x4FF5, 0x5F6A, 0x6A19, - 0x6C37, 0x6F02, 0x74E2, 0x7968, - 0x8868, 0x8A55, 0x8C79, 0x5EDF, - 0x63CF, 0x75C5, 0x79D2, 0x82D7, /* 9560 */ - 0x9328, 0x92F2, 0x849C, 0x86ED, - 0x9C2D, 0x54C1, 0x5F6C, 0x658C, - 0x6D5C, 0x7015, 0x8CA7, 0x8CD3, - 0x983B, 0x654F, 0x74F6, 0x4E0D, - 0x4ED8, 0x57E0, 0x592B, 0x5A66, - 0x5BCC, 0x51A8, 0x5E03, 0x5E9C, - 0x6016, 0x6276, 0x6577, 0x0000, - 0x65A7, 0x666E, 0x6D6E, 0x7236, /* 9580 */ - 0x7B26, 0x8150, 0x819A, 0x8299, - 0x8B5C, 0x8CA0, 0x8CE6, 0x8D74, - 0x961C, 0x9644, 0x4FAE, 0x64AB, - 0x6B66, 0x821E, 0x8461, 0x856A, - 0x90E8, 0x5C01, 0x6953, 0x98A8, - 0x847A, 0x8557, 0x4F0F, 0x526F, - 0x5FA9, 0x5E45, 0x670D, 0x798F, - 0x8179, 0x8907, 0x8986, 0x6DF5, /* 95A0 */ - 0x5F17, 0x6255, 0x6CB8, 0x4ECF, - 0x7269, 0x9B92, 0x5206, 0x543B, - 0x5674, 0x58B3, 0x61A4, 0x626E, - 0x711A, 0x596E, 0x7C89, 0x7CDE, - 0x7D1B, 0x96F0, 0x6587, 0x805E, - 0x4E19, 0x4F75, 0x5175, 0x5840, - 0x5E63, 0x5E73, 0x5F0A, 0x67C4, - 0x4E26, 0x853D, 0x9589, 0x965B, /* 95C0 */ - 0x7C73, 0x9801, 0x50FB, 0x58C1, - 0x7656, 0x78A7, 0x5225, 0x77A5, - 0x8511, 0x7B86, 0x504F, 0x5909, - 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, - 0x8FD4, 0x904D, 0x4FBF, 0x52C9, - 0x5A29, 0x5F01, 0x97AD, 0x4FDD, - 0x8217, 0x92EA, 0x5703, 0x6355, - 0x6B69, 0x752B, 0x88DC, 0x8F14, /* 95E0 */ - 0x7A42, 0x52DF, 0x5893, 0x6155, - 0x620A, 0x66AE, 0x6BCD, 0x7C3F, - 0x83E9, 0x5023, 0x4FF8, 0x5305, - 0x5446, 0x5831, 0x5949, 0x5B9D, - 0x5CF0, 0x5CEF, 0x5D29, 0x5E96, - 0x62B1, 0x6367, 0x653E, 0x65B9, - 0x670B, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x6CD5, 0x6CE1, 0x70F9, 0x7832, /* 9640 */ - 0x7E2B, 0x80DE, 0x82B3, 0x840C, - 0x84EC, 0x8702, 0x8912, 0x8A2A, - 0x8C4A, 0x90A6, 0x92D2, 0x98FD, - 0x9CF3, 0x9D6C, 0x4E4F, 0x4EA1, - 0x508D, 0x5256, 0x574A, 0x59A8, - 0x5E3D, 0x5FD8, 0x5FD9, 0x623F, - 0x66B4, 0x671B, 0x67D0, 0x68D2, - 0x5192, 0x7D21, 0x80AA, 0x81A8, /* 9660 */ - 0x8B00, 0x8C8C, 0x8CBF, 0x927E, - 0x9632, 0x5420, 0x982C, 0x5317, - 0x50D5, 0x535C, 0x58A8, 0x64B2, - 0x6734, 0x7267, 0x7766, 0x7A46, - 0x91E6, 0x52C3, 0x6CA1, 0x6B86, - 0x5800, 0x5E4C, 0x5954, 0x672C, - 0x7FFB, 0x51E1, 0x76C6, 0x0000, - 0x6469, 0x78E8, 0x9B54, 0x9EBB, /* 9680 */ - 0x57CB, 0x59B9, 0x6627, 0x679A, - 0x6BCE, 0x54E9, 0x69D9, 0x5E55, - 0x819C, 0x6795, 0x9BAA, 0x67FE, - 0x9C52, 0x685D, 0x4EA6, 0x4FE3, - 0x53C8, 0x62B9, 0x672B, 0x6CAB, - 0x8FC4, 0x4FAD, 0x7E6D, 0x9EBF, - 0x4E07, 0x6162, 0x6E80, 0x6F2B, - 0x8513, 0x5473, 0x672A, 0x9B45, /* 96A0 */ - 0x5DF3, 0x7B95, 0x5CAC, 0x5BC6, - 0x871C, 0x6E4A, 0x84D1, 0x7A14, - 0x8108, 0x5999, 0x7C8D, 0x6C11, - 0x7720, 0x52D9, 0x5922, 0x7121, - 0x725F, 0x77DB, 0x9727, 0x9D61, - 0x690B, 0x5A7F, 0x5A18, 0x51A5, - 0x540D, 0x547D, 0x660E, 0x76DF, - 0x8FF7, 0x9298, 0x9CF4, 0x59EA, /* 96C0 */ - 0x725D, 0x6EC5, 0x514D, 0x68C9, - 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, - 0x6478, 0x6A21, 0x8302, 0x5984, - 0x5B5F, 0x6BDB, 0x731B, 0x76F2, - 0x7DB2, 0x8017, 0x8499, 0x5132, - 0x6728, 0x9ED9, 0x76EE, 0x6762, - 0x52FF, 0x9905, 0x5C24, 0x623B, - 0x7C7E, 0x8CB0, 0x554F, 0x60B6, /* 96E0 */ - 0x7D0B, 0x9580, 0x5301, 0x4E5F, - 0x51B6, 0x591C, 0x723A, 0x8036, - 0x91CE, 0x5F25, 0x77E2, 0x5384, - 0x5F79, 0x7D04, 0x85AC, 0x8A33, - 0x8E8D, 0x9756, 0x67F3, 0x85AE, - 0x9453, 0x6109, 0x6108, 0x6CB9, - 0x7652, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x8AED, 0x8F38, 0x552F, 0x4F51, /* 9740 */ - 0x512A, 0x52C7, 0x53CB, 0x5BA5, - 0x5E7D, 0x60A0, 0x6182, 0x63D6, - 0x6709, 0x67DA, 0x6E67, 0x6D8C, - 0x7336, 0x7337, 0x7531, 0x7950, - 0x88D5, 0x8A98, 0x904A, 0x9091, - 0x90F5, 0x96C4, 0x878D, 0x5915, - 0x4E88, 0x4F59, 0x4E0E, 0x8A89, - 0x8F3F, 0x9810, 0x50AD, 0x5E7C, /* 9760 */ - 0x5996, 0x5BB9, 0x5EB8, 0x63DA, - 0x63FA, 0x64C1, 0x66DC, 0x694A, - 0x69D8, 0x6D0B, 0x6EB6, 0x7194, - 0x7528, 0x7AAF, 0x7F8A, 0x8000, - 0x8449, 0x84C9, 0x8981, 0x8B21, - 0x8E0A, 0x9065, 0x967D, 0x990A, - 0x617E, 0x6291, 0x6B32, 0x0000, - 0x6C83, 0x6D74, 0x7FCC, 0x7FFC, /* 9780 */ - 0x6DC0, 0x7F85, 0x87BA, 0x88F8, - 0x6765, 0x83B1, 0x983C, 0x96F7, - 0x6D1B, 0x7D61, 0x843D, 0x916A, - 0x4E71, 0x5375, 0x5D50, 0x6B04, - 0x6FEB, 0x85CD, 0x862D, 0x89A7, - 0x5229, 0x540F, 0x5C65, 0x674E, - 0x68A8, 0x7406, 0x7483, 0x75E2, - 0x88CF, 0x88E1, 0x91CC, 0x96E2, /* 97A0 */ - 0x9678, 0x5F8B, 0x7387, 0x7ACB, - 0x844E, 0x63A0, 0x7565, 0x5289, - 0x6D41, 0x6E9C, 0x7409, 0x7559, - 0x786B, 0x7C92, 0x9686, 0x7ADC, - 0x9F8D, 0x4FB6, 0x616E, 0x65C5, - 0x865C, 0x4E86, 0x4EAE, 0x50DA, - 0x4E21, 0x51CC, 0x5BEE, 0x6599, - 0x6881, 0x6DBC, 0x731F, 0x7642, /* 97C0 */ - 0x77AD, 0x7A1C, 0x7CE7, 0x826F, - 0x8AD2, 0x907C, 0x91CF, 0x9675, - 0x9818, 0x529B, 0x7DD1, 0x502B, - 0x5398, 0x6797, 0x6DCB, 0x71D0, - 0x7433, 0x81E8, 0x8F2A, 0x96A3, - 0x9C57, 0x9E9F, 0x7460, 0x5841, - 0x6D99, 0x7D2F, 0x985E, 0x4EE4, - 0x4F36, 0x4F8B, 0x51B7, 0x52B1, /* 97E0 */ - 0x5DBA, 0x601C, 0x73B2, 0x793C, - 0x82D3, 0x9234, 0x96B7, 0x96F6, - 0x970A, 0x9E97, 0x9F62, 0x66A6, - 0x6B74, 0x5217, 0x52A3, 0x70C8, - 0x88C2, 0x5EC9, 0x604B, 0x6190, - 0x6F23, 0x7149, 0x7C3E, 0x7DF4, - 0x806F, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x84EE, 0x9023, 0x932C, 0x5442, /* 9840 */ - 0x9B6F, 0x6AD3, 0x7089, 0x8CC2, - 0x8DEF, 0x9732, 0x52B4, 0x5A41, - 0x5ECA, 0x5F04, 0x6717, 0x697C, - 0x6994, 0x6D6A, 0x6F0F, 0x7262, - 0x72FC, 0x7BED, 0x8001, 0x807E, - 0x874B, 0x90CE, 0x516D, 0x9E93, - 0x7984, 0x808B, 0x9332, 0x8AD6, - 0x502D, 0x548C, 0x8A71, 0x6B6A, /* 9860 */ - 0x8CC4, 0x8107, 0x60D1, 0x67A0, - 0x9DF2, 0x4E99, 0x4E98, 0x9C10, - 0x8A6B, 0x85C1, 0x8568, 0x6900, - 0x6E7E, 0x7897, 0x8155, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x5F0C, - 0x4E10, 0x4E15, 0x4E2A, 0x4E31, /* 98A0 */ - 0x4E36, 0x4E3C, 0x4E3F, 0x4E42, - 0x4E56, 0x4E58, 0x4E82, 0x4E85, - 0x8C6B, 0x4E8A, 0x8212, 0x5F0D, - 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, - 0x4EA2, 0x4EB0, 0x4EB3, 0x4EB6, - 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, - 0x4EC2, 0x4ED7, 0x4EDE, 0x4EED, - 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, /* 98C0 */ - 0x4F30, 0x4F5B, 0x4F5D, 0x4F57, - 0x4F47, 0x4F76, 0x4F88, 0x4F8F, - 0x4F98, 0x4F7B, 0x4F69, 0x4F70, - 0x4F91, 0x4F6F, 0x4F86, 0x4F96, - 0x5118, 0x4FD4, 0x4FDF, 0x4FCE, - 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, - 0x4FD0, 0x4FE4, 0x4FE5, 0x501A, - 0x5028, 0x5014, 0x502A, 0x5025, /* 98E0 */ - 0x5005, 0x4F1C, 0x4FF6, 0x5021, - 0x5029, 0x502C, 0x4FFE, 0x4FEF, - 0x5011, 0x5006, 0x5043, 0x5047, - 0x6703, 0x5055, 0x5050, 0x5048, - 0x505A, 0x5056, 0x506C, 0x5078, - 0x5080, 0x509A, 0x5085, 0x50B4, - 0x50B2, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x50C9, 0x50CA, 0x50B3, 0x50C2, /* 9940 */ - 0x50D6, 0x50DE, 0x50E5, 0x50ED, - 0x50E3, 0x50EE, 0x50F9, 0x50F5, - 0x5109, 0x5101, 0x5102, 0x5116, - 0x5115, 0x5114, 0x511A, 0x5121, - 0x513A, 0x5137, 0x513C, 0x513B, - 0x513F, 0x5140, 0x5152, 0x514C, - 0x5154, 0x5162, 0x7AF8, 0x5169, - 0x516A, 0x516E, 0x5180, 0x5182, /* 9960 */ - 0x56D8, 0x518C, 0x5189, 0x518F, - 0x5191, 0x5193, 0x5195, 0x5196, - 0x51A4, 0x51A6, 0x51A2, 0x51A9, - 0x51AA, 0x51AB, 0x51B3, 0x51B1, - 0x51B2, 0x51B0, 0x51B5, 0x51BD, - 0x51C5, 0x51C9, 0x51DB, 0x51E0, - 0x8655, 0x51E9, 0x51ED, 0x0000, - 0x51F0, 0x51F5, 0x51FE, 0x5204, /* 9980 */ - 0x520B, 0x5214, 0x520E, 0x5227, - 0x522A, 0x522E, 0x5233, 0x5239, - 0x524F, 0x5244, 0x524B, 0x524C, - 0x525E, 0x5254, 0x526A, 0x5274, - 0x5269, 0x5273, 0x527F, 0x527D, - 0x528D, 0x5294, 0x5292, 0x5271, - 0x5288, 0x5291, 0x8FA8, 0x8FA7, - 0x52AC, 0x52AD, 0x52BC, 0x52B5, /* 99A0 */ - 0x52C1, 0x52CD, 0x52D7, 0x52DE, - 0x52E3, 0x52E6, 0x98ED, 0x52E0, - 0x52F3, 0x52F5, 0x52F8, 0x52F9, - 0x5306, 0x5308, 0x7538, 0x530D, - 0x5310, 0x530F, 0x5315, 0x531A, - 0x5323, 0x532F, 0x5331, 0x5333, - 0x5338, 0x5340, 0x5346, 0x5345, - 0x4E17, 0x5349, 0x534D, 0x51D6, /* 99C0 */ - 0x535E, 0x5369, 0x536E, 0x5918, - 0x537B, 0x5377, 0x5382, 0x5396, - 0x53A0, 0x53A6, 0x53A5, 0x53AE, - 0x53B0, 0x53B6, 0x53C3, 0x7C12, - 0x96D9, 0x53DF, 0x66FC, 0x71EE, - 0x53EE, 0x53E8, 0x53ED, 0x53FA, - 0x5401, 0x543D, 0x5440, 0x542C, - 0x542D, 0x543C, 0x542E, 0x5436, /* 99E0 */ - 0x5429, 0x541D, 0x544E, 0x548F, - 0x5475, 0x548E, 0x545F, 0x5471, - 0x5477, 0x5470, 0x5492, 0x547B, - 0x5480, 0x5476, 0x5484, 0x5490, - 0x5486, 0x54C7, 0x54A2, 0x54B8, - 0x54A5, 0x54AC, 0x54C4, 0x54C8, - 0x54A8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x54AB, 0x54C2, 0x54A4, 0x54BE, /* 9A40 */ - 0x54BC, 0x54D8, 0x54E5, 0x54E6, - 0x550F, 0x5514, 0x54FD, 0x54EE, - 0x54ED, 0x54FA, 0x54E2, 0x5539, - 0x5540, 0x5563, 0x554C, 0x552E, - 0x555C, 0x5545, 0x5556, 0x5557, - 0x5538, 0x5533, 0x555D, 0x5599, - 0x5580, 0x54AF, 0x558A, 0x559F, - 0x557B, 0x557E, 0x5598, 0x559E, /* 9A60 */ - 0x55AE, 0x557C, 0x5583, 0x55A9, - 0x5587, 0x55A8, 0x55DA, 0x55C5, - 0x55DF, 0x55C4, 0x55DC, 0x55E4, - 0x55D4, 0x5614, 0x55F7, 0x5616, - 0x55FE, 0x55FD, 0x561B, 0x55F9, - 0x564E, 0x5650, 0x71DF, 0x5634, - 0x5636, 0x5632, 0x5638, 0x0000, - 0x566B, 0x5664, 0x562F, 0x566C, /* 9A80 */ - 0x566A, 0x5686, 0x5680, 0x568A, - 0x56A0, 0x5694, 0x568F, 0x56A5, - 0x56AE, 0x56B6, 0x56B4, 0x56C2, - 0x56BC, 0x56C1, 0x56C3, 0x56C0, - 0x56C8, 0x56CE, 0x56D1, 0x56D3, - 0x56D7, 0x56EE, 0x56F9, 0x5700, - 0x56FF, 0x5704, 0x5709, 0x5708, - 0x570B, 0x570D, 0x5713, 0x5718, /* 9AA0 */ - 0x5716, 0x55C7, 0x571C, 0x5726, - 0x5737, 0x5738, 0x574E, 0x573B, - 0x5740, 0x574F, 0x5769, 0x57C0, - 0x5788, 0x5761, 0x577F, 0x5789, - 0x5793, 0x57A0, 0x57B3, 0x57A4, - 0x57AA, 0x57B0, 0x57C3, 0x57C6, - 0x57D4, 0x57D2, 0x57D3, 0x580A, - 0x57D6, 0x57E3, 0x580B, 0x5819, /* 9AC0 */ - 0x581D, 0x5872, 0x5821, 0x5862, - 0x584B, 0x5870, 0x6BC0, 0x5852, - 0x583D, 0x5879, 0x5885, 0x58B9, - 0x589F, 0x58AB, 0x58BA, 0x58DE, - 0x58BB, 0x58B8, 0x58AE, 0x58C5, - 0x58D3, 0x58D1, 0x58D7, 0x58D9, - 0x58D8, 0x58E5, 0x58DC, 0x58E4, - 0x58DF, 0x58EF, 0x58FA, 0x58F9, /* 9AE0 */ - 0x58FB, 0x58FC, 0x58FD, 0x5902, - 0x590A, 0x5910, 0x591B, 0x68A6, - 0x5925, 0x592C, 0x592D, 0x5932, - 0x5938, 0x593E, 0x7AD2, 0x5955, - 0x5950, 0x594E, 0x595A, 0x5958, - 0x5962, 0x5960, 0x5967, 0x596C, - 0x5969, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x5978, 0x5981, 0x599D, 0x4F5E, /* 9B40 */ - 0x4FAB, 0x59A3, 0x59B2, 0x59C6, - 0x59E8, 0x59DC, 0x598D, 0x59D9, - 0x59DA, 0x5A25, 0x5A1F, 0x5A11, - 0x5A1C, 0x5A09, 0x5A1A, 0x5A40, - 0x5A6C, 0x5A49, 0x5A35, 0x5A36, - 0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, - 0x5ABE, 0x5ACB, 0x5AC2, 0x5ABD, - 0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, /* 9B60 */ - 0x5AD6, 0x5AFA, 0x5AFB, 0x5B0C, - 0x5B0B, 0x5B16, 0x5B32, 0x5AD0, - 0x5B2A, 0x5B36, 0x5B3E, 0x5B43, - 0x5B45, 0x5B40, 0x5B51, 0x5B55, - 0x5B5A, 0x5B5B, 0x5B65, 0x5B69, - 0x5B70, 0x5B73, 0x5B75, 0x5B78, - 0x6588, 0x5B7A, 0x5B80, 0x0000, - 0x5B83, 0x5BA6, 0x5BB8, 0x5BC3, /* 9B80 */ - 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, - 0x5BE4, 0x5BE6, 0x5BE2, 0x5BDE, - 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, - 0x5BF3, 0x5C05, 0x5C07, 0x5C08, - 0x5C0D, 0x5C13, 0x5C20, 0x5C22, - 0x5C28, 0x5C38, 0x5C39, 0x5C41, - 0x5C46, 0x5C4E, 0x5C53, 0x5C50, - 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, /* 9BA0 */ - 0x4E62, 0x5C76, 0x5C79, 0x5C8C, - 0x5C91, 0x5C94, 0x599B, 0x5CAB, - 0x5CBB, 0x5CB6, 0x5CBC, 0x5CB7, - 0x5CC5, 0x5CBE, 0x5CC7, 0x5CD9, - 0x5CE9, 0x5CFD, 0x5CFA, 0x5CED, - 0x5D8C, 0x5CEA, 0x5D0B, 0x5D15, - 0x5D17, 0x5D5C, 0x5D1F, 0x5D1B, - 0x5D11, 0x5D14, 0x5D22, 0x5D1A, /* 9BC0 */ - 0x5D19, 0x5D18, 0x5D4C, 0x5D52, - 0x5D4E, 0x5D4B, 0x5D6C, 0x5D73, - 0x5D76, 0x5D87, 0x5D84, 0x5D82, - 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE, - 0x5DBD, 0x5D90, 0x5DB7, 0x5DBC, - 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, - 0x5DD6, 0x5DDB, 0x5DEB, 0x5DF2, - 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, /* 9BE0 */ - 0x5E11, 0x5E1B, 0x5E36, 0x5E37, - 0x5E44, 0x5E43, 0x5E40, 0x5E4E, - 0x5E57, 0x5E54, 0x5E5F, 0x5E62, - 0x5E64, 0x5E47, 0x5E75, 0x5E76, - 0x5E7A, 0x9EBC, 0x5E7F, 0x5EA0, - 0x5EC1, 0x5EC2, 0x5EC8, 0x5ED0, - 0x5ECF, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA, /* 9C40 */ - 0x5EDB, 0x5EE2, 0x5EE1, 0x5EE8, - 0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3, - 0x5EF0, 0x5EF4, 0x5EF8, 0x5EFE, - 0x5F03, 0x5F09, 0x5F5D, 0x5F5C, - 0x5F0B, 0x5F11, 0x5F16, 0x5F29, - 0x5F2D, 0x5F38, 0x5F41, 0x5F48, - 0x5F4C, 0x5F4E, 0x5F2F, 0x5F51, - 0x5F56, 0x5F57, 0x5F59, 0x5F61, /* 9C60 */ - 0x5F6D, 0x5F73, 0x5F77, 0x5F83, - 0x5F82, 0x5F7F, 0x5F8A, 0x5F88, - 0x5F91, 0x5F87, 0x5F9E, 0x5F99, - 0x5F98, 0x5FA0, 0x5FA8, 0x5FAD, - 0x5FBC, 0x5FD6, 0x5FFB, 0x5FE4, - 0x5FF8, 0x5FF1, 0x5FDD, 0x60B3, - 0x5FFF, 0x6021, 0x6060, 0x0000, - 0x6019, 0x6010, 0x6029, 0x600E, /* 9C80 */ - 0x6031, 0x601B, 0x6015, 0x602B, - 0x6026, 0x600F, 0x603A, 0x605A, - 0x6041, 0x606A, 0x6077, 0x605F, - 0x604A, 0x6046, 0x604D, 0x6063, - 0x6043, 0x6064, 0x6042, 0x606C, - 0x606B, 0x6059, 0x6081, 0x608D, - 0x60E7, 0x6083, 0x609A, 0x6084, - 0x609B, 0x6096, 0x6097, 0x6092, /* 9CA0 */ - 0x60A7, 0x608B, 0x60E1, 0x60B8, - 0x60E0, 0x60D3, 0x60B4, 0x5FF0, - 0x60BD, 0x60C6, 0x60B5, 0x60D8, - 0x614D, 0x6115, 0x6106, 0x60F6, - 0x60F7, 0x6100, 0x60F4, 0x60FA, - 0x6103, 0x6121, 0x60FB, 0x60F1, - 0x610D, 0x610E, 0x6147, 0x613E, - 0x6128, 0x6127, 0x614A, 0x613F, /* 9CC0 */ - 0x613C, 0x612C, 0x6134, 0x613D, - 0x6142, 0x6144, 0x6173, 0x6177, - 0x6158, 0x6159, 0x615A, 0x616B, - 0x6174, 0x616F, 0x6165, 0x6171, - 0x615F, 0x615D, 0x6153, 0x6175, - 0x6199, 0x6196, 0x6187, 0x61AC, - 0x6194, 0x619A, 0x618A, 0x6191, - 0x61AB, 0x61AE, 0x61CC, 0x61CA, /* 9CE0 */ - 0x61C9, 0x61F7, 0x61C8, 0x61C3, - 0x61C6, 0x61BA, 0x61CB, 0x7F79, - 0x61CD, 0x61E6, 0x61E3, 0x61F6, - 0x61FA, 0x61F4, 0x61FF, 0x61FD, - 0x61FC, 0x61FE, 0x6200, 0x6208, - 0x6209, 0x620D, 0x620C, 0x6214, - 0x621B, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x621E, 0x6221, 0x622A, 0x622E, /* 9D40 */ - 0x6230, 0x6232, 0x6233, 0x6241, - 0x624E, 0x625E, 0x6263, 0x625B, - 0x6260, 0x6268, 0x627C, 0x6282, - 0x6289, 0x627E, 0x6292, 0x6293, - 0x6296, 0x62D4, 0x6283, 0x6294, - 0x62D7, 0x62D1, 0x62BB, 0x62CF, - 0x62FF, 0x62C6, 0x64D4, 0x62C8, - 0x62DC, 0x62CC, 0x62CA, 0x62C2, /* 9D60 */ - 0x62C7, 0x629B, 0x62C9, 0x630C, - 0x62EE, 0x62F1, 0x6327, 0x6302, - 0x6308, 0x62EF, 0x62F5, 0x6350, - 0x633E, 0x634D, 0x641C, 0x634F, - 0x6396, 0x638E, 0x6380, 0x63AB, - 0x6376, 0x63A3, 0x638F, 0x6389, - 0x639F, 0x63B5, 0x636B, 0x0000, - 0x6369, 0x63BE, 0x63E9, 0x63C0, /* 9D80 */ - 0x63C6, 0x63E3, 0x63C9, 0x63D2, - 0x63F6, 0x63C4, 0x6416, 0x6434, - 0x6406, 0x6413, 0x6426, 0x6436, - 0x651D, 0x6417, 0x6428, 0x640F, - 0x6467, 0x646F, 0x6476, 0x644E, - 0x652A, 0x6495, 0x6493, 0x64A5, - 0x64A9, 0x6488, 0x64BC, 0x64DA, - 0x64D2, 0x64C5, 0x64C7, 0x64BB, /* 9DA0 */ - 0x64D8, 0x64C2, 0x64F1, 0x64E7, - 0x8209, 0x64E0, 0x64E1, 0x62AC, - 0x64E3, 0x64EF, 0x652C, 0x64F6, - 0x64F4, 0x64F2, 0x64FA, 0x6500, - 0x64FD, 0x6518, 0x651C, 0x6505, - 0x6524, 0x6523, 0x652B, 0x6534, - 0x6535, 0x6537, 0x6536, 0x6538, - 0x754B, 0x6548, 0x6556, 0x6555, /* 9DC0 */ - 0x654D, 0x6558, 0x655E, 0x655D, - 0x6572, 0x6578, 0x6582, 0x6583, - 0x8B8A, 0x659B, 0x659F, 0x65AB, - 0x65B7, 0x65C3, 0x65C6, 0x65C1, - 0x65C4, 0x65CC, 0x65D2, 0x65DB, - 0x65D9, 0x65E0, 0x65E1, 0x65F1, - 0x6772, 0x660A, 0x6603, 0x65FB, - 0x6773, 0x6635, 0x6636, 0x6634, /* 9DE0 */ - 0x661C, 0x664F, 0x6644, 0x6649, - 0x6641, 0x665E, 0x665D, 0x6664, - 0x6667, 0x6668, 0x665F, 0x6662, - 0x6670, 0x6683, 0x6688, 0x668E, - 0x6689, 0x6684, 0x6698, 0x669D, - 0x66C1, 0x66B9, 0x66C9, 0x66BE, - 0x66BC, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x66C4, 0x66B8, 0x66D6, 0x66DA, /* 9E40 */ - 0x66E0, 0x663F, 0x66E6, 0x66E9, - 0x66F0, 0x66F5, 0x66F7, 0x670F, - 0x6716, 0x671E, 0x6726, 0x6727, - 0x9738, 0x672E, 0x673F, 0x6736, - 0x6741, 0x6738, 0x6737, 0x6746, - 0x675E, 0x6760, 0x6759, 0x6763, - 0x6764, 0x6789, 0x6770, 0x67A9, - 0x677C, 0x676A, 0x678C, 0x678B, /* 9E60 */ - 0x67A6, 0x67A1, 0x6785, 0x67B7, - 0x67EF, 0x67B4, 0x67EC, 0x67B3, - 0x67E9, 0x67B8, 0x67E4, 0x67DE, - 0x67DD, 0x67E2, 0x67EE, 0x67B9, - 0x67CE, 0x67C6, 0x67E7, 0x6A9C, - 0x681E, 0x6846, 0x6829, 0x6840, - 0x684D, 0x6832, 0x684E, 0x0000, - 0x68B3, 0x682B, 0x6859, 0x6863, /* 9E80 */ - 0x6877, 0x687F, 0x689F, 0x688F, - 0x68AD, 0x6894, 0x689D, 0x689B, - 0x6883, 0x6AAE, 0x68B9, 0x6874, - 0x68B5, 0x68A0, 0x68BA, 0x690F, - 0x688D, 0x687E, 0x6901, 0x68CA, - 0x6908, 0x68D8, 0x6922, 0x6926, - 0x68E1, 0x690C, 0x68CD, 0x68D4, - 0x68E7, 0x68D5, 0x6936, 0x6912, /* 9EA0 */ - 0x6904, 0x68D7, 0x68E3, 0x6925, - 0x68F9, 0x68E0, 0x68EF, 0x6928, - 0x692A, 0x691A, 0x6923, 0x6921, - 0x68C6, 0x6979, 0x6977, 0x695C, - 0x6978, 0x696B, 0x6954, 0x697E, - 0x696E, 0x6939, 0x6974, 0x693D, - 0x6959, 0x6930, 0x6961, 0x695E, - 0x695D, 0x6981, 0x696A, 0x69B2, /* 9EC0 */ - 0x69AE, 0x69D0, 0x69BF, 0x69C1, - 0x69D3, 0x69BE, 0x69CE, 0x5BE8, - 0x69CA, 0x69DD, 0x69BB, 0x69C3, - 0x69A7, 0x6A2E, 0x6991, 0x69A0, - 0x699C, 0x6995, 0x69B4, 0x69DE, - 0x69E8, 0x6A02, 0x6A1B, 0x69FF, - 0x6B0A, 0x69F9, 0x69F2, 0x69E7, - 0x6A05, 0x69B1, 0x6A1E, 0x69ED, /* 9EE0 */ - 0x6A14, 0x69EB, 0x6A0A, 0x6A12, - 0x6AC1, 0x6A23, 0x6A13, 0x6A44, - 0x6A0C, 0x6A72, 0x6A36, 0x6A78, - 0x6A47, 0x6A62, 0x6A59, 0x6A66, - 0x6A48, 0x6A38, 0x6A22, 0x6A90, - 0x6A8D, 0x6AA0, 0x6A84, 0x6AA2, - 0x6AA3, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x6A97, 0x8617, 0x6ABB, 0x6AC3, /* 9F40 */ - 0x6AC2, 0x6AB8, 0x6AB3, 0x6AAC, - 0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, - 0x6ADA, 0x6AEA, 0x6AFB, 0x6B05, - 0x8616, 0x6AFA, 0x6B12, 0x6B16, - 0x9B31, 0x6B1F, 0x6B38, 0x6B37, - 0x76DC, 0x6B39, 0x98EE, 0x6B47, - 0x6B43, 0x6B49, 0x6B50, 0x6B59, - 0x6B54, 0x6B5B, 0x6B5F, 0x6B61, /* 9F60 */ - 0x6B78, 0x6B79, 0x6B7F, 0x6B80, - 0x6B84, 0x6B83, 0x6B8D, 0x6B98, - 0x6B95, 0x6B9E, 0x6BA4, 0x6BAA, - 0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, - 0x6BB3, 0x6BB7, 0x6BBC, 0x6BC6, - 0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, - 0x6BEB, 0x6BF3, 0x6BEF, 0x0000, - 0x9EBE, 0x6C08, 0x6C13, 0x6C14, /* 9F80 */ - 0x6C1B, 0x6C24, 0x6C23, 0x6C5E, - 0x6C55, 0x6C62, 0x6C6A, 0x6C82, - 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B, - 0x6C7E, 0x6C68, 0x6C73, 0x6C92, - 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, - 0x6CBD, 0x6CD7, 0x6CC5, 0x6CDD, - 0x6CAE, 0x6CB1, 0x6CBE, 0x6CBA, - 0x6CDB, 0x6CEF, 0x6CD9, 0x6CEA, /* 9FA0 */ - 0x6D1F, 0x884D, 0x6D36, 0x6D2B, - 0x6D3D, 0x6D38, 0x6D19, 0x6D35, - 0x6D33, 0x6D12, 0x6D0C, 0x6D63, - 0x6D93, 0x6D64, 0x6D5A, 0x6D79, - 0x6D59, 0x6D8E, 0x6D95, 0x6FE4, - 0x6D85, 0x6DF9, 0x6E15, 0x6E0A, - 0x6DB5, 0x6DC7, 0x6DE6, 0x6DB8, - 0x6DC6, 0x6DEC, 0x6DDE, 0x6DCC, /* 9FC0 */ - 0x6DE8, 0x6DD2, 0x6DC5, 0x6DFA, - 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, - 0x6DEE, 0x6E2D, 0x6E6E, 0x6E2E, - 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, - 0x6E23, 0x6E6B, 0x6E2B, 0x6E76, - 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, - 0x6E4E, 0x6E24, 0x6EFF, 0x6E1D, - 0x6E38, 0x6E82, 0x6EAA, 0x6E98, /* 9FE0 */ - 0x6EC9, 0x6EB7, 0x6ED3, 0x6EBD, - 0x6EAF, 0x6EC4, 0x6EB2, 0x6ED4, - 0x6ED5, 0x6E8F, 0x6EA5, 0x6EC2, - 0x6E9F, 0x6F41, 0x6F11, 0x704C, - 0x6EEC, 0x6EF8, 0x6EFE, 0x6F3F, - 0x6EF2, 0x6F31, 0x6EEF, 0x6F32, - 0x6ECC, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A0A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A0C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A0E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A1A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A1C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A1E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A2A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A2C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A2E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A3A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A3C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A3E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A4A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A4C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A4E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A5A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A5C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A5E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A6A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A6C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A6E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A7A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A7C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A7E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A8A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A8C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A8E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A9A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A9C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A9E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AA00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AA20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AA40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AA60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AA80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AAA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AAC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AAE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AB00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AB20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AB40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AB60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AB80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ABA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ABC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ABE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AC00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AC20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AC40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AC60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AC80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ACA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ACC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ACE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AD00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AD20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AD40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AD60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AD80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ADA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ADC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ADE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AE00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AE20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AE40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AE60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AE80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AEA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AEC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AEE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AF00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AF20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AF40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AF60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AF80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AFA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AFC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AFE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B0A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B0C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B0E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B1A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B1C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B1E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B2A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B2C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B2E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B3A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B3C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B3E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B4A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B4C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B4E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B5A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B5C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B5E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B6A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B6C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B6E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B7A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B7C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B7E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B8A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B8C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B8E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B9A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B9C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B9E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BA00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BA20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BA40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BA60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BA80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BAA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BAC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BAE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BB00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BB20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BB40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BB60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BB80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BBA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BBC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BBE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BC00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BC20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BC40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BC60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BC80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BCA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BCC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BCE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BD00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BD20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BD40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BD60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BD80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BDA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BDC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BDE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BE00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BE20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BE40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BE60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BE80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BEA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BEC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BEE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BF00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BF20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BF40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BF60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BF80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BFA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BFC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BFE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C0A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C0C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C0E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C1A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C1C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C1E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C2A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C2C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C2E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C3A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C3C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C3E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C4A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C4C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C4E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C5A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C5C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C5E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C6A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C6C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C6E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C7A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C7C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C7E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C8A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C8C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C8E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C9A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C9C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C9E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CA00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CA20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CA40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CA60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CA80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CAA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CAC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CAE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CB00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CB20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CB40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CB60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CB80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CBA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CBC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CBE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CC00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CC20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CC40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CC60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CC80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CCA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CCC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CCE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CD00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CD20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CD40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CD60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CD80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CDA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CDC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CDE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CE00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CE20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CE40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CE60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CE80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CEA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CEC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CEE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CF00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CF20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CF40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CF60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CF80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CFA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CFC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CFE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D0A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D0C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D0E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D1A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D1C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D1E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D2A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D2C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D2E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D3A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D3C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D3E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D4A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D4C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D4E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D5A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D5C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D5E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D6A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D6C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D6E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D7A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D7C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D7E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D8A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D8C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D8E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D9A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D9C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D9E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DA00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DA20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DA40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DA60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DA80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DAA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DAC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DAE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DB00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DB20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DB40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DB60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DB80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DBA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DBC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DBE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DC00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DC20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DC40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DC60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DC80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DCA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DCC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DCE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DD00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DD20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DD40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DD60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DD80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DDA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DDC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DDE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DE00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DE20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DE40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DE60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DE80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DEA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DEC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DEE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DF00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DF20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DF40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DF60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DF80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DFA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DFC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DFE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x6F3E, 0x6F13, 0x6EF7, 0x6F86, /* E040 */ - 0x6F7A, 0x6F78, 0x6F81, 0x6F80, - 0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D, - 0x6F82, 0x6F7C, 0x6F58, 0x6F8E, - 0x6F91, 0x6FC2, 0x6F66, 0x6FB3, - 0x6FA3, 0x6FA1, 0x6FA4, 0x6FB9, - 0x6FC6, 0x6FAA, 0x6FDF, 0x6FD5, - 0x6FEC, 0x6FD4, 0x6FD8, 0x6FF1, - 0x6FEE, 0x6FDB, 0x7009, 0x700B, /* E060 */ - 0x6FFA, 0x7011, 0x7001, 0x700F, - 0x6FFE, 0x701B, 0x701A, 0x6F74, - 0x701D, 0x7018, 0x701F, 0x7030, - 0x703E, 0x7032, 0x7051, 0x7063, - 0x7099, 0x7092, 0x70AF, 0x70F1, - 0x70AC, 0x70B8, 0x70B3, 0x70AE, - 0x70DF, 0x70CB, 0x70DD, 0x0000, - 0x70D9, 0x7109, 0x70FD, 0x711C, /* E080 */ - 0x7119, 0x7165, 0x7155, 0x7188, - 0x7166, 0x7162, 0x714C, 0x7156, - 0x716C, 0x718F, 0x71FB, 0x7184, - 0x7195, 0x71A8, 0x71AC, 0x71D7, - 0x71B9, 0x71BE, 0x71D2, 0x71C9, - 0x71D4, 0x71CE, 0x71E0, 0x71EC, - 0x71E7, 0x71F5, 0x71FC, 0x71F9, - 0x71FF, 0x720D, 0x7210, 0x721B, /* E0A0 */ - 0x7228, 0x722D, 0x722C, 0x7230, - 0x7232, 0x723B, 0x723C, 0x723F, - 0x7240, 0x7246, 0x724B, 0x7258, - 0x7274, 0x727E, 0x7282, 0x7281, - 0x7287, 0x7292, 0x7296, 0x72A2, - 0x72A7, 0x72B9, 0x72B2, 0x72C3, - 0x72C6, 0x72C4, 0x72CE, 0x72D2, - 0x72E2, 0x72E0, 0x72E1, 0x72F9, /* E0C0 */ - 0x72F7, 0x500F, 0x7317, 0x730A, - 0x731C, 0x7316, 0x731D, 0x7334, - 0x732F, 0x7329, 0x7325, 0x733E, - 0x734E, 0x734F, 0x9ED8, 0x7357, - 0x736A, 0x7368, 0x7370, 0x7378, - 0x7375, 0x737B, 0x737A, 0x73C8, - 0x73B3, 0x73CE, 0x73BB, 0x73C0, - 0x73E5, 0x73EE, 0x73DE, 0x74A2, /* E0E0 */ - 0x7405, 0x746F, 0x7425, 0x73F8, - 0x7432, 0x743A, 0x7455, 0x743F, - 0x745F, 0x7459, 0x7441, 0x745C, - 0x7469, 0x7470, 0x7463, 0x746A, - 0x7476, 0x747E, 0x748B, 0x749E, - 0x74A7, 0x74CA, 0x74CF, 0x74D4, - 0x73F1, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x74E0, 0x74E3, 0x74E7, 0x74E9, /* E140 */ - 0x74EE, 0x74F2, 0x74F0, 0x74F1, - 0x74F8, 0x74F7, 0x7504, 0x7503, - 0x7505, 0x750C, 0x750E, 0x750D, - 0x7515, 0x7513, 0x751E, 0x7526, - 0x752C, 0x753C, 0x7544, 0x754D, - 0x754A, 0x7549, 0x755B, 0x7546, - 0x755A, 0x7569, 0x7564, 0x7567, - 0x756B, 0x756D, 0x7578, 0x7576, /* E160 */ - 0x7586, 0x7587, 0x7574, 0x758A, - 0x7589, 0x7582, 0x7594, 0x759A, - 0x759D, 0x75A5, 0x75A3, 0x75C2, - 0x75B3, 0x75C3, 0x75B5, 0x75BD, - 0x75B8, 0x75BC, 0x75B1, 0x75CD, - 0x75CA, 0x75D2, 0x75D9, 0x75E3, - 0x75DE, 0x75FE, 0x75FF, 0x0000, - 0x75FC, 0x7601, 0x75F0, 0x75FA, /* E180 */ - 0x75F2, 0x75F3, 0x760B, 0x760D, - 0x7609, 0x761F, 0x7627, 0x7620, - 0x7621, 0x7622, 0x7624, 0x7634, - 0x7630, 0x763B, 0x7647, 0x7648, - 0x7646, 0x765C, 0x7658, 0x7661, - 0x7662, 0x7668, 0x7669, 0x766A, - 0x7667, 0x766C, 0x7670, 0x7672, - 0x7676, 0x7678, 0x767C, 0x7680, /* E1A0 */ - 0x7683, 0x7688, 0x768B, 0x768E, - 0x7696, 0x7693, 0x7699, 0x769A, - 0x76B0, 0x76B4, 0x76B8, 0x76B9, - 0x76BA, 0x76C2, 0x76CD, 0x76D6, - 0x76D2, 0x76DE, 0x76E1, 0x76E5, - 0x76E7, 0x76EA, 0x862F, 0x76FB, - 0x7708, 0x7707, 0x7704, 0x7729, - 0x7724, 0x771E, 0x7725, 0x7726, /* E1C0 */ - 0x771B, 0x7737, 0x7738, 0x7747, - 0x775A, 0x7768, 0x776B, 0x775B, - 0x7765, 0x777F, 0x777E, 0x7779, - 0x778E, 0x778B, 0x7791, 0x77A0, - 0x779E, 0x77B0, 0x77B6, 0x77B9, - 0x77BF, 0x77BC, 0x77BD, 0x77BB, - 0x77C7, 0x77CD, 0x77D7, 0x77DA, - 0x77DC, 0x77E3, 0x77EE, 0x77FC, /* E1E0 */ - 0x780C, 0x7812, 0x7926, 0x7820, - 0x792A, 0x7845, 0x788E, 0x7874, - 0x7886, 0x787C, 0x789A, 0x788C, - 0x78A3, 0x78B5, 0x78AA, 0x78AF, - 0x78D1, 0x78C6, 0x78CB, 0x78D4, - 0x78BE, 0x78BC, 0x78C5, 0x78CA, - 0x78EC, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x78E7, 0x78DA, 0x78FD, 0x78F4, /* E240 */ - 0x7907, 0x7912, 0x7911, 0x7919, - 0x792C, 0x792B, 0x7940, 0x7960, - 0x7957, 0x795F, 0x795A, 0x7955, - 0x7953, 0x797A, 0x797F, 0x798A, - 0x799D, 0x79A7, 0x9F4B, 0x79AA, - 0x79AE, 0x79B3, 0x79B9, 0x79BA, - 0x79C9, 0x79D5, 0x79E7, 0x79EC, - 0x79E1, 0x79E3, 0x7A08, 0x7A0D, /* E260 */ - 0x7A18, 0x7A19, 0x7A20, 0x7A1F, - 0x7980, 0x7A31, 0x7A3B, 0x7A3E, - 0x7A37, 0x7A43, 0x7A57, 0x7A49, - 0x7A61, 0x7A62, 0x7A69, 0x9F9D, - 0x7A70, 0x7A79, 0x7A7D, 0x7A88, - 0x7A97, 0x7A95, 0x7A98, 0x7A96, - 0x7AA9, 0x7AC8, 0x7AB0, 0x0000, - 0x7AB6, 0x7AC5, 0x7AC4, 0x7ABF, /* E280 */ - 0x9083, 0x7AC7, 0x7ACA, 0x7ACD, - 0x7ACF, 0x7AD5, 0x7AD3, 0x7AD9, - 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2, - 0x7AE6, 0x7AED, 0x7AF0, 0x7B02, - 0x7B0F, 0x7B0A, 0x7B06, 0x7B33, - 0x7B18, 0x7B19, 0x7B1E, 0x7B35, - 0x7B28, 0x7B36, 0x7B50, 0x7B7A, - 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, /* E2A0 */ - 0x7B45, 0x7B75, 0x7B65, 0x7B74, - 0x7B67, 0x7B70, 0x7B71, 0x7B6C, - 0x7B6E, 0x7B9D, 0x7B98, 0x7B9F, - 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, - 0x7B92, 0x7B8F, 0x7B5D, 0x7B99, - 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, - 0x7BB4, 0x7BC6, 0x7BDD, 0x7BE9, - 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, /* E2C0 */ - 0x7C60, 0x7C00, 0x7C07, 0x7C13, - 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, - 0x7BF6, 0x7C23, 0x7C27, 0x7C2A, - 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, - 0x7C4C, 0x7C43, 0x7C54, 0x7C4F, - 0x7C40, 0x7C50, 0x7C58, 0x7C5F, - 0x7C64, 0x7C56, 0x7C65, 0x7C6C, - 0x7C75, 0x7C83, 0x7C90, 0x7CA4, /* E2E0 */ - 0x7CAD, 0x7CA2, 0x7CAB, 0x7CA1, - 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, - 0x7CAE, 0x7CB9, 0x7CBD, 0x7CC0, - 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, - 0x7CDC, 0x7CE2, 0x9B3B, 0x7CEF, - 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, - 0x7D06, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x7D02, 0x7D1C, 0x7D15, 0x7D0A, /* E340 */ - 0x7D45, 0x7D4B, 0x7D2E, 0x7D32, - 0x7D3F, 0x7D35, 0x7D46, 0x7D73, - 0x7D56, 0x7D4E, 0x7D72, 0x7D68, - 0x7D6E, 0x7D4F, 0x7D63, 0x7D93, - 0x7D89, 0x7D5B, 0x7D8F, 0x7D7D, - 0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, - 0x7DB5, 0x7DC7, 0x7DBD, 0x7DAB, - 0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, /* E360 */ - 0x7DB8, 0x7D9F, 0x7DB0, 0x7DD8, - 0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, - 0x7DF2, 0x7DE1, 0x7E05, 0x7E0A, - 0x7E23, 0x7E21, 0x7E12, 0x7E31, - 0x7E1F, 0x7E09, 0x7E0B, 0x7E22, - 0x7E46, 0x7E66, 0x7E3B, 0x7E35, - 0x7E39, 0x7E43, 0x7E37, 0x0000, - 0x7E32, 0x7E3A, 0x7E67, 0x7E5D, /* E380 */ - 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, - 0x7E79, 0x7E6A, 0x7E69, 0x7E7C, - 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, - 0x8FAE, 0x7E7F, 0x7E88, 0x7E89, - 0x7E8C, 0x7E92, 0x7E90, 0x7E93, - 0x7E94, 0x7E96, 0x7E8E, 0x7E9B, - 0x7E9C, 0x7F38, 0x7F3A, 0x7F45, - 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, /* E3A0 */ - 0x7F51, 0x7F55, 0x7F54, 0x7F58, - 0x7F5F, 0x7F60, 0x7F68, 0x7F69, - 0x7F67, 0x7F78, 0x7F82, 0x7F86, - 0x7F83, 0x7F88, 0x7F87, 0x7F8C, - 0x7F94, 0x7F9E, 0x7F9D, 0x7F9A, - 0x7FA3, 0x7FAF, 0x7FB2, 0x7FB9, - 0x7FAE, 0x7FB6, 0x7FB8, 0x8B71, - 0x7FC5, 0x7FC6, 0x7FCA, 0x7FD5, /* E3C0 */ - 0x7FD4, 0x7FE1, 0x7FE6, 0x7FE9, - 0x7FF3, 0x7FF9, 0x98DC, 0x8006, - 0x8004, 0x800B, 0x8012, 0x8018, - 0x8019, 0x801C, 0x8021, 0x8028, - 0x803F, 0x803B, 0x804A, 0x8046, - 0x8052, 0x8058, 0x805A, 0x805F, - 0x8062, 0x8068, 0x8073, 0x8072, - 0x8070, 0x8076, 0x8079, 0x807D, /* E3E0 */ - 0x807F, 0x8084, 0x8086, 0x8085, - 0x809B, 0x8093, 0x809A, 0x80AD, - 0x5190, 0x80AC, 0x80DB, 0x80E5, - 0x80D9, 0x80DD, 0x80C4, 0x80DA, - 0x80D6, 0x8109, 0x80EF, 0x80F1, - 0x811B, 0x8129, 0x8123, 0x812F, - 0x814B, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x968B, 0x8146, 0x813E, 0x8153, /* E440 */ - 0x8151, 0x80FC, 0x8171, 0x816E, - 0x8165, 0x8166, 0x8174, 0x8183, - 0x8188, 0x818A, 0x8180, 0x8182, - 0x81A0, 0x8195, 0x81A4, 0x81A3, - 0x815F, 0x8193, 0x81A9, 0x81B0, - 0x81B5, 0x81BE, 0x81B8, 0x81BD, - 0x81C0, 0x81C2, 0x81BA, 0x81C9, - 0x81CD, 0x81D1, 0x81D9, 0x81D8, /* E460 */ - 0x81C8, 0x81DA, 0x81DF, 0x81E0, - 0x81E7, 0x81FA, 0x81FB, 0x81FE, - 0x8201, 0x8202, 0x8205, 0x8207, - 0x820A, 0x820D, 0x8210, 0x8216, - 0x8229, 0x822B, 0x8238, 0x8233, - 0x8240, 0x8259, 0x8258, 0x825D, - 0x825A, 0x825F, 0x8264, 0x0000, - 0x8262, 0x8268, 0x826A, 0x826B, /* E480 */ - 0x822E, 0x8271, 0x8277, 0x8278, - 0x827E, 0x828D, 0x8292, 0x82AB, - 0x829F, 0x82BB, 0x82AC, 0x82E1, - 0x82E3, 0x82DF, 0x82D2, 0x82F4, - 0x82F3, 0x82FA, 0x8393, 0x8303, - 0x82FB, 0x82F9, 0x82DE, 0x8306, - 0x82DC, 0x8309, 0x82D9, 0x8335, - 0x8334, 0x8316, 0x8332, 0x8331, /* E4A0 */ - 0x8340, 0x8339, 0x8350, 0x8345, - 0x832F, 0x832B, 0x8317, 0x8318, - 0x8385, 0x839A, 0x83AA, 0x839F, - 0x83A2, 0x8396, 0x8323, 0x838E, - 0x8387, 0x838A, 0x837C, 0x83B5, - 0x8373, 0x8375, 0x83A0, 0x8389, - 0x83A8, 0x83F4, 0x8413, 0x83EB, - 0x83CE, 0x83FD, 0x8403, 0x83D8, /* E4C0 */ - 0x840B, 0x83C1, 0x83F7, 0x8407, - 0x83E0, 0x83F2, 0x840D, 0x8422, - 0x8420, 0x83BD, 0x8438, 0x8506, - 0x83FB, 0x846D, 0x842A, 0x843C, - 0x855A, 0x8484, 0x8477, 0x846B, - 0x84AD, 0x846E, 0x8482, 0x8469, - 0x8446, 0x842C, 0x846F, 0x8479, - 0x8435, 0x84CA, 0x8462, 0x84B9, /* E4E0 */ - 0x84BF, 0x849F, 0x84D9, 0x84CD, - 0x84BB, 0x84DA, 0x84D0, 0x84C1, - 0x84C6, 0x84D6, 0x84A1, 0x8521, - 0x84FF, 0x84F4, 0x8517, 0x8518, - 0x852C, 0x851F, 0x8515, 0x8514, - 0x84FC, 0x8540, 0x8563, 0x8558, - 0x8548, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x8541, 0x8602, 0x854B, 0x8555, /* E540 */ - 0x8580, 0x85A4, 0x8588, 0x8591, - 0x858A, 0x85A8, 0x856D, 0x8594, - 0x859B, 0x85EA, 0x8587, 0x859C, - 0x8577, 0x857E, 0x8590, 0x85C9, - 0x85BA, 0x85CF, 0x85B9, 0x85D0, - 0x85D5, 0x85DD, 0x85E5, 0x85DC, - 0x85F9, 0x860A, 0x8613, 0x860B, - 0x85FE, 0x85FA, 0x8606, 0x8622, /* E560 */ - 0x861A, 0x8630, 0x863F, 0x864D, - 0x4E55, 0x8654, 0x865F, 0x8667, - 0x8671, 0x8693, 0x86A3, 0x86A9, - 0x86AA, 0x868B, 0x868C, 0x86B6, - 0x86AF, 0x86C4, 0x86C6, 0x86B0, - 0x86C9, 0x8823, 0x86AB, 0x86D4, - 0x86DE, 0x86E9, 0x86EC, 0x0000, - 0x86DF, 0x86DB, 0x86EF, 0x8712, /* E580 */ - 0x8706, 0x8708, 0x8700, 0x8703, - 0x86FB, 0x8711, 0x8709, 0x870D, - 0x86F9, 0x870A, 0x8734, 0x873F, - 0x8737, 0x873B, 0x8725, 0x8729, - 0x871A, 0x8760, 0x875F, 0x8778, - 0x874C, 0x874E, 0x8774, 0x8757, - 0x8768, 0x876E, 0x8759, 0x8753, - 0x8763, 0x876A, 0x8805, 0x87A2, /* E5A0 */ - 0x879F, 0x8782, 0x87AF, 0x87CB, - 0x87BD, 0x87C0, 0x87D0, 0x96D6, - 0x87AB, 0x87C4, 0x87B3, 0x87C7, - 0x87C6, 0x87BB, 0x87EF, 0x87F2, - 0x87E0, 0x880F, 0x880D, 0x87FE, - 0x87F6, 0x87F7, 0x880E, 0x87D2, - 0x8811, 0x8816, 0x8815, 0x8822, - 0x8821, 0x8831, 0x8836, 0x8839, /* E5C0 */ - 0x8827, 0x883B, 0x8844, 0x8842, - 0x8852, 0x8859, 0x885E, 0x8862, - 0x886B, 0x8881, 0x887E, 0x889E, - 0x8875, 0x887D, 0x88B5, 0x8872, - 0x8882, 0x8897, 0x8892, 0x88AE, - 0x8899, 0x88A2, 0x888D, 0x88A4, - 0x88B0, 0x88BF, 0x88B1, 0x88C3, - 0x88C4, 0x88D4, 0x88D8, 0x88D9, /* E5E0 */ - 0x88DD, 0x88F9, 0x8902, 0x88FC, - 0x88F4, 0x88E8, 0x88F2, 0x8904, - 0x890C, 0x890A, 0x8913, 0x8943, - 0x891E, 0x8925, 0x892A, 0x892B, - 0x8941, 0x8944, 0x893B, 0x8936, - 0x8938, 0x894C, 0x891D, 0x8960, - 0x895E, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x8966, 0x8964, 0x896D, 0x896A, /* E640 */ - 0x896F, 0x8974, 0x8977, 0x897E, - 0x8983, 0x8988, 0x898A, 0x8993, - 0x8998, 0x89A1, 0x89A9, 0x89A6, - 0x89AC, 0x89AF, 0x89B2, 0x89BA, - 0x89BD, 0x89BF, 0x89C0, 0x89DA, - 0x89DC, 0x89DD, 0x89E7, 0x89F4, - 0x89F8, 0x8A03, 0x8A16, 0x8A10, - 0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, /* E660 */ - 0x8A36, 0x8A41, 0x8A5B, 0x8A52, - 0x8A46, 0x8A48, 0x8A7C, 0x8A6D, - 0x8A6C, 0x8A62, 0x8A85, 0x8A82, - 0x8A84, 0x8AA8, 0x8AA1, 0x8A91, - 0x8AA5, 0x8AA6, 0x8A9A, 0x8AA3, - 0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA, - 0x8AEB, 0x8AF3, 0x8AE7, 0x0000, - 0x8AE4, 0x8AF1, 0x8B14, 0x8AE0, /* E680 */ - 0x8AE2, 0x8AF7, 0x8ADE, 0x8ADB, - 0x8B0C, 0x8B07, 0x8B1A, 0x8AE1, - 0x8B16, 0x8B10, 0x8B17, 0x8B20, - 0x8B33, 0x97AB, 0x8B26, 0x8B2B, - 0x8B3E, 0x8B28, 0x8B41, 0x8B4C, - 0x8B4F, 0x8B4E, 0x8B49, 0x8B56, - 0x8B5B, 0x8B5A, 0x8B6B, 0x8B5F, - 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, /* E6A0 */ - 0x8B80, 0x8B8C, 0x8B8E, 0x8B92, - 0x8B93, 0x8B96, 0x8B99, 0x8B9A, - 0x8C3A, 0x8C41, 0x8C3F, 0x8C48, - 0x8C4C, 0x8C4E, 0x8C50, 0x8C55, - 0x8C62, 0x8C6C, 0x8C78, 0x8C7A, - 0x8C82, 0x8C89, 0x8C85, 0x8C8A, - 0x8C8D, 0x8C8E, 0x8C94, 0x8C7C, - 0x8C98, 0x621D, 0x8CAD, 0x8CAA, /* E6C0 */ - 0x8CBD, 0x8CB2, 0x8CB3, 0x8CAE, - 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, - 0x8CE3, 0x8CDA, 0x8CFD, 0x8CFA, - 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, - 0x8D07, 0x8D0F, 0x8D0D, 0x8D10, - 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, - 0x8D16, 0x8D67, 0x8D6D, 0x8D71, - 0x8D73, 0x8D81, 0x8D99, 0x8DC2, /* E6E0 */ - 0x8DBE, 0x8DBA, 0x8DCF, 0x8DDA, - 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, - 0x8DEA, 0x8DEB, 0x8DDF, 0x8DE3, - 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, - 0x8E1D, 0x8E1E, 0x8E10, 0x8E1F, - 0x8E42, 0x8E35, 0x8E30, 0x8E34, - 0x8E4A, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x8E47, 0x8E49, 0x8E4C, 0x8E50, /* E740 */ - 0x8E48, 0x8E59, 0x8E64, 0x8E60, - 0x8E2A, 0x8E63, 0x8E55, 0x8E76, - 0x8E72, 0x8E7C, 0x8E81, 0x8E87, - 0x8E85, 0x8E84, 0x8E8B, 0x8E8A, - 0x8E93, 0x8E91, 0x8E94, 0x8E99, - 0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, - 0x8EC6, 0x8EB1, 0x8EBE, 0x8EC5, - 0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, /* E760 */ - 0x8EFC, 0x8EFB, 0x8EEB, 0x8EFE, - 0x8F0A, 0x8F05, 0x8F15, 0x8F12, - 0x8F19, 0x8F13, 0x8F1C, 0x8F1F, - 0x8F1B, 0x8F0C, 0x8F26, 0x8F33, - 0x8F3B, 0x8F39, 0x8F45, 0x8F42, - 0x8F3E, 0x8F4C, 0x8F49, 0x8F46, - 0x8F4E, 0x8F57, 0x8F5C, 0x0000, - 0x8F62, 0x8F63, 0x8F64, 0x8F9C, /* E780 */ - 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF, - 0x8FB7, 0x8FDA, 0x8FE5, 0x8FE2, - 0x8FEA, 0x8FEF, 0x9087, 0x8FF4, - 0x9005, 0x8FF9, 0x8FFA, 0x9011, - 0x9015, 0x9021, 0x900D, 0x901E, - 0x9016, 0x900B, 0x9027, 0x9036, - 0x9035, 0x9039, 0x8FF8, 0x904F, - 0x9050, 0x9051, 0x9052, 0x900E, /* E7A0 */ - 0x9049, 0x903E, 0x9056, 0x9058, - 0x905E, 0x9068, 0x906F, 0x9076, - 0x96A8, 0x9072, 0x9082, 0x907D, - 0x9081, 0x9080, 0x908A, 0x9089, - 0x908F, 0x90A8, 0x90AF, 0x90B1, - 0x90B5, 0x90E2, 0x90E4, 0x6248, - 0x90DB, 0x9102, 0x9112, 0x9119, - 0x9132, 0x9130, 0x914A, 0x9156, /* E7C0 */ - 0x9158, 0x9163, 0x9165, 0x9169, - 0x9173, 0x9172, 0x918B, 0x9189, - 0x9182, 0x91A2, 0x91AB, 0x91AF, - 0x91AA, 0x91B5, 0x91B4, 0x91BA, - 0x91C0, 0x91C1, 0x91C9, 0x91CB, - 0x91D0, 0x91D6, 0x91DF, 0x91E1, - 0x91DB, 0x91FC, 0x91F5, 0x91F6, - 0x921E, 0x91FF, 0x9214, 0x922C, /* E7E0 */ - 0x9215, 0x9211, 0x925E, 0x9257, - 0x9245, 0x9249, 0x9264, 0x9248, - 0x9295, 0x923F, 0x924B, 0x9250, - 0x929C, 0x9296, 0x9293, 0x929B, - 0x925A, 0x92CF, 0x92B9, 0x92B7, - 0x92E9, 0x930F, 0x92FA, 0x9344, - 0x932E, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x9319, 0x9322, 0x931A, 0x9323, /* E840 */ - 0x933A, 0x9335, 0x933B, 0x935C, - 0x9360, 0x937C, 0x936E, 0x9356, - 0x93B0, 0x93AC, 0x93AD, 0x9394, - 0x93B9, 0x93D6, 0x93D7, 0x93E8, - 0x93E5, 0x93D8, 0x93C3, 0x93DD, - 0x93D0, 0x93C8, 0x93E4, 0x941A, - 0x9414, 0x9413, 0x9403, 0x9407, - 0x9410, 0x9436, 0x942B, 0x9435, /* E860 */ - 0x9421, 0x943A, 0x9441, 0x9452, - 0x9444, 0x945B, 0x9460, 0x9462, - 0x945E, 0x946A, 0x9229, 0x9470, - 0x9475, 0x9477, 0x947D, 0x945A, - 0x947C, 0x947E, 0x9481, 0x947F, - 0x9582, 0x9587, 0x958A, 0x9594, - 0x9596, 0x9598, 0x9599, 0x0000, - 0x95A0, 0x95A8, 0x95A7, 0x95AD, /* E880 */ - 0x95BC, 0x95BB, 0x95B9, 0x95BE, - 0x95CA, 0x6FF6, 0x95C3, 0x95CD, - 0x95CC, 0x95D5, 0x95D4, 0x95D6, - 0x95DC, 0x95E1, 0x95E5, 0x95E2, - 0x9621, 0x9628, 0x962E, 0x962F, - 0x9642, 0x964C, 0x964F, 0x964B, - 0x9677, 0x965C, 0x965E, 0x965D, - 0x965F, 0x9666, 0x9672, 0x966C, /* E8A0 */ - 0x968D, 0x9698, 0x9695, 0x9697, - 0x96AA, 0x96A7, 0x96B1, 0x96B2, - 0x96B0, 0x96B4, 0x96B6, 0x96B8, - 0x96B9, 0x96CE, 0x96CB, 0x96C9, - 0x96CD, 0x894D, 0x96DC, 0x970D, - 0x96D5, 0x96F9, 0x9704, 0x9706, - 0x9708, 0x9713, 0x970E, 0x9711, - 0x970F, 0x9716, 0x9719, 0x9724, /* E8C0 */ - 0x972A, 0x9730, 0x9739, 0x973D, - 0x973E, 0x9744, 0x9746, 0x9748, - 0x9742, 0x9749, 0x975C, 0x9760, - 0x9764, 0x9766, 0x9768, 0x52D2, - 0x976B, 0x9771, 0x9779, 0x9785, - 0x977C, 0x9781, 0x977A, 0x9786, - 0x978B, 0x978F, 0x9790, 0x979C, - 0x97A8, 0x97A6, 0x97A3, 0x97B3, /* E8E0 */ - 0x97B4, 0x97C3, 0x97C6, 0x97C8, - 0x97CB, 0x97DC, 0x97ED, 0x9F4F, - 0x97F2, 0x7ADF, 0x97F6, 0x97F5, - 0x980F, 0x980C, 0x9838, 0x9824, - 0x9821, 0x9837, 0x983D, 0x9846, - 0x984F, 0x984B, 0x986B, 0x986F, - 0x9870, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x9871, 0x9874, 0x9873, 0x98AA, /* E940 */ - 0x98AF, 0x98B1, 0x98B6, 0x98C4, - 0x98C3, 0x98C6, 0x98E9, 0x98EB, - 0x9903, 0x9909, 0x9912, 0x9914, - 0x9918, 0x9921, 0x991D, 0x991E, - 0x9924, 0x9920, 0x992C, 0x992E, - 0x993D, 0x993E, 0x9942, 0x9949, - 0x9945, 0x9950, 0x994B, 0x9951, - 0x9952, 0x994C, 0x9955, 0x9997, /* E960 */ - 0x9998, 0x99A5, 0x99AD, 0x99AE, - 0x99BC, 0x99DF, 0x99DB, 0x99DD, - 0x99D8, 0x99D1, 0x99ED, 0x99EE, - 0x99F1, 0x99F2, 0x99FB, 0x99F8, - 0x9A01, 0x9A0F, 0x9A05, 0x99E2, - 0x9A19, 0x9A2B, 0x9A37, 0x9A45, - 0x9A42, 0x9A40, 0x9A43, 0x0000, - 0x9A3E, 0x9A55, 0x9A4D, 0x9A5B, /* E980 */ - 0x9A57, 0x9A5F, 0x9A62, 0x9A65, - 0x9A64, 0x9A69, 0x9A6B, 0x9A6A, - 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, - 0x9ACF, 0x9AD1, 0x9AD3, 0x9AD4, - 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, - 0x9AE6, 0x9AEF, 0x9AEB, 0x9AEE, - 0x9AF4, 0x9AF1, 0x9AF7, 0x9AFB, - 0x9B06, 0x9B18, 0x9B1A, 0x9B1F, /* E9A0 */ - 0x9B22, 0x9B23, 0x9B25, 0x9B27, - 0x9B28, 0x9B29, 0x9B2A, 0x9B2E, - 0x9B2F, 0x9B32, 0x9B44, 0x9B43, - 0x9B4F, 0x9B4D, 0x9B4E, 0x9B51, - 0x9B58, 0x9B74, 0x9B93, 0x9B83, - 0x9B91, 0x9B96, 0x9B97, 0x9B9F, - 0x9BA0, 0x9BA8, 0x9BB4, 0x9BC0, - 0x9BCA, 0x9BB9, 0x9BC6, 0x9BCF, /* E9C0 */ - 0x9BD1, 0x9BD2, 0x9BE3, 0x9BE2, - 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, - 0x9BF2, 0x9BF1, 0x9BF0, 0x9C15, - 0x9C14, 0x9C09, 0x9C13, 0x9C0C, - 0x9C06, 0x9C08, 0x9C12, 0x9C0A, - 0x9C04, 0x9C2E, 0x9C1B, 0x9C25, - 0x9C24, 0x9C21, 0x9C30, 0x9C47, - 0x9C32, 0x9C46, 0x9C3E, 0x9C5A, /* E9E0 */ - 0x9C60, 0x9C67, 0x9C76, 0x9C78, - 0x9CE7, 0x9CEC, 0x9CF0, 0x9D09, - 0x9D08, 0x9CEB, 0x9D03, 0x9D06, - 0x9D2A, 0x9D26, 0x9DAF, 0x9D23, - 0x9D1F, 0x9D44, 0x9D15, 0x9D12, - 0x9D41, 0x9D3F, 0x9D3E, 0x9D46, - 0x9D48, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EA00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EA20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x9D5D, 0x9D5E, 0x9D64, 0x9D51, /* EA40 */ - 0x9D50, 0x9D59, 0x9D72, 0x9D89, - 0x9D87, 0x9DAB, 0x9D6F, 0x9D7A, - 0x9D9A, 0x9DA4, 0x9DA9, 0x9DB2, - 0x9DC4, 0x9DC1, 0x9DBB, 0x9DB8, - 0x9DBA, 0x9DC6, 0x9DCF, 0x9DC2, - 0x9DD9, 0x9DD3, 0x9DF8, 0x9DE6, - 0x9DED, 0x9DEF, 0x9DFD, 0x9E1A, - 0x9E1B, 0x9E1E, 0x9E75, 0x9E79, /* EA60 */ - 0x9E7D, 0x9E81, 0x9E88, 0x9E8B, - 0x9E8C, 0x9E92, 0x9E95, 0x9E91, - 0x9E9D, 0x9EA5, 0x9EA9, 0x9EB8, - 0x9EAA, 0x9EAD, 0x9761, 0x9ECC, - 0x9ECE, 0x9ECF, 0x9ED0, 0x9ED4, - 0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, - 0x9EE5, 0x9EE8, 0x9EEF, 0x0000, - 0x9EF4, 0x9EF6, 0x9EF7, 0x9EF9, /* EA80 */ - 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07, - 0x9F08, 0x76B7, 0x9F15, 0x9F21, - 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52, - 0x9F54, 0x9F63, 0x9F5F, 0x9F60, - 0x9F61, 0x9F66, 0x9F67, 0x9F6C, - 0x9F6A, 0x9F77, 0x9F72, 0x9F76, - 0x9F95, 0x9F9C, 0x9FA0, 0x582F, - 0x69C7, 0x9059, 0x7464, 0x51DC, /* EAA0 */ - 0x7199, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EAC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EAE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EB00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EB20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EB40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EB60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EB80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EBA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EBC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EBE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EC00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EC20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EC40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EC60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EC80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ECA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ECC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ECE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ED00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ED20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x7E8A, 0x891C, 0x9348, 0x9288, /* ED40 */ - 0x84DC, 0x4FC9, 0x70BB, 0x6631, - 0x68C8, 0x92F9, 0x66FB, 0x5F45, - 0x4E28, 0x4EE1, 0x4EFC, 0x4F00, - 0x4F03, 0x4F39, 0x4F56, 0x4F92, - 0x4F8A, 0x4F9A, 0x4F94, 0x4FCD, - 0x5040, 0x5022, 0x4FFF, 0x501E, - 0x5046, 0x5070, 0x5042, 0x5094, - 0x50F4, 0x50D8, 0x514A, 0x5164, /* ED60 */ - 0x519D, 0x51BE, 0x51EC, 0x5215, - 0x529C, 0x52A6, 0x52C0, 0x52DB, - 0x5300, 0x5307, 0x5324, 0x5372, - 0x5393, 0x53B2, 0x53DD, 0xFA0E, - 0x549C, 0x548A, 0x54A9, 0x54FF, - 0x5586, 0x5759, 0x5765, 0x57AC, - 0x57C8, 0x57C7, 0xFA0F, 0x0000, - 0xFA10, 0x589E, 0x58B2, 0x590B, /* ED80 */ - 0x5953, 0x595B, 0x595D, 0x5963, - 0x59A4, 0x59BA, 0x5B56, 0x5BC0, - 0x752F, 0x5BD8, 0x5BEC, 0x5C1E, - 0x5CA6, 0x5CBA, 0x5CF5, 0x5D27, - 0x5D53, 0xFA11, 0x5D42, 0x5D6D, - 0x5DB8, 0x5DB9, 0x5DD0, 0x5F21, - 0x5F34, 0x5F67, 0x5FB7, 0x5FDE, - 0x605D, 0x6085, 0x608A, 0x60DE, /* EDA0 */ - 0x60D5, 0x6120, 0x60F2, 0x6111, - 0x6137, 0x6130, 0x6198, 0x6213, - 0x62A6, 0x63F5, 0x6460, 0x649D, - 0x64CE, 0x654E, 0x6600, 0x6615, - 0x663B, 0x6609, 0x662E, 0x661E, - 0x6624, 0x6665, 0x6657, 0x6659, - 0xFA12, 0x6673, 0x6699, 0x66A0, - 0x66B2, 0x66BF, 0x66FA, 0x670E, /* EDC0 */ - 0xF929, 0x6766, 0x67BB, 0x6852, - 0x67C0, 0x6801, 0x6844, 0x68CF, - 0xFA13, 0x6968, 0xFA14, 0x6998, - 0x69E2, 0x6A30, 0x6A6B, 0x6A46, - 0x6A73, 0x6A7E, 0x6AE2, 0x6AE4, - 0x6BD6, 0x6C3F, 0x6C5C, 0x6C86, - 0x6C6F, 0x6CDA, 0x6D04, 0x6D87, - 0x6D6F, 0x6D96, 0x6DAC, 0x6DCF, /* EDE0 */ - 0x6DF8, 0x6DF2, 0x6DFC, 0x6E39, - 0x6E5C, 0x6E27, 0x6E3C, 0x6EBF, - 0x6F88, 0x6FB5, 0x6FF5, 0x7005, - 0x7007, 0x7028, 0x7085, 0x70AB, - 0x710F, 0x7104, 0x715C, 0x7146, - 0x7147, 0xFA15, 0x71C1, 0x71FE, - 0x72B1, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EE00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EE20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x72BE, 0x7324, 0xFA16, 0x7377, /* EE40 */ - 0x73BD, 0x73C9, 0x73D6, 0x73E3, - 0x73D2, 0x7407, 0x73F5, 0x7426, - 0x742A, 0x7429, 0x742E, 0x7462, - 0x7489, 0x749F, 0x7501, 0x756F, - 0x7682, 0x769C, 0x769E, 0x769B, - 0x76A6, 0xFA17, 0x7746, 0x52AF, - 0x7821, 0x784E, 0x7864, 0x787A, - 0x7930, 0xFA18, 0xFA19, 0xFA1A, /* EE60 */ - 0x7994, 0xFA1B, 0x799B, 0x7AD1, - 0x7AE7, 0xFA1C, 0x7AEB, 0x7B9E, - 0xFA1D, 0x7D48, 0x7D5C, 0x7DB7, - 0x7DA0, 0x7DD6, 0x7E52, 0x7F47, - 0x7FA1, 0xFA1E, 0x8301, 0x8362, - 0x837F, 0x83C7, 0x83F6, 0x8448, - 0x84B4, 0x8553, 0x8559, 0x0000, - 0x856B, 0xFA1F, 0x85B0, 0xFA20, /* EE80 */ - 0xFA21, 0x8807, 0x88F5, 0x8A12, - 0x8A37, 0x8A79, 0x8AA7, 0x8ABE, - 0x8ADF, 0xFA22, 0x8AF6, 0x8B53, - 0x8B7F, 0x8CF0, 0x8CF4, 0x8D12, - 0x8D76, 0xFA23, 0x8ECF, 0xFA24, - 0xFA25, 0x9067, 0x90DE, 0xFA26, - 0x9115, 0x9127, 0x91DA, 0x91D7, - 0x91DE, 0x91ED, 0x91EE, 0x91E4, /* EEA0 */ - 0x91E5, 0x9206, 0x9210, 0x920A, - 0x923A, 0x9240, 0x923C, 0x924E, - 0x9259, 0x9251, 0x9239, 0x9267, - 0x92A7, 0x9277, 0x9278, 0x92E7, - 0x92D7, 0x92D9, 0x92D0, 0xFA27, - 0x92D5, 0x92E0, 0x92D3, 0x9325, - 0x9321, 0x92FB, 0xFA28, 0x931E, - 0x92FF, 0x931D, 0x9302, 0x9370, /* EEC0 */ - 0x9357, 0x93A4, 0x93C6, 0x93DE, - 0x93F8, 0x9431, 0x9445, 0x9448, - 0x9592, 0xF9DC, 0xFA29, 0x969D, - 0x96AF, 0x9733, 0x973B, 0x9743, - 0x974D, 0x974F, 0x9751, 0x9755, - 0x9857, 0x9865, 0xFA2A, 0xFA2B, - 0x9927, 0xFA2C, 0x999E, 0x9A4E, - 0x9AD9, 0x9ADC, 0x9B75, 0x9B72, /* EEE0 */ - 0x9B8F, 0x9BB1, 0x9BBB, 0x9C00, - 0x9D70, 0x9D6B, 0xFA2D, 0x9E19, - 0x9ED1, 0x0000, 0x0000, 0x2170, - 0x2171, 0x2172, 0x2173, 0x2174, - 0x2175, 0x2176, 0x2177, 0x2178, - 0x2179, 0xFFE2, 0xFFE4, 0xFF07, - 0xFF02, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EF00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EF20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EF40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EF60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EF80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EFA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EFC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EFE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0xE000, 0xE001, 0xE002, 0xE003, /* F040 */ - 0xE004, 0xE005, 0xE006, 0xE007, - 0xE008, 0xE009, 0xE00A, 0xE00B, - 0xE00C, 0xE00D, 0xE00E, 0xE00F, - 0xE010, 0xE011, 0xE012, 0xE013, - 0xE014, 0xE015, 0xE016, 0xE017, - 0xE018, 0xE019, 0xE01A, 0xE01B, - 0xE01C, 0xE01D, 0xE01E, 0xE01F, - 0xE020, 0xE021, 0xE022, 0xE023, /* F060 */ - 0xE024, 0xE025, 0xE026, 0xE027, - 0xE028, 0xE029, 0xE02A, 0xE02B, - 0xE02C, 0xE02D, 0xE02E, 0xE02F, - 0xE030, 0xE031, 0xE032, 0xE033, - 0xE034, 0xE035, 0xE036, 0xE037, - 0xE038, 0xE039, 0xE03A, 0xE03B, - 0xE03C, 0xE03D, 0xE03E, 0x0000, - 0xE03F, 0xE040, 0xE041, 0xE042, /* F080 */ - 0xE043, 0xE044, 0xE045, 0xE046, - 0xE047, 0xE048, 0xE049, 0xE04A, - 0xE04B, 0xE04C, 0xE04D, 0xE04E, - 0xE04F, 0xE050, 0xE051, 0xE052, - 0xE053, 0xE054, 0xE055, 0xE056, - 0xE057, 0xE058, 0xE059, 0xE05A, - 0xE05B, 0xE05C, 0xE05D, 0xE05E, - 0xE05F, 0xE060, 0xE061, 0xE062, /* F0A0 */ - 0xE063, 0xE064, 0xE065, 0xE066, - 0xE067, 0xE068, 0xE069, 0xE06A, - 0xE06B, 0xE06C, 0xE06D, 0xE06E, - 0xE06F, 0xE070, 0xE071, 0xE072, - 0xE073, 0xE074, 0xE075, 0xE076, - 0xE077, 0xE078, 0xE079, 0xE07A, - 0xE07B, 0xE07C, 0xE07D, 0xE07E, - 0xE07F, 0xE080, 0xE081, 0xE082, /* F0C0 */ - 0xE083, 0xE084, 0xE085, 0xE086, - 0xE087, 0xE088, 0xE089, 0xE08A, - 0xE08B, 0xE08C, 0xE08D, 0xE08E, - 0xE08F, 0xE090, 0xE091, 0xE092, - 0xE093, 0xE094, 0xE095, 0xE096, - 0xE097, 0xE098, 0xE099, 0xE09A, - 0xE09B, 0xE09C, 0xE09D, 0xE09E, - 0xE09F, 0xE0A0, 0xE0A1, 0xE0A2, /* F0E0 */ - 0xE0A3, 0xE0A4, 0xE0A5, 0xE0A6, - 0xE0A7, 0xE0A8, 0xE0A9, 0xE0AA, - 0xE0AB, 0xE0AC, 0xE0AD, 0xE0AE, - 0xE0AF, 0xE0B0, 0xE0B1, 0xE0B2, - 0xE0B3, 0xE0B4, 0xE0B5, 0xE0B6, - 0xE0B7, 0xE0B8, 0xE0B9, 0xE0BA, - 0xE0BB, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0xE0BC, 0xE0BD, 0xE0BE, 0xE0BF, /* F140 */ - 0xE0C0, 0xE0C1, 0xE0C2, 0xE0C3, - 0xE0C4, 0xE0C5, 0xE0C6, 0xE0C7, - 0xE0C8, 0xE0C9, 0xE0CA, 0xE0CB, - 0xE0CC, 0xE0CD, 0xE0CE, 0xE0CF, - 0xE0D0, 0xE0D1, 0xE0D2, 0xE0D3, - 0xE0D4, 0xE0D5, 0xE0D6, 0xE0D7, - 0xE0D8, 0xE0D9, 0xE0DA, 0xE0DB, - 0xE0DC, 0xE0DD, 0xE0DE, 0xE0DF, /* F160 */ - 0xE0E0, 0xE0E1, 0xE0E2, 0xE0E3, - 0xE0E4, 0xE0E5, 0xE0E6, 0xE0E7, - 0xE0E8, 0xE0E9, 0xE0EA, 0xE0EB, - 0xE0EC, 0xE0ED, 0xE0EE, 0xE0EF, - 0xE0F0, 0xE0F1, 0xE0F2, 0xE0F3, - 0xE0F4, 0xE0F5, 0xE0F6, 0xE0F7, - 0xE0F8, 0xE0F9, 0xE0FA, 0x0000, - 0xE0FB, 0xE0FC, 0xE0FD, 0xE0FE, /* F180 */ - 0xE0FF, 0xE100, 0xE101, 0xE102, - 0xE103, 0xE104, 0xE105, 0xE106, - 0xE107, 0xE108, 0xE109, 0xE10A, - 0xE10B, 0xE10C, 0xE10D, 0xE10E, - 0xE10F, 0xE110, 0xE111, 0xE112, - 0xE113, 0xE114, 0xE115, 0xE116, - 0xE117, 0xE118, 0xE119, 0xE11A, - 0xE11B, 0xE11C, 0xE11D, 0xE11E, /* F1A0 */ - 0xE11F, 0xE120, 0xE121, 0xE122, - 0xE123, 0xE124, 0xE125, 0xE126, - 0xE127, 0xE128, 0xE129, 0xE12A, - 0xE12B, 0xE12C, 0xE12D, 0xE12E, - 0xE12F, 0xE130, 0xE131, 0xE132, - 0xE133, 0xE134, 0xE135, 0xE136, - 0xE137, 0xE138, 0xE139, 0xE13A, - 0xE13B, 0xE13C, 0xE13D, 0xE13E, /* F1C0 */ - 0xE13F, 0xE140, 0xE141, 0xE142, - 0xE143, 0xE144, 0xE145, 0xE146, - 0xE147, 0xE148, 0xE149, 0xE14A, - 0xE14B, 0xE14C, 0xE14D, 0xE14E, - 0xE14F, 0xE150, 0xE151, 0xE152, - 0xE153, 0xE154, 0xE155, 0xE156, - 0xE157, 0xE158, 0xE159, 0xE15A, - 0xE15B, 0xE15C, 0xE15D, 0xE15E, /* F1E0 */ - 0xE15F, 0xE160, 0xE161, 0xE162, - 0xE163, 0xE164, 0xE165, 0xE166, - 0xE167, 0xE168, 0xE169, 0xE16A, - 0xE16B, 0xE16C, 0xE16D, 0xE16E, - 0xE16F, 0xE170, 0xE171, 0xE172, - 0xE173, 0xE174, 0xE175, 0xE176, - 0xE177, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0xE178, 0xE179, 0xE17A, 0xE17B, /* F240 */ - 0xE17C, 0xE17D, 0xE17E, 0xE17F, - 0xE180, 0xE181, 0xE182, 0xE183, - 0xE184, 0xE185, 0xE186, 0xE187, - 0xE188, 0xE189, 0xE18A, 0xE18B, - 0xE18C, 0xE18D, 0xE18E, 0xE18F, - 0xE190, 0xE191, 0xE192, 0xE193, - 0xE194, 0xE195, 0xE196, 0xE197, - 0xE198, 0xE199, 0xE19A, 0xE19B, /* F260 */ - 0xE19C, 0xE19D, 0xE19E, 0xE19F, - 0xE1A0, 0xE1A1, 0xE1A2, 0xE1A3, - 0xE1A4, 0xE1A5, 0xE1A6, 0xE1A7, - 0xE1A8, 0xE1A9, 0xE1AA, 0xE1AB, - 0xE1AC, 0xE1AD, 0xE1AE, 0xE1AF, - 0xE1B0, 0xE1B1, 0xE1B2, 0xE1B3, - 0xE1B4, 0xE1B5, 0xE1B6, 0x0000, - 0xE1B7, 0xE1B8, 0xE1B9, 0xE1BA, /* F280 */ - 0xE1BB, 0xE1BC, 0xE1BD, 0xE1BE, - 0xE1BF, 0xE1C0, 0xE1C1, 0xE1C2, - 0xE1C3, 0xE1C4, 0xE1C5, 0xE1C6, - 0xE1C7, 0xE1C8, 0xE1C9, 0xE1CA, - 0xE1CB, 0xE1CC, 0xE1CD, 0xE1CE, - 0xE1CF, 0xE1D0, 0xE1D1, 0xE1D2, - 0xE1D3, 0xE1D4, 0xE1D5, 0xE1D6, - 0xE1D7, 0xE1D8, 0xE1D9, 0xE1DA, /* F2A0 */ - 0xE1DB, 0xE1DC, 0xE1DD, 0xE1DE, - 0xE1DF, 0xE1E0, 0xE1E1, 0xE1E2, - 0xE1E3, 0xE1E4, 0xE1E5, 0xE1E6, - 0xE1E7, 0xE1E8, 0xE1E9, 0xE1EA, - 0xE1EB, 0xE1EC, 0xE1ED, 0xE1EE, - 0xE1EF, 0xE1F0, 0xE1F1, 0xE1F2, - 0xE1F3, 0xE1F4, 0xE1F5, 0xE1F6, - 0xE1F7, 0xE1F8, 0xE1F9, 0xE1FA, /* F2C0 */ - 0xE1FB, 0xE1FC, 0xE1FD, 0xE1FE, - 0xE1FF, 0xE200, 0xE201, 0xE202, - 0xE203, 0xE204, 0xE205, 0xE206, - 0xE207, 0xE208, 0xE209, 0xE20A, - 0xE20B, 0xE20C, 0xE20D, 0xE20E, - 0xE20F, 0xE210, 0xE211, 0xE212, - 0xE213, 0xE214, 0xE215, 0xE216, - 0xE217, 0xE218, 0xE219, 0xE21A, /* F2E0 */ - 0xE21B, 0xE21C, 0xE21D, 0xE21E, - 0xE21F, 0xE220, 0xE221, 0xE222, - 0xE223, 0xE224, 0xE225, 0xE226, - 0xE227, 0xE228, 0xE229, 0xE22A, - 0xE22B, 0xE22C, 0xE22D, 0xE22E, - 0xE22F, 0xE230, 0xE231, 0xE232, - 0xE233, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0xE234, 0xE235, 0xE236, 0xE237, /* F340 */ - 0xE238, 0xE239, 0xE23A, 0xE23B, - 0xE23C, 0xE23D, 0xE23E, 0xE23F, - 0xE240, 0xE241, 0xE242, 0xE243, - 0xE244, 0xE245, 0xE246, 0xE247, - 0xE248, 0xE249, 0xE24A, 0xE24B, - 0xE24C, 0xE24D, 0xE24E, 0xE24F, - 0xE250, 0xE251, 0xE252, 0xE253, - 0xE254, 0xE255, 0xE256, 0xE257, /* F360 */ - 0xE258, 0xE259, 0xE25A, 0xE25B, - 0xE25C, 0xE25D, 0xE25E, 0xE25F, - 0xE260, 0xE261, 0xE262, 0xE263, - 0xE264, 0xE265, 0xE266, 0xE267, - 0xE268, 0xE269, 0xE26A, 0xE26B, - 0xE26C, 0xE26D, 0xE26E, 0xE26F, - 0xE270, 0xE271, 0xE272, 0x0000, - 0xE273, 0xE274, 0xE275, 0xE276, /* F380 */ - 0xE277, 0xE278, 0xE279, 0xE27A, - 0xE27B, 0xE27C, 0xE27D, 0xE27E, - 0xE27F, 0xE280, 0xE281, 0xE282, - 0xE283, 0xE284, 0xE285, 0xE286, - 0xE287, 0xE288, 0xE289, 0xE28A, - 0xE28B, 0xE28C, 0xE28D, 0xE28E, - 0xE28F, 0xE290, 0xE291, 0xE292, - 0xE293, 0xE294, 0xE295, 0xE296, /* F3A0 */ - 0xE297, 0xE298, 0xE299, 0xE29A, - 0xE29B, 0xE29C, 0xE29D, 0xE29E, - 0xE29F, 0xE2A0, 0xE2A1, 0xE2A2, - 0xE2A3, 0xE2A4, 0xE2A5, 0xE2A6, - 0xE2A7, 0xE2A8, 0xE2A9, 0xE2AA, - 0xE2AB, 0xE2AC, 0xE2AD, 0xE2AE, - 0xE2AF, 0xE2B0, 0xE2B1, 0xE2B2, - 0xE2B3, 0xE2B4, 0xE2B5, 0xE2B6, /* F3C0 */ - 0xE2B7, 0xE2B8, 0xE2B9, 0xE2BA, - 0xE2BB, 0xE2BC, 0xE2BD, 0xE2BE, - 0xE2BF, 0xE2C0, 0xE2C1, 0xE2C2, - 0xE2C3, 0xE2C4, 0xE2C5, 0xE2C6, - 0xE2C7, 0xE2C8, 0xE2C9, 0xE2CA, - 0xE2CB, 0xE2CC, 0xE2CD, 0xE2CE, - 0xE2CF, 0xE2D0, 0xE2D1, 0xE2D2, - 0xE2D3, 0xE2D4, 0xE2D5, 0xE2D6, /* F3E0 */ - 0xE2D7, 0xE2D8, 0xE2D9, 0xE2DA, - 0xE2DB, 0xE2DC, 0xE2DD, 0xE2DE, - 0xE2DF, 0xE2E0, 0xE2E1, 0xE2E2, - 0xE2E3, 0xE2E4, 0xE2E5, 0xE2E6, - 0xE2E7, 0xE2E8, 0xE2E9, 0xE2EA, - 0xE2EB, 0xE2EC, 0xE2ED, 0xE2EE, - 0xE2EF, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0xE2F0, 0xE2F1, 0xE2F2, 0xE2F3, /* F440 */ - 0xE2F4, 0xE2F5, 0xE2F6, 0xE2F7, - 0xE2F8, 0xE2F9, 0xE2FA, 0xE2FB, - 0xE2FC, 0xE2FD, 0xE2FE, 0xE2FF, - 0xE300, 0xE301, 0xE302, 0xE303, - 0xE304, 0xE305, 0xE306, 0xE307, - 0xE308, 0xE309, 0xE30A, 0xE30B, - 0xE30C, 0xE30D, 0xE30E, 0xE30F, - 0xE310, 0xE311, 0xE312, 0xE313, /* F460 */ - 0xE314, 0xE315, 0xE316, 0xE317, - 0xE318, 0xE319, 0xE31A, 0xE31B, - 0xE31C, 0xE31D, 0xE31E, 0xE31F, - 0xE320, 0xE321, 0xE322, 0xE323, - 0xE324, 0xE325, 0xE326, 0xE327, - 0xE328, 0xE329, 0xE32A, 0xE32B, - 0xE32C, 0xE32D, 0xE32E, 0x0000, - 0xE32F, 0xE330, 0xE331, 0xE332, /* F480 */ - 0xE333, 0xE334, 0xE335, 0xE336, - 0xE337, 0xE338, 0xE339, 0xE33A, - 0xE33B, 0xE33C, 0xE33D, 0xE33E, - 0xE33F, 0xE340, 0xE341, 0xE342, - 0xE343, 0xE344, 0xE345, 0xE346, - 0xE347, 0xE348, 0xE349, 0xE34A, - 0xE34B, 0xE34C, 0xE34D, 0xE34E, - 0xE34F, 0xE350, 0xE351, 0xE352, /* F4A0 */ - 0xE353, 0xE354, 0xE355, 0xE356, - 0xE357, 0xE358, 0xE359, 0xE35A, - 0xE35B, 0xE35C, 0xE35D, 0xE35E, - 0xE35F, 0xE360, 0xE361, 0xE362, - 0xE363, 0xE364, 0xE365, 0xE366, - 0xE367, 0xE368, 0xE369, 0xE36A, - 0xE36B, 0xE36C, 0xE36D, 0xE36E, - 0xE36F, 0xE370, 0xE371, 0xE372, /* F4C0 */ - 0xE373, 0xE374, 0xE375, 0xE376, - 0xE377, 0xE378, 0xE379, 0xE37A, - 0xE37B, 0xE37C, 0xE37D, 0xE37E, - 0xE37F, 0xE380, 0xE381, 0xE382, - 0xE383, 0xE384, 0xE385, 0xE386, - 0xE387, 0xE388, 0xE389, 0xE38A, - 0xE38B, 0xE38C, 0xE38D, 0xE38E, - 0xE38F, 0xE390, 0xE391, 0xE392, /* F4E0 */ - 0xE393, 0xE394, 0xE395, 0xE396, - 0xE397, 0xE398, 0xE399, 0xE39A, - 0xE39B, 0xE39C, 0xE39D, 0xE39E, - 0xE39F, 0xE3A0, 0xE3A1, 0xE3A2, - 0xE3A3, 0xE3A4, 0xE3A5, 0xE3A6, - 0xE3A7, 0xE3A8, 0xE3A9, 0xE3AA, - 0xE3AB, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0xE3AC, 0xE3AD, 0xE3AE, 0xE3AF, /* F540 */ - 0xE3B0, 0xE3B1, 0xE3B2, 0xE3B3, - 0xE3B4, 0xE3B5, 0xE3B6, 0xE3B7, - 0xE3B8, 0xE3B9, 0xE3BA, 0xE3BB, - 0xE3BC, 0xE3BD, 0xE3BE, 0xE3BF, - 0xE3C0, 0xE3C1, 0xE3C2, 0xE3C3, - 0xE3C4, 0xE3C5, 0xE3C6, 0xE3C7, - 0xE3C8, 0xE3C9, 0xE3CA, 0xE3CB, - 0xE3CC, 0xE3CD, 0xE3CE, 0xE3CF, /* F560 */ - 0xE3D0, 0xE3D1, 0xE3D2, 0xE3D3, - 0xE3D4, 0xE3D5, 0xE3D6, 0xE3D7, - 0xE3D8, 0xE3D9, 0xE3DA, 0xE3DB, - 0xE3DC, 0xE3DD, 0xE3DE, 0xE3DF, - 0xE3E0, 0xE3E1, 0xE3E2, 0xE3E3, - 0xE3E4, 0xE3E5, 0xE3E6, 0xE3E7, - 0xE3E8, 0xE3E9, 0xE3EA, 0x0000, - 0xE3EB, 0xE3EC, 0xE3ED, 0xE3EE, /* F580 */ - 0xE3EF, 0xE3F0, 0xE3F1, 0xE3F2, - 0xE3F3, 0xE3F4, 0xE3F5, 0xE3F6, - 0xE3F7, 0xE3F8, 0xE3F9, 0xE3FA, - 0xE3FB, 0xE3FC, 0xE3FD, 0xE3FE, - 0xE3FF, 0xE400, 0xE401, 0xE402, - 0xE403, 0xE404, 0xE405, 0xE406, - 0xE407, 0xE408, 0xE409, 0xE40A, - 0xE40B, 0xE40C, 0xE40D, 0xE40E, /* F5A0 */ - 0xE40F, 0xE410, 0xE411, 0xE412, - 0xE413, 0xE414, 0xE415, 0xE416, - 0xE417, 0xE418, 0xE419, 0xE41A, - 0xE41B, 0xE41C, 0xE41D, 0xE41E, - 0xE41F, 0xE420, 0xE421, 0xE422, - 0xE423, 0xE424, 0xE425, 0xE426, - 0xE427, 0xE428, 0xE429, 0xE42A, - 0xE42B, 0xE42C, 0xE42D, 0xE42E, /* F5C0 */ - 0xE42F, 0xE430, 0xE431, 0xE432, - 0xE433, 0xE434, 0xE435, 0xE436, - 0xE437, 0xE438, 0xE439, 0xE43A, - 0xE43B, 0xE43C, 0xE43D, 0xE43E, - 0xE43F, 0xE440, 0xE441, 0xE442, - 0xE443, 0xE444, 0xE445, 0xE446, - 0xE447, 0xE448, 0xE449, 0xE44A, - 0xE44B, 0xE44C, 0xE44D, 0xE44E, /* F5E0 */ - 0xE44F, 0xE450, 0xE451, 0xE452, - 0xE453, 0xE454, 0xE455, 0xE456, - 0xE457, 0xE458, 0xE459, 0xE45A, - 0xE45B, 0xE45C, 0xE45D, 0xE45E, - 0xE45F, 0xE460, 0xE461, 0xE462, - 0xE463, 0xE464, 0xE465, 0xE466, - 0xE467, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0xE468, 0xE469, 0xE46A, 0xE46B, /* F640 */ - 0xE46C, 0xE46D, 0xE46E, 0xE46F, - 0xE470, 0xE471, 0xE472, 0xE473, - 0xE474, 0xE475, 0xE476, 0xE477, - 0xE478, 0xE479, 0xE47A, 0xE47B, - 0xE47C, 0xE47D, 0xE47E, 0xE47F, - 0xE480, 0xE481, 0xE482, 0xE483, - 0xE484, 0xE485, 0xE486, 0xE487, - 0xE488, 0xE489, 0xE48A, 0xE48B, /* F660 */ - 0xE48C, 0xE48D, 0xE48E, 0xE48F, - 0xE490, 0xE491, 0xE492, 0xE493, - 0xE494, 0xE495, 0xE496, 0xE497, - 0xE498, 0xE499, 0xE49A, 0xE49B, - 0xE49C, 0xE49D, 0xE49E, 0xE49F, - 0xE4A0, 0xE4A1, 0xE4A2, 0xE4A3, - 0xE4A4, 0xE4A5, 0xE4A6, 0x0000, - 0xE4A7, 0xE4A8, 0xE4A9, 0xE4AA, /* F680 */ - 0xE4AB, 0xE4AC, 0xE4AD, 0xE4AE, - 0xE4AF, 0xE4B0, 0xE4B1, 0xE4B2, - 0xE4B3, 0xE4B4, 0xE4B5, 0xE4B6, - 0xE4B7, 0xE4B8, 0xE4B9, 0xE4BA, - 0xE4BB, 0xE4BC, 0xE4BD, 0xE4BE, - 0xE4BF, 0xE4C0, 0xE4C1, 0xE4C2, - 0xE4C3, 0xE4C4, 0xE4C5, 0xE4C6, - 0xE4C7, 0xE4C8, 0xE4C9, 0xE4CA, /* F6A0 */ - 0xE4CB, 0xE4CC, 0xE4CD, 0xE4CE, - 0xE4CF, 0xE4D0, 0xE4D1, 0xE4D2, - 0xE4D3, 0xE4D4, 0xE4D5, 0xE4D6, - 0xE4D7, 0xE4D8, 0xE4D9, 0xE4DA, - 0xE4DB, 0xE4DC, 0xE4DD, 0xE4DE, - 0xE4DF, 0xE4E0, 0xE4E1, 0xE4E2, - 0xE4E3, 0xE4E4, 0xE4E5, 0xE4E6, - 0xE4E7, 0xE4E8, 0xE4E9, 0xE4EA, /* F6C0 */ - 0xE4EB, 0xE4EC, 0xE4ED, 0xE4EE, - 0xE4EF, 0xE4F0, 0xE4F1, 0xE4F2, - 0xE4F3, 0xE4F4, 0xE4F5, 0xE4F6, - 0xE4F7, 0xE4F8, 0xE4F9, 0xE4FA, - 0xE4FB, 0xE4FC, 0xE4FD, 0xE4FE, - 0xE4FF, 0xE500, 0xE501, 0xE502, - 0xE503, 0xE504, 0xE505, 0xE506, - 0xE507, 0xE508, 0xE509, 0xE50A, /* F6E0 */ - 0xE50B, 0xE50C, 0xE50D, 0xE50E, - 0xE50F, 0xE510, 0xE511, 0xE512, - 0xE513, 0xE514, 0xE515, 0xE516, - 0xE517, 0xE518, 0xE519, 0xE51A, - 0xE51B, 0xE51C, 0xE51D, 0xE51E, - 0xE51F, 0xE520, 0xE521, 0xE522, - 0xE523, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0xE524, 0xE525, 0xE526, 0xE527, /* F740 */ - 0xE528, 0xE529, 0xE52A, 0xE52B, - 0xE52C, 0xE52D, 0xE52E, 0xE52F, - 0xE530, 0xE531, 0xE532, 0xE533, - 0xE534, 0xE535, 0xE536, 0xE537, - 0xE538, 0xE539, 0xE53A, 0xE53B, - 0xE53C, 0xE53D, 0xE53E, 0xE53F, - 0xE540, 0xE541, 0xE542, 0xE543, - 0xE544, 0xE545, 0xE546, 0xE547, /* F760 */ - 0xE548, 0xE549, 0xE54A, 0xE54B, - 0xE54C, 0xE54D, 0xE54E, 0xE54F, - 0xE550, 0xE551, 0xE552, 0xE553, - 0xE554, 0xE555, 0xE556, 0xE557, - 0xE558, 0xE559, 0xE55A, 0xE55B, - 0xE55C, 0xE55D, 0xE55E, 0xE55F, - 0xE560, 0xE561, 0xE562, 0x0000, - 0xE563, 0xE564, 0xE565, 0xE566, /* F780 */ - 0xE567, 0xE568, 0xE569, 0xE56A, - 0xE56B, 0xE56C, 0xE56D, 0xE56E, - 0xE56F, 0xE570, 0xE571, 0xE572, - 0xE573, 0xE574, 0xE575, 0xE576, - 0xE577, 0xE578, 0xE579, 0xE57A, - 0xE57B, 0xE57C, 0xE57D, 0xE57E, - 0xE57F, 0xE580, 0xE581, 0xE582, - 0xE583, 0xE584, 0xE585, 0xE586, /* F7A0 */ - 0xE587, 0xE588, 0xE589, 0xE58A, - 0xE58B, 0xE58C, 0xE58D, 0xE58E, - 0xE58F, 0xE590, 0xE591, 0xE592, - 0xE593, 0xE594, 0xE595, 0xE596, - 0xE597, 0xE598, 0xE599, 0xE59A, - 0xE59B, 0xE59C, 0xE59D, 0xE59E, - 0xE59F, 0xE5A0, 0xE5A1, 0xE5A2, - 0xE5A3, 0xE5A4, 0xE5A5, 0xE5A6, /* F7C0 */ - 0xE5A7, 0xE5A8, 0xE5A9, 0xE5AA, - 0xE5AB, 0xE5AC, 0xE5AD, 0xE5AE, - 0xE5AF, 0xE5B0, 0xE5B1, 0xE5B2, - 0xE5B3, 0xE5B4, 0xE5B5, 0xE5B6, - 0xE5B7, 0xE5B8, 0xE5B9, 0xE5BA, - 0xE5BB, 0xE5BC, 0xE5BD, 0xE5BE, - 0xE5BF, 0xE5C0, 0xE5C1, 0xE5C2, - 0xE5C3, 0xE5C4, 0xE5C5, 0xE5C6, /* F7E0 */ - 0xE5C7, 0xE5C8, 0xE5C9, 0xE5CA, - 0xE5CB, 0xE5CC, 0xE5CD, 0xE5CE, - 0xE5CF, 0xE5D0, 0xE5D1, 0xE5D2, - 0xE5D3, 0xE5D4, 0xE5D5, 0xE5D6, - 0xE5D7, 0xE5D8, 0xE5D9, 0xE5DA, - 0xE5DB, 0xE5DC, 0xE5DD, 0xE5DE, - 0xE5DF, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0xE5E0, 0xE5E1, 0xE5E2, 0xE5E3, /* F840 */ - 0xE5E4, 0xE5E5, 0xE5E6, 0xE5E7, - 0xE5E8, 0xE5E9, 0xE5EA, 0xE5EB, - 0xE5EC, 0xE5ED, 0xE5EE, 0xE5EF, - 0xE5F0, 0xE5F1, 0xE5F2, 0xE5F3, - 0xE5F4, 0xE5F5, 0xE5F6, 0xE5F7, - 0xE5F8, 0xE5F9, 0xE5FA, 0xE5FB, - 0xE5FC, 0xE5FD, 0xE5FE, 0xE5FF, - 0xE600, 0xE601, 0xE602, 0xE603, /* F860 */ - 0xE604, 0xE605, 0xE606, 0xE607, - 0xE608, 0xE609, 0xE60A, 0xE60B, - 0xE60C, 0xE60D, 0xE60E, 0xE60F, - 0xE610, 0xE611, 0xE612, 0xE613, - 0xE614, 0xE615, 0xE616, 0xE617, - 0xE618, 0xE619, 0xE61A, 0xE61B, - 0xE61C, 0xE61D, 0xE61E, 0x0000, - 0xE61F, 0xE620, 0xE621, 0xE622, /* F880 */ - 0xE623, 0xE624, 0xE625, 0xE626, - 0xE627, 0xE628, 0xE629, 0xE62A, - 0xE62B, 0xE62C, 0xE62D, 0xE62E, - 0xE62F, 0xE630, 0xE631, 0xE632, - 0xE633, 0xE634, 0xE635, 0xE636, - 0xE637, 0xE638, 0xE639, 0xE63A, - 0xE63B, 0xE63C, 0xE63D, 0xE63E, - 0xE63F, 0xE640, 0xE641, 0xE642, /* F8A0 */ - 0xE643, 0xE644, 0xE645, 0xE646, - 0xE647, 0xE648, 0xE649, 0xE64A, - 0xE64B, 0xE64C, 0xE64D, 0xE64E, - 0xE64F, 0xE650, 0xE651, 0xE652, - 0xE653, 0xE654, 0xE655, 0xE656, - 0xE657, 0xE658, 0xE659, 0xE65A, - 0xE65B, 0xE65C, 0xE65D, 0xE65E, - 0xE65F, 0xE660, 0xE661, 0xE662, /* F8C0 */ - 0xE663, 0xE664, 0xE665, 0xE666, - 0xE667, 0xE668, 0xE669, 0xE66A, - 0xE66B, 0xE66C, 0xE66D, 0xE66E, - 0xE66F, 0xE670, 0xE671, 0xE672, - 0xE673, 0xE674, 0xE675, 0xE676, - 0xE677, 0xE678, 0xE679, 0xE67A, - 0xE67B, 0xE67C, 0xE67D, 0xE67E, - 0xE67F, 0xE680, 0xE681, 0xE682, /* F8E0 */ - 0xE683, 0xE684, 0xE685, 0xE686, - 0xE687, 0xE688, 0xE689, 0xE68A, - 0xE68B, 0xE68C, 0xE68D, 0xE68E, - 0xE68F, 0xE690, 0xE691, 0xE692, - 0xE693, 0xE694, 0xE695, 0xE696, - 0xE697, 0xE698, 0xE699, 0xE69A, - 0xE69B, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0xE69C, 0xE69D, 0xE69E, 0xE69F, /* F940 */ - 0xE6A0, 0xE6A1, 0xE6A2, 0xE6A3, - 0xE6A4, 0xE6A5, 0xE6A6, 0xE6A7, - 0xE6A8, 0xE6A9, 0xE6AA, 0xE6AB, - 0xE6AC, 0xE6AD, 0xE6AE, 0xE6AF, - 0xE6B0, 0xE6B1, 0xE6B2, 0xE6B3, - 0xE6B4, 0xE6B5, 0xE6B6, 0xE6B7, - 0xE6B8, 0xE6B9, 0xE6BA, 0xE6BB, - 0xE6BC, 0xE6BD, 0xE6BE, 0xE6BF, /* F960 */ - 0xE6C0, 0xE6C1, 0xE6C2, 0xE6C3, - 0xE6C4, 0xE6C5, 0xE6C6, 0xE6C7, - 0xE6C8, 0xE6C9, 0xE6CA, 0xE6CB, - 0xE6CC, 0xE6CD, 0xE6CE, 0xE6CF, - 0xE6D0, 0xE6D1, 0xE6D2, 0xE6D3, - 0xE6D4, 0xE6D5, 0xE6D6, 0xE6D7, - 0xE6D8, 0xE6D9, 0xE6DA, 0x0000, - 0xE6DB, 0xE6DC, 0xE6DD, 0xE6DE, /* F980 */ - 0xE6DF, 0xE6E0, 0xE6E1, 0xE6E2, - 0xE6E3, 0xE6E4, 0xE6E5, 0xE6E6, - 0xE6E7, 0xE6E8, 0xE6E9, 0xE6EA, - 0xE6EB, 0xE6EC, 0xE6ED, 0xE6EE, - 0xE6EF, 0xE6F0, 0xE6F1, 0xE6F2, - 0xE6F3, 0xE6F4, 0xE6F5, 0xE6F6, - 0xE6F7, 0xE6F8, 0xE6F9, 0xE6FA, - 0xE6FB, 0xE6FC, 0xE6FD, 0xE6FE, /* F9A0 */ - 0xE6FF, 0xE700, 0xE701, 0xE702, - 0xE703, 0xE704, 0xE705, 0xE706, - 0xE707, 0xE708, 0xE709, 0xE70A, - 0xE70B, 0xE70C, 0xE70D, 0xE70E, - 0xE70F, 0xE710, 0xE711, 0xE712, - 0xE713, 0xE714, 0xE715, 0xE716, - 0xE717, 0xE718, 0xE719, 0xE71A, - 0xE71B, 0xE71C, 0xE71D, 0xE71E, /* F9C0 */ - 0xE71F, 0xE720, 0xE721, 0xE722, - 0xE723, 0xE724, 0xE725, 0xE726, - 0xE727, 0xE728, 0xE729, 0xE72A, - 0xE72B, 0xE72C, 0xE72D, 0xE72E, - 0xE72F, 0xE730, 0xE731, 0xE732, - 0xE733, 0xE734, 0xE735, 0xE736, - 0xE737, 0xE738, 0xE739, 0xE73A, - 0xE73B, 0xE73C, 0xE73D, 0xE73E, /* F9E0 */ - 0xE73F, 0xE740, 0xE741, 0xE742, - 0xE743, 0xE744, 0xE745, 0xE746, - 0xE747, 0xE748, 0xE749, 0xE74A, - 0xE74B, 0xE74C, 0xE74D, 0xE74E, - 0xE74F, 0xE750, 0xE751, 0xE752, - 0xE753, 0xE754, 0xE755, 0xE756, - 0xE757, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FA00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FA20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x2170, 0x2171, 0x2172, 0x2173, /* FA40 */ - 0x2174, 0x2175, 0x2176, 0x2177, - 0x2178, 0x2179, 0x2160, 0x2161, - 0x2162, 0x2163, 0x2164, 0x2165, - 0x2166, 0x2167, 0x2168, 0x2169, - 0xFFE2, 0xFFE4, 0xFF07, 0xFF02, - 0x3231, 0x2116, 0x2121, 0x2235, - 0x7E8A, 0x891C, 0x9348, 0x9288, - 0x84DC, 0x4FC9, 0x70BB, 0x6631, /* FA60 */ - 0x68C8, 0x92F9, 0x66FB, 0x5F45, - 0x4E28, 0x4EE1, 0x4EFC, 0x4F00, - 0x4F03, 0x4F39, 0x4F56, 0x4F92, - 0x4F8A, 0x4F9A, 0x4F94, 0x4FCD, - 0x5040, 0x5022, 0x4FFF, 0x501E, - 0x5046, 0x5070, 0x5042, 0x5094, - 0x50F4, 0x50D8, 0x514A, 0x0000, - 0x5164, 0x519D, 0x51BE, 0x51EC, /* FA80 */ - 0x5215, 0x529C, 0x52A6, 0x52C0, - 0x52DB, 0x5300, 0x5307, 0x5324, - 0x5372, 0x5393, 0x53B2, 0x53DD, - 0xFA0E, 0x549C, 0x548A, 0x54A9, - 0x54FF, 0x5586, 0x5759, 0x5765, - 0x57AC, 0x57C8, 0x57C7, 0xFA0F, - 0xFA10, 0x589E, 0x58B2, 0x590B, - 0x5953, 0x595B, 0x595D, 0x5963, /* FAA0 */ - 0x59A4, 0x59BA, 0x5B56, 0x5BC0, - 0x752F, 0x5BD8, 0x5BEC, 0x5C1E, - 0x5CA6, 0x5CBA, 0x5CF5, 0x5D27, - 0x5D53, 0xFA11, 0x5D42, 0x5D6D, - 0x5DB8, 0x5DB9, 0x5DD0, 0x5F21, - 0x5F34, 0x5F67, 0x5FB7, 0x5FDE, - 0x605D, 0x6085, 0x608A, 0x60DE, - 0x60D5, 0x6120, 0x60F2, 0x6111, /* FAC0 */ - 0x6137, 0x6130, 0x6198, 0x6213, - 0x62A6, 0x63F5, 0x6460, 0x649D, - 0x64CE, 0x654E, 0x6600, 0x6615, - 0x663B, 0x6609, 0x662E, 0x661E, - 0x6624, 0x6665, 0x6657, 0x6659, - 0xFA12, 0x6673, 0x6699, 0x66A0, - 0x66B2, 0x66BF, 0x66FA, 0x670E, - 0xF929, 0x6766, 0x67BB, 0x6852, /* FAE0 */ - 0x67C0, 0x6801, 0x6844, 0x68CF, - 0xFA13, 0x6968, 0xFA14, 0x6998, - 0x69E2, 0x6A30, 0x6A6B, 0x6A46, - 0x6A73, 0x6A7E, 0x6AE2, 0x6AE4, - 0x6BD6, 0x6C3F, 0x6C5C, 0x6C86, - 0x6C6F, 0x6CDA, 0x6D04, 0x6D87, - 0x6D6F, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FB00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FB20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x6D96, 0x6DAC, 0x6DCF, 0x6DF8, /* FB40 */ - 0x6DF2, 0x6DFC, 0x6E39, 0x6E5C, - 0x6E27, 0x6E3C, 0x6EBF, 0x6F88, - 0x6FB5, 0x6FF5, 0x7005, 0x7007, - 0x7028, 0x7085, 0x70AB, 0x710F, - 0x7104, 0x715C, 0x7146, 0x7147, - 0xFA15, 0x71C1, 0x71FE, 0x72B1, - 0x72BE, 0x7324, 0xFA16, 0x7377, - 0x73BD, 0x73C9, 0x73D6, 0x73E3, /* FB60 */ - 0x73D2, 0x7407, 0x73F5, 0x7426, - 0x742A, 0x7429, 0x742E, 0x7462, - 0x7489, 0x749F, 0x7501, 0x756F, - 0x7682, 0x769C, 0x769E, 0x769B, - 0x76A6, 0xFA17, 0x7746, 0x52AF, - 0x7821, 0x784E, 0x7864, 0x787A, - 0x7930, 0xFA18, 0xFA19, 0x0000, - 0xFA1A, 0x7994, 0xFA1B, 0x799B, /* FB80 */ - 0x7AD1, 0x7AE7, 0xFA1C, 0x7AEB, - 0x7B9E, 0xFA1D, 0x7D48, 0x7D5C, - 0x7DB7, 0x7DA0, 0x7DD6, 0x7E52, - 0x7F47, 0x7FA1, 0xFA1E, 0x8301, - 0x8362, 0x837F, 0x83C7, 0x83F6, - 0x8448, 0x84B4, 0x8553, 0x8559, - 0x856B, 0xFA1F, 0x85B0, 0xFA20, - 0xFA21, 0x8807, 0x88F5, 0x8A12, /* FBA0 */ - 0x8A37, 0x8A79, 0x8AA7, 0x8ABE, - 0x8ADF, 0xFA22, 0x8AF6, 0x8B53, - 0x8B7F, 0x8CF0, 0x8CF4, 0x8D12, - 0x8D76, 0xFA23, 0x8ECF, 0xFA24, - 0xFA25, 0x9067, 0x90DE, 0xFA26, - 0x9115, 0x9127, 0x91DA, 0x91D7, - 0x91DE, 0x91ED, 0x91EE, 0x91E4, - 0x91E5, 0x9206, 0x9210, 0x920A, /* FBC0 */ - 0x923A, 0x9240, 0x923C, 0x924E, - 0x9259, 0x9251, 0x9239, 0x9267, - 0x92A7, 0x9277, 0x9278, 0x92E7, - 0x92D7, 0x92D9, 0x92D0, 0xFA27, - 0x92D5, 0x92E0, 0x92D3, 0x9325, - 0x9321, 0x92FB, 0xFA28, 0x931E, - 0x92FF, 0x931D, 0x9302, 0x9370, - 0x9357, 0x93A4, 0x93C6, 0x93DE, /* FBE0 */ - 0x93F8, 0x9431, 0x9445, 0x9448, - 0x9592, 0xF9DC, 0xFA29, 0x969D, - 0x96AF, 0x9733, 0x973B, 0x9743, - 0x974D, 0x974F, 0x9751, 0x9755, - 0x9857, 0x9865, 0xFA2A, 0xFA2B, - 0x9927, 0xFA2C, 0x999E, 0x9A4E, - 0x9AD9, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FC00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FC20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, /* FC40 */ - 0x9BB1, 0x9BBB, 0x9C00, 0x9D70, - 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FC60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FC80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FCA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FCC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FCE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FD00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FD20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FD40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FD60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FD80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FDA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FDC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FDE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FE00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FE20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FE40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FE60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FE80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FEA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FEC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FEE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FF00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FF20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FF40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FF60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FF80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FFA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FFC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FFE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, -}; - - -static uint16 unicode_to_cp932[65536]= -{ - 0x0000, 0x0001, 0x0002, 0x0003, /* 0000 */ - 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000A, 0x000B, - 0x000C, 0x000D, 0x000E, 0x000F, - 0x0010, 0x0011, 0x0012, 0x0013, - 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001A, 0x001B, - 0x001C, 0x001D, 0x001E, 0x001F, - 0x0020, 0x0021, 0x0022, 0x0023, /* 0020 */ - 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002A, 0x002B, - 0x002C, 0x002D, 0x002E, 0x002F, - 0x0030, 0x0031, 0x0032, 0x0033, - 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003A, 0x003B, - 0x003C, 0x003D, 0x003E, 0x003F, - 0x0040, 0x0041, 0x0042, 0x0043, /* 0040 */ - 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, - 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, - 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 0x005B, - 0x005C, 0x005D, 0x005E, 0x005F, - 0x0060, 0x0061, 0x0062, 0x0063, /* 0060 */ - 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006A, 0x006B, - 0x006C, 0x006D, 0x006E, 0x006F, - 0x0070, 0x0071, 0x0072, 0x0073, - 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007A, 0x007B, - 0x007C, 0x007D, 0x007E, 0x007F, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 00A0 */ - 0x0000, 0x0000, 0x0000, MB2(0x8198), - MB2(0x814E), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x818B), MB2(0x817D), 0x0000, 0x0000, - MB2(0x814C), 0x0000, MB2(0x81F7), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 00C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x817E), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 00E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8180), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 01A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 01C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 01E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 02A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 02C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 02E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x839F), MB2(0x83A0), MB2(0x83A1), - MB2(0x83A2), MB2(0x83A3), MB2(0x83A4), MB2(0x83A5), - MB2(0x83A6), MB2(0x83A7), MB2(0x83A8), MB2(0x83A9), - MB2(0x83AA), MB2(0x83AB), MB2(0x83AC), MB2(0x83AD), - MB2(0x83AE), MB2(0x83AF), 0x0000, MB2(0x83B0), /* 03A0 */ - MB2(0x83B1), MB2(0x83B2), MB2(0x83B3), MB2(0x83B4), - MB2(0x83B5), MB2(0x83B6), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x83BF), MB2(0x83C0), MB2(0x83C1), - MB2(0x83C2), MB2(0x83C3), MB2(0x83C4), MB2(0x83C5), - MB2(0x83C6), MB2(0x83C7), MB2(0x83C8), MB2(0x83C9), - MB2(0x83CA), MB2(0x83CB), MB2(0x83CC), MB2(0x83CD), - MB2(0x83CE), MB2(0x83CF), 0x0000, MB2(0x83D0), /* 03C0 */ - MB2(0x83D1), MB2(0x83D2), MB2(0x83D3), MB2(0x83D4), - MB2(0x83D5), MB2(0x83D6), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 03E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8446), 0x0000, 0x0000, /* 0400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8440), MB2(0x8441), MB2(0x8442), MB2(0x8443), - MB2(0x8444), MB2(0x8445), MB2(0x8447), MB2(0x8448), - MB2(0x8449), MB2(0x844A), MB2(0x844B), MB2(0x844C), - MB2(0x844D), MB2(0x844E), MB2(0x844F), MB2(0x8450), - MB2(0x8451), MB2(0x8452), MB2(0x8453), MB2(0x8454), /* 0420 */ - MB2(0x8455), MB2(0x8456), MB2(0x8457), MB2(0x8458), - MB2(0x8459), MB2(0x845A), MB2(0x845B), MB2(0x845C), - MB2(0x845D), MB2(0x845E), MB2(0x845F), MB2(0x8460), - MB2(0x8470), MB2(0x8471), MB2(0x8472), MB2(0x8473), - MB2(0x8474), MB2(0x8475), MB2(0x8477), MB2(0x8478), - MB2(0x8479), MB2(0x847A), MB2(0x847B), MB2(0x847C), - MB2(0x847D), MB2(0x847E), MB2(0x8480), MB2(0x8481), - MB2(0x8482), MB2(0x8483), MB2(0x8484), MB2(0x8485), /* 0440 */ - MB2(0x8486), MB2(0x8487), MB2(0x8488), MB2(0x8489), - MB2(0x848A), MB2(0x848B), MB2(0x848C), MB2(0x848D), - MB2(0x848E), MB2(0x848F), MB2(0x8490), MB2(0x8491), - 0x0000, MB2(0x8476), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 04A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 04C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 04E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 05A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 05C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 05E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 06A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 06C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 06E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 07A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 07C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 07E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 08A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 08C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 08E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 09A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 09C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 09E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0A40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0A60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0AE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0B40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0B60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0BC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0CC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0CE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0D60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0D80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0DE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0E40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0E60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0EA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0EC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0F40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0F60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0F80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0FC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 0FE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 10A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 10C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 10E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 11A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 11C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 11E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 12A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 12C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 12E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 13A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 13C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 13E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 14A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 14C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 14E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 15A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 15C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 15E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 16A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 16C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 16E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 17A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 17C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 17E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 18A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 18C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 18E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 19A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 19C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 19E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1A40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1A60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1AE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1B40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1B60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1BC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1CC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1CE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1D60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1D80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1DE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1E40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1E60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1EA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1EC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1F40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1F60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1F80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1FC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 1FE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x815D), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x815C), 0x0000, 0x0000, - MB2(0x8165), MB2(0x8166), 0x0000, 0x0000, - MB2(0x8167), MB2(0x8168), 0x0000, 0x0000, - MB2(0x81F5), MB2(0x81F6), 0x0000, 0x0000, /* 2020 */ - 0x0000, MB2(0x8164), MB2(0x8163), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x81F1), 0x0000, MB2(0x818C), MB2(0x818D), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x81A6), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 20A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 20C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 20E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x818E), /* 2100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8782), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8784), 0x0000, 0x0000, /* 2120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x81F0), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8754), MB2(0x8755), MB2(0x8756), MB2(0x8757), /* 2160 */ - MB2(0x8758), MB2(0x8759), MB2(0x875A), MB2(0x875B), - MB2(0x875C), MB2(0x875D), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFA40), MB2(0xFA41), MB2(0xFA42), MB2(0xFA43), - MB2(0xFA44), MB2(0xFA45), MB2(0xFA46), MB2(0xFA47), - MB2(0xFA48), MB2(0xFA49), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x81A9), MB2(0x81AA), MB2(0x81A8), MB2(0x81AB), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 21A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 21C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x81CB), 0x0000, - MB2(0x81CC), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 21E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x81CD), 0x0000, MB2(0x81DD), MB2(0x81CE), /* 2200 */ - 0x0000, 0x0000, 0x0000, MB2(0x81DE), - MB2(0x81B8), 0x0000, 0x0000, MB2(0x81B9), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8794), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x81E3), 0x0000, - 0x0000, MB2(0x81E5), MB2(0x8187), MB2(0x8798), - MB2(0x81DA), 0x0000, 0x0000, 0x0000, /* 2220 */ - 0x0000, MB2(0x8161), 0x0000, MB2(0x81C8), - MB2(0x81C9), MB2(0x81BF), MB2(0x81BE), MB2(0x81E7), - MB2(0x81E8), 0x0000, MB2(0x8793), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8188), MB2(0x81E6), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x81E4), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x81E0), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8182), MB2(0x81DF), 0x0000, 0x0000, /* 2260 */ - 0x0000, 0x0000, MB2(0x8185), MB2(0x8186), - 0x0000, 0x0000, MB2(0x81E1), MB2(0x81E2), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x81BC), MB2(0x81BD), /* 2280 */ - 0x0000, 0x0000, MB2(0x81BA), MB2(0x81BB), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 22A0 */ - 0x0000, MB2(0x81DB), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8799), - 0x0000, 0x0000, 0x0000, 0x0000, /* 22C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 22E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x81DC), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 23A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 23C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 23E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8740), MB2(0x8741), MB2(0x8742), MB2(0x8743), /* 2460 */ - MB2(0x8744), MB2(0x8745), MB2(0x8746), MB2(0x8747), - MB2(0x8748), MB2(0x8749), MB2(0x874A), MB2(0x874B), - MB2(0x874C), MB2(0x874D), MB2(0x874E), MB2(0x874F), - MB2(0x8750), MB2(0x8751), MB2(0x8752), MB2(0x8753), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 24A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 24C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 24E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x849F), MB2(0x84AA), MB2(0x84A0), MB2(0x84AB), /* 2500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x84A1), 0x0000, 0x0000, MB2(0x84AC), - MB2(0x84A2), 0x0000, 0x0000, MB2(0x84AD), - MB2(0x84A4), 0x0000, 0x0000, MB2(0x84AF), - MB2(0x84A3), 0x0000, 0x0000, MB2(0x84AE), - MB2(0x84A5), MB2(0x84BA), 0x0000, 0x0000, - MB2(0x84B5), 0x0000, 0x0000, MB2(0x84B0), /* 2520 */ - MB2(0x84A7), MB2(0x84BC), 0x0000, 0x0000, - MB2(0x84B7), 0x0000, 0x0000, MB2(0x84B2), - MB2(0x84A6), 0x0000, 0x0000, MB2(0x84B6), - MB2(0x84BB), 0x0000, 0x0000, MB2(0x84B1), - MB2(0x84A8), 0x0000, 0x0000, MB2(0x84B8), - MB2(0x84BD), 0x0000, 0x0000, MB2(0x84B3), - MB2(0x84A9), 0x0000, 0x0000, MB2(0x84B9), - 0x0000, 0x0000, MB2(0x84BE), 0x0000, /* 2540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x84B4), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x81A1), MB2(0x81A0), 0x0000, 0x0000, /* 25A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x81A3), MB2(0x81A2), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x81A5), MB2(0x81A4), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 25C0 */ - 0x0000, 0x0000, MB2(0x819F), MB2(0x819E), - 0x0000, 0x0000, 0x0000, MB2(0x819B), - 0x0000, 0x0000, MB2(0x819D), MB2(0x819C), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 25E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x81FC), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2600 */ - 0x0000, MB2(0x819A), MB2(0x8199), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x818A), 0x0000, MB2(0x8189), 0x0000, /* 2640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x81F4), 0x0000, - 0x0000, MB2(0x81F3), 0x0000, MB2(0x81F2), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 26A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 26C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 26E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 27A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 27C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 27E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 28A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 28C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 28E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 29A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 29C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 29E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2A40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2A60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2AE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2B40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2B60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2BC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2CC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2CE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2D60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2D80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2DE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2E40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2E60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2EA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2EC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2F40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2F60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2F80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2FC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 2FE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8140), MB2(0x8141), MB2(0x8142), MB2(0x8156), /* 3000 */ - 0x0000, MB2(0x8158), MB2(0x8159), MB2(0x815A), - MB2(0x8171), MB2(0x8172), MB2(0x8173), MB2(0x8174), - MB2(0x8175), MB2(0x8176), MB2(0x8177), MB2(0x8178), - MB2(0x8179), MB2(0x817A), MB2(0x81A7), MB2(0x81AC), - MB2(0x816B), MB2(0x816C), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8780), 0x0000, MB2(0x8781), - 0x0000, 0x0000, 0x0000, 0x0000, /* 3020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x829F), MB2(0x82A0), MB2(0x82A1), /* 3040 */ - MB2(0x82A2), MB2(0x82A3), MB2(0x82A4), MB2(0x82A5), - MB2(0x82A6), MB2(0x82A7), MB2(0x82A8), MB2(0x82A9), - MB2(0x82AA), MB2(0x82AB), MB2(0x82AC), MB2(0x82AD), - MB2(0x82AE), MB2(0x82AF), MB2(0x82B0), MB2(0x82B1), - MB2(0x82B2), MB2(0x82B3), MB2(0x82B4), MB2(0x82B5), - MB2(0x82B6), MB2(0x82B7), MB2(0x82B8), MB2(0x82B9), - MB2(0x82BA), MB2(0x82BB), MB2(0x82BC), MB2(0x82BD), - MB2(0x82BE), MB2(0x82BF), MB2(0x82C0), MB2(0x82C1), /* 3060 */ - MB2(0x82C2), MB2(0x82C3), MB2(0x82C4), MB2(0x82C5), - MB2(0x82C6), MB2(0x82C7), MB2(0x82C8), MB2(0x82C9), - MB2(0x82CA), MB2(0x82CB), MB2(0x82CC), MB2(0x82CD), - MB2(0x82CE), MB2(0x82CF), MB2(0x82D0), MB2(0x82D1), - MB2(0x82D2), MB2(0x82D3), MB2(0x82D4), MB2(0x82D5), - MB2(0x82D6), MB2(0x82D7), MB2(0x82D8), MB2(0x82D9), - MB2(0x82DA), MB2(0x82DB), MB2(0x82DC), MB2(0x82DD), - MB2(0x82DE), MB2(0x82DF), MB2(0x82E0), MB2(0x82E1), /* 3080 */ - MB2(0x82E2), MB2(0x82E3), MB2(0x82E4), MB2(0x82E5), - MB2(0x82E6), MB2(0x82E7), MB2(0x82E8), MB2(0x82E9), - MB2(0x82EA), MB2(0x82EB), MB2(0x82EC), MB2(0x82ED), - MB2(0x82EE), MB2(0x82EF), MB2(0x82F0), MB2(0x82F1), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x814A), - MB2(0x814B), MB2(0x8154), MB2(0x8155), 0x0000, - 0x0000, MB2(0x8340), MB2(0x8341), MB2(0x8342), /* 30A0 */ - MB2(0x8343), MB2(0x8344), MB2(0x8345), MB2(0x8346), - MB2(0x8347), MB2(0x8348), MB2(0x8349), MB2(0x834A), - MB2(0x834B), MB2(0x834C), MB2(0x834D), MB2(0x834E), - MB2(0x834F), MB2(0x8350), MB2(0x8351), MB2(0x8352), - MB2(0x8353), MB2(0x8354), MB2(0x8355), MB2(0x8356), - MB2(0x8357), MB2(0x8358), MB2(0x8359), MB2(0x835A), - MB2(0x835B), MB2(0x835C), MB2(0x835D), MB2(0x835E), - MB2(0x835F), MB2(0x8360), MB2(0x8361), MB2(0x8362), /* 30C0 */ - MB2(0x8363), MB2(0x8364), MB2(0x8365), MB2(0x8366), - MB2(0x8367), MB2(0x8368), MB2(0x8369), MB2(0x836A), - MB2(0x836B), MB2(0x836C), MB2(0x836D), MB2(0x836E), - MB2(0x836F), MB2(0x8370), MB2(0x8371), MB2(0x8372), - MB2(0x8373), MB2(0x8374), MB2(0x8375), MB2(0x8376), - MB2(0x8377), MB2(0x8378), MB2(0x8379), MB2(0x837A), - MB2(0x837B), MB2(0x837C), MB2(0x837D), MB2(0x837E), - MB2(0x8380), MB2(0x8381), MB2(0x8382), MB2(0x8383), /* 30E0 */ - MB2(0x8384), MB2(0x8385), MB2(0x8386), MB2(0x8387), - MB2(0x8388), MB2(0x8389), MB2(0x838A), MB2(0x838B), - MB2(0x838C), MB2(0x838D), MB2(0x838E), MB2(0x838F), - MB2(0x8390), MB2(0x8391), MB2(0x8392), MB2(0x8393), - MB2(0x8394), MB2(0x8395), MB2(0x8396), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8145), - MB2(0x815B), MB2(0x8152), MB2(0x8153), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 31A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 31C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 31E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x878A), MB2(0x878B), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x878C), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 32A0 */ - MB2(0x8785), MB2(0x8786), MB2(0x8787), MB2(0x8788), - MB2(0x8789), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 32C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 32E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8765), /* 3300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8769), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8760), 0x0000, 0x0000, 0x0000, - MB2(0x8763), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8761), MB2(0x876B), /* 3320 */ - 0x0000, 0x0000, MB2(0x876A), MB2(0x8764), - 0x0000, 0x0000, 0x0000, MB2(0x876C), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8766), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x876E), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x875F), MB2(0x876D), 0x0000, - 0x0000, MB2(0x8762), 0x0000, 0x0000, - 0x0000, MB2(0x8767), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8768), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x877E), - MB2(0x878F), MB2(0x878E), MB2(0x878D), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8772), MB2(0x8773), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x876F), MB2(0x8770), MB2(0x8771), 0x0000, - 0x0000, MB2(0x8775), 0x0000, 0x0000, /* 33A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 33C0 */ - MB2(0x8774), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8783), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 33E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 34A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 34C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 34E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 35A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 35C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 35E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 36A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 36C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 36E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 37A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 37C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 37E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 38A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 38C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 38E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 39A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 39C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 39E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3A40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3A60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3AE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3B40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3B60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3BC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3CC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3CE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3D60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3D80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3DE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3E40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3E60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3EA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3EC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3F40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3F60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3F80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3FC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 3FE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 40A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 40C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 40E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 41A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 41C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 41E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 42A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 42C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 42E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 43A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 43C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 43E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 44A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 44C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 44E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 45A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 45C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 45E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 46A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 46C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 46E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 47A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 47C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 47E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 48A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 48C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 48E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 49A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 49C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 49E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4A40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4A60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4AE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4B40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4B60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4BC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4CC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4CE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4D00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4D60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4D80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4DE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x88EA), MB2(0x929A), 0x0000, MB2(0x8EB5), /* 4E00 */ - 0x0000, 0x0000, 0x0000, MB2(0x969C), - MB2(0x8FE4), MB2(0x8E4F), MB2(0x8FE3), MB2(0x89BA), - 0x0000, MB2(0x9573), MB2(0x975E), 0x0000, - MB2(0x98A0), MB2(0x894E), 0x0000, 0x0000, - MB2(0x8A8E), MB2(0x98A1), MB2(0x90A2), MB2(0x99C0), - MB2(0x8B75), MB2(0x95B8), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8FE5), 0x0000, - 0x0000, MB2(0x97BC), 0x0000, 0x0000, /* 4E20 */ - 0x0000, 0x0000, MB2(0x95C0), 0x0000, - MB2(0xFA68), 0x0000, MB2(0x98A2), 0x0000, - 0x0000, MB2(0x9286), 0x0000, 0x0000, - 0x0000, MB2(0x98A3), MB2(0x8BF8), 0x0000, - 0x0000, 0x0000, MB2(0x98A4), 0x0000, - MB2(0x8ADB), MB2(0x924F), 0x0000, MB2(0x8EE5), - MB2(0x98A5), 0x0000, 0x0000, MB2(0x98A6), - 0x0000, 0x0000, MB2(0x98A7), MB2(0x9454), /* 4E40 */ - 0x0000, MB2(0x8B76), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9456), - 0x0000, MB2(0x93E1), MB2(0x8CC1), MB2(0x9652), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE568), MB2(0x98A8), MB2(0x8FE6), - MB2(0x98A9), MB2(0x89B3), 0x0000, 0x0000, - 0x0000, MB2(0x8BE3), MB2(0x8CEE), MB2(0x96E7), - 0x0000, 0x0000, MB2(0x9BA4), 0x0000, /* 4E60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9790), 0x0000, MB2(0x93FB), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8AA3), 0x0000, - MB2(0x8B54), 0x0000, MB2(0x98AA), 0x0000, /* 4E80 */ - 0x0000, MB2(0x98AB), MB2(0x97B9), 0x0000, - MB2(0x975C), MB2(0x9188), MB2(0x98AD), MB2(0x8E96), - MB2(0x93F1), 0x0000, MB2(0x98B0), 0x0000, - 0x0000, MB2(0x895D), MB2(0x8CDD), 0x0000, - MB2(0x8CDC), MB2(0x88E4), 0x0000, 0x0000, - MB2(0x986A), MB2(0x9869), 0x0000, MB2(0x8DB1), - MB2(0x889F), 0x0000, MB2(0x98B1), MB2(0x98B2), - MB2(0x98B3), MB2(0x9653), MB2(0x98B4), 0x0000, /* 4EA0 */ - MB2(0x8CF0), MB2(0x88E5), MB2(0x9692), 0x0000, - MB2(0x8B9C), 0x0000, 0x0000, MB2(0x8B9D), - MB2(0x8B9E), MB2(0x92E0), MB2(0x97BA), 0x0000, - MB2(0x98B5), 0x0000, 0x0000, MB2(0x98B6), - 0x0000, 0x0000, MB2(0x98B7), 0x0000, - 0x0000, 0x0000, MB2(0x906C), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8F59), MB2(0x906D), MB2(0x98BC), 0x0000, /* 4EC0 */ - MB2(0x98BA), 0x0000, MB2(0x98BB), MB2(0x8B77), - 0x0000, 0x0000, MB2(0x8DA1), MB2(0x89EE), - 0x0000, MB2(0x98B9), MB2(0x98B8), MB2(0x95A7), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8E65), MB2(0x8E64), MB2(0x91BC), MB2(0x98BD), - MB2(0x9574), MB2(0x90E5), 0x0000, 0x0000, - 0x0000, MB2(0x8157), MB2(0x98BE), MB2(0x98C0), - 0x0000, MB2(0xFA69), 0x0000, MB2(0x91E3), /* 4EE0 */ - MB2(0x97DF), MB2(0x88C8), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x98BF), MB2(0x89BC), 0x0000, - MB2(0x8BC2), 0x0000, MB2(0x9287), 0x0000, - 0x0000, 0x0000, MB2(0x8C8F), MB2(0x98C1), - 0x0000, 0x0000, 0x0000, MB2(0x9443), - MB2(0xFA6A), 0x0000, 0x0000, 0x0000, - MB2(0xFA6B), MB2(0x8AE9), 0x0000, MB2(0xFA6C), /* 4F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x98C2), MB2(0x88C9), 0x0000, - 0x0000, MB2(0x8CDE), MB2(0x8AEA), MB2(0x959A), - MB2(0x94B0), MB2(0x8B78), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x89EF), 0x0000, - MB2(0x98E5), MB2(0x9360), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x948C), - MB2(0x98C4), 0x0000, 0x0000, 0x0000, - MB2(0x94BA), 0x0000, MB2(0x97E0), 0x0000, - MB2(0x904C), MB2(0xFA6D), MB2(0x8E66), 0x0000, - MB2(0x8E97), MB2(0x89BE), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x92CF), /* 4F40 */ - 0x0000, 0x0000, MB2(0x9241), MB2(0x98C8), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x88CA), MB2(0x92E1), MB2(0x8F5A), - MB2(0x8DB2), MB2(0x9743), 0x0000, MB2(0x91CC), - 0x0000, MB2(0x89BD), MB2(0xFA6E), MB2(0x98C7), - 0x0000, MB2(0x975D), MB2(0x98C3), MB2(0x98C5), - MB2(0x8DEC), MB2(0x98C6), MB2(0x9B43), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 4F60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x98CE), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x98D1), - MB2(0x98CF), 0x0000, 0x0000, MB2(0x89C0), - 0x0000, MB2(0x95B9), MB2(0x98C9), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x98CD), - MB2(0x8CF1), 0x0000, 0x0000, MB2(0x8E67), - 0x0000, 0x0000, 0x0000, MB2(0x8AA4), /* 4F80 */ - 0x0000, 0x0000, MB2(0x98D2), 0x0000, - MB2(0x98CA), 0x0000, MB2(0xFA70), MB2(0x97E1), - 0x0000, MB2(0x8E98), 0x0000, MB2(0x98CB), - 0x0000, MB2(0x98D0), MB2(0xFA6F), 0x0000, - MB2(0xFA72), 0x0000, MB2(0x98D3), 0x0000, - MB2(0x98CC), 0x0000, MB2(0xFA71), MB2(0x8B9F), - 0x0000, MB2(0x88CB), 0x0000, 0x0000, - MB2(0x8BA0), MB2(0x89BF), 0x0000, 0x0000, /* 4FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9B44), - 0x0000, MB2(0x9699), MB2(0x958E), MB2(0x8CF2), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x904E), MB2(0x97B5), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x95D6), - 0x0000, 0x0000, MB2(0x8C57), MB2(0x91A3), /* 4FC0 */ - MB2(0x89E2), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xFA61), MB2(0x8F72), 0x0000, - 0x0000, MB2(0xFA73), MB2(0x98D7), 0x0000, - MB2(0x98DC), MB2(0x98DA), 0x0000, 0x0000, - MB2(0x98D5), 0x0000, 0x0000, MB2(0x91AD), - MB2(0x98D8), 0x0000, MB2(0x98DB), MB2(0x98D9), - 0x0000, MB2(0x95DB), 0x0000, MB2(0x98D6), - 0x0000, MB2(0x904D), 0x0000, MB2(0x9693), /* 4FE0 */ - MB2(0x98DD), MB2(0x98DE), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8F43), MB2(0x98EB), - 0x0000, 0x0000, 0x0000, MB2(0x946F), - 0x0000, MB2(0x9555), MB2(0x98E6), 0x0000, - MB2(0x95EE), 0x0000, MB2(0x89B4), 0x0000, - 0x0000, 0x0000, MB2(0x98EA), MB2(0xFA76), - 0x0000, 0x0000, 0x0000, 0x0000, /* 5000 */ - 0x0000, MB2(0x98E4), MB2(0x98ED), 0x0000, - 0x0000, MB2(0x9171), 0x0000, MB2(0x8CC2), - 0x0000, MB2(0x947B), 0x0000, MB2(0xE0C5), - 0x0000, MB2(0x98EC), MB2(0x937C), 0x0000, - MB2(0x98E1), 0x0000, MB2(0x8CF4), 0x0000, - 0x0000, MB2(0x8CF3), MB2(0x98DF), 0x0000, - 0x0000, 0x0000, MB2(0xFA77), MB2(0x8ED8), - 0x0000, MB2(0x98E7), MB2(0xFA75), MB2(0x95ED), /* 5020 */ - MB2(0x926C), MB2(0x98E3), MB2(0x8C91), 0x0000, - MB2(0x98E0), MB2(0x98E8), MB2(0x98E2), MB2(0x97CF), - MB2(0x98E9), MB2(0x9860), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8BE4), 0x0000, - 0x0000, MB2(0x8C90), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFA74), 0x0000, MB2(0xFA7A), MB2(0x98EE), /* 5040 */ - 0x0000, 0x0000, MB2(0xFA78), MB2(0x98EF), - MB2(0x98F3), MB2(0x88CC), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x95CE), - MB2(0x98F2), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x98F1), MB2(0x98F5), 0x0000, - 0x0000, 0x0000, MB2(0x98F4), 0x0000, - MB2(0x92E2), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5060 */ - 0x0000, MB2(0x8C92), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x98F6), 0x0000, 0x0000, 0x0000, - MB2(0xFA79), 0x0000, MB2(0x8EC3), 0x0000, - MB2(0x91A4), MB2(0x92E3), MB2(0x8BF4), 0x0000, - MB2(0x98F7), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8B55), 0x0000, 0x0000, - MB2(0x98F8), 0x0000, 0x0000, 0x0000, /* 5080 */ - 0x0000, MB2(0x98FA), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9654), 0x0000, 0x0000, - 0x0000, MB2(0x8C86), 0x0000, 0x0000, - MB2(0xFA7B), 0x0000, 0x0000, 0x0000, - MB2(0x8E50), MB2(0x94F5), MB2(0x98F9), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 50A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8DC3), MB2(0x9762), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x98FC), MB2(0x9942), - MB2(0x98FB), MB2(0x8DC2), 0x0000, MB2(0x8F9D), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8C58), 0x0000, - 0x0000, 0x0000, MB2(0x9943), 0x0000, /* 50C0 */ - 0x0000, MB2(0x8BCD), 0x0000, 0x0000, - 0x0000, MB2(0x9940), MB2(0x9941), 0x0000, - 0x0000, MB2(0x93AD), 0x0000, MB2(0x919C), - 0x0000, MB2(0x8BA1), 0x0000, 0x0000, - 0x0000, MB2(0x966C), MB2(0x9944), 0x0000, - MB2(0xFA7D), 0x0000, MB2(0x97BB), 0x0000, - 0x0000, 0x0000, MB2(0x9945), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9948), /* 50E0 */ - 0x0000, MB2(0x9946), 0x0000, MB2(0x916D), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9947), MB2(0x9949), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFA7C), MB2(0x994B), 0x0000, 0x0000, - 0x0000, MB2(0x994A), 0x0000, MB2(0x95C6), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8B56), MB2(0x994D), MB2(0x994E), 0x0000, /* 5100 */ - MB2(0x89AD), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x994C), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8EF2), 0x0000, - MB2(0x9951), MB2(0x9950), MB2(0x994F), 0x0000, - MB2(0x98D4), 0x0000, MB2(0x9952), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8F9E), - 0x0000, MB2(0x9953), 0x0000, 0x0000, /* 5120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9744), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x96D7), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9955), - 0x0000, 0x0000, MB2(0x9954), MB2(0x9957), - MB2(0x9956), 0x0000, 0x0000, MB2(0x9958), - MB2(0x9959), MB2(0x88F2), 0x0000, MB2(0x8CB3), /* 5140 */ - MB2(0x8C5A), MB2(0x8F5B), MB2(0x929B), MB2(0x8BA2), - MB2(0x90E6), MB2(0x8CF5), MB2(0xFA7E), MB2(0x8D8E), - MB2(0x995B), MB2(0x96C6), MB2(0x9365), 0x0000, - MB2(0x8E99), 0x0000, MB2(0x995A), 0x0000, - MB2(0x995C), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x937D), 0x0000, - MB2(0x8A95), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x995D), 0x0000, /* 5160 */ - MB2(0xFA80), MB2(0x93FC), 0x0000, 0x0000, - MB2(0x9153), MB2(0x995F), MB2(0x9960), MB2(0x94AA), - MB2(0x8CF6), MB2(0x985A), MB2(0x9961), 0x0000, - 0x0000, MB2(0x8BA4), 0x0000, 0x0000, - 0x0000, MB2(0x95BA), MB2(0x91B4), MB2(0x8BEF), - MB2(0x9354), 0x0000, 0x0000, 0x0000, - MB2(0x8C93), 0x0000, 0x0000, 0x0000, - MB2(0x9962), 0x0000, MB2(0x9963), 0x0000, /* 5180 */ - 0x0000, MB2(0x93E0), MB2(0x897E), 0x0000, - 0x0000, MB2(0x9966), MB2(0x8DFB), 0x0000, - MB2(0x9965), MB2(0x8DC4), 0x0000, MB2(0x9967), - MB2(0xE3EC), MB2(0x9968), MB2(0x9660), MB2(0x9969), - 0x0000, MB2(0x996A), MB2(0x996B), MB2(0x8FE7), - 0x0000, MB2(0x8ECA), 0x0000, 0x0000, - 0x0000, MB2(0xFA81), 0x0000, 0x0000, - MB2(0x8AA5), 0x0000, MB2(0x996E), 0x0000, /* 51A0 */ - MB2(0x996C), MB2(0x96BB), MB2(0x996D), 0x0000, - MB2(0x9579), MB2(0x996F), MB2(0x9970), MB2(0x9971), - MB2(0x937E), 0x0000, 0x0000, 0x0000, - MB2(0x9975), MB2(0x9973), MB2(0x9974), MB2(0x9972), - MB2(0x8DE1), MB2(0x9976), MB2(0x96E8), MB2(0x97E2), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9977), MB2(0xFA82), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 51C0 */ - MB2(0x90A6), MB2(0x9978), MB2(0x8F79), 0x0000, - 0x0000, MB2(0x9979), 0x0000, MB2(0x929C), - MB2(0x97BD), MB2(0x9380), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x99C3), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x997A), - MB2(0xEAA3), MB2(0x8BC3), 0x0000, 0x0000, - MB2(0x997B), MB2(0x967D), 0x0000, 0x0000, /* 51E0 */ - 0x0000, 0x0000, MB2(0x8F88), MB2(0x91FA), - 0x0000, MB2(0x997D), MB2(0x93E2), 0x0000, - MB2(0xFA83), MB2(0x997E), 0x0000, 0x0000, - MB2(0x9980), MB2(0x8A4D), 0x0000, 0x0000, - 0x0000, MB2(0x9981), MB2(0x8BA5), 0x0000, - MB2(0x93CA), MB2(0x899A), MB2(0x8F6F), 0x0000, - 0x0000, MB2(0x949F), MB2(0x9982), 0x0000, - MB2(0x9381), 0x0000, 0x0000, MB2(0x906E), /* 5200 */ - MB2(0x9983), 0x0000, MB2(0x95AA), MB2(0x90D8), - MB2(0x8AA0), 0x0000, MB2(0x8AA7), MB2(0x9984), - 0x0000, 0x0000, MB2(0x9986), 0x0000, - 0x0000, MB2(0x8C59), 0x0000, 0x0000, - MB2(0x9985), MB2(0xFA84), 0x0000, MB2(0x97F1), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8F89), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5220 */ - MB2(0x94BB), MB2(0x95CA), 0x0000, MB2(0x9987), - 0x0000, MB2(0x9798), MB2(0x9988), 0x0000, - 0x0000, 0x0000, MB2(0x9989), 0x0000, - MB2(0x939E), 0x0000, 0x0000, MB2(0x998A), - 0x0000, 0x0000, MB2(0x90A7), MB2(0x8DFC), - MB2(0x8C94), MB2(0x998B), MB2(0x8E68), MB2(0x8D8F), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x92E4), /* 5240 */ - MB2(0x998D), 0x0000, 0x0000, MB2(0x91A5), - 0x0000, 0x0000, MB2(0x8DED), MB2(0x998E), - MB2(0x998F), MB2(0x914F), 0x0000, MB2(0x998C), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9991), 0x0000, MB2(0x9655), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8D84), - 0x0000, 0x0000, MB2(0x9990), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8C95), /* 5260 */ - MB2(0x8DDC), MB2(0x948D), 0x0000, 0x0000, - 0x0000, MB2(0x9994), MB2(0x9992), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x959B), - MB2(0x8FE8), MB2(0x999B), MB2(0x8A84), MB2(0x9995), - MB2(0x9993), MB2(0x916E), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9997), 0x0000, MB2(0x9996), - 0x0000, 0x0000, 0x0000, MB2(0x8A63), /* 5280 */ - 0x0000, 0x0000, 0x0000, MB2(0x8C80), - MB2(0x999C), MB2(0x97AB), 0x0000, 0x0000, - 0x0000, MB2(0x9998), 0x0000, 0x0000, - 0x0000, MB2(0x999D), MB2(0x999A), 0x0000, - MB2(0x9999), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x97CD), - MB2(0xFA85), 0x0000, 0x0000, MB2(0x8CF7), - MB2(0x89C1), 0x0000, 0x0000, MB2(0x97F2), /* 52A0 */ - 0x0000, 0x0000, MB2(0xFA86), 0x0000, - 0x0000, MB2(0x8F95), MB2(0x9377), MB2(0x8D85), - MB2(0x99A0), MB2(0x99A1), 0x0000, MB2(0xFB77), - 0x0000, MB2(0x97E3), 0x0000, 0x0000, - MB2(0x984A), MB2(0x99A3), 0x0000, 0x0000, - 0x0000, MB2(0x8CF8), 0x0000, 0x0000, - MB2(0x99A2), 0x0000, MB2(0x8A4E), 0x0000, - MB2(0xFA87), MB2(0x99A4), 0x0000, MB2(0x9675), /* 52C0 */ - 0x0000, MB2(0x92BA), 0x0000, MB2(0x9745), - 0x0000, MB2(0x95D7), 0x0000, 0x0000, - 0x0000, MB2(0x99A5), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE8D3), 0x0000, - 0x0000, MB2(0x93AE), 0x0000, MB2(0x99A6), - MB2(0x8AA8), MB2(0x96B1), 0x0000, MB2(0xFA88), - 0x0000, MB2(0x8F9F), MB2(0x99A7), MB2(0x95E5), - MB2(0x99AB), 0x0000, MB2(0x90A8), MB2(0x99A8), /* 52E0 */ - MB2(0x8BCE), 0x0000, MB2(0x99A9), MB2(0x8AA9), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8C4D), MB2(0x99AC), - 0x0000, MB2(0x99AD), 0x0000, 0x0000, - MB2(0x99AE), MB2(0x99AF), MB2(0x8ED9), 0x0000, - 0x0000, 0x0000, MB2(0x8CF9), MB2(0x96DC), - MB2(0xFA89), MB2(0x96E6), MB2(0x93F5), 0x0000, /* 5300 */ - 0x0000, MB2(0x95EF), MB2(0x99B0), MB2(0xFA8A), - MB2(0x99B1), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x99B3), 0x0000, MB2(0x99B5), - MB2(0x99B4), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x99B6), MB2(0x89BB), MB2(0x966B), - 0x0000, MB2(0x8DFA), MB2(0x99B7), 0x0000, - 0x0000, MB2(0x9178), 0x0000, 0x0000, - MB2(0x8FA0), MB2(0x8BA7), 0x0000, MB2(0x99B8), /* 5320 */ - MB2(0xFA8B), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x94D9), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x99B9), - 0x0000, MB2(0x99BA), 0x0000, MB2(0x99BB), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x99BC), MB2(0x9543), MB2(0x8BE6), MB2(0x88E3), - 0x0000, 0x0000, 0x0000, MB2(0x93BD), - MB2(0x99BD), MB2(0x8F5C), 0x0000, MB2(0x90E7), /* 5340 */ - 0x0000, MB2(0x99BF), MB2(0x99BE), MB2(0x8FA1), - MB2(0x8CDF), MB2(0x99C1), MB2(0x94BC), 0x0000, - 0x0000, MB2(0x99C2), 0x0000, 0x0000, - 0x0000, MB2(0x94DA), MB2(0x91B2), MB2(0x91EC), - MB2(0x8BA6), 0x0000, 0x0000, MB2(0x93EC), - MB2(0x9250), 0x0000, MB2(0x948E), 0x0000, - MB2(0x966D), 0x0000, MB2(0x99C4), 0x0000, - MB2(0x90E8), 0x0000, 0x0000, 0x0000, /* 5360 */ - 0x0000, 0x0000, MB2(0x8C54), 0x0000, - 0x0000, MB2(0x99C5), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x99C6), MB2(0x894B), - MB2(0x88F3), MB2(0x8AEB), MB2(0xFA8C), MB2(0x91A6), - MB2(0x8B70), MB2(0x9791), 0x0000, MB2(0x99C9), - MB2(0x89B5), 0x0000, 0x0000, MB2(0x99C8), - 0x0000, 0x0000, 0x0000, MB2(0x8BA8), - 0x0000, 0x0000, MB2(0x99CA), 0x0000, /* 5380 */ - MB2(0x96EF), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xFA8D), - 0x0000, 0x0000, MB2(0x99CB), 0x0000, - MB2(0x97D0), 0x0000, MB2(0x8CFA), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8CB4), - MB2(0x99CC), 0x0000, 0x0000, 0x0000, /* 53A0 */ - 0x0000, MB2(0x99CE), MB2(0x99CD), 0x0000, - MB2(0x907E), MB2(0x8958), 0x0000, 0x0000, - 0x0000, MB2(0x897D), MB2(0x99CF), 0x0000, - MB2(0x99D0), 0x0000, MB2(0xFA8E), MB2(0x8CB5), - 0x0000, 0x0000, MB2(0x99D1), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8B8E), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8E51), MB2(0x99D2), /* 53C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9694), MB2(0x8DB3), MB2(0x8B79), MB2(0x9746), - MB2(0x916F), MB2(0x94BD), MB2(0x8EFB), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8F66), 0x0000, MB2(0x8EE6), MB2(0x8EF3), - 0x0000, MB2(0x8F96), 0x0000, MB2(0x94BE), - 0x0000, MB2(0xFA8F), 0x0000, MB2(0x99D5), - 0x0000, MB2(0x8962), MB2(0x9170), MB2(0x8CFB), /* 53E0 */ - MB2(0x8CC3), MB2(0x8BE5), 0x0000, 0x0000, - MB2(0x99D9), MB2(0x9240), MB2(0x91FC), MB2(0x8BA9), - MB2(0x8FA2), MB2(0x99DA), MB2(0x99D8), MB2(0x89C2), - MB2(0x91E4), MB2(0x8EB6), MB2(0x8E6A), MB2(0x8945), - 0x0000, 0x0000, MB2(0x8A90), MB2(0x8D86), - MB2(0x8E69), 0x0000, MB2(0x99DB), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x99DC), 0x0000, MB2(0x8B68), /* 5400 */ - MB2(0x8A65), 0x0000, 0x0000, 0x0000, - MB2(0x8D87), MB2(0x8B67), MB2(0x92DD), MB2(0x8944), - MB2(0x93AF), MB2(0x96BC), MB2(0x8D40), MB2(0x9799), - MB2(0x9366), MB2(0x8CFC), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8C4E), - 0x0000, MB2(0x99E5), 0x0000, MB2(0x8BE1), - MB2(0x9669), 0x0000, 0x0000, 0x0000, /* 5420 */ - 0x0000, 0x0000, MB2(0x94DB), 0x0000, - 0x0000, MB2(0x99E4), 0x0000, MB2(0x8ADC), - MB2(0x99DF), MB2(0x99E0), MB2(0x99E2), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x99E3), 0x0000, - MB2(0x8B7A), MB2(0x9081), 0x0000, MB2(0x95AB), - MB2(0x99E1), MB2(0x99DD), MB2(0x8CE1), 0x0000, - MB2(0x99DE), 0x0000, MB2(0x9843), 0x0000, /* 5440 */ - 0x0000, 0x0000, MB2(0x95F0), 0x0000, - MB2(0x92E6), MB2(0x8CE0), MB2(0x8D90), 0x0000, - 0x0000, 0x0000, MB2(0x99E6), 0x0000, - 0x0000, MB2(0x93DB), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x99EA), - 0x0000, 0x0000, 0x0000, 0x0000, /* 5460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8EFC), 0x0000, MB2(0x8EF4), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x99ED), MB2(0x99EB), 0x0000, MB2(0x96A1), - 0x0000, MB2(0x99E8), MB2(0x99F1), MB2(0x99EC), - 0x0000, 0x0000, 0x0000, MB2(0x99EF), - MB2(0x8CC4), MB2(0x96BD), 0x0000, 0x0000, - MB2(0x99F0), 0x0000, 0x0000, 0x0000, /* 5480 */ - MB2(0x99F2), 0x0000, MB2(0x99F4), 0x0000, - 0x0000, 0x0000, MB2(0xFA92), MB2(0x8DEE), - MB2(0x9861), 0x0000, MB2(0x99E9), MB2(0x99E7), - MB2(0x99F3), 0x0000, MB2(0x99EE), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFA91), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x99F6), 0x0000, /* 54A0 */ - MB2(0x9A42), MB2(0x99F8), 0x0000, 0x0000, - MB2(0x99FC), MB2(0xFA93), 0x0000, MB2(0x9A40), - MB2(0x99F9), 0x0000, 0x0000, MB2(0x9A5D), - 0x0000, 0x0000, MB2(0x8DE7), MB2(0x8A50), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x99F7), 0x0000, 0x0000, 0x0000, - MB2(0x9A44), MB2(0x88F4), MB2(0x9A43), 0x0000, - MB2(0x88A3), MB2(0x9569), MB2(0x9A41), 0x0000, /* 54C0 */ - MB2(0x99FA), 0x0000, 0x0000, MB2(0x99F5), - MB2(0x99FB), MB2(0x8DC6), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9A45), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x88F5), MB2(0x9A4E), 0x0000, /* 54E0 */ - 0x0000, MB2(0x9A46), MB2(0x9A47), 0x0000, - MB2(0x8FA3), MB2(0x9689), 0x0000, 0x0000, - 0x0000, MB2(0x9A4C), MB2(0x9A4B), 0x0000, - 0x0000, 0x0000, MB2(0x934E), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9A4D), 0x0000, - 0x0000, MB2(0x9A4A), 0x0000, MB2(0xFA94), - 0x0000, 0x0000, 0x0000, 0x0000, /* 5500 */ - MB2(0x8953), 0x0000, MB2(0x8DB4), MB2(0x904F), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9A48), - MB2(0x9382), 0x0000, 0x0000, 0x0000, - MB2(0x9A49), 0x0000, MB2(0x88A0), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9A53), MB2(0x9742), - 0x0000, MB2(0x8FA5), 0x0000, MB2(0x9A59), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9A58), MB2(0x9A4F), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x91C1), 0x0000, - MB2(0x9A50), 0x0000, 0x0000, 0x0000, /* 5540 */ - MB2(0x91ED), MB2(0x9A55), MB2(0x8FA4), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9A52), 0x0000, 0x0000, MB2(0x96E2), - 0x0000, 0x0000, 0x0000, MB2(0x8C5B), - 0x0000, 0x0000, MB2(0x9A56), MB2(0x9A57), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9A54), MB2(0x9A5A), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9A51), /* 5560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9A60), - MB2(0x9A65), 0x0000, MB2(0x9A61), 0x0000, - MB2(0x9A5C), 0x0000, 0x0000, MB2(0x9A66), /* 5580 */ - MB2(0x9150), 0x0000, MB2(0xFA95), MB2(0x9A68), - 0x0000, MB2(0x8D41), MB2(0x9A5E), MB2(0x929D), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9A62), MB2(0x9A5B), MB2(0x8AAB), 0x0000, - MB2(0x8AEC), MB2(0x8A85), MB2(0x9A63), MB2(0x9A5F), - 0x0000, 0x0000, 0x0000, 0x0000, /* 55A0 */ - 0x0000, 0x0000, 0x0000, MB2(0x8C96), - MB2(0x9A69), MB2(0x9A67), MB2(0x9172), MB2(0x8B69), - MB2(0x8BAA), 0x0000, MB2(0x9A64), 0x0000, - MB2(0x8BF2), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8963), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 55C0 */ - MB2(0x9A6D), MB2(0x9A6B), 0x0000, MB2(0x9AA5), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9A70), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9A6A), 0x0000, - MB2(0x9A6E), 0x0000, 0x0000, MB2(0x9A6C), - 0x0000, 0x0000, 0x0000, MB2(0x8E6B), /* 55E0 */ - MB2(0x9A6F), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9A72), - 0x0000, MB2(0x9A77), 0x0000, 0x0000, - 0x0000, MB2(0x9A75), MB2(0x9A74), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5600 */ - 0x0000, 0x0000, MB2(0x9251), 0x0000, - 0x0000, MB2(0x89C3), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9A71), 0x0000, MB2(0x9A73), MB2(0x8FA6), - MB2(0x8952), 0x0000, 0x0000, MB2(0x9A76), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x89DC), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9A82), - 0x0000, MB2(0x8FFA), MB2(0x9A7D), 0x0000, - MB2(0x9A7B), 0x0000, MB2(0x9A7C), 0x0000, - MB2(0x9A7E), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x895C), 0x0000, /* 5640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9158), 0x0000, MB2(0x9A78), 0x0000, - MB2(0x9A79), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8A9A), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5660 */ - MB2(0x9A81), 0x0000, 0x0000, 0x0000, - MB2(0x8AED), 0x0000, MB2(0x9A84), MB2(0x9A80), - MB2(0x9A83), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x95AC), 0x0000, 0x0000, 0x0000, - MB2(0x93D3), 0x0000, MB2(0x94B6), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9A86), 0x0000, 0x0000, 0x0000, /* 5680 */ - 0x0000, 0x0000, MB2(0x9A85), MB2(0x8A64), - 0x0000, 0x0000, MB2(0x9A87), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9A8A), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9A89), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9A88), 0x0000, MB2(0x9458), 0x0000, /* 56A0 */ - 0x0000, MB2(0x9A8B), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9A8C), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9A8E), 0x0000, MB2(0x9A8D), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9A90), 0x0000, 0x0000, 0x0000, - MB2(0x9A93), MB2(0x9A91), MB2(0x9A8F), MB2(0x9A92), /* 56C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9A94), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9A95), 0x0000, - 0x0000, MB2(0x9A96), 0x0000, MB2(0x9A97), - 0x0000, 0x0000, 0x0000, MB2(0x9A98), - MB2(0x9964), 0x0000, MB2(0x8EFA), MB2(0x8E6C), - 0x0000, 0x0000, MB2(0x89F1), 0x0000, - MB2(0x88F6), 0x0000, 0x0000, MB2(0x9263), /* 56E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9A99), 0x0000, - MB2(0x8DA2), 0x0000, MB2(0x88CD), MB2(0x907D), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9A9A), MB2(0x8CC5), 0x0000, - 0x0000, MB2(0x8D91), 0x0000, MB2(0x9A9C), - MB2(0x9A9B), 0x0000, 0x0000, MB2(0x95DE), /* 5700 */ - MB2(0x9A9D), 0x0000, 0x0000, 0x0000, - MB2(0x9A9F), MB2(0x9A9E), 0x0000, MB2(0x9AA0), - 0x0000, MB2(0x9AA1), 0x0000, MB2(0x8C97), - 0x0000, 0x0000, MB2(0x8980), MB2(0x9AA2), - 0x0000, 0x0000, MB2(0x9AA4), 0x0000, - MB2(0x9AA3), 0x0000, 0x0000, 0x0000, - MB2(0x9AA6), 0x0000, 0x0000, MB2(0x9379), - 0x0000, 0x0000, 0x0000, 0x0000, /* 5720 */ - 0x0000, 0x0000, MB2(0x9AA7), MB2(0x88B3), - MB2(0x8DDD), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8C5C), 0x0000, 0x0000, - MB2(0x926E), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9AA8), - MB2(0x9AA9), 0x0000, 0x0000, MB2(0x9AAB), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9AAC), 0x0000, MB2(0x8DE2), 0x0000, /* 5740 */ - 0x0000, 0x0000, 0x0000, MB2(0x8BCF), - 0x0000, 0x0000, MB2(0x9656), 0x0000, - 0x0000, 0x0000, MB2(0x9AAA), MB2(0x9AAD), - MB2(0x8DBF), MB2(0x8D42), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xFA96), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9AB1), 0x0000, 0x0000, /* 5760 */ - MB2(0x8DA3), MB2(0xFA97), MB2(0x9252), 0x0000, - 0x0000, MB2(0x9AAE), MB2(0x92D8), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9AB2), - 0x0000, 0x0000, MB2(0x9082), 0x0000, /* 5780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9AB0), MB2(0x9AB3), 0x0000, MB2(0x8C5E), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9AB4), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9AB5), 0x0000, MB2(0x8D43), MB2(0x8A5F), /* 57A0 */ - MB2(0x9AB7), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9AB8), 0x0000, - MB2(0xFA98), 0x0000, 0x0000, 0x0000, - MB2(0x9AB9), 0x0000, 0x0000, MB2(0x9AB6), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9AAF), 0x0000, 0x0000, MB2(0x9ABA), /* 57C0 */ - 0x0000, 0x0000, MB2(0x9ABB), MB2(0xFA9A), - MB2(0xFA99), 0x0000, 0x0000, MB2(0x9684), - 0x0000, 0x0000, MB2(0x8FE9), 0x0000, - 0x0000, 0x0000, MB2(0x9ABD), MB2(0x9ABE), - MB2(0x9ABC), 0x0000, MB2(0x9AC0), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9457), 0x0000, 0x0000, MB2(0x88E6), - MB2(0x9575), 0x0000, 0x0000, MB2(0x9AC1), /* 57E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8FFB), 0x0000, 0x0000, MB2(0x8EB7), - 0x0000, MB2(0x947C), MB2(0x8AEE), 0x0000, - MB2(0x8DE9), 0x0000, 0x0000, 0x0000, - MB2(0x9678), 0x0000, MB2(0x93B0), 0x0000, /* 5800 */ - 0x0000, MB2(0x8C98), MB2(0x91CD), 0x0000, - 0x0000, 0x0000, MB2(0x9ABF), MB2(0x9AC2), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x91C2), 0x0000, 0x0000, - 0x0000, MB2(0x9AC3), 0x0000, 0x0000, - 0x0000, MB2(0x9AC4), 0x0000, 0x0000, - 0x0000, MB2(0x9AC6), 0x0000, 0x0000, /* 5820 */ - MB2(0x92E7), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8AAC), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xEA9F), - MB2(0x8981), MB2(0x95F1), 0x0000, 0x0000, - MB2(0x8FEA), MB2(0x9367), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8DE4), 0x0000, - 0x0000, MB2(0x9ACC), 0x0000, 0x0000, - MB2(0x95BB), MB2(0x97DB), 0x0000, 0x0000, /* 5840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x89F2), MB2(0x9AC8), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9159), MB2(0x9ACB), 0x0000, - MB2(0x9383), 0x0000, 0x0000, MB2(0x9368), - MB2(0x9384), MB2(0x94B7), MB2(0x92CB), 0x0000, - 0x0000, 0x0000, MB2(0x8DC7), 0x0000, - 0x0000, 0x0000, MB2(0x9AC7), 0x0000, /* 5860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8996), 0x0000, MB2(0x9355), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9AC9), 0x0000, MB2(0x9AC5), 0x0000, - 0x0000, MB2(0x906F), 0x0000, 0x0000, - 0x0000, MB2(0x9ACD), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8F6D), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8BAB), /* 5880 */ - 0x0000, MB2(0x9ACE), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x95E6), - 0x0000, 0x0000, 0x0000, MB2(0x919D), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x92C4), 0x0000, MB2(0xFA9D), MB2(0x9AD0), - 0x0000, 0x0000, 0x0000, 0x0000, /* 58A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x966E), 0x0000, 0x0000, MB2(0x9AD1), - 0x0000, 0x0000, MB2(0x9AD6), 0x0000, - 0x0000, 0x0000, MB2(0xFA9E), MB2(0x95AD), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9AD5), MB2(0x9ACF), MB2(0x9AD2), MB2(0x9AD4), - 0x0000, 0x0000, MB2(0x8DA4), 0x0000, - 0x0000, MB2(0x95C7), 0x0000, 0x0000, /* 58C0 */ - 0x0000, MB2(0x9AD7), 0x0000, MB2(0x9264), - 0x0000, 0x0000, MB2(0x89F3), 0x0000, - MB2(0x8FEB), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9AD9), 0x0000, MB2(0x9AD8), - 0x0000, MB2(0x8D88), 0x0000, MB2(0x9ADA), - MB2(0x9ADC), MB2(0x9ADB), 0x0000, 0x0000, - MB2(0x9ADE), 0x0000, MB2(0x9AD3), MB2(0x9AE0), - 0x0000, 0x0000, 0x0000, 0x0000, /* 58E0 */ - MB2(0x9ADF), MB2(0x9ADD), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8E6D), - MB2(0x9070), 0x0000, MB2(0x9173), MB2(0x9AE1), - MB2(0x90BA), MB2(0x88EB), MB2(0x9484), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x92D9), - 0x0000, MB2(0x9AE3), MB2(0x9AE2), MB2(0x9AE4), - MB2(0x9AE5), MB2(0x9AE6), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9AE7), 0x0000, /* 5900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x95CF), MB2(0x9AE8), MB2(0xFA9F), - 0x0000, 0x0000, 0x0000, MB2(0x89C4), - MB2(0x9AE9), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x975B), MB2(0x8A4F), 0x0000, - MB2(0x99C7), MB2(0x8F67), MB2(0x91BD), MB2(0x9AEA), - MB2(0x96E9), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x96B2), 0x0000, /* 5920 */ - 0x0000, MB2(0x9AEC), 0x0000, MB2(0x91E5), - 0x0000, MB2(0x9356), MB2(0x91BE), MB2(0x9576), - MB2(0x9AED), MB2(0x9AEE), MB2(0x899B), 0x0000, - 0x0000, MB2(0x8EB8), MB2(0x9AEF), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x88CE), - MB2(0x9AF0), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9AF1), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5940 */ - MB2(0x8982), 0x0000, 0x0000, MB2(0x8AEF), - MB2(0x93DE), MB2(0x95F2), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9AF5), MB2(0x9174), - MB2(0x9AF4), MB2(0x8C5F), 0x0000, MB2(0xFAA0), - MB2(0x967A), MB2(0x9AF3), 0x0000, MB2(0x9385), - MB2(0x9AF7), 0x0000, MB2(0x9AF6), MB2(0xFAA1), - 0x0000, MB2(0xFAA2), 0x0000, 0x0000, - MB2(0x9AF9), 0x0000, MB2(0x9AF8), MB2(0xFAA3), /* 5960 */ - 0x0000, MB2(0x899C), 0x0000, MB2(0x9AFA), - MB2(0x8FA7), MB2(0x9AFC), MB2(0x9244), 0x0000, - MB2(0x9AFB), 0x0000, MB2(0x95B1), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8F97), - MB2(0x937A), 0x0000, 0x0000, 0x0000, - MB2(0x9B40), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8D44), 0x0000, 0x0000, - 0x0000, MB2(0x9B41), MB2(0x9440), MB2(0x94DC), /* 5980 */ - MB2(0x96CF), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9444), 0x0000, - 0x0000, MB2(0x9B4A), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8B57), - 0x0000, 0x0000, MB2(0x9764), 0x0000, - 0x0000, MB2(0x96AD), 0x0000, MB2(0x9BAA), - 0x0000, MB2(0x9B42), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9B45), /* 59A0 */ - MB2(0xFAA4), MB2(0x91C3), 0x0000, 0x0000, - MB2(0x9657), 0x0000, 0x0000, 0x0000, - MB2(0x9369), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9B46), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9685), MB2(0xFAA5), MB2(0x8DC8), - 0x0000, 0x0000, MB2(0x8FA8), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 59C0 */ - 0x0000, 0x0000, MB2(0x9B47), 0x0000, - 0x0000, MB2(0x8E6F), 0x0000, MB2(0x8E6E), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x88B7), MB2(0x8CC6), 0x0000, MB2(0x90A9), - MB2(0x88CF), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9B4B), MB2(0x9B4C), 0x0000, - MB2(0x9B49), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 59E0 */ - 0x0000, MB2(0x8957), MB2(0x8AAD), 0x0000, - MB2(0x9B48), 0x0000, MB2(0x96C3), MB2(0x9550), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x88A6), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x88F7), - 0x0000, 0x0000, 0x0000, MB2(0x8E70), - 0x0000, MB2(0x88D0), 0x0000, MB2(0x88A1), /* 5A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9B51), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9B4F), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x96BA), 0x0000, MB2(0x9B52), 0x0000, - MB2(0x9B50), 0x0000, 0x0000, MB2(0x9B4E), - MB2(0x9050), 0x0000, 0x0000, 0x0000, /* 5A20 */ - 0x0000, MB2(0x9B4D), 0x0000, 0x0000, - 0x0000, MB2(0x95D8), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8CE2), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9B56), MB2(0x9B57), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8FA9), 0x0000, 0x0000, 0x0000, - MB2(0x9B53), MB2(0x984B), 0x0000, 0x0000, /* 5A40 */ - 0x0000, 0x0000, MB2(0x946B), 0x0000, - 0x0000, MB2(0x9B55), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8DA5), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9B58), 0x0000, /* 5A60 */ - 0x0000, 0x0000, MB2(0x9577), 0x0000, - 0x0000, 0x0000, MB2(0x9B59), 0x0000, - MB2(0x9B54), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x96B9), - 0x0000, 0x0000, 0x0000, 0x0000, /* 5A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x947D), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9B5A), MB2(0x9551), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9B5B), MB2(0x9B5F), MB2(0x9B5C), 0x0000, - 0x0000, MB2(0x89C5), MB2(0x9B5E), 0x0000, /* 5AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8EB9), 0x0000, MB2(0x9B5D), - MB2(0x8C99), 0x0000, 0x0000, 0x0000, - MB2(0x9B6B), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9B64), MB2(0x9B61), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9284), 0x0000, MB2(0x9B60), /* 5AE0 */ - 0x0000, 0x0000, MB2(0x9B62), 0x0000, - 0x0000, MB2(0x9B63), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9B65), MB2(0x9B66), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5B00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8AF0), 0x0000, MB2(0x9B68), - MB2(0x9B67), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9B69), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8FEC), 0x0000, /* 5B20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9B6C), 0x0000, - MB2(0x92DA), 0x0000, 0x0000, 0x0000, - MB2(0x8964), 0x0000, MB2(0x9B6A), 0x0000, - 0x0000, 0x0000, MB2(0x9B6D), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9B6E), 0x0000, - MB2(0x9B71), 0x0000, 0x0000, MB2(0x9B6F), /* 5B40 */ - 0x0000, MB2(0x9B70), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8E71), MB2(0x9B72), 0x0000, 0x0000, - MB2(0x8D45), MB2(0x9B73), MB2(0xFAA6), MB2(0x8E9A), - MB2(0x91B6), 0x0000, MB2(0x9B74), MB2(0x9B75), - MB2(0x8E79), MB2(0x8D46), 0x0000, MB2(0x96D0), - 0x0000, 0x0000, 0x0000, MB2(0x8B47), /* 5B60 */ - MB2(0x8CC7), MB2(0x9B76), MB2(0x8A77), 0x0000, - 0x0000, MB2(0x9B77), 0x0000, MB2(0x91B7), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9B78), MB2(0x9BA1), 0x0000, MB2(0x9B79), - 0x0000, MB2(0x9B7A), 0x0000, 0x0000, - MB2(0x9B7B), 0x0000, MB2(0x9B7D), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9B7E), 0x0000, 0x0000, MB2(0x9B80), /* 5B80 */ - 0x0000, MB2(0x91EE), 0x0000, MB2(0x8946), - MB2(0x8EE7), MB2(0x88C0), 0x0000, MB2(0x9176), - MB2(0x8AAE), MB2(0x8EB3), 0x0000, MB2(0x8D47), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9386), 0x0000, MB2(0x8F40), - MB2(0x8AAF), MB2(0x9288), MB2(0x92E8), MB2(0x88B6), - MB2(0x8B58), MB2(0x95F3), 0x0000, MB2(0x8EC0), - 0x0000, 0x0000, MB2(0x8B71), MB2(0x90E9), /* 5BA0 */ - MB2(0x8EBA), MB2(0x9747), MB2(0x9B81), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8B7B), 0x0000, - MB2(0x8DC9), 0x0000, 0x0000, MB2(0x8A51), - MB2(0x8983), MB2(0x8FAA), MB2(0x89C6), 0x0000, - MB2(0x9B82), MB2(0x9765), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8F68), - MB2(0xFAA7), 0x0000, MB2(0x8EE2), MB2(0x9B83), /* 5BC0 */ - MB2(0x8AF1), MB2(0x93D0), MB2(0x96A7), MB2(0x9B84), - 0x0000, MB2(0x9B85), 0x0000, 0x0000, - MB2(0x9578), 0x0000, 0x0000, 0x0000, - MB2(0x9B87), 0x0000, MB2(0x8AA6), MB2(0x8BF5), - MB2(0x9B86), 0x0000, 0x0000, 0x0000, - MB2(0xFAA9), 0x0000, 0x0000, MB2(0x8AB0), - 0x0000, MB2(0x9051), MB2(0x9B8B), MB2(0x8E40), - 0x0000, MB2(0x89C7), MB2(0x9B8A), 0x0000, /* 5BE0 */ - MB2(0x9B88), MB2(0x9B8C), MB2(0x9B89), MB2(0x944A), - MB2(0x9ECB), MB2(0x9052), 0x0000, MB2(0x9B8D), - MB2(0xFAAA), 0x0000, MB2(0x97BE), 0x0000, - MB2(0x9B8E), 0x0000, 0x0000, MB2(0x9B90), - 0x0000, MB2(0x929E), MB2(0x9B8F), 0x0000, - MB2(0x90A1), 0x0000, MB2(0x8E9B), 0x0000, - 0x0000, 0x0000, MB2(0x91CE), MB2(0x8EF5), - 0x0000, MB2(0x9595), MB2(0x90EA), 0x0000, /* 5C00 */ - MB2(0x8ECB), MB2(0x9B91), MB2(0x8FAB), MB2(0x9B92), - MB2(0x9B93), MB2(0x88D1), MB2(0x91B8), MB2(0x9071), - 0x0000, MB2(0x9B94), MB2(0x93B1), MB2(0x8FAC), - 0x0000, MB2(0x8FAD), 0x0000, MB2(0x9B95), - 0x0000, 0x0000, MB2(0x90EB), 0x0000, - 0x0000, 0x0000, MB2(0x8FAE), 0x0000, - 0x0000, 0x0000, MB2(0xFAAB), 0x0000, - MB2(0x9B96), 0x0000, MB2(0x9B97), 0x0000, /* 5C20 */ - MB2(0x96DE), 0x0000, 0x0000, 0x0000, - MB2(0x9B98), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8BC4), 0x0000, 0x0000, - 0x0000, MB2(0x8F41), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9B99), MB2(0x9B9A), MB2(0x8EDA), MB2(0x904B), - MB2(0x93F2), MB2(0x9073), MB2(0x94F6), MB2(0x9441), - MB2(0x8BC7), MB2(0x9B9B), 0x0000, 0x0000, /* 5C40 */ - 0x0000, MB2(0x8B8F), MB2(0x9B9C), 0x0000, - MB2(0x8BFC), 0x0000, MB2(0x93CD), MB2(0x89AE), - 0x0000, MB2(0x8E72), MB2(0x9B9D), MB2(0x9BA0), - MB2(0x9B9F), MB2(0x8BFB), 0x0000, MB2(0x9B9E), - 0x0000, MB2(0x9357), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x91AE), 0x0000, - MB2(0x936A), MB2(0x8EC6), 0x0000, 0x0000, /* 5C60 */ - MB2(0x9177), MB2(0x979A), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9BA2), 0x0000, MB2(0x9BA3), MB2(0x93D4), - 0x0000, MB2(0x8E52), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9BA5), 0x0000, - 0x0000, MB2(0x9BA6), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9BA7), 0x0000, 0x0000, 0x0000, - MB2(0x8AF2), MB2(0x9BA8), 0x0000, 0x0000, - MB2(0x9BA9), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x89AA), 0x0000, 0x0000, /* 5CA0 */ - 0x0000, 0x0000, MB2(0xFAAC), 0x0000, - MB2(0x915A), MB2(0x8AE2), 0x0000, MB2(0x9BAB), - MB2(0x96A6), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x91D0), 0x0000, MB2(0x8A78), - 0x0000, 0x0000, MB2(0x9BAD), MB2(0x9BAF), - MB2(0x8ADD), 0x0000, MB2(0xFAAD), MB2(0x9BAC), - MB2(0x9BAE), 0x0000, MB2(0x9BB1), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5CC0 */ - 0x0000, MB2(0x9BB0), 0x0000, MB2(0x9BB2), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9BB3), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x93BB), MB2(0x8BAC), 0x0000, 0x0000, /* 5CE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x89E3), MB2(0x9BB4), MB2(0x9BB9), 0x0000, - 0x0000, MB2(0x9BB7), 0x0000, MB2(0x95F5), - MB2(0x95F4), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xFAAE), MB2(0x9387), 0x0000, - 0x0000, 0x0000, MB2(0x9BB6), MB2(0x8F73), - 0x0000, MB2(0x9BB5), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5D00 */ - 0x0000, 0x0000, 0x0000, MB2(0x9092), - 0x0000, 0x0000, 0x0000, MB2(0x9BBA), - 0x0000, 0x0000, MB2(0x8DE8), 0x0000, - 0x0000, MB2(0x9BC0), 0x0000, 0x0000, - MB2(0x9BC1), MB2(0x9BBB), MB2(0x8A52), MB2(0x9BBC), - MB2(0x9BC5), MB2(0x9BC4), MB2(0x9BC3), MB2(0x9BBF), - 0x0000, 0x0000, 0x0000, MB2(0x9BBE), - 0x0000, 0x0000, MB2(0x9BC2), 0x0000, /* 5D20 */ - 0x0000, 0x0000, 0x0000, MB2(0xFAAF), - 0x0000, MB2(0x95F6), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xFAB2), 0x0000, /* 5D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9BC9), - MB2(0x9BC6), 0x0000, MB2(0x9BC8), 0x0000, - MB2(0x9792), 0x0000, MB2(0x9BC7), MB2(0xFAB0), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9BBD), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5D60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9093), 0x0000, 0x0000, - MB2(0x9BCA), MB2(0xFAB3), 0x0000, MB2(0x8DB5), - 0x0000, 0x0000, 0x0000, MB2(0x9BCB), - 0x0000, 0x0000, MB2(0x9BCC), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9BCF), 0x0000, /* 5D80 */ - MB2(0x9BCE), 0x0000, 0x0000, MB2(0x9BCD), - 0x0000, 0x0000, 0x0000, MB2(0x9388), - MB2(0x9BB8), 0x0000, 0x0000, 0x0000, - MB2(0x9BD5), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9BD1), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9BD0), 0x0000, /* 5DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9BD2), 0x0000, MB2(0x9BD3), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9BD6), - MB2(0xFAB4), MB2(0xFAB5), MB2(0x97E4), 0x0000, - MB2(0x9BD7), MB2(0x9BD4), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9BD8), 0x0000, 0x0000, - MB2(0x8ADE), MB2(0x9BD9), 0x0000, 0x0000, - MB2(0xFAB6), 0x0000, MB2(0x9BDB), MB2(0x9BDA), - 0x0000, 0x0000, MB2(0x9BDC), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9BDD), - 0x0000, MB2(0x90EC), MB2(0x8F42), 0x0000, - 0x0000, MB2(0x8F84), 0x0000, MB2(0x9183), /* 5DE0 */ - 0x0000, MB2(0x8D48), MB2(0x8DB6), MB2(0x8D49), - MB2(0x8B90), 0x0000, 0x0000, MB2(0x9BDE), - 0x0000, 0x0000, MB2(0x8DB7), 0x0000, - 0x0000, MB2(0x8CC8), MB2(0x9BDF), MB2(0x96A4), - MB2(0x9462), MB2(0x9BE0), 0x0000, MB2(0x8D4A), - 0x0000, 0x0000, 0x0000, MB2(0x8AAA), - 0x0000, MB2(0x9246), MB2(0x8BD0), 0x0000, - 0x0000, 0x0000, MB2(0x8E73), MB2(0x957A), /* 5E00 */ - 0x0000, 0x0000, MB2(0x94BF), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9BE1), - MB2(0x8AF3), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9BE4), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x929F), 0x0000, - 0x0000, MB2(0x9BE3), MB2(0x9BE2), MB2(0x9BE5), - 0x0000, MB2(0x92E9), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 5E20 */ - 0x0000, MB2(0x9083), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8E74), - 0x0000, MB2(0x90C8), 0x0000, MB2(0x91D1), - MB2(0x8B41), 0x0000, 0x0000, MB2(0x92A0), - 0x0000, 0x0000, MB2(0x9BE6), MB2(0x9BE7), - MB2(0x8FED), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9658), 0x0000, 0x0000, - MB2(0x9BEA), 0x0000, 0x0000, MB2(0x9BE9), /* 5E40 */ - MB2(0x9BE8), MB2(0x959D), 0x0000, MB2(0x9BF1), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9679), 0x0000, MB2(0x9BEB), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9BED), MB2(0x968B), 0x0000, MB2(0x9BEC), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9BEE), - 0x0000, MB2(0x94A6), MB2(0x9BEF), MB2(0x95BC), /* 5E60 */ - MB2(0x9BF0), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8AB1), MB2(0x95BD), - MB2(0x944E), MB2(0x9BF2), MB2(0x9BF3), 0x0000, - MB2(0x8D4B), MB2(0x8AB2), MB2(0x9BF4), MB2(0x8CB6), - MB2(0x9763), MB2(0x9748), MB2(0x8AF4), MB2(0x9BF6), - 0x0000, MB2(0x92A1), 0x0000, MB2(0x8D4C), /* 5E80 */ - MB2(0x8FAF), 0x0000, 0x0000, MB2(0x94DD), - 0x0000, 0x0000, MB2(0x8FB0), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8F98), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x92EA), MB2(0x95F7), MB2(0x9358), - 0x0000, 0x0000, MB2(0x8D4D), 0x0000, - MB2(0x957B), 0x0000, 0x0000, 0x0000, - MB2(0x9BF7), 0x0000, 0x0000, 0x0000, /* 5EA0 */ - 0x0000, 0x0000, MB2(0x9378), MB2(0x8DC0), - 0x0000, 0x0000, 0x0000, MB2(0x8CC9), - 0x0000, MB2(0x92EB), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x88C1), MB2(0x8F8E), MB2(0x8D4E), - MB2(0x9766), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9BF8), MB2(0x9BF9), MB2(0x9470), /* 5EC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9BFA), MB2(0x97F5), MB2(0x984C), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9BFC), - MB2(0x9BFB), 0x0000, 0x0000, MB2(0x8A66), - 0x0000, 0x0000, MB2(0x9C40), 0x0000, - 0x0000, 0x0000, MB2(0x9C43), MB2(0x9C44), - 0x0000, MB2(0x9C42), 0x0000, MB2(0x955F), - MB2(0x8FB1), MB2(0x9C46), MB2(0x9C45), MB2(0x9C41), /* 5EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9C47), MB2(0x9C48), 0x0000, 0x0000, - MB2(0x9C49), 0x0000, 0x0000, 0x0000, - MB2(0x9C4C), MB2(0x9C4A), 0x0000, MB2(0x9C4B), - MB2(0x9C4D), 0x0000, MB2(0x8984), MB2(0x92EC), - MB2(0x9C4E), 0x0000, MB2(0x8C9A), MB2(0x89F4), - MB2(0x9455), 0x0000, MB2(0x9C4F), MB2(0x93F9), - 0x0000, MB2(0x95D9), 0x0000, MB2(0x9C50), /* 5F00 */ - MB2(0x984D), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9C51), MB2(0x95BE), MB2(0x9C54), - MB2(0x989F), MB2(0x98AF), 0x0000, MB2(0x8EAE), - MB2(0x93F3), MB2(0x9C55), 0x0000, MB2(0x8B7C), - MB2(0x92A2), MB2(0x88F8), MB2(0x9C56), MB2(0x95A4), - MB2(0x8D4F), 0x0000, 0x0000, MB2(0x926F), - 0x0000, 0x0000, 0x0000, MB2(0x92ED), - 0x0000, MB2(0xFAB7), 0x0000, 0x0000, /* 5F20 */ - 0x0000, MB2(0x96ED), MB2(0x8CB7), MB2(0x8CCA), - 0x0000, MB2(0x9C57), 0x0000, 0x0000, - 0x0000, MB2(0x9C58), 0x0000, MB2(0x9C5E), - 0x0000, MB2(0x8EE3), 0x0000, 0x0000, - MB2(0xFAB8), MB2(0x92A3), 0x0000, MB2(0x8BAD), - MB2(0x9C59), 0x0000, 0x0000, 0x0000, - MB2(0x954A), 0x0000, MB2(0x9265), 0x0000, - 0x0000, MB2(0x9C5A), 0x0000, 0x0000, /* 5F40 */ - 0x0000, MB2(0xFA67), 0x0000, 0x0000, - MB2(0x9C5B), 0x0000, MB2(0x8BAE), 0x0000, - MB2(0x9C5C), 0x0000, MB2(0x9C5D), 0x0000, - 0x0000, MB2(0x9C5F), 0x0000, MB2(0x9396), - 0x0000, 0x0000, MB2(0x9C60), MB2(0x9C61), - 0x0000, MB2(0x9C62), 0x0000, 0x0000, - MB2(0x9C53), MB2(0x9C52), 0x0000, 0x0000, - 0x0000, MB2(0x9C63), MB2(0x8C60), 0x0000, /* 5F60 */ - 0x0000, 0x0000, MB2(0x9546), MB2(0xFAB9), - 0x0000, MB2(0x8DCA), MB2(0x9556), MB2(0x92A4), - MB2(0x956A), MB2(0x9C64), 0x0000, 0x0000, - MB2(0x8FB2), MB2(0x8965), 0x0000, MB2(0x9C65), - 0x0000, 0x0000, 0x0000, MB2(0x9C66), - 0x0000, MB2(0x96F0), 0x0000, 0x0000, - MB2(0x94DE), 0x0000, 0x0000, MB2(0x9C69), - MB2(0x899D), MB2(0x90AA), MB2(0x9C68), MB2(0x9C67), /* 5F80 */ - MB2(0x8C61), MB2(0x91D2), 0x0000, MB2(0x9C6D), - MB2(0x9C6B), 0x0000, MB2(0x9C6A), MB2(0x97A5), - MB2(0x8CE3), 0x0000, 0x0000, 0x0000, - MB2(0x8F99), MB2(0x9C6C), MB2(0x936B), MB2(0x8F5D), - 0x0000, 0x0000, 0x0000, MB2(0x93BE), - MB2(0x9C70), MB2(0x9C6F), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9C6E), 0x0000, - MB2(0x9C71), MB2(0x8CE4), 0x0000, 0x0000, /* 5FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9C72), MB2(0x959C), MB2(0x8F7A), 0x0000, - 0x0000, MB2(0x9C73), MB2(0x94F7), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x93BF), - MB2(0x92A5), 0x0000, 0x0000, MB2(0xFABA), - 0x0000, MB2(0x934F), 0x0000, 0x0000, - MB2(0x9C74), MB2(0x8B4A), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9053), /* 5FC0 */ - 0x0000, MB2(0x954B), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8AF5), MB2(0x9445), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9C75), MB2(0x8E75), - MB2(0x9659), MB2(0x965A), 0x0000, 0x0000, - MB2(0x899E), MB2(0x9C7A), MB2(0xFABB), 0x0000, - MB2(0x9289), 0x0000, 0x0000, 0x0000, /* 5FE0 */ - MB2(0x9C77), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x89F5), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9CAB), MB2(0x9C79), 0x0000, 0x0000, - 0x0000, MB2(0x944F), 0x0000, 0x0000, - MB2(0x9C78), 0x0000, 0x0000, MB2(0x9C76), - 0x0000, MB2(0x8D9A), 0x0000, MB2(0x9C7C), - 0x0000, 0x0000, 0x0000, 0x0000, /* 6000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9C83), MB2(0x9C89), - MB2(0x9C81), 0x0000, MB2(0x937B), 0x0000, - 0x0000, MB2(0x9C86), MB2(0x957C), 0x0000, - 0x0000, MB2(0x9C80), 0x0000, MB2(0x9C85), - MB2(0x97E5), MB2(0x8E76), 0x0000, 0x0000, - MB2(0x91D3), MB2(0x9C7D), 0x0000, 0x0000, /* 6020 */ - 0x0000, MB2(0x8B7D), MB2(0x9C88), MB2(0x90AB), - MB2(0x8985), MB2(0x9C82), MB2(0x89F6), MB2(0x9C87), - 0x0000, 0x0000, 0x0000, MB2(0x8BAF), - 0x0000, MB2(0x9C84), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9C8A), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9C8C), MB2(0x9C96), MB2(0x9C94), /* 6040 */ - 0x0000, 0x0000, MB2(0x9C91), 0x0000, - 0x0000, 0x0000, MB2(0x9C90), MB2(0x97F6), - 0x0000, MB2(0x9C92), 0x0000, 0x0000, - MB2(0x8BB0), 0x0000, MB2(0x8D50), 0x0000, - 0x0000, MB2(0x8F9A), 0x0000, 0x0000, - 0x0000, MB2(0x9C99), MB2(0x9C8B), 0x0000, - 0x0000, MB2(0xFABC), 0x0000, MB2(0x9C8F), - MB2(0x9C7E), 0x0000, MB2(0x89F8), MB2(0x9C93), /* 6060 */ - MB2(0x9C95), MB2(0x9270), 0x0000, 0x0000, - MB2(0x8DA6), MB2(0x89B6), MB2(0x9C8D), MB2(0x9C98), - MB2(0x9C97), MB2(0x8BB1), 0x0000, MB2(0x91A7), - MB2(0x8A86), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8C62), 0x0000, MB2(0x9C8E), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9C9A), 0x0000, MB2(0x9C9D), /* 6080 */ - MB2(0x9C9F), MB2(0xFABD), 0x0000, 0x0000, - 0x0000, MB2(0x8EBB), MB2(0xFABE), MB2(0x9CA5), - MB2(0x92EE), MB2(0x9C9B), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9CA3), 0x0000, - MB2(0x89F7), 0x0000, MB2(0x9CA1), MB2(0x9CA2), - 0x0000, 0x0000, MB2(0x9C9E), MB2(0x9CA0), - 0x0000, 0x0000, 0x0000, MB2(0x8CE5), - MB2(0x9749), 0x0000, 0x0000, MB2(0x8AB3), /* 60A0 */ - 0x0000, 0x0000, MB2(0x8978), MB2(0x9CA4), - 0x0000, MB2(0x9459), MB2(0x88AB), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x94DF), MB2(0x9C7B), - MB2(0x9CAA), MB2(0x9CAE), MB2(0x96E3), 0x0000, - MB2(0x9CA7), 0x0000, 0x0000, 0x0000, - MB2(0x9389), MB2(0x9CAC), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 60C0 */ - 0x0000, MB2(0x8FEE), MB2(0x9CAD), MB2(0x93D5), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9866), 0x0000, MB2(0x9CA9), - 0x0000, MB2(0xFAC0), 0x0000, 0x0000, - MB2(0x9CAF), 0x0000, MB2(0x8D9B), 0x0000, - MB2(0x90C9), 0x0000, MB2(0xFABF), MB2(0x88D2), - MB2(0x9CA8), MB2(0x9CA6), 0x0000, MB2(0x9179), /* 60E0 */ - 0x0000, 0x0000, 0x0000, MB2(0x9C9C), - MB2(0x8E53), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x91C4), MB2(0x9CBB), MB2(0xFAC2), MB2(0x917A), - MB2(0x9CB6), 0x0000, MB2(0x9CB3), MB2(0x9CB4), - 0x0000, MB2(0x8EE4), MB2(0x9CB7), MB2(0x9CBA), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9CB5), MB2(0x8F44), 0x0000, MB2(0x9CB8), /* 6100 */ - 0x0000, 0x0000, MB2(0x9CB2), 0x0000, - MB2(0x96FA), MB2(0x96F9), 0x0000, 0x0000, - 0x0000, MB2(0x9CBC), MB2(0x9CBD), MB2(0x88D3), - 0x0000, MB2(0xFAC3), 0x0000, 0x0000, - 0x0000, MB2(0x9CB1), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8BF0), MB2(0x88A4), - 0x0000, 0x0000, 0x0000, MB2(0x8AB4), - MB2(0xFAC1), MB2(0x9CB9), 0x0000, 0x0000, /* 6120 */ - 0x0000, 0x0000, 0x0000, MB2(0x9CC1), - MB2(0x9CC0), 0x0000, 0x0000, 0x0000, - MB2(0x9CC5), 0x0000, 0x0000, 0x0000, - MB2(0xFAC5), 0x0000, 0x0000, 0x0000, - MB2(0x9CC6), 0x0000, 0x0000, MB2(0xFAC4), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9CC4), MB2(0x9CC7), MB2(0x9CBF), MB2(0x9CC3), - 0x0000, 0x0000, MB2(0x9CC8), 0x0000, /* 6140 */ - MB2(0x9CC9), 0x0000, 0x0000, MB2(0x9CBE), - MB2(0x8E9C), 0x0000, MB2(0x9CC2), MB2(0x91D4), - MB2(0x8D51), MB2(0x9CB0), MB2(0x9054), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9CD6), - 0x0000, MB2(0x95E7), 0x0000, 0x0000, - MB2(0x9CCC), MB2(0x9CCD), MB2(0x9CCE), 0x0000, - 0x0000, MB2(0x9CD5), 0x0000, MB2(0x9CD4), - 0x0000, 0x0000, MB2(0x969D), MB2(0x8AB5), /* 6160 */ - 0x0000, MB2(0x9CD2), 0x0000, MB2(0x8C64), - MB2(0x8A53), 0x0000, 0x0000, MB2(0x9CCF), - 0x0000, 0x0000, MB2(0x97B6), MB2(0x9CD1), - MB2(0x88D4), MB2(0x9CD3), 0x0000, MB2(0x9CCA), - MB2(0x9CD0), MB2(0x9CD7), MB2(0x8C63), MB2(0x9CCB), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x977C), 0x0000, - 0x0000, 0x0000, MB2(0x974A), 0x0000, /* 6180 */ - 0x0000, 0x0000, 0x0000, MB2(0x9CDA), - 0x0000, 0x0000, MB2(0x9CDE), 0x0000, - 0x0000, 0x0000, MB2(0x919E), 0x0000, - MB2(0x97F7), MB2(0x9CDF), 0x0000, 0x0000, - MB2(0x9CDC), 0x0000, MB2(0x9CD9), 0x0000, - MB2(0xFAC6), MB2(0x9CD8), MB2(0x9CDD), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 61A0 */ - MB2(0x95AE), 0x0000, 0x0000, MB2(0x93B2), - 0x0000, MB2(0x8C65), 0x0000, MB2(0x9CE0), - MB2(0x9CDB), 0x0000, MB2(0x9CE1), 0x0000, - 0x0000, 0x0000, MB2(0x8C9B), 0x0000, - 0x0000, 0x0000, MB2(0x89AF), 0x0000, - 0x0000, 0x0000, MB2(0x9CE9), 0x0000, - 0x0000, 0x0000, MB2(0x8AB6), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9CE7), /* 61C0 */ - 0x0000, 0x0000, MB2(0x9CE8), MB2(0x8DA7), - MB2(0x9CE6), MB2(0x9CE4), MB2(0x9CE3), MB2(0x9CEA), - MB2(0x9CE2), MB2(0x9CEC), 0x0000, 0x0000, - MB2(0x89F9), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9CEE), /* 61E0 */ - 0x0000, 0x0000, MB2(0x9CED), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x92A6), 0x0000, - MB2(0x9CF1), 0x0000, MB2(0x9CEF), MB2(0x9CE5), - MB2(0x8C9C), 0x0000, MB2(0x9CF0), 0x0000, - MB2(0x9CF4), MB2(0x9CF3), MB2(0x9CF5), MB2(0x9CF2), - MB2(0x9CF6), 0x0000, 0x0000, 0x0000, /* 6200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9CF7), MB2(0x9CF8), MB2(0x95E8), 0x0000, - MB2(0x9CFA), MB2(0x9CF9), MB2(0x8F5E), 0x0000, - MB2(0x90AC), MB2(0x89E4), MB2(0x89FA), MB2(0xFAC7), - MB2(0x9CFB), 0x0000, MB2(0x88BD), 0x0000, - 0x0000, 0x0000, MB2(0x90CA), MB2(0x9CFC), - 0x0000, MB2(0xE6C1), MB2(0x9D40), MB2(0x8C81), - 0x0000, MB2(0x9D41), 0x0000, 0x0000, /* 6220 */ - 0x0000, 0x0000, MB2(0x90ED), 0x0000, - 0x0000, 0x0000, MB2(0x9D42), 0x0000, - 0x0000, 0x0000, MB2(0x9D43), MB2(0x8B59), - MB2(0x9D44), 0x0000, MB2(0x9D45), MB2(0x9D46), - MB2(0x91D5), 0x0000, 0x0000, 0x0000, - MB2(0x8CCB), 0x0000, 0x0000, MB2(0x96DF), - 0x0000, 0x0000, 0x0000, MB2(0x965B), - MB2(0x8F8A), MB2(0x9D47), 0x0000, 0x0000, /* 6240 */ - 0x0000, 0x0000, 0x0000, MB2(0x90EE), - MB2(0xE7BB), MB2(0x94E0), 0x0000, MB2(0x8EE8), - 0x0000, MB2(0x8DCB), MB2(0x9D48), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x91C5), - 0x0000, MB2(0x95A5), 0x0000, 0x0000, - MB2(0x91EF), 0x0000, 0x0000, MB2(0x9D4B), - 0x0000, 0x0000, MB2(0x9D49), 0x0000, - MB2(0x9D4C), 0x0000, 0x0000, MB2(0x9D4A), /* 6260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9D4D), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x95AF), 0x0000, - 0x0000, MB2(0x88B5), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x957D), 0x0000, - 0x0000, MB2(0x94E1), 0x0000, 0x0000, - MB2(0x9D4E), 0x0000, MB2(0x9D51), MB2(0x8FB3), - MB2(0x8B5A), 0x0000, MB2(0x9D4F), MB2(0x9D56), /* 6280 */ - MB2(0x8FB4), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9D50), MB2(0x9463), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x977D), MB2(0x9D52), MB2(0x9D53), - MB2(0x9D57), MB2(0x938A), MB2(0x9D54), MB2(0x8D52), - MB2(0x90DC), 0x0000, 0x0000, MB2(0x9D65), - MB2(0x94B2), 0x0000, MB2(0x91F0), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 62A0 */ - 0x0000, 0x0000, MB2(0xFAC8), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x94E2), - MB2(0x9DAB), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x95F8), 0x0000, 0x0000, - 0x0000, MB2(0x92EF), 0x0000, 0x0000, - 0x0000, MB2(0x9695), 0x0000, MB2(0x9D5A), - MB2(0x899F), MB2(0x928A), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9D63), 0x0000, /* 62C0 */ - 0x0000, MB2(0x9253), MB2(0x9D5D), MB2(0x9D64), - MB2(0x9D5F), MB2(0x9D66), MB2(0x9D62), 0x0000, - MB2(0x9D61), MB2(0x948F), 0x0000, MB2(0x9D5B), - MB2(0x89FB), MB2(0x9D59), MB2(0x8B91), MB2(0x91F1), - MB2(0x9D55), 0x0000, 0x0000, MB2(0x9D58), - MB2(0x8D53), MB2(0x90D9), 0x0000, MB2(0x8FB5), - MB2(0x9D60), MB2(0x9471), 0x0000, 0x0000, - MB2(0x8B92), MB2(0x8A67), 0x0000, 0x0000, /* 62E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8A87), MB2(0x9040), MB2(0x9D68), MB2(0x9D6D), - 0x0000, MB2(0x9D69), 0x0000, MB2(0x8C9D), - 0x0000, MB2(0x9D6E), MB2(0x8E41), MB2(0x8D89), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8F45), MB2(0x9D5C), - 0x0000, MB2(0x8E9D), MB2(0x9D6B), 0x0000, /* 6300 */ - 0x0000, 0x0000, 0x0000, MB2(0x8E77), - MB2(0x9D6C), MB2(0x88C2), 0x0000, 0x0000, - MB2(0x9D67), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x92A7), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8B93), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8BB2), - 0x0000, 0x0000, 0x0000, 0x0000, /* 6320 */ - 0x0000, 0x0000, 0x0000, MB2(0x9D6A), - MB2(0x88A5), 0x0000, 0x0000, MB2(0x8DC1), - 0x0000, 0x0000, 0x0000, MB2(0x9055), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x92F0), 0x0000, - 0x0000, MB2(0x94D2), MB2(0x9D70), MB2(0x917D), - 0x0000, 0x0000, 0x0000, 0x0000, /* 6340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x91A8), 0x0000, 0x0000, - MB2(0x8E4A), MB2(0x9D71), 0x0000, MB2(0x9D73), - MB2(0x9D6F), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x95DF), 0x0000, MB2(0x92BB), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x917B), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6360 */ - 0x0000, 0x0000, 0x0000, MB2(0x95F9), - MB2(0x8ECC), MB2(0x9D80), 0x0000, MB2(0x9D7E), - 0x0000, 0x0000, MB2(0x9098), 0x0000, - 0x0000, 0x0000, MB2(0x8C9E), 0x0000, - 0x0000, 0x0000, MB2(0x9D78), MB2(0x8FB7), - 0x0000, 0x0000, MB2(0x93E6), MB2(0x9450), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9D76), 0x0000, 0x0000, MB2(0x917C), /* 6380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8EF6), MB2(0x9D7B), 0x0000, 0x0000, - MB2(0x8FB6), 0x0000, MB2(0x9D75), MB2(0x9D7A), - 0x0000, 0x0000, MB2(0x9472), 0x0000, - 0x0000, 0x0000, MB2(0x9D74), 0x0000, - MB2(0x8C40), 0x0000, 0x0000, MB2(0x8A7C), - 0x0000, 0x0000, 0x0000, MB2(0x9D7C), - MB2(0x97A9), MB2(0x8DCC), MB2(0x9254), MB2(0x9D79), /* 63A0 */ - 0x0000, MB2(0x90DA), 0x0000, MB2(0x8D54), - MB2(0x9084), MB2(0x8986), MB2(0x915B), MB2(0x9D77), - MB2(0x8B64), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8C66), 0x0000, - MB2(0x92CD), MB2(0x9D7D), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x917E), - 0x0000, 0x0000, MB2(0x9D81), 0x0000, - MB2(0x9D83), 0x0000, 0x0000, MB2(0x91B5), /* 63C0 */ - MB2(0x9D89), 0x0000, MB2(0x9D84), 0x0000, - 0x0000, MB2(0x9D86), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9560), - MB2(0x92F1), 0x0000, MB2(0x9D87), 0x0000, - 0x0000, 0x0000, MB2(0x974B), 0x0000, - 0x0000, 0x0000, MB2(0x9767), MB2(0x8AB7), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x88AC), 0x0000, MB2(0x9D85), /* 63E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9D82), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8AF6), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8987), MB2(0xFAC9), MB2(0x9D88), 0x0000, - 0x0000, 0x0000, MB2(0x9768), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6400 */ - 0x0000, 0x0000, MB2(0x9D8C), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x91B9), 0x0000, MB2(0x9D93), - 0x0000, 0x0000, 0x0000, MB2(0x9D8D), - 0x0000, 0x0000, MB2(0x9D8A), MB2(0x9D91), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9D72), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6420 */ - 0x0000, 0x0000, MB2(0x9D8E), 0x0000, - MB2(0x9D92), 0x0000, 0x0000, 0x0000, - MB2(0x94C0), MB2(0x938B), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9D8B), 0x0000, MB2(0x9D8F), 0x0000, - 0x0000, 0x0000, MB2(0x8C67), 0x0000, - 0x0000, 0x0000, MB2(0x8DEF), 0x0000, - 0x0000, 0x0000, MB2(0x90DB), 0x0000, /* 6440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9D97), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9345), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFACA), 0x0000, 0x0000, 0x0000, /* 6460 */ - 0x0000, 0x0000, 0x0000, MB2(0x9D94), - 0x0000, MB2(0x9680), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9D95), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9D96), 0x0000, - MB2(0x96CC), 0x0000, MB2(0x90A0), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8C82), /* 6480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9D9D), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8E54), MB2(0x9D9A), - 0x0000, MB2(0x9D99), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9451), 0x0000, - 0x0000, MB2(0xFACB), MB2(0x93B3), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 64A0 */ - MB2(0x9350), MB2(0x9D9B), 0x0000, 0x0000, - 0x0000, MB2(0x9D9C), 0x0000, MB2(0x958F), - 0x0000, MB2(0x9464), MB2(0x8E42), 0x0000, - MB2(0x90EF), 0x0000, MB2(0x966F), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8A68), 0x0000, MB2(0x9DA3), - MB2(0x9D9E), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9769), MB2(0x9DA5), 0x0000, /* 64C0 */ - 0x0000, MB2(0x9DA1), 0x0000, MB2(0x9DA2), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9180), MB2(0xFACC), 0x0000, - 0x0000, 0x0000, MB2(0x9DA0), 0x0000, - MB2(0x9D5E), 0x0000, 0x0000, 0x0000, - MB2(0x9DA4), 0x0000, MB2(0x9D9F), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9DA9), MB2(0x9DAA), MB2(0x9346), MB2(0x9DAC), /* 64E0 */ - 0x0000, 0x0000, MB2(0x8E43), MB2(0x9DA7), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8B5B), 0x0000, 0x0000, MB2(0x9DAD), - 0x0000, MB2(0x9DA6), MB2(0x9DB1), 0x0000, - MB2(0x9DB0), 0x0000, MB2(0x9DAF), 0x0000, - 0x0000, 0x0000, MB2(0x9DB2), 0x0000, - 0x0000, MB2(0x9DB4), MB2(0x8FEF), 0x0000, - MB2(0x9DB3), 0x0000, 0x0000, 0x0000, /* 6500 */ - 0x0000, MB2(0x9DB7), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9DB5), 0x0000, 0x0000, 0x0000, - MB2(0x9DB6), MB2(0x9D90), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9DB9), /* 6520 */ - MB2(0x9DB8), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9D98), MB2(0x9DBA), - MB2(0x9DAE), 0x0000, 0x0000, MB2(0x8E78), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9DBB), MB2(0x9DBC), MB2(0x9DBE), MB2(0x9DBD), - MB2(0x9DBF), MB2(0x89FC), 0x0000, MB2(0x8D55), - 0x0000, 0x0000, MB2(0x95FA), MB2(0x90AD), - 0x0000, 0x0000, 0x0000, 0x0000, /* 6540 */ - 0x0000, MB2(0x8CCC), 0x0000, 0x0000, - MB2(0x9DC1), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9DC4), MB2(0xFACD), MB2(0x9571), - 0x0000, MB2(0x8B7E), 0x0000, 0x0000, - 0x0000, MB2(0x9DC3), MB2(0x9DC2), MB2(0x9473), - MB2(0x9DC5), MB2(0x8BB3), 0x0000, 0x0000, - 0x0000, MB2(0x9DC7), MB2(0x9DC6), 0x0000, - 0x0000, 0x0000, MB2(0x8AB8), MB2(0x8E55), /* 6560 */ - 0x0000, 0x0000, MB2(0x93D6), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8C68), 0x0000, 0x0000, 0x0000, - MB2(0x9094), 0x0000, MB2(0x9DC8), 0x0000, - MB2(0x90AE), MB2(0x9347), 0x0000, MB2(0x957E), - MB2(0x9DC9), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9DCA), MB2(0x9DCB), /* 6580 */ - 0x0000, 0x0000, 0x0000, MB2(0x95B6), - MB2(0x9B7C), MB2(0x90C4), 0x0000, 0x0000, - MB2(0x956B), 0x0000, MB2(0x8DD6), 0x0000, - MB2(0x94E3), MB2(0x94C1), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x936C), - 0x0000, MB2(0x97BF), 0x0000, MB2(0x9DCD), - MB2(0x8ECE), 0x0000, 0x0000, MB2(0x9DCE), - 0x0000, MB2(0x88B4), 0x0000, 0x0000, /* 65A0 */ - MB2(0x8BD2), MB2(0x90CB), 0x0000, MB2(0x9580), - 0x0000, 0x0000, 0x0000, MB2(0x9DCF), - MB2(0x8E61), MB2(0x9266), 0x0000, MB2(0x8E7A), - MB2(0x9056), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9DD0), - 0x0000, MB2(0x95FB), 0x0000, 0x0000, - MB2(0x8997), MB2(0x8E7B), 0x0000, 0x0000, - 0x0000, MB2(0x9DD3), 0x0000, MB2(0x9DD1), /* 65C0 */ - MB2(0x9DD4), MB2(0x97B7), MB2(0x9DD2), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x90F9), - MB2(0x9DD5), 0x0000, 0x0000, MB2(0x91B0), - 0x0000, 0x0000, MB2(0x9DD6), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8AF8), - 0x0000, MB2(0x9DD8), 0x0000, MB2(0x9DD7), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9DD9), MB2(0x9DDA), MB2(0x8AF9), 0x0000, /* 65E0 */ - 0x0000, MB2(0x93FA), MB2(0x9255), MB2(0x8B8C), - MB2(0x8E7C), MB2(0x9181), 0x0000, 0x0000, - MB2(0x8F7B), MB2(0x88AE), 0x0000, 0x0000, - 0x0000, MB2(0x9DDB), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x89A0), MB2(0x9DDF), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFACE), 0x0000, MB2(0x8D56), MB2(0x9DDE), /* 6600 */ - 0x0000, 0x0000, MB2(0x8DA9), MB2(0x8FB8), - 0x0000, MB2(0xFAD1), MB2(0x9DDD), 0x0000, - MB2(0x8FB9), 0x0000, MB2(0x96BE), MB2(0x8DA8), - 0x0000, 0x0000, 0x0000, MB2(0x88D5), - MB2(0x90CC), MB2(0xFACF), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9DE4), 0x0000, MB2(0xFAD3), MB2(0x90AF), - MB2(0x8966), 0x0000, 0x0000, 0x0000, /* 6620 */ - MB2(0xFAD4), MB2(0x8F74), 0x0000, MB2(0x9686), - MB2(0x8DF0), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8FBA), MB2(0xFAD2), MB2(0x90A5), - 0x0000, MB2(0xFA63), 0x0000, 0x0000, - MB2(0x9DE3), MB2(0x9DE1), MB2(0x9DE2), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xFAD0), - MB2(0x928B), 0x0000, 0x0000, MB2(0x9E45), - 0x0000, MB2(0x9DE8), MB2(0x8E9E), MB2(0x8D57), /* 6640 */ - MB2(0x9DE6), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9DE7), 0x0000, MB2(0x9057), - 0x0000, 0x0000, 0x0000, MB2(0x9DE5), - 0x0000, 0x0000, MB2(0x8E4E), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xFAD6), - 0x0000, MB2(0xFAD7), 0x0000, 0x0000, - 0x0000, MB2(0x9DEA), MB2(0x9DE9), MB2(0x9DEE), - 0x0000, MB2(0xFAD7), MB2(0x9DEF), 0x0000, /* 6660 */ - MB2(0x9DEB), MB2(0xFAD5), MB2(0x8A41), MB2(0x9DEC), - MB2(0x9DED), MB2(0x94D3), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9581), MB2(0x8C69), - MB2(0x9DF0), 0x0000, 0x0000, MB2(0xFAD9), - MB2(0x90B0), 0x0000, MB2(0x8FBB), 0x0000, - 0x0000, 0x0000, MB2(0x9271), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8BC5), 0x0000, MB2(0x9DF1), /* 6680 */ - MB2(0x9DF5), 0x0000, 0x0000, MB2(0x89C9), - MB2(0x9DF2), MB2(0x9DF4), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9DF3), 0x0000, - 0x0000, MB2(0x8F8B), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9267), MB2(0x88C3), - MB2(0x9DF6), MB2(0xFADA), 0x0000, 0x0000, - 0x0000, MB2(0x9DF7), 0x0000, 0x0000, - MB2(0xFADB), 0x0000, MB2(0x92A8), 0x0000, /* 66A0 */ - 0x0000, 0x0000, MB2(0x97EF), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8E62), - 0x0000, 0x0000, MB2(0x95E9), 0x0000, - 0x0000, 0x0000, MB2(0xFADC), 0x0000, - MB2(0x965C), 0x0000, 0x0000, 0x0000, - MB2(0x9E41), MB2(0x9DF9), 0x0000, 0x0000, - MB2(0x9DFC), 0x0000, MB2(0x9DFB), MB2(0xFADD), - 0x0000, MB2(0x9DF8), 0x0000, 0x0000, /* 66C0 */ - MB2(0x9E40), 0x0000, 0x0000, MB2(0x93DC), - 0x0000, MB2(0x9DFA), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9E42), 0x0000, - 0x0000, MB2(0x8F8C), MB2(0x9E43), 0x0000, - MB2(0x976A), MB2(0x9498), 0x0000, 0x0000, - MB2(0x9E44), 0x0000, 0x0000, 0x0000, /* 66E0 */ - 0x0000, 0x0000, MB2(0x9E46), 0x0000, - 0x0000, MB2(0x9E47), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9E48), 0x0000, MB2(0x8BC8), MB2(0x8967), - MB2(0x8D58), MB2(0x9E49), 0x0000, MB2(0x9E4A), - MB2(0x8F91), MB2(0x9182), MB2(0xFADE), MB2(0xFA66), - MB2(0x99D6), MB2(0x915D), MB2(0x915C), MB2(0x91D6), - MB2(0x8DC5), 0x0000, 0x0000, MB2(0x98F0), /* 6700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8C8E), MB2(0x974C), 0x0000, MB2(0x95FC), - 0x0000, MB2(0x959E), MB2(0xFADF), MB2(0x9E4B), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8DF1), MB2(0x92BD), MB2(0x9E4C), MB2(0x984E), - 0x0000, 0x0000, 0x0000, MB2(0x965D), - 0x0000, MB2(0x92A9), MB2(0x9E4D), MB2(0x8AFA), - 0x0000, 0x0000, 0x0000, 0x0000, /* 6720 */ - 0x0000, 0x0000, MB2(0x9E4E), MB2(0x9E4F), - MB2(0x96D8), 0x0000, MB2(0x96A2), MB2(0x9696), - MB2(0x967B), MB2(0x8E44), MB2(0x9E51), 0x0000, - 0x0000, MB2(0x8EE9), 0x0000, 0x0000, - MB2(0x9670), 0x0000, MB2(0x9E53), MB2(0x9E56), - MB2(0x9E55), 0x0000, MB2(0x8AF7), 0x0000, - 0x0000, MB2(0x8B80), 0x0000, MB2(0x9E52), - 0x0000, MB2(0x9E54), 0x0000, 0x0000, /* 6740 */ - 0x0000, 0x0000, MB2(0x9E57), 0x0000, - 0x0000, MB2(0x9099), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x979B), MB2(0x88C7), - MB2(0x8DDE), MB2(0x91BA), 0x0000, MB2(0x8EDB), - 0x0000, 0x0000, MB2(0x8FF1), 0x0000, - 0x0000, MB2(0x9E5A), 0x0000, 0x0000, - MB2(0x936D), 0x0000, MB2(0x9E58), MB2(0x91A9), - MB2(0x9E59), MB2(0x8FF0), MB2(0x96DB), MB2(0x9E5B), /* 6760 */ - MB2(0x9E5C), MB2(0x9788), MB2(0xFAE1), 0x0000, - 0x0000, 0x0000, MB2(0x9E61), 0x0000, - 0x0000, MB2(0x8D59), 0x0000, MB2(0x9474), - MB2(0x9E5E), MB2(0x938C), MB2(0x9DDC), MB2(0x9DE0), - 0x0000, MB2(0x8B6E), 0x0000, MB2(0x9466), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9E60), 0x0000, MB2(0x8FBC), MB2(0x94C2), - 0x0000, 0x0000, 0x0000, 0x0000, /* 6780 */ - 0x0000, MB2(0x9E66), 0x0000, MB2(0x94F8), - 0x0000, MB2(0x9E5D), 0x0000, MB2(0x9E63), - MB2(0x9E62), 0x0000, 0x0000, 0x0000, - MB2(0x90CD), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x968D), 0x0000, MB2(0x97D1), - 0x0000, 0x0000, MB2(0x9687), 0x0000, - MB2(0x89CA), MB2(0x8E7D), 0x0000, 0x0000, - MB2(0x9867), MB2(0x9E65), MB2(0x9095), 0x0000, /* 67A0 */ - 0x0000, 0x0000, MB2(0x9E64), 0x0000, - 0x0000, MB2(0x9E5F), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8CCD), - 0x0000, 0x0000, 0x0000, MB2(0x9E6B), - MB2(0x9E69), 0x0000, MB2(0x89CB), MB2(0x9E67), - MB2(0x9E6D), MB2(0x9E73), 0x0000, MB2(0xFAE2), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFAE4), MB2(0x91C6), 0x0000, 0x0000, /* 67C0 */ - MB2(0x95BF), 0x0000, MB2(0x9E75), 0x0000, - 0x0000, 0x0000, MB2(0x9541), 0x0000, - 0x0000, 0x0000, MB2(0x9E74), MB2(0x9490), - MB2(0x965E), MB2(0x8AB9), 0x0000, MB2(0x90F5), - MB2(0x8F5F), 0x0000, 0x0000, 0x0000, - MB2(0x92D1), 0x0000, MB2(0x974D), 0x0000, - 0x0000, MB2(0x9E70), MB2(0x9E6F), 0x0000, - 0x0000, 0x0000, MB2(0x9E71), 0x0000, /* 67E0 */ - MB2(0x9E6E), 0x0000, 0x0000, MB2(0x9E76), - 0x0000, MB2(0x9E6C), 0x0000, 0x0000, - MB2(0x9E6A), 0x0000, MB2(0x9E72), MB2(0x9E68), - 0x0000, MB2(0x928C), 0x0000, MB2(0x96F6), - MB2(0x8EC4), MB2(0x8DF2), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8DB8), - 0x0000, 0x0000, MB2(0x968F), MB2(0x8A60), - 0x0000, MB2(0xFAE5), MB2(0x92CC), MB2(0x93C8), /* 6800 */ - MB2(0x8968), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x90F0), - 0x0000, 0x0000, MB2(0x90B2), MB2(0x8C49), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9E78), 0x0000, - 0x0000, MB2(0x8D5A), MB2(0x8A9C), 0x0000, /* 6820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9E7A), MB2(0x8A94), MB2(0x9E81), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9E7D), 0x0000, - MB2(0x90F1), 0x0000, 0x0000, 0x0000, - MB2(0x8A6A), MB2(0x8DAA), 0x0000, 0x0000, - MB2(0x8A69), MB2(0x8DCD), 0x0000, 0x0000, - MB2(0x9E7B), MB2(0x8C85), MB2(0x8C6A), MB2(0x938D), /* 6840 */ - MB2(0xFAE6), 0x0000, MB2(0x9E79), 0x0000, - MB2(0x88C4), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9E7C), MB2(0x9E7E), 0x0000, - MB2(0x8BCB), MB2(0x8C4B), MB2(0xFAE3), MB2(0x8ABA), - MB2(0x8B6A), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9E82), 0x0000, 0x0000, - MB2(0x8DF7), MB2(0x9691), 0x0000, MB2(0x8E56), - 0x0000, 0x0000, 0x0000, MB2(0x9E83), /* 6860 */ - 0x0000, 0x0000, 0x0000, MB2(0x954F), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9E8F), 0x0000, MB2(0x89B1), MB2(0x9E84), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9E95), MB2(0x9E85), - 0x0000, MB2(0x97C0), 0x0000, MB2(0x9E8C), /* 6880 */ - 0x0000, MB2(0x947E), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9E94), 0x0000, MB2(0x9E87), - 0x0000, 0x0000, 0x0000, MB2(0x88B2), - MB2(0x9E89), 0x0000, 0x0000, MB2(0x8D5B), - 0x0000, 0x0000, 0x0000, MB2(0x9E8B), - 0x0000, MB2(0x9E8A), 0x0000, MB2(0x9E86), - MB2(0x9E91), 0x0000, MB2(0x8FBD), 0x0000, /* 68A0 */ - 0x0000, 0x0000, MB2(0x9AEB), MB2(0x8CE6), - MB2(0x979C), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9E88), 0x0000, MB2(0x92F2), - MB2(0x8A42), MB2(0x8DAB), 0x0000, MB2(0x9E80), - 0x0000, MB2(0x9E90), MB2(0x8A81), 0x0000, - 0x0000, MB2(0x9E8E), MB2(0x9E92), 0x0000, - MB2(0x938E), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 68C0 */ - MB2(0x8AFC), 0x0000, MB2(0x9EB0), 0x0000, - MB2(0xFA64), MB2(0x96C7), MB2(0x9E97), MB2(0x8AFB), - 0x0000, MB2(0x9E9E), 0x0000, MB2(0xFAE7), - 0x0000, 0x0000, MB2(0x965F), 0x0000, - MB2(0x9E9F), MB2(0x9EA1), 0x0000, MB2(0x9EA5), - MB2(0x9E99), 0x0000, MB2(0x9249), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x938F), - MB2(0x9EA9), MB2(0x9E9C), 0x0000, MB2(0x9EA6), /* 68E0 */ - 0x0000, 0x0000, 0x0000, MB2(0x9EA0), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9058), MB2(0x9EAA), - 0x0000, 0x0000, MB2(0x90B1), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9EA8), MB2(0x8ABB), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x986F), MB2(0x9E96), 0x0000, 0x0000, /* 6900 */ - MB2(0x9EA4), MB2(0x88D6), 0x0000, 0x0000, - MB2(0x9E98), 0x0000, 0x0000, MB2(0x96B8), - MB2(0x9E9D), MB2(0x9041), MB2(0x92C5), MB2(0x9E93), - 0x0000, 0x0000, MB2(0x9EA3), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x909A), MB2(0x9EAD), MB2(0x8A91), - MB2(0x8C9F), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9EAF), MB2(0x9E9A), MB2(0x9EAE), /* 6920 */ - 0x0000, MB2(0x9EA7), MB2(0x9E9B), 0x0000, - MB2(0x9EAB), 0x0000, MB2(0x9EAC), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9EBD), 0x0000, 0x0000, 0x0000, - MB2(0x93CC), 0x0000, MB2(0x9EA2), 0x0000, - 0x0000, MB2(0x9EB9), 0x0000, 0x0000, - 0x0000, MB2(0x9EBB), 0x0000, MB2(0x92D6), - 0x0000, 0x0000, 0x0000, 0x0000, /* 6940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x976B), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9596), - MB2(0x9EB6), MB2(0x91C8), 0x0000, 0x0000, - 0x0000, MB2(0x9EBC), MB2(0x915E), 0x0000, - MB2(0x9EB3), MB2(0x9EC0), MB2(0x9EBF), 0x0000, - MB2(0x93ED), MB2(0x9EBE), MB2(0x93E8), 0x0000, /* 6960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFAE9), 0x0000, MB2(0x9EC2), MB2(0x9EB5), - 0x0000, MB2(0x8BC6), MB2(0x9EB8), MB2(0x8F7C), - 0x0000, 0x0000, 0x0000, MB2(0x9480), - MB2(0x9EBA), MB2(0x8BC9), 0x0000, MB2(0x9EB2), - MB2(0x9EB4), MB2(0x9EB1), 0x0000, 0x0000, - MB2(0x984F), MB2(0x8A79), MB2(0x9EB7), 0x0000, - 0x0000, MB2(0x9EC1), MB2(0x8A54), 0x0000, /* 6980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8DE5), 0x0000, - 0x0000, 0x0000, MB2(0x897C), 0x0000, - 0x0000, MB2(0x9ED2), 0x0000, 0x0000, - MB2(0x9850), MB2(0x9ED5), 0x0000, 0x0000, - MB2(0xFAEB), 0x0000, 0x0000, MB2(0x9059), - MB2(0x9ED4), 0x0000, 0x0000, 0x0000, - MB2(0x9ED3), 0x0000, 0x0000, 0x0000, /* 69A0 */ - 0x0000, 0x0000, 0x0000, MB2(0x9ED0), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9EC4), 0x0000, - 0x0000, MB2(0x9EE1), MB2(0x9EC3), 0x0000, - MB2(0x9ED6), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9ECE), - 0x0000, 0x0000, MB2(0x9EC9), MB2(0x9EC6), - 0x0000, MB2(0x9EC7), 0x0000, MB2(0x9ECF), /* 69C0 */ - 0x0000, 0x0000, 0x0000, MB2(0xEAA0), - 0x0000, 0x0000, MB2(0x9ECC), MB2(0x8D5C), - MB2(0x92C6), MB2(0x9184), MB2(0x9ECA), 0x0000, - MB2(0x9EC5), 0x0000, 0x0000, MB2(0x9EC8), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x976C), MB2(0x968A), 0x0000, 0x0000, - 0x0000, MB2(0x9ECD), MB2(0x9ED7), 0x0000, - 0x0000, 0x0000, MB2(0xFAEC), 0x0000, /* 69E0 */ - 0x0000, 0x0000, 0x0000, MB2(0x9EDF), - MB2(0x9ED8), 0x0000, 0x0000, MB2(0x9EE5), - 0x0000, MB2(0x9EE3), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9EDE), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9EDD), 0x0000, MB2(0x92CE), - 0x0000, MB2(0x9185), 0x0000, MB2(0x9EDB), - 0x0000, 0x0000, MB2(0x9ED9), 0x0000, /* 6A00 */ - 0x0000, MB2(0x9EE0), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9EE6), MB2(0x94F3), - MB2(0x9EEC), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9EE7), MB2(0x9EEA), - MB2(0x9EE4), 0x0000, 0x0000, MB2(0x9294), - 0x0000, MB2(0x9557), 0x0000, MB2(0x9EDA), - 0x0000, 0x0000, MB2(0x9EE2), MB2(0x8FBE), - 0x0000, MB2(0x96CD), MB2(0x9EF6), MB2(0x9EE9), /* 6A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8CA0), MB2(0x89A1), MB2(0x8A7E), - 0x0000, 0x0000, MB2(0x9ED1), 0x0000, - MB2(0xFAED), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8FBF), MB2(0x9EEE), 0x0000, - MB2(0x9EF5), MB2(0x8EF7), MB2(0x8A92), 0x0000, - 0x0000, MB2(0x924D), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6A40 */ - MB2(0x9EEB), 0x0000, MB2(0xFAEF), MB2(0x9EF0), - MB2(0x9EF4), 0x0000, 0x0000, MB2(0x8BB4), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8B6B), MB2(0x9EF2), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8B40), - 0x0000, MB2(0x93C9), MB2(0x9EF1), 0x0000, /* 6A60 */ - 0x0000, 0x0000, MB2(0x9EF3), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xFAEE), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9EED), MB2(0xFAF0), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9EEF), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xFAF1), MB2(0x8A80), - MB2(0x9268), 0x0000, 0x0000, 0x0000, /* 6A80 */ - MB2(0x9EFA), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9EF8), MB2(0x8CE7), 0x0000, - MB2(0x9EF7), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9F40), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9E77), 0x0000, 0x0000, 0x0000, - MB2(0x9EF9), 0x0000, MB2(0x9EFB), MB2(0x9EFC), /* 6AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9F4B), 0x0000, - MB2(0x9F47), 0x0000, MB2(0x9E8D), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9F46), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9F45), 0x0000, 0x0000, MB2(0x9F42), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9EE8), MB2(0x9F44), MB2(0x9F43), /* 6AC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9F49), 0x0000, MB2(0x9845), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9F4C), MB2(0x8BF9), - 0x0000, 0x0000, MB2(0x9F48), MB2(0x9F4A), - 0x0000, 0x0000, MB2(0xFAF2), 0x0000, /* 6AE0 */ - MB2(0xFAF3), 0x0000, 0x0000, 0x0000, - MB2(0x94A5), 0x0000, MB2(0x9F4D), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9F51), MB2(0x9F4E), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6B00 */ - MB2(0x9793), MB2(0x9F4F), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9EDC), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9F52), 0x0000, - 0x0000, 0x0000, MB2(0x9F53), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8954), 0x0000, MB2(0x9F55), - MB2(0x8C87), MB2(0x8E9F), 0x0000, MB2(0x8BD3), /* 6B20 */ - 0x0000, 0x0000, 0x0000, MB2(0x89A2), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x977E), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9F57), - MB2(0x9F56), MB2(0x9F59), MB2(0x8B5C), 0x0000, - 0x0000, MB2(0x8BD4), MB2(0x8ABC), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9F5C), /* 6B40 */ - 0x0000, 0x0000, 0x0000, MB2(0x9F5B), - 0x0000, MB2(0x9F5D), 0x0000, 0x0000, - MB2(0x89CC), 0x0000, MB2(0x9256), 0x0000, - MB2(0x9F5E), 0x0000, 0x0000, MB2(0x8ABD), - MB2(0x9F60), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9F5F), 0x0000, MB2(0x9F61), - 0x0000, 0x0000, 0x0000, MB2(0x9F62), - 0x0000, MB2(0x9F63), MB2(0x8E7E), MB2(0x90B3), /* 6B60 */ - MB2(0x8D9F), 0x0000, MB2(0x9590), 0x0000, - 0x0000, MB2(0x95E0), MB2(0x9863), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8E95), - 0x0000, 0x0000, 0x0000, MB2(0x8DCE), - MB2(0x97F0), 0x0000, 0x0000, 0x0000, - MB2(0x9F64), MB2(0x9F65), 0x0000, MB2(0x8E80), - 0x0000, 0x0000, 0x0000, MB2(0x9F66), - MB2(0x9F67), 0x0000, 0x0000, MB2(0x9F69), /* 6B80 */ - MB2(0x9F68), 0x0000, MB2(0x9677), 0x0000, - 0x0000, MB2(0x8F7D), MB2(0x8EEA), MB2(0x8E63), - 0x0000, MB2(0x9F6A), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9F6C), MB2(0x9042), 0x0000, - MB2(0x9F6B), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9F6D), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6BA0 */ - MB2(0x9F6E), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9F6F), MB2(0x9F70), - 0x0000, 0x0000, 0x0000, MB2(0x9F71), - 0x0000, MB2(0x9F73), MB2(0x9F72), MB2(0x9F74), - MB2(0x89A3), MB2(0x9269), 0x0000, MB2(0x9F75), - 0x0000, 0x0000, MB2(0x8E45), MB2(0x8A6B), - MB2(0x9F76), 0x0000, 0x0000, MB2(0x9361), - MB2(0x9ACA), 0x0000, 0x0000, 0x0000, /* 6BC0 */ - 0x0000, MB2(0x8B42), MB2(0x9F77), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9F78), - 0x0000, MB2(0x95EA), MB2(0x9688), 0x0000, - 0x0000, 0x0000, MB2(0x93C5), MB2(0x9F79), - MB2(0x94E4), 0x0000, MB2(0xFAF4), 0x0000, - MB2(0x94F9), 0x0000, 0x0000, MB2(0x96D1), - 0x0000, 0x0000, 0x0000, MB2(0x9F7A), - 0x0000, 0x0000, 0x0000, 0x0000, /* 6BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9F7C), - MB2(0x9F7B), 0x0000, 0x0000, MB2(0x9F7E), - 0x0000, 0x0000, 0x0000, MB2(0x9F7D), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9F81), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8E81), - 0x0000, MB2(0x96AF), 0x0000, MB2(0x9F82), - MB2(0x9F83), 0x0000, 0x0000, MB2(0x8B43), - 0x0000, 0x0000, 0x0000, MB2(0x9F84), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9F86), /* 6C20 */ - MB2(0x9F85), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9085), 0x0000, 0x0000, MB2(0x9558), - MB2(0x8969), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x94C3), MB2(0xFAF5), - MB2(0x92F3), MB2(0x8F60), MB2(0x8B81), 0x0000, /* 6C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x94C4), 0x0000, - MB2(0x8EAC), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9F88), 0x0000, MB2(0x8ABE), - 0x0000, 0x0000, MB2(0x8998), 0x0000, - MB2(0xFAF6), MB2(0x93F0), MB2(0x9F87), MB2(0x8D5D), - MB2(0x9272), 0x0000, MB2(0x9F89), 0x0000, /* 6C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9F91), 0x0000, MB2(0x9F8A), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xFAF8), - MB2(0x91BF), 0x0000, MB2(0x8B82), MB2(0x9F92), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8C88), 0x0000, - 0x0000, MB2(0x8B44), MB2(0x9F90), 0x0000, - 0x0000, MB2(0x9F8E), MB2(0x9F8B), MB2(0x9780), /* 6C80 */ - 0x0000, 0x0000, MB2(0xFAF7), 0x0000, - MB2(0x92BE), 0x0000, 0x0000, 0x0000, - MB2(0x93D7), MB2(0x9F8C), 0x0000, 0x0000, - MB2(0x9F94), 0x0000, MB2(0x9F93), MB2(0x8C42), - 0x0000, 0x0000, MB2(0x89AB), 0x0000, - 0x0000, MB2(0x8DB9), MB2(0x9F8D), MB2(0x9F8F), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9676), MB2(0x91F2), 0x0000, /* 6CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9697), - 0x0000, 0x0000, MB2(0x9F9C), 0x0000, - 0x0000, MB2(0x9F9D), 0x0000, MB2(0x89CD), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x95A6), MB2(0x96FB), MB2(0x9F9F), MB2(0x8EA1), - MB2(0x8FC0), MB2(0x9F98), MB2(0x9F9E), MB2(0x8988), - 0x0000, MB2(0x8BB5), 0x0000, 0x0000, /* 6CC0 */ - MB2(0x9F95), MB2(0x9F9A), 0x0000, 0x0000, - 0x0000, MB2(0x90F2), MB2(0x9491), 0x0000, - MB2(0x94E5), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9F97), - 0x0000, MB2(0x9640), 0x0000, MB2(0x9F99), - 0x0000, MB2(0x9FA2), MB2(0xFAF9), MB2(0x9FA0), - 0x0000, MB2(0x9F9B), 0x0000, 0x0000, - 0x0000, MB2(0x9641), MB2(0x9467), MB2(0x8B83), /* 6CE0 */ - 0x0000, MB2(0x9344), 0x0000, 0x0000, - MB2(0x928D), 0x0000, MB2(0x9FA3), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9FA1), - MB2(0x91D7), MB2(0x9F96), 0x0000, MB2(0x896A), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6D00 */ - MB2(0xFAFA), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x976D), - MB2(0x9FAE), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9FAD), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x90F4), - 0x0000, MB2(0x9FAA), 0x0000, MB2(0x978C), - 0x0000, 0x0000, MB2(0x93B4), MB2(0x9FA4), - 0x0000, 0x0000, 0x0000, 0x0000, /* 6D20 */ - 0x0000, MB2(0x92C3), 0x0000, 0x0000, - 0x0000, MB2(0x896B), MB2(0x8D5E), MB2(0x9FA7), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8F46), MB2(0x9FAC), - 0x0000, MB2(0x9FAB), MB2(0x9FA6), 0x0000, - MB2(0x9FA9), 0x0000, 0x0000, MB2(0x8A88), - 0x0000, MB2(0x9FA8), MB2(0x9468), 0x0000, - 0x0000, MB2(0x97AC), 0x0000, 0x0000, /* 6D40 */ - MB2(0x8FF2), MB2(0x90F3), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9FB4), MB2(0x9FB2), 0x0000, - MB2(0x956C), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9FAF), /* 6D60 */ - MB2(0x9FB1), 0x0000, MB2(0x8959), 0x0000, - 0x0000, MB2(0x8D5F), MB2(0x9851), 0x0000, - MB2(0x8A5C), 0x0000, MB2(0x9582), MB2(0xFAFC), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9781), 0x0000, 0x0000, MB2(0x8A43), - MB2(0x905A), MB2(0x9FB3), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6D80 */ - 0x0000, MB2(0x9FB8), 0x0000, MB2(0xFAFB), - MB2(0x8FC1), 0x0000, 0x0000, 0x0000, - MB2(0x974F), 0x0000, MB2(0x9FB5), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9FB0), - 0x0000, MB2(0x9FB6), MB2(0xFB40), 0x0000, - 0x0000, MB2(0x97DC), 0x0000, MB2(0x9393), - MB2(0x93C0), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFB41), 0x0000, 0x0000, MB2(0x8A55), - 0x0000, 0x0000, MB2(0x8974), 0x0000, - 0x0000, MB2(0x9FBC), 0x0000, 0x0000, - MB2(0x9FBF), 0x0000, 0x0000, 0x0000, - MB2(0x97C1), 0x0000, 0x0000, 0x0000, - MB2(0x9784), 0x0000, 0x0000, 0x0000, /* 6DC0 */ - 0x0000, MB2(0x9FC6), MB2(0x9FC0), MB2(0x9FBD), - 0x0000, 0x0000, 0x0000, MB2(0x97D2), - MB2(0x9FC3), 0x0000, 0x0000, MB2(0xFB42), - 0x0000, MB2(0x8F69), MB2(0x9FC5), 0x0000, - 0x0000, MB2(0x9FCA), 0x0000, 0x0000, - MB2(0x9391), MB2(0x9FC8), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9FC2), 0x0000, - 0x0000, MB2(0x9257), 0x0000, 0x0000, /* 6DE0 */ - MB2(0x9FC9), 0x0000, MB2(0x9FBE), 0x0000, - MB2(0x9FC4), 0x0000, MB2(0x9FCB), MB2(0x88FA), - MB2(0x9FC1), 0x0000, MB2(0x9FCC), 0x0000, - 0x0000, MB2(0x905B), MB2(0xFB44), MB2(0x8F7E), - 0x0000, MB2(0x95A3), 0x0000, MB2(0x8DAC), - MB2(0xFB43), MB2(0x9FB9), MB2(0x9FC7), MB2(0x9359), - MB2(0xFB45), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6E00 */ - 0x0000, MB2(0x90B4), 0x0000, MB2(0x8A89), - MB2(0x8DCF), MB2(0x8FC2), MB2(0x9FBB), MB2(0x8F61), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8C6B), - 0x0000, MB2(0x9FBA), 0x0000, 0x0000, - 0x0000, MB2(0x9FD0), MB2(0x8F8D), MB2(0x8CB8), - 0x0000, MB2(0x9FDF), 0x0000, MB2(0x9FD9), - MB2(0x8B94), MB2(0x936E), 0x0000, MB2(0x9FD4), /* 6E20 */ - MB2(0x9FDD), MB2(0x88AD), MB2(0x8951), MB2(0xFB48), - 0x0000, MB2(0x89B7), 0x0000, MB2(0x9FD6), - MB2(0x91AA), MB2(0x9FCD), MB2(0x9FCF), MB2(0x8D60), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9FE0), MB2(0xFB46), MB2(0x9FDB), 0x0000, - MB2(0xFB49), 0x0000, MB2(0x9FD3), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9FDA), /* 6E40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x96A9), 0x0000, - 0x0000, MB2(0x9FD8), MB2(0x9FDC), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8CCE), 0x0000, - MB2(0x8FC3), 0x0000, 0x0000, MB2(0x9258), - MB2(0xFB47), 0x0000, 0x0000, MB2(0x9FD2), - 0x0000, 0x0000, 0x0000, 0x0000, /* 6E60 */ - 0x0000, 0x0000, 0x0000, MB2(0x974E), - 0x0000, 0x0000, 0x0000, MB2(0x9FD5), - 0x0000, 0x0000, MB2(0x9FCE), MB2(0x9392), - 0x0000, 0x0000, MB2(0x9FD1), 0x0000, - 0x0000, 0x0000, MB2(0x9FD7), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9870), MB2(0x8EBC), - MB2(0x969E), 0x0000, MB2(0x9FE1), 0x0000, /* 6E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x94AC), 0x0000, 0x0000, MB2(0x9FED), - MB2(0x8CB9), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8F80), 0x0000, - MB2(0x9FE3), 0x0000, 0x0000, 0x0000, - MB2(0x97AD), MB2(0x8D61), 0x0000, MB2(0x9FF0), - 0x0000, 0x0000, MB2(0x88EC), 0x0000, /* 6EA0 */ - 0x0000, MB2(0x9FEE), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9FE2), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9FE8), - 0x0000, 0x0000, MB2(0x9FEA), 0x0000, - 0x0000, 0x0000, MB2(0x976E), MB2(0x9FE5), - 0x0000, 0x0000, MB2(0x934D), 0x0000, - 0x0000, MB2(0x9FE7), 0x0000, MB2(0xFB4A), - 0x0000, 0x0000, MB2(0x9FEF), 0x0000, /* 6EC0 */ - MB2(0x9FE9), MB2(0x96C5), 0x0000, 0x0000, - 0x0000, MB2(0x9FE4), 0x0000, MB2(0x8EA0), - MB2(0x9FFC), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8A8A), 0x0000, MB2(0x9FE6), - MB2(0x9FEB), MB2(0x9FEC), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x91EA), MB2(0x91D8), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 6EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9FF4), 0x0000, 0x0000, MB2(0x9FFA), - 0x0000, 0x0000, MB2(0x9FF8), 0x0000, - MB2(0x9348), 0x0000, 0x0000, MB2(0xE042), - MB2(0x9FF5), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9FF6), MB2(0x9FDE), - 0x0000, MB2(0x8B99), MB2(0x9559), 0x0000, /* 6F00 */ - 0x0000, 0x0000, MB2(0x8EBD), 0x0000, - 0x0000, MB2(0x8D97), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9852), - 0x0000, MB2(0x9FF2), 0x0000, MB2(0xE041), - MB2(0x8989), MB2(0x9186), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9499), 0x0000, MB2(0x8ABF), MB2(0x97F8), /* 6F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x969F), - MB2(0x92D0), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9FF9), MB2(0x9FFB), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9151), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE040), MB2(0x9FF7), - 0x0000, MB2(0x9FF1), 0x0000, 0x0000, /* 6F40 */ - 0x0000, MB2(0x8AC1), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8C89), 0x0000, 0x0000, 0x0000, - MB2(0xE04E), 0x0000, 0x0000, MB2(0xE049), - MB2(0x90F6), 0x0000, 0x0000, MB2(0x8A83), - 0x0000, 0x0000, 0x0000, 0x0000, /* 6F60 */ - MB2(0x8F81), 0x0000, MB2(0xE052), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE04B), MB2(0x92AA), MB2(0xE048), - MB2(0x92D7), 0x0000, 0x0000, 0x0000, - MB2(0xE06B), 0x0000, 0x0000, 0x0000, - MB2(0xE045), 0x0000, MB2(0xE044), 0x0000, - MB2(0xE04D), 0x0000, 0x0000, 0x0000, - MB2(0xE047), MB2(0xE046), MB2(0xE04C), 0x0000, /* 6F80 */ - MB2(0x909F), 0x0000, MB2(0xE043), 0x0000, - MB2(0xFB4B), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE04F), 0x0000, - 0x0000, MB2(0xE050), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8AC0), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE055), 0x0000, MB2(0xE054), /* 6FA0 */ - MB2(0xE056), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE059), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9362), 0x0000, MB2(0xE053), - 0x0000, MB2(0xFB4C), 0x0000, 0x0000, - 0x0000, MB2(0xE057), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8C83), MB2(0x91F7), MB2(0xE051), MB2(0x945A), /* 6FC0 */ - 0x0000, 0x0000, MB2(0xE058), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE05D), MB2(0xE05B), 0x0000, 0x0000, - MB2(0xE05E), 0x0000, 0x0000, MB2(0xE061), - 0x0000, 0x0000, 0x0000, MB2(0xE05A), - MB2(0x8D8A), MB2(0x9447), 0x0000, 0x0000, /* 6FE0 */ - MB2(0x9FB7), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9794), - MB2(0xE05C), 0x0000, MB2(0xE060), MB2(0x91F3), - 0x0000, MB2(0xE05F), 0x0000, MB2(0xE04A), - 0x0000, MB2(0xFB4D), MB2(0xE889), 0x0000, - 0x0000, 0x0000, MB2(0xE064), 0x0000, - 0x0000, 0x0000, MB2(0xE068), 0x0000, - 0x0000, MB2(0xE066), 0x0000, 0x0000, /* 7000 */ - 0x0000, MB2(0xFB4E), 0x0000, MB2(0xFB4F), - 0x0000, MB2(0xE062), 0x0000, MB2(0xE063), - 0x0000, 0x0000, 0x0000, MB2(0xE067), - 0x0000, MB2(0xE065), 0x0000, 0x0000, - 0x0000, MB2(0x956D), 0x0000, 0x0000, - MB2(0xE06D), 0x0000, MB2(0xE06A), MB2(0xE069), - 0x0000, MB2(0xE06C), MB2(0x93D2), MB2(0xE06E), - 0x0000, 0x0000, 0x0000, 0x0000, /* 7020 */ - 0x0000, 0x0000, MB2(0x9295), MB2(0x91EB), - MB2(0xFB50), 0x0000, 0x0000, 0x0000, - MB2(0x90A3), 0x0000, 0x0000, 0x0000, - MB2(0xE06F), 0x0000, MB2(0xE071), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE070), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9FF3), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE072), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x93E5), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE073), /* 7060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x89CE), - 0x0000, 0x0000, 0x0000, MB2(0x9394), - MB2(0x8A44), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8B84), 0x0000, 0x0000, 0x0000, - MB2(0x8EDC), MB2(0x8DD0), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7080 */ - 0x0000, MB2(0xFB51), 0x0000, 0x0000, - 0x0000, MB2(0x9846), MB2(0x9086), 0x0000, - 0x0000, 0x0000, MB2(0x898A), 0x0000, - 0x0000, 0x0000, MB2(0xE075), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE074), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 70A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xFB52), - MB2(0xE078), MB2(0x9259), MB2(0xE07B), MB2(0xE076), - 0x0000, 0x0000, 0x0000, MB2(0xE07A), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE079), MB2(0x935F), MB2(0x88D7), MB2(0xFA62), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 70C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x97F3), 0x0000, 0x0000, MB2(0xE07D), - 0x0000, 0x0000, 0x0000, MB2(0x8947), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE080), 0x0000, 0x0000, - 0x0000, MB2(0xE07E), 0x0000, MB2(0xE07C), - 0x0000, 0x0000, 0x0000, 0x0000, /* 70E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE077), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9642), 0x0000, 0x0000, - 0x0000, MB2(0xE082), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7100 */ - MB2(0xFB54), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE081), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xFB53), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x898B), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE084), MB2(0x95B0), 0x0000, - MB2(0xE083), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x96B3), 0x0000, 0x0000, /* 7120 */ - 0x0000, 0x0000, MB2(0x8FC5), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9152), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8FC4), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7140 */ - 0x0000, 0x0000, MB2(0xFB56), MB2(0xFB57), - 0x0000, MB2(0x97F9), 0x0000, 0x0000, - MB2(0xE08A), 0x0000, MB2(0x90F7), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE086), MB2(0xE08B), 0x0000, - 0x0000, MB2(0x898C), 0x0000, 0x0000, - MB2(0xFB55), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE089), 0x0000, /* 7160 */ - MB2(0x9481), MB2(0xE085), MB2(0xE088), MB2(0x8FC6), - 0x0000, MB2(0x94CF), 0x0000, 0x0000, - MB2(0xE08C), 0x0000, MB2(0x8ECF), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x90F8), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7180 */ - MB2(0xE08F), 0x0000, 0x0000, 0x0000, - MB2(0xE087), 0x0000, MB2(0x8C46), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE08D), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x976F), MB2(0xE090), 0x0000, 0x0000, - 0x0000, MB2(0xEAA4), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8F6E), - 0x0000, 0x0000, 0x0000, 0x0000, /* 71A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE091), 0x0000, 0x0000, 0x0000, - MB2(0xE092), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x944D), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE094), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE095), 0x0000, - 0x0000, MB2(0xFB59), 0x0000, MB2(0x9452), /* 71C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9395), MB2(0xE097), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE099), 0x0000, - MB2(0x97D3), 0x0000, MB2(0xE096), 0x0000, - MB2(0xE098), MB2(0x898D), 0x0000, MB2(0xE093), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9A7A), - MB2(0xE09A), 0x0000, 0x0000, 0x0000, /* 71E0 */ - 0x0000, MB2(0x9187), MB2(0x8E57), MB2(0xE09C), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE09B), MB2(0x9043), MB2(0x99D7), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE09D), 0x0000, 0x0000, - 0x0000, MB2(0xE09F), 0x0000, MB2(0xE08E), - MB2(0xE09E), 0x0000, MB2(0xFB5A), MB2(0xE0A0), - 0x0000, 0x0000, 0x0000, 0x0000, /* 7200 */ - 0x0000, 0x0000, MB2(0x949A), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE0A1), 0x0000, 0x0000, - MB2(0xE0A2), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE0A3), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE0A4), 0x0000, MB2(0x92DC), 0x0000, - MB2(0xE0A6), MB2(0xE0A5), 0x0000, 0x0000, - MB2(0xE0A7), 0x0000, MB2(0xE0A8), 0x0000, - 0x0000, MB2(0x8EDD), MB2(0x9583), 0x0000, - 0x0000, 0x0000, MB2(0x96EA), MB2(0xE0A9), - MB2(0xE0AA), MB2(0x9175), MB2(0x8EA2), MB2(0xE0AB), - MB2(0xE0AC), 0x0000, 0x0000, 0x0000, /* 7240 */ - 0x0000, 0x0000, MB2(0xE0AD), MB2(0x95D0), - MB2(0x94C5), 0x0000, 0x0000, MB2(0xE0AE), - MB2(0x9476), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x92AB), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE0AF), MB2(0x89E5), 0x0000, MB2(0x8B8D), - 0x0000, MB2(0x96C4), 0x0000, MB2(0x96B4), - 0x0000, MB2(0x89B2), MB2(0x9853), 0x0000, /* 7260 */ - 0x0000, 0x0000, 0x0000, MB2(0x9671), - 0x0000, MB2(0x95A8), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x90B5), 0x0000, - MB2(0xE0B0), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x93C1), 0x0000, 0x0000, - 0x0000, MB2(0x8CA1), MB2(0xE0B1), 0x0000, - MB2(0x8DD2), MB2(0xE0B3), MB2(0xE0B2), 0x0000, /* 7280 */ - 0x0000, 0x0000, 0x0000, MB2(0xE0B4), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE0B5), 0x0000, - 0x0000, 0x0000, MB2(0xE0B6), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8B5D), 0x0000, MB2(0xE0B7), 0x0000, /* 72A0 */ - 0x0000, 0x0000, 0x0000, MB2(0xE0B8), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8CA2), 0x0000, 0x0000, MB2(0x94C6), - 0x0000, MB2(0xFB5B), MB2(0xE0BA), 0x0000, - 0x0000, 0x0000, MB2(0x8FF3), 0x0000, - 0x0000, MB2(0xE0B9), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xFB5C), 0x0000, - 0x0000, 0x0000, MB2(0x8BB6), MB2(0xE0BB), /* 72C0 */ - MB2(0xE0BD), 0x0000, MB2(0xE0BC), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE0BE), 0x0000, - MB2(0x8CCF), 0x0000, MB2(0xE0BF), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8BE7), - 0x0000, MB2(0x915F), 0x0000, MB2(0x8D9D), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE0C1), MB2(0xE0C2), MB2(0xE0C0), 0x0000, /* 72E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8EEB), 0x0000, 0x0000, - MB2(0x93C6), MB2(0x8BB7), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE0C4), - MB2(0x924B), MB2(0xE0C3), 0x0000, 0x0000, - MB2(0x9854), MB2(0x9482), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE0C7), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE0C9), MB2(0xE0C6), - 0x0000, 0x0000, 0x0000, MB2(0x96D2), - MB2(0xE0C8), MB2(0xE0CA), 0x0000, MB2(0x97C2), - 0x0000, 0x0000, 0x0000, 0x0000, /* 7320 */ - MB2(0xFB5D), MB2(0xE0CE), 0x0000, 0x0000, - 0x0000, MB2(0xE0CD), MB2(0x9296), MB2(0x944C), - 0x0000, 0x0000, MB2(0x8CA3), MB2(0xE0CC), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE0CB), 0x0000, MB2(0x9750), MB2(0x9751), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE0CF), MB2(0x898E), - 0x0000, 0x0000, 0x0000, 0x0000, /* 7340 */ - MB2(0x8D96), MB2(0x8E82), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE0D0), MB2(0xE0D1), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE0D3), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8F62), /* 7360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE0D5), 0x0000, MB2(0xE0D4), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE0D6), 0x0000, MB2(0x8A6C), 0x0000, - 0x0000, MB2(0xE0D8), 0x0000, MB2(0xFB5F), - MB2(0xE0D7), 0x0000, MB2(0xE0DA), MB2(0xE0D9), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7380 */ - MB2(0x8CBA), 0x0000, 0x0000, MB2(0x97A6), - 0x0000, MB2(0x8BCA), 0x0000, MB2(0x89A4), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8BE8), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 73A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8ADF), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x97E6), MB2(0xE0DC), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE0DE), - 0x0000, MB2(0xFB60), 0x0000, 0x0000, - MB2(0xE0DF), 0x0000, MB2(0x89CF), 0x0000, /* 73C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE0DB), MB2(0xFB61), MB2(0x8E58), 0x0000, - 0x0000, MB2(0x92BF), MB2(0xE0DD), 0x0000, - 0x0000, 0x0000, MB2(0xFB64), 0x0000, - 0x0000, 0x0000, MB2(0xFB62), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE0E2), 0x0000, - MB2(0x8EEC), 0x0000, 0x0000, MB2(0xFB63), /* 73E0 */ - 0x0000, MB2(0xE0E0), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8C5D), 0x0000, - 0x0000, MB2(0x94C7), MB2(0xE0E1), 0x0000, - 0x0000, MB2(0xE0FC), 0x0000, 0x0000, - 0x0000, MB2(0xFB66), 0x0000, 0x0000, - MB2(0xE0E7), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8CBB), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8B85), /* 7400 */ - 0x0000, MB2(0xE0E4), MB2(0x979D), MB2(0xFB65), - 0x0000, MB2(0x97AE), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x91F4), 0x0000, /* 7420 */ - 0x0000, MB2(0xE0E6), MB2(0xFB67), 0x0000, - 0x0000, MB2(0xFB69), MB2(0xFB68), 0x0000, - 0x0000, 0x0000, MB2(0xFB6A), 0x0000, - 0x0000, 0x0000, MB2(0xE0E8), MB2(0x97D4), - MB2(0x8BD5), MB2(0x94FA), MB2(0x9469), 0x0000, - 0x0000, 0x0000, MB2(0xE0E9), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE0EB), - 0x0000, MB2(0xE0EE), 0x0000, 0x0000, /* 7440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE0EA), 0x0000, 0x0000, - 0x0000, MB2(0xE0ED), MB2(0x8CE8), MB2(0x896C), - MB2(0xE0EF), 0x0000, MB2(0x9090), MB2(0xE0EC), - MB2(0x97DA), 0x0000, MB2(0xFB6B), MB2(0xE0F2), /* 7460 */ - MB2(0xEAA2), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE0F0), MB2(0xE0F3), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE0E5), - MB2(0xE0F1), 0x0000, 0x0000, MB2(0x8DBA), - 0x0000, 0x0000, MB2(0xE0F4), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE0F5), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x979E), /* 7480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xFB6C), 0x0000, MB2(0xE0F6), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE0F7), MB2(0xFB6D), - 0x0000, 0x0000, MB2(0xE0E3), 0x0000, /* 74A0 */ - 0x0000, 0x0000, 0x0000, MB2(0xE0F8), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8AC2), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8EA3), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 74C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE0F9), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE0FA), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE0FB), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x895A), 0x0000, 0x0000, 0x0000, - MB2(0xE140), 0x0000, MB2(0x955A), MB2(0xE141), /* 74E0 */ - 0x0000, 0x0000, MB2(0x8AA2), MB2(0xE142), - 0x0000, MB2(0xE143), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE144), 0x0000, - MB2(0xE146), MB2(0xE147), MB2(0xE145), 0x0000, - 0x0000, 0x0000, MB2(0x9572), MB2(0xE149), - MB2(0xE148), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xFB6E), 0x0000, MB2(0xE14B), /* 7500 */ - MB2(0xE14A), MB2(0xE14C), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE14D), MB2(0xE14F), MB2(0xE14E), 0x0000, - 0x0000, MB2(0x8D99), 0x0000, MB2(0xE151), - 0x0000, MB2(0xE150), 0x0000, 0x0000, - MB2(0x8AC3), 0x0000, MB2(0x9072), 0x0000, - MB2(0x935B), 0x0000, MB2(0xE152), MB2(0x90B6), - 0x0000, 0x0000, 0x0000, MB2(0x8E59), /* 7520 */ - 0x0000, MB2(0x8999), MB2(0xE153), 0x0000, - MB2(0x9770), 0x0000, 0x0000, MB2(0x95E1), - MB2(0xE154), 0x0000, 0x0000, MB2(0xFAA8), - MB2(0x9363), MB2(0x9752), MB2(0x8D62), MB2(0x905C), - 0x0000, 0x0000, 0x0000, MB2(0x926A), - MB2(0x99B2), 0x0000, MB2(0x92AC), MB2(0x89E6), - MB2(0xE155), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7540 */ - MB2(0xE156), 0x0000, MB2(0xE15B), 0x0000, - 0x0000, MB2(0xE159), MB2(0xE158), MB2(0x9DC0), - MB2(0x8A45), MB2(0xE157), 0x0000, MB2(0x88D8), - 0x0000, MB2(0x94A8), 0x0000, 0x0000, - MB2(0x94C8), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x97AF), MB2(0xE15C), MB2(0xE15A), - MB2(0x927B), MB2(0x90A4), 0x0000, 0x0000, - MB2(0x94A9), 0x0000, MB2(0x954C), 0x0000, /* 7560 */ - MB2(0xE15E), MB2(0x97AA), MB2(0x8C6C), MB2(0xE15F), - 0x0000, MB2(0xE15D), MB2(0x94D4), MB2(0xE160), - 0x0000, MB2(0xE161), 0x0000, MB2(0xFB6F), - MB2(0x88D9), 0x0000, 0x0000, MB2(0x8FF4), - MB2(0xE166), 0x0000, MB2(0xE163), MB2(0x93EB), - MB2(0xE162), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8B45), - 0x0000, 0x0000, MB2(0xE169), 0x0000, /* 7580 */ - 0x0000, 0x0000, MB2(0xE164), MB2(0xE165), - 0x0000, MB2(0xE168), MB2(0xE167), MB2(0x9544), - 0x0000, 0x0000, MB2(0x9161), MB2(0x9160), - 0x0000, MB2(0x8B5E), 0x0000, 0x0000, - MB2(0xE16A), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE16B), 0x0000, - 0x0000, MB2(0xE16C), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE16E), /* 75A0 */ - 0x0000, MB2(0xE16D), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8975), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE176), MB2(0x94E6), MB2(0xE170), - 0x0000, MB2(0xE172), 0x0000, 0x0000, - MB2(0xE174), MB2(0x905D), 0x0000, 0x0000, - MB2(0xE175), MB2(0xE173), MB2(0x8EBE), 0x0000, - 0x0000, 0x0000, MB2(0xE16F), MB2(0xE171), /* 75C0 */ - 0x0000, MB2(0x9561), 0x0000, MB2(0x8FC7), - 0x0000, 0x0000, MB2(0xE178), 0x0000, - 0x0000, MB2(0xE177), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE179), 0x0000, - MB2(0x8EA4), MB2(0x8DAD), 0x0000, 0x0000, - MB2(0x9397), MB2(0xE17A), 0x0000, MB2(0x92C9), - 0x0000, 0x0000, MB2(0xE17C), 0x0000, - 0x0000, 0x0000, MB2(0x979F), MB2(0xE17B), /* 75E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9189), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE182), 0x0000, MB2(0xE184), MB2(0xE185), - MB2(0x9273), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE183), 0x0000, - MB2(0xE180), 0x0000, MB2(0xE17D), MB2(0xE17E), - 0x0000, MB2(0xE181), 0x0000, 0x0000, /* 7600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE188), 0x0000, MB2(0xE186), - 0x0000, MB2(0xE187), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE189), - MB2(0xE18B), MB2(0xE18C), MB2(0xE18D), 0x0000, /* 7620 */ - MB2(0xE18E), 0x0000, 0x0000, MB2(0xE18A), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE190), 0x0000, 0x0000, 0x0000, - MB2(0xE18F), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE191), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x97C3), 0x0000, /* 7640 */ - 0x0000, 0x0000, MB2(0xE194), MB2(0xE192), - MB2(0xE193), 0x0000, 0x0000, 0x0000, - MB2(0x8AE0), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x96FC), 0x0000, - 0x0000, 0x0000, MB2(0x95C8), 0x0000, - MB2(0xE196), 0x0000, 0x0000, 0x0000, - MB2(0xE195), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE197), MB2(0xE198), 0x0000, /* 7660 */ - 0x0000, 0x0000, 0x0000, MB2(0xE19C), - MB2(0xE199), MB2(0xE19A), MB2(0xE19B), 0x0000, - MB2(0xE19D), 0x0000, 0x0000, 0x0000, - MB2(0xE19E), 0x0000, MB2(0xE19F), 0x0000, - 0x0000, 0x0000, MB2(0xE1A0), 0x0000, - MB2(0xE1A1), 0x0000, MB2(0x94AD), MB2(0x936F), - MB2(0xE1A2), MB2(0x9492), MB2(0x9553), 0x0000, - MB2(0xE1A3), 0x0000, MB2(0xFB70), MB2(0xE1A4), /* 7680 */ - MB2(0x9349), 0x0000, MB2(0x8A46), MB2(0x8D63), - MB2(0xE1A5), 0x0000, 0x0000, MB2(0xE1A6), - 0x0000, 0x0000, MB2(0xE1A7), 0x0000, - MB2(0x8E48), 0x0000, 0x0000, MB2(0xE1A9), - 0x0000, 0x0000, MB2(0xE1A8), 0x0000, - 0x0000, MB2(0xE1AA), MB2(0xE1AB), MB2(0xFB73), - MB2(0xFB71), 0x0000, MB2(0xFB72), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 76A0 */ - 0x0000, 0x0000, MB2(0xFB74), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x94E7), 0x0000, - MB2(0xE1AC), 0x0000, 0x0000, 0x0000, - MB2(0xE1AD), 0x0000, 0x0000, MB2(0xEA89), - MB2(0xE1AE), MB2(0xE1AF), MB2(0xE1B0), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8E4D), - 0x0000, 0x0000, MB2(0xE1B1), MB2(0x9475), /* 76C0 */ - 0x0000, 0x0000, MB2(0x967E), 0x0000, - MB2(0x896D), 0x0000, MB2(0x8976), 0x0000, - 0x0000, MB2(0xE1B2), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE1B4), 0x0000, - 0x0000, 0x0000, MB2(0xE1B3), MB2(0x9390), - 0x0000, 0x0000, 0x0000, MB2(0x90B7), - MB2(0x9F58), 0x0000, MB2(0xE1B5), MB2(0x96BF), - 0x0000, MB2(0xE1B6), 0x0000, MB2(0x8AC4), /* 76E0 */ - MB2(0x94D5), MB2(0xE1B7), 0x0000, MB2(0xE1B8), - 0x0000, 0x0000, MB2(0xE1B9), 0x0000, - 0x0000, 0x0000, MB2(0x96DA), 0x0000, - 0x0000, 0x0000, MB2(0x96D3), 0x0000, - MB2(0x92BC), 0x0000, 0x0000, 0x0000, - MB2(0x918A), 0x0000, 0x0000, MB2(0xE1BB), - 0x0000, 0x0000, MB2(0x8F82), 0x0000, - 0x0000, MB2(0x8FC8), 0x0000, 0x0000, /* 7700 */ - MB2(0xE1BE), 0x0000, 0x0000, MB2(0xE1BD), - MB2(0xE1BC), MB2(0x94FB), 0x0000, MB2(0x8AC5), - MB2(0x8CA7), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE1C4), - 0x0000, 0x0000, MB2(0xE1C1), MB2(0x905E), - MB2(0x96B0), 0x0000, 0x0000, 0x0000, /* 7720 */ - MB2(0xE1C0), MB2(0xE1C2), MB2(0xE1C3), 0x0000, - 0x0000, MB2(0xE1BF), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE1C5), - MB2(0xE1C6), 0x0000, MB2(0x92AD), 0x0000, - MB2(0x8AE1), 0x0000, 0x0000, 0x0000, - MB2(0x9285), 0x0000, 0x0000, 0x0000, /* 7740 */ - 0x0000, 0x0000, MB2(0xFB76), MB2(0xE1C7), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE1C8), MB2(0xE1CB), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9087), 0x0000, MB2(0x93C2), /* 7760 */ - 0x0000, MB2(0xE1CC), MB2(0x9672), 0x0000, - MB2(0xE1C9), 0x0000, 0x0000, MB2(0xE1CA), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE1CF), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE1CE), MB2(0xE1CD), - 0x0000, 0x0000, 0x0000, 0x0000, /* 7780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE1D1), - 0x0000, 0x0000, MB2(0xE1D0), 0x0000, - 0x0000, MB2(0xE1D2), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE1D4), 0x0000, - MB2(0xE1D3), 0x0000, 0x0000, 0x0000, /* 77A0 */ - 0x0000, MB2(0x95CB), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8F75), MB2(0x97C4), 0x0000, 0x0000, - MB2(0xE1D5), 0x0000, 0x0000, MB2(0x93B5), - 0x0000, 0x0000, MB2(0xE1D6), 0x0000, - 0x0000, MB2(0xE1D7), 0x0000, MB2(0xE1DB), - MB2(0xE1D9), MB2(0xE1DA), 0x0000, MB2(0xE1D8), - 0x0000, 0x0000, 0x0000, 0x0000, /* 77C0 */ - 0x0000, 0x0000, 0x0000, MB2(0xE1DC), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE1DD), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE1DE), - 0x0000, 0x0000, MB2(0xE1DF), MB2(0x96B5), - MB2(0xE1E0), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x96EE), MB2(0xE1E1), /* 77E0 */ - 0x0000, MB2(0x926D), 0x0000, MB2(0x948A), - 0x0000, MB2(0x8BE9), 0x0000, 0x0000, - 0x0000, MB2(0x925A), MB2(0xE1E2), MB2(0x8BB8), - 0x0000, 0x0000, 0x0000, MB2(0x90CE), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE1E3), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8DBB), 0x0000, /* 7800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE1E4), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE1E5), 0x0000, - MB2(0x8CA4), MB2(0x8DD3), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE1E7), MB2(0xFB78), 0x0000, 0x0000, /* 7820 */ - 0x0000, MB2(0x9375), MB2(0x8DD4), MB2(0x8B6D), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9643), 0x0000, - MB2(0x946A), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9376), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8D7B), - 0x0000, 0x0000, 0x0000, 0x0000, /* 7840 */ - 0x0000, MB2(0xE1E9), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xFB79), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8FC9), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7860 */ - MB2(0xFB7A), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x97B0), - MB2(0x8D64), 0x0000, 0x0000, MB2(0x8CA5), - 0x0000, 0x0000, MB2(0x94A1), 0x0000, - MB2(0xE1EB), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xFB7B), 0x0000, - MB2(0xE1ED), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8CE9), 0x0000, 0x0000, /* 7880 */ - 0x0000, 0x0000, MB2(0xE1EC), MB2(0x92F4), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE1EF), MB2(0x8A56), MB2(0xE1EA), 0x0000, - 0x0000, MB2(0x94E8), 0x0000, MB2(0x894F), - 0x0000, MB2(0x8DEA), 0x0000, MB2(0x9871), - 0x0000, 0x0000, MB2(0xE1EE), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE1F0), /* 78A0 */ - 0x0000, 0x0000, 0x0000, MB2(0x95C9), - 0x0000, MB2(0x90D7), MB2(0xE1F2), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE1F3), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE1F1), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8A6D), 0x0000, - MB2(0xE1F9), 0x0000, MB2(0xE1F8), 0x0000, - 0x0000, MB2(0x8EA5), 0x0000, 0x0000, /* 78C0 */ - 0x0000, MB2(0xE1FA), MB2(0xE1F5), 0x0000, - 0x0000, 0x0000, MB2(0xE1FB), MB2(0xE1F6), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x94D6), MB2(0xE1F4), 0x0000, 0x0000, - MB2(0xE1F7), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE241), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 78E0 */ - 0x0000, 0x0000, 0x0000, MB2(0xE240), - MB2(0x9681), 0x0000, 0x0000, 0x0000, - MB2(0xE1FC), 0x0000, 0x0000, MB2(0x88E9), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE243), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE242), 0x0000, 0x0000, - 0x0000, MB2(0x8FCA), 0x0000, 0x0000, /* 7900 */ - 0x0000, 0x0000, 0x0000, MB2(0xE244), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9162), 0x0000, - 0x0000, MB2(0xE246), MB2(0xE245), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE247), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7920 */ - 0x0000, 0x0000, MB2(0xE1E6), 0x0000, - 0x0000, 0x0000, MB2(0xE1E8), MB2(0xE249), - MB2(0xE248), 0x0000, 0x0000, 0x0000, - MB2(0xFB7C), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8EA6), 0x0000, - MB2(0x97E7), 0x0000, MB2(0x8ED0), 0x0000, - MB2(0xE24A), MB2(0x8C56), 0x0000, 0x0000, /* 7940 */ - 0x0000, 0x0000, 0x0000, MB2(0x8B5F), - MB2(0x8B46), MB2(0x8E83), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9753), 0x0000, 0x0000, MB2(0xE250), - 0x0000, MB2(0xE24F), MB2(0x9163), MB2(0xE24C), - 0x0000, 0x0000, MB2(0xE24E), 0x0000, - 0x0000, MB2(0x8F6A), MB2(0x905F), MB2(0xE24D), - MB2(0xE24B), 0x0000, MB2(0x9449), 0x0000, /* 7960 */ - 0x0000, MB2(0x8FCB), 0x0000, 0x0000, - MB2(0x955B), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8DD5), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9398), - 0x0000, 0x0000, MB2(0xE251), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE252), - MB2(0xE268), MB2(0x8BD6), 0x0000, 0x0000, /* 7980 */ - MB2(0x985C), MB2(0x9154), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE253), 0x0000, - 0x0000, MB2(0x89D0), MB2(0x92F5), MB2(0x959F), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFB81), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xFB83), - 0x0000, MB2(0xE254), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 79A0 */ - 0x0000, 0x0000, MB2(0x8B9A), MB2(0xE255), - 0x0000, 0x0000, MB2(0xE257), 0x0000, - 0x0000, 0x0000, MB2(0xE258), 0x0000, - MB2(0x9448), 0x0000, 0x0000, MB2(0xE259), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE25A), MB2(0xE25B), 0x0000, - 0x0000, MB2(0x8BD7), MB2(0x89D1), MB2(0x93C3), - MB2(0x8F47), MB2(0x8E84), 0x0000, 0x0000, /* 79C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE25C), 0x0000, MB2(0x8F48), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x89C8), MB2(0x9562), 0x0000, - 0x0000, MB2(0xE25D), 0x0000, 0x0000, - MB2(0x94E9), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9164), - 0x0000, MB2(0xE260), 0x0000, MB2(0xE261), /* 79E0 */ - MB2(0x9489), 0x0000, MB2(0x9060), MB2(0xE25E), - 0x0000, MB2(0x9281), 0x0000, 0x0000, - MB2(0xE25F), 0x0000, 0x0000, 0x0000, - MB2(0x8FCC), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x88DA), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8B48), 0x0000, 0x0000, 0x0000, /* 7A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE262), 0x0000, 0x0000, MB2(0x92F6), - 0x0000, MB2(0xE263), MB2(0x90C5), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x96AB), 0x0000, 0x0000, MB2(0x9542), - MB2(0xE264), MB2(0xE265), MB2(0x9274), 0x0000, - MB2(0x97C5), 0x0000, 0x0000, MB2(0xE267), - MB2(0xE266), 0x0000, 0x0000, 0x0000, /* 7A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8EED), 0x0000, - 0x0000, MB2(0xE269), MB2(0x88EE), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE26C), - 0x0000, 0x0000, 0x0000, MB2(0xE26A), - MB2(0x89D2), MB2(0x8C6D), MB2(0xE26B), MB2(0x8D65), - MB2(0x8D92), 0x0000, MB2(0x95E4), MB2(0xE26D), /* 7A40 */ - 0x0000, 0x0000, MB2(0x9673), 0x0000, - 0x0000, MB2(0xE26F), 0x0000, 0x0000, - 0x0000, MB2(0x90CF), MB2(0x896E), MB2(0x89B8), - MB2(0x88AA), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE26E), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE270), MB2(0xE271), MB2(0x8FF5), /* 7A60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE272), 0x0000, MB2(0x8A6E), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE274), 0x0000, 0x0000, 0x0000, - MB2(0x8C8A), 0x0000, MB2(0x8B86), 0x0000, - 0x0000, MB2(0xE275), MB2(0x8BF3), 0x0000, - 0x0000, MB2(0xE276), 0x0000, MB2(0x90FA), - 0x0000, MB2(0x93CB), 0x0000, MB2(0x90DE), /* 7A80 */ - MB2(0x8DF3), 0x0000, 0x0000, 0x0000, - MB2(0xE277), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9282), MB2(0x918B), - 0x0000, MB2(0xE279), MB2(0xE27B), MB2(0xE278), - MB2(0xE27A), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8C41), - 0x0000, 0x0000, 0x0000, 0x0000, /* 7AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE27C), MB2(0x8C45), 0x0000, - 0x0000, 0x0000, MB2(0x8B87), MB2(0x9771), - MB2(0xE27E), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE280), 0x0000, - 0x0000, 0x0000, MB2(0x894D), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE283), - 0x0000, 0x0000, 0x0000, MB2(0x8A96), /* 7AC0 */ - MB2(0xE282), MB2(0xE281), 0x0000, MB2(0xE285), - MB2(0xE27D), 0x0000, MB2(0xE286), MB2(0x97A7), - 0x0000, MB2(0xE287), 0x0000, MB2(0xE288), - 0x0000, MB2(0xFB84), MB2(0x9AF2), MB2(0xE28A), - 0x0000, MB2(0xE289), 0x0000, 0x0000, - 0x0000, MB2(0xE28B), MB2(0xE28C), 0x0000, - MB2(0x97B3), MB2(0xE28D), 0x0000, MB2(0xE8ED), - MB2(0x8FCD), MB2(0xE28E), MB2(0xE28F), MB2(0x8F76), /* 7AE0 */ - 0x0000, MB2(0x93B6), MB2(0xE290), MB2(0xFB85), - 0x0000, 0x0000, MB2(0x9247), MB2(0xFB87), - 0x0000, MB2(0xE291), 0x0000, MB2(0x925B), - MB2(0xE292), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8BA3), 0x0000, - MB2(0x995E), MB2(0x927C), MB2(0x8EB1), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8AC6), - 0x0000, 0x0000, MB2(0xE293), 0x0000, /* 7B00 */ - MB2(0xE2A0), 0x0000, MB2(0xE296), 0x0000, - MB2(0x8B88), 0x0000, MB2(0xE295), MB2(0xE2A2), - 0x0000, 0x0000, 0x0000, MB2(0xE294), - 0x0000, MB2(0x8FCE), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE298), MB2(0xE299), 0x0000, MB2(0x934A), - 0x0000, 0x0000, MB2(0xE29A), 0x0000, - MB2(0x8A7D), 0x0000, 0x0000, 0x0000, /* 7B20 */ - 0x0000, MB2(0x9079), MB2(0x9584), 0x0000, - MB2(0xE29C), 0x0000, 0x0000, 0x0000, - MB2(0x91E6), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE297), - 0x0000, MB2(0xE29B), MB2(0xE29D), 0x0000, - 0x0000, MB2(0x8DF9), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7B40 */ - 0x0000, MB2(0xE2A4), MB2(0x954D), 0x0000, - MB2(0x94A4), MB2(0x9399), 0x0000, MB2(0x8BD8), - MB2(0xE2A3), MB2(0xE2A1), 0x0000, MB2(0x94B3), - MB2(0xE29E), MB2(0x927D), MB2(0x939B), 0x0000, - MB2(0x939A), 0x0000, MB2(0x8DF4), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE2B6), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7B60 */ - 0x0000, MB2(0xE2A6), 0x0000, MB2(0xE2A8), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE2AB), 0x0000, MB2(0xE2AC), 0x0000, - MB2(0xE2A9), MB2(0xE2AA), 0x0000, 0x0000, - MB2(0xE2A7), MB2(0xE2A5), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE29F), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7B80 */ - 0x0000, 0x0000, MB2(0x95CD), MB2(0x89D3), - 0x0000, 0x0000, 0x0000, MB2(0xE2B3), - 0x0000, MB2(0xE2B0), 0x0000, MB2(0xE2B5), - 0x0000, 0x0000, MB2(0xE2B4), 0x0000, - MB2(0x9493), MB2(0x96A5), 0x0000, MB2(0x8E5A), - MB2(0xE2AE), MB2(0xE2B7), MB2(0xE2B2), 0x0000, - MB2(0xE2B1), MB2(0xE2AD), MB2(0xFB88), MB2(0xE2AF), - 0x0000, MB2(0x8AC7), 0x0000, 0x0000, /* 7BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x925C), 0x0000, - 0x0000, MB2(0x90FB), 0x0000, 0x0000, - 0x0000, MB2(0x94A0), 0x0000, 0x0000, - MB2(0xE2BC), 0x0000, 0x0000, 0x0000, - MB2(0x94A2), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x90DF), MB2(0xE2B9), 0x0000, 0x0000, /* 7BC0 */ - MB2(0x94CD), 0x0000, MB2(0xE2BD), MB2(0x95D1), - 0x0000, MB2(0x927A), 0x0000, MB2(0xE2B8), - MB2(0xE2BA), 0x0000, 0x0000, MB2(0xE2BB), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE2BE), 0x0000, 0x0000, - MB2(0x8EC2), 0x0000, 0x0000, 0x0000, /* 7BE0 */ - MB2(0x93C4), MB2(0xE2C3), MB2(0xE2C2), 0x0000, - 0x0000, MB2(0xE2BF), 0x0000, 0x0000, - 0x0000, MB2(0x9855), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE2C8), - 0x0000, 0x0000, MB2(0xE2CC), MB2(0xE2C9), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE2C5), 0x0000, 0x0000, 0x0000, /* 7C00 */ - 0x0000, 0x0000, 0x0000, MB2(0xE2C6), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE2CB), 0x0000, 0x0000, - 0x0000, MB2(0xE2C0), MB2(0x99D3), MB2(0xE2C7), - MB2(0xE2C1), 0x0000, 0x0000, MB2(0xE2CA), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE2D0), - 0x0000, MB2(0x8AC8), 0x0000, MB2(0xE2CD), /* 7C20 */ - 0x0000, 0x0000, 0x0000, MB2(0xE2CE), - 0x0000, 0x0000, MB2(0xE2CF), MB2(0xE2D2), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE2D1), - MB2(0x94F4), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE2D3), MB2(0x97FA), MB2(0x95EB), - MB2(0xE2D8), 0x0000, 0x0000, MB2(0xE2D5), /* 7C40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE2D4), MB2(0x90D0), 0x0000, MB2(0xE2D7), - MB2(0xE2D9), 0x0000, 0x0000, 0x0000, - MB2(0xE2D6), 0x0000, MB2(0xE2DD), 0x0000, - MB2(0xE2DA), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE2DB), - MB2(0xE2C4), 0x0000, 0x0000, 0x0000, /* 7C60 */ - MB2(0xE2DC), MB2(0xE2DE), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE2DF), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x95C4), - 0x0000, MB2(0xE2E0), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x96E0), 0x0000, - 0x0000, MB2(0x8BCC), MB2(0x8C48), MB2(0xE2E1), /* 7C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x95B2), 0x0000, MB2(0x9088), - 0x0000, MB2(0x96AE), 0x0000, 0x0000, - MB2(0xE2E2), 0x0000, MB2(0x97B1), 0x0000, - 0x0000, MB2(0x9494), 0x0000, MB2(0x9165), - MB2(0x9453), 0x0000, 0x0000, MB2(0x8F6C), - 0x0000, 0x0000, 0x0000, MB2(0x88BE), - 0x0000, MB2(0xE2E7), MB2(0xE2E5), 0x0000, /* 7CA0 */ - MB2(0xE2E3), MB2(0x8A9F), 0x0000, MB2(0x8FCF), - MB2(0xE2E8), 0x0000, 0x0000, MB2(0xE2E6), - 0x0000, MB2(0xE2E4), MB2(0xE2EC), 0x0000, - 0x0000, MB2(0xE2EB), MB2(0xE2EA), MB2(0xE2E9), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE2ED), 0x0000, 0x0000, - 0x0000, MB2(0xE2EE), MB2(0x90B8), 0x0000, - MB2(0xE2EF), 0x0000, MB2(0xE2F1), 0x0000, /* 7CC0 */ - 0x0000, MB2(0xE2F0), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8CD0), 0x0000, - 0x0000, 0x0000, MB2(0x9157), 0x0000, - 0x0000, 0x0000, MB2(0xE2F3), 0x0000, - 0x0000, 0x0000, MB2(0x939C), 0x0000, - MB2(0xE2F2), 0x0000, 0x0000, 0x0000, - MB2(0xE2F4), 0x0000, MB2(0x95B3), MB2(0x918C), - MB2(0x8D66), 0x0000, MB2(0xE2F5), 0x0000, /* 7CE0 */ - 0x0000, 0x0000, 0x0000, MB2(0x97C6), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE2F7), - 0x0000, 0x0000, MB2(0xE2F8), 0x0000, - MB2(0xE2F9), 0x0000, MB2(0xE2FA), 0x0000, - MB2(0x8E85), 0x0000, MB2(0xE2FB), MB2(0x8C6E), - 0x0000, 0x0000, MB2(0x8B8A), 0x0000, - MB2(0x8B49), 0x0000, MB2(0xE340), 0x0000, /* 7D00 */ - MB2(0x96F1), MB2(0x8D67), MB2(0xE2FC), 0x0000, - 0x0000, 0x0000, MB2(0xE343), MB2(0x96E4), - 0x0000, MB2(0x945B), 0x0000, 0x0000, - MB2(0x9552), 0x0000, 0x0000, 0x0000, - MB2(0x8F83), MB2(0xE342), 0x0000, MB2(0x8ED1), - MB2(0x8D68), MB2(0x8E86), MB2(0x8B89), MB2(0x95B4), - MB2(0xE341), 0x0000, 0x0000, 0x0000, - MB2(0x9166), MB2(0x9661), MB2(0x8DF5), 0x0000, /* 7D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8E87), - MB2(0x92DB), 0x0000, MB2(0xE346), MB2(0x97DD), - MB2(0x8DD7), 0x0000, MB2(0xE347), MB2(0x9061), - 0x0000, MB2(0xE349), 0x0000, 0x0000, - 0x0000, MB2(0x8FD0), MB2(0x8DAE), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE348), - 0x0000, 0x0000, MB2(0x8F49), MB2(0x8CBC), /* 7D40 */ - MB2(0x9167), MB2(0xE344), MB2(0xE34A), 0x0000, - MB2(0xFB8A), 0x0000, 0x0000, MB2(0xE345), - MB2(0x8C6F), 0x0000, MB2(0xE34D), MB2(0xE351), - MB2(0x8C8B), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE34C), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE355), - MB2(0xFB8B), 0x0000, MB2(0x8D69), 0x0000, - 0x0000, MB2(0x978D), MB2(0x88BA), MB2(0xE352), /* 7D60 */ - 0x0000, 0x0000, MB2(0x8B8B), 0x0000, - MB2(0xE34F), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE350), 0x0000, - 0x0000, MB2(0x939D), MB2(0xE34E), MB2(0xE34B), - 0x0000, MB2(0x8A47), MB2(0x90E2), 0x0000, - 0x0000, MB2(0x8CA6), 0x0000, 0x0000, - 0x0000, MB2(0xE357), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7D80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE354), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE356), - 0x0000, 0x0000, 0x0000, MB2(0xE353), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8C70), MB2(0x91B1), MB2(0xE358), - MB2(0x918E), 0x0000, 0x0000, MB2(0xE365), - MB2(0xFB8D), 0x0000, MB2(0xE361), MB2(0xE35B), /* 7DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE35F), - MB2(0x8EF8), MB2(0x88DB), MB2(0xE35A), MB2(0xE362), - MB2(0xE366), MB2(0x8D6A), MB2(0x96D4), 0x0000, - MB2(0x92D4), MB2(0xE35C), 0x0000, MB2(0xFB8C), - MB2(0xE364), 0x0000, MB2(0xE359), MB2(0x925D), - 0x0000, MB2(0xE35E), MB2(0x88BB), MB2(0x96C8), - 0x0000, 0x0000, 0x0000, 0x0000, /* 7DC0 */ - 0x0000, 0x0000, 0x0000, MB2(0xE35D), - 0x0000, 0x0000, MB2(0x8BD9), MB2(0x94EA), - 0x0000, 0x0000, 0x0000, MB2(0x918D), - 0x0000, MB2(0x97CE), MB2(0x8F8F), 0x0000, - 0x0000, MB2(0xE38E), MB2(0xFB8E), 0x0000, - MB2(0xE367), 0x0000, MB2(0x90FC), 0x0000, - MB2(0xE363), MB2(0xE368), MB2(0xE36A), 0x0000, - MB2(0x92F7), MB2(0xE36D), 0x0000, 0x0000, /* 7DE0 */ - MB2(0xE369), 0x0000, 0x0000, 0x0000, - MB2(0x95D2), MB2(0x8AC9), 0x0000, 0x0000, - MB2(0x96C9), 0x0000, 0x0000, MB2(0x88DC), - 0x0000, 0x0000, MB2(0xE36C), 0x0000, - MB2(0x97FB), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE36B), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x898F), 0x0000, 0x0000, /* 7E00 */ - MB2(0x93EA), MB2(0xE36E), 0x0000, 0x0000, - 0x0000, MB2(0xE375), MB2(0xE36F), MB2(0xE376), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE372), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x949B), - 0x0000, 0x0000, MB2(0x8EC8), MB2(0xE374), - 0x0000, MB2(0xE371), MB2(0xE377), MB2(0xE370), /* 7E20 */ - 0x0000, 0x0000, MB2(0x8F63), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9644), - 0x0000, 0x0000, MB2(0x8F6B), 0x0000, - 0x0000, MB2(0xE373), MB2(0xE380), 0x0000, - 0x0000, MB2(0xE37B), 0x0000, MB2(0xE37E), - 0x0000, MB2(0xE37C), MB2(0xE381), MB2(0xE37A), - 0x0000, MB2(0xE360), MB2(0x90D1), 0x0000, - 0x0000, MB2(0x94C9), 0x0000, MB2(0xE37D), /* 7E40 */ - 0x0000, 0x0000, MB2(0xE378), 0x0000, - 0x0000, 0x0000, MB2(0x9140), MB2(0x8C71), - 0x0000, MB2(0x8F4A), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xFB8F), 0x0000, - MB2(0x9044), MB2(0x9155), MB2(0xE384), 0x0000, - 0x0000, MB2(0xE386), MB2(0xE387), 0x0000, - 0x0000, MB2(0xE383), MB2(0xE385), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7E60 */ - 0x0000, 0x0000, MB2(0xE379), MB2(0xE382), - 0x0000, MB2(0xE38A), MB2(0xE389), 0x0000, - 0x0000, MB2(0x969A), 0x0000, 0x0000, - MB2(0x8C4A), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE388), 0x0000, MB2(0xE38C), - MB2(0xE38B), MB2(0xE38F), 0x0000, MB2(0xE391), - 0x0000, 0x0000, MB2(0x8E5B), MB2(0xE38D), /* 7E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE392), MB2(0xE393), MB2(0xFA5C), 0x0000, - MB2(0xE394), 0x0000, MB2(0xE39A), MB2(0x935A), - MB2(0xE396), 0x0000, MB2(0xE395), MB2(0xE397), - MB2(0xE398), 0x0000, MB2(0xE399), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE39B), - MB2(0xE39C), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7EA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7EC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7F00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8ACA), 0x0000, - MB2(0xE39D), 0x0000, MB2(0xE39E), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 7F40 */ - 0x0000, MB2(0xE39F), 0x0000, MB2(0xFB90), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE3A0), MB2(0xE3A1), MB2(0xE3A2), 0x0000, - MB2(0xE3A3), MB2(0xE3A4), 0x0000, 0x0000, - MB2(0xE3A6), MB2(0xE3A5), 0x0000, 0x0000, - MB2(0xE3A7), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE3A8), - MB2(0xE3A9), 0x0000, 0x0000, 0x0000, /* 7F60 */ - 0x0000, 0x0000, 0x0000, MB2(0xE3AC), - MB2(0xE3AA), MB2(0xE3AB), MB2(0x8DDF), MB2(0x8C72), - 0x0000, 0x0000, MB2(0x9275), 0x0000, - MB2(0x94B1), 0x0000, MB2(0x8F90), 0x0000, - 0x0000, MB2(0x946C), 0x0000, MB2(0x94EB), - MB2(0xE3AD), MB2(0x9CEB), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE3AE), MB2(0xE3B0), /* 7F80 */ - 0x0000, MB2(0x9785), MB2(0xE3AF), MB2(0xE3B2), - MB2(0xE3B1), 0x0000, MB2(0x9772), 0x0000, - MB2(0xE3B3), 0x0000, MB2(0x94FC), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE3B4), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE3B7), 0x0000, - 0x0000, MB2(0xE3B6), MB2(0xE3B5), 0x0000, - 0x0000, MB2(0xFB91), 0x0000, MB2(0xE3B8), /* 7FA0 */ - MB2(0x8C51), 0x0000, 0x0000, 0x0000, - MB2(0x9141), MB2(0x8B60), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE3BC), MB2(0xE3B9), - 0x0000, 0x0000, MB2(0xE3BA), 0x0000, - 0x0000, 0x0000, MB2(0xE3BD), 0x0000, - MB2(0xE3BE), MB2(0xE3BB), 0x0000, 0x0000, - 0x0000, MB2(0x8948), 0x0000, 0x0000, - 0x0000, MB2(0x89A5), 0x0000, 0x0000, /* 7FC0 */ - 0x0000, MB2(0xE3C0), MB2(0xE3C1), 0x0000, - 0x0000, 0x0000, MB2(0xE3C2), 0x0000, - MB2(0x9782), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8F4B), 0x0000, - MB2(0xE3C4), MB2(0xE3C3), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9089), MB2(0xE3C5), 0x0000, 0x0000, /* 7FE0 */ - 0x0000, 0x0000, MB2(0xE3C6), 0x0000, - 0x0000, MB2(0xE3C7), 0x0000, MB2(0x8AE3), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8ACB), 0x0000, 0x0000, MB2(0xE3C8), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE3C9), 0x0000, MB2(0x967C), - MB2(0x9783), 0x0000, 0x0000, 0x0000, - MB2(0x9773), MB2(0x9856), 0x0000, MB2(0x8D6C), /* 8000 */ - MB2(0xE3CC), MB2(0x8ED2), MB2(0xE3CB), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE3CD), - MB2(0x8EA7), 0x0000, 0x0000, 0x0000, - MB2(0x91CF), 0x0000, MB2(0xE3CE), 0x0000, - 0x0000, MB2(0x8D6B), 0x0000, MB2(0x96D5), - MB2(0xE3CF), MB2(0xE3D0), 0x0000, 0x0000, - MB2(0xE3D1), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE3D2), 0x0000, 0x0000, /* 8020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE3D3), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8EA8), - 0x0000, 0x0000, MB2(0x96EB), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE3D5), - 0x0000, MB2(0x925E), 0x0000, MB2(0xE3D4), - 0x0000, 0x0000, 0x0000, 0x0000, /* 8040 */ - 0x0000, 0x0000, MB2(0xE3D7), 0x0000, - 0x0000, 0x0000, MB2(0xE3D6), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE3D8), 0x0000, - 0x0000, 0x0000, MB2(0x90B9), 0x0000, - MB2(0xE3D9), 0x0000, MB2(0xE3DA), 0x0000, - 0x0000, 0x0000, MB2(0x95B7), MB2(0xE3DB), - 0x0000, MB2(0x918F), MB2(0xE3DC), 0x0000, /* 8060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE3DD), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x97FC), - MB2(0xE3E0), 0x0000, MB2(0xE3DF), MB2(0xE3DE), - MB2(0x92AE), 0x0000, MB2(0xE3E1), MB2(0x9045), - 0x0000, MB2(0xE3E2), 0x0000, 0x0000, - 0x0000, MB2(0xE3E3), MB2(0x9857), MB2(0xE3E4), - 0x0000, 0x0000, 0x0000, 0x0000, /* 8080 */ - MB2(0xE3E5), MB2(0xE3E7), MB2(0xE3E6), MB2(0x94A3), - 0x0000, MB2(0x93F7), 0x0000, MB2(0x985D), - MB2(0x94A7), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE3E9), - 0x0000, 0x0000, MB2(0x8FD1), 0x0000, - MB2(0x9549), 0x0000, MB2(0xE3EA), MB2(0xE3E8), - 0x0000, MB2(0x8ACC), 0x0000, 0x0000, - 0x0000, MB2(0x8CD2), MB2(0x8E88), 0x0000, /* 80A0 */ - 0x0000, MB2(0x94EC), 0x0000, 0x0000, - 0x0000, MB2(0x8CA8), MB2(0x9662), 0x0000, - MB2(0xE3ED), MB2(0xE3EB), 0x0000, MB2(0x8D6D), - 0x0000, MB2(0x8D6E), MB2(0x88E7), 0x0000, - MB2(0x8DE6), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9478), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x88DD), /* 80C0 */ - MB2(0xE3F2), 0x0000, MB2(0x925F), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9477), 0x0000, MB2(0x91D9), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE3F4), 0x0000, - 0x0000, MB2(0xE3F0), MB2(0xE3F3), MB2(0xE3EE), - 0x0000, MB2(0xE3F1), MB2(0x9645), 0x0000, - 0x0000, MB2(0x8CD3), 0x0000, 0x0000, /* 80E0 */ - MB2(0x88FB), MB2(0xE3EF), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE3F6), - 0x0000, MB2(0xE3F7), 0x0000, 0x0000, - MB2(0x93B7), 0x0000, 0x0000, 0x0000, - MB2(0x8BB9), 0x0000, 0x0000, 0x0000, - MB2(0xE445), MB2(0x945C), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8E89), 0x0000, /* 8100 */ - 0x0000, MB2(0x8BBA), MB2(0x90C6), MB2(0x9865), - MB2(0x96AC), MB2(0xE3F5), MB2(0x90D2), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8B72), MB2(0xE3F8), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE3FA), /* 8120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE3F9), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE3FB), - 0x0000, MB2(0x9245), 0x0000, MB2(0x945D), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x92AF), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE442), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8140 */ - 0x0000, 0x0000, MB2(0xE441), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE3FC), - 0x0000, 0x0000, MB2(0x9074), 0x0000, - MB2(0x9585), MB2(0xE444), 0x0000, MB2(0xE443), - MB2(0x8D6F), MB2(0x9872), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE454), - 0x0000, 0x0000, 0x0000, 0x0000, /* 8160 */ - 0x0000, MB2(0xE448), MB2(0xE449), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8EEE), - 0x0000, 0x0000, MB2(0xE447), 0x0000, - MB2(0x8D98), MB2(0xE446), 0x0000, 0x0000, - MB2(0xE44A), 0x0000, 0x0000, 0x0000, - MB2(0x92B0), MB2(0x95A0), MB2(0x9142), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x91DA), - MB2(0xE44E), 0x0000, MB2(0xE44F), MB2(0xE44B), /* 8180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE44C), 0x0000, MB2(0xE44D), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8D70), - 0x0000, 0x0000, 0x0000, MB2(0xE455), - 0x0000, MB2(0xE451), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9586), 0x0000, - MB2(0x968C), MB2(0x9547), 0x0000, 0x0000, - MB2(0xE450), 0x0000, 0x0000, MB2(0xE453), /* 81A0 */ - MB2(0xE452), 0x0000, 0x0000, 0x0000, - MB2(0x9663), MB2(0xE456), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE457), 0x0000, 0x0000, MB2(0x9156), - 0x0000, MB2(0xE458), 0x0000, 0x0000, - MB2(0xE45A), 0x0000, MB2(0xE45E), 0x0000, - 0x0000, MB2(0xE45B), MB2(0xE459), MB2(0x945E), - MB2(0xE45C), 0x0000, MB2(0xE45D), 0x0000, /* 81C0 */ - 0x0000, 0x0000, MB2(0x89B0), 0x0000, - MB2(0xE464), MB2(0xE45F), 0x0000, 0x0000, - 0x0000, MB2(0xE460), 0x0000, 0x0000, - 0x0000, MB2(0xE461), 0x0000, MB2(0x919F), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE463), MB2(0xE462), MB2(0xE465), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE466), - MB2(0xE467), 0x0000, 0x0000, MB2(0x9062), /* 81E0 */ - 0x0000, MB2(0x89E7), 0x0000, MB2(0xE468), - MB2(0x97D5), 0x0000, MB2(0x8EA9), 0x0000, - 0x0000, MB2(0x8F4C), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8E8A), - MB2(0x9276), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE469), MB2(0xE46A), - MB2(0x8950), 0x0000, MB2(0xE46B), 0x0000, - 0x0000, MB2(0xE46C), MB2(0xE46D), 0x0000, /* 8200 */ - 0x0000, MB2(0xE46E), 0x0000, MB2(0xE46F), - MB2(0x8BBB), MB2(0x9DA8), MB2(0xE470), 0x0000, - MB2(0x90E3), MB2(0xE471), MB2(0x8EC9), 0x0000, - MB2(0xE472), 0x0000, MB2(0x98AE), 0x0000, - 0x0000, 0x0000, MB2(0xE473), MB2(0x95DC), - MB2(0x8ADA), 0x0000, 0x0000, MB2(0x9143), - MB2(0x8F77), 0x0000, MB2(0x9591), MB2(0x8F4D), - 0x0000, 0x0000, 0x0000, 0x0000, /* 8220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE474), MB2(0x8D71), MB2(0xE475), - MB2(0x94CA), 0x0000, MB2(0xE484), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE477), - 0x0000, MB2(0x91C7), MB2(0x9495), MB2(0x8CBD), - MB2(0xE476), MB2(0x9144), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE478), 0x0000, 0x0000, 0x0000, /* 8240 */ - 0x0000, 0x0000, 0x0000, MB2(0x92F8), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE47A), MB2(0xE479), MB2(0xE47C), 0x0000, - 0x0000, MB2(0xE47B), 0x0000, MB2(0xE47D), - 0x0000, 0x0000, MB2(0xE480), 0x0000, /* 8260 */ - MB2(0xE47E), 0x0000, MB2(0x8ACD), 0x0000, - MB2(0xE481), 0x0000, MB2(0xE482), MB2(0xE483), - 0x0000, 0x0000, MB2(0x8DAF), MB2(0x97C7), - 0x0000, MB2(0xE485), MB2(0x9046), 0x0000, - 0x0000, 0x0000, MB2(0x8990), MB2(0xE486), - MB2(0xE487), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE488), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x88F0), - 0x0000, MB2(0xE489), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE48A), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9587), 0x0000, 0x0000, - 0x0000, MB2(0x8EC5), 0x0000, MB2(0xE48C), - 0x0000, 0x0000, 0x0000, 0x0000, /* 82A0 */ - 0x0000, MB2(0x8A48), MB2(0x88B0), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE48B), - MB2(0xE48E), MB2(0x946D), 0x0000, MB2(0x9063), - 0x0000, MB2(0x89D4), 0x0000, MB2(0x9646), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8C7C), MB2(0x8BDA), 0x0000, MB2(0xE48D), - 0x0000, MB2(0x89E8), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 82C0 */ - 0x0000, MB2(0x8AA1), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8991), MB2(0xE492), MB2(0x97E8), - MB2(0x91DB), 0x0000, 0x0000, MB2(0x9563), - 0x0000, MB2(0xE49E), 0x0000, MB2(0x89D5), - MB2(0xE49C), 0x0000, MB2(0xE49A), MB2(0xE491), - 0x0000, MB2(0xE48F), 0x0000, MB2(0xE490), /* 82E0 */ - 0x0000, MB2(0x8EE1), MB2(0x8BEA), MB2(0x9297), - 0x0000, 0x0000, 0x0000, MB2(0x93CF), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8970), 0x0000, MB2(0xE494), - MB2(0xE493), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE499), MB2(0xE495), MB2(0xE498), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xFB93), MB2(0x96CE), MB2(0xE497), /* 8300 */ - MB2(0x89D6), MB2(0x8A9D), MB2(0xE49B), 0x0000, - 0x0000, MB2(0xE49D), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8C73), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE4A1), MB2(0xE4AA), - MB2(0xE4AB), 0x0000, 0x0000, 0x0000, - MB2(0x88A9), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE4B2), /* 8320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x88EF), 0x0000, 0x0000, MB2(0xE4A9), - 0x0000, 0x0000, 0x0000, MB2(0xE4A8), - 0x0000, MB2(0xE4A3), MB2(0xE4A2), 0x0000, - MB2(0xE4A0), MB2(0xE49F), MB2(0x9283), 0x0000, - MB2(0x91F9), MB2(0xE4A5), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE4A4), 0x0000, 0x0000, 0x0000, /* 8340 */ - 0x0000, MB2(0xE4A7), 0x0000, 0x0000, - 0x0000, MB2(0x9190), MB2(0x8C74), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8960), - MB2(0xE4A6), 0x0000, MB2(0x8D72), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9191), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xFB94), 0x0000, /* 8360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE4B8), - 0x0000, MB2(0xE4B9), 0x0000, MB2(0x89D7), - 0x0000, 0x0000, 0x0000, MB2(0x89AC), - MB2(0xE4B6), 0x0000, 0x0000, MB2(0xFB95), - 0x0000, 0x0000, 0x0000, 0x0000, /* 8380 */ - 0x0000, MB2(0xE4AC), 0x0000, MB2(0xE4B4), - 0x0000, MB2(0xE4BB), MB2(0xE4B5), 0x0000, - 0x0000, 0x0000, MB2(0xE4B3), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE496), - 0x0000, 0x0000, MB2(0xE4B1), 0x0000, - 0x0000, 0x0000, MB2(0xE4AD), 0x0000, - 0x0000, 0x0000, MB2(0x8ACE), MB2(0xE4AF), - MB2(0xE4BA), 0x0000, MB2(0xE4B0), 0x0000, /* 83A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE4BC), 0x0000, MB2(0xE4AE), MB2(0x949C), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9789), 0x0000, 0x0000, - 0x0000, MB2(0xE4B7), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE4CD), 0x0000, 0x0000, - 0x0000, MB2(0xE4C5), 0x0000, 0x0000, /* 83C0 */ - 0x0000, MB2(0x909B), 0x0000, MB2(0xFB96), - 0x0000, 0x0000, MB2(0x8B65), 0x0000, - MB2(0x8BDB), 0x0000, MB2(0xE4C0), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x89D9), - 0x0000, 0x0000, MB2(0x8FD2), 0x0000, - MB2(0xE4C3), 0x0000, 0x0000, 0x0000, - MB2(0x8DD8), 0x0000, 0x0000, MB2(0x9370), - MB2(0xE4C8), 0x0000, 0x0000, 0x0000, /* 83E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x95EC), 0x0000, MB2(0xE4BF), - 0x0000, 0x0000, 0x0000, MB2(0x89D8), - MB2(0x8CD4), MB2(0x9548), MB2(0xE4C9), 0x0000, - MB2(0xE4BD), 0x0000, MB2(0xFB97), MB2(0xE4C6), - 0x0000, 0x0000, 0x0000, MB2(0xE4D0), - 0x0000, MB2(0xE4C1), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE4C2), /* 8400 */ - MB2(0x93B8), 0x0000, 0x0000, MB2(0xE4C7), - 0x0000, 0x0000, 0x0000, MB2(0xE4C4), - MB2(0x9647), MB2(0xE4CA), MB2(0x88DE), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE4BE), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE4CC), 0x0000, MB2(0xE4CB), 0x0000, /* 8420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x948B), MB2(0xE4D2), 0x0000, - MB2(0xE4DD), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8A9E), 0x0000, 0x0000, - 0x0000, MB2(0xE4E0), 0x0000, 0x0000, - MB2(0xE4CE), 0x0000, 0x0000, 0x0000, - MB2(0xE4D3), MB2(0x978E), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8440 */ - 0x0000, 0x0000, MB2(0xE4DC), 0x0000, - MB2(0xFB98), MB2(0x9774), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x97A8), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9298), - 0x0000, 0x0000, 0x0000, MB2(0x8A8B), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9592), MB2(0xE4E2), MB2(0x939F), /* 8460 */ - 0x0000, 0x0000, MB2(0x88AF), 0x0000, - 0x0000, MB2(0xE4DB), 0x0000, MB2(0xE4D7), - MB2(0x9192), MB2(0xE4D1), MB2(0xE4D9), MB2(0xE4DE), - 0x0000, MB2(0x944B), 0x0000, 0x0000, - 0x0000, MB2(0x88A8), 0x0000, MB2(0xE4D6), - 0x0000, MB2(0xE4DF), MB2(0x9598), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE4DA), 0x0000, /* 8480 */ - MB2(0xE4D5), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8FD3), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8F4E), 0x0000, 0x0000, 0x0000, - MB2(0x8EAA), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x96D6), 0x0000, 0x0000, - MB2(0x9566), 0x0000, 0x0000, MB2(0xE4E5), - 0x0000, MB2(0xE4EE), 0x0000, 0x0000, /* 84A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE4D8), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8A97), 0x0000, - MB2(0xFB99), 0x0000, 0x0000, 0x0000, - MB2(0x8FF6), MB2(0xE4E3), 0x0000, MB2(0xE4E8), - MB2(0x9193), 0x0000, 0x0000, MB2(0xE4E4), - 0x0000, MB2(0xE4EB), 0x0000, 0x0000, /* 84C0 */ - MB2(0x927E), 0x0000, MB2(0xE4EC), 0x0000, - 0x0000, MB2(0x9775), MB2(0xE4E1), MB2(0x8A57), - 0x0000, MB2(0xE4E7), 0x0000, 0x0000, - MB2(0xE4EA), MB2(0x96AA), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE4ED), 0x0000, - 0x0000, MB2(0xE4E6), MB2(0xE4E9), 0x0000, - MB2(0xFA60), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 84E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9648), 0x0000, MB2(0x9840), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE4F1), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE4F8), 0x0000, 0x0000, MB2(0xE4F0), - MB2(0x8EC1), 0x0000, 0x0000, 0x0000, /* 8500 */ - 0x0000, 0x0000, MB2(0xE4CF), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x95CC), 0x0000, MB2(0x96A0), - MB2(0xE4F7), MB2(0xE4F6), 0x0000, MB2(0xE4F2), - MB2(0xE4F3), 0x0000, MB2(0x8955), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE4F5), - 0x0000, MB2(0xE4EF), 0x0000, 0x0000, /* 8520 */ - 0x0000, 0x0000, MB2(0x92D3), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE4F4), MB2(0x88FC), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x91A0), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x95C1), 0x0000, 0x0000, - MB2(0xE4F9), MB2(0xE540), 0x0000, MB2(0x94D7), /* 8540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE4FC), MB2(0x8FD4), MB2(0x8EC7), MB2(0xE542), - 0x0000, 0x0000, MB2(0x8BBC), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xFB9A), - 0x0000, MB2(0xE543), 0x0000, MB2(0x9599), - MB2(0xE4FB), MB2(0xFB9B), MB2(0xE4D4), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE4FA), /* 8560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x986E), MB2(0x93A0), MB2(0x9593), MB2(0xFB9C), - 0x0000, MB2(0xE54A), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE550), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE551), 0x0000, - MB2(0xE544), 0x0000, 0x0000, 0x0000, /* 8580 */ - MB2(0x9496), 0x0000, 0x0000, MB2(0xE54E), - MB2(0xE546), 0x0000, MB2(0xE548), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE552), MB2(0xE547), 0x0000, 0x0000, - MB2(0xE54B), 0x0000, 0x0000, MB2(0x8992), - 0x0000, MB2(0x93E3), 0x0000, MB2(0xE54C), - MB2(0xE54F), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 85A0 */ - MB2(0xE545), 0x0000, MB2(0x9145), 0x0000, - MB2(0xE549), MB2(0x8E46), MB2(0x9064), MB2(0x8C4F), - MB2(0x96F2), 0x0000, MB2(0x96F7), MB2(0x8F92), - MB2(0xFB9E), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE556), MB2(0xE554), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x986D), 0x0000, 0x0000, /* 85C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE553), 0x0000, 0x0000, - 0x0000, MB2(0x9795), 0x0000, MB2(0xE555), - MB2(0xE557), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE558), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE55B), MB2(0xE559), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 85E0 */ - MB2(0x93A1), MB2(0xE55A), 0x0000, 0x0000, - 0x0000, MB2(0x94CB), MB2(0xE54D), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8F93), - 0x0000, MB2(0xE55C), MB2(0xE561), MB2(0x9194), - 0x0000, 0x0000, MB2(0xE560), 0x0000, - 0x0000, 0x0000, MB2(0xE541), 0x0000, /* 8600 */ - 0x0000, 0x0000, MB2(0xE562), MB2(0x9168), - 0x0000, 0x0000, MB2(0xE55D), MB2(0xE55F), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE55E), - 0x0000, 0x0000, MB2(0x9F50), MB2(0x9F41), - 0x0000, 0x0000, MB2(0xE564), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE563), 0x0000, /* 8620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9796), 0x0000, MB2(0xE1BA), - MB2(0xE565), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE566), - 0x0000, 0x0000, 0x0000, 0x0000, /* 8640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE567), MB2(0x8CD5), 0x0000, - MB2(0x8B73), 0x0000, 0x0000, 0x0000, - MB2(0xE569), MB2(0x997C), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8B95), 0x0000, - MB2(0x97B8), 0x0000, MB2(0x8BF1), MB2(0xE56A), - 0x0000, 0x0000, 0x0000, 0x0000, /* 8660 */ - 0x0000, 0x0000, 0x0000, MB2(0xE56B), - 0x0000, 0x0000, 0x0000, MB2(0x928E), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE56C), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x93F8), 0x0000, MB2(0x88B8), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x89E1), MB2(0xE571), - MB2(0xE572), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE56D), - 0x0000, MB2(0x8E5C), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE56E), /* 86A0 */ - MB2(0x9461), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE56F), MB2(0xE570), MB2(0xE57A), - 0x0000, 0x0000, 0x0000, MB2(0xE574), - MB2(0xE577), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE573), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 86C0 */ - MB2(0xE575), 0x0000, MB2(0xE576), MB2(0x8ED6), - 0x0000, MB2(0xE578), 0x0000, MB2(0x9260), - 0x0000, MB2(0x8C75), MB2(0x8A61), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE57B), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8A5E), 0x0000, MB2(0xE581), - 0x0000, 0x0000, MB2(0xE57C), MB2(0xE580), - 0x0000, 0x0000, 0x0000, 0x0000, /* 86E0 */ - MB2(0x94B8), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE57D), 0x0000, 0x0000, - MB2(0xE57E), MB2(0x9567), MB2(0x94D8), MB2(0xE582), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x91FB), MB2(0xE58C), 0x0000, MB2(0xE588), - 0x0000, 0x0000, MB2(0x89E9), 0x0000, - MB2(0xE586), 0x0000, MB2(0x9649), MB2(0xE587), /* 8700 */ - 0x0000, 0x0000, MB2(0xE584), 0x0000, - MB2(0xE585), MB2(0xE58A), MB2(0xE58D), 0x0000, - 0x0000, MB2(0xE58B), 0x0000, 0x0000, - 0x0000, MB2(0xE589), MB2(0xE583), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9277), 0x0000, MB2(0xE594), 0x0000, - MB2(0x96A8), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8720 */ - 0x0000, MB2(0xE592), 0x0000, 0x0000, - 0x0000, MB2(0xE593), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE58E), 0x0000, 0x0000, MB2(0xE590), - 0x0000, 0x0000, 0x0000, MB2(0xE591), - 0x0000, 0x0000, 0x0000, MB2(0xE58F), - 0x0000, 0x0000, 0x0000, 0x0000, /* 8740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x90E4), 0x0000, MB2(0x9858), - MB2(0xE598), 0x0000, MB2(0xE599), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE59F), - 0x0000, MB2(0x9049), 0x0000, MB2(0xE59B), - 0x0000, MB2(0xE59E), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE596), - MB2(0xE595), 0x0000, 0x0000, MB2(0xE5A0), /* 8760 */ - 0x0000, 0x0000, MB2(0x89DA), 0x0000, - MB2(0xE59C), 0x0000, MB2(0xE5A1), 0x0000, - 0x0000, 0x0000, MB2(0xE59D), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE59A), 0x0000, MB2(0x92B1), 0x0000, - MB2(0xE597), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9488), - 0x0000, 0x0000, MB2(0xE5A5), 0x0000, /* 8780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x975A), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE5A4), - 0x0000, 0x0000, MB2(0xE5A3), 0x0000, /* 87A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE5AC), - 0x0000, 0x0000, 0x0000, MB2(0xE5A6), - 0x0000, 0x0000, 0x0000, MB2(0xE5AE), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9786), MB2(0xE5B1), - 0x0000, MB2(0xE5A8), 0x0000, 0x0000, - MB2(0xE5A9), 0x0000, 0x0000, 0x0000, /* 87C0 */ - MB2(0xE5AD), 0x0000, MB2(0xE5B0), MB2(0xE5AF), - 0x0000, 0x0000, 0x0000, MB2(0xE5A7), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE5AA), 0x0000, MB2(0xE5BB), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE5B4), 0x0000, 0x0000, 0x0000, /* 87E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE5B2), - 0x0000, 0x0000, MB2(0xE5B3), 0x0000, - 0x0000, 0x0000, MB2(0xE5B8), MB2(0xE5B9), - 0x0000, MB2(0x8A49), 0x0000, MB2(0x8B61), - 0x0000, 0x0000, MB2(0xE5B7), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8800 */ - 0x0000, MB2(0xE5A2), 0x0000, MB2(0xFBA1), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE5B6), MB2(0xE5BA), MB2(0xE5B5), - 0x0000, MB2(0xE5BC), 0x0000, 0x0000, - 0x0000, MB2(0xE5BE), MB2(0xE5BD), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE5C0), MB2(0xE5BF), MB2(0xE579), /* 8820 */ - 0x0000, 0x0000, 0x0000, MB2(0xE5C4), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE5C1), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE5C2), 0x0000, - 0x0000, MB2(0xE5C3), 0x0000, MB2(0xE5C5), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8C8C), 0x0000, MB2(0xE5C7), 0x0000, /* 8840 */ - MB2(0xE5C6), 0x0000, MB2(0x8F4F), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8D73), MB2(0x9FA5), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE5C8), MB2(0x8F70), - 0x0000, 0x0000, 0x0000, MB2(0x8A58), - 0x0000, MB2(0xE5C9), 0x0000, MB2(0x8971), - 0x0000, MB2(0x8FD5), MB2(0xE5CA), 0x0000, - 0x0000, MB2(0x8D74), MB2(0xE5CB), MB2(0x88DF), /* 8860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x955C), 0x0000, 0x0000, MB2(0xE5CC), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x908A), 0x0000, MB2(0xE5D3), 0x0000, - 0x0000, MB2(0xE5D0), 0x0000, MB2(0x928F), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE5D1), MB2(0xE5CE), MB2(0x8BDC), - 0x0000, MB2(0xE5CD), MB2(0xE5D4), 0x0000, /* 8880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8C55), 0x0000, 0x0000, MB2(0x91DC), - 0x0000, MB2(0xE5DA), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE5D6), 0x0000, - 0x0000, 0x0000, MB2(0x91B3), MB2(0xE5D5), - 0x0000, MB2(0xE5D8), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE5CF), 0x0000, - 0x0000, 0x0000, MB2(0xE5D9), 0x0000, /* 88A0 */ - MB2(0xE5DB), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x94ED), - 0x0000, 0x0000, MB2(0xE5D7), 0x0000, - MB2(0xE5DC), MB2(0xE5DE), 0x0000, 0x0000, - MB2(0x8CD1), MB2(0xE5D2), 0x0000, MB2(0x88BF), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE5DD), - 0x0000, MB2(0x8DD9), MB2(0x97F4), MB2(0xE5DF), /* 88C0 */ - MB2(0xE5E0), MB2(0x9195), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x97A0), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE5E1), MB2(0x9754), 0x0000, 0x0000, - MB2(0xE5E2), MB2(0xE5E3), 0x0000, 0x0000, - MB2(0x95E2), MB2(0xE5E4), 0x0000, MB2(0x8DBE), - 0x0000, MB2(0x97A1), 0x0000, 0x0000, /* 88E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE5E9), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE5EA), MB2(0x8FD6), - MB2(0xE5E8), MB2(0xFBA2), 0x0000, 0x0000, - MB2(0x9787), MB2(0xE5E5), 0x0000, 0x0000, - MB2(0xE5E7), MB2(0x90BB), MB2(0x909E), 0x0000, - 0x0000, 0x0000, MB2(0xE5E6), 0x0000, /* 8900 */ - MB2(0xE5EB), 0x0000, 0x0000, MB2(0x95A1), - 0x0000, 0x0000, MB2(0xE5ED), 0x0000, - MB2(0xE5EC), 0x0000, 0x0000, 0x0000, - MB2(0x8A8C), 0x0000, MB2(0x964A), MB2(0xE5EE), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFA5D), MB2(0xE5FA), MB2(0xE5F0), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8920 */ - 0x0000, MB2(0xE5F1), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE5F2), MB2(0xE5F3), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE5F7), 0x0000, - MB2(0xE5F8), 0x0000, 0x0000, MB2(0xE5F6), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE5F4), 0x0000, MB2(0xE5EF), /* 8940 */ - MB2(0xE5F5), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE5F9), MB2(0xE8B5), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x89A6), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE5FC), MB2(0x8BDD), - MB2(0xE5FB), 0x0000, 0x0000, 0x0000, /* 8960 */ - MB2(0xE641), 0x0000, MB2(0xE640), 0x0000, - 0x0000, 0x0000, MB2(0xE643), 0x0000, - 0x0000, MB2(0xE642), 0x0000, MB2(0xE644), - 0x0000, 0x0000, MB2(0x8F50), 0x0000, - MB2(0xE645), 0x0000, 0x0000, MB2(0xE646), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE647), MB2(0x90BC), - 0x0000, MB2(0x9776), 0x0000, MB2(0xE648), /* 8980 */ - 0x0000, 0x0000, MB2(0x95A2), MB2(0x9465), - MB2(0xE649), 0x0000, MB2(0xE64A), MB2(0x8CA9), - 0x0000, 0x0000, 0x0000, MB2(0x8B4B), - 0x0000, 0x0000, 0x0000, MB2(0xE64B), - 0x0000, 0x0000, MB2(0x8E8B), MB2(0x9460), - MB2(0xE64C), 0x0000, MB2(0x8A6F), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE64D), 0x0000, 0x0000, /* 89A0 */ - 0x0000, 0x0000, MB2(0xE64F), MB2(0x9797), - 0x0000, MB2(0xE64E), MB2(0x9065), 0x0000, - MB2(0xE650), 0x0000, 0x0000, MB2(0xE651), - 0x0000, 0x0000, MB2(0xE652), MB2(0x8ACF), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE653), 0x0000, - 0x0000, MB2(0xE654), 0x0000, MB2(0xE655), - MB2(0xE656), 0x0000, 0x0000, 0x0000, /* 89C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8A70), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE657), 0x0000, - MB2(0xE658), MB2(0xE659), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x89F0), /* 89E0 */ - 0x0000, 0x0000, MB2(0x9047), MB2(0xE65A), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE65B), 0x0000, 0x0000, 0x0000, - MB2(0xE65C), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8CBE), 0x0000, MB2(0x92F9), MB2(0xE65D), /* 8A00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8C76), 0x0000, MB2(0x9075), 0x0000, - MB2(0xE660), 0x0000, MB2(0x93A2), 0x0000, - MB2(0xE65F), 0x0000, MB2(0xFBA3), MB2(0x8C50), - 0x0000, 0x0000, MB2(0xE65E), MB2(0x91F5), - MB2(0x8B4C), 0x0000, 0x0000, MB2(0xE661), - 0x0000, MB2(0xE662), 0x0000, MB2(0x8FD7), - 0x0000, 0x0000, 0x0000, MB2(0x8C8D), /* 8A20 */ - 0x0000, MB2(0xE663), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x964B), 0x0000, - 0x0000, MB2(0x90DD), 0x0000, 0x0000, - 0x0000, MB2(0x8B96), 0x0000, MB2(0x96F3), - MB2(0x9169), 0x0000, MB2(0xE664), MB2(0xFBA4), - 0x0000, 0x0000, MB2(0x9066), MB2(0x9290), - MB2(0x8FD8), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE665), 0x0000, 0x0000, /* 8A40 */ - 0x0000, 0x0000, MB2(0xE668), 0x0000, - MB2(0xE669), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8DBC), MB2(0x91C0), MB2(0xE667), 0x0000, - MB2(0x8FD9), MB2(0x955D), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE666), - 0x0000, 0x0000, MB2(0x8E8C), 0x0000, - MB2(0x8972), 0x0000, MB2(0xE66D), MB2(0x8C77), /* 8A60 */ - 0x0000, 0x0000, MB2(0x8E8E), 0x0000, - 0x0000, MB2(0x8E8D), 0x0000, MB2(0x986C), - MB2(0xE66C), MB2(0xE66B), MB2(0x9146), 0x0000, - MB2(0x8B6C), MB2(0x9862), MB2(0x8A59), MB2(0x8FDA), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xFBA5), 0x0000, 0x0000, - MB2(0xE66A), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE66F), 0x0000, /* 8A80 */ - MB2(0xE670), MB2(0xE66E), 0x0000, MB2(0x8CD6), - 0x0000, MB2(0x975F), 0x0000, 0x0000, - MB2(0x8E8F), MB2(0x9446), 0x0000, 0x0000, - 0x0000, MB2(0xE673), 0x0000, MB2(0x90BE), - 0x0000, MB2(0x9261), 0x0000, 0x0000, - MB2(0x9755), 0x0000, MB2(0xE676), 0x0000, - 0x0000, 0x0000, MB2(0x8CEA), 0x0000, - MB2(0x90BD), MB2(0xE672), 0x0000, MB2(0xE677), /* 8AA0 */ - MB2(0x8CEB), MB2(0xE674), MB2(0xE675), MB2(0xFBA6), - MB2(0xE671), 0x0000, 0x0000, 0x0000, - MB2(0x90E0), MB2(0x93C7), 0x0000, 0x0000, - MB2(0x924E), 0x0000, MB2(0x89DB), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x94EE), 0x0000, 0x0000, - MB2(0x8B62), 0x0000, MB2(0xFBA7), MB2(0x92B2), - 0x0000, 0x0000, MB2(0xE67A), 0x0000, /* 8AC0 */ - MB2(0xE678), 0x0000, 0x0000, MB2(0x926B), - 0x0000, 0x0000, 0x0000, MB2(0x90BF), - MB2(0x8AD0), MB2(0xE679), 0x0000, MB2(0x907A), - 0x0000, 0x0000, MB2(0x97C8), 0x0000, - 0x0000, 0x0000, MB2(0x985F), 0x0000, - 0x0000, 0x0000, MB2(0xE67B), MB2(0xE687), - MB2(0x92B3), 0x0000, MB2(0xE686), MB2(0xFBA8), - MB2(0xE683), MB2(0xE68B), MB2(0xE684), 0x0000, /* 8AE0 */ - MB2(0xE680), 0x0000, MB2(0x92FA), MB2(0xE67E), - 0x0000, 0x0000, 0x0000, MB2(0xE67C), - 0x0000, MB2(0x9740), MB2(0x8E90), 0x0000, - 0x0000, MB2(0xE681), 0x0000, MB2(0xE67D), - 0x0000, 0x0000, MB2(0xFBAA), MB2(0xE685), - MB2(0x8F94), 0x0000, MB2(0x8CBF), 0x0000, - 0x0000, 0x0000, MB2(0x91F8), 0x0000, - MB2(0x9664), MB2(0x8979), MB2(0x88E0), 0x0000, /* 8B00 */ - MB2(0x93A3), 0x0000, 0x0000, MB2(0xE689), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE688), 0x0000, MB2(0x93E4), 0x0000, - MB2(0xE68D), 0x0000, 0x0000, 0x0000, - MB2(0xE682), 0x0000, MB2(0xE68C), MB2(0xE68E), - 0x0000, MB2(0x8CAA), MB2(0xE68A), MB2(0x8D75), - 0x0000, MB2(0x8ED3), 0x0000, 0x0000, - MB2(0xE68F), MB2(0x9777), 0x0000, 0x0000, /* 8B20 */ - 0x0000, 0x0000, MB2(0xE692), 0x0000, - MB2(0xE695), 0x0000, 0x0000, MB2(0xE693), - MB2(0x9554), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE690), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8BDE), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE694), 0x0000, - 0x0000, MB2(0xE696), 0x0000, 0x0000, /* 8B40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE69A), 0x0000, 0x0000, - MB2(0xE697), 0x0000, MB2(0xE699), MB2(0xE698), - 0x0000, 0x0000, 0x0000, MB2(0xFBAB), - 0x0000, 0x0000, MB2(0xE69B), 0x0000, - MB2(0x8EAF), 0x0000, MB2(0xE69D), MB2(0xE69C), - MB2(0x9588), 0x0000, 0x0000, MB2(0xE69F), - 0x0000, 0x0000, 0x0000, 0x0000, /* 8B60 */ - 0x0000, 0x0000, MB2(0x8C78), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE69E), - MB2(0xE6A0), 0x0000, 0x0000, MB2(0xE6A1), - MB2(0x8B63), MB2(0xE3BF), MB2(0x8FF7), 0x0000, - MB2(0xE6A2), 0x0000, 0x0000, MB2(0x8CEC), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE6A3), 0x0000, MB2(0xFBAC), - MB2(0xE6A4), 0x0000, 0x0000, MB2(0x8E5D), /* 8B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9DCC), 0x0000, - MB2(0xE6A5), 0x0000, MB2(0xE6A6), 0x0000, - MB2(0x8F51), 0x0000, MB2(0xE6A7), MB2(0xE6A8), - 0x0000, 0x0000, MB2(0xE6A9), 0x0000, - 0x0000, MB2(0xE6AA), MB2(0xE6AB), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8BC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8BE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8C00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8C20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x924A), - 0x0000, 0x0000, MB2(0xE6AC), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE6AE), - 0x0000, MB2(0xE6AD), 0x0000, 0x0000, /* 8C40 */ - 0x0000, 0x0000, MB2(0x93A4), 0x0000, - MB2(0xE6AF), 0x0000, MB2(0x964C), 0x0000, - MB2(0xE6B0), 0x0000, MB2(0xE6B1), 0x0000, - MB2(0xE6B2), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE6B3), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x93D8), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8FDB), MB2(0xE6B4), 0x0000, /* 8C60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8D8B), MB2(0x98AC), - MB2(0xE6B5), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE6B6), MB2(0x955E), MB2(0xE6B7), 0x0000, - MB2(0xE6BF), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE6B8), 0x0000, /* 8C80 */ - 0x0000, MB2(0xE6BA), 0x0000, 0x0000, - 0x0000, MB2(0xE6B9), MB2(0xE6BB), 0x0000, - MB2(0x9665), MB2(0xE6BC), MB2(0xE6BD), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE6BE), 0x0000, 0x0000, 0x0000, - MB2(0xE6C0), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8A4C), MB2(0x92E5), 0x0000, - MB2(0x9589), MB2(0x8DE0), MB2(0x8D76), 0x0000, /* 8CA0 */ - 0x0000, 0x0000, 0x0000, MB2(0x956E), - MB2(0x89DD), MB2(0x94CC), MB2(0xE6C3), MB2(0x8AD1), - MB2(0x90D3), MB2(0xE6C2), MB2(0xE6C7), MB2(0x9299), - MB2(0x96E1), 0x0000, MB2(0xE6C5), MB2(0xE6C6), - MB2(0x8B4D), 0x0000, MB2(0xE6C8), MB2(0x9483), - MB2(0x91DD), 0x0000, 0x0000, MB2(0x94EF), - MB2(0x935C), MB2(0xE6C4), 0x0000, MB2(0x9666), - MB2(0x89EA), MB2(0xE6CA), MB2(0x9847), MB2(0x92C0), /* 8CC0 */ - MB2(0x9864), 0x0000, 0x0000, MB2(0x8E91), - MB2(0xE6C9), 0x0000, MB2(0x91AF), 0x0000, - 0x0000, MB2(0xE6DA), MB2(0x9147), 0x0000, - 0x0000, MB2(0x93F6), 0x0000, MB2(0x956F), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE6CD), MB2(0x8E5E), - MB2(0x8E92), 0x0000, MB2(0x8FDC), 0x0000, - MB2(0x9485), 0x0000, MB2(0x8CAB), MB2(0xE6CC), /* 8CE0 */ - MB2(0xE6CB), 0x0000, MB2(0x958A), 0x0000, - 0x0000, 0x0000, MB2(0x8EBF), 0x0000, - 0x0000, MB2(0x9371), 0x0000, 0x0000, - MB2(0xFBAD), 0x0000, 0x0000, 0x0000, - MB2(0xFBAE), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE6CF), MB2(0xE6D0), - MB2(0x8D77), MB2(0xE6CE), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8D00 */ - MB2(0xE6D1), MB2(0xE6D2), 0x0000, MB2(0xE6D4), - MB2(0x91A1), 0x0000, MB2(0xE6D3), MB2(0x8AE4), - 0x0000, MB2(0xE6D6), 0x0000, MB2(0xE6D5), - MB2(0xE6D7), 0x0000, MB2(0xFBAF), MB2(0xE6D9), - MB2(0xE6DB), 0x0000, MB2(0xE6DC), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8D20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8D40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8D60 */ - MB2(0x90D4), 0x0000, MB2(0x8ECD), MB2(0xE6DD), - 0x0000, 0x0000, 0x0000, MB2(0x8A71), - 0x0000, MB2(0xE6DE), 0x0000, 0x0000, - MB2(0x9196), MB2(0xE6DF), 0x0000, MB2(0xE6E0), - MB2(0x958B), 0x0000, MB2(0xFBB0), MB2(0x8B4E), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE6E1), 0x0000, 0x0000, /* 8D80 */ - 0x0000, MB2(0x92B4), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x897A), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE6E2), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8EEF), /* 8DA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9096), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x91AB), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE6E5), 0x0000, - 0x0000, 0x0000, MB2(0xE6E4), 0x0000, - 0x0000, 0x0000, MB2(0xE6E3), 0x0000, /* 8DC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE6EB), - MB2(0xE6E9), 0x0000, 0x0000, MB2(0xE6E6), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE6E8), 0x0000, - 0x0000, 0x0000, MB2(0xE6E7), MB2(0xE6EA), - 0x0000, MB2(0x8B97), 0x0000, MB2(0xE6EE), - 0x0000, MB2(0x90D5), 0x0000, MB2(0xE6EF), /* 8DE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8CD7), 0x0000, MB2(0xE6EC), MB2(0xE6ED), - 0x0000, 0x0000, 0x0000, MB2(0x9848), - 0x0000, 0x0000, 0x0000, MB2(0x92B5), - 0x0000, MB2(0x9148), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE6F0), 0x0000, 0x0000, MB2(0xE6F3), - 0x0000, 0x0000, 0x0000, 0x0000, /* 8E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE6F1), MB2(0xE6F2), MB2(0x9778), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x93A5), - MB2(0xE6F6), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE6F4), MB2(0xE6F5), MB2(0xE6F7), - 0x0000, 0x0000, 0x0000, 0x0000, /* 8E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE748), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE6FA), 0x0000, 0x0000, 0x0000, - MB2(0xE6FB), MB2(0xE6F9), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE6F8), 0x0000, /* 8E40 */ - MB2(0x92FB), 0x0000, 0x0000, MB2(0xE740), - MB2(0xE744), MB2(0xE741), MB2(0xE6FC), 0x0000, - MB2(0xE742), 0x0000, 0x0000, 0x0000, - MB2(0xE743), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE74A), 0x0000, 0x0000, - 0x0000, MB2(0xE745), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x90D6), - MB2(0xE747), 0x0000, 0x0000, MB2(0xE749), /* 8E60 */ - MB2(0xE746), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE74C), 0x0000, - MB2(0x8F52), 0x0000, MB2(0xE74B), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE74D), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE74E), 0x0000, 0x0000, /* 8E80 */ - MB2(0xE751), MB2(0xE750), 0x0000, MB2(0xE74F), - 0x0000, 0x0000, MB2(0xE753), MB2(0xE752), - 0x0000, MB2(0x96F4), 0x0000, 0x0000, - 0x0000, MB2(0xE755), 0x0000, MB2(0xE754), - MB2(0xE756), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE757), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE759), 0x0000, 0x0000, /* 8EA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE758), MB2(0x9067), - MB2(0xE75A), 0x0000, 0x0000, MB2(0x8BEB), - MB2(0xE75B), MB2(0xE75D), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE75E), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8EC0 */ - 0x0000, MB2(0xE75F), MB2(0xE75C), 0x0000, - MB2(0xE760), 0x0000, MB2(0x8ED4), MB2(0xE761), - MB2(0x8B4F), MB2(0x8C52), 0x0000, MB2(0xFBB2), - 0x0000, 0x0000, MB2(0x8CAC), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE762), - 0x0000, 0x0000, 0x0000, MB2(0x93EE), - 0x0000, 0x0000, MB2(0x935D), MB2(0xE763), /* 8EE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE766), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8EB2), 0x0000, 0x0000, MB2(0xE765), - MB2(0xE764), MB2(0x8C79), MB2(0xE767), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8A72), /* 8F00 */ - 0x0000, MB2(0xE769), 0x0000, 0x0000, - 0x0000, MB2(0x8DDA), MB2(0xE768), 0x0000, - MB2(0xE771), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE76B), MB2(0xE76D), - MB2(0x95E3), MB2(0xE76A), 0x0000, 0x0000, - 0x0000, MB2(0xE76C), 0x0000, MB2(0xE770), - MB2(0xE76E), MB2(0x8B50), 0x0000, MB2(0xE76F), - 0x0000, 0x0000, 0x0000, 0x0000, /* 8F20 */ - 0x0000, 0x0000, MB2(0xE772), 0x0000, - 0x0000, MB2(0x9479), MB2(0x97D6), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8F53), - 0x0000, 0x0000, 0x0000, MB2(0xE773), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9741), MB2(0xE775), 0x0000, MB2(0xE774), - 0x0000, 0x0000, MB2(0xE778), MB2(0x9760), - 0x0000, 0x0000, MB2(0xE777), 0x0000, /* 8F40 */ - MB2(0x8A8D), MB2(0xE776), MB2(0xE77B), 0x0000, - 0x0000, MB2(0xE77A), 0x0000, 0x0000, - MB2(0xE779), MB2(0x9351), MB2(0xE77C), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE77D), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE77E), 0x0000, 0x0000, MB2(0x8D8C), - 0x0000, MB2(0x8C44), MB2(0xE780), MB2(0xE781), /* 8F60 */ - MB2(0xE782), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 8F80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9068), - MB2(0xE783), 0x0000, MB2(0x8EAB), MB2(0xE784), - 0x0000, 0x0000, 0x0000, MB2(0xE785), /* 8FA0 */ - 0x0000, 0x0000, 0x0000, MB2(0x999F), - MB2(0x999E), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE786), MB2(0xE390), MB2(0xE787), - MB2(0x9243), MB2(0x904A), MB2(0x945F), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE788), - 0x0000, 0x0000, MB2(0x95D3), MB2(0x92D2), - MB2(0x8D9E), 0x0000, 0x0000, MB2(0x9248), - 0x0000, 0x0000, MB2(0x8949), 0x0000, /* 8FC0 */ - MB2(0x9698), MB2(0x9076), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8C7D), 0x0000, - 0x0000, MB2(0x8BDF), 0x0000, 0x0000, - MB2(0x95D4), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE789), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE78B), 0x0000, /* 8FE0 */ - 0x0000, MB2(0xE78A), MB2(0x89DE), 0x0000, - 0x0000, MB2(0x93F4), MB2(0xE78C), MB2(0x9497), - 0x0000, MB2(0x9352), 0x0000, MB2(0xE78D), - MB2(0x8F71), 0x0000, 0x0000, 0x0000, - MB2(0xE78F), 0x0000, 0x0000, MB2(0x96C0), - MB2(0xE79E), MB2(0xE791), MB2(0xE792), 0x0000, - 0x0000, MB2(0x92C7), 0x0000, 0x0000, - MB2(0x91DE), MB2(0x9197), 0x0000, MB2(0x93A6), /* 9000 */ - 0x0000, MB2(0xE790), MB2(0x8B74), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE799), - 0x0000, MB2(0xE796), MB2(0xE7A3), MB2(0x93A7), - MB2(0x9280), MB2(0xE793), 0x0000, MB2(0x92FC), - MB2(0x9372), MB2(0xE794), MB2(0xE798), MB2(0x9080), - 0x0000, MB2(0x9487), MB2(0x92CA), 0x0000, - 0x0000, MB2(0x90C0), MB2(0xE797), MB2(0x91AC), - MB2(0x91A2), MB2(0xE795), MB2(0x88A7), MB2(0x9841), /* 9020 */ - 0x0000, 0x0000, 0x0000, MB2(0xE79A), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x91DF), 0x0000, - 0x0000, MB2(0x8F54), MB2(0x9069), 0x0000, - 0x0000, MB2(0xE79C), MB2(0xE79B), 0x0000, - MB2(0x88ED), MB2(0xE79D), 0x0000, 0x0000, - MB2(0x954E), 0x0000, MB2(0xE7A5), 0x0000, - 0x0000, MB2(0x93D9), MB2(0x908B), 0x0000, /* 9040 */ - 0x0000, MB2(0x9278), 0x0000, MB2(0x8BF6), - 0x0000, MB2(0xE7A4), MB2(0x9756), MB2(0x895E), - 0x0000, MB2(0x95D5), MB2(0x89DF), MB2(0xE79F), - MB2(0xE7A0), MB2(0xE7A1), MB2(0xE7A2), MB2(0x93B9), - MB2(0x9242), MB2(0x88E1), MB2(0xE7A6), 0x0000, - MB2(0xE7A7), MB2(0xEAA1), 0x0000, 0x0000, - MB2(0x91BB), 0x0000, MB2(0xE7A8), 0x0000, - MB2(0x8993), MB2(0x916B), 0x0000, MB2(0x8CAD), /* 9060 */ - 0x0000, MB2(0x9779), 0x0000, MB2(0xFBB5), - MB2(0xE7A9), MB2(0x934B), 0x0000, 0x0000, - 0x0000, MB2(0x9198), MB2(0x8ED5), MB2(0xE7AA), - 0x0000, 0x0000, MB2(0xE7AD), 0x0000, - 0x0000, MB2(0x8F85), MB2(0xE7AB), MB2(0x914A), - MB2(0x9149), 0x0000, MB2(0x88E2), 0x0000, - MB2(0x97C9), MB2(0xE7AF), 0x0000, MB2(0x94F0), - MB2(0xE7B1), MB2(0xE7B0), MB2(0xE7AE), MB2(0xE284), /* 9080 */ - MB2(0x8AD2), 0x0000, 0x0000, MB2(0xE78E), - 0x0000, MB2(0xE7B3), MB2(0xE7B2), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE7B4), - 0x0000, MB2(0x9757), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x93DF), /* 90A0 */ - 0x0000, 0x0000, MB2(0x964D), 0x0000, - MB2(0xE7B5), 0x0000, MB2(0x8ED7), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE7B6), - 0x0000, MB2(0xE7B7), 0x0000, 0x0000, - 0x0000, MB2(0xE7B8), 0x0000, 0x0000, - MB2(0x9340), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x88E8), 0x0000, 0x0000, /* 90C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8D78), 0x0000, - 0x0000, 0x0000, MB2(0x9859), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE7BC), - 0x0000, 0x0000, MB2(0xFBB6), 0x0000, - 0x0000, MB2(0x8C53), MB2(0xE7B9), 0x0000, /* 90E0 */ - MB2(0xE7BA), 0x0000, 0x0000, 0x0000, - MB2(0x9594), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8A73), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9758), 0x0000, MB2(0x8BBD), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9373), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE7BD), 0x0000, /* 9100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE7BE), 0x0000, - 0x0000, MB2(0xFBB8), 0x0000, 0x0000, - 0x0000, MB2(0xE7BF), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9120 */ - 0x0000, 0x0000, 0x0000, MB2(0xFBB9), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9341), 0x0000, 0x0000, - MB2(0xE7C1), 0x0000, MB2(0xE7C0), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x93D1), MB2(0xE7C2), MB2(0x8F55), - MB2(0x8EDE), MB2(0x947A), MB2(0x9291), 0x0000, - 0x0000, 0x0000, MB2(0x8EF0), 0x0000, - MB2(0x908C), 0x0000, MB2(0xE7C3), 0x0000, - MB2(0xE7C4), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x907C), MB2(0xE7C5), /* 9160 */ - 0x0000, MB2(0xE7C6), 0x0000, 0x0000, - 0x0000, MB2(0xE7C7), MB2(0x978F), 0x0000, - MB2(0x8F56), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE7C9), MB2(0xE7C8), - 0x0000, MB2(0x8D79), 0x0000, MB2(0x8D93), - MB2(0x8E5F), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE7CC), 0x0000, /* 9180 */ - 0x0000, 0x0000, 0x0000, MB2(0x8F86), - 0x0000, MB2(0xE7CB), 0x0000, MB2(0xE7CA), - 0x0000, MB2(0x91E7), 0x0000, 0x0000, - MB2(0x8CED), 0x0000, MB2(0x90C1), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x94AE), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8F58), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE7CD), 0x0000, /* 91A0 */ - MB2(0x8FDD), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE7D0), MB2(0xE7CE), - 0x0000, 0x0000, 0x0000, MB2(0xE7CF), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE7D2), MB2(0xE7D1), 0x0000, 0x0000, - MB2(0x8FF8), 0x0000, MB2(0xE7D3), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE7D4), MB2(0xE7D5), 0x0000, 0x0000, /* 91C0 */ - 0x0000, 0x0000, MB2(0x94CE), MB2(0x8DD1), - MB2(0x8EDF), MB2(0xE7D6), 0x0000, MB2(0xE7D7), - MB2(0x97A2), MB2(0x8F64), MB2(0x96EC), MB2(0x97CA), - MB2(0xE7D8), MB2(0x8BE0), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE7D9), MB2(0xFBBB), - MB2(0x9342), 0x0000, MB2(0xFBBA), MB2(0xE7DC), - MB2(0x8A98), MB2(0x906A), MB2(0xFBBC), MB2(0xE7DA), - 0x0000, MB2(0xE7DB), 0x0000, MB2(0x92DE), /* 91E0 */ - MB2(0xFBBF), MB2(0xFBC0), MB2(0x9674), MB2(0x8BFA), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xFBBD), MB2(0xFBBE), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE7DE), MB2(0xE7DF), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE7DD), 0x0000, 0x0000, MB2(0xE7E1), - 0x0000, 0x0000, 0x0000, 0x0000, /* 9200 */ - 0x0000, 0x0000, MB2(0xFBC1), 0x0000, - 0x0000, 0x0000, MB2(0xFBC3), 0x0000, - 0x0000, MB2(0x93DD), MB2(0x8A62), 0x0000, - MB2(0xFBC2), MB2(0xE7E5), 0x0000, 0x0000, - MB2(0xE7E2), MB2(0xE7E4), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE7E0), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE86E), 0x0000, 0x0000, - MB2(0xE7E3), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x97E9), 0x0000, 0x0000, MB2(0x8CD8), - 0x0000, MB2(0xFBCA), MB2(0xFBC4), 0x0000, - MB2(0xFBC6), 0x0000, 0x0000, MB2(0xE7ED), - MB2(0xFBC5), 0x0000, 0x0000, 0x0000, /* 9240 */ - MB2(0x9353), MB2(0xE7E8), 0x0000, 0x0000, - MB2(0xE7EB), MB2(0xE7E9), 0x0000, MB2(0xE7EE), - 0x0000, 0x0000, MB2(0xFBC7), 0x0000, - MB2(0xE7EF), MB2(0xFBC9), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE7E7), - 0x0000, MB2(0xFBC8), MB2(0xE7F4), MB2(0x8994), - 0x0000, 0x0000, MB2(0xE7E6), 0x0000, - 0x0000, 0x0000, MB2(0x94AB), 0x0000, /* 9260 */ - MB2(0xE7EA), 0x0000, MB2(0x8FDE), MB2(0xFBCB), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8D7A), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xFBCD), - MB2(0xFBCE), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9667), 0x0000, - MB2(0x8BE2), 0x0000, 0x0000, MB2(0x8F65), /* 9280 */ - 0x0000, MB2(0x93BA), 0x0000, 0x0000, - MB2(0xFA5F), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x914C), 0x0000, MB2(0xE7F2), - 0x0000, MB2(0xE7EC), MB2(0xE7F1), 0x0000, - MB2(0x96C1), 0x0000, MB2(0x92B6), MB2(0xE7F3), - MB2(0xE7F0), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 92A0 */ - 0x0000, 0x0000, 0x0000, MB2(0xFBCC), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x914B), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE7F7), - 0x0000, MB2(0xE7F6), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 92C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE7F5), - MB2(0xFBD2), 0x0000, MB2(0x964E), MB2(0xFBD6), - 0x0000, MB2(0xFBD4), 0x0000, MB2(0xFBD0), - 0x0000, MB2(0xFBD1), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFBD5), 0x0000, 0x0000, 0x0000, /* 92E0 */ - MB2(0x8F9B), 0x0000, 0x0000, MB2(0xFBCF), - 0x0000, MB2(0xE7F8), MB2(0x95DD), 0x0000, - 0x0000, MB2(0x8973), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9565), MB2(0x9292), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8B98), MB2(0xFA65), MB2(0xE7FA), MB2(0xFBD9), - MB2(0x8D7C), 0x0000, 0x0000, MB2(0xFBDC), - 0x0000, 0x0000, MB2(0xFBDE), 0x0000, /* 9300 */ - 0x0000, 0x0000, MB2(0x8E4B), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE7F9), - MB2(0x908D), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x908E), MB2(0xE840), MB2(0xE842), 0x0000, - 0x0000, MB2(0xFBDD), MB2(0xFBDB), 0x0000, - MB2(0x8FF9), MB2(0xFBD8), MB2(0xE841), MB2(0xE843), /* 9320 */ - 0x0000, MB2(0xFBD7), MB2(0x8BD1), 0x0000, - MB2(0x9564), 0x0000, 0x0000, MB2(0x8EE0), - MB2(0x9842), 0x0000, MB2(0xE7FC), MB2(0x8DF6), - 0x0000, 0x0000, MB2(0x985E), 0x0000, - 0x0000, MB2(0xE845), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE844), MB2(0xE846), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9340 */ - MB2(0xE7FB), 0x0000, 0x0000, 0x0000, - MB2(0xFA5E), 0x0000, 0x0000, MB2(0x93E7), - 0x0000, MB2(0x9374), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x92D5), 0x0000, MB2(0xE84B), MB2(0xFBE0), - 0x0000, 0x0000, 0x0000, MB2(0x9262), - MB2(0xE847), 0x0000, 0x0000, 0x0000, - MB2(0xE848), 0x0000, 0x0000, 0x0000, /* 9360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8C4C), 0x0000, MB2(0xE84A), 0x0000, - MB2(0xFBDF), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8CAE), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE849), 0x0000, MB2(0x8FDF), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8A99), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE84F), 0x0000, MB2(0x8DBD), MB2(0x9199), - 0x0000, 0x0000, MB2(0x92C8), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 93A0 */ - MB2(0xFBE1), 0x0000, 0x0000, MB2(0x8A5A), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE84D), MB2(0xE84E), MB2(0x92C1), 0x0000, - MB2(0xE84C), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE850), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE856), /* 93C0 */ - 0x0000, 0x0000, MB2(0xFBE2), 0x0000, - MB2(0xE859), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE858), MB2(0x934C), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE851), MB2(0xE852), - MB2(0xE855), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE857), MB2(0xFBE3), 0x0000, - 0x0000, MB2(0x8BBE), 0x0000, 0x0000, /* 93E0 */ - MB2(0xE85A), MB2(0xE854), 0x0000, 0x0000, - MB2(0xE853), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFBE4), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE85E), /* 9400 */ - 0x0000, 0x0000, 0x0000, MB2(0xE85F), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE860), 0x0000, 0x0000, MB2(0xE85D), - MB2(0xE85C), 0x0000, 0x0000, 0x0000, - MB2(0x8FE0), MB2(0x93A8), MB2(0xE85B), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE864), 0x0000, 0x0000, /* 9420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE862), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xFBE5), 0x0000, 0x0000, - 0x0000, MB2(0xE863), MB2(0xE861), 0x0000, - MB2(0x91F6), 0x0000, MB2(0xE865), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE866), 0x0000, 0x0000, /* 9440 */ - MB2(0xE868), MB2(0xFBE6), 0x0000, 0x0000, - MB2(0xFBE7), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8AD3), MB2(0xE867), MB2(0x96F8), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE873), MB2(0xE869), - 0x0000, 0x0000, MB2(0xE86C), 0x0000, - MB2(0xE86A), 0x0000, MB2(0xE86B), 0x0000, /* 9460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE86D), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE86F), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE870), 0x0000, MB2(0xE871), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE874), MB2(0xE872), MB2(0xE875), MB2(0xE877), - 0x0000, MB2(0xE876), 0x0000, 0x0000, /* 9480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 94A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 94C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 94E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x92B7), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x96E5), 0x0000, MB2(0xE878), MB2(0x914D), /* 9580 */ - 0x0000, 0x0000, 0x0000, MB2(0xE879), - 0x0000, MB2(0x95C2), MB2(0xE87A), MB2(0x8A4A), - 0x0000, 0x0000, 0x0000, MB2(0x895B), - 0x0000, MB2(0x8AD5), MB2(0xFBE8), MB2(0x8AD4), - MB2(0xE87B), 0x0000, MB2(0xE87C), 0x0000, - MB2(0xE87D), MB2(0xE87E), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE880), 0x0000, MB2(0x8AD6), MB2(0x8A74), /* 95A0 */ - MB2(0x8D7D), MB2(0x94B4), 0x0000, MB2(0xE882), - MB2(0xE881), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE883), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x897B), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE886), 0x0000, MB2(0xE885), - MB2(0xE884), 0x0000, MB2(0xE887), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE88A), /* 95C0 */ - 0x0000, 0x0000, 0x0000, MB2(0x88C5), - 0x0000, 0x0000, MB2(0xE888), 0x0000, - MB2(0xE88C), MB2(0xE88B), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE88E), MB2(0xE88D), MB2(0xE88F), 0x0000, - MB2(0x93AC), 0x0000, 0x0000, 0x0000, - MB2(0xE890), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE891), MB2(0xE893), 0x0000, /* 95E0 */ - 0x0000, MB2(0xE892), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x958C), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE894), 0x0000, 0x0000, /* 9620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE895), 0x0000, MB2(0x8DE3), 0x0000, - 0x0000, 0x0000, MB2(0xE896), MB2(0xE897), - 0x0000, 0x0000, MB2(0x9668), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x916A), - 0x0000, 0x0000, 0x0000, MB2(0x88A2), - MB2(0x91C9), 0x0000, MB2(0xE898), 0x0000, /* 9640 */ - MB2(0x958D), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE89B), - MB2(0xE899), MB2(0x8D7E), 0x0000, MB2(0xE89A), - MB2(0x8CC0), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x95C3), - MB2(0xE89D), MB2(0xE89F), MB2(0xE89E), MB2(0xE8A0), - 0x0000, 0x0000, MB2(0x8940), MB2(0x9077), /* 9660 */ - MB2(0x8F9C), MB2(0x8AD7), MB2(0xE8A1), 0x0000, - 0x0000, 0x0000, MB2(0x9486), 0x0000, - MB2(0xE8A3), 0x0000, 0x0000, 0x0000, - MB2(0x8941), 0x0000, MB2(0xE8A2), MB2(0x92C2), - 0x0000, MB2(0x97CB), MB2(0x93A9), MB2(0xE89C), - MB2(0x97A4), 0x0000, MB2(0x8CAF), 0x0000, - 0x0000, MB2(0x977A), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9680 */ - 0x0000, MB2(0x8BF7), MB2(0x97B2), 0x0000, - MB2(0x8C47), 0x0000, MB2(0x91E0), MB2(0xE440), - 0x0000, MB2(0xE8A4), MB2(0x8A4B), MB2(0x908F), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8A75), MB2(0xE8A6), 0x0000, MB2(0xE8A7), - MB2(0xE8A5), MB2(0x8C84), 0x0000, MB2(0x8DDB), - MB2(0x8FE1), MB2(0xFBEB), 0x0000, 0x0000, - MB2(0x8942), 0x0000, 0x0000, MB2(0x97D7), /* 96A0 */ - 0x0000, 0x0000, 0x0000, MB2(0xE8A9), - MB2(0xE7AC), 0x0000, MB2(0xE8A8), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xFBEC), - MB2(0xE8AC), MB2(0xE8AA), MB2(0xE8AB), 0x0000, - MB2(0xE8AD), 0x0000, MB2(0xE8AE), MB2(0x97EA), - MB2(0xE8AF), MB2(0xE8B0), 0x0000, MB2(0x90C7), - MB2(0x94B9), 0x0000, 0x0000, 0x0000, - MB2(0x909D), MB2(0x8AE5), 0x0000, 0x0000, /* 96C0 */ - MB2(0x9759), MB2(0x89EB), MB2(0x8F57), MB2(0x8CD9), - 0x0000, MB2(0xE8B3), 0x0000, MB2(0xE8B2), - MB2(0x8E93), MB2(0xE8B4), MB2(0xE8B1), 0x0000, - 0x0000, MB2(0x8E47), 0x0000, 0x0000, - 0x0000, MB2(0xE8B8), MB2(0xE5AB), 0x0000, - 0x0000, MB2(0x99D4), 0x0000, MB2(0x9097), - MB2(0xE8B6), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x97A3), MB2(0x93EF), /* 96E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x894A), 0x0000, MB2(0x90E1), MB2(0x8EB4), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x95B5), 0x0000, MB2(0x895F), 0x0000, - 0x0000, 0x0000, MB2(0x97EB), MB2(0x978B), - 0x0000, MB2(0xE8B9), 0x0000, MB2(0x9364), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8EF9), 0x0000, 0x0000, 0x0000, /* 9700 */ - MB2(0xE8BA), 0x0000, MB2(0xE8BB), MB2(0x906B), - MB2(0xE8BC), 0x0000, MB2(0x97EC), 0x0000, - 0x0000, MB2(0xE8B7), MB2(0xE8BE), MB2(0xE8C0), - 0x0000, MB2(0xE8BF), 0x0000, MB2(0xE8BD), - 0x0000, 0x0000, MB2(0xE8C1), 0x0000, - 0x0000, MB2(0xE8C2), 0x0000, 0x0000, - MB2(0x919A), 0x0000, MB2(0x89E0), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9720 */ - MB2(0xE8C3), 0x0000, 0x0000, MB2(0x96B6), - 0x0000, 0x0000, MB2(0xE8C4), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE8C5), 0x0000, MB2(0x9849), MB2(0xFBED), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9E50), MB2(0xE8C6), 0x0000, MB2(0xFBEE), - 0x0000, MB2(0xE8C7), MB2(0xE8C8), 0x0000, - 0x0000, 0x0000, MB2(0xE8CC), MB2(0xFBEF), /* 9740 */ - MB2(0xE8C9), 0x0000, MB2(0xE8CA), 0x0000, - MB2(0xE8CB), MB2(0xE8CD), 0x0000, 0x0000, - 0x0000, MB2(0xFBF0), 0x0000, MB2(0xFBF1), - 0x0000, MB2(0xFBF2), MB2(0x90C2), 0x0000, - 0x0000, MB2(0xFBF3), MB2(0x96F5), 0x0000, - 0x0000, MB2(0x90C3), 0x0000, 0x0000, - MB2(0xE8CE), 0x0000, MB2(0x94F1), 0x0000, - MB2(0xE8CF), MB2(0xEA72), MB2(0x96CA), 0x0000, /* 9760 */ - MB2(0xE8D0), 0x0000, MB2(0xE8D1), 0x0000, - MB2(0xE8D2), MB2(0x8A76), 0x0000, MB2(0xE8D4), - 0x0000, MB2(0x9078), 0x0000, 0x0000, - 0x0000, MB2(0xE8D5), 0x0000, 0x0000, - MB2(0x8C43), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE8D6), MB2(0xE8DA), 0x0000, - MB2(0xE8D8), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE8D9), 0x0000, 0x0000, /* 9780 */ - MB2(0x8A93), MB2(0xE8D7), MB2(0xE8DB), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE8DC), - 0x0000, MB2(0x88C6), 0x0000, MB2(0xE8DD), - MB2(0xE8DE), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8FE2), 0x0000, 0x0000, 0x0000, - MB2(0xE8DF), 0x0000, 0x0000, 0x0000, - MB2(0x8B66), 0x0000, 0x0000, MB2(0xE8E2), /* 97A0 */ - 0x0000, 0x0000, MB2(0xE8E1), 0x0000, - MB2(0xE8E0), 0x0000, 0x0000, MB2(0xE691), - 0x0000, MB2(0x95DA), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE8E3), - MB2(0xE8E4), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE8E5), /* 97C0 */ - 0x0000, 0x0000, MB2(0xE8E6), 0x0000, - MB2(0xE8E7), 0x0000, 0x0000, MB2(0xE8E8), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8AD8), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE8E9), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 97E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE8EA), MB2(0x9442), 0x0000, - 0x0000, 0x0000, MB2(0xE8EC), MB2(0x89B9), - 0x0000, MB2(0xE8EF), MB2(0xE8EE), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8943), - 0x0000, 0x0000, 0x0000, MB2(0x8BBF), - 0x0000, MB2(0x95C5), MB2(0x92B8), MB2(0x8DA0), /* 9800 */ - 0x0000, MB2(0x8D80), MB2(0x8F87), 0x0000, - MB2(0x907B), 0x0000, 0x0000, 0x0000, - MB2(0xE8F1), 0x0000, 0x0000, MB2(0xE8F0), - MB2(0x9761), MB2(0x8AE6), MB2(0x94D0), MB2(0x93DA), - 0x0000, 0x0000, 0x0000, MB2(0x909C), - MB2(0x97CC), 0x0000, MB2(0x8C7A), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE8F4), 0x0000, 0x0000, /* 9820 */ - MB2(0xE8F3), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x966A), MB2(0x93AA), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x896F), 0x0000, 0x0000, MB2(0xE8F5), - MB2(0xE8F2), 0x0000, 0x0000, MB2(0x9570), - MB2(0x978A), MB2(0xE8F6), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9840 */ - 0x0000, 0x0000, MB2(0xE8F7), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE8F9), - MB2(0x91E8), MB2(0x8A7A), MB2(0x8A7B), MB2(0xE8F8), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8AE7), MB2(0x8CB0), 0x0000, MB2(0xFBF4), - MB2(0x8AE8), 0x0000, 0x0000, MB2(0x935E), - 0x0000, 0x0000, MB2(0x97DE), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9860 */ - 0x0000, MB2(0xFBF5), 0x0000, MB2(0x8CDA), - 0x0000, 0x0000, 0x0000, MB2(0xE8FA), - 0x0000, 0x0000, 0x0000, MB2(0xE8FB), - MB2(0xE8FC), MB2(0xE940), 0x0000, MB2(0xE942), - MB2(0xE941), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 98A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9597), 0x0000, MB2(0xE943), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE944), - 0x0000, MB2(0xE945), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE946), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE948), /* 98C0 */ - MB2(0xE947), 0x0000, MB2(0xE949), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x94F2), - MB2(0xE3CA), 0x0000, 0x0000, MB2(0x9048), - 0x0000, 0x0000, MB2(0x8B51), 0x0000, /* 98E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE94A), 0x0000, MB2(0xE94B), - 0x0000, MB2(0x99AA), MB2(0x9F5A), MB2(0x94D1), - 0x0000, 0x0000, MB2(0x88F9), 0x0000, - MB2(0x88B9), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8E94), MB2(0x964F), MB2(0x8FFC), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE94C), /* 9900 */ - 0x0000, MB2(0x96DD), 0x0000, 0x0000, - 0x0000, MB2(0xE94D), MB2(0x977B), 0x0000, - MB2(0x8961), 0x0000, 0x0000, 0x0000, - MB2(0x8E60), 0x0000, MB2(0xE94E), MB2(0x89EC), - MB2(0xE94F), 0x0000, 0x0000, 0x0000, - MB2(0xE950), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE952), MB2(0xE953), 0x0000, - MB2(0xE955), MB2(0xE951), 0x0000, 0x0000, /* 9920 */ - MB2(0xE954), 0x0000, 0x0000, MB2(0xFBF8), - MB2(0x8AD9), 0x0000, 0x0000, 0x0000, - MB2(0xE956), 0x0000, MB2(0xE957), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE958), MB2(0xE959), 0x0000, - 0x0000, 0x0000, MB2(0xE95A), 0x0000, /* 9940 */ - 0x0000, MB2(0xE95C), 0x0000, 0x0000, - 0x0000, MB2(0xE95B), 0x0000, MB2(0xE95E), - MB2(0xE961), 0x0000, 0x0000, 0x0000, - MB2(0xE95D), MB2(0xE95F), MB2(0xE960), 0x0000, - 0x0000, MB2(0xE962), 0x0000, MB2(0x8BC0), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8EF1), MB2(0xE963), - MB2(0xE964), MB2(0x8D81), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xFBFA), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 99A0 */ - 0x0000, MB2(0xE965), 0x0000, 0x0000, - MB2(0x8A5D), 0x0000, 0x0000, 0x0000, - MB2(0x946E), MB2(0xE966), MB2(0xE967), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9279), - MB2(0x93E9), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE968), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x949D), 0x0000, 0x0000, /* 99C0 */ - MB2(0x91CA), MB2(0x8977), MB2(0x8BEC), 0x0000, - MB2(0x8BED), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x9293), MB2(0xE96D), MB2(0x8BEE), 0x0000, - 0x0000, MB2(0x89ED), 0x0000, 0x0000, - MB2(0xE96C), 0x0000, 0x0000, MB2(0xE96A), - 0x0000, MB2(0xE96B), 0x0000, MB2(0xE969), - 0x0000, 0x0000, MB2(0xE977), 0x0000, /* 99E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE96E), MB2(0xE96F), 0x0000, - 0x0000, MB2(0xE970), MB2(0xE971), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE973), 0x0000, 0x0000, MB2(0xE972), - 0x0000, 0x0000, 0x0000, MB2(0x8F78), - 0x0000, MB2(0xE974), 0x0000, 0x0000, /* 9A00 */ - 0x0000, MB2(0xE976), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x8B52), MB2(0xE975), - 0x0000, 0x0000, MB2(0x919B), MB2(0x8CB1), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE978), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9A20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x91CB), 0x0000, 0x0000, MB2(0xE979), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x93AB), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE97A), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE980), 0x0000, - MB2(0xE97D), 0x0000, MB2(0xE97C), MB2(0xE97E), /* 9A40 */ - 0x0000, MB2(0xE97B), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE982), MB2(0xFBFB), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE981), 0x0000, MB2(0xE984), - 0x0000, 0x0000, MB2(0x8BC1), MB2(0xE983), - 0x0000, 0x0000, 0x0000, MB2(0xE985), - 0x0000, 0x0000, MB2(0xE986), 0x0000, /* 9A60 */ - MB2(0xE988), MB2(0xE987), 0x0000, 0x0000, - 0x0000, MB2(0xE989), MB2(0xE98B), MB2(0xE98A), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9A80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9AA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8D9C), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE98C), 0x0000, 0x0000, - MB2(0xE98D), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8A5B), 0x0000, 0x0000, 0x0000, - MB2(0xE98E), 0x0000, 0x0000, 0x0000, - MB2(0xE98F), 0x0000, 0x0000, 0x0000, /* 9AC0 */ - MB2(0x9091), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE990), - 0x0000, MB2(0xE991), 0x0000, MB2(0xE992), - MB2(0xE993), 0x0000, 0x0000, 0x0000, - MB2(0x8D82), MB2(0xFBFC), 0x0000, 0x0000, - MB2(0xFC40), 0x0000, MB2(0xE994), MB2(0xE995), - 0x0000, 0x0000, MB2(0xE996), MB2(0xE997), /* 9AE0 */ - 0x0000, 0x0000, MB2(0xE998), 0x0000, - 0x0000, 0x0000, MB2(0x94AF), MB2(0xE99A), - 0x0000, MB2(0x9545), MB2(0xE99B), MB2(0xE999), - 0x0000, MB2(0xE99D), 0x0000, 0x0000, - MB2(0xE99C), 0x0000, 0x0000, MB2(0xE99E), - 0x0000, 0x0000, 0x0000, MB2(0xE99F), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9B00 */ - 0x0000, 0x0000, MB2(0xE9A0), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE9A1), 0x0000, MB2(0xE9A2), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE9A3), - 0x0000, 0x0000, MB2(0xE9A4), MB2(0xE9A5), /* 9B20 */ - 0x0000, MB2(0xE9A6), 0x0000, MB2(0xE9A7), - MB2(0xE9A8), MB2(0xE9A9), MB2(0xE9AA), 0x0000, - 0x0000, 0x0000, MB2(0xE9AB), MB2(0xE9AC), - 0x0000, MB2(0x9F54), MB2(0xE9AD), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE2F6), - MB2(0x8B53), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8A40), MB2(0x8DB0), MB2(0xE9AF), /* 9B40 */ - MB2(0xE9AE), MB2(0x96A3), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE9B1), MB2(0xE9B2), MB2(0xE9B0), - 0x0000, MB2(0xE9B3), 0x0000, 0x0000, - MB2(0x9682), 0x0000, 0x0000, 0x0000, - MB2(0xE9B4), 0x0000, MB2(0x8B9B), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9B60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9844), - 0x0000, 0x0000, MB2(0xFC42), 0x0000, - MB2(0xE9B5), MB2(0xFC41), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE9B7), /* 9B80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x88BC), MB2(0xFC43), - 0x0000, MB2(0xE9B8), MB2(0x95A9), MB2(0xE9B6), - 0x0000, 0x0000, MB2(0xE9B9), MB2(0xE9BA), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE9BB), - MB2(0xE9BC), 0x0000, 0x0000, 0x0000, /* 9BA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE9BD), 0x0000, MB2(0x968E), MB2(0x8E4C), - 0x0000, MB2(0x8DF8), MB2(0x914E), 0x0000, - 0x0000, MB2(0xFC44), 0x0000, 0x0000, - MB2(0xE9BE), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE9C1), 0x0000, MB2(0xFC45), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE9BF), 0x0000, 0x0000, 0x0000, /* 9BC0 */ - 0x0000, 0x0000, MB2(0xE9C2), 0x0000, - 0x0000, MB2(0x8CEF), MB2(0xE9C0), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE9C3), - 0x0000, MB2(0xE9C4), MB2(0xE9C5), 0x0000, - MB2(0xE9C9), 0x0000, MB2(0x8E49), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x91E2), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE9CA), MB2(0xE9C7), MB2(0xE9C6), /* 9BE0 */ - MB2(0xE9C8), 0x0000, 0x0000, 0x0000, - MB2(0x8C7E), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE9CE), MB2(0xE9CD), MB2(0xE9CC), 0x0000, - 0x0000, MB2(0x88B1), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFC46), 0x0000, 0x0000, 0x0000, /* 9C00 */ - MB2(0xE9D8), 0x0000, MB2(0xE9D4), 0x0000, - MB2(0xE9D5), MB2(0xE9D1), MB2(0xE9D7), 0x0000, - MB2(0xE9D3), MB2(0x8A82), 0x0000, 0x0000, - MB2(0x986B), 0x0000, MB2(0xE9D6), MB2(0xE9D2), - MB2(0xE9D0), MB2(0xE9CF), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE9DA), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xE9DD), 0x0000, 0x0000, /* 9C20 */ - MB2(0xE9DC), MB2(0xE9DB), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x9568), MB2(0xE9D9), MB2(0x88F1), - MB2(0xE9DE), 0x0000, MB2(0xE9E0), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8A8F), MB2(0xE9CB), MB2(0x8956), - 0x0000, 0x0000, MB2(0xE9E2), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9C40 */ - 0x0000, 0x0000, MB2(0xE9E1), MB2(0xE9DF), - MB2(0x924C), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9690), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x97D8), - 0x0000, 0x0000, MB2(0xE9E3), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xE9E4), 0x0000, 0x0000, 0x0000, /* 9C60 */ - 0x0000, 0x0000, 0x0000, MB2(0xE9E5), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xE9E6), 0x0000, - MB2(0xE9E7), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9C80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9CA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9CC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9CE0 */ - 0x0000, MB2(0x92B9), 0x0000, MB2(0xE9E8), - 0x0000, MB2(0x94B5), 0x0000, MB2(0xE9ED), - MB2(0xE9E9), 0x0000, 0x0000, 0x0000, - MB2(0xE9EA), 0x0000, 0x0000, MB2(0x9650), - MB2(0x96C2), 0x0000, MB2(0x93CE), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xE9EE), /* 9D00 */ - 0x0000, 0x0000, MB2(0xE9EF), MB2(0x93BC), - MB2(0xE9EC), MB2(0xE9EB), 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x89A8), 0x0000, - 0x0000, 0x0000, MB2(0xE9F7), 0x0000, - 0x0000, MB2(0xE9F6), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8995), - 0x0000, 0x0000, 0x0000, MB2(0xE9F4), - 0x0000, 0x0000, 0x0000, MB2(0xE9F3), /* 9D20 */ - 0x0000, 0x0000, MB2(0xE9F1), 0x0000, - MB2(0x8A9B), 0x0000, MB2(0xE9F0), MB2(0x8EB0), - MB2(0x89A7), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8D83), - 0x0000, 0x0000, MB2(0xE9FA), MB2(0xE9F9), - 0x0000, MB2(0xE9F8), 0x0000, 0x0000, /* 9D40 */ - MB2(0xE9F5), 0x0000, MB2(0xE9FB), 0x0000, - MB2(0xE9FC), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xEA44), MB2(0xEA43), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xEA45), 0x0000, 0x0000, - MB2(0x894C), MB2(0xEA40), MB2(0xEA41), 0x0000, - MB2(0x8D94), MB2(0x96B7), 0x0000, 0x0000, /* 9D60 */ - MB2(0xEA42), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xFC48), - MB2(0x9651), 0x0000, 0x0000, MB2(0xEA4A), - MB2(0xFC47), 0x0000, MB2(0xEA46), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xEA4B), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9D80 */ - 0x0000, 0x0000, 0x0000, MB2(0xEA48), - 0x0000, MB2(0xEA47), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8C7B), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xEA4C), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9DA0 */ - MB2(0xEA4D), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xEA4E), 0x0000, MB2(0xEA49), - 0x0000, 0x0000, 0x0000, MB2(0xE9F2), - 0x0000, 0x0000, MB2(0xEA4F), 0x0000, - MB2(0x92DF), 0x0000, 0x0000, 0x0000, - MB2(0xEA53), 0x0000, MB2(0xEA54), MB2(0xEA52), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xEA51), MB2(0xEA57), 0x0000, /* 9DC0 */ - MB2(0xEA50), 0x0000, MB2(0xEA55), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xEA56), - 0x0000, 0x0000, 0x0000, MB2(0xEA59), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xEA58), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9DE0 */ - 0x0000, 0x0000, MB2(0xEA5B), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xEA5C), 0x0000, MB2(0xEA5D), - 0x0000, 0x0000, MB2(0x9868), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xEA5A), MB2(0x91E9), MB2(0x8DEB), 0x0000, - 0x0000, MB2(0xEA5E), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9E00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xFC4A), MB2(0xEA5F), MB2(0xEA60), - 0x0000, 0x0000, MB2(0xEA61), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9E20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9E40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9E60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xEA62), 0x0000, 0x0000, - MB2(0x8CB2), MB2(0xEA63), 0x0000, 0x0000, - 0x0000, MB2(0xEA64), 0x0000, MB2(0x8EAD), - 0x0000, MB2(0xEA65), 0x0000, 0x0000, /* 9E80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xEA66), 0x0000, 0x0000, MB2(0xEA67), - MB2(0xEA68), 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xEA6B), MB2(0xEA69), MB2(0x985B), - 0x0000, MB2(0xEA6A), 0x0000, MB2(0x97ED), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xEA6C), 0x0000, MB2(0x97D9), - 0x0000, 0x0000, 0x0000, 0x0000, /* 9EA0 */ - 0x0000, MB2(0xEA6D), MB2(0x949E), 0x0000, - 0x0000, MB2(0xEA6E), MB2(0xEA70), 0x0000, - 0x0000, MB2(0xEA71), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xEA6F), MB2(0x8D8D), MB2(0x96CB), MB2(0x9683), - MB2(0x9BF5), 0x0000, MB2(0x9F80), MB2(0x969B), - 0x0000, 0x0000, 0x0000, 0x0000, /* 9EC0 */ - MB2(0x89A9), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xEA73), MB2(0x8B6F), MB2(0xEA74), MB2(0xEA75), - MB2(0xEA76), MB2(0xFC4B), MB2(0x8D95), 0x0000, - MB2(0xEA77), 0x0000, 0x0000, 0x0000, - MB2(0xE0D2), MB2(0x96D9), 0x0000, MB2(0x91E1), - MB2(0xEA78), MB2(0xEA7A), MB2(0xEA79), 0x0000, - MB2(0xEA7B), 0x0000, 0x0000, 0x0000, /* 9EE0 */ - 0x0000, MB2(0xEA7C), 0x0000, 0x0000, - MB2(0xEA7D), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xEA7E), - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xEA80), 0x0000, MB2(0xEA81), MB2(0xEA82), - 0x0000, MB2(0xEA83), 0x0000, MB2(0xEA84), - MB2(0xEA85), MB2(0xEA86), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9F00 */ - 0x0000, 0x0000, 0x0000, MB2(0xEA87), - MB2(0xEA88), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0x9343), 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x8CDB), - 0x0000, MB2(0xEA8A), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x916C), MB2(0xEA8B), 0x0000, 0x0000, /* 9F20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xEA8C), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0x9540), - 0x0000, 0x0000, MB2(0xEA8D), 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9F40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xEA8E), MB2(0xE256), - 0x0000, 0x0000, MB2(0xE6D8), MB2(0xE8EB), - 0x0000, 0x0000, MB2(0xEA8F), 0x0000, - MB2(0xEA90), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, MB2(0xEA92), - MB2(0xEA93), MB2(0xEA94), MB2(0x97EE), MB2(0xEA91), /* 9F60 */ - 0x0000, 0x0000, MB2(0xEA95), MB2(0xEA96), - 0x0000, 0x0000, MB2(0xEA98), 0x0000, - MB2(0xEA97), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xEA9A), 0x0000, - 0x0000, 0x0000, MB2(0xEA9B), MB2(0xEA99), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9F80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x97B4), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xEA9C), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xEA9D), MB2(0xE273), 0x0000, 0x0000, - MB2(0xEA9E), 0x0000, 0x0000, 0x0000, /* 9FA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9FC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* 9FE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A0A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A0C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A0E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A1A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A1C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A1E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A2A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A2C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A2E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A3A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A3C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A3E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A4A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A4C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A4E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A5A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A5C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A5E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A6A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A6C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A6E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A7A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A7C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A7E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A8A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A8C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A8E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A9A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A9C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* A9E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AA00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AA20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AA40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AA60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AA80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AAA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AAC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AAE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AB00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AB20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AB40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AB60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AB80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ABA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ABC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ABE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AC00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AC20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AC40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AC60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AC80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ACA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ACC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ACE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AD00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AD20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AD40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AD60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AD80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ADA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ADC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ADE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AE00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AE20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AE40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AE60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AE80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AEA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AEC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AEE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AF00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AF20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AF40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AF60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AF80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AFA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AFC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* AFE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B0A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B0C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B0E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B1A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B1C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B1E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B2A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B2C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B2E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B3A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B3C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B3E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B4A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B4C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B4E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B5A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B5C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B5E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B6A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B6C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B6E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B7A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B7C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B7E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B8A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B8C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B8E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B9A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B9C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* B9E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BA00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BA20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BA40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BA60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BA80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BAA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BAC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BAE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BB00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BB20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BB40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BB60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BB80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BBA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BBC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BBE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BC00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BC20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BC40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BC60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BC80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BCA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BCC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BCE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BD00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BD20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BD40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BD60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BD80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BDA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BDC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BDE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BE00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BE20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BE40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BE60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BE80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BEA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BEC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BEE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BF00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BF20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BF40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BF60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BF80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BFA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BFC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* BFE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C0A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C0C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C0E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C1A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C1C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C1E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C2A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C2C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C2E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C3A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C3C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C3E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C4A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C4C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C4E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C5A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C5C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C5E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C6A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C6C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C6E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C7A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C7C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C7E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C8A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C8C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C8E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C9A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C9C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* C9E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CA00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CA20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CA40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CA60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CA80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CAA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CAC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CAE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CB00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CB20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CB40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CB60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CB80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CBA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CBC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CBE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CC00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CC20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CC40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CC60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CC80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CCA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CCC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CCE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CD00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CD20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CD40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CD60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CD80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CDA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CDC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CDE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CE00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CE20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CE40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CE60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CE80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CEA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CEC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CEE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CF00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CF20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CF40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CF60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CF80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CFA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CFC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* CFE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D0A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D0C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D0E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D1A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D1C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D1E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D2A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D2C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D2E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D3A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D3C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D3E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D4A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D4C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D4E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D5A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D5C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D5E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D6A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D6C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D6E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D7A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D7C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D7E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D8A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D8C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D8E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D9A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D9C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* D9E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DA00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DA20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DA40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DA60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DA80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DAA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DAC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DAE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DB00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DB20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DB40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DB60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DB80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DBA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DBC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DBE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DC00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DC20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DC40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DC60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DC80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DCA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DCC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DCE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DD00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DD20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DD40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DD60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DD80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DDA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DDC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DDE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DE00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DE20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DE40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DE60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DE80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DEA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DEC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DEE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DF00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DF20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DF40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DF60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DF80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DFA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DFC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* DFE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xF040), MB2(0xF041), MB2(0xF042), MB2(0xF043), /* E000 */ - MB2(0xF044), MB2(0xF045), MB2(0xF046), MB2(0xF047), - MB2(0xF048), MB2(0xF049), MB2(0xF04A), MB2(0xF04B), - MB2(0xF04C), MB2(0xF04D), MB2(0xF04E), MB2(0xF04F), - MB2(0xF050), MB2(0xF051), MB2(0xF052), MB2(0xF053), - MB2(0xF054), MB2(0xF055), MB2(0xF056), MB2(0xF057), - MB2(0xF058), MB2(0xF059), MB2(0xF05A), MB2(0xF05B), - MB2(0xF05C), MB2(0xF05D), MB2(0xF05E), MB2(0xF05F), - MB2(0xF060), MB2(0xF061), MB2(0xF062), MB2(0xF063), /* E020 */ - MB2(0xF064), MB2(0xF065), MB2(0xF066), MB2(0xF067), - MB2(0xF068), MB2(0xF069), MB2(0xF06A), MB2(0xF06B), - MB2(0xF06C), MB2(0xF06D), MB2(0xF06E), MB2(0xF06F), - MB2(0xF070), MB2(0xF071), MB2(0xF072), MB2(0xF073), - MB2(0xF074), MB2(0xF075), MB2(0xF076), MB2(0xF077), - MB2(0xF078), MB2(0xF079), MB2(0xF07A), MB2(0xF07B), - MB2(0xF07C), MB2(0xF07D), MB2(0xF07E), MB2(0xF080), - MB2(0xF081), MB2(0xF082), MB2(0xF083), MB2(0xF084), /* E040 */ - MB2(0xF085), MB2(0xF086), MB2(0xF087), MB2(0xF088), - MB2(0xF089), MB2(0xF08A), MB2(0xF08B), MB2(0xF08C), - MB2(0xF08D), MB2(0xF08E), MB2(0xF08F), MB2(0xF090), - MB2(0xF091), MB2(0xF092), MB2(0xF093), MB2(0xF094), - MB2(0xF095), MB2(0xF096), MB2(0xF097), MB2(0xF098), - MB2(0xF099), MB2(0xF09A), MB2(0xF09B), MB2(0xF09C), - MB2(0xF09D), MB2(0xF09E), MB2(0xF09F), MB2(0xF0A0), - MB2(0xF0A1), MB2(0xF0A2), MB2(0xF0A3), MB2(0xF0A4), /* E060 */ - MB2(0xF0A5), MB2(0xF0A6), MB2(0xF0A7), MB2(0xF0A8), - MB2(0xF0A9), MB2(0xF0AA), MB2(0xF0AB), MB2(0xF0AC), - MB2(0xF0AD), MB2(0xF0AE), MB2(0xF0AF), MB2(0xF0B0), - MB2(0xF0B1), MB2(0xF0B2), MB2(0xF0B3), MB2(0xF0B4), - MB2(0xF0B5), MB2(0xF0B6), MB2(0xF0B7), MB2(0xF0B8), - MB2(0xF0B9), MB2(0xF0BA), MB2(0xF0BB), MB2(0xF0BC), - MB2(0xF0BD), MB2(0xF0BE), MB2(0xF0BF), MB2(0xF0C0), - MB2(0xF0C1), MB2(0xF0C2), MB2(0xF0C3), MB2(0xF0C4), /* E080 */ - MB2(0xF0C5), MB2(0xF0C6), MB2(0xF0C7), MB2(0xF0C8), - MB2(0xF0C9), MB2(0xF0CA), MB2(0xF0CB), MB2(0xF0CC), - MB2(0xF0CD), MB2(0xF0CE), MB2(0xF0CF), MB2(0xF0D0), - MB2(0xF0D1), MB2(0xF0D2), MB2(0xF0D3), MB2(0xF0D4), - MB2(0xF0D5), MB2(0xF0D6), MB2(0xF0D7), MB2(0xF0D8), - MB2(0xF0D9), MB2(0xF0DA), MB2(0xF0DB), MB2(0xF0DC), - MB2(0xF0DD), MB2(0xF0DE), MB2(0xF0DF), MB2(0xF0E0), - MB2(0xF0E1), MB2(0xF0E2), MB2(0xF0E3), MB2(0xF0E4), /* E0A0 */ - MB2(0xF0E5), MB2(0xF0E6), MB2(0xF0E7), MB2(0xF0E8), - MB2(0xF0E9), MB2(0xF0EA), MB2(0xF0EB), MB2(0xF0EC), - MB2(0xF0ED), MB2(0xF0EE), MB2(0xF0EF), MB2(0xF0F0), - MB2(0xF0F1), MB2(0xF0F2), MB2(0xF0F3), MB2(0xF0F4), - MB2(0xF0F5), MB2(0xF0F6), MB2(0xF0F7), MB2(0xF0F8), - MB2(0xF0F9), MB2(0xF0FA), MB2(0xF0FB), MB2(0xF0FC), - MB2(0xF140), MB2(0xF141), MB2(0xF142), MB2(0xF143), - MB2(0xF144), MB2(0xF145), MB2(0xF146), MB2(0xF147), /* E0C0 */ - MB2(0xF148), MB2(0xF149), MB2(0xF14A), MB2(0xF14B), - MB2(0xF14C), MB2(0xF14D), MB2(0xF14E), MB2(0xF14F), - MB2(0xF150), MB2(0xF151), MB2(0xF152), MB2(0xF153), - MB2(0xF154), MB2(0xF155), MB2(0xF156), MB2(0xF157), - MB2(0xF158), MB2(0xF159), MB2(0xF15A), MB2(0xF15B), - MB2(0xF15C), MB2(0xF15D), MB2(0xF15E), MB2(0xF15F), - MB2(0xF160), MB2(0xF161), MB2(0xF162), MB2(0xF163), - MB2(0xF164), MB2(0xF165), MB2(0xF166), MB2(0xF167), /* E0E0 */ - MB2(0xF168), MB2(0xF169), MB2(0xF16A), MB2(0xF16B), - MB2(0xF16C), MB2(0xF16D), MB2(0xF16E), MB2(0xF16F), - MB2(0xF170), MB2(0xF171), MB2(0xF172), MB2(0xF173), - MB2(0xF174), MB2(0xF175), MB2(0xF176), MB2(0xF177), - MB2(0xF178), MB2(0xF179), MB2(0xF17A), MB2(0xF17B), - MB2(0xF17C), MB2(0xF17D), MB2(0xF17E), MB2(0xF180), - MB2(0xF181), MB2(0xF182), MB2(0xF183), MB2(0xF184), - MB2(0xF185), MB2(0xF186), MB2(0xF187), MB2(0xF188), /* E100 */ - MB2(0xF189), MB2(0xF18A), MB2(0xF18B), MB2(0xF18C), - MB2(0xF18D), MB2(0xF18E), MB2(0xF18F), MB2(0xF190), - MB2(0xF191), MB2(0xF192), MB2(0xF193), MB2(0xF194), - MB2(0xF195), MB2(0xF196), MB2(0xF197), MB2(0xF198), - MB2(0xF199), MB2(0xF19A), MB2(0xF19B), MB2(0xF19C), - MB2(0xF19D), MB2(0xF19E), MB2(0xF19F), MB2(0xF1A0), - MB2(0xF1A1), MB2(0xF1A2), MB2(0xF1A3), MB2(0xF1A4), - MB2(0xF1A5), MB2(0xF1A6), MB2(0xF1A7), MB2(0xF1A8), /* E120 */ - MB2(0xF1A9), MB2(0xF1AA), MB2(0xF1AB), MB2(0xF1AC), - MB2(0xF1AD), MB2(0xF1AE), MB2(0xF1AF), MB2(0xF1B0), - MB2(0xF1B1), MB2(0xF1B2), MB2(0xF1B3), MB2(0xF1B4), - MB2(0xF1B5), MB2(0xF1B6), MB2(0xF1B7), MB2(0xF1B8), - MB2(0xF1B9), MB2(0xF1BA), MB2(0xF1BB), MB2(0xF1BC), - MB2(0xF1BD), MB2(0xF1BE), MB2(0xF1BF), MB2(0xF1C0), - MB2(0xF1C1), MB2(0xF1C2), MB2(0xF1C3), MB2(0xF1C4), - MB2(0xF1C5), MB2(0xF1C6), MB2(0xF1C7), MB2(0xF1C8), /* E140 */ - MB2(0xF1C9), MB2(0xF1CA), MB2(0xF1CB), MB2(0xF1CC), - MB2(0xF1CD), MB2(0xF1CE), MB2(0xF1CF), MB2(0xF1D0), - MB2(0xF1D1), MB2(0xF1D2), MB2(0xF1D3), MB2(0xF1D4), - MB2(0xF1D5), MB2(0xF1D6), MB2(0xF1D7), MB2(0xF1D8), - MB2(0xF1D9), MB2(0xF1DA), MB2(0xF1DB), MB2(0xF1DC), - MB2(0xF1DD), MB2(0xF1DE), MB2(0xF1DF), MB2(0xF1E0), - MB2(0xF1E1), MB2(0xF1E2), MB2(0xF1E3), MB2(0xF1E4), - MB2(0xF1E5), MB2(0xF1E6), MB2(0xF1E7), MB2(0xF1E8), /* E160 */ - MB2(0xF1E9), MB2(0xF1EA), MB2(0xF1EB), MB2(0xF1EC), - MB2(0xF1ED), MB2(0xF1EE), MB2(0xF1EF), MB2(0xF1F0), - MB2(0xF1F1), MB2(0xF1F2), MB2(0xF1F3), MB2(0xF1F4), - MB2(0xF1F5), MB2(0xF1F6), MB2(0xF1F7), MB2(0xF1F8), - MB2(0xF1F9), MB2(0xF1FA), MB2(0xF1FB), MB2(0xF1FC), - MB2(0xF240), MB2(0xF241), MB2(0xF242), MB2(0xF243), - MB2(0xF244), MB2(0xF245), MB2(0xF246), MB2(0xF247), - MB2(0xF248), MB2(0xF249), MB2(0xF24A), MB2(0xF24B), /* E180 */ - MB2(0xF24C), MB2(0xF24D), MB2(0xF24E), MB2(0xF24F), - MB2(0xF250), MB2(0xF251), MB2(0xF252), MB2(0xF253), - MB2(0xF254), MB2(0xF255), MB2(0xF256), MB2(0xF257), - MB2(0xF258), MB2(0xF259), MB2(0xF25A), MB2(0xF25B), - MB2(0xF25C), MB2(0xF25D), MB2(0xF25E), MB2(0xF25F), - MB2(0xF260), MB2(0xF261), MB2(0xF262), MB2(0xF263), - MB2(0xF264), MB2(0xF265), MB2(0xF266), MB2(0xF267), - MB2(0xF268), MB2(0xF269), MB2(0xF26A), MB2(0xF26B), /* E1A0 */ - MB2(0xF26C), MB2(0xF26D), MB2(0xF26E), MB2(0xF26F), - MB2(0xF270), MB2(0xF271), MB2(0xF272), MB2(0xF273), - MB2(0xF274), MB2(0xF275), MB2(0xF276), MB2(0xF277), - MB2(0xF278), MB2(0xF279), MB2(0xF27A), MB2(0xF27B), - MB2(0xF27C), MB2(0xF27D), MB2(0xF27E), MB2(0xF280), - MB2(0xF281), MB2(0xF282), MB2(0xF283), MB2(0xF284), - MB2(0xF285), MB2(0xF286), MB2(0xF287), MB2(0xF288), - MB2(0xF289), MB2(0xF28A), MB2(0xF28B), MB2(0xF28C), /* E1C0 */ - MB2(0xF28D), MB2(0xF28E), MB2(0xF28F), MB2(0xF290), - MB2(0xF291), MB2(0xF292), MB2(0xF293), MB2(0xF294), - MB2(0xF295), MB2(0xF296), MB2(0xF297), MB2(0xF298), - MB2(0xF299), MB2(0xF29A), MB2(0xF29B), MB2(0xF29C), - MB2(0xF29D), MB2(0xF29E), MB2(0xF29F), MB2(0xF2A0), - MB2(0xF2A1), MB2(0xF2A2), MB2(0xF2A3), MB2(0xF2A4), - MB2(0xF2A5), MB2(0xF2A6), MB2(0xF2A7), MB2(0xF2A8), - MB2(0xF2A9), MB2(0xF2AA), MB2(0xF2AB), MB2(0xF2AC), /* E1E0 */ - MB2(0xF2AD), MB2(0xF2AE), MB2(0xF2AF), MB2(0xF2B0), - MB2(0xF2B1), MB2(0xF2B2), MB2(0xF2B3), MB2(0xF2B4), - MB2(0xF2B5), MB2(0xF2B6), MB2(0xF2B7), MB2(0xF2B8), - MB2(0xF2B9), MB2(0xF2BA), MB2(0xF2BB), MB2(0xF2BC), - MB2(0xF2BD), MB2(0xF2BE), MB2(0xF2BF), MB2(0xF2C0), - MB2(0xF2C1), MB2(0xF2C2), MB2(0xF2C3), MB2(0xF2C4), - MB2(0xF2C5), MB2(0xF2C6), MB2(0xF2C7), MB2(0xF2C8), - MB2(0xF2C9), MB2(0xF2CA), MB2(0xF2CB), MB2(0xF2CC), /* E200 */ - MB2(0xF2CD), MB2(0xF2CE), MB2(0xF2CF), MB2(0xF2D0), - MB2(0xF2D1), MB2(0xF2D2), MB2(0xF2D3), MB2(0xF2D4), - MB2(0xF2D5), MB2(0xF2D6), MB2(0xF2D7), MB2(0xF2D8), - MB2(0xF2D9), MB2(0xF2DA), MB2(0xF2DB), MB2(0xF2DC), - MB2(0xF2DD), MB2(0xF2DE), MB2(0xF2DF), MB2(0xF2E0), - MB2(0xF2E1), MB2(0xF2E2), MB2(0xF2E3), MB2(0xF2E4), - MB2(0xF2E5), MB2(0xF2E6), MB2(0xF2E7), MB2(0xF2E8), - MB2(0xF2E9), MB2(0xF2EA), MB2(0xF2EB), MB2(0xF2EC), /* E220 */ - MB2(0xF2ED), MB2(0xF2EE), MB2(0xF2EF), MB2(0xF2F0), - MB2(0xF2F1), MB2(0xF2F2), MB2(0xF2F3), MB2(0xF2F4), - MB2(0xF2F5), MB2(0xF2F6), MB2(0xF2F7), MB2(0xF2F8), - MB2(0xF2F9), MB2(0xF2FA), MB2(0xF2FB), MB2(0xF2FC), - MB2(0xF340), MB2(0xF341), MB2(0xF342), MB2(0xF343), - MB2(0xF344), MB2(0xF345), MB2(0xF346), MB2(0xF347), - MB2(0xF348), MB2(0xF349), MB2(0xF34A), MB2(0xF34B), - MB2(0xF34C), MB2(0xF34D), MB2(0xF34E), MB2(0xF34F), /* E240 */ - MB2(0xF350), MB2(0xF351), MB2(0xF352), MB2(0xF353), - MB2(0xF354), MB2(0xF355), MB2(0xF356), MB2(0xF357), - MB2(0xF358), MB2(0xF359), MB2(0xF35A), MB2(0xF35B), - MB2(0xF35C), MB2(0xF35D), MB2(0xF35E), MB2(0xF35F), - MB2(0xF360), MB2(0xF361), MB2(0xF362), MB2(0xF363), - MB2(0xF364), MB2(0xF365), MB2(0xF366), MB2(0xF367), - MB2(0xF368), MB2(0xF369), MB2(0xF36A), MB2(0xF36B), - MB2(0xF36C), MB2(0xF36D), MB2(0xF36E), MB2(0xF36F), /* E260 */ - MB2(0xF370), MB2(0xF371), MB2(0xF372), MB2(0xF373), - MB2(0xF374), MB2(0xF375), MB2(0xF376), MB2(0xF377), - MB2(0xF378), MB2(0xF379), MB2(0xF37A), MB2(0xF37B), - MB2(0xF37C), MB2(0xF37D), MB2(0xF37E), MB2(0xF380), - MB2(0xF381), MB2(0xF382), MB2(0xF383), MB2(0xF384), - MB2(0xF385), MB2(0xF386), MB2(0xF387), MB2(0xF388), - MB2(0xF389), MB2(0xF38A), MB2(0xF38B), MB2(0xF38C), - MB2(0xF38D), MB2(0xF38E), MB2(0xF38F), MB2(0xF390), /* E280 */ - MB2(0xF391), MB2(0xF392), MB2(0xF393), MB2(0xF394), - MB2(0xF395), MB2(0xF396), MB2(0xF397), MB2(0xF398), - MB2(0xF399), MB2(0xF39A), MB2(0xF39B), MB2(0xF39C), - MB2(0xF39D), MB2(0xF39E), MB2(0xF39F), MB2(0xF3A0), - MB2(0xF3A1), MB2(0xF3A2), MB2(0xF3A3), MB2(0xF3A4), - MB2(0xF3A5), MB2(0xF3A6), MB2(0xF3A7), MB2(0xF3A8), - MB2(0xF3A9), MB2(0xF3AA), MB2(0xF3AB), MB2(0xF3AC), - MB2(0xF3AD), MB2(0xF3AE), MB2(0xF3AF), MB2(0xF3B0), /* E2A0 */ - MB2(0xF3B1), MB2(0xF3B2), MB2(0xF3B3), MB2(0xF3B4), - MB2(0xF3B5), MB2(0xF3B6), MB2(0xF3B7), MB2(0xF3B8), - MB2(0xF3B9), MB2(0xF3BA), MB2(0xF3BB), MB2(0xF3BC), - MB2(0xF3BD), MB2(0xF3BE), MB2(0xF3BF), MB2(0xF3C0), - MB2(0xF3C1), MB2(0xF3C2), MB2(0xF3C3), MB2(0xF3C4), - MB2(0xF3C5), MB2(0xF3C6), MB2(0xF3C7), MB2(0xF3C8), - MB2(0xF3C9), MB2(0xF3CA), MB2(0xF3CB), MB2(0xF3CC), - MB2(0xF3CD), MB2(0xF3CE), MB2(0xF3CF), MB2(0xF3D0), /* E2C0 */ - MB2(0xF3D1), MB2(0xF3D2), MB2(0xF3D3), MB2(0xF3D4), - MB2(0xF3D5), MB2(0xF3D6), MB2(0xF3D7), MB2(0xF3D8), - MB2(0xF3D9), MB2(0xF3DA), MB2(0xF3DB), MB2(0xF3DC), - MB2(0xF3DD), MB2(0xF3DE), MB2(0xF3DF), MB2(0xF3E0), - MB2(0xF3E1), MB2(0xF3E2), MB2(0xF3E3), MB2(0xF3E4), - MB2(0xF3E5), MB2(0xF3E6), MB2(0xF3E7), MB2(0xF3E8), - MB2(0xF3E9), MB2(0xF3EA), MB2(0xF3EB), MB2(0xF3EC), - MB2(0xF3ED), MB2(0xF3EE), MB2(0xF3EF), MB2(0xF3F0), /* E2E0 */ - MB2(0xF3F1), MB2(0xF3F2), MB2(0xF3F3), MB2(0xF3F4), - MB2(0xF3F5), MB2(0xF3F6), MB2(0xF3F7), MB2(0xF3F8), - MB2(0xF3F9), MB2(0xF3FA), MB2(0xF3FB), MB2(0xF3FC), - MB2(0xF440), MB2(0xF441), MB2(0xF442), MB2(0xF443), - MB2(0xF444), MB2(0xF445), MB2(0xF446), MB2(0xF447), - MB2(0xF448), MB2(0xF449), MB2(0xF44A), MB2(0xF44B), - MB2(0xF44C), MB2(0xF44D), MB2(0xF44E), MB2(0xF44F), - MB2(0xF450), MB2(0xF451), MB2(0xF452), MB2(0xF453), /* E300 */ - MB2(0xF454), MB2(0xF455), MB2(0xF456), MB2(0xF457), - MB2(0xF458), MB2(0xF459), MB2(0xF45A), MB2(0xF45B), - MB2(0xF45C), MB2(0xF45D), MB2(0xF45E), MB2(0xF45F), - MB2(0xF460), MB2(0xF461), MB2(0xF462), MB2(0xF463), - MB2(0xF464), MB2(0xF465), MB2(0xF466), MB2(0xF467), - MB2(0xF468), MB2(0xF469), MB2(0xF46A), MB2(0xF46B), - MB2(0xF46C), MB2(0xF46D), MB2(0xF46E), MB2(0xF46F), - MB2(0xF470), MB2(0xF471), MB2(0xF472), MB2(0xF473), /* E320 */ - MB2(0xF474), MB2(0xF475), MB2(0xF476), MB2(0xF477), - MB2(0xF478), MB2(0xF479), MB2(0xF47A), MB2(0xF47B), - MB2(0xF47C), MB2(0xF47D), MB2(0xF47E), MB2(0xF480), - MB2(0xF481), MB2(0xF482), MB2(0xF483), MB2(0xF484), - MB2(0xF485), MB2(0xF486), MB2(0xF487), MB2(0xF488), - MB2(0xF489), MB2(0xF48A), MB2(0xF48B), MB2(0xF48C), - MB2(0xF48D), MB2(0xF48E), MB2(0xF48F), MB2(0xF490), - MB2(0xF491), MB2(0xF492), MB2(0xF493), MB2(0xF494), /* E340 */ - MB2(0xF495), MB2(0xF496), MB2(0xF497), MB2(0xF498), - MB2(0xF499), MB2(0xF49A), MB2(0xF49B), MB2(0xF49C), - MB2(0xF49D), MB2(0xF49E), MB2(0xF49F), MB2(0xF4A0), - MB2(0xF4A1), MB2(0xF4A2), MB2(0xF4A3), MB2(0xF4A4), - MB2(0xF4A5), MB2(0xF4A6), MB2(0xF4A7), MB2(0xF4A8), - MB2(0xF4A9), MB2(0xF4AA), MB2(0xF4AB), MB2(0xF4AC), - MB2(0xF4AD), MB2(0xF4AE), MB2(0xF4AF), MB2(0xF4B0), - MB2(0xF4B1), MB2(0xF4B2), MB2(0xF4B3), MB2(0xF4B4), /* E360 */ - MB2(0xF4B5), MB2(0xF4B6), MB2(0xF4B7), MB2(0xF4B8), - MB2(0xF4B9), MB2(0xF4BA), MB2(0xF4BB), MB2(0xF4BC), - MB2(0xF4BD), MB2(0xF4BE), MB2(0xF4BF), MB2(0xF4C0), - MB2(0xF4C1), MB2(0xF4C2), MB2(0xF4C3), MB2(0xF4C4), - MB2(0xF4C5), MB2(0xF4C6), MB2(0xF4C7), MB2(0xF4C8), - MB2(0xF4C9), MB2(0xF4CA), MB2(0xF4CB), MB2(0xF4CC), - MB2(0xF4CD), MB2(0xF4CE), MB2(0xF4CF), MB2(0xF4D0), - MB2(0xF4D1), MB2(0xF4D2), MB2(0xF4D3), MB2(0xF4D4), /* E380 */ - MB2(0xF4D5), MB2(0xF4D6), MB2(0xF4D7), MB2(0xF4D8), - MB2(0xF4D9), MB2(0xF4DA), MB2(0xF4DB), MB2(0xF4DC), - MB2(0xF4DD), MB2(0xF4DE), MB2(0xF4DF), MB2(0xF4E0), - MB2(0xF4E1), MB2(0xF4E2), MB2(0xF4E3), MB2(0xF4E4), - MB2(0xF4E5), MB2(0xF4E6), MB2(0xF4E7), MB2(0xF4E8), - MB2(0xF4E9), MB2(0xF4EA), MB2(0xF4EB), MB2(0xF4EC), - MB2(0xF4ED), MB2(0xF4EE), MB2(0xF4EF), MB2(0xF4F0), - MB2(0xF4F1), MB2(0xF4F2), MB2(0xF4F3), MB2(0xF4F4), /* E3A0 */ - MB2(0xF4F5), MB2(0xF4F6), MB2(0xF4F7), MB2(0xF4F8), - MB2(0xF4F9), MB2(0xF4FA), MB2(0xF4FB), MB2(0xF4FC), - MB2(0xF540), MB2(0xF541), MB2(0xF542), MB2(0xF543), - MB2(0xF544), MB2(0xF545), MB2(0xF546), MB2(0xF547), - MB2(0xF548), MB2(0xF549), MB2(0xF54A), MB2(0xF54B), - MB2(0xF54C), MB2(0xF54D), MB2(0xF54E), MB2(0xF54F), - MB2(0xF550), MB2(0xF551), MB2(0xF552), MB2(0xF553), - MB2(0xF554), MB2(0xF555), MB2(0xF556), MB2(0xF557), /* E3C0 */ - MB2(0xF558), MB2(0xF559), MB2(0xF55A), MB2(0xF55B), - MB2(0xF55C), MB2(0xF55D), MB2(0xF55E), MB2(0xF55F), - MB2(0xF560), MB2(0xF561), MB2(0xF562), MB2(0xF563), - MB2(0xF564), MB2(0xF565), MB2(0xF566), MB2(0xF567), - MB2(0xF568), MB2(0xF569), MB2(0xF56A), MB2(0xF56B), - MB2(0xF56C), MB2(0xF56D), MB2(0xF56E), MB2(0xF56F), - MB2(0xF570), MB2(0xF571), MB2(0xF572), MB2(0xF573), - MB2(0xF574), MB2(0xF575), MB2(0xF576), MB2(0xF577), /* E3E0 */ - MB2(0xF578), MB2(0xF579), MB2(0xF57A), MB2(0xF57B), - MB2(0xF57C), MB2(0xF57D), MB2(0xF57E), MB2(0xF580), - MB2(0xF581), MB2(0xF582), MB2(0xF583), MB2(0xF584), - MB2(0xF585), MB2(0xF586), MB2(0xF587), MB2(0xF588), - MB2(0xF589), MB2(0xF58A), MB2(0xF58B), MB2(0xF58C), - MB2(0xF58D), MB2(0xF58E), MB2(0xF58F), MB2(0xF590), - MB2(0xF591), MB2(0xF592), MB2(0xF593), MB2(0xF594), - MB2(0xF595), MB2(0xF596), MB2(0xF597), MB2(0xF598), /* E400 */ - MB2(0xF599), MB2(0xF59A), MB2(0xF59B), MB2(0xF59C), - MB2(0xF59D), MB2(0xF59E), MB2(0xF59F), MB2(0xF5A0), - MB2(0xF5A1), MB2(0xF5A2), MB2(0xF5A3), MB2(0xF5A4), - MB2(0xF5A5), MB2(0xF5A6), MB2(0xF5A7), MB2(0xF5A8), - MB2(0xF5A9), MB2(0xF5AA), MB2(0xF5AB), MB2(0xF5AC), - MB2(0xF5AD), MB2(0xF5AE), MB2(0xF5AF), MB2(0xF5B0), - MB2(0xF5B1), MB2(0xF5B2), MB2(0xF5B3), MB2(0xF5B4), - MB2(0xF5B5), MB2(0xF5B6), MB2(0xF5B7), MB2(0xF5B8), /* E420 */ - MB2(0xF5B9), MB2(0xF5BA), MB2(0xF5BB), MB2(0xF5BC), - MB2(0xF5BD), MB2(0xF5BE), MB2(0xF5BF), MB2(0xF5C0), - MB2(0xF5C1), MB2(0xF5C2), MB2(0xF5C3), MB2(0xF5C4), - MB2(0xF5C5), MB2(0xF5C6), MB2(0xF5C7), MB2(0xF5C8), - MB2(0xF5C9), MB2(0xF5CA), MB2(0xF5CB), MB2(0xF5CC), - MB2(0xF5CD), MB2(0xF5CE), MB2(0xF5CF), MB2(0xF5D0), - MB2(0xF5D1), MB2(0xF5D2), MB2(0xF5D3), MB2(0xF5D4), - MB2(0xF5D5), MB2(0xF5D6), MB2(0xF5D7), MB2(0xF5D8), /* E440 */ - MB2(0xF5D9), MB2(0xF5DA), MB2(0xF5DB), MB2(0xF5DC), - MB2(0xF5DD), MB2(0xF5DE), MB2(0xF5DF), MB2(0xF5E0), - MB2(0xF5E1), MB2(0xF5E2), MB2(0xF5E3), MB2(0xF5E4), - MB2(0xF5E5), MB2(0xF5E6), MB2(0xF5E7), MB2(0xF5E8), - MB2(0xF5E9), MB2(0xF5EA), MB2(0xF5EB), MB2(0xF5EC), - MB2(0xF5ED), MB2(0xF5EE), MB2(0xF5EF), MB2(0xF5F0), - MB2(0xF5F1), MB2(0xF5F2), MB2(0xF5F3), MB2(0xF5F4), - MB2(0xF5F5), MB2(0xF5F6), MB2(0xF5F7), MB2(0xF5F8), /* E460 */ - MB2(0xF5F9), MB2(0xF5FA), MB2(0xF5FB), MB2(0xF5FC), - MB2(0xF640), MB2(0xF641), MB2(0xF642), MB2(0xF643), - MB2(0xF644), MB2(0xF645), MB2(0xF646), MB2(0xF647), - MB2(0xF648), MB2(0xF649), MB2(0xF64A), MB2(0xF64B), - MB2(0xF64C), MB2(0xF64D), MB2(0xF64E), MB2(0xF64F), - MB2(0xF650), MB2(0xF651), MB2(0xF652), MB2(0xF653), - MB2(0xF654), MB2(0xF655), MB2(0xF656), MB2(0xF657), - MB2(0xF658), MB2(0xF659), MB2(0xF65A), MB2(0xF65B), /* E480 */ - MB2(0xF65C), MB2(0xF65D), MB2(0xF65E), MB2(0xF65F), - MB2(0xF660), MB2(0xF661), MB2(0xF662), MB2(0xF663), - MB2(0xF664), MB2(0xF665), MB2(0xF666), MB2(0xF667), - MB2(0xF668), MB2(0xF669), MB2(0xF66A), MB2(0xF66B), - MB2(0xF66C), MB2(0xF66D), MB2(0xF66E), MB2(0xF66F), - MB2(0xF670), MB2(0xF671), MB2(0xF672), MB2(0xF673), - MB2(0xF674), MB2(0xF675), MB2(0xF676), MB2(0xF677), - MB2(0xF678), MB2(0xF679), MB2(0xF67A), MB2(0xF67B), /* E4A0 */ - MB2(0xF67C), MB2(0xF67D), MB2(0xF67E), MB2(0xF680), - MB2(0xF681), MB2(0xF682), MB2(0xF683), MB2(0xF684), - MB2(0xF685), MB2(0xF686), MB2(0xF687), MB2(0xF688), - MB2(0xF689), MB2(0xF68A), MB2(0xF68B), MB2(0xF68C), - MB2(0xF68D), MB2(0xF68E), MB2(0xF68F), MB2(0xF690), - MB2(0xF691), MB2(0xF692), MB2(0xF693), MB2(0xF694), - MB2(0xF695), MB2(0xF696), MB2(0xF697), MB2(0xF698), - MB2(0xF699), MB2(0xF69A), MB2(0xF69B), MB2(0xF69C), /* E4C0 */ - MB2(0xF69D), MB2(0xF69E), MB2(0xF69F), MB2(0xF6A0), - MB2(0xF6A1), MB2(0xF6A2), MB2(0xF6A3), MB2(0xF6A4), - MB2(0xF6A5), MB2(0xF6A6), MB2(0xF6A7), MB2(0xF6A8), - MB2(0xF6A9), MB2(0xF6AA), MB2(0xF6AB), MB2(0xF6AC), - MB2(0xF6AD), MB2(0xF6AE), MB2(0xF6AF), MB2(0xF6B0), - MB2(0xF6B1), MB2(0xF6B2), MB2(0xF6B3), MB2(0xF6B4), - MB2(0xF6B5), MB2(0xF6B6), MB2(0xF6B7), MB2(0xF6B8), - MB2(0xF6B9), MB2(0xF6BA), MB2(0xF6BB), MB2(0xF6BC), /* E4E0 */ - MB2(0xF6BD), MB2(0xF6BE), MB2(0xF6BF), MB2(0xF6C0), - MB2(0xF6C1), MB2(0xF6C2), MB2(0xF6C3), MB2(0xF6C4), - MB2(0xF6C5), MB2(0xF6C6), MB2(0xF6C7), MB2(0xF6C8), - MB2(0xF6C9), MB2(0xF6CA), MB2(0xF6CB), MB2(0xF6CC), - MB2(0xF6CD), MB2(0xF6CE), MB2(0xF6CF), MB2(0xF6D0), - MB2(0xF6D1), MB2(0xF6D2), MB2(0xF6D3), MB2(0xF6D4), - MB2(0xF6D5), MB2(0xF6D6), MB2(0xF6D7), MB2(0xF6D8), - MB2(0xF6D9), MB2(0xF6DA), MB2(0xF6DB), MB2(0xF6DC), /* E500 */ - MB2(0xF6DD), MB2(0xF6DE), MB2(0xF6DF), MB2(0xF6E0), - MB2(0xF6E1), MB2(0xF6E2), MB2(0xF6E3), MB2(0xF6E4), - MB2(0xF6E5), MB2(0xF6E6), MB2(0xF6E7), MB2(0xF6E8), - MB2(0xF6E9), MB2(0xF6EA), MB2(0xF6EB), MB2(0xF6EC), - MB2(0xF6ED), MB2(0xF6EE), MB2(0xF6EF), MB2(0xF6F0), - MB2(0xF6F1), MB2(0xF6F2), MB2(0xF6F3), MB2(0xF6F4), - MB2(0xF6F5), MB2(0xF6F6), MB2(0xF6F7), MB2(0xF6F8), - MB2(0xF6F9), MB2(0xF6FA), MB2(0xF6FB), MB2(0xF6FC), /* E520 */ - MB2(0xF740), MB2(0xF741), MB2(0xF742), MB2(0xF743), - MB2(0xF744), MB2(0xF745), MB2(0xF746), MB2(0xF747), - MB2(0xF748), MB2(0xF749), MB2(0xF74A), MB2(0xF74B), - MB2(0xF74C), MB2(0xF74D), MB2(0xF74E), MB2(0xF74F), - MB2(0xF750), MB2(0xF751), MB2(0xF752), MB2(0xF753), - MB2(0xF754), MB2(0xF755), MB2(0xF756), MB2(0xF757), - MB2(0xF758), MB2(0xF759), MB2(0xF75A), MB2(0xF75B), - MB2(0xF75C), MB2(0xF75D), MB2(0xF75E), MB2(0xF75F), /* E540 */ - MB2(0xF760), MB2(0xF761), MB2(0xF762), MB2(0xF763), - MB2(0xF764), MB2(0xF765), MB2(0xF766), MB2(0xF767), - MB2(0xF768), MB2(0xF769), MB2(0xF76A), MB2(0xF76B), - MB2(0xF76C), MB2(0xF76D), MB2(0xF76E), MB2(0xF76F), - MB2(0xF770), MB2(0xF771), MB2(0xF772), MB2(0xF773), - MB2(0xF774), MB2(0xF775), MB2(0xF776), MB2(0xF777), - MB2(0xF778), MB2(0xF779), MB2(0xF77A), MB2(0xF77B), - MB2(0xF77C), MB2(0xF77D), MB2(0xF77E), MB2(0xF780), /* E560 */ - MB2(0xF781), MB2(0xF782), MB2(0xF783), MB2(0xF784), - MB2(0xF785), MB2(0xF786), MB2(0xF787), MB2(0xF788), - MB2(0xF789), MB2(0xF78A), MB2(0xF78B), MB2(0xF78C), - MB2(0xF78D), MB2(0xF78E), MB2(0xF78F), MB2(0xF790), - MB2(0xF791), MB2(0xF792), MB2(0xF793), MB2(0xF794), - MB2(0xF795), MB2(0xF796), MB2(0xF797), MB2(0xF798), - MB2(0xF799), MB2(0xF79A), MB2(0xF79B), MB2(0xF79C), - MB2(0xF79D), MB2(0xF79E), MB2(0xF79F), MB2(0xF7A0), /* E580 */ - MB2(0xF7A1), MB2(0xF7A2), MB2(0xF7A3), MB2(0xF7A4), - MB2(0xF7A5), MB2(0xF7A6), MB2(0xF7A7), MB2(0xF7A8), - MB2(0xF7A9), MB2(0xF7AA), MB2(0xF7AB), MB2(0xF7AC), - MB2(0xF7AD), MB2(0xF7AE), MB2(0xF7AF), MB2(0xF7B0), - MB2(0xF7B1), MB2(0xF7B2), MB2(0xF7B3), MB2(0xF7B4), - MB2(0xF7B5), MB2(0xF7B6), MB2(0xF7B7), MB2(0xF7B8), - MB2(0xF7B9), MB2(0xF7BA), MB2(0xF7BB), MB2(0xF7BC), - MB2(0xF7BD), MB2(0xF7BE), MB2(0xF7BF), MB2(0xF7C0), /* E5A0 */ - MB2(0xF7C1), MB2(0xF7C2), MB2(0xF7C3), MB2(0xF7C4), - MB2(0xF7C5), MB2(0xF7C6), MB2(0xF7C7), MB2(0xF7C8), - MB2(0xF7C9), MB2(0xF7CA), MB2(0xF7CB), MB2(0xF7CC), - MB2(0xF7CD), MB2(0xF7CE), MB2(0xF7CF), MB2(0xF7D0), - MB2(0xF7D1), MB2(0xF7D2), MB2(0xF7D3), MB2(0xF7D4), - MB2(0xF7D5), MB2(0xF7D6), MB2(0xF7D7), MB2(0xF7D8), - MB2(0xF7D9), MB2(0xF7DA), MB2(0xF7DB), MB2(0xF7DC), - MB2(0xF7DD), MB2(0xF7DE), MB2(0xF7DF), MB2(0xF7E0), /* E5C0 */ - MB2(0xF7E1), MB2(0xF7E2), MB2(0xF7E3), MB2(0xF7E4), - MB2(0xF7E5), MB2(0xF7E6), MB2(0xF7E7), MB2(0xF7E8), - MB2(0xF7E9), MB2(0xF7EA), MB2(0xF7EB), MB2(0xF7EC), - MB2(0xF7ED), MB2(0xF7EE), MB2(0xF7EF), MB2(0xF7F0), - MB2(0xF7F1), MB2(0xF7F2), MB2(0xF7F3), MB2(0xF7F4), - MB2(0xF7F5), MB2(0xF7F6), MB2(0xF7F7), MB2(0xF7F8), - MB2(0xF7F9), MB2(0xF7FA), MB2(0xF7FB), MB2(0xF7FC), - MB2(0xF840), MB2(0xF841), MB2(0xF842), MB2(0xF843), /* E5E0 */ - MB2(0xF844), MB2(0xF845), MB2(0xF846), MB2(0xF847), - MB2(0xF848), MB2(0xF849), MB2(0xF84A), MB2(0xF84B), - MB2(0xF84C), MB2(0xF84D), MB2(0xF84E), MB2(0xF84F), - MB2(0xF850), MB2(0xF851), MB2(0xF852), MB2(0xF853), - MB2(0xF854), MB2(0xF855), MB2(0xF856), MB2(0xF857), - MB2(0xF858), MB2(0xF859), MB2(0xF85A), MB2(0xF85B), - MB2(0xF85C), MB2(0xF85D), MB2(0xF85E), MB2(0xF85F), - MB2(0xF860), MB2(0xF861), MB2(0xF862), MB2(0xF863), /* E600 */ - MB2(0xF864), MB2(0xF865), MB2(0xF866), MB2(0xF867), - MB2(0xF868), MB2(0xF869), MB2(0xF86A), MB2(0xF86B), - MB2(0xF86C), MB2(0xF86D), MB2(0xF86E), MB2(0xF86F), - MB2(0xF870), MB2(0xF871), MB2(0xF872), MB2(0xF873), - MB2(0xF874), MB2(0xF875), MB2(0xF876), MB2(0xF877), - MB2(0xF878), MB2(0xF879), MB2(0xF87A), MB2(0xF87B), - MB2(0xF87C), MB2(0xF87D), MB2(0xF87E), MB2(0xF880), - MB2(0xF881), MB2(0xF882), MB2(0xF883), MB2(0xF884), /* E620 */ - MB2(0xF885), MB2(0xF886), MB2(0xF887), MB2(0xF888), - MB2(0xF889), MB2(0xF88A), MB2(0xF88B), MB2(0xF88C), - MB2(0xF88D), MB2(0xF88E), MB2(0xF88F), MB2(0xF890), - MB2(0xF891), MB2(0xF892), MB2(0xF893), MB2(0xF894), - MB2(0xF895), MB2(0xF896), MB2(0xF897), MB2(0xF898), - MB2(0xF899), MB2(0xF89A), MB2(0xF89B), MB2(0xF89C), - MB2(0xF89D), MB2(0xF89E), MB2(0xF89F), MB2(0xF8A0), - MB2(0xF8A1), MB2(0xF8A2), MB2(0xF8A3), MB2(0xF8A4), /* E640 */ - MB2(0xF8A5), MB2(0xF8A6), MB2(0xF8A7), MB2(0xF8A8), - MB2(0xF8A9), MB2(0xF8AA), MB2(0xF8AB), MB2(0xF8AC), - MB2(0xF8AD), MB2(0xF8AE), MB2(0xF8AF), MB2(0xF8B0), - MB2(0xF8B1), MB2(0xF8B2), MB2(0xF8B3), MB2(0xF8B4), - MB2(0xF8B5), MB2(0xF8B6), MB2(0xF8B7), MB2(0xF8B8), - MB2(0xF8B9), MB2(0xF8BA), MB2(0xF8BB), MB2(0xF8BC), - MB2(0xF8BD), MB2(0xF8BE), MB2(0xF8BF), MB2(0xF8C0), - MB2(0xF8C1), MB2(0xF8C2), MB2(0xF8C3), MB2(0xF8C4), /* E660 */ - MB2(0xF8C5), MB2(0xF8C6), MB2(0xF8C7), MB2(0xF8C8), - MB2(0xF8C9), MB2(0xF8CA), MB2(0xF8CB), MB2(0xF8CC), - MB2(0xF8CD), MB2(0xF8CE), MB2(0xF8CF), MB2(0xF8D0), - MB2(0xF8D1), MB2(0xF8D2), MB2(0xF8D3), MB2(0xF8D4), - MB2(0xF8D5), MB2(0xF8D6), MB2(0xF8D7), MB2(0xF8D8), - MB2(0xF8D9), MB2(0xF8DA), MB2(0xF8DB), MB2(0xF8DC), - MB2(0xF8DD), MB2(0xF8DE), MB2(0xF8DF), MB2(0xF8E0), - MB2(0xF8E1), MB2(0xF8E2), MB2(0xF8E3), MB2(0xF8E4), /* E680 */ - MB2(0xF8E5), MB2(0xF8E6), MB2(0xF8E7), MB2(0xF8E8), - MB2(0xF8E9), MB2(0xF8EA), MB2(0xF8EB), MB2(0xF8EC), - MB2(0xF8ED), MB2(0xF8EE), MB2(0xF8EF), MB2(0xF8F0), - MB2(0xF8F1), MB2(0xF8F2), MB2(0xF8F3), MB2(0xF8F4), - MB2(0xF8F5), MB2(0xF8F6), MB2(0xF8F7), MB2(0xF8F8), - MB2(0xF8F9), MB2(0xF8FA), MB2(0xF8FB), MB2(0xF8FC), - MB2(0xF940), MB2(0xF941), MB2(0xF942), MB2(0xF943), - MB2(0xF944), MB2(0xF945), MB2(0xF946), MB2(0xF947), /* E6A0 */ - MB2(0xF948), MB2(0xF949), MB2(0xF94A), MB2(0xF94B), - MB2(0xF94C), MB2(0xF94D), MB2(0xF94E), MB2(0xF94F), - MB2(0xF950), MB2(0xF951), MB2(0xF952), MB2(0xF953), - MB2(0xF954), MB2(0xF955), MB2(0xF956), MB2(0xF957), - MB2(0xF958), MB2(0xF959), MB2(0xF95A), MB2(0xF95B), - MB2(0xF95C), MB2(0xF95D), MB2(0xF95E), MB2(0xF95F), - MB2(0xF960), MB2(0xF961), MB2(0xF962), MB2(0xF963), - MB2(0xF964), MB2(0xF965), MB2(0xF966), MB2(0xF967), /* E6C0 */ - MB2(0xF968), MB2(0xF969), MB2(0xF96A), MB2(0xF96B), - MB2(0xF96C), MB2(0xF96D), MB2(0xF96E), MB2(0xF96F), - MB2(0xF970), MB2(0xF971), MB2(0xF972), MB2(0xF973), - MB2(0xF974), MB2(0xF975), MB2(0xF976), MB2(0xF977), - MB2(0xF978), MB2(0xF979), MB2(0xF97A), MB2(0xF97B), - MB2(0xF97C), MB2(0xF97D), MB2(0xF97E), MB2(0xF980), - MB2(0xF981), MB2(0xF982), MB2(0xF983), MB2(0xF984), - MB2(0xF985), MB2(0xF986), MB2(0xF987), MB2(0xF988), /* E6E0 */ - MB2(0xF989), MB2(0xF98A), MB2(0xF98B), MB2(0xF98C), - MB2(0xF98D), MB2(0xF98E), MB2(0xF98F), MB2(0xF990), - MB2(0xF991), MB2(0xF992), MB2(0xF993), MB2(0xF994), - MB2(0xF995), MB2(0xF996), MB2(0xF997), MB2(0xF998), - MB2(0xF999), MB2(0xF99A), MB2(0xF99B), MB2(0xF99C), - MB2(0xF99D), MB2(0xF99E), MB2(0xF99F), MB2(0xF9A0), - MB2(0xF9A1), MB2(0xF9A2), MB2(0xF9A3), MB2(0xF9A4), - MB2(0xF9A5), MB2(0xF9A6), MB2(0xF9A7), MB2(0xF9A8), /* E700 */ - MB2(0xF9A9), MB2(0xF9AA), MB2(0xF9AB), MB2(0xF9AC), - MB2(0xF9AD), MB2(0xF9AE), MB2(0xF9AF), MB2(0xF9B0), - MB2(0xF9B1), MB2(0xF9B2), MB2(0xF9B3), MB2(0xF9B4), - MB2(0xF9B5), MB2(0xF9B6), MB2(0xF9B7), MB2(0xF9B8), - MB2(0xF9B9), MB2(0xF9BA), MB2(0xF9BB), MB2(0xF9BC), - MB2(0xF9BD), MB2(0xF9BE), MB2(0xF9BF), MB2(0xF9C0), - MB2(0xF9C1), MB2(0xF9C2), MB2(0xF9C3), MB2(0xF9C4), - MB2(0xF9C5), MB2(0xF9C6), MB2(0xF9C7), MB2(0xF9C8), /* E720 */ - MB2(0xF9C9), MB2(0xF9CA), MB2(0xF9CB), MB2(0xF9CC), - MB2(0xF9CD), MB2(0xF9CE), MB2(0xF9CF), MB2(0xF9D0), - MB2(0xF9D1), MB2(0xF9D2), MB2(0xF9D3), MB2(0xF9D4), - MB2(0xF9D5), MB2(0xF9D6), MB2(0xF9D7), MB2(0xF9D8), - MB2(0xF9D9), MB2(0xF9DA), MB2(0xF9DB), MB2(0xF9DC), - MB2(0xF9DD), MB2(0xF9DE), MB2(0xF9DF), MB2(0xF9E0), - MB2(0xF9E1), MB2(0xF9E2), MB2(0xF9E3), MB2(0xF9E4), - MB2(0xF9E5), MB2(0xF9E6), MB2(0xF9E7), MB2(0xF9E8), /* E740 */ - MB2(0xF9E9), MB2(0xF9EA), MB2(0xF9EB), MB2(0xF9EC), - MB2(0xF9ED), MB2(0xF9EE), MB2(0xF9EF), MB2(0xF9F0), - MB2(0xF9F1), MB2(0xF9F2), MB2(0xF9F3), MB2(0xF9F4), - MB2(0xF9F5), MB2(0xF9F6), MB2(0xF9F7), MB2(0xF9F8), - MB2(0xF9F9), MB2(0xF9FA), MB2(0xF9FB), MB2(0xF9FC), - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E7A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E7C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E7E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E8A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E8C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E8E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E9A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E9C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* E9E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EA00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EA20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EA40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EA60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EA80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EAA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EAC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EAE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EB00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EB20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EB40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EB60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EB80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EBA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EBC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EBE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EC00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EC20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EC40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EC60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EC80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ECA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ECC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ECE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ED00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ED20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ED40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ED60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* ED80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EDA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EDC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EDE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EE00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EE20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EE40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EE60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EE80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EEA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EEC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EEE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EF00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EF20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EF40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EF60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EF80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EFA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EFC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* EFE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F000 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F020 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F040 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F060 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F080 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F0A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F0C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F0E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F100 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F120 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F140 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F160 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F180 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F1A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F1C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F1E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F200 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F220 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F240 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F260 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F280 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F2A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F2C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F2E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F300 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F320 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F340 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F360 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F380 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F3A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F3C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F3E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F400 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F420 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F440 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F460 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F480 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F4A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F4C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F4E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F500 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F520 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F540 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F560 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F580 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F5A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F5C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F5E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F600 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F620 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F640 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F660 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F680 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F6A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F6C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F6E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F700 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F720 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F740 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F760 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F780 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F7A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F7C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F7E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F800 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F820 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F840 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F860 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F880 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F8A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F8C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F8E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F900 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F920 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0xFAE0), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F940 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F960 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F980 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F9A0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F9C0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0xFBE9), 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* F9E0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FA00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, MB2(0xFA90), MB2(0xFA9B), - MB2(0xFA9C), MB2(0xFAB1), MB2(0xFAD8), MB2(0xFAE8), - MB2(0xFAEA), MB2(0xFB58), MB2(0xFB5E), MB2(0xFB75), - MB2(0xFB7D), MB2(0xFB7E), MB2(0xFB80), MB2(0xFB82), - MB2(0xFB86), MB2(0xFB89), MB2(0xFB92), MB2(0xFB9D), - MB2(0xFB9F), MB2(0xFBA0), MB2(0xFBA9), MB2(0xFBB1), /* FA20 */ - MB2(0xFBB3), MB2(0xFBB4), MB2(0xFBB7), MB2(0xFBD3), - MB2(0xFBDA), MB2(0xFBEA), MB2(0xFBF6), MB2(0xFBF7), - MB2(0xFBF9), MB2(0xFC49), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FA40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FA60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FA80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FAA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FAC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FAE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FB00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FB20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FB40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FB60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FB80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FBA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FBC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FBE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FC00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FC20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FC40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FC60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FC80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FCA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FCC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FCE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FD00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FD20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FD40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FD60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FD80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FDA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FDC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FDE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FE00 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FE20 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FE40 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FE60 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FE80 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FEA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FEC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FEE0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, MB2(0x8149), MB2(0xFA57), MB2(0x8194), /* FF00 */ - MB2(0x8190), MB2(0x8193), MB2(0x8195), MB2(0xFA56), - MB2(0x8169), MB2(0x816A), MB2(0x8196), MB2(0x817B), - MB2(0x8143), MB2(0x817C), MB2(0x8144), MB2(0x815E), - MB2(0x824F), MB2(0x8250), MB2(0x8251), MB2(0x8252), - MB2(0x8253), MB2(0x8254), MB2(0x8255), MB2(0x8256), - MB2(0x8257), MB2(0x8258), MB2(0x8146), MB2(0x8147), - MB2(0x8183), MB2(0x8181), MB2(0x8184), MB2(0x8148), - MB2(0x8197), MB2(0x8260), MB2(0x8261), MB2(0x8262), /* FF20 */ - MB2(0x8263), MB2(0x8264), MB2(0x8265), MB2(0x8266), - MB2(0x8267), MB2(0x8268), MB2(0x8269), MB2(0x826A), - MB2(0x826B), MB2(0x826C), MB2(0x826D), MB2(0x826E), - MB2(0x826F), MB2(0x8270), MB2(0x8271), MB2(0x8272), - MB2(0x8273), MB2(0x8274), MB2(0x8275), MB2(0x8276), - MB2(0x8277), MB2(0x8278), MB2(0x8279), MB2(0x816D), - MB2(0x815F), MB2(0x816E), MB2(0x814F), MB2(0x8151), - MB2(0x814D), MB2(0x8281), MB2(0x8282), MB2(0x8283), /* FF40 */ - MB2(0x8284), MB2(0x8285), MB2(0x8286), MB2(0x8287), - MB2(0x8288), MB2(0x8289), MB2(0x828A), MB2(0x828B), - MB2(0x828C), MB2(0x828D), MB2(0x828E), MB2(0x828F), - MB2(0x8290), MB2(0x8291), MB2(0x8292), MB2(0x8293), - MB2(0x8294), MB2(0x8295), MB2(0x8296), MB2(0x8297), - MB2(0x8298), MB2(0x8299), MB2(0x829A), MB2(0x816F), - MB2(0x8162), MB2(0x8170), MB2(0x8160), 0x0000, - 0x0000, 0x00A1, 0x00A2, 0x00A3, /* FF60 */ - 0x00A4, 0x00A5, 0x00A6, 0x00A7, - 0x00A8, 0x00A9, 0x00AA, 0x00AB, - 0x00AC, 0x00AD, 0x00AE, 0x00AF, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, - 0x00B4, 0x00B5, 0x00B6, 0x00B7, - 0x00B8, 0x00B9, 0x00BA, 0x00BB, - 0x00BC, 0x00BD, 0x00BE, 0x00BF, - 0x00C0, 0x00C1, 0x00C2, 0x00C3, /* FF80 */ - 0x00C4, 0x00C5, 0x00C6, 0x00C7, - 0x00C8, 0x00C9, 0x00CA, 0x00CB, - 0x00CC, 0x00CD, 0x00CE, 0x00CF, - 0x00D0, 0x00D1, 0x00D2, 0x00D3, - 0x00D4, 0x00D5, 0x00D6, 0x00D7, - 0x00D8, 0x00D9, 0x00DA, 0x00DB, - 0x00DC, 0x00DD, 0x00DE, 0x00DF, - 0x0000, 0x0000, 0x0000, 0x0000, /* FFA0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, /* FFC0 */ - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - MB2(0x8191), MB2(0x8192), MB2(0x81CA), MB2(0x8150), /* FFE0 */ - MB2(0xFA55), MB2(0x818F), 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, -}; - - -/* - CP932 encoding components: - - [00..7F] = ASCII [U+0000..U+007F] - [A1..DF] = JIS-X-0201 Katakana [U+FF61..U+FF9F] - [81..9F,E0..FC][40..7E,80..FC] = JIS-X-0208 (MS version) - - [80,A0,FD,FE,FF] = Invalid leading byte -*/ - - -/** - Scans a CP932 character from the input string - and converts to Unicode code point. - - @param[out] pwc Unicode code point - @param[in] s Beginning of the input string - @param[in[ e End of the input string - - @retval MY_CS_TOOSMALL If the string was too short to scan a character - @retval 1 If a 1-byte character was scanned - @retval 2 If a 2-byte character was scanned - @retval -2 If a 2-byte unassigned character was scanned - @retval MY_CS_ILSEQ If a wrong byte sequence was found -*/ - -static int -my_mb_wc_cp932(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t *pwc, const uchar *s, const uchar *e){ - int hi; - - if (s >= e) - return MY_CS_TOOSMALL; - - if ((hi= s[0]) < 0x80) /* ASCII: [00-7F] -> [U+0000..U+007F] */ - { - *pwc= hi; - return 1; - } - - /* JIS-X-0201 Half width Katakana: [A1..DF] -> [U+FF61..U+FF9F] */ - if (hi >= 0xA1 && hi <= 0xDF) - { - *pwc= cp932_to_unicode[hi]; - return 1; - } - - if (s + 2 > e) - return MY_CS_TOOSMALL2; - - /* JIS-X-0208-MS [81..9F,E0..FC][40..7E,80..FC] */ - if (!(pwc[0]= cp932_to_unicode[(hi << 8) + s[1]])) - return (iscp932head(hi) && iscp932tail(s[1])) ? -2 : MY_CS_ILSEQ; - - return 2; -} - - -/** - Puts the given Unicode character into a CP932 string. - - @param[in] wc Unicode code point - @param[in] s Beginning of the out string - @param[in] e End of the out string - - @retval MY_CS_TOOSMALL If the string was too short to put a character - @retval 1 If a 1-byte character was put - @retval 2 If a 2-byte character was put - @retval MY_CS_ILUNI If the Unicode character does not exist in CP932 -*/ -static int -my_wc_mb_cp932(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, uchar *s, uchar *e) -{ - int code; - - if ((int) wc < 0x80) /* ASCII: [U+0000..U+007F] -> [00-7F] */ - { - /* - This branch is for performance purposes on ASCII range, - to avoid using unicode_to_cp932[]: about 10% improvement. - */ - if (s >= e) - return MY_CS_TOOSMALL; - s[0]= (uchar) wc; - return 1; - } - - if (wc > 0xFFFF || - !(code= unicode_to_cp932[wc])) /* Bad Unicode code point */ - return MY_CS_ILUNI; - - if (code <= 0xFF) - { - /* JIS-X-0201 HALF WIDTH KATAKANA [U+FF61..U+FF9F] -> [A1..DF] */ - if (s >= e) - return MY_CS_TOOSMALL; - s[0]= code; - return 1; - } - - if (s + 2 > e) - return MY_CS_TOOSMALL2; - - MY_PUT_MB2(s, code); /* JIS-X-0208(MS) */ - return 2; -} - - - -static -size_t my_numcells_cp932(CHARSET_INFO *cs __attribute__((unused)), - const char *str, const char *str_end) -{ - size_t clen= 0; - const uchar *b= (const uchar *) str; - const uchar *e= (const uchar *) str_end; - - for (clen= 0; b < e; ) - { - if (*b >= 0xA1 && *b <= 0xDF) - { - clen++; - b++; - } - else if (*b > 0x7F) - { - clen+= 2; - b+= 2; - } - else - { - clen++; - b++; - } - } - return clen; -} - -/* - Returns a well formed length of a cp932 string. - cp932 additional characters are also accepted. -*/ - -static -size_t my_well_formed_len_cp932(CHARSET_INFO *cs __attribute__((unused)), - const char *b, const char *e, - size_t pos, int *error) -{ - const char *b0= b; - *error= 0; - while (pos-- && b < e) - { - /* - Cast to int8 for extra safety. - "char" can be unsigned by default - on some platforms. - */ - if (((int8)b[0]) >= 0) - { - /* Single byte ascii character */ - b++; - } - else if (iscp932head((uchar)*b) && (e-b)>1 && iscp932tail((uchar)b[1])) - { - /* Double byte character */ - b+= 2; - } - else if (((uchar)*b) >= 0xA1 && ((uchar)*b) <= 0xDF) - { - /* Half width kana */ - b++; - } - else - { - /* Wrong byte sequence */ - *error= 1; - break; - } - } - return (size_t) (b - b0); -} - - -static MY_COLLATION_HANDLER my_collation_ci_handler = -{ - NULL, /* init */ - my_strnncoll_cp932, - my_strnncollsp_cp932, - my_strnxfrm_cp932, - my_strnxfrmlen_simple, - my_like_range_mb, - my_wildcmp_mb, /* wildcmp */ - my_strcasecmp_8bit, - my_instr_mb, - my_hash_sort_simple, - my_propagate_simple -}; - - -static MY_CHARSET_HANDLER my_charset_handler= -{ - NULL, /* init */ - ismbchar_cp932, - mbcharlen_cp932, - my_numchars_mb, - my_charpos_mb, - my_well_formed_len_cp932, - my_lengthsp_8bit, - my_numcells_cp932, - my_mb_wc_cp932, /* mb_wc */ - my_wc_mb_cp932, /* wc_mb */ - my_mb_ctype_mb, - my_caseup_str_mb, - my_casedn_str_mb, - my_caseup_mb, - my_casedn_mb, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_strtoll10_8bit, - my_strntoull10rnd_8bit, - my_scan_8bit -}; - - -CHARSET_INFO my_charset_cp932_japanese_ci= -{ - 95,0,0, /* number */ - MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ - "cp932", /* cs name */ - "cp932_japanese_ci", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp932, - to_lower_cp932, - to_upper_cp932, - sort_order_cp932, - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_caseinfo_cp932, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 2, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFCFC, /* max_sort_char */ - ' ', /* pad char */ - 1, /* escape_with_backslash_is_dangerous */ - &my_charset_handler, - &my_collation_ci_handler -}; - -CHARSET_INFO my_charset_cp932_bin= -{ - 96,0,0, /* number */ - MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "cp932", /* cs name */ - "cp932_bin", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp932, - to_lower_cp932, - to_upper_cp932, - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_caseinfo_cp932, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 2, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFCFC, /* max_sort_char */ - ' ', /* pad char */ - 1, /* escape_with_backslash_is_dangerous */ - &my_charset_handler, - &my_collation_mb_bin_handler -}; - -#endif diff --git a/deps/mysqllite/strings/ctype-czech.c b/deps/mysqllite/strings/ctype-czech.c deleted file mode 100644 index 27a7bb39e6b984..00000000000000 --- a/deps/mysqllite/strings/ctype-czech.c +++ /dev/null @@ -1,639 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File strings/ctype-czech.c for MySQL. - - This file implements the Czech sorting for the MySQL database - server (www.mysql.com). Due to some complicated rules the - Czech language has for sorting strings, a more complex - solution was needed than the one-to-one conversion table. To - note a few, here is an example of a Czech sorting sequence: - - co < hlaska < hl�ska < hlava < chlapec < krtek - - It because some of the rules are: double char 'ch' is sorted - between 'h' and 'i'. Accented character '�' (a with acute) is - sorted after 'a' and before 'b', but only if the word is - otherwise the same. However, because 's' is sorted before 'v' - in hlava, the accentness of '�' is overridden. There are many - more rules. - - This file defines functions my_strxfrm and my_strcoll for - C-like zero terminated strings and my_strnxfrm and my_strnncoll - for strings where the length comes as an parameter. Also - defined here you will find function my_like_range that returns - index range strings for LIKE expression and the - MY_STRXFRM_MULTIPLY set to value 4 -- this is the ratio the - strings grows during my_strxfrm. The algorithm has four - passes, that's why we need four times more space for expanded - string. - - This file also contains the ISO-Latin-2 definitions of - characters. - - Author: (c) 1997--1998 Jan Pazdziora, adelton@fi.muni.cz - Jan Pazdziora has a shared copyright for this code - - The original of this file can also be found at - http://www.fi.muni.cz/~adelton/l10n/ - - Bug reports and suggestions are always welcome. -*/ - -/* - * This comment is parsed by configure to create ctype.c, - * so don't change it unless you know what you are doing. - * - * .configure. strxfrm_multiply_czech=4 - */ - -#define SKIP_TRAILING_SPACES 1 - -#define REAL_MYSQL - -#ifdef REAL_MYSQL - -#include -#include "m_string.h" -#include "m_ctype.h" - -#else - -#include -#define uchar unsigned char - -#endif - -#ifdef HAVE_CHARSET_latin2 - -/* - These are four tables for four passes of the algorithm. Please see - below for what are the "special values" -*/ - -static uchar *CZ_SORT_TABLE[] = { - (uchar*) "\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\043\044\045\046\047\050\051\052\053\054\000\000\000\000\000\000\000\003\004\377\007\010\011\012\013\015\016\017\020\022\023\024\025\026\027\031\033\034\035\036\037\040\041\000\000\000\000\000\000\003\004\377\007\010\011\012\013\015\016\017\020\022\023\024\025\026\027\031\033\034\035\036\037\040\041\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\021\000\020\032\000\000\032\032\033\042\000\042\042\000\003\000\021\000\020\032\000\000\032\032\033\042\000\042\042\027\003\003\003\003\020\006\006\006\010\010\010\010\015\015\007\007\023\023\024\024\024\024\000\030\034\034\034\034\040\033\000\027\003\003\003\003\020\006\006\006\010\010\010\010\015\015\007\007\023\023\024\024\024\024\000\030\034\034\034\034\040\033\000", - (uchar*) "\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\106\107\110\111\112\113\114\115\116\117\000\000\000\000\000\000\000\003\011\377\016\021\026\027\030\032\035\036\037\043\044\047\054\055\056\061\065\070\075\076\077\100\102\000\000\000\000\000\000\003\011\377\016\021\026\027\030\032\035\036\037\043\044\047\054\055\056\061\065\070\075\076\077\100\102\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\042\000\041\063\000\000\062\064\066\104\000\103\105\000\010\000\042\000\041\063\000\000\062\064\066\104\000\103\105\057\004\005\007\006\040\014\015\013\022\025\024\023\033\034\017\020\046\045\050\051\053\052\000\060\072\071\074\073\101\067\000\057\004\005\007\006\040\014\015\013\022\025\024\023\033\034\017\020\046\045\050\051\053\052\000\060\072\071\074\073\101\067\000", -(uchar*) "\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\213\214\215\216\217\220\221\222\223\000\000\000\000\000\000\000\004\020\377\032\040\052\054\056\063\071\073\075\105\107\115\127\131\133\141\151\157\171\173\175\177\203\000\000\000\000\000\000\003\017\377\031\037\051\053\055\062\070\072\074\104\106\114\126\130\132\140\150\156\170\172\174\176\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\103\000\101\145\000\000\143\147\153\207\000\205\211\000\015\000\102\000\100\144\000\000\142\146\152\206\000\204\210\135\006\010\014\012\077\026\030\024\042\050\046\044\065\067\034\036\113\111\117\121\125\123\000\137\163\161\167\165\201\155\000\134\005\007\013\011\076\025\027\023\041\047\045\043\064\066\033\035\112\110\116\120\124\122\000\136\162\160\166\164\200\154\000", -(uchar*) "\264\265\266\267\270\271\272\273\274\002\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\002\230\232\253\324\252\251\234\240\241\261\260\225\262\224\235\212\213\214\215\216\217\220\221\222\223\231\226\244\257\245\227\250\004\020\377\032\040\052\054\056\063\071\073\075\105\107\115\127\131\133\141\151\157\171\173\175\177\203\242\237\243\254\255\233\003\017\377\031\037\051\053\055\062\070\072\074\104\106\114\126\130\132\140\150\156\170\172\174\176\202\246\236\247\256\325\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\326\016\327\103\330\101\145\331\332\143\147\153\207\333\205\211\334\015\335\102\336\100\144\337\340\142\146\152\206\341\204\210\135\006\010\014\012\077\026\030\024\042\050\046\044\065\067\034\036\113\111\117\121\125\123\263\137\163\161\167\165\201\155\342\134\005\007\013\011\076\025\027\023\041\047\045\043\064\066\033\035\112\110\116\120\124\122\343\136\162\160\166\164\200\154\344", -}; - -/* - These define the valuse for the double chars that need to be - sorted as they were single characters -- in Czech these are - 'ch', 'Ch' and 'CH'. -*/ - -struct wordvalue - { - const char * word; - uchar *outvalue; - }; -static struct wordvalue doubles[] = { - { "ch", (uchar*) "\014\031\057\057" }, - { "Ch", (uchar*) "\014\031\060\060" }, - { "CH", (uchar*) "\014\031\061\061" }, - { "c", (uchar*) "\005\012\021\021" }, - { "C", (uchar*) "\005\012\022\022" }, - }; - -/* - Unformal description of the algorithm: - - We walk the string left to right. - - The end of the string is either passed as parameter, or is - *p == 0. This is hidden in the IS_END macro. - - In the first two passes, we compare word by word. So we make - first and second pass on the first word, first and second pass - on the second word, etc. If we come to the end of the string - during the first pass, we need to jump to the last word of the - second pass. - - End of pass is marked with value 1 on the output. - - For each character, we read it's value from the table. - - If the value is ignore (0), we go straight to the next character. - - If the value is space/end of word (2) and we are in the first - or second pass, we skip all characters having value 0 -- 2 and - switch the passwd. - - If it's the compose character (255), we check if the double - exists behind it, find its value. - - We append 0 to the end. ---- - Neform�ln� popis algoritmu: - - Proch�z�me �et�zec zleva doprava. - - Konec �et�zce je p�ed�n bu� jako parametr, nebo je to *p == 0. - Toto je o�et�eno makrem IS_END. - - Pokud jsme do�li na konec �et�zce p�i pr�chodu 0, nejdeme na - za��tek, ale na ulo�enou pozici, proto�e prvn� a druh� pr�chod - b��� sou�asn�. - - Konec vstupu (pr�chodu) ozna��me na v�stupu hodnotou 1. - - Pro ka�d� znak �et�zce na�teme hodnotu z t��d�c� tabulky. - - Jde-li o hodnotu ignorovat (0), sko��me ihned na dal�� znak.. - - Jde-li o hodnotu konec slova (2) a je to pr�chod 0 nebo 1, - p�esko��me v�echny dal�� 0 -- 2 a prohod�me pr�chody. - - Jde-li o kompozitn� znak (255), otestujeme, zda n�sleduje - spr�vn� do dvojice, dohled�me spr�vnou hodnotu. - - Na konci p�ipoj�me znak 0 - */ - -#define ADD_TO_RESULT(dest, len, totlen, value) \ -if ((totlen) < (len)) { dest[totlen] = value; } (totlen++); -#define IS_END(p, src, len) (((char *)p - (char *)src) >= (len)) - -#define NEXT_CMP_VALUE(src, p, store, pass, value, len) \ -while (1) \ -{ \ - if (IS_END(p, src, len)) \ - { \ - /* when we are at the end of string */ \ - /* return either 0 for end of string */ \ - /* or 1 for end of pass */ \ - value= 0; \ - if (pass != 3) \ - { \ - p= (pass++ == 0) ? store : src; \ - value = 1; \ - } \ - break; \ - } \ - /* not at end of string */ \ - value = CZ_SORT_TABLE[pass][*p]; \ - if (value == 0) \ - { p++; continue; } /* ignore value */ \ - if (value == 2) /* space */ \ - { \ - const uchar *tmp; \ - const uchar *runner = ++p; \ - while (!(IS_END(runner, src, len)) && (CZ_SORT_TABLE[pass][*runner] == 2)) \ - runner++; /* skip all spaces */ \ - if (IS_END(runner, src, len) && SKIP_TRAILING_SPACES) \ - p = runner; \ - if ((pass <= 2) && !(IS_END(runner, src, len))) \ - p = runner; \ - if (IS_END(p, src, len)) \ - continue; \ - /* we switch passes */ \ - if (pass > 1) \ - break; \ - tmp = p; \ - pass= 1-pass; \ - p = store; store = tmp; \ - break; \ - } \ - if (value == 255) \ - { \ - int i; \ - for (i = 0; i < (int) sizeof(doubles); i++) \ - { \ - const char * pattern = doubles[i].word; \ - const char * q = (const char *) p; \ - int j = 0; \ - while (pattern[j]) \ - { \ - if (IS_END(q, src, len) || (*q != pattern[j])) \ - break; \ - j++; q++; \ - } \ - if (!(pattern[j])) \ - { \ - value = (int)(doubles[i].outvalue[pass]); \ - p= (const uchar *) q - 1; \ - break; \ - } \ - } \ - } \ - p++; \ - break; \ -} - -/* - Function strnncoll, actually strcoll, with Czech sorting, which expect - the length of the strings being specified -*/ - -static int my_strnncoll_czech(CHARSET_INFO *cs __attribute__((unused)), - const uchar *s1, size_t len1, - const uchar *s2, size_t len2, - my_bool s2_is_prefix) -{ - int v1, v2; - const uchar *p1, * p2, * store1, * store2; - int pass1 = 0, pass2 = 0; - - if (s2_is_prefix && len1 > len2) - len1=len2; - - p1 = s1; p2 = s2; - store1 = s1; store2 = s2; - - do - { - int diff; - NEXT_CMP_VALUE(s1, p1, store1, pass1, v1, (int)len1); - NEXT_CMP_VALUE(s2, p2, store2, pass2, v2, (int)len2); - if ((diff = v1 - v2)) - return diff; - } - while (v1); - return 0; -} - - - -/* - TODO: Fix this one to compare strings as they are done in ctype-simple1 -*/ - -static -int my_strnncollsp_czech(CHARSET_INFO * cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference - __attribute__((unused))) -{ - for ( ; slen && s[slen-1] == ' ' ; slen--); - for ( ; tlen && t[tlen-1] == ' ' ; tlen--); - return my_strnncoll_czech(cs,s,slen,t,tlen,0); -} - - -/* - Function strnxfrm, actually strxfrm, with Czech sorting, which expect - the length of the strings being specified -*/ - -static size_t my_strnxfrm_czech(CHARSET_INFO *cs __attribute__((unused)), - uchar *dest, size_t len, - const uchar *src, size_t srclen) -{ - int value; - const uchar *p, * store; - int pass = 0; - size_t totlen = 0; - p = src; store = src; - - do - { - NEXT_CMP_VALUE(src, p, store, pass, value, (int)srclen); - ADD_TO_RESULT(dest, len, totlen, value); - } - while (value); - if (len > totlen) - bfill(dest + totlen, len - totlen, ' '); - return len; -} - -#undef IS_END - - -/* - Neform�ln� popis algoritmu: - - proch�z�me �et�zec zleva doprava - konec �et�zce pozn�me podle *p == 0 - pokud jsme do�li na konec �et�zce p�i pr�chodu 0, nejdeme na - za��tek, ale na ulo�enou pozici, proto�e prvn� a druh� - pr�chod b��� sou�asn� - konec vstupu (pr�chodu) ozna��me na v�stupu hodnotou 1 - - na�teme hodnotu z t��d�c� tabulky - jde-li o hodnotu ignorovat (0), sko��me na dal�� pr�chod - jde-li o hodnotu konec slova (2) a je to pr�chod 0 nebo 1, - p�esko��me v�echny dal�� 0 -- 2 a prohod�me - pr�chody - jde-li o kompozitn� znak (255), otestujeme, zda n�sleduje - spr�vn� do dvojice, dohled�me spr�vnou hodnotu - - na konci p�ipoj�me znak 0 - */ - - -/* -** Calculate min_str and max_str that ranges a LIKE string. -** Arguments: -** ptr Pointer to LIKE string. -** ptr_length Length of LIKE string. -** escape Escape character in LIKE. (Normally '\'). -** All escape characters should be removed from min_str and max_str -** res_length Length of min_str and max_str. -** min_str Smallest case sensitive string that ranges LIKE. -** Should be space padded to res_length. -** max_str Largest case sensitive string that ranges LIKE. -** Normally padded with the biggest character sort value. -** -** The function should return 0 if ok and 1 if the LIKE string can't be -** optimized ! -*/ - -#ifdef REAL_MYSQL - -#define min_sort_char ' ' -#define max_sort_char '9' - -#define EXAMPLE - -static my_bool my_like_range_czech(CHARSET_INFO *cs __attribute__((unused)), - const char *ptr,size_t ptr_length, - pbool escape, pbool w_one, pbool w_many, - size_t res_length, char *min_str, - char *max_str, - size_t *min_length,size_t *max_length) -{ -#ifdef EXAMPLE - uchar value; - const char *end=ptr+ptr_length; - char *min_org=min_str; - char *min_end=min_str+res_length; - - for (; ptr != end && min_str != min_end ; ptr++) - { - if (*ptr == w_one) /* '_' in SQL */ - { break; } - if (*ptr == w_many) /* '%' in SQL */ - { break; } - - if (*ptr == escape && ptr+1 != end) - { ptr++; } /* Skip escape */ - - value = CZ_SORT_TABLE[0][(int) (uchar) *ptr]; - - if (value == 0) /* Ignore in the first pass */ - { continue; } - if (value <= 2) /* End of pass or end of string */ - { break; } - if (value == 255) /* Double char too compicated */ - { break; } - - *min_str++= *max_str++ = *ptr; - } - - if (cs->state & MY_CS_BINSORT) - *min_length= (size_t) (min_str - min_org); - else - { - /* 'a\0\0... is the smallest possible string */ - *min_length= res_length; - } - /* a\ff\ff... is the biggest possible string */ - *max_length= res_length; - - while (min_str != min_end) - { - *min_str++ = min_sort_char; /* Because of key compression */ - *max_str++ = max_sort_char; - } - return 0; -#else - return 1; -#endif -} - -#endif - -#ifdef REAL_MYSQL -/* This is a latin2 file */ - -/* - * File generated by cset - * (C) Abandoned 1997 Zarko Mocnik - * - * definition table reworked by Jaromir Dolecek - */ -#include -#include "m_string.h" - -static uchar ctype_czech[257] = { -0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, -132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 72, - 1, 16, 1, 16, 1, 1, 16, 0, 0, 1, 1, 1, 1, 16, 1, 1, - 16, 2, 16, 2, 16, 2, 2, 16, 16, 2, 2, 2, 2, 16, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 16, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 16, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 16, -}; - -static uchar to_lower_czech[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, -112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, -112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, -128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, -144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, -177,161,179,163,181,182,166,167,168,185,186,187,188,173,190,191, -176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, -224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, -208,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223, -224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, -240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255, -}; - -static uchar to_upper_czech[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, -128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, -144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, -160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, -176,160,178,162,180,164,165,183,184,169,170,171,172,189,174,175, -192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, -208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, -192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, -240,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255, -}; - -static uchar sort_order_czech[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 71, 72, 76, 78, 83, 84, 85, 86, 90, 91, 92, 96, 97,100, -105,106,107,110,114,117,122,123,124,125,127,131,132,133,134,135, -136, 65, 71, 72, 76, 78, 83, 84, 85, 86, 90, 91, 92, 96, 97,100, -105,106,107,110,114,117,122,123,124,125,127,137,138,139,140, 0, - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,255, - 66,255, 93,255, 94,111,255,255,255,112,113,115,128,255,129,130, -255, 66,255, 93,255, 94,111,255,255,112,113,115,128,255,129,130, -108, 67, 68, 69, 70, 95, 73, 75, 74, 79, 81, 82, 80, 89, 87, 77, -255, 98, 99,101,102,103,104,255,109,119,118,120,121,126,116,255, -108, 67, 68, 69, 70, 95, 73, 75, 74, 79, 81, 82, 80, 89, 88, 77, -255, 98, 99,101,102,103,104,255,109,119,118,120,121,126,116,255, -}; - -static uint16 tab_8859_2_uni[256]={ - 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x00A0,0x0104,0x02D8,0x0141,0x00A4,0x013D,0x015A,0x00A7, -0x00A8,0x0160,0x015E,0x0164,0x0179,0x00AD,0x017D,0x017B, -0x00B0,0x0105,0x02DB,0x0142,0x00B4,0x013E,0x015B,0x02C7, -0x00B8,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C, -0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, -0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, -0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, -0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, -0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, -0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, -0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, -0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 -}; - - -/* 0000-00FD , 254 chars */ -static uchar tab_uni_8859_2_plane00[]={ -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xA0,0x00,0x00,0x00,0xA4,0x00,0x00,0xA7,0xA8,0x00,0x00,0x00,0x00,0xAD,0x00,0x00, -0xB0,0x00,0x00,0x00,0xB4,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xC1,0xC2,0x00,0xC4,0x00,0x00,0xC7,0x00,0xC9,0x00,0xCB,0x00,0xCD,0xCE,0x00, -0x00,0x00,0x00,0xD3,0xD4,0x00,0xD6,0xD7,0x00,0x00,0xDA,0x00,0xDC,0xDD,0x00,0xDF, -0x00,0xE1,0xE2,0x00,0xE4,0x00,0x00,0xE7,0x00,0xE9,0x00,0xEB,0x00,0xED,0xEE,0x00, -0x00,0x00,0x00,0xF3,0xF4,0x00,0xF6,0xF7,0x00,0x00,0xFA,0x00,0xFC,0xFD}; - -/* 0102-017E , 125 chars */ -static uchar tab_uni_8859_2_plane01[]={ -0xC3,0xE3,0xA1,0xB1,0xC6,0xE6,0x00,0x00,0x00,0x00,0xC8,0xE8,0xCF,0xEF,0xD0,0xF0, -0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0xEA,0xCC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC5,0xE5,0x00,0x00,0xA5,0xB5,0x00,0x00,0xA3, -0xB3,0xD1,0xF1,0x00,0x00,0xD2,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xF5, -0x00,0x00,0xC0,0xE0,0x00,0x00,0xD8,0xF8,0xA6,0xB6,0x00,0x00,0xAA,0xBA,0xA9,0xB9, -0xDE,0xFE,0xAB,0xBB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0xF9,0xDB,0xFB, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0xBC,0xAF,0xBF,0xAE,0xBE}; - -/* 02C7-02DD , 23 chars */ -static uchar tab_uni_8859_2_plane02[]={ -0xB7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xA2,0xFF,0x00,0xB2,0x00,0xBD}; - -static MY_UNI_IDX idx_uni_8859_2[]={ - {0x0000,0x00FD,tab_uni_8859_2_plane00}, - {0x0102,0x017E,tab_uni_8859_2_plane01}, - {0x02C7,0x02DD,tab_uni_8859_2_plane02}, - {0,0,NULL} -}; - - -static MY_COLLATION_HANDLER my_collation_latin2_czech_ci_handler = -{ - NULL, /* init */ - my_strnncoll_czech, - my_strnncollsp_czech, - my_strnxfrm_czech, - my_strnxfrmlen_simple, - my_like_range_czech, - my_wildcmp_bin, - my_strcasecmp_8bit, - my_instr_simple, - my_hash_sort_simple, - my_propagate_simple -}; - -CHARSET_INFO my_charset_latin2_czech_ci = -{ - 2,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_CSSORT, /* state */ - "latin2", /* cs name */ - "latin2_czech_cs", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_czech, - to_lower_czech, - to_upper_czech, - sort_order_czech, - NULL, /* contractions */ - NULL, /* sort_order_big*/ - tab_8859_2_uni, /* tab_to_uni */ - idx_uni_8859_2, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 4, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 0, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_latin2_czech_ci_handler -}; - - -#endif - -#endif diff --git a/deps/mysqllite/strings/ctype-euc_kr.c b/deps/mysqllite/strings/ctype-euc_kr.c deleted file mode 100644 index 7329f9ec09a2ef..00000000000000 --- a/deps/mysqllite/strings/ctype-euc_kr.c +++ /dev/null @@ -1,10072 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - * This file is for Korean EUC charset, and created by powerm90@tinc.co.kr. - * and updated by mrpark@tinc.co.kr. - */ - -/* - * This comment is parsed by configure to create ctype.c, - * so don't change it unless you know what you are doing. - * - * .configure. mbmaxlen_euc_kr=2 - */ - -#include -#include "m_string.h" -#include "m_ctype.h" - -#ifdef HAVE_CHARSET_euckr - - -static uchar ctype_euc_kr[257] = -{ - 0, /* For standard library */ - 0040, 0040, 0040, 0040, 0040, 0040, 0040, 0040, /* NUL ^A - ^G */ - 0040, 0050, 0050, 0050, 0050, 0050, 0040, 0040, /* ^H - ^O */ - 0040, 0040, 0040, 0040, 0040, 0040, 0040, 0040, /* ^P - ^W */ - 0040, 0040, 0040, 0040, 0040, 0040, 0040, 0040, /* ^X - ^Z ^[ ^\ ^] ^^ ^_ */ - 0110, 0020, 0020, 0020, 0020, 0020, 0020, 0020, /* SPC ! " # $ % ^ ' */ - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, /* ( ) * + , - . / */ - 0204, 0204, 0204, 0204, 0204, 0204, 0204, 0204, /* 0 1 2 3 4 5 6 7 */ - 0204, 0204, 0020, 0020, 0020, 0020, 0020, 0020, /* 8 9 : ; < = > ? */ - 0020, 0201, 0201, 0201, 0201, 0201, 0201, 0001, /* @ A B C D E F G */ - 0001, 0001, 0001, 0001, 0001, 0001, 0001, 0001, /* H I J K L M N O */ - 0001, 0001, 0001, 0001, 0001, 0001, 0001, 0001, /* P Q R S T U V W */ - 0001, 0001, 0001, 0020, 0020, 0020, 0020, 0020, /* X Y Z [ \ ] ^ _ */ - 0020, 0202, 0202, 0202, 0202, 0202, 0202, 0002, /* ` a b c d e f g */ - 0002, 0002, 0002, 0002, 0002, 0002, 0002, 0002, /* h i j k l m n o */ - 0002, 0002, 0002, 0002, 0002, 0002, 0002, 0002, /* p q r s t u v w */ - 0002, 0002, 0002, 0020, 0020, 0020, 0020, 0040, /* x y z { | } + DEL */ - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0020, - 0020, 0020, 0020, 0020, 0020, 0020, 0020, 0000, -}; - -static uchar to_lower_euc_kr[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '[', '\\', ']', '^', '_', - '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '{', '|', '}', '~', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - -static uchar to_upper_euc_kr[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', - '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '{', '|', '}', '~', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - -static uchar sort_order_euc_kr[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', - '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '{', '|', '}', '~', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - -/* Support for Korean(EUC_KR) characters, by powerm90@tinc.co.kr and mrpark@tinc.co.kr */ - -/* - Unicode mapping is done according to: - ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/KSC/KSC5601.TXT - - Valid multi-byte characters: - - [81..FE][41..5A,61..7A,81..FE] - - Note, 0x5C is not a valid MB tail, - so escape_with_backslash_is_dangerous is not set. -*/ - -#define iseuc_kr_head(c) ((0x81<=(uchar)(c) && (uchar)(c)<=0xfe)) - -#define iseuc_kr_tail1(c) ((uchar) (c) >= 0x41 && (uchar) (c) <= 0x5A) -#define iseuc_kr_tail2(c) ((uchar) (c) >= 0x61 && (uchar) (c) <= 0x7A) -#define iseuc_kr_tail3(c) ((uchar) (c) >= 0x81 && (uchar) (c) <= 0xFE) - -#define iseuc_kr_tail(c) (iseuc_kr_tail1(c) || \ - iseuc_kr_tail2(c) || \ - iseuc_kr_tail3(c)) - - -static uint ismbchar_euc_kr(CHARSET_INFO *cs __attribute__((unused)), - const char* p, const char *e) -{ - return ((*(uchar*)(p)<0x80)? 0:\ - iseuc_kr_head(*(p)) && (e)-(p)>1 && iseuc_kr_tail(*((p)+1))? 2:\ - 0); -} - -static uint mbcharlen_euc_kr(CHARSET_INFO *cs __attribute__((unused)),uint c) -{ - return (iseuc_kr_head(c) ? 2 : 1); -} - - -static MY_UNICASE_INFO cA3[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xA340,0xA340,0x003F}, /* A340 */ - {0xA341,0xA341,0xC971}, - {0xA342,0xA342,0xC972}, - {0xA343,0xA343,0xC973}, - {0xA344,0xA344,0xC975}, - {0xA345,0xA345,0xC976}, - {0xA346,0xA346,0xC977}, - {0xA347,0xA347,0xC978}, - {0xA348,0xA348,0xC979}, - {0xA349,0xA349,0xC97A}, - {0xA34A,0xA34A,0xC97B}, - {0xA34B,0xA34B,0xC97D}, - {0xA34C,0xA34C,0xC97E}, - {0xA34D,0xA34D,0xC97F}, - {0xA34E,0xA34E,0xC980}, - {0xA34F,0xA34F,0xC981}, - {0xA350,0xA350,0xC982}, /* A350 */ - {0xA351,0xA351,0xC983}, - {0xA352,0xA352,0xC984}, - {0xA353,0xA353,0xC985}, - {0xA354,0xA354,0xC986}, - {0xA355,0xA355,0xC987}, - {0xA356,0xA356,0xC98A}, - {0xA357,0xA357,0xC98B}, - {0xA358,0xA358,0xC98D}, - {0xA359,0xA359,0xC98E}, - {0xA35A,0xA35A,0xC98F}, - {0xA35B,0xA35B,0x003F}, - {0xA35C,0xA35C,0x003F}, - {0xA35D,0xA35D,0x003F}, - {0xA35E,0xA35E,0x003F}, - {0xA35F,0xA35F,0x003F}, - {0xA360,0xA360,0x003F}, /* A360 */ - {0xA361,0xA361,0xC991}, - {0xA362,0xA362,0xC992}, - {0xA363,0xA363,0xC993}, - {0xA364,0xA364,0xC994}, - {0xA365,0xA365,0xC995}, - {0xA366,0xA366,0xC996}, - {0xA367,0xA367,0xC997}, - {0xA368,0xA368,0xC99A}, - {0xA369,0xA369,0xC99C}, - {0xA36A,0xA36A,0xC99E}, - {0xA36B,0xA36B,0xC99F}, - {0xA36C,0xA36C,0xC9A0}, - {0xA36D,0xA36D,0xC9A1}, - {0xA36E,0xA36E,0xC9A2}, - {0xA36F,0xA36F,0xC9A3}, - {0xA370,0xA370,0xC9A4}, /* A370 */ - {0xA371,0xA371,0xC9A5}, - {0xA372,0xA372,0xC9A6}, - {0xA373,0xA373,0xC9A7}, - {0xA374,0xA374,0xC9A8}, - {0xA375,0xA375,0xC9A9}, - {0xA376,0xA376,0xC9AA}, - {0xA377,0xA377,0xC9AB}, - {0xA378,0xA378,0xC9AC}, - {0xA379,0xA379,0xC9AD}, - {0xA37A,0xA37A,0xC9AE}, - {0xA37B,0xA37B,0x003F}, - {0xA37C,0xA37C,0x003F}, - {0xA37D,0xA37D,0x003F}, - {0xA37E,0xA37E,0x003F}, - {0xA37F,0xA37F,0x003F}, - {0xA380,0xA380,0x003F}, /* A380 */ - {0xA381,0xA381,0xC9AF}, - {0xA382,0xA382,0xC9B0}, - {0xA383,0xA383,0xC9B1}, - {0xA384,0xA384,0xC9B2}, - {0xA385,0xA385,0xC9B3}, - {0xA386,0xA386,0xC9B4}, - {0xA387,0xA387,0xC9B5}, - {0xA388,0xA388,0xC9B6}, - {0xA389,0xA389,0xC9B7}, - {0xA38A,0xA38A,0xC9B8}, - {0xA38B,0xA38B,0xC9B9}, - {0xA38C,0xA38C,0xC9BA}, - {0xA38D,0xA38D,0xC9BB}, - {0xA38E,0xA38E,0xC9BC}, - {0xA38F,0xA38F,0xC9BD}, - {0xA390,0xA390,0xC9BE}, /* A390 */ - {0xA391,0xA391,0xC9BF}, - {0xA392,0xA392,0xC9C2}, - {0xA393,0xA393,0xC9C3}, - {0xA394,0xA394,0xC9C5}, - {0xA395,0xA395,0xC9C6}, - {0xA396,0xA396,0xC9C9}, - {0xA397,0xA397,0xC9CB}, - {0xA398,0xA398,0xC9CC}, - {0xA399,0xA399,0xC9CD}, - {0xA39A,0xA39A,0xC9CE}, - {0xA39B,0xA39B,0xC9CF}, - {0xA39C,0xA39C,0xC9D2}, - {0xA39D,0xA39D,0xC9D4}, - {0xA39E,0xA39E,0xC9D7}, - {0xA39F,0xA39F,0xC9D8}, - {0xA3A0,0xA3A0,0xC9DB}, /* A3A0 */ - {0xA3A1,0xA3A1,0xFF01}, - {0xA3A2,0xA3A2,0xFF02}, - {0xA3A3,0xA3A3,0xFF03}, - {0xA3A4,0xA3A4,0xFF04}, - {0xA3A5,0xA3A5,0xFF05}, - {0xA3A6,0xA3A6,0xFF06}, - {0xA3A7,0xA3A7,0xFF07}, - {0xA3A8,0xA3A8,0xFF08}, - {0xA3A9,0xA3A9,0xFF09}, - {0xA3AA,0xA3AA,0xFF0A}, - {0xA3AB,0xA3AB,0xFF0B}, - {0xA3AC,0xA3AC,0xFF0C}, - {0xA3AD,0xA3AD,0xFF0D}, - {0xA3AE,0xA3AE,0xFF0E}, - {0xA3AF,0xA3AF,0xFF0F}, - {0xA3B0,0xA3B0,0xFF10}, /* A3B0 */ - {0xA3B1,0xA3B1,0xFF11}, - {0xA3B2,0xA3B2,0xFF12}, - {0xA3B3,0xA3B3,0xFF13}, - {0xA3B4,0xA3B4,0xFF14}, - {0xA3B5,0xA3B5,0xFF15}, - {0xA3B6,0xA3B6,0xFF16}, - {0xA3B7,0xA3B7,0xFF17}, - {0xA3B8,0xA3B8,0xFF18}, - {0xA3B9,0xA3B9,0xFF19}, - {0xA3BA,0xA3BA,0xFF1A}, - {0xA3BB,0xA3BB,0xFF1B}, - {0xA3BC,0xA3BC,0xFF1C}, - {0xA3BD,0xA3BD,0xFF1D}, - {0xA3BE,0xA3BE,0xFF1E}, - {0xA3BF,0xA3BF,0xFF1F}, - {0xA3C0,0xA3C0,0xFF20}, /* A3C0 */ - {0xA3C1,0xA3E1,0xFF21}, - {0xA3C2,0xA3E2,0xFF22}, - {0xA3C3,0xA3E3,0xFF23}, - {0xA3C4,0xA3E4,0xFF24}, - {0xA3C5,0xA3E5,0xFF25}, - {0xA3C6,0xA3E6,0xFF26}, - {0xA3C7,0xA3E7,0xFF27}, - {0xA3C8,0xA3E8,0xFF28}, - {0xA3C9,0xA3E9,0xFF29}, - {0xA3CA,0xA3EA,0xFF2A}, - {0xA3CB,0xA3EB,0xFF2B}, - {0xA3CC,0xA3EC,0xFF2C}, - {0xA3CD,0xA3ED,0xFF2D}, - {0xA3CE,0xA3EE,0xFF2E}, - {0xA3CF,0xA3EF,0xFF2F}, - {0xA3D0,0xA3F0,0xFF30}, /* A3D0 */ - {0xA3D1,0xA3F1,0xFF31}, - {0xA3D2,0xA3F2,0xFF32}, - {0xA3D3,0xA3F3,0xFF33}, - {0xA3D4,0xA3F4,0xFF34}, - {0xA3D5,0xA3F5,0xFF35}, - {0xA3D6,0xA3F6,0xFF36}, - {0xA3D7,0xA3F7,0xFF37}, - {0xA3D8,0xA3F8,0xFF38}, - {0xA3D9,0xA3F9,0xFF39}, - {0xA3DA,0xA3FA,0xFF3A}, - {0xA3DB,0xA3DB,0xFF3B}, - {0xA3DC,0xA3DC,0xFFE6}, - {0xA3DD,0xA3DD,0xFF3D}, - {0xA3DE,0xA3DE,0xFF3E}, - {0xA3DF,0xA3DF,0xFF3F}, - {0xA3E0,0xA3E0,0xFF40}, /* A3E0 */ - {0xA3C1,0xA3E1,0xFF41}, - {0xA3C2,0xA3E2,0xFF42}, - {0xA3C3,0xA3E3,0xFF43}, - {0xA3C4,0xA3E4,0xFF44}, - {0xA3C5,0xA3E5,0xFF45}, - {0xA3C6,0xA3E6,0xFF46}, - {0xA3C7,0xA3E7,0xFF47}, - {0xA3C8,0xA3E8,0xFF48}, - {0xA3C9,0xA3E9,0xFF49}, - {0xA3CA,0xA3EA,0xFF4A}, - {0xA3CB,0xA3EB,0xFF4B}, - {0xA3CC,0xA3EC,0xFF4C}, - {0xA3CD,0xA3ED,0xFF4D}, - {0xA3CE,0xA3EE,0xFF4E}, - {0xA3CF,0xA3EF,0xFF4F}, - {0xA3D0,0xA3F0,0xFF50}, /* A3F0 */ - {0xA3D1,0xA3F1,0xFF51}, - {0xA3D2,0xA3F2,0xFF52}, - {0xA3D3,0xA3F3,0xFF53}, - {0xA3D4,0xA3F4,0xFF54}, - {0xA3D5,0xA3F5,0xFF55}, - {0xA3D6,0xA3F6,0xFF56}, - {0xA3D7,0xA3F7,0xFF57}, - {0xA3D8,0xA3F8,0xFF58}, - {0xA3D9,0xA3F9,0xFF59}, - {0xA3DA,0xA3FA,0xFF5A}, - {0xA3FB,0xA3FB,0xFF5B}, - {0xA3FC,0xA3FC,0xFF5C}, - {0xA3FD,0xA3FD,0xFF5D}, - {0xA3FE,0xA3FE,0xFFE3}, - {0xA3FF,0xA3FF,0x003F} -}; - - -static MY_UNICASE_INFO cA5[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xA540,0xA540,0x003F}, /* A540 */ - {0xA541,0xA541,0xCA47}, - {0xA542,0xA542,0xCA48}, - {0xA543,0xA543,0xCA49}, - {0xA544,0xA544,0xCA4A}, - {0xA545,0xA545,0xCA4B}, - {0xA546,0xA546,0xCA4E}, - {0xA547,0xA547,0xCA4F}, - {0xA548,0xA548,0xCA51}, - {0xA549,0xA549,0xCA52}, - {0xA54A,0xA54A,0xCA53}, - {0xA54B,0xA54B,0xCA55}, - {0xA54C,0xA54C,0xCA56}, - {0xA54D,0xA54D,0xCA57}, - {0xA54E,0xA54E,0xCA58}, - {0xA54F,0xA54F,0xCA59}, - {0xA550,0xA550,0xCA5A}, /* A550 */ - {0xA551,0xA551,0xCA5B}, - {0xA552,0xA552,0xCA5E}, - {0xA553,0xA553,0xCA62}, - {0xA554,0xA554,0xCA63}, - {0xA555,0xA555,0xCA64}, - {0xA556,0xA556,0xCA65}, - {0xA557,0xA557,0xCA66}, - {0xA558,0xA558,0xCA67}, - {0xA559,0xA559,0xCA69}, - {0xA55A,0xA55A,0xCA6A}, - {0xA55B,0xA55B,0x003F}, - {0xA55C,0xA55C,0x003F}, - {0xA55D,0xA55D,0x003F}, - {0xA55E,0xA55E,0x003F}, - {0xA55F,0xA55F,0x003F}, - {0xA560,0xA560,0x003F}, /* A560 */ - {0xA561,0xA561,0xCA6B}, - {0xA562,0xA562,0xCA6C}, - {0xA563,0xA563,0xCA6D}, - {0xA564,0xA564,0xCA6E}, - {0xA565,0xA565,0xCA6F}, - {0xA566,0xA566,0xCA70}, - {0xA567,0xA567,0xCA71}, - {0xA568,0xA568,0xCA72}, - {0xA569,0xA569,0xCA73}, - {0xA56A,0xA56A,0xCA74}, - {0xA56B,0xA56B,0xCA75}, - {0xA56C,0xA56C,0xCA76}, - {0xA56D,0xA56D,0xCA77}, - {0xA56E,0xA56E,0xCA78}, - {0xA56F,0xA56F,0xCA79}, - {0xA570,0xA570,0xCA7A}, /* A570 */ - {0xA571,0xA571,0xCA7B}, - {0xA572,0xA572,0xCA7C}, - {0xA573,0xA573,0xCA7E}, - {0xA574,0xA574,0xCA7F}, - {0xA575,0xA575,0xCA80}, - {0xA576,0xA576,0xCA81}, - {0xA577,0xA577,0xCA82}, - {0xA578,0xA578,0xCA83}, - {0xA579,0xA579,0xCA85}, - {0xA57A,0xA57A,0xCA86}, - {0xA57B,0xA57B,0x003F}, - {0xA57C,0xA57C,0x003F}, - {0xA57D,0xA57D,0x003F}, - {0xA57E,0xA57E,0x003F}, - {0xA57F,0xA57F,0x003F}, - {0xA580,0xA580,0x003F}, /* A580 */ - {0xA581,0xA581,0xCA87}, - {0xA582,0xA582,0xCA88}, - {0xA583,0xA583,0xCA89}, - {0xA584,0xA584,0xCA8A}, - {0xA585,0xA585,0xCA8B}, - {0xA586,0xA586,0xCA8C}, - {0xA587,0xA587,0xCA8D}, - {0xA588,0xA588,0xCA8E}, - {0xA589,0xA589,0xCA8F}, - {0xA58A,0xA58A,0xCA90}, - {0xA58B,0xA58B,0xCA91}, - {0xA58C,0xA58C,0xCA92}, - {0xA58D,0xA58D,0xCA93}, - {0xA58E,0xA58E,0xCA94}, - {0xA58F,0xA58F,0xCA95}, - {0xA590,0xA590,0xCA96}, /* A590 */ - {0xA591,0xA591,0xCA97}, - {0xA592,0xA592,0xCA99}, - {0xA593,0xA593,0xCA9A}, - {0xA594,0xA594,0xCA9B}, - {0xA595,0xA595,0xCA9C}, - {0xA596,0xA596,0xCA9D}, - {0xA597,0xA597,0xCA9E}, - {0xA598,0xA598,0xCA9F}, - {0xA599,0xA599,0xCAA0}, - {0xA59A,0xA59A,0xCAA1}, - {0xA59B,0xA59B,0xCAA2}, - {0xA59C,0xA59C,0xCAA3}, - {0xA59D,0xA59D,0xCAA4}, - {0xA59E,0xA59E,0xCAA5}, - {0xA59F,0xA59F,0xCAA6}, - {0xA5A0,0xA5A0,0xCAA7}, /* A5A0 */ - {0xA5B0,0xA5A1,0x2170}, - {0xA5B1,0xA5A2,0x2171}, - {0xA5B2,0xA5A3,0x2172}, - {0xA5B3,0xA5A4,0x2173}, - {0xA5B4,0xA5A5,0x2174}, - {0xA5B5,0xA5A6,0x2175}, - {0xA5B6,0xA5A7,0x2176}, - {0xA5B7,0xA5A8,0x2177}, - {0xA5B8,0xA5A9,0x2178}, - {0xA5B9,0xA5AA,0x2179}, - {0xA5AB,0xA5AB,0x003F}, - {0xA5AC,0xA5AC,0x003F}, - {0xA5AD,0xA5AD,0x003F}, - {0xA5AE,0xA5AE,0x003F}, - {0xA5AF,0xA5AF,0x003F}, - {0xA5B0,0xA5A1,0x2160}, /* A5B0 */ - {0xA5B1,0xA5A2,0x2161}, - {0xA5B2,0xA5A3,0x2162}, - {0xA5B3,0xA5A4,0x2163}, - {0xA5B4,0xA5A5,0x2164}, - {0xA5B5,0xA5A6,0x2165}, - {0xA5B6,0xA5A7,0x2166}, - {0xA5B7,0xA5A8,0x2167}, - {0xA5B8,0xA5A9,0x2168}, - {0xA5B9,0xA5AA,0x2169}, - {0xA5BA,0xA5BA,0x003F}, - {0xA5BB,0xA5BB,0x003F}, - {0xA5BC,0xA5BC,0x003F}, - {0xA5BD,0xA5BD,0x003F}, - {0xA5BE,0xA5BE,0x003F}, - {0xA5BF,0xA5BF,0x003F}, - {0xA5C0,0xA5C0,0x003F}, /* A5C0 */ - {0xA5C1,0xA5E1,0x0391}, - {0xA5C2,0xA5E2,0x0392}, - {0xA5C3,0xA5E3,0x0393}, - {0xA5C4,0xA5E4,0x0394}, - {0xA5C5,0xA5E5,0x0395}, - {0xA5C6,0xA5E6,0x0396}, - {0xA5C7,0xA5E7,0x0397}, - {0xA5C8,0xA5E8,0x0398}, - {0xA5C9,0xA5E9,0x0399}, - {0xA5CA,0xA5EA,0x039A}, - {0xA5CB,0xA5EB,0x039B}, - {0xA5CC,0xA5EC,0x039C}, - {0xA5CD,0xA5ED,0x039D}, - {0xA5CE,0xA5EE,0x039E}, - {0xA5CF,0xA5EF,0x039F}, - {0xA5D0,0xA5F0,0x03A0}, /* A5D0 */ - {0xA5D1,0xA5F1,0x03A1}, - {0xA5D2,0xA5F2,0x03A3}, - {0xA5D3,0xA5F3,0x03A4}, - {0xA5D4,0xA5F4,0x03A5}, - {0xA5D5,0xA5F5,0x03A6}, - {0xA5D6,0xA5F6,0x03A7}, - {0xA5D7,0xA5F7,0x03A8}, - {0xA5D8,0xA5F8,0x03A9}, - {0xA5D9,0xA5D9,0x003F}, - {0xA5DA,0xA5DA,0x003F}, - {0xA5DB,0xA5DB,0x003F}, - {0xA5DC,0xA5DC,0x003F}, - {0xA5DD,0xA5DD,0x003F}, - {0xA5DE,0xA5DE,0x003F}, - {0xA5DF,0xA5DF,0x003F}, - {0xA5E0,0xA5E0,0x003F}, /* A5E0 */ - {0xA5C1,0xA5E1,0x03B1}, - {0xA5C2,0xA5E2,0x03B2}, - {0xA5C3,0xA5E3,0x03B3}, - {0xA5C4,0xA5E4,0x03B4}, - {0xA5C5,0xA5E5,0x03B5}, - {0xA5C6,0xA5E6,0x03B6}, - {0xA5C7,0xA5E7,0x03B7}, - {0xA5C8,0xA5E8,0x03B8}, - {0xA5C9,0xA5E9,0x03B9}, - {0xA5CA,0xA5EA,0x03BA}, - {0xA5CB,0xA5EB,0x03BB}, - {0xA5CC,0xA5EC,0x03BC}, - {0xA5CD,0xA5ED,0x03BD}, - {0xA5CE,0xA5EE,0x03BE}, - {0xA5CF,0xA5EF,0x03BF}, - {0xA5D0,0xA5F0,0x03C0}, /* A5F0 */ - {0xA5D1,0xA5F1,0x03C1}, - {0xA5D2,0xA5F2,0x03C3}, - {0xA5D3,0xA5F3,0x03C4}, - {0xA5D4,0xA5F4,0x03C5}, - {0xA5D5,0xA5F5,0x03C6}, - {0xA5D6,0xA5F6,0x03C7}, - {0xA5D7,0xA5F7,0x03C8}, - {0xA5D8,0xA5F8,0x03C9}, - {0xA5F9,0xA5F9,0x003F}, - {0xA5FA,0xA5FA,0x003F}, - {0xA5FB,0xA5FB,0x003F}, - {0xA5FC,0xA5FC,0x003F}, - {0xA5FD,0xA5FD,0x003F}, - {0xA5FE,0xA5FE,0x003F}, - {0xA5FF,0xA5FF,0x003F} -}; - - -static MY_UNICASE_INFO cA7[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xA740,0xA740,0x003F}, /* A740 */ - {0xA741,0xA741,0xCB0B}, - {0xA742,0xA742,0xCB0C}, - {0xA743,0xA743,0xCB0D}, - {0xA744,0xA744,0xCB0E}, - {0xA745,0xA745,0xCB0F}, - {0xA746,0xA746,0xCB11}, - {0xA747,0xA747,0xCB12}, - {0xA748,0xA748,0xCB13}, - {0xA749,0xA749,0xCB15}, - {0xA74A,0xA74A,0xCB16}, - {0xA74B,0xA74B,0xCB17}, - {0xA74C,0xA74C,0xCB19}, - {0xA74D,0xA74D,0xCB1A}, - {0xA74E,0xA74E,0xCB1B}, - {0xA74F,0xA74F,0xCB1C}, - {0xA750,0xA750,0xCB1D}, /* A750 */ - {0xA751,0xA751,0xCB1E}, - {0xA752,0xA752,0xCB1F}, - {0xA753,0xA753,0xCB22}, - {0xA754,0xA754,0xCB23}, - {0xA755,0xA755,0xCB24}, - {0xA756,0xA756,0xCB25}, - {0xA757,0xA757,0xCB26}, - {0xA758,0xA758,0xCB27}, - {0xA759,0xA759,0xCB28}, - {0xA75A,0xA75A,0xCB29}, - {0xA75B,0xA75B,0x003F}, - {0xA75C,0xA75C,0x003F}, - {0xA75D,0xA75D,0x003F}, - {0xA75E,0xA75E,0x003F}, - {0xA75F,0xA75F,0x003F}, - {0xA760,0xA760,0x003F}, /* A760 */ - {0xA761,0xA761,0xCB2A}, - {0xA762,0xA762,0xCB2B}, - {0xA763,0xA763,0xCB2C}, - {0xA764,0xA764,0xCB2D}, - {0xA765,0xA765,0xCB2E}, - {0xA766,0xA766,0xCB2F}, - {0xA767,0xA767,0xCB30}, - {0xA768,0xA768,0xCB31}, - {0xA769,0xA769,0xCB32}, - {0xA76A,0xA76A,0xCB33}, - {0xA76B,0xA76B,0xCB34}, - {0xA76C,0xA76C,0xCB35}, - {0xA76D,0xA76D,0xCB36}, - {0xA76E,0xA76E,0xCB37}, - {0xA76F,0xA76F,0xCB38}, - {0xA770,0xA770,0xCB39}, /* A770 */ - {0xA771,0xA771,0xCB3A}, - {0xA772,0xA772,0xCB3B}, - {0xA773,0xA773,0xCB3C}, - {0xA774,0xA774,0xCB3D}, - {0xA775,0xA775,0xCB3E}, - {0xA776,0xA776,0xCB3F}, - {0xA777,0xA777,0xCB40}, - {0xA778,0xA778,0xCB42}, - {0xA779,0xA779,0xCB43}, - {0xA77A,0xA77A,0xCB44}, - {0xA77B,0xA77B,0x003F}, - {0xA77C,0xA77C,0x003F}, - {0xA77D,0xA77D,0x003F}, - {0xA77E,0xA77E,0x003F}, - {0xA77F,0xA77F,0x003F}, - {0xA780,0xA780,0x003F}, /* A780 */ - {0xA781,0xA781,0xCB45}, - {0xA782,0xA782,0xCB46}, - {0xA783,0xA783,0xCB47}, - {0xA784,0xA784,0xCB4A}, - {0xA785,0xA785,0xCB4B}, - {0xA786,0xA786,0xCB4D}, - {0xA787,0xA787,0xCB4E}, - {0xA788,0xA788,0xCB4F}, - {0xA789,0xA789,0xCB51}, - {0xA78A,0xA78A,0xCB52}, - {0xA78B,0xA78B,0xCB53}, - {0xA78C,0xA78C,0xCB54}, - {0xA78D,0xA78D,0xCB55}, - {0xA78E,0xA78E,0xCB56}, - {0xA78F,0xA78F,0xCB57}, - {0xA790,0xA790,0xCB5A}, /* A790 */ - {0xA791,0xA791,0xCB5B}, - {0xA792,0xA792,0xCB5C}, - {0xA793,0xA793,0xCB5E}, - {0xA794,0xA794,0xCB5F}, - {0xA795,0xA795,0xCB60}, - {0xA796,0xA796,0xCB61}, - {0xA797,0xA797,0xCB62}, - {0xA798,0xA798,0xCB63}, - {0xA799,0xA799,0xCB65}, - {0xA79A,0xA79A,0xCB66}, - {0xA79B,0xA79B,0xCB67}, - {0xA79C,0xA79C,0xCB68}, - {0xA79D,0xA79D,0xCB69}, - {0xA79E,0xA79E,0xCB6A}, - {0xA79F,0xA79F,0xCB6B}, - {0xA7A0,0xA7A0,0xCB6C}, /* A7A0 */ - {0xA7A1,0xA7A1,0x3395}, - {0xA7A2,0xA7A2,0x3396}, - {0xA7A3,0xA7A3,0x3397}, - {0xA7A4,0xA7A4,0x2113}, - {0xA7A5,0xA7A5,0x3398}, - {0xA7A6,0xA7A6,0x33C4}, - {0xA7A7,0xA7A7,0x33A3}, - {0xA7A8,0xA7A8,0x33A4}, - {0xA7A9,0xA7A9,0x33A5}, - {0xA7AA,0xA7AA,0x33A6}, - {0xA7AB,0xA7AB,0x3399}, - {0xA7AC,0xA7AC,0x339A}, - {0xA7AD,0xA7AD,0x339B}, - {0xA7AE,0xA7AE,0x339C}, - {0xA7AF,0xA7AF,0x339D}, - {0xA7B0,0xA7B0,0x339E}, /* A7B0 */ - {0xA7B1,0xA7B1,0x339F}, - {0xA7B2,0xA7B2,0x33A0}, - {0xA7B3,0xA7B3,0x33A1}, - {0xA7B4,0xA7B4,0x33A2}, - {0xA7B5,0xA7B5,0x33CA}, - {0xA7B6,0xA7B6,0x338D}, - {0xA7B7,0xA7B7,0x338E}, - {0xA7B8,0xA7B8,0x338F}, - {0xA7B9,0xA7B9,0x33CF}, - {0xA7BA,0xA7BA,0x3388}, - {0xA7BB,0xA7BB,0x3389}, - {0xA7BC,0xA7BC,0x33C8}, - {0xA7BD,0xA7BD,0x33A7}, - {0xA7BE,0xA7BE,0x33A8}, - {0xA7BF,0xA7BF,0x33B0}, - {0xA7C0,0xA7C0,0x33B1}, /* A7C0 */ - {0xA7C1,0xA7C1,0x33B2}, - {0xA7C2,0xA7C2,0x33B3}, - {0xA7C3,0xA7C3,0x33B4}, - {0xA7C4,0xA7C4,0x33B5}, - {0xA7C5,0xA7C5,0x33B6}, - {0xA7C6,0xA7C6,0x33B7}, - {0xA7C7,0xA7C7,0x33B8}, - {0xA7C8,0xA7C8,0x33B9}, - {0xA7C9,0xA7C9,0x3380}, - {0xA7CA,0xA7CA,0x3381}, - {0xA7CB,0xA7CB,0x3382}, - {0xA7CC,0xA7CC,0x3383}, - {0xA7CD,0xA7CD,0x3384}, - {0xA7CE,0xA7CE,0x33BA}, - {0xA7CF,0xA7CF,0x33BB}, - {0xA7D0,0xA7D0,0x33BC}, /* A7D0 */ - {0xA7D1,0xA7D1,0x33BD}, - {0xA7D2,0xA7D2,0x33BE}, - {0xA7D3,0xA7D3,0x33BF}, - {0xA7D4,0xA7D4,0x3390}, - {0xA7D5,0xA7D5,0x3391}, - {0xA7D6,0xA7D6,0x3392}, - {0xA7D7,0xA7D7,0x3393}, - {0xA7D8,0xA7D8,0x3394}, - {0xA7D9,0xA5F8,0x2126}, - {0xA7DA,0xA7DA,0x33C0}, - {0xA7DB,0xA7DB,0x33C1}, - {0xA7DC,0xA7DC,0x338A}, - {0xA7DD,0xA7DD,0x338B}, - {0xA7DE,0xA7DE,0x338C}, - {0xA7DF,0xA7DF,0x33D6}, - {0xA7E0,0xA7E0,0x33C5}, /* A7E0 */ - {0xA7E1,0xA7E1,0x33AD}, - {0xA7E2,0xA7E2,0x33AE}, - {0xA7E3,0xA7E3,0x33AF}, - {0xA7E4,0xA7E4,0x33DB}, - {0xA7E5,0xA7E5,0x33A9}, - {0xA7E6,0xA7E6,0x33AA}, - {0xA7E7,0xA7E7,0x33AB}, - {0xA7E8,0xA7E8,0x33AC}, - {0xA7E9,0xA7E9,0x33DD}, - {0xA7EA,0xA7EA,0x33D0}, - {0xA7EB,0xA7EB,0x33D3}, - {0xA7EC,0xA7EC,0x33C3}, - {0xA7ED,0xA7ED,0x33C9}, - {0xA7EE,0xA7EE,0x33DC}, - {0xA7EF,0xA7EF,0x33C6}, - {0xA7F0,0xA7F0,0x003F}, /* A7F0 */ - {0xA7F1,0xA7F1,0x003F}, - {0xA7F2,0xA7F2,0x003F}, - {0xA7F3,0xA7F3,0x003F}, - {0xA7F4,0xA7F4,0x003F}, - {0xA7F5,0xA7F5,0x003F}, - {0xA7F6,0xA7F6,0x003F}, - {0xA7F7,0xA7F7,0x003F}, - {0xA7F8,0xA7F8,0x003F}, - {0xA7F9,0xA7F9,0x003F}, - {0xA7FA,0xA7FA,0x003F}, - {0xA7FB,0xA7FB,0x003F}, - {0xA7FC,0xA7FC,0x003F}, - {0xA7FD,0xA7FD,0x003F}, - {0xA7FE,0xA7FE,0x003F}, - {0xA7FF,0xA7FF,0x003F} -}; - - -static MY_UNICASE_INFO cA8[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xA840,0xA840,0x003F}, /* A840 */ - {0xA841,0xA841,0xCB6D}, - {0xA842,0xA842,0xCB6E}, - {0xA843,0xA843,0xCB6F}, - {0xA844,0xA844,0xCB70}, - {0xA845,0xA845,0xCB71}, - {0xA846,0xA846,0xCB72}, - {0xA847,0xA847,0xCB73}, - {0xA848,0xA848,0xCB74}, - {0xA849,0xA849,0xCB75}, - {0xA84A,0xA84A,0xCB76}, - {0xA84B,0xA84B,0xCB77}, - {0xA84C,0xA84C,0xCB7A}, - {0xA84D,0xA84D,0xCB7B}, - {0xA84E,0xA84E,0xCB7C}, - {0xA84F,0xA84F,0xCB7D}, - {0xA850,0xA850,0xCB7E}, /* A850 */ - {0xA851,0xA851,0xCB7F}, - {0xA852,0xA852,0xCB80}, - {0xA853,0xA853,0xCB81}, - {0xA854,0xA854,0xCB82}, - {0xA855,0xA855,0xCB83}, - {0xA856,0xA856,0xCB84}, - {0xA857,0xA857,0xCB85}, - {0xA858,0xA858,0xCB86}, - {0xA859,0xA859,0xCB87}, - {0xA85A,0xA85A,0xCB88}, - {0xA85B,0xA85B,0x003F}, - {0xA85C,0xA85C,0x003F}, - {0xA85D,0xA85D,0x003F}, - {0xA85E,0xA85E,0x003F}, - {0xA85F,0xA85F,0x003F}, - {0xA860,0xA860,0x003F}, /* A860 */ - {0xA861,0xA861,0xCB89}, - {0xA862,0xA862,0xCB8A}, - {0xA863,0xA863,0xCB8B}, - {0xA864,0xA864,0xCB8C}, - {0xA865,0xA865,0xCB8D}, - {0xA866,0xA866,0xCB8E}, - {0xA867,0xA867,0xCB8F}, - {0xA868,0xA868,0xCB90}, - {0xA869,0xA869,0xCB91}, - {0xA86A,0xA86A,0xCB92}, - {0xA86B,0xA86B,0xCB93}, - {0xA86C,0xA86C,0xCB94}, - {0xA86D,0xA86D,0xCB95}, - {0xA86E,0xA86E,0xCB96}, - {0xA86F,0xA86F,0xCB97}, - {0xA870,0xA870,0xCB98}, /* A870 */ - {0xA871,0xA871,0xCB99}, - {0xA872,0xA872,0xCB9A}, - {0xA873,0xA873,0xCB9B}, - {0xA874,0xA874,0xCB9D}, - {0xA875,0xA875,0xCB9E}, - {0xA876,0xA876,0xCB9F}, - {0xA877,0xA877,0xCBA0}, - {0xA878,0xA878,0xCBA1}, - {0xA879,0xA879,0xCBA2}, - {0xA87A,0xA87A,0xCBA3}, - {0xA87B,0xA87B,0x003F}, - {0xA87C,0xA87C,0x003F}, - {0xA87D,0xA87D,0x003F}, - {0xA87E,0xA87E,0x003F}, - {0xA87F,0xA87F,0x003F}, - {0xA880,0xA880,0x003F}, /* A880 */ - {0xA881,0xA881,0xCBA4}, - {0xA882,0xA882,0xCBA5}, - {0xA883,0xA883,0xCBA6}, - {0xA884,0xA884,0xCBA7}, - {0xA885,0xA885,0xCBA8}, - {0xA886,0xA886,0xCBA9}, - {0xA887,0xA887,0xCBAA}, - {0xA888,0xA888,0xCBAB}, - {0xA889,0xA889,0xCBAC}, - {0xA88A,0xA88A,0xCBAD}, - {0xA88B,0xA88B,0xCBAE}, - {0xA88C,0xA88C,0xCBAF}, - {0xA88D,0xA88D,0xCBB0}, - {0xA88E,0xA88E,0xCBB1}, - {0xA88F,0xA88F,0xCBB2}, - {0xA890,0xA890,0xCBB3}, /* A890 */ - {0xA891,0xA891,0xCBB4}, - {0xA892,0xA892,0xCBB5}, - {0xA893,0xA893,0xCBB6}, - {0xA894,0xA894,0xCBB7}, - {0xA895,0xA895,0xCBB9}, - {0xA896,0xA896,0xCBBA}, - {0xA897,0xA897,0xCBBB}, - {0xA898,0xA898,0xCBBC}, - {0xA899,0xA899,0xCBBD}, - {0xA89A,0xA89A,0xCBBE}, - {0xA89B,0xA89B,0xCBBF}, - {0xA89C,0xA89C,0xCBC0}, - {0xA89D,0xA89D,0xCBC1}, - {0xA89E,0xA89E,0xCBC2}, - {0xA89F,0xA89F,0xCBC3}, - {0xA8A0,0xA8A0,0xCBC4}, /* A8A0 */ - {0xA8A1,0xA9A1,0x00C6}, - {0xA8A2,0xA9A3,0x00D0}, - {0xA8A3,0xA8A3,0x00AA}, - {0xA8A4,0xA9A4,0x0126}, - {0xA8A5,0xA8A5,0x003F}, - {0xA8A6,0xA9A6,0x0132}, - {0xA8A7,0xA8A7,0x003F}, - {0xA8A8,0xA9A8,0x013F}, - {0xA8A9,0xA9A9,0x0141}, - {0xA8AA,0xA9AA,0x00D8}, - {0xA8AB,0xA9AB,0x0152}, - {0xA8AC,0xA8AC,0x00BA}, - {0xA8AD,0xA9AD,0x00DE}, - {0xA8AE,0xA9AE,0x0166}, - {0xA8AF,0xA9AF,0x014A}, - {0xA8B0,0xA8B0,0x003F}, /* A8B0 */ - {0xA8B1,0xA8B1,0x3260}, - {0xA8B2,0xA8B2,0x3261}, - {0xA8B3,0xA8B3,0x3262}, - {0xA8B4,0xA8B4,0x3263}, - {0xA8B5,0xA8B5,0x3264}, - {0xA8B6,0xA8B6,0x3265}, - {0xA8B7,0xA8B7,0x3266}, - {0xA8B8,0xA8B8,0x3267}, - {0xA8B9,0xA8B9,0x3268}, - {0xA8BA,0xA8BA,0x3269}, - {0xA8BB,0xA8BB,0x326A}, - {0xA8BC,0xA8BC,0x326B}, - {0xA8BD,0xA8BD,0x326C}, - {0xA8BE,0xA8BE,0x326D}, - {0xA8BF,0xA8BF,0x326E}, - {0xA8C0,0xA8C0,0x326F}, /* A8C0 */ - {0xA8C1,0xA8C1,0x3270}, - {0xA8C2,0xA8C2,0x3271}, - {0xA8C3,0xA8C3,0x3272}, - {0xA8C4,0xA8C4,0x3273}, - {0xA8C5,0xA8C5,0x3274}, - {0xA8C6,0xA8C6,0x3275}, - {0xA8C7,0xA8C7,0x3276}, - {0xA8C8,0xA8C8,0x3277}, - {0xA8C9,0xA8C9,0x3278}, - {0xA8CA,0xA8CA,0x3279}, - {0xA8CB,0xA8CB,0x327A}, - {0xA8CC,0xA8CC,0x327B}, - {0xA8CD,0xA8CD,0x24D0}, - {0xA8CE,0xA8CE,0x24D1}, - {0xA8CF,0xA8CF,0x24D2}, - {0xA8D0,0xA8D0,0x24D3}, /* A8D0 */ - {0xA8D1,0xA8D1,0x24D4}, - {0xA8D2,0xA8D2,0x24D5}, - {0xA8D3,0xA8D3,0x24D6}, - {0xA8D4,0xA8D4,0x24D7}, - {0xA8D5,0xA8D5,0x24D8}, - {0xA8D6,0xA8D6,0x24D9}, - {0xA8D7,0xA8D7,0x24DA}, - {0xA8D8,0xA8D8,0x24DB}, - {0xA8D9,0xA8D9,0x24DC}, - {0xA8DA,0xA8DA,0x24DD}, - {0xA8DB,0xA8DB,0x24DE}, - {0xA8DC,0xA8DC,0x24DF}, - {0xA8DD,0xA8DD,0x24E0}, - {0xA8DE,0xA8DE,0x24E1}, - {0xA8DF,0xA8DF,0x24E2}, - {0xA8E0,0xA8E0,0x24E3}, /* A8E0 */ - {0xA8E1,0xA8E1,0x24E4}, - {0xA8E2,0xA8E2,0x24E5}, - {0xA8E3,0xA8E3,0x24E6}, - {0xA8E4,0xA8E4,0x24E7}, - {0xA8E5,0xA8E5,0x24E8}, - {0xA8E6,0xA8E6,0x24E9}, - {0xA8E7,0xA8E7,0x2460}, - {0xA8E8,0xA8E8,0x2461}, - {0xA8E9,0xA8E9,0x2462}, - {0xA8EA,0xA8EA,0x2463}, - {0xA8EB,0xA8EB,0x2464}, - {0xA8EC,0xA8EC,0x2465}, - {0xA8ED,0xA8ED,0x2466}, - {0xA8EE,0xA8EE,0x2467}, - {0xA8EF,0xA8EF,0x2468}, - {0xA8F0,0xA8F0,0x2469}, /* A8F0 */ - {0xA8F1,0xA8F1,0x246A}, - {0xA8F2,0xA8F2,0x246B}, - {0xA8F3,0xA8F3,0x246C}, - {0xA8F4,0xA8F4,0x246D}, - {0xA8F5,0xA8F5,0x246E}, - {0xA8F6,0xA8F6,0x00BD}, - {0xA8F7,0xA8F7,0x2153}, - {0xA8F8,0xA8F8,0x2154}, - {0xA8F9,0xA8F9,0x00BC}, - {0xA8FA,0xA8FA,0x00BE}, - {0xA8FB,0xA8FB,0x215B}, - {0xA8FC,0xA8FC,0x215C}, - {0xA8FD,0xA8FD,0x215D}, - {0xA8FE,0xA8FE,0x215E}, - {0xA8FF,0xA8FF,0x003F} -}; - - -static MY_UNICASE_INFO cA9[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xA940,0xA940,0x003F}, /* A940 */ - {0xA941,0xA941,0xCBC5}, - {0xA942,0xA942,0xCBC6}, - {0xA943,0xA943,0xCBC7}, - {0xA944,0xA944,0xCBC8}, - {0xA945,0xA945,0xCBC9}, - {0xA946,0xA946,0xCBCA}, - {0xA947,0xA947,0xCBCB}, - {0xA948,0xA948,0xCBCC}, - {0xA949,0xA949,0xCBCD}, - {0xA94A,0xA94A,0xCBCE}, - {0xA94B,0xA94B,0xCBCF}, - {0xA94C,0xA94C,0xCBD0}, - {0xA94D,0xA94D,0xCBD1}, - {0xA94E,0xA94E,0xCBD2}, - {0xA94F,0xA94F,0xCBD3}, - {0xA950,0xA950,0xCBD5}, /* A950 */ - {0xA951,0xA951,0xCBD6}, - {0xA952,0xA952,0xCBD7}, - {0xA953,0xA953,0xCBD8}, - {0xA954,0xA954,0xCBD9}, - {0xA955,0xA955,0xCBDA}, - {0xA956,0xA956,0xCBDB}, - {0xA957,0xA957,0xCBDC}, - {0xA958,0xA958,0xCBDD}, - {0xA959,0xA959,0xCBDE}, - {0xA95A,0xA95A,0xCBDF}, - {0xA95B,0xA95B,0x003F}, - {0xA95C,0xA95C,0x003F}, - {0xA95D,0xA95D,0x003F}, - {0xA95E,0xA95E,0x003F}, - {0xA95F,0xA95F,0x003F}, - {0xA960,0xA960,0x003F}, /* A960 */ - {0xA961,0xA961,0xCBE0}, - {0xA962,0xA962,0xCBE1}, - {0xA963,0xA963,0xCBE2}, - {0xA964,0xA964,0xCBE3}, - {0xA965,0xA965,0xCBE5}, - {0xA966,0xA966,0xCBE6}, - {0xA967,0xA967,0xCBE8}, - {0xA968,0xA968,0xCBEA}, - {0xA969,0xA969,0xCBEB}, - {0xA96A,0xA96A,0xCBEC}, - {0xA96B,0xA96B,0xCBED}, - {0xA96C,0xA96C,0xCBEE}, - {0xA96D,0xA96D,0xCBEF}, - {0xA96E,0xA96E,0xCBF0}, - {0xA96F,0xA96F,0xCBF1}, - {0xA970,0xA970,0xCBF2}, /* A970 */ - {0xA971,0xA971,0xCBF3}, - {0xA972,0xA972,0xCBF4}, - {0xA973,0xA973,0xCBF5}, - {0xA974,0xA974,0xCBF6}, - {0xA975,0xA975,0xCBF7}, - {0xA976,0xA976,0xCBF8}, - {0xA977,0xA977,0xCBF9}, - {0xA978,0xA978,0xCBFA}, - {0xA979,0xA979,0xCBFB}, - {0xA97A,0xA97A,0xCBFC}, - {0xA97B,0xA97B,0x003F}, - {0xA97C,0xA97C,0x003F}, - {0xA97D,0xA97D,0x003F}, - {0xA97E,0xA97E,0x003F}, - {0xA97F,0xA97F,0x003F}, - {0xA980,0xA980,0x003F}, /* A980 */ - {0xA981,0xA981,0xCBFD}, - {0xA982,0xA982,0xCBFE}, - {0xA983,0xA983,0xCBFF}, - {0xA984,0xA984,0xCC00}, - {0xA985,0xA985,0xCC01}, - {0xA986,0xA986,0xCC02}, - {0xA987,0xA987,0xCC03}, - {0xA988,0xA988,0xCC04}, - {0xA989,0xA989,0xCC05}, - {0xA98A,0xA98A,0xCC06}, - {0xA98B,0xA98B,0xCC07}, - {0xA98C,0xA98C,0xCC08}, - {0xA98D,0xA98D,0xCC09}, - {0xA98E,0xA98E,0xCC0A}, - {0xA98F,0xA98F,0xCC0B}, - {0xA990,0xA990,0xCC0E}, /* A990 */ - {0xA991,0xA991,0xCC0F}, - {0xA992,0xA992,0xCC11}, - {0xA993,0xA993,0xCC12}, - {0xA994,0xA994,0xCC13}, - {0xA995,0xA995,0xCC15}, - {0xA996,0xA996,0xCC16}, - {0xA997,0xA997,0xCC17}, - {0xA998,0xA998,0xCC18}, - {0xA999,0xA999,0xCC19}, - {0xA99A,0xA99A,0xCC1A}, - {0xA99B,0xA99B,0xCC1B}, - {0xA99C,0xA99C,0xCC1E}, - {0xA99D,0xA99D,0xCC1F}, - {0xA99E,0xA99E,0xCC20}, - {0xA99F,0xA99F,0xCC23}, - {0xA9A0,0xA9A0,0xCC24}, /* A9A0 */ - {0xA8A1,0xA9A1,0x00E6}, - {0xA9A2,0xA9A2,0x0111}, - {0xA8A2,0xA9A3,0x00F0}, - {0xA8A4,0xA9A4,0x0127}, - { 0x49,0xA9A5,0x0131}, /* Turkish i */ - {0xA8A6,0xA9A6,0x0133}, - {0xA9A7,0xA9A7,0x0138}, - {0xA8A8,0xA9A8,0x0140}, - {0xA8A9,0xA9A9,0x0142}, - {0xA8AA,0xA9AA,0x00F8}, - {0xA8AB,0xA9AB,0x0153}, - {0xA9AC,0xA9AC,0x00DF}, - {0xA8AD,0xA9AD,0x00FE}, - {0xA8AE,0xA9AE,0x0167}, - {0xA8AF,0xA9AF,0x014B}, - {0xA9B0,0xA9B0,0x0149}, /* A9B0 */ - {0xA9B1,0xA9B1,0x3200}, - {0xA9B2,0xA9B2,0x3201}, - {0xA9B3,0xA9B3,0x3202}, - {0xA9B4,0xA9B4,0x3203}, - {0xA9B5,0xA9B5,0x3204}, - {0xA9B6,0xA9B6,0x3205}, - {0xA9B7,0xA9B7,0x3206}, - {0xA9B8,0xA9B8,0x3207}, - {0xA9B9,0xA9B9,0x3208}, - {0xA9BA,0xA9BA,0x3209}, - {0xA9BB,0xA9BB,0x320A}, - {0xA9BC,0xA9BC,0x320B}, - {0xA9BD,0xA9BD,0x320C}, - {0xA9BE,0xA9BE,0x320D}, - {0xA9BF,0xA9BF,0x320E}, - {0xA9C0,0xA9C0,0x320F}, /* A9C0 */ - {0xA9C1,0xA9C1,0x3210}, - {0xA9C2,0xA9C2,0x3211}, - {0xA9C3,0xA9C3,0x3212}, - {0xA9C4,0xA9C4,0x3213}, - {0xA9C5,0xA9C5,0x3214}, - {0xA9C6,0xA9C6,0x3215}, - {0xA9C7,0xA9C7,0x3216}, - {0xA9C8,0xA9C8,0x3217}, - {0xA9C9,0xA9C9,0x3218}, - {0xA9CA,0xA9CA,0x3219}, - {0xA9CB,0xA9CB,0x321A}, - {0xA9CC,0xA9CC,0x321B}, - {0xA9CD,0xA9CD,0x249C}, - {0xA9CE,0xA9CE,0x249D}, - {0xA9CF,0xA9CF,0x249E}, - {0xA9D0,0xA9D0,0x249F}, /* A9D0 */ - {0xA9D1,0xA9D1,0x24A0}, - {0xA9D2,0xA9D2,0x24A1}, - {0xA9D3,0xA9D3,0x24A2}, - {0xA9D4,0xA9D4,0x24A3}, - {0xA9D5,0xA9D5,0x24A4}, - {0xA9D6,0xA9D6,0x24A5}, - {0xA9D7,0xA9D7,0x24A6}, - {0xA9D8,0xA9D8,0x24A7}, - {0xA9D9,0xA9D9,0x24A8}, - {0xA9DA,0xA9DA,0x24A9}, - {0xA9DB,0xA9DB,0x24AA}, - {0xA9DC,0xA9DC,0x24AB}, - {0xA9DD,0xA9DD,0x24AC}, - {0xA9DE,0xA9DE,0x24AD}, - {0xA9DF,0xA9DF,0x24AE}, - {0xA9E0,0xA9E0,0x24AF}, /* A9E0 */ - {0xA9E1,0xA9E1,0x24B0}, - {0xA9E2,0xA9E2,0x24B1}, - {0xA9E3,0xA9E3,0x24B2}, - {0xA9E4,0xA9E4,0x24B3}, - {0xA9E5,0xA9E5,0x24B4}, - {0xA9E6,0xA9E6,0x24B5}, - {0xA9E7,0xA9E7,0x2474}, - {0xA9E8,0xA9E8,0x2475}, - {0xA9E9,0xA9E9,0x2476}, - {0xA9EA,0xA9EA,0x2477}, - {0xA9EB,0xA9EB,0x2478}, - {0xA9EC,0xA9EC,0x2479}, - {0xA9ED,0xA9ED,0x247A}, - {0xA9EE,0xA9EE,0x247B}, - {0xA9EF,0xA9EF,0x247C}, - {0xA9F0,0xA9F0,0x247D}, /* A9F0 */ - {0xA9F1,0xA9F1,0x247E}, - {0xA9F2,0xA9F2,0x247F}, - {0xA9F3,0xA9F3,0x2480}, - {0xA9F4,0xA9F4,0x2481}, - {0xA9F5,0xA9F5,0x2482}, - {0xA9F6,0xA9F6,0x00B9}, - {0xA9F7,0xA9F7,0x00B2}, - {0xA9F8,0xA9F8,0x00B3}, - {0xA9F9,0xA9F9,0x2074}, - {0xA9FA,0xA9FA,0x207F}, - {0xA9FB,0xA9FB,0x2081}, - {0xA9FC,0xA9FC,0x2082}, - {0xA9FD,0xA9FD,0x2083}, - {0xA9FE,0xA9FE,0x2084}, - {0xA9FF,0xA9FF,0x003F} -}; - - -static MY_UNICASE_INFO cAC[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xAC40,0xAC40,0x003F}, /* AC40 */ - {0xAC41,0xAC41,0xCCFE}, - {0xAC42,0xAC42,0xCCFF}, - {0xAC43,0xAC43,0xCD00}, - {0xAC44,0xAC44,0xCD02}, - {0xAC45,0xAC45,0xCD03}, - {0xAC46,0xAC46,0xCD04}, - {0xAC47,0xAC47,0xCD05}, - {0xAC48,0xAC48,0xCD06}, - {0xAC49,0xAC49,0xCD07}, - {0xAC4A,0xAC4A,0xCD0A}, - {0xAC4B,0xAC4B,0xCD0B}, - {0xAC4C,0xAC4C,0xCD0D}, - {0xAC4D,0xAC4D,0xCD0E}, - {0xAC4E,0xAC4E,0xCD0F}, - {0xAC4F,0xAC4F,0xCD11}, - {0xAC50,0xAC50,0xCD12}, /* AC50 */ - {0xAC51,0xAC51,0xCD13}, - {0xAC52,0xAC52,0xCD14}, - {0xAC53,0xAC53,0xCD15}, - {0xAC54,0xAC54,0xCD16}, - {0xAC55,0xAC55,0xCD17}, - {0xAC56,0xAC56,0xCD1A}, - {0xAC57,0xAC57,0xCD1C}, - {0xAC58,0xAC58,0xCD1E}, - {0xAC59,0xAC59,0xCD1F}, - {0xAC5A,0xAC5A,0xCD20}, - {0xAC5B,0xAC5B,0x003F}, - {0xAC5C,0xAC5C,0x003F}, - {0xAC5D,0xAC5D,0x003F}, - {0xAC5E,0xAC5E,0x003F}, - {0xAC5F,0xAC5F,0x003F}, - {0xAC60,0xAC60,0x003F}, /* AC60 */ - {0xAC61,0xAC61,0xCD21}, - {0xAC62,0xAC62,0xCD22}, - {0xAC63,0xAC63,0xCD23}, - {0xAC64,0xAC64,0xCD25}, - {0xAC65,0xAC65,0xCD26}, - {0xAC66,0xAC66,0xCD27}, - {0xAC67,0xAC67,0xCD29}, - {0xAC68,0xAC68,0xCD2A}, - {0xAC69,0xAC69,0xCD2B}, - {0xAC6A,0xAC6A,0xCD2D}, - {0xAC6B,0xAC6B,0xCD2E}, - {0xAC6C,0xAC6C,0xCD2F}, - {0xAC6D,0xAC6D,0xCD30}, - {0xAC6E,0xAC6E,0xCD31}, - {0xAC6F,0xAC6F,0xCD32}, - {0xAC70,0xAC70,0xCD33}, /* AC70 */ - {0xAC71,0xAC71,0xCD34}, - {0xAC72,0xAC72,0xCD35}, - {0xAC73,0xAC73,0xCD36}, - {0xAC74,0xAC74,0xCD37}, - {0xAC75,0xAC75,0xCD38}, - {0xAC76,0xAC76,0xCD3A}, - {0xAC77,0xAC77,0xCD3B}, - {0xAC78,0xAC78,0xCD3C}, - {0xAC79,0xAC79,0xCD3D}, - {0xAC7A,0xAC7A,0xCD3E}, - {0xAC7B,0xAC7B,0x003F}, - {0xAC7C,0xAC7C,0x003F}, - {0xAC7D,0xAC7D,0x003F}, - {0xAC7E,0xAC7E,0x003F}, - {0xAC7F,0xAC7F,0x003F}, - {0xAC80,0xAC80,0x003F}, /* AC80 */ - {0xAC81,0xAC81,0xCD3F}, - {0xAC82,0xAC82,0xCD40}, - {0xAC83,0xAC83,0xCD41}, - {0xAC84,0xAC84,0xCD42}, - {0xAC85,0xAC85,0xCD43}, - {0xAC86,0xAC86,0xCD44}, - {0xAC87,0xAC87,0xCD45}, - {0xAC88,0xAC88,0xCD46}, - {0xAC89,0xAC89,0xCD47}, - {0xAC8A,0xAC8A,0xCD48}, - {0xAC8B,0xAC8B,0xCD49}, - {0xAC8C,0xAC8C,0xCD4A}, - {0xAC8D,0xAC8D,0xCD4B}, - {0xAC8E,0xAC8E,0xCD4C}, - {0xAC8F,0xAC8F,0xCD4D}, - {0xAC90,0xAC90,0xCD4E}, /* AC90 */ - {0xAC91,0xAC91,0xCD4F}, - {0xAC92,0xAC92,0xCD50}, - {0xAC93,0xAC93,0xCD51}, - {0xAC94,0xAC94,0xCD52}, - {0xAC95,0xAC95,0xCD53}, - {0xAC96,0xAC96,0xCD54}, - {0xAC97,0xAC97,0xCD55}, - {0xAC98,0xAC98,0xCD56}, - {0xAC99,0xAC99,0xCD57}, - {0xAC9A,0xAC9A,0xCD58}, - {0xAC9B,0xAC9B,0xCD59}, - {0xAC9C,0xAC9C,0xCD5A}, - {0xAC9D,0xAC9D,0xCD5B}, - {0xAC9E,0xAC9E,0xCD5D}, - {0xAC9F,0xAC9F,0xCD5E}, - {0xACA0,0xACA0,0xCD5F}, /* ACA0 */ - {0xACA1,0xACD1,0x0410}, - {0xACA2,0xACD2,0x0411}, - {0xACA3,0xACD3,0x0412}, - {0xACA4,0xACD4,0x0413}, - {0xACA5,0xACD5,0x0414}, - {0xACA6,0xACD6,0x0415}, - {0xACA7,0xACD7,0x0401}, - {0xACA8,0xACD8,0x0416}, - {0xACA9,0xACD9,0x0417}, - {0xACAA,0xACDA,0x0418}, - {0xACAB,0xACDB,0x0419}, - {0xACAC,0xACDC,0x041A}, - {0xACAD,0xACDD,0x041B}, - {0xACAE,0xACDE,0x041C}, - {0xACAF,0xACDF,0x041D}, - {0xACB0,0xACE0,0x041E}, /* ACB0 */ - {0xACB1,0xACE1,0x041F}, - {0xACB2,0xACE2,0x0420}, - {0xACB3,0xACE3,0x0421}, - {0xACB4,0xACE4,0x0422}, - {0xACB5,0xACE5,0x0423}, - {0xACB6,0xACE6,0x0424}, - {0xACB7,0xACE7,0x0425}, - {0xACB8,0xACE8,0x0426}, - {0xACB9,0xACE9,0x0427}, - {0xACBA,0xACEA,0x0428}, - {0xACBB,0xACEB,0x0429}, - {0xACBC,0xACEC,0x042A}, - {0xACBD,0xACED,0x042B}, - {0xACBE,0xACEE,0x042C}, - {0xACBF,0xACEF,0x042D}, - {0xACC0,0xACF0,0x042E}, /* ACC0 */ - {0xACC1,0xACF1,0x042F}, - {0xACC2,0xACC2,0x003F}, - {0xACC3,0xACC3,0x003F}, - {0xACC4,0xACC4,0x003F}, - {0xACC5,0xACC5,0x003F}, - {0xACC6,0xACC6,0x003F}, - {0xACC7,0xACC7,0x003F}, - {0xACC8,0xACC8,0x003F}, - {0xACC9,0xACC9,0x003F}, - {0xACCA,0xACCA,0x003F}, - {0xACCB,0xACCB,0x003F}, - {0xACCC,0xACCC,0x003F}, - {0xACCD,0xACCD,0x003F}, - {0xACCE,0xACCE,0x003F}, - {0xACCF,0xACCF,0x003F}, - {0xACD0,0xACD0,0x003F}, /* ACD0 */ - {0xACA1,0xACD1,0x0430}, - {0xACA2,0xACD2,0x0431}, - {0xACA3,0xACD3,0x0432}, - {0xACA4,0xACD4,0x0433}, - {0xACA5,0xACD5,0x0434}, - {0xACA6,0xACD6,0x0435}, - {0xACA7,0xACD7,0x0451}, - {0xACA8,0xACD8,0x0436}, - {0xACA9,0xACD9,0x0437}, - {0xACAA,0xACDA,0x0438}, - {0xACAB,0xACDB,0x0439}, - {0xACAC,0xACDC,0x043A}, - {0xACAD,0xACDD,0x043B}, - {0xACAE,0xACDE,0x043C}, - {0xACAF,0xACDF,0x043D}, - {0xACB0,0xACE0,0x043E}, /* ACE0 */ - {0xACB1,0xACE1,0x043F}, - {0xACB2,0xACE2,0x0440}, - {0xACB3,0xACE3,0x0441}, - {0xACB4,0xACE4,0x0442}, - {0xACB5,0xACE5,0x0443}, - {0xACB6,0xACE6,0x0444}, - {0xACB7,0xACE7,0x0445}, - {0xACB8,0xACE8,0x0446}, - {0xACB9,0xACE9,0x0447}, - {0xACBA,0xACEA,0x0448}, - {0xACBB,0xACEB,0x0449}, - {0xACBC,0xACEC,0x044A}, - {0xACBD,0xACED,0x044B}, - {0xACBE,0xACEE,0x044C}, - {0xACBF,0xACEF,0x044D}, - {0xACC0,0xACF0,0x044E}, /* ACF0 */ - {0xACC1,0xACF1,0x044F}, - {0xACF2,0xACF2,0x003F}, - {0xACF3,0xACF3,0x003F}, - {0xACF4,0xACF4,0x003F}, - {0xACF5,0xACF5,0x003F}, - {0xACF6,0xACF6,0x003F}, - {0xACF7,0xACF7,0x003F}, - {0xACF8,0xACF8,0x003F}, - {0xACF9,0xACF9,0x003F}, - {0xACFA,0xACFA,0x003F}, - {0xACFB,0xACFB,0x003F}, - {0xACFC,0xACFC,0x003F}, - {0xACFD,0xACFD,0x003F}, - {0xACFE,0xACFE,0x003F}, - {0xACFF,0xACFF,0x003F} -}; - - -static MY_UNICASE_INFO *my_caseinfo_euckr[256]= -{ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 8 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, cA3, NULL, cA5, NULL, cA7, /* A */ - cA8, cA9, NULL, NULL, cAC, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* C */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* F */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - - -/* page 0 0x8141-0xC8FE */ -static uint16 tab_ksc5601_uni0[]={ -0xAC02,0xAC03,0xAC05,0xAC06,0xAC0B,0xAC0C,0xAC0D,0xAC0E, -0xAC0F,0xAC18,0xAC1E,0xAC1F,0xAC21,0xAC22,0xAC23,0xAC25, -0xAC26,0xAC27,0xAC28,0xAC29,0xAC2A,0xAC2B,0xAC2E,0xAC32, -0xAC33,0xAC34, 0, 0, 0, 0, 0, 0, -0xAC35,0xAC36,0xAC37,0xAC3A,0xAC3B,0xAC3D,0xAC3E,0xAC3F, -0xAC41,0xAC42,0xAC43,0xAC44,0xAC45,0xAC46,0xAC47,0xAC48, -0xAC49,0xAC4A,0xAC4C,0xAC4E,0xAC4F,0xAC50,0xAC51,0xAC52, -0xAC53,0xAC55, 0, 0, 0, 0, 0, 0, -0xAC56,0xAC57,0xAC59,0xAC5A,0xAC5B,0xAC5D,0xAC5E,0xAC5F, -0xAC60,0xAC61,0xAC62,0xAC63,0xAC64,0xAC65,0xAC66,0xAC67, -0xAC68,0xAC69,0xAC6A,0xAC6B,0xAC6C,0xAC6D,0xAC6E,0xAC6F, -0xAC72,0xAC73,0xAC75,0xAC76,0xAC79,0xAC7B,0xAC7C,0xAC7D, -0xAC7E,0xAC7F,0xAC82,0xAC87,0xAC88,0xAC8D,0xAC8E,0xAC8F, -0xAC91,0xAC92,0xAC93,0xAC95,0xAC96,0xAC97,0xAC98,0xAC99, -0xAC9A,0xAC9B,0xAC9E,0xACA2,0xACA3,0xACA4,0xACA5,0xACA6, -0xACA7,0xACAB,0xACAD,0xACAE,0xACB1,0xACB2,0xACB3,0xACB4, -0xACB5,0xACB6,0xACB7,0xACBA,0xACBE,0xACBF,0xACC0,0xACC2, -0xACC3,0xACC5,0xACC6,0xACC7,0xACC9,0xACCA,0xACCB,0xACCD, -0xACCE,0xACCF,0xACD0,0xACD1,0xACD2,0xACD3,0xACD4,0xACD6, -0xACD8,0xACD9,0xACDA,0xACDB,0xACDC,0xACDD,0xACDE,0xACDF, -0xACE2,0xACE3,0xACE5,0xACE6,0xACE9,0xACEB,0xACED,0xACEE, -0xACF2,0xACF4,0xACF7,0xACF8,0xACF9,0xACFA,0xACFB,0xACFE, -0xACFF,0xAD01,0xAD02,0xAD03,0xAD05,0xAD07,0xAD08,0xAD09, -0xAD0A,0xAD0B,0xAD0E,0xAD10,0xAD12,0xAD13, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xAD14,0xAD15,0xAD16,0xAD17,0xAD19,0xAD1A,0xAD1B,0xAD1D, -0xAD1E,0xAD1F,0xAD21,0xAD22,0xAD23,0xAD24,0xAD25,0xAD26, -0xAD27,0xAD28,0xAD2A,0xAD2B,0xAD2E,0xAD2F,0xAD30,0xAD31, -0xAD32,0xAD33, 0, 0, 0, 0, 0, 0, -0xAD36,0xAD37,0xAD39,0xAD3A,0xAD3B,0xAD3D,0xAD3E,0xAD3F, -0xAD40,0xAD41,0xAD42,0xAD43,0xAD46,0xAD48,0xAD4A,0xAD4B, -0xAD4C,0xAD4D,0xAD4E,0xAD4F,0xAD51,0xAD52,0xAD53,0xAD55, -0xAD56,0xAD57, 0, 0, 0, 0, 0, 0, -0xAD59,0xAD5A,0xAD5B,0xAD5C,0xAD5D,0xAD5E,0xAD5F,0xAD60, -0xAD62,0xAD64,0xAD65,0xAD66,0xAD67,0xAD68,0xAD69,0xAD6A, -0xAD6B,0xAD6E,0xAD6F,0xAD71,0xAD72,0xAD77,0xAD78,0xAD79, -0xAD7A,0xAD7E,0xAD80,0xAD83,0xAD84,0xAD85,0xAD86,0xAD87, -0xAD8A,0xAD8B,0xAD8D,0xAD8E,0xAD8F,0xAD91,0xAD92,0xAD93, -0xAD94,0xAD95,0xAD96,0xAD97,0xAD98,0xAD99,0xAD9A,0xAD9B, -0xAD9E,0xAD9F,0xADA0,0xADA1,0xADA2,0xADA3,0xADA5,0xADA6, -0xADA7,0xADA8,0xADA9,0xADAA,0xADAB,0xADAC,0xADAD,0xADAE, -0xADAF,0xADB0,0xADB1,0xADB2,0xADB3,0xADB4,0xADB5,0xADB6, -0xADB8,0xADB9,0xADBA,0xADBB,0xADBC,0xADBD,0xADBE,0xADBF, -0xADC2,0xADC3,0xADC5,0xADC6,0xADC7,0xADC9,0xADCA,0xADCB, -0xADCC,0xADCD,0xADCE,0xADCF,0xADD2,0xADD4,0xADD5,0xADD6, -0xADD7,0xADD8,0xADD9,0xADDA,0xADDB,0xADDD,0xADDE,0xADDF, -0xADE1,0xADE2,0xADE3,0xADE5,0xADE6,0xADE7,0xADE8,0xADE9, -0xADEA,0xADEB,0xADEC,0xADED,0xADEE,0xADEF,0xADF0,0xADF1, -0xADF2,0xADF3,0xADF4,0xADF5,0xADF6,0xADF7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xADFA,0xADFB,0xADFD,0xADFE,0xAE02,0xAE03,0xAE04,0xAE05, -0xAE06,0xAE07,0xAE0A,0xAE0C,0xAE0E,0xAE0F,0xAE10,0xAE11, -0xAE12,0xAE13,0xAE15,0xAE16,0xAE17,0xAE18,0xAE19,0xAE1A, -0xAE1B,0xAE1C, 0, 0, 0, 0, 0, 0, -0xAE1D,0xAE1E,0xAE1F,0xAE20,0xAE21,0xAE22,0xAE23,0xAE24, -0xAE25,0xAE26,0xAE27,0xAE28,0xAE29,0xAE2A,0xAE2B,0xAE2C, -0xAE2D,0xAE2E,0xAE2F,0xAE32,0xAE33,0xAE35,0xAE36,0xAE39, -0xAE3B,0xAE3C, 0, 0, 0, 0, 0, 0, -0xAE3D,0xAE3E,0xAE3F,0xAE42,0xAE44,0xAE47,0xAE48,0xAE49, -0xAE4B,0xAE4F,0xAE51,0xAE52,0xAE53,0xAE55,0xAE57,0xAE58, -0xAE59,0xAE5A,0xAE5B,0xAE5E,0xAE62,0xAE63,0xAE64,0xAE66, -0xAE67,0xAE6A,0xAE6B,0xAE6D,0xAE6E,0xAE6F,0xAE71,0xAE72, -0xAE73,0xAE74,0xAE75,0xAE76,0xAE77,0xAE7A,0xAE7E,0xAE7F, -0xAE80,0xAE81,0xAE82,0xAE83,0xAE86,0xAE87,0xAE88,0xAE89, -0xAE8A,0xAE8B,0xAE8D,0xAE8E,0xAE8F,0xAE90,0xAE91,0xAE92, -0xAE93,0xAE94,0xAE95,0xAE96,0xAE97,0xAE98,0xAE99,0xAE9A, -0xAE9B,0xAE9C,0xAE9D,0xAE9E,0xAE9F,0xAEA0,0xAEA1,0xAEA2, -0xAEA3,0xAEA4,0xAEA5,0xAEA6,0xAEA7,0xAEA8,0xAEA9,0xAEAA, -0xAEAB,0xAEAC,0xAEAD,0xAEAE,0xAEAF,0xAEB0,0xAEB1,0xAEB2, -0xAEB3,0xAEB4,0xAEB5,0xAEB6,0xAEB7,0xAEB8,0xAEB9,0xAEBA, -0xAEBB,0xAEBF,0xAEC1,0xAEC2,0xAEC3,0xAEC5,0xAEC6,0xAEC7, -0xAEC8,0xAEC9,0xAECA,0xAECB,0xAECE,0xAED2,0xAED3,0xAED4, -0xAED5,0xAED6,0xAED7,0xAEDA,0xAEDB,0xAEDD,0xAEDE,0xAEDF, -0xAEE0,0xAEE1,0xAEE2,0xAEE3,0xAEE4,0xAEE5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xAEE6,0xAEE7,0xAEE9,0xAEEA,0xAEEC,0xAEEE,0xAEEF,0xAEF0, -0xAEF1,0xAEF2,0xAEF3,0xAEF5,0xAEF6,0xAEF7,0xAEF9,0xAEFA, -0xAEFB,0xAEFD,0xAEFE,0xAEFF,0xAF00,0xAF01,0xAF02,0xAF03, -0xAF04,0xAF05, 0, 0, 0, 0, 0, 0, -0xAF06,0xAF09,0xAF0A,0xAF0B,0xAF0C,0xAF0E,0xAF0F,0xAF11, -0xAF12,0xAF13,0xAF14,0xAF15,0xAF16,0xAF17,0xAF18,0xAF19, -0xAF1A,0xAF1B,0xAF1C,0xAF1D,0xAF1E,0xAF1F,0xAF20,0xAF21, -0xAF22,0xAF23, 0, 0, 0, 0, 0, 0, -0xAF24,0xAF25,0xAF26,0xAF27,0xAF28,0xAF29,0xAF2A,0xAF2B, -0xAF2E,0xAF2F,0xAF31,0xAF33,0xAF35,0xAF36,0xAF37,0xAF38, -0xAF39,0xAF3A,0xAF3B,0xAF3E,0xAF40,0xAF44,0xAF45,0xAF46, -0xAF47,0xAF4A,0xAF4B,0xAF4C,0xAF4D,0xAF4E,0xAF4F,0xAF51, -0xAF52,0xAF53,0xAF54,0xAF55,0xAF56,0xAF57,0xAF58,0xAF59, -0xAF5A,0xAF5B,0xAF5E,0xAF5F,0xAF60,0xAF61,0xAF62,0xAF63, -0xAF66,0xAF67,0xAF68,0xAF69,0xAF6A,0xAF6B,0xAF6C,0xAF6D, -0xAF6E,0xAF6F,0xAF70,0xAF71,0xAF72,0xAF73,0xAF74,0xAF75, -0xAF76,0xAF77,0xAF78,0xAF7A,0xAF7B,0xAF7C,0xAF7D,0xAF7E, -0xAF7F,0xAF81,0xAF82,0xAF83,0xAF85,0xAF86,0xAF87,0xAF89, -0xAF8A,0xAF8B,0xAF8C,0xAF8D,0xAF8E,0xAF8F,0xAF92,0xAF93, -0xAF94,0xAF96,0xAF97,0xAF98,0xAF99,0xAF9A,0xAF9B,0xAF9D, -0xAF9E,0xAF9F,0xAFA0,0xAFA1,0xAFA2,0xAFA3,0xAFA4,0xAFA5, -0xAFA6,0xAFA7,0xAFA8,0xAFA9,0xAFAA,0xAFAB,0xAFAC,0xAFAD, -0xAFAE,0xAFAF,0xAFB0,0xAFB1,0xAFB2,0xAFB3,0xAFB4,0xAFB5, -0xAFB6,0xAFB7,0xAFBA,0xAFBB,0xAFBD,0xAFBE, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xAFBF,0xAFC1,0xAFC2,0xAFC3,0xAFC4,0xAFC5,0xAFC6,0xAFCA, -0xAFCC,0xAFCF,0xAFD0,0xAFD1,0xAFD2,0xAFD3,0xAFD5,0xAFD6, -0xAFD7,0xAFD8,0xAFD9,0xAFDA,0xAFDB,0xAFDD,0xAFDE,0xAFDF, -0xAFE0,0xAFE1, 0, 0, 0, 0, 0, 0, -0xAFE2,0xAFE3,0xAFE4,0xAFE5,0xAFE6,0xAFE7,0xAFEA,0xAFEB, -0xAFEC,0xAFED,0xAFEE,0xAFEF,0xAFF2,0xAFF3,0xAFF5,0xAFF6, -0xAFF7,0xAFF9,0xAFFA,0xAFFB,0xAFFC,0xAFFD,0xAFFE,0xAFFF, -0xB002,0xB003, 0, 0, 0, 0, 0, 0, -0xB005,0xB006,0xB007,0xB008,0xB009,0xB00A,0xB00B,0xB00D, -0xB00E,0xB00F,0xB011,0xB012,0xB013,0xB015,0xB016,0xB017, -0xB018,0xB019,0xB01A,0xB01B,0xB01E,0xB01F,0xB020,0xB021, -0xB022,0xB023,0xB024,0xB025,0xB026,0xB027,0xB029,0xB02A, -0xB02B,0xB02C,0xB02D,0xB02E,0xB02F,0xB030,0xB031,0xB032, -0xB033,0xB034,0xB035,0xB036,0xB037,0xB038,0xB039,0xB03A, -0xB03B,0xB03C,0xB03D,0xB03E,0xB03F,0xB040,0xB041,0xB042, -0xB043,0xB046,0xB047,0xB049,0xB04B,0xB04D,0xB04F,0xB050, -0xB051,0xB052,0xB056,0xB058,0xB05A,0xB05B,0xB05C,0xB05E, -0xB05F,0xB060,0xB061,0xB062,0xB063,0xB064,0xB065,0xB066, -0xB067,0xB068,0xB069,0xB06A,0xB06B,0xB06C,0xB06D,0xB06E, -0xB06F,0xB070,0xB071,0xB072,0xB073,0xB074,0xB075,0xB076, -0xB077,0xB078,0xB079,0xB07A,0xB07B,0xB07E,0xB07F,0xB081, -0xB082,0xB083,0xB085,0xB086,0xB087,0xB088,0xB089,0xB08A, -0xB08B,0xB08E,0xB090,0xB092,0xB093,0xB094,0xB095,0xB096, -0xB097,0xB09B,0xB09D,0xB09E,0xB0A3,0xB0A4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xB0A5,0xB0A6,0xB0A7,0xB0AA,0xB0B0,0xB0B2,0xB0B6,0xB0B7, -0xB0B9,0xB0BA,0xB0BB,0xB0BD,0xB0BE,0xB0BF,0xB0C0,0xB0C1, -0xB0C2,0xB0C3,0xB0C6,0xB0CA,0xB0CB,0xB0CC,0xB0CD,0xB0CE, -0xB0CF,0xB0D2, 0, 0, 0, 0, 0, 0, -0xB0D3,0xB0D5,0xB0D6,0xB0D7,0xB0D9,0xB0DA,0xB0DB,0xB0DC, -0xB0DD,0xB0DE,0xB0DF,0xB0E1,0xB0E2,0xB0E3,0xB0E4,0xB0E6, -0xB0E7,0xB0E8,0xB0E9,0xB0EA,0xB0EB,0xB0EC,0xB0ED,0xB0EE, -0xB0EF,0xB0F0, 0, 0, 0, 0, 0, 0, -0xB0F1,0xB0F2,0xB0F3,0xB0F4,0xB0F5,0xB0F6,0xB0F7,0xB0F8, -0xB0F9,0xB0FA,0xB0FB,0xB0FC,0xB0FD,0xB0FE,0xB0FF,0xB100, -0xB101,0xB102,0xB103,0xB104,0xB105,0xB106,0xB107,0xB10A, -0xB10D,0xB10E,0xB10F,0xB111,0xB114,0xB115,0xB116,0xB117, -0xB11A,0xB11E,0xB11F,0xB120,0xB121,0xB122,0xB126,0xB127, -0xB129,0xB12A,0xB12B,0xB12D,0xB12E,0xB12F,0xB130,0xB131, -0xB132,0xB133,0xB136,0xB13A,0xB13B,0xB13C,0xB13D,0xB13E, -0xB13F,0xB142,0xB143,0xB145,0xB146,0xB147,0xB149,0xB14A, -0xB14B,0xB14C,0xB14D,0xB14E,0xB14F,0xB152,0xB153,0xB156, -0xB157,0xB159,0xB15A,0xB15B,0xB15D,0xB15E,0xB15F,0xB161, -0xB162,0xB163,0xB164,0xB165,0xB166,0xB167,0xB168,0xB169, -0xB16A,0xB16B,0xB16C,0xB16D,0xB16E,0xB16F,0xB170,0xB171, -0xB172,0xB173,0xB174,0xB175,0xB176,0xB177,0xB17A,0xB17B, -0xB17D,0xB17E,0xB17F,0xB181,0xB183,0xB184,0xB185,0xB186, -0xB187,0xB18A,0xB18C,0xB18E,0xB18F,0xB190,0xB191,0xB195, -0xB196,0xB197,0xB199,0xB19A,0xB19B,0xB19D, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xB19E,0xB19F,0xB1A0,0xB1A1,0xB1A2,0xB1A3,0xB1A4,0xB1A5, -0xB1A6,0xB1A7,0xB1A9,0xB1AA,0xB1AB,0xB1AC,0xB1AD,0xB1AE, -0xB1AF,0xB1B0,0xB1B1,0xB1B2,0xB1B3,0xB1B4,0xB1B5,0xB1B6, -0xB1B7,0xB1B8, 0, 0, 0, 0, 0, 0, -0xB1B9,0xB1BA,0xB1BB,0xB1BC,0xB1BD,0xB1BE,0xB1BF,0xB1C0, -0xB1C1,0xB1C2,0xB1C3,0xB1C4,0xB1C5,0xB1C6,0xB1C7,0xB1C8, -0xB1C9,0xB1CA,0xB1CB,0xB1CD,0xB1CE,0xB1CF,0xB1D1,0xB1D2, -0xB1D3,0xB1D5, 0, 0, 0, 0, 0, 0, -0xB1D6,0xB1D7,0xB1D8,0xB1D9,0xB1DA,0xB1DB,0xB1DE,0xB1E0, -0xB1E1,0xB1E2,0xB1E3,0xB1E4,0xB1E5,0xB1E6,0xB1E7,0xB1EA, -0xB1EB,0xB1ED,0xB1EE,0xB1EF,0xB1F1,0xB1F2,0xB1F3,0xB1F4, -0xB1F5,0xB1F6,0xB1F7,0xB1F8,0xB1FA,0xB1FC,0xB1FE,0xB1FF, -0xB200,0xB201,0xB202,0xB203,0xB206,0xB207,0xB209,0xB20A, -0xB20D,0xB20E,0xB20F,0xB210,0xB211,0xB212,0xB213,0xB216, -0xB218,0xB21A,0xB21B,0xB21C,0xB21D,0xB21E,0xB21F,0xB221, -0xB222,0xB223,0xB224,0xB225,0xB226,0xB227,0xB228,0xB229, -0xB22A,0xB22B,0xB22C,0xB22D,0xB22E,0xB22F,0xB230,0xB231, -0xB232,0xB233,0xB235,0xB236,0xB237,0xB238,0xB239,0xB23A, -0xB23B,0xB23D,0xB23E,0xB23F,0xB240,0xB241,0xB242,0xB243, -0xB244,0xB245,0xB246,0xB247,0xB248,0xB249,0xB24A,0xB24B, -0xB24C,0xB24D,0xB24E,0xB24F,0xB250,0xB251,0xB252,0xB253, -0xB254,0xB255,0xB256,0xB257,0xB259,0xB25A,0xB25B,0xB25D, -0xB25E,0xB25F,0xB261,0xB262,0xB263,0xB264,0xB265,0xB266, -0xB267,0xB26A,0xB26B,0xB26C,0xB26D,0xB26E, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xB26F,0xB270,0xB271,0xB272,0xB273,0xB276,0xB277,0xB278, -0xB279,0xB27A,0xB27B,0xB27D,0xB27E,0xB27F,0xB280,0xB281, -0xB282,0xB283,0xB286,0xB287,0xB288,0xB28A,0xB28B,0xB28C, -0xB28D,0xB28E, 0, 0, 0, 0, 0, 0, -0xB28F,0xB292,0xB293,0xB295,0xB296,0xB297,0xB29B,0xB29C, -0xB29D,0xB29E,0xB29F,0xB2A2,0xB2A4,0xB2A7,0xB2A8,0xB2A9, -0xB2AB,0xB2AD,0xB2AE,0xB2AF,0xB2B1,0xB2B2,0xB2B3,0xB2B5, -0xB2B6,0xB2B7, 0, 0, 0, 0, 0, 0, -0xB2B8,0xB2B9,0xB2BA,0xB2BB,0xB2BC,0xB2BD,0xB2BE,0xB2BF, -0xB2C0,0xB2C1,0xB2C2,0xB2C3,0xB2C4,0xB2C5,0xB2C6,0xB2C7, -0xB2CA,0xB2CB,0xB2CD,0xB2CE,0xB2CF,0xB2D1,0xB2D3,0xB2D4, -0xB2D5,0xB2D6,0xB2D7,0xB2DA,0xB2DC,0xB2DE,0xB2DF,0xB2E0, -0xB2E1,0xB2E3,0xB2E7,0xB2E9,0xB2EA,0xB2F0,0xB2F1,0xB2F2, -0xB2F6,0xB2FC,0xB2FD,0xB2FE,0xB302,0xB303,0xB305,0xB306, -0xB307,0xB309,0xB30A,0xB30B,0xB30C,0xB30D,0xB30E,0xB30F, -0xB312,0xB316,0xB317,0xB318,0xB319,0xB31A,0xB31B,0xB31D, -0xB31E,0xB31F,0xB320,0xB321,0xB322,0xB323,0xB324,0xB325, -0xB326,0xB327,0xB328,0xB329,0xB32A,0xB32B,0xB32C,0xB32D, -0xB32E,0xB32F,0xB330,0xB331,0xB332,0xB333,0xB334,0xB335, -0xB336,0xB337,0xB338,0xB339,0xB33A,0xB33B,0xB33C,0xB33D, -0xB33E,0xB33F,0xB340,0xB341,0xB342,0xB343,0xB344,0xB345, -0xB346,0xB347,0xB348,0xB349,0xB34A,0xB34B,0xB34C,0xB34D, -0xB34E,0xB34F,0xB350,0xB351,0xB352,0xB353,0xB357,0xB359, -0xB35A,0xB35D,0xB360,0xB361,0xB362,0xB363, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xB366,0xB368,0xB36A,0xB36C,0xB36D,0xB36F,0xB372,0xB373, -0xB375,0xB376,0xB377,0xB379,0xB37A,0xB37B,0xB37C,0xB37D, -0xB37E,0xB37F,0xB382,0xB386,0xB387,0xB388,0xB389,0xB38A, -0xB38B,0xB38D, 0, 0, 0, 0, 0, 0, -0xB38E,0xB38F,0xB391,0xB392,0xB393,0xB395,0xB396,0xB397, -0xB398,0xB399,0xB39A,0xB39B,0xB39C,0xB39D,0xB39E,0xB39F, -0xB3A2,0xB3A3,0xB3A4,0xB3A5,0xB3A6,0xB3A7,0xB3A9,0xB3AA, -0xB3AB,0xB3AD, 0, 0, 0, 0, 0, 0, -0xB3AE,0xB3AF,0xB3B0,0xB3B1,0xB3B2,0xB3B3,0xB3B4,0xB3B5, -0xB3B6,0xB3B7,0xB3B8,0xB3B9,0xB3BA,0xB3BB,0xB3BC,0xB3BD, -0xB3BE,0xB3BF,0xB3C0,0xB3C1,0xB3C2,0xB3C3,0xB3C6,0xB3C7, -0xB3C9,0xB3CA,0xB3CD,0xB3CF,0xB3D1,0xB3D2,0xB3D3,0xB3D6, -0xB3D8,0xB3DA,0xB3DC,0xB3DE,0xB3DF,0xB3E1,0xB3E2,0xB3E3, -0xB3E5,0xB3E6,0xB3E7,0xB3E9,0xB3EA,0xB3EB,0xB3EC,0xB3ED, -0xB3EE,0xB3EF,0xB3F0,0xB3F1,0xB3F2,0xB3F3,0xB3F4,0xB3F5, -0xB3F6,0xB3F7,0xB3F8,0xB3F9,0xB3FA,0xB3FB,0xB3FD,0xB3FE, -0xB3FF,0xB400,0xB401,0xB402,0xB403,0xB404,0xB405,0xB406, -0xB407,0xB408,0xB409,0xB40A,0xB40B,0xB40C,0xB40D,0xB40E, -0xB40F,0xB411,0xB412,0xB413,0xB414,0xB415,0xB416,0xB417, -0xB419,0xB41A,0xB41B,0xB41D,0xB41E,0xB41F,0xB421,0xB422, -0xB423,0xB424,0xB425,0xB426,0xB427,0xB42A,0xB42C,0xB42D, -0xB42E,0xB42F,0xB430,0xB431,0xB432,0xB433,0xB435,0xB436, -0xB437,0xB438,0xB439,0xB43A,0xB43B,0xB43C,0xB43D,0xB43E, -0xB43F,0xB440,0xB441,0xB442,0xB443,0xB444, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xB445,0xB446,0xB447,0xB448,0xB449,0xB44A,0xB44B,0xB44C, -0xB44D,0xB44E,0xB44F,0xB452,0xB453,0xB455,0xB456,0xB457, -0xB459,0xB45A,0xB45B,0xB45C,0xB45D,0xB45E,0xB45F,0xB462, -0xB464,0xB466, 0, 0, 0, 0, 0, 0, -0xB467,0xB468,0xB469,0xB46A,0xB46B,0xB46D,0xB46E,0xB46F, -0xB470,0xB471,0xB472,0xB473,0xB474,0xB475,0xB476,0xB477, -0xB478,0xB479,0xB47A,0xB47B,0xB47C,0xB47D,0xB47E,0xB47F, -0xB481,0xB482, 0, 0, 0, 0, 0, 0, -0xB483,0xB484,0xB485,0xB486,0xB487,0xB489,0xB48A,0xB48B, -0xB48C,0xB48D,0xB48E,0xB48F,0xB490,0xB491,0xB492,0xB493, -0xB494,0xB495,0xB496,0xB497,0xB498,0xB499,0xB49A,0xB49B, -0xB49C,0xB49E,0xB49F,0xB4A0,0xB4A1,0xB4A2,0xB4A3,0xB4A5, -0xB4A6,0xB4A7,0xB4A9,0xB4AA,0xB4AB,0xB4AD,0xB4AE,0xB4AF, -0xB4B0,0xB4B1,0xB4B2,0xB4B3,0xB4B4,0xB4B6,0xB4B8,0xB4BA, -0xB4BB,0xB4BC,0xB4BD,0xB4BE,0xB4BF,0xB4C1,0xB4C2,0xB4C3, -0xB4C5,0xB4C6,0xB4C7,0xB4C9,0xB4CA,0xB4CB,0xB4CC,0xB4CD, -0xB4CE,0xB4CF,0xB4D1,0xB4D2,0xB4D3,0xB4D4,0xB4D6,0xB4D7, -0xB4D8,0xB4D9,0xB4DA,0xB4DB,0xB4DE,0xB4DF,0xB4E1,0xB4E2, -0xB4E5,0xB4E7,0xB4E8,0xB4E9,0xB4EA,0xB4EB,0xB4EE,0xB4F0, -0xB4F2,0xB4F3,0xB4F4,0xB4F5,0xB4F6,0xB4F7,0xB4F9,0xB4FA, -0xB4FB,0xB4FC,0xB4FD,0xB4FE,0xB4FF,0xB500,0xB501,0xB502, -0xB503,0xB504,0xB505,0xB506,0xB507,0xB508,0xB509,0xB50A, -0xB50B,0xB50C,0xB50D,0xB50E,0xB50F,0xB510,0xB511,0xB512, -0xB513,0xB516,0xB517,0xB519,0xB51A,0xB51D, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xB51E,0xB51F,0xB520,0xB521,0xB522,0xB523,0xB526,0xB52B, -0xB52C,0xB52D,0xB52E,0xB52F,0xB532,0xB533,0xB535,0xB536, -0xB537,0xB539,0xB53A,0xB53B,0xB53C,0xB53D,0xB53E,0xB53F, -0xB542,0xB546, 0, 0, 0, 0, 0, 0, -0xB547,0xB548,0xB549,0xB54A,0xB54E,0xB54F,0xB551,0xB552, -0xB553,0xB555,0xB556,0xB557,0xB558,0xB559,0xB55A,0xB55B, -0xB55E,0xB562,0xB563,0xB564,0xB565,0xB566,0xB567,0xB568, -0xB569,0xB56A, 0, 0, 0, 0, 0, 0, -0xB56B,0xB56C,0xB56D,0xB56E,0xB56F,0xB570,0xB571,0xB572, -0xB573,0xB574,0xB575,0xB576,0xB577,0xB578,0xB579,0xB57A, -0xB57B,0xB57C,0xB57D,0xB57E,0xB57F,0xB580,0xB581,0xB582, -0xB583,0xB584,0xB585,0xB586,0xB587,0xB588,0xB589,0xB58A, -0xB58B,0xB58C,0xB58D,0xB58E,0xB58F,0xB590,0xB591,0xB592, -0xB593,0xB594,0xB595,0xB596,0xB597,0xB598,0xB599,0xB59A, -0xB59B,0xB59C,0xB59D,0xB59E,0xB59F,0xB5A2,0xB5A3,0xB5A5, -0xB5A6,0xB5A7,0xB5A9,0xB5AC,0xB5AD,0xB5AE,0xB5AF,0xB5B2, -0xB5B6,0xB5B7,0xB5B8,0xB5B9,0xB5BA,0xB5BE,0xB5BF,0xB5C1, -0xB5C2,0xB5C3,0xB5C5,0xB5C6,0xB5C7,0xB5C8,0xB5C9,0xB5CA, -0xB5CB,0xB5CE,0xB5D2,0xB5D3,0xB5D4,0xB5D5,0xB5D6,0xB5D7, -0xB5D9,0xB5DA,0xB5DB,0xB5DC,0xB5DD,0xB5DE,0xB5DF,0xB5E0, -0xB5E1,0xB5E2,0xB5E3,0xB5E4,0xB5E5,0xB5E6,0xB5E7,0xB5E8, -0xB5E9,0xB5EA,0xB5EB,0xB5ED,0xB5EE,0xB5EF,0xB5F0,0xB5F1, -0xB5F2,0xB5F3,0xB5F4,0xB5F5,0xB5F6,0xB5F7,0xB5F8,0xB5F9, -0xB5FA,0xB5FB,0xB5FC,0xB5FD,0xB5FE,0xB5FF, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xB600,0xB601,0xB602,0xB603,0xB604,0xB605,0xB606,0xB607, -0xB608,0xB609,0xB60A,0xB60B,0xB60C,0xB60D,0xB60E,0xB60F, -0xB612,0xB613,0xB615,0xB616,0xB617,0xB619,0xB61A,0xB61B, -0xB61C,0xB61D, 0, 0, 0, 0, 0, 0, -0xB61E,0xB61F,0xB620,0xB621,0xB622,0xB623,0xB624,0xB626, -0xB627,0xB628,0xB629,0xB62A,0xB62B,0xB62D,0xB62E,0xB62F, -0xB630,0xB631,0xB632,0xB633,0xB635,0xB636,0xB637,0xB638, -0xB639,0xB63A, 0, 0, 0, 0, 0, 0, -0xB63B,0xB63C,0xB63D,0xB63E,0xB63F,0xB640,0xB641,0xB642, -0xB643,0xB644,0xB645,0xB646,0xB647,0xB649,0xB64A,0xB64B, -0xB64C,0xB64D,0xB64E,0xB64F,0xB650,0xB651,0xB652,0xB653, -0xB654,0xB655,0xB656,0xB657,0xB658,0xB659,0xB65A,0xB65B, -0xB65C,0xB65D,0xB65E,0xB65F,0xB660,0xB661,0xB662,0xB663, -0xB665,0xB666,0xB667,0xB669,0xB66A,0xB66B,0xB66C,0xB66D, -0xB66E,0xB66F,0xB670,0xB671,0xB672,0xB673,0xB674,0xB675, -0xB676,0xB677,0xB678,0xB679,0xB67A,0xB67B,0xB67C,0xB67D, -0xB67E,0xB67F,0xB680,0xB681,0xB682,0xB683,0xB684,0xB685, -0xB686,0xB687,0xB688,0xB689,0xB68A,0xB68B,0xB68C,0xB68D, -0xB68E,0xB68F,0xB690,0xB691,0xB692,0xB693,0xB694,0xB695, -0xB696,0xB697,0xB698,0xB699,0xB69A,0xB69B,0xB69E,0xB69F, -0xB6A1,0xB6A2,0xB6A3,0xB6A5,0xB6A6,0xB6A7,0xB6A8,0xB6A9, -0xB6AA,0xB6AD,0xB6AE,0xB6AF,0xB6B0,0xB6B2,0xB6B3,0xB6B4, -0xB6B5,0xB6B6,0xB6B7,0xB6B8,0xB6B9,0xB6BA,0xB6BB,0xB6BC, -0xB6BD,0xB6BE,0xB6BF,0xB6C0,0xB6C1,0xB6C2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xB6C3,0xB6C4,0xB6C5,0xB6C6,0xB6C7,0xB6C8,0xB6C9,0xB6CA, -0xB6CB,0xB6CC,0xB6CD,0xB6CE,0xB6CF,0xB6D0,0xB6D1,0xB6D2, -0xB6D3,0xB6D5,0xB6D6,0xB6D7,0xB6D8,0xB6D9,0xB6DA,0xB6DB, -0xB6DC,0xB6DD, 0, 0, 0, 0, 0, 0, -0xB6DE,0xB6DF,0xB6E0,0xB6E1,0xB6E2,0xB6E3,0xB6E4,0xB6E5, -0xB6E6,0xB6E7,0xB6E8,0xB6E9,0xB6EA,0xB6EB,0xB6EC,0xB6ED, -0xB6EE,0xB6EF,0xB6F1,0xB6F2,0xB6F3,0xB6F5,0xB6F6,0xB6F7, -0xB6F9,0xB6FA, 0, 0, 0, 0, 0, 0, -0xB6FB,0xB6FC,0xB6FD,0xB6FE,0xB6FF,0xB702,0xB703,0xB704, -0xB706,0xB707,0xB708,0xB709,0xB70A,0xB70B,0xB70C,0xB70D, -0xB70E,0xB70F,0xB710,0xB711,0xB712,0xB713,0xB714,0xB715, -0xB716,0xB717,0xB718,0xB719,0xB71A,0xB71B,0xB71C,0xB71D, -0xB71E,0xB71F,0xB720,0xB721,0xB722,0xB723,0xB724,0xB725, -0xB726,0xB727,0xB72A,0xB72B,0xB72D,0xB72E,0xB731,0xB732, -0xB733,0xB734,0xB735,0xB736,0xB737,0xB73A,0xB73C,0xB73D, -0xB73E,0xB73F,0xB740,0xB741,0xB742,0xB743,0xB745,0xB746, -0xB747,0xB749,0xB74A,0xB74B,0xB74D,0xB74E,0xB74F,0xB750, -0xB751,0xB752,0xB753,0xB756,0xB757,0xB758,0xB759,0xB75A, -0xB75B,0xB75C,0xB75D,0xB75E,0xB75F,0xB761,0xB762,0xB763, -0xB765,0xB766,0xB767,0xB769,0xB76A,0xB76B,0xB76C,0xB76D, -0xB76E,0xB76F,0xB772,0xB774,0xB776,0xB777,0xB778,0xB779, -0xB77A,0xB77B,0xB77E,0xB77F,0xB781,0xB782,0xB783,0xB785, -0xB786,0xB787,0xB788,0xB789,0xB78A,0xB78B,0xB78E,0xB793, -0xB794,0xB795,0xB79A,0xB79B,0xB79D,0xB79E, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xB79F,0xB7A1,0xB7A2,0xB7A3,0xB7A4,0xB7A5,0xB7A6,0xB7A7, -0xB7AA,0xB7AE,0xB7AF,0xB7B0,0xB7B1,0xB7B2,0xB7B3,0xB7B6, -0xB7B7,0xB7B9,0xB7BA,0xB7BB,0xB7BC,0xB7BD,0xB7BE,0xB7BF, -0xB7C0,0xB7C1, 0, 0, 0, 0, 0, 0, -0xB7C2,0xB7C3,0xB7C4,0xB7C5,0xB7C6,0xB7C8,0xB7CA,0xB7CB, -0xB7CC,0xB7CD,0xB7CE,0xB7CF,0xB7D0,0xB7D1,0xB7D2,0xB7D3, -0xB7D4,0xB7D5,0xB7D6,0xB7D7,0xB7D8,0xB7D9,0xB7DA,0xB7DB, -0xB7DC,0xB7DD, 0, 0, 0, 0, 0, 0, -0xB7DE,0xB7DF,0xB7E0,0xB7E1,0xB7E2,0xB7E3,0xB7E4,0xB7E5, -0xB7E6,0xB7E7,0xB7E8,0xB7E9,0xB7EA,0xB7EB,0xB7EE,0xB7EF, -0xB7F1,0xB7F2,0xB7F3,0xB7F5,0xB7F6,0xB7F7,0xB7F8,0xB7F9, -0xB7FA,0xB7FB,0xB7FE,0xB802,0xB803,0xB804,0xB805,0xB806, -0xB80A,0xB80B,0xB80D,0xB80E,0xB80F,0xB811,0xB812,0xB813, -0xB814,0xB815,0xB816,0xB817,0xB81A,0xB81C,0xB81E,0xB81F, -0xB820,0xB821,0xB822,0xB823,0xB826,0xB827,0xB829,0xB82A, -0xB82B,0xB82D,0xB82E,0xB82F,0xB830,0xB831,0xB832,0xB833, -0xB836,0xB83A,0xB83B,0xB83C,0xB83D,0xB83E,0xB83F,0xB841, -0xB842,0xB843,0xB845,0xB846,0xB847,0xB848,0xB849,0xB84A, -0xB84B,0xB84C,0xB84D,0xB84E,0xB84F,0xB850,0xB852,0xB854, -0xB855,0xB856,0xB857,0xB858,0xB859,0xB85A,0xB85B,0xB85E, -0xB85F,0xB861,0xB862,0xB863,0xB865,0xB866,0xB867,0xB868, -0xB869,0xB86A,0xB86B,0xB86E,0xB870,0xB872,0xB873,0xB874, -0xB875,0xB876,0xB877,0xB879,0xB87A,0xB87B,0xB87D,0xB87E, -0xB87F,0xB880,0xB881,0xB882,0xB883,0xB884, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xB885,0xB886,0xB887,0xB888,0xB889,0xB88A,0xB88B,0xB88C, -0xB88E,0xB88F,0xB890,0xB891,0xB892,0xB893,0xB894,0xB895, -0xB896,0xB897,0xB898,0xB899,0xB89A,0xB89B,0xB89C,0xB89D, -0xB89E,0xB89F, 0, 0, 0, 0, 0, 0, -0xB8A0,0xB8A1,0xB8A2,0xB8A3,0xB8A4,0xB8A5,0xB8A6,0xB8A7, -0xB8A9,0xB8AA,0xB8AB,0xB8AC,0xB8AD,0xB8AE,0xB8AF,0xB8B1, -0xB8B2,0xB8B3,0xB8B5,0xB8B6,0xB8B7,0xB8B9,0xB8BA,0xB8BB, -0xB8BC,0xB8BD, 0, 0, 0, 0, 0, 0, -0xB8BE,0xB8BF,0xB8C2,0xB8C4,0xB8C6,0xB8C7,0xB8C8,0xB8C9, -0xB8CA,0xB8CB,0xB8CD,0xB8CE,0xB8CF,0xB8D1,0xB8D2,0xB8D3, -0xB8D5,0xB8D6,0xB8D7,0xB8D8,0xB8D9,0xB8DA,0xB8DB,0xB8DC, -0xB8DE,0xB8E0,0xB8E2,0xB8E3,0xB8E4,0xB8E5,0xB8E6,0xB8E7, -0xB8EA,0xB8EB,0xB8ED,0xB8EE,0xB8EF,0xB8F1,0xB8F2,0xB8F3, -0xB8F4,0xB8F5,0xB8F6,0xB8F7,0xB8FA,0xB8FC,0xB8FE,0xB8FF, -0xB900,0xB901,0xB902,0xB903,0xB905,0xB906,0xB907,0xB908, -0xB909,0xB90A,0xB90B,0xB90C,0xB90D,0xB90E,0xB90F,0xB910, -0xB911,0xB912,0xB913,0xB914,0xB915,0xB916,0xB917,0xB919, -0xB91A,0xB91B,0xB91C,0xB91D,0xB91E,0xB91F,0xB921,0xB922, -0xB923,0xB924,0xB925,0xB926,0xB927,0xB928,0xB929,0xB92A, -0xB92B,0xB92C,0xB92D,0xB92E,0xB92F,0xB930,0xB931,0xB932, -0xB933,0xB934,0xB935,0xB936,0xB937,0xB938,0xB939,0xB93A, -0xB93B,0xB93E,0xB93F,0xB941,0xB942,0xB943,0xB945,0xB946, -0xB947,0xB948,0xB949,0xB94A,0xB94B,0xB94D,0xB94E,0xB950, -0xB952,0xB953,0xB954,0xB955,0xB956,0xB957, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xB95A,0xB95B,0xB95D,0xB95E,0xB95F,0xB961,0xB962,0xB963, -0xB964,0xB965,0xB966,0xB967,0xB96A,0xB96C,0xB96E,0xB96F, -0xB970,0xB971,0xB972,0xB973,0xB976,0xB977,0xB979,0xB97A, -0xB97B,0xB97D, 0, 0, 0, 0, 0, 0, -0xB97E,0xB97F,0xB980,0xB981,0xB982,0xB983,0xB986,0xB988, -0xB98B,0xB98C,0xB98F,0xB990,0xB991,0xB992,0xB993,0xB994, -0xB995,0xB996,0xB997,0xB998,0xB999,0xB99A,0xB99B,0xB99C, -0xB99D,0xB99E, 0, 0, 0, 0, 0, 0, -0xB99F,0xB9A0,0xB9A1,0xB9A2,0xB9A3,0xB9A4,0xB9A5,0xB9A6, -0xB9A7,0xB9A8,0xB9A9,0xB9AA,0xB9AB,0xB9AE,0xB9AF,0xB9B1, -0xB9B2,0xB9B3,0xB9B5,0xB9B6,0xB9B7,0xB9B8,0xB9B9,0xB9BA, -0xB9BB,0xB9BE,0xB9C0,0xB9C2,0xB9C3,0xB9C4,0xB9C5,0xB9C6, -0xB9C7,0xB9CA,0xB9CB,0xB9CD,0xB9D3,0xB9D4,0xB9D5,0xB9D6, -0xB9D7,0xB9DA,0xB9DC,0xB9DF,0xB9E0,0xB9E2,0xB9E6,0xB9E7, -0xB9E9,0xB9EA,0xB9EB,0xB9ED,0xB9EE,0xB9EF,0xB9F0,0xB9F1, -0xB9F2,0xB9F3,0xB9F6,0xB9FB,0xB9FC,0xB9FD,0xB9FE,0xB9FF, -0xBA02,0xBA03,0xBA04,0xBA05,0xBA06,0xBA07,0xBA09,0xBA0A, -0xBA0B,0xBA0C,0xBA0D,0xBA0E,0xBA0F,0xBA10,0xBA11,0xBA12, -0xBA13,0xBA14,0xBA16,0xBA17,0xBA18,0xBA19,0xBA1A,0xBA1B, -0xBA1C,0xBA1D,0xBA1E,0xBA1F,0xBA20,0xBA21,0xBA22,0xBA23, -0xBA24,0xBA25,0xBA26,0xBA27,0xBA28,0xBA29,0xBA2A,0xBA2B, -0xBA2C,0xBA2D,0xBA2E,0xBA2F,0xBA30,0xBA31,0xBA32,0xBA33, -0xBA34,0xBA35,0xBA36,0xBA37,0xBA3A,0xBA3B,0xBA3D,0xBA3E, -0xBA3F,0xBA41,0xBA43,0xBA44,0xBA45,0xBA46, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xBA47,0xBA4A,0xBA4C,0xBA4F,0xBA50,0xBA51,0xBA52,0xBA56, -0xBA57,0xBA59,0xBA5A,0xBA5B,0xBA5D,0xBA5E,0xBA5F,0xBA60, -0xBA61,0xBA62,0xBA63,0xBA66,0xBA6A,0xBA6B,0xBA6C,0xBA6D, -0xBA6E,0xBA6F, 0, 0, 0, 0, 0, 0, -0xBA72,0xBA73,0xBA75,0xBA76,0xBA77,0xBA79,0xBA7A,0xBA7B, -0xBA7C,0xBA7D,0xBA7E,0xBA7F,0xBA80,0xBA81,0xBA82,0xBA86, -0xBA88,0xBA89,0xBA8A,0xBA8B,0xBA8D,0xBA8E,0xBA8F,0xBA90, -0xBA91,0xBA92, 0, 0, 0, 0, 0, 0, -0xBA93,0xBA94,0xBA95,0xBA96,0xBA97,0xBA98,0xBA99,0xBA9A, -0xBA9B,0xBA9C,0xBA9D,0xBA9E,0xBA9F,0xBAA0,0xBAA1,0xBAA2, -0xBAA3,0xBAA4,0xBAA5,0xBAA6,0xBAA7,0xBAAA,0xBAAD,0xBAAE, -0xBAAF,0xBAB1,0xBAB3,0xBAB4,0xBAB5,0xBAB6,0xBAB7,0xBABA, -0xBABC,0xBABE,0xBABF,0xBAC0,0xBAC1,0xBAC2,0xBAC3,0xBAC5, -0xBAC6,0xBAC7,0xBAC9,0xBACA,0xBACB,0xBACC,0xBACD,0xBACE, -0xBACF,0xBAD0,0xBAD1,0xBAD2,0xBAD3,0xBAD4,0xBAD5,0xBAD6, -0xBAD7,0xBADA,0xBADB,0xBADC,0xBADD,0xBADE,0xBADF,0xBAE0, -0xBAE1,0xBAE2,0xBAE3,0xBAE4,0xBAE5,0xBAE6,0xBAE7,0xBAE8, -0xBAE9,0xBAEA,0xBAEB,0xBAEC,0xBAED,0xBAEE,0xBAEF,0xBAF0, -0xBAF1,0xBAF2,0xBAF3,0xBAF4,0xBAF5,0xBAF6,0xBAF7,0xBAF8, -0xBAF9,0xBAFA,0xBAFB,0xBAFD,0xBAFE,0xBAFF,0xBB01,0xBB02, -0xBB03,0xBB05,0xBB06,0xBB07,0xBB08,0xBB09,0xBB0A,0xBB0B, -0xBB0C,0xBB0E,0xBB10,0xBB12,0xBB13,0xBB14,0xBB15,0xBB16, -0xBB17,0xBB19,0xBB1A,0xBB1B,0xBB1D,0xBB1E,0xBB1F,0xBB21, -0xBB22,0xBB23,0xBB24,0xBB25,0xBB26,0xBB27, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xBB28,0xBB2A,0xBB2C,0xBB2D,0xBB2E,0xBB2F,0xBB30,0xBB31, -0xBB32,0xBB33,0xBB37,0xBB39,0xBB3A,0xBB3F,0xBB40,0xBB41, -0xBB42,0xBB43,0xBB46,0xBB48,0xBB4A,0xBB4B,0xBB4C,0xBB4E, -0xBB51,0xBB52, 0, 0, 0, 0, 0, 0, -0xBB53,0xBB55,0xBB56,0xBB57,0xBB59,0xBB5A,0xBB5B,0xBB5C, -0xBB5D,0xBB5E,0xBB5F,0xBB60,0xBB62,0xBB64,0xBB65,0xBB66, -0xBB67,0xBB68,0xBB69,0xBB6A,0xBB6B,0xBB6D,0xBB6E,0xBB6F, -0xBB70,0xBB71, 0, 0, 0, 0, 0, 0, -0xBB72,0xBB73,0xBB74,0xBB75,0xBB76,0xBB77,0xBB78,0xBB79, -0xBB7A,0xBB7B,0xBB7C,0xBB7D,0xBB7E,0xBB7F,0xBB80,0xBB81, -0xBB82,0xBB83,0xBB84,0xBB85,0xBB86,0xBB87,0xBB89,0xBB8A, -0xBB8B,0xBB8D,0xBB8E,0xBB8F,0xBB91,0xBB92,0xBB93,0xBB94, -0xBB95,0xBB96,0xBB97,0xBB98,0xBB99,0xBB9A,0xBB9B,0xBB9C, -0xBB9D,0xBB9E,0xBB9F,0xBBA0,0xBBA1,0xBBA2,0xBBA3,0xBBA5, -0xBBA6,0xBBA7,0xBBA9,0xBBAA,0xBBAB,0xBBAD,0xBBAE,0xBBAF, -0xBBB0,0xBBB1,0xBBB2,0xBBB3,0xBBB5,0xBBB6,0xBBB8,0xBBB9, -0xBBBA,0xBBBB,0xBBBC,0xBBBD,0xBBBE,0xBBBF,0xBBC1,0xBBC2, -0xBBC3,0xBBC5,0xBBC6,0xBBC7,0xBBC9,0xBBCA,0xBBCB,0xBBCC, -0xBBCD,0xBBCE,0xBBCF,0xBBD1,0xBBD2,0xBBD4,0xBBD5,0xBBD6, -0xBBD7,0xBBD8,0xBBD9,0xBBDA,0xBBDB,0xBBDC,0xBBDD,0xBBDE, -0xBBDF,0xBBE0,0xBBE1,0xBBE2,0xBBE3,0xBBE4,0xBBE5,0xBBE6, -0xBBE7,0xBBE8,0xBBE9,0xBBEA,0xBBEB,0xBBEC,0xBBED,0xBBEE, -0xBBEF,0xBBF0,0xBBF1,0xBBF2,0xBBF3,0xBBF4,0xBBF5,0xBBF6, -0xBBF7,0xBBFA,0xBBFB,0xBBFD,0xBBFE,0xBC01, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xBC03,0xBC04,0xBC05,0xBC06,0xBC07,0xBC0A,0xBC0E,0xBC10, -0xBC12,0xBC13,0xBC19,0xBC1A,0xBC20,0xBC21,0xBC22,0xBC23, -0xBC26,0xBC28,0xBC2A,0xBC2B,0xBC2C,0xBC2E,0xBC2F,0xBC32, -0xBC33,0xBC35, 0, 0, 0, 0, 0, 0, -0xBC36,0xBC37,0xBC39,0xBC3A,0xBC3B,0xBC3C,0xBC3D,0xBC3E, -0xBC3F,0xBC42,0xBC46,0xBC47,0xBC48,0xBC4A,0xBC4B,0xBC4E, -0xBC4F,0xBC51,0xBC52,0xBC53,0xBC54,0xBC55,0xBC56,0xBC57, -0xBC58,0xBC59, 0, 0, 0, 0, 0, 0, -0xBC5A,0xBC5B,0xBC5C,0xBC5E,0xBC5F,0xBC60,0xBC61,0xBC62, -0xBC63,0xBC64,0xBC65,0xBC66,0xBC67,0xBC68,0xBC69,0xBC6A, -0xBC6B,0xBC6C,0xBC6D,0xBC6E,0xBC6F,0xBC70,0xBC71,0xBC72, -0xBC73,0xBC74,0xBC75,0xBC76,0xBC77,0xBC78,0xBC79,0xBC7A, -0xBC7B,0xBC7C,0xBC7D,0xBC7E,0xBC7F,0xBC80,0xBC81,0xBC82, -0xBC83,0xBC86,0xBC87,0xBC89,0xBC8A,0xBC8D,0xBC8F,0xBC90, -0xBC91,0xBC92,0xBC93,0xBC96,0xBC98,0xBC9B,0xBC9C,0xBC9D, -0xBC9E,0xBC9F,0xBCA2,0xBCA3,0xBCA5,0xBCA6,0xBCA9,0xBCAA, -0xBCAB,0xBCAC,0xBCAD,0xBCAE,0xBCAF,0xBCB2,0xBCB6,0xBCB7, -0xBCB8,0xBCB9,0xBCBA,0xBCBB,0xBCBE,0xBCBF,0xBCC1,0xBCC2, -0xBCC3,0xBCC5,0xBCC6,0xBCC7,0xBCC8,0xBCC9,0xBCCA,0xBCCB, -0xBCCC,0xBCCE,0xBCD2,0xBCD3,0xBCD4,0xBCD6,0xBCD7,0xBCD9, -0xBCDA,0xBCDB,0xBCDD,0xBCDE,0xBCDF,0xBCE0,0xBCE1,0xBCE2, -0xBCE3,0xBCE4,0xBCE5,0xBCE6,0xBCE7,0xBCE8,0xBCE9,0xBCEA, -0xBCEB,0xBCEC,0xBCED,0xBCEE,0xBCEF,0xBCF0,0xBCF1,0xBCF2, -0xBCF3,0xBCF7,0xBCF9,0xBCFA,0xBCFB,0xBCFD, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xBCFE,0xBCFF,0xBD00,0xBD01,0xBD02,0xBD03,0xBD06,0xBD08, -0xBD0A,0xBD0B,0xBD0C,0xBD0D,0xBD0E,0xBD0F,0xBD11,0xBD12, -0xBD13,0xBD15,0xBD16,0xBD17,0xBD18,0xBD19,0xBD1A,0xBD1B, -0xBD1C,0xBD1D, 0, 0, 0, 0, 0, 0, -0xBD1E,0xBD1F,0xBD20,0xBD21,0xBD22,0xBD23,0xBD25,0xBD26, -0xBD27,0xBD28,0xBD29,0xBD2A,0xBD2B,0xBD2D,0xBD2E,0xBD2F, -0xBD30,0xBD31,0xBD32,0xBD33,0xBD34,0xBD35,0xBD36,0xBD37, -0xBD38,0xBD39, 0, 0, 0, 0, 0, 0, -0xBD3A,0xBD3B,0xBD3C,0xBD3D,0xBD3E,0xBD3F,0xBD41,0xBD42, -0xBD43,0xBD44,0xBD45,0xBD46,0xBD47,0xBD4A,0xBD4B,0xBD4D, -0xBD4E,0xBD4F,0xBD51,0xBD52,0xBD53,0xBD54,0xBD55,0xBD56, -0xBD57,0xBD5A,0xBD5B,0xBD5C,0xBD5D,0xBD5E,0xBD5F,0xBD60, -0xBD61,0xBD62,0xBD63,0xBD65,0xBD66,0xBD67,0xBD69,0xBD6A, -0xBD6B,0xBD6C,0xBD6D,0xBD6E,0xBD6F,0xBD70,0xBD71,0xBD72, -0xBD73,0xBD74,0xBD75,0xBD76,0xBD77,0xBD78,0xBD79,0xBD7A, -0xBD7B,0xBD7C,0xBD7D,0xBD7E,0xBD7F,0xBD82,0xBD83,0xBD85, -0xBD86,0xBD8B,0xBD8C,0xBD8D,0xBD8E,0xBD8F,0xBD92,0xBD94, -0xBD96,0xBD97,0xBD98,0xBD9B,0xBD9D,0xBD9E,0xBD9F,0xBDA0, -0xBDA1,0xBDA2,0xBDA3,0xBDA5,0xBDA6,0xBDA7,0xBDA8,0xBDA9, -0xBDAA,0xBDAB,0xBDAC,0xBDAD,0xBDAE,0xBDAF,0xBDB1,0xBDB2, -0xBDB3,0xBDB4,0xBDB5,0xBDB6,0xBDB7,0xBDB9,0xBDBA,0xBDBB, -0xBDBC,0xBDBD,0xBDBE,0xBDBF,0xBDC0,0xBDC1,0xBDC2,0xBDC3, -0xBDC4,0xBDC5,0xBDC6,0xBDC7,0xBDC8,0xBDC9,0xBDCA,0xBDCB, -0xBDCC,0xBDCD,0xBDCE,0xBDCF,0xBDD0,0xBDD1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xBDD2,0xBDD3,0xBDD6,0xBDD7,0xBDD9,0xBDDA,0xBDDB,0xBDDD, -0xBDDE,0xBDDF,0xBDE0,0xBDE1,0xBDE2,0xBDE3,0xBDE4,0xBDE5, -0xBDE6,0xBDE7,0xBDE8,0xBDEA,0xBDEB,0xBDEC,0xBDED,0xBDEE, -0xBDEF,0xBDF1, 0, 0, 0, 0, 0, 0, -0xBDF2,0xBDF3,0xBDF5,0xBDF6,0xBDF7,0xBDF9,0xBDFA,0xBDFB, -0xBDFC,0xBDFD,0xBDFE,0xBDFF,0xBE01,0xBE02,0xBE04,0xBE06, -0xBE07,0xBE08,0xBE09,0xBE0A,0xBE0B,0xBE0E,0xBE0F,0xBE11, -0xBE12,0xBE13, 0, 0, 0, 0, 0, 0, -0xBE15,0xBE16,0xBE17,0xBE18,0xBE19,0xBE1A,0xBE1B,0xBE1E, -0xBE20,0xBE21,0xBE22,0xBE23,0xBE24,0xBE25,0xBE26,0xBE27, -0xBE28,0xBE29,0xBE2A,0xBE2B,0xBE2C,0xBE2D,0xBE2E,0xBE2F, -0xBE30,0xBE31,0xBE32,0xBE33,0xBE34,0xBE35,0xBE36,0xBE37, -0xBE38,0xBE39,0xBE3A,0xBE3B,0xBE3C,0xBE3D,0xBE3E,0xBE3F, -0xBE40,0xBE41,0xBE42,0xBE43,0xBE46,0xBE47,0xBE49,0xBE4A, -0xBE4B,0xBE4D,0xBE4F,0xBE50,0xBE51,0xBE52,0xBE53,0xBE56, -0xBE58,0xBE5C,0xBE5D,0xBE5E,0xBE5F,0xBE62,0xBE63,0xBE65, -0xBE66,0xBE67,0xBE69,0xBE6B,0xBE6C,0xBE6D,0xBE6E,0xBE6F, -0xBE72,0xBE76,0xBE77,0xBE78,0xBE79,0xBE7A,0xBE7E,0xBE7F, -0xBE81,0xBE82,0xBE83,0xBE85,0xBE86,0xBE87,0xBE88,0xBE89, -0xBE8A,0xBE8B,0xBE8E,0xBE92,0xBE93,0xBE94,0xBE95,0xBE96, -0xBE97,0xBE9A,0xBE9B,0xBE9C,0xBE9D,0xBE9E,0xBE9F,0xBEA0, -0xBEA1,0xBEA2,0xBEA3,0xBEA4,0xBEA5,0xBEA6,0xBEA7,0xBEA9, -0xBEAA,0xBEAB,0xBEAC,0xBEAD,0xBEAE,0xBEAF,0xBEB0,0xBEB1, -0xBEB2,0xBEB3,0xBEB4,0xBEB5,0xBEB6,0xBEB7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xBEB8,0xBEB9,0xBEBA,0xBEBB,0xBEBC,0xBEBD,0xBEBE,0xBEBF, -0xBEC0,0xBEC1,0xBEC2,0xBEC3,0xBEC4,0xBEC5,0xBEC6,0xBEC7, -0xBEC8,0xBEC9,0xBECA,0xBECB,0xBECC,0xBECD,0xBECE,0xBECF, -0xBED2,0xBED3, 0, 0, 0, 0, 0, 0, -0xBED5,0xBED6,0xBED9,0xBEDA,0xBEDB,0xBEDC,0xBEDD,0xBEDE, -0xBEDF,0xBEE1,0xBEE2,0xBEE6,0xBEE7,0xBEE8,0xBEE9,0xBEEA, -0xBEEB,0xBEED,0xBEEE,0xBEEF,0xBEF0,0xBEF1,0xBEF2,0xBEF3, -0xBEF4,0xBEF5, 0, 0, 0, 0, 0, 0, -0xBEF6,0xBEF7,0xBEF8,0xBEF9,0xBEFA,0xBEFB,0xBEFC,0xBEFD, -0xBEFE,0xBEFF,0xBF00,0xBF02,0xBF03,0xBF04,0xBF05,0xBF06, -0xBF07,0xBF0A,0xBF0B,0xBF0C,0xBF0D,0xBF0E,0xBF0F,0xBF10, -0xBF11,0xBF12,0xBF13,0xBF14,0xBF15,0xBF16,0xBF17,0xBF1A, -0xBF1E,0xBF1F,0xBF20,0xBF21,0xBF22,0xBF23,0xBF24,0xBF25, -0xBF26,0xBF27,0xBF28,0xBF29,0xBF2A,0xBF2B,0xBF2C,0xBF2D, -0xBF2E,0xBF2F,0xBF30,0xBF31,0xBF32,0xBF33,0xBF34,0xBF35, -0xBF36,0xBF37,0xBF38,0xBF39,0xBF3A,0xBF3B,0xBF3C,0xBF3D, -0xBF3E,0xBF3F,0xBF42,0xBF43,0xBF45,0xBF46,0xBF47,0xBF49, -0xBF4A,0xBF4B,0xBF4C,0xBF4D,0xBF4E,0xBF4F,0xBF52,0xBF53, -0xBF54,0xBF56,0xBF57,0xBF58,0xBF59,0xBF5A,0xBF5B,0xBF5C, -0xBF5D,0xBF5E,0xBF5F,0xBF60,0xBF61,0xBF62,0xBF63,0xBF64, -0xBF65,0xBF66,0xBF67,0xBF68,0xBF69,0xBF6A,0xBF6B,0xBF6C, -0xBF6D,0xBF6E,0xBF6F,0xBF70,0xBF71,0xBF72,0xBF73,0xBF74, -0xBF75,0xBF76,0xBF77,0xBF78,0xBF79,0xBF7A,0xBF7B,0xBF7C, -0xBF7D,0xBF7E,0xBF7F,0xBF80,0xBF81,0xBF82, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xBF83,0xBF84,0xBF85,0xBF86,0xBF87,0xBF88,0xBF89,0xBF8A, -0xBF8B,0xBF8C,0xBF8D,0xBF8E,0xBF8F,0xBF90,0xBF91,0xBF92, -0xBF93,0xBF95,0xBF96,0xBF97,0xBF98,0xBF99,0xBF9A,0xBF9B, -0xBF9C,0xBF9D, 0, 0, 0, 0, 0, 0, -0xBF9E,0xBF9F,0xBFA0,0xBFA1,0xBFA2,0xBFA3,0xBFA4,0xBFA5, -0xBFA6,0xBFA7,0xBFA8,0xBFA9,0xBFAA,0xBFAB,0xBFAC,0xBFAD, -0xBFAE,0xBFAF,0xBFB1,0xBFB2,0xBFB3,0xBFB4,0xBFB5,0xBFB6, -0xBFB7,0xBFB8, 0, 0, 0, 0, 0, 0, -0xBFB9,0xBFBA,0xBFBB,0xBFBC,0xBFBD,0xBFBE,0xBFBF,0xBFC0, -0xBFC1,0xBFC2,0xBFC3,0xBFC4,0xBFC6,0xBFC7,0xBFC8,0xBFC9, -0xBFCA,0xBFCB,0xBFCE,0xBFCF,0xBFD1,0xBFD2,0xBFD3,0xBFD5, -0xBFD6,0xBFD7,0xBFD8,0xBFD9,0xBFDA,0xBFDB,0xBFDD,0xBFDE, -0xBFE0,0xBFE2,0xBFE3,0xBFE4,0xBFE5,0xBFE6,0xBFE7,0xBFE8, -0xBFE9,0xBFEA,0xBFEB,0xBFEC,0xBFED,0xBFEE,0xBFEF,0xBFF0, -0xBFF1,0xBFF2,0xBFF3,0xBFF4,0xBFF5,0xBFF6,0xBFF7,0xBFF8, -0xBFF9,0xBFFA,0xBFFB,0xBFFC,0xBFFD,0xBFFE,0xBFFF,0xC000, -0xC001,0xC002,0xC003,0xC004,0xC005,0xC006,0xC007,0xC008, -0xC009,0xC00A,0xC00B,0xC00C,0xC00D,0xC00E,0xC00F,0xC010, -0xC011,0xC012,0xC013,0xC014,0xC015,0xC016,0xC017,0xC018, -0xC019,0xC01A,0xC01B,0xC01C,0xC01D,0xC01E,0xC01F,0xC020, -0xC021,0xC022,0xC023,0xC024,0xC025,0xC026,0xC027,0xC028, -0xC029,0xC02A,0xC02B,0xC02C,0xC02D,0xC02E,0xC02F,0xC030, -0xC031,0xC032,0xC033,0xC034,0xC035,0xC036,0xC037,0xC038, -0xC039,0xC03A,0xC03B,0xC03D,0xC03E,0xC03F, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xC040,0xC041,0xC042,0xC043,0xC044,0xC045,0xC046,0xC047, -0xC048,0xC049,0xC04A,0xC04B,0xC04C,0xC04D,0xC04E,0xC04F, -0xC050,0xC052,0xC053,0xC054,0xC055,0xC056,0xC057,0xC059, -0xC05A,0xC05B, 0, 0, 0, 0, 0, 0, -0xC05D,0xC05E,0xC05F,0xC061,0xC062,0xC063,0xC064,0xC065, -0xC066,0xC067,0xC06A,0xC06B,0xC06C,0xC06D,0xC06E,0xC06F, -0xC070,0xC071,0xC072,0xC073,0xC074,0xC075,0xC076,0xC077, -0xC078,0xC079, 0, 0, 0, 0, 0, 0, -0xC07A,0xC07B,0xC07C,0xC07D,0xC07E,0xC07F,0xC080,0xC081, -0xC082,0xC083,0xC084,0xC085,0xC086,0xC087,0xC088,0xC089, -0xC08A,0xC08B,0xC08C,0xC08D,0xC08E,0xC08F,0xC092,0xC093, -0xC095,0xC096,0xC097,0xC099,0xC09A,0xC09B,0xC09C,0xC09D, -0xC09E,0xC09F,0xC0A2,0xC0A4,0xC0A6,0xC0A7,0xC0A8,0xC0A9, -0xC0AA,0xC0AB,0xC0AE,0xC0B1,0xC0B2,0xC0B7,0xC0B8,0xC0B9, -0xC0BA,0xC0BB,0xC0BE,0xC0C2,0xC0C3,0xC0C4,0xC0C6,0xC0C7, -0xC0CA,0xC0CB,0xC0CD,0xC0CE,0xC0CF,0xC0D1,0xC0D2,0xC0D3, -0xC0D4,0xC0D5,0xC0D6,0xC0D7,0xC0DA,0xC0DE,0xC0DF,0xC0E0, -0xC0E1,0xC0E2,0xC0E3,0xC0E6,0xC0E7,0xC0E9,0xC0EA,0xC0EB, -0xC0ED,0xC0EE,0xC0EF,0xC0F0,0xC0F1,0xC0F2,0xC0F3,0xC0F6, -0xC0F8,0xC0FA,0xC0FB,0xC0FC,0xC0FD,0xC0FE,0xC0FF,0xC101, -0xC102,0xC103,0xC105,0xC106,0xC107,0xC109,0xC10A,0xC10B, -0xC10C,0xC10D,0xC10E,0xC10F,0xC111,0xC112,0xC113,0xC114, -0xC116,0xC117,0xC118,0xC119,0xC11A,0xC11B,0xC121,0xC122, -0xC125,0xC128,0xC129,0xC12A,0xC12B,0xC12E, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xC132,0xC133,0xC134,0xC135,0xC137,0xC13A,0xC13B,0xC13D, -0xC13E,0xC13F,0xC141,0xC142,0xC143,0xC144,0xC145,0xC146, -0xC147,0xC14A,0xC14E,0xC14F,0xC150,0xC151,0xC152,0xC153, -0xC156,0xC157, 0, 0, 0, 0, 0, 0, -0xC159,0xC15A,0xC15B,0xC15D,0xC15E,0xC15F,0xC160,0xC161, -0xC162,0xC163,0xC166,0xC16A,0xC16B,0xC16C,0xC16D,0xC16E, -0xC16F,0xC171,0xC172,0xC173,0xC175,0xC176,0xC177,0xC179, -0xC17A,0xC17B, 0, 0, 0, 0, 0, 0, -0xC17C,0xC17D,0xC17E,0xC17F,0xC180,0xC181,0xC182,0xC183, -0xC184,0xC186,0xC187,0xC188,0xC189,0xC18A,0xC18B,0xC18F, -0xC191,0xC192,0xC193,0xC195,0xC197,0xC198,0xC199,0xC19A, -0xC19B,0xC19E,0xC1A0,0xC1A2,0xC1A3,0xC1A4,0xC1A6,0xC1A7, -0xC1AA,0xC1AB,0xC1AD,0xC1AE,0xC1AF,0xC1B1,0xC1B2,0xC1B3, -0xC1B4,0xC1B5,0xC1B6,0xC1B7,0xC1B8,0xC1B9,0xC1BA,0xC1BB, -0xC1BC,0xC1BE,0xC1BF,0xC1C0,0xC1C1,0xC1C2,0xC1C3,0xC1C5, -0xC1C6,0xC1C7,0xC1C9,0xC1CA,0xC1CB,0xC1CD,0xC1CE,0xC1CF, -0xC1D0,0xC1D1,0xC1D2,0xC1D3,0xC1D5,0xC1D6,0xC1D9,0xC1DA, -0xC1DB,0xC1DC,0xC1DD,0xC1DE,0xC1DF,0xC1E1,0xC1E2,0xC1E3, -0xC1E5,0xC1E6,0xC1E7,0xC1E9,0xC1EA,0xC1EB,0xC1EC,0xC1ED, -0xC1EE,0xC1EF,0xC1F2,0xC1F4,0xC1F5,0xC1F6,0xC1F7,0xC1F8, -0xC1F9,0xC1FA,0xC1FB,0xC1FE,0xC1FF,0xC201,0xC202,0xC203, -0xC205,0xC206,0xC207,0xC208,0xC209,0xC20A,0xC20B,0xC20E, -0xC210,0xC212,0xC213,0xC214,0xC215,0xC216,0xC217,0xC21A, -0xC21B,0xC21D,0xC21E,0xC221,0xC222,0xC223, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xC224,0xC225,0xC226,0xC227,0xC22A,0xC22C,0xC22E,0xC230, -0xC233,0xC235,0xC236,0xC237,0xC238,0xC239,0xC23A,0xC23B, -0xC23C,0xC23D,0xC23E,0xC23F,0xC240,0xC241,0xC242,0xC243, -0xC244,0xC245, 0, 0, 0, 0, 0, 0, -0xC246,0xC247,0xC249,0xC24A,0xC24B,0xC24C,0xC24D,0xC24E, -0xC24F,0xC252,0xC253,0xC255,0xC256,0xC257,0xC259,0xC25A, -0xC25B,0xC25C,0xC25D,0xC25E,0xC25F,0xC261,0xC262,0xC263, -0xC264,0xC266, 0, 0, 0, 0, 0, 0, -0xC267,0xC268,0xC269,0xC26A,0xC26B,0xC26E,0xC26F,0xC271, -0xC272,0xC273,0xC275,0xC276,0xC277,0xC278,0xC279,0xC27A, -0xC27B,0xC27E,0xC280,0xC282,0xC283,0xC284,0xC285,0xC286, -0xC287,0xC28A,0xC28B,0xC28C,0xC28D,0xC28E,0xC28F,0xC291, -0xC292,0xC293,0xC294,0xC295,0xC296,0xC297,0xC299,0xC29A, -0xC29C,0xC29E,0xC29F,0xC2A0,0xC2A1,0xC2A2,0xC2A3,0xC2A6, -0xC2A7,0xC2A9,0xC2AA,0xC2AB,0xC2AE,0xC2AF,0xC2B0,0xC2B1, -0xC2B2,0xC2B3,0xC2B6,0xC2B8,0xC2BA,0xC2BB,0xC2BC,0xC2BD, -0xC2BE,0xC2BF,0xC2C0,0xC2C1,0xC2C2,0xC2C3,0xC2C4,0xC2C5, -0xC2C6,0xC2C7,0xC2C8,0xC2C9,0xC2CA,0xC2CB,0xC2CC,0xC2CD, -0xC2CE,0xC2CF,0xC2D0,0xC2D1,0xC2D2,0xC2D3,0xC2D4,0xC2D5, -0xC2D6,0xC2D7,0xC2D8,0xC2D9,0xC2DA,0xC2DB,0xC2DE,0xC2DF, -0xC2E1,0xC2E2,0xC2E5,0xC2E6,0xC2E7,0xC2E8,0xC2E9,0xC2EA, -0xC2EE,0xC2F0,0xC2F2,0xC2F3,0xC2F4,0xC2F5,0xC2F7,0xC2FA, -0xC2FD,0xC2FE,0xC2FF,0xC301,0xC302,0xC303,0xC304,0xC305, -0xC306,0xC307,0xC30A,0xC30B,0xC30E,0xC30F, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xC310,0xC311,0xC312,0xC316,0xC317,0xC319,0xC31A,0xC31B, -0xC31D,0xC31E,0xC31F,0xC320,0xC321,0xC322,0xC323,0xC326, -0xC327,0xC32A,0xC32B,0xC32C,0xC32D,0xC32E,0xC32F,0xC330, -0xC331,0xC332, 0, 0, 0, 0, 0, 0, -0xC333,0xC334,0xC335,0xC336,0xC337,0xC338,0xC339,0xC33A, -0xC33B,0xC33C,0xC33D,0xC33E,0xC33F,0xC340,0xC341,0xC342, -0xC343,0xC344,0xC346,0xC347,0xC348,0xC349,0xC34A,0xC34B, -0xC34C,0xC34D, 0, 0, 0, 0, 0, 0, -0xC34E,0xC34F,0xC350,0xC351,0xC352,0xC353,0xC354,0xC355, -0xC356,0xC357,0xC358,0xC359,0xC35A,0xC35B,0xC35C,0xC35D, -0xC35E,0xC35F,0xC360,0xC361,0xC362,0xC363,0xC364,0xC365, -0xC366,0xC367,0xC36A,0xC36B,0xC36D,0xC36E,0xC36F,0xC371, -0xC373,0xC374,0xC375,0xC376,0xC377,0xC37A,0xC37B,0xC37E, -0xC37F,0xC380,0xC381,0xC382,0xC383,0xC385,0xC386,0xC387, -0xC389,0xC38A,0xC38B,0xC38D,0xC38E,0xC38F,0xC390,0xC391, -0xC392,0xC393,0xC394,0xC395,0xC396,0xC397,0xC398,0xC399, -0xC39A,0xC39B,0xC39C,0xC39D,0xC39E,0xC39F,0xC3A0,0xC3A1, -0xC3A2,0xC3A3,0xC3A4,0xC3A5,0xC3A6,0xC3A7,0xC3A8,0xC3A9, -0xC3AA,0xC3AB,0xC3AC,0xC3AD,0xC3AE,0xC3AF,0xC3B0,0xC3B1, -0xC3B2,0xC3B3,0xC3B4,0xC3B5,0xC3B6,0xC3B7,0xC3B8,0xC3B9, -0xC3BA,0xC3BB,0xC3BC,0xC3BD,0xC3BE,0xC3BF,0xC3C1,0xC3C2, -0xC3C3,0xC3C4,0xC3C5,0xC3C6,0xC3C7,0xC3C8,0xC3C9,0xC3CA, -0xC3CB,0xC3CC,0xC3CD,0xC3CE,0xC3CF,0xC3D0,0xC3D1,0xC3D2, -0xC3D3,0xC3D4,0xC3D5,0xC3D6,0xC3D7,0xC3DA, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xC3DB,0xC3DD,0xC3DE,0xC3E1,0xC3E3,0xC3E4,0xC3E5,0xC3E6, -0xC3E7,0xC3EA,0xC3EB,0xC3EC,0xC3EE,0xC3EF,0xC3F0,0xC3F1, -0xC3F2,0xC3F3,0xC3F6,0xC3F7,0xC3F9,0xC3FA,0xC3FB,0xC3FC, -0xC3FD,0xC3FE, 0, 0, 0, 0, 0, 0, -0xC3FF,0xC400,0xC401,0xC402,0xC403,0xC404,0xC405,0xC406, -0xC407,0xC409,0xC40A,0xC40B,0xC40C,0xC40D,0xC40E,0xC40F, -0xC411,0xC412,0xC413,0xC414,0xC415,0xC416,0xC417,0xC418, -0xC419,0xC41A, 0, 0, 0, 0, 0, 0, -0xC41B,0xC41C,0xC41D,0xC41E,0xC41F,0xC420,0xC421,0xC422, -0xC423,0xC425,0xC426,0xC427,0xC428,0xC429,0xC42A,0xC42B, -0xC42D,0xC42E,0xC42F,0xC431,0xC432,0xC433,0xC435,0xC436, -0xC437,0xC438,0xC439,0xC43A,0xC43B,0xC43E,0xC43F,0xC440, -0xC441,0xC442,0xC443,0xC444,0xC445,0xC446,0xC447,0xC449, -0xC44A,0xC44B,0xC44C,0xC44D,0xC44E,0xC44F,0xC450,0xC451, -0xC452,0xC453,0xC454,0xC455,0xC456,0xC457,0xC458,0xC459, -0xC45A,0xC45B,0xC45C,0xC45D,0xC45E,0xC45F,0xC460,0xC461, -0xC462,0xC463,0xC466,0xC467,0xC469,0xC46A,0xC46B,0xC46D, -0xC46E,0xC46F,0xC470,0xC471,0xC472,0xC473,0xC476,0xC477, -0xC478,0xC47A,0xC47B,0xC47C,0xC47D,0xC47E,0xC47F,0xC481, -0xC482,0xC483,0xC484,0xC485,0xC486,0xC487,0xC488,0xC489, -0xC48A,0xC48B,0xC48C,0xC48D,0xC48E,0xC48F,0xC490,0xC491, -0xC492,0xC493,0xC495,0xC496,0xC497,0xC498,0xC499,0xC49A, -0xC49B,0xC49D,0xC49E,0xC49F,0xC4A0,0xC4A1,0xC4A2,0xC4A3, -0xC4A4,0xC4A5,0xC4A6,0xC4A7,0xC4A8,0xC4A9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xC4AA,0xC4AB,0xC4AC,0xC4AD,0xC4AE,0xC4AF,0xC4B0,0xC4B1, -0xC4B2,0xC4B3,0xC4B4,0xC4B5,0xC4B6,0xC4B7,0xC4B9,0xC4BA, -0xC4BB,0xC4BD,0xC4BE,0xC4BF,0xC4C0,0xC4C1,0xC4C2,0xC4C3, -0xC4C4,0xC4C5, 0, 0, 0, 0, 0, 0, -0xC4C6,0xC4C7,0xC4C8,0xC4C9,0xC4CA,0xC4CB,0xC4CC,0xC4CD, -0xC4CE,0xC4CF,0xC4D0,0xC4D1,0xC4D2,0xC4D3,0xC4D4,0xC4D5, -0xC4D6,0xC4D7,0xC4D8,0xC4D9,0xC4DA,0xC4DB,0xC4DC,0xC4DD, -0xC4DE,0xC4DF, 0, 0, 0, 0, 0, 0, -0xC4E0,0xC4E1,0xC4E2,0xC4E3,0xC4E4,0xC4E5,0xC4E6,0xC4E7, -0xC4E8,0xC4EA,0xC4EB,0xC4EC,0xC4ED,0xC4EE,0xC4EF,0xC4F2, -0xC4F3,0xC4F5,0xC4F6,0xC4F7,0xC4F9,0xC4FB,0xC4FC,0xC4FD, -0xC4FE,0xC502,0xC503,0xC504,0xC505,0xC506,0xC507,0xC508, -0xC509,0xC50A,0xC50B,0xC50D,0xC50E,0xC50F,0xC511,0xC512, -0xC513,0xC515,0xC516,0xC517,0xC518,0xC519,0xC51A,0xC51B, -0xC51D,0xC51E,0xC51F,0xC520,0xC521,0xC522,0xC523,0xC524, -0xC525,0xC526,0xC527,0xC52A,0xC52B,0xC52D,0xC52E,0xC52F, -0xC531,0xC532,0xC533,0xC534,0xC535,0xC536,0xC537,0xC53A, -0xC53C,0xC53E,0xC53F,0xC540,0xC541,0xC542,0xC543,0xC546, -0xC547,0xC54B,0xC54F,0xC550,0xC551,0xC552,0xC556,0xC55A, -0xC55B,0xC55C,0xC55F,0xC562,0xC563,0xC565,0xC566,0xC567, -0xC569,0xC56A,0xC56B,0xC56C,0xC56D,0xC56E,0xC56F,0xC572, -0xC576,0xC577,0xC578,0xC579,0xC57A,0xC57B,0xC57E,0xC57F, -0xC581,0xC582,0xC583,0xC585,0xC586,0xC588,0xC589,0xC58A, -0xC58B,0xC58E,0xC590,0xC592,0xC593,0xC594, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xC596,0xC599,0xC59A,0xC59B,0xC59D,0xC59E,0xC59F,0xC5A1, -0xC5A2,0xC5A3,0xC5A4,0xC5A5,0xC5A6,0xC5A7,0xC5A8,0xC5AA, -0xC5AB,0xC5AC,0xC5AD,0xC5AE,0xC5AF,0xC5B0,0xC5B1,0xC5B2, -0xC5B3,0xC5B6, 0, 0, 0, 0, 0, 0, -0xC5B7,0xC5BA,0xC5BF,0xC5C0,0xC5C1,0xC5C2,0xC5C3,0xC5CB, -0xC5CD,0xC5CF,0xC5D2,0xC5D3,0xC5D5,0xC5D6,0xC5D7,0xC5D9, -0xC5DA,0xC5DB,0xC5DC,0xC5DD,0xC5DE,0xC5DF,0xC5E2,0xC5E4, -0xC5E6,0xC5E7, 0, 0, 0, 0, 0, 0, -0xC5E8,0xC5E9,0xC5EA,0xC5EB,0xC5EF,0xC5F1,0xC5F2,0xC5F3, -0xC5F5,0xC5F8,0xC5F9,0xC5FA,0xC5FB,0xC602,0xC603,0xC604, -0xC609,0xC60A,0xC60B,0xC60D,0xC60E,0xC60F,0xC611,0xC612, -0xC613,0xC614,0xC615,0xC616,0xC617,0xC61A,0xC61D,0xC61E, -0xC61F,0xC620,0xC621,0xC622,0xC623,0xC626,0xC627,0xC629, -0xC62A,0xC62B,0xC62F,0xC631,0xC632,0xC636,0xC638,0xC63A, -0xC63C,0xC63D,0xC63E,0xC63F,0xC642,0xC643,0xC645,0xC646, -0xC647,0xC649,0xC64A,0xC64B,0xC64C,0xC64D,0xC64E,0xC64F, -0xC652,0xC656,0xC657,0xC658,0xC659,0xC65A,0xC65B,0xC65E, -0xC65F,0xC661,0xC662,0xC663,0xC664,0xC665,0xC666,0xC667, -0xC668,0xC669,0xC66A,0xC66B,0xC66D,0xC66E,0xC670,0xC672, -0xC673,0xC674,0xC675,0xC676,0xC677,0xC67A,0xC67B,0xC67D, -0xC67E,0xC67F,0xC681,0xC682,0xC683,0xC684,0xC685,0xC686, -0xC687,0xC68A,0xC68C,0xC68E,0xC68F,0xC690,0xC691,0xC692, -0xC693,0xC696,0xC697,0xC699,0xC69A,0xC69B,0xC69D,0xC69E, -0xC69F,0xC6A0,0xC6A1,0xC6A2,0xC6A3,0xC6A6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xC6A8,0xC6AA,0xC6AB,0xC6AC,0xC6AD,0xC6AE,0xC6AF,0xC6B2, -0xC6B3,0xC6B5,0xC6B6,0xC6B7,0xC6BB,0xC6BC,0xC6BD,0xC6BE, -0xC6BF,0xC6C2,0xC6C4,0xC6C6,0xC6C7,0xC6C8,0xC6C9,0xC6CA, -0xC6CB,0xC6CE, 0, 0, 0, 0, 0, 0, -0xC6CF,0xC6D1,0xC6D2,0xC6D3,0xC6D5,0xC6D6,0xC6D7,0xC6D8, -0xC6D9,0xC6DA,0xC6DB,0xC6DE,0xC6DF,0xC6E2,0xC6E3,0xC6E4, -0xC6E5,0xC6E6,0xC6E7,0xC6EA,0xC6EB,0xC6ED,0xC6EE,0xC6EF, -0xC6F1,0xC6F2, 0, 0, 0, 0, 0, 0, -0xC6F3,0xC6F4,0xC6F5,0xC6F6,0xC6F7,0xC6FA,0xC6FB,0xC6FC, -0xC6FE,0xC6FF,0xC700,0xC701,0xC702,0xC703,0xC706,0xC707, -0xC709,0xC70A,0xC70B,0xC70D,0xC70E,0xC70F,0xC710,0xC711, -0xC712,0xC713,0xC716,0xC718,0xC71A,0xC71B,0xC71C,0xC71D, -0xC71E,0xC71F,0xC722,0xC723,0xC725,0xC726,0xC727,0xC729, -0xC72A,0xC72B,0xC72C,0xC72D,0xC72E,0xC72F,0xC732,0xC734, -0xC736,0xC738,0xC739,0xC73A,0xC73B,0xC73E,0xC73F,0xC741, -0xC742,0xC743,0xC745,0xC746,0xC747,0xC748,0xC749,0xC74B, -0xC74E,0xC750,0xC759,0xC75A,0xC75B,0xC75D,0xC75E,0xC75F, -0xC761,0xC762,0xC763,0xC764,0xC765,0xC766,0xC767,0xC769, -0xC76A,0xC76C,0xC76D,0xC76E,0xC76F,0xC770,0xC771,0xC772, -0xC773,0xC776,0xC777,0xC779,0xC77A,0xC77B,0xC77F,0xC780, -0xC781,0xC782,0xC786,0xC78B,0xC78C,0xC78D,0xC78F,0xC792, -0xC793,0xC795,0xC799,0xC79B,0xC79C,0xC79D,0xC79E,0xC79F, -0xC7A2,0xC7A7,0xC7A8,0xC7A9,0xC7AA,0xC7AB,0xC7AE,0xC7AF, -0xC7B1,0xC7B2,0xC7B3,0xC7B5,0xC7B6,0xC7B7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xC7B8,0xC7B9,0xC7BA,0xC7BB,0xC7BE,0xC7C2,0xC7C3,0xC7C4, -0xC7C5,0xC7C6,0xC7C7,0xC7CA,0xC7CB,0xC7CD,0xC7CF,0xC7D1, -0xC7D2,0xC7D3,0xC7D4,0xC7D5,0xC7D6,0xC7D7,0xC7D9,0xC7DA, -0xC7DB,0xC7DC, 0, 0, 0, 0, 0, 0, -0xC7DE,0xC7DF,0xC7E0,0xC7E1,0xC7E2,0xC7E3,0xC7E5,0xC7E6, -0xC7E7,0xC7E9,0xC7EA,0xC7EB,0xC7ED,0xC7EE,0xC7EF,0xC7F0, -0xC7F1,0xC7F2,0xC7F3,0xC7F4,0xC7F5,0xC7F6,0xC7F7,0xC7F8, -0xC7F9,0xC7FA, 0, 0, 0, 0, 0, 0, -0xC7FB,0xC7FC,0xC7FD,0xC7FE,0xC7FF,0xC802,0xC803,0xC805, -0xC806,0xC807,0xC809,0xC80B,0xC80C,0xC80D,0xC80E,0xC80F, -0xC812,0xC814,0xC817,0xC818,0xC819,0xC81A,0xC81B,0xC81E, -0xC81F,0xC821,0xC822,0xC823,0xC825,0xC826,0xC827,0xC828, -0xC829,0xC82A,0xC82B,0xC82E,0xC830,0xC832,0xC833,0xC834, -0xC835,0xC836,0xC837,0xC839,0xC83A,0xC83B,0xC83D,0xC83E, -0xC83F,0xC841,0xC842,0xC843,0xC844,0xC845,0xC846,0xC847, -0xC84A,0xC84B,0xC84E,0xC84F,0xC850,0xC851,0xC852,0xC853, -0xC855,0xC856,0xC857,0xC858,0xC859,0xC85A,0xC85B,0xC85C, -0xC85D,0xC85E,0xC85F,0xC860,0xC861,0xC862,0xC863,0xC864, -0xC865,0xC866,0xC867,0xC868,0xC869,0xC86A,0xC86B,0xC86C, -0xC86D,0xC86E,0xC86F,0xC872,0xC873,0xC875,0xC876,0xC877, -0xC879,0xC87B,0xC87C,0xC87D,0xC87E,0xC87F,0xC882,0xC884, -0xC888,0xC889,0xC88A,0xC88E,0xC88F,0xC890,0xC891,0xC892, -0xC893,0xC895,0xC896,0xC897,0xC898,0xC899,0xC89A,0xC89B, -0xC89C,0xC89E,0xC8A0,0xC8A2,0xC8A3,0xC8A4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xC8A5,0xC8A6,0xC8A7,0xC8A9,0xC8AA,0xC8AB,0xC8AC,0xC8AD, -0xC8AE,0xC8AF,0xC8B0,0xC8B1,0xC8B2,0xC8B3,0xC8B4,0xC8B5, -0xC8B6,0xC8B7,0xC8B8,0xC8B9,0xC8BA,0xC8BB,0xC8BE,0xC8BF, -0xC8C0,0xC8C1, 0, 0, 0, 0, 0, 0, -0xC8C2,0xC8C3,0xC8C5,0xC8C6,0xC8C7,0xC8C9,0xC8CA,0xC8CB, -0xC8CD,0xC8CE,0xC8CF,0xC8D0,0xC8D1,0xC8D2,0xC8D3,0xC8D6, -0xC8D8,0xC8DA,0xC8DB,0xC8DC,0xC8DD,0xC8DE,0xC8DF,0xC8E2, -0xC8E3,0xC8E5, 0, 0, 0, 0, 0, 0, -0xC8E6,0xC8E7,0xC8E8,0xC8E9,0xC8EA,0xC8EB,0xC8EC,0xC8ED, -0xC8EE,0xC8EF,0xC8F0,0xC8F1,0xC8F2,0xC8F3,0xC8F4,0xC8F6, -0xC8F7,0xC8F8,0xC8F9,0xC8FA,0xC8FB,0xC8FE,0xC8FF,0xC901, -0xC902,0xC903,0xC907,0xC908,0xC909,0xC90A,0xC90B,0xC90E, -0x3000,0x3001,0x3002,0x00B7,0x2025,0x2026,0x00A8,0x3003, -0x00AD,0x2015,0x2225,0xFF3C,0x223C,0x2018,0x2019,0x201C, -0x201D,0x3014,0x3015,0x3008,0x3009,0x300A,0x300B,0x300C, -0x300D,0x300E,0x300F,0x3010,0x3011,0x00B1,0x00D7,0x00F7, -0x2260,0x2264,0x2265,0x221E,0x2234,0x00B0,0x2032,0x2033, -0x2103,0x212B,0xFFE0,0xFFE1,0xFFE5,0x2642,0x2640,0x2220, -0x22A5,0x2312,0x2202,0x2207,0x2261,0x2252,0x00A7,0x203B, -0x2606,0x2605,0x25CB,0x25CF,0x25CE,0x25C7,0x25C6,0x25A1, -0x25A0,0x25B3,0x25B2,0x25BD,0x25BC,0x2192,0x2190,0x2191, -0x2193,0x2194,0x3013,0x226A,0x226B,0x221A,0x223D,0x221D, -0x2235,0x222B,0x222C,0x2208,0x220B,0x2286,0x2287,0x2282, -0x2283,0x222A,0x2229,0x2227,0x2228,0xFFE2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xC910,0xC912,0xC913,0xC914,0xC915,0xC916,0xC917,0xC919, -0xC91A,0xC91B,0xC91C,0xC91D,0xC91E,0xC91F,0xC920,0xC921, -0xC922,0xC923,0xC924,0xC925,0xC926,0xC927,0xC928,0xC929, -0xC92A,0xC92B, 0, 0, 0, 0, 0, 0, -0xC92D,0xC92E,0xC92F,0xC930,0xC931,0xC932,0xC933,0xC935, -0xC936,0xC937,0xC938,0xC939,0xC93A,0xC93B,0xC93C,0xC93D, -0xC93E,0xC93F,0xC940,0xC941,0xC942,0xC943,0xC944,0xC945, -0xC946,0xC947, 0, 0, 0, 0, 0, 0, -0xC948,0xC949,0xC94A,0xC94B,0xC94C,0xC94D,0xC94E,0xC94F, -0xC952,0xC953,0xC955,0xC956,0xC957,0xC959,0xC95A,0xC95B, -0xC95C,0xC95D,0xC95E,0xC95F,0xC962,0xC964,0xC965,0xC966, -0xC967,0xC968,0xC969,0xC96A,0xC96B,0xC96D,0xC96E,0xC96F, -0x21D2,0x21D4,0x2200,0x2203,0x00B4,0xFF5E,0x02C7,0x02D8, -0x02DD,0x02DA,0x02D9,0x00B8,0x02DB,0x00A1,0x00BF,0x02D0, -0x222E,0x2211,0x220F,0x00A4,0x2109,0x2030,0x25C1,0x25C0, -0x25B7,0x25B6,0x2664,0x2660,0x2661,0x2665,0x2667,0x2663, -0x2299,0x25C8,0x25A3,0x25D0,0x25D1,0x2592,0x25A4,0x25A5, -0x25A8,0x25A7,0x25A6,0x25A9,0x2668,0x260F,0x260E,0x261C, -0x261E,0x00B6,0x2020,0x2021,0x2195,0x2197,0x2199,0x2196, -0x2198,0x266D,0x2669,0x266A,0x266C,0x327F,0x321C,0x2116, -0x33C7,0x2122,0x33C2,0x33D8,0x2121,0x20AC,0x00AE, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xC971,0xC972,0xC973,0xC975,0xC976,0xC977,0xC978,0xC979, -0xC97A,0xC97B,0xC97D,0xC97E,0xC97F,0xC980,0xC981,0xC982, -0xC983,0xC984,0xC985,0xC986,0xC987,0xC98A,0xC98B,0xC98D, -0xC98E,0xC98F, 0, 0, 0, 0, 0, 0, -0xC991,0xC992,0xC993,0xC994,0xC995,0xC996,0xC997,0xC99A, -0xC99C,0xC99E,0xC99F,0xC9A0,0xC9A1,0xC9A2,0xC9A3,0xC9A4, -0xC9A5,0xC9A6,0xC9A7,0xC9A8,0xC9A9,0xC9AA,0xC9AB,0xC9AC, -0xC9AD,0xC9AE, 0, 0, 0, 0, 0, 0, -0xC9AF,0xC9B0,0xC9B1,0xC9B2,0xC9B3,0xC9B4,0xC9B5,0xC9B6, -0xC9B7,0xC9B8,0xC9B9,0xC9BA,0xC9BB,0xC9BC,0xC9BD,0xC9BE, -0xC9BF,0xC9C2,0xC9C3,0xC9C5,0xC9C6,0xC9C9,0xC9CB,0xC9CC, -0xC9CD,0xC9CE,0xC9CF,0xC9D2,0xC9D4,0xC9D7,0xC9D8,0xC9DB, -0xFF01,0xFF02,0xFF03,0xFF04,0xFF05,0xFF06,0xFF07,0xFF08, -0xFF09,0xFF0A,0xFF0B,0xFF0C,0xFF0D,0xFF0E,0xFF0F,0xFF10, -0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17,0xFF18, -0xFF19,0xFF1A,0xFF1B,0xFF1C,0xFF1D,0xFF1E,0xFF1F,0xFF20, -0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28, -0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30, -0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38, -0xFF39,0xFF3A,0xFF3B,0xFFE6,0xFF3D,0xFF3E,0xFF3F,0xFF40, -0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48, -0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50, -0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58, -0xFF59,0xFF5A,0xFF5B,0xFF5C,0xFF5D,0xFFE3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xC9DE,0xC9DF,0xC9E1,0xC9E3,0xC9E5,0xC9E6,0xC9E8,0xC9E9, -0xC9EA,0xC9EB,0xC9EE,0xC9F2,0xC9F3,0xC9F4,0xC9F5,0xC9F6, -0xC9F7,0xC9FA,0xC9FB,0xC9FD,0xC9FE,0xC9FF,0xCA01,0xCA02, -0xCA03,0xCA04, 0, 0, 0, 0, 0, 0, -0xCA05,0xCA06,0xCA07,0xCA0A,0xCA0E,0xCA0F,0xCA10,0xCA11, -0xCA12,0xCA13,0xCA15,0xCA16,0xCA17,0xCA19,0xCA1A,0xCA1B, -0xCA1C,0xCA1D,0xCA1E,0xCA1F,0xCA20,0xCA21,0xCA22,0xCA23, -0xCA24,0xCA25, 0, 0, 0, 0, 0, 0, -0xCA26,0xCA27,0xCA28,0xCA2A,0xCA2B,0xCA2C,0xCA2D,0xCA2E, -0xCA2F,0xCA30,0xCA31,0xCA32,0xCA33,0xCA34,0xCA35,0xCA36, -0xCA37,0xCA38,0xCA39,0xCA3A,0xCA3B,0xCA3C,0xCA3D,0xCA3E, -0xCA3F,0xCA40,0xCA41,0xCA42,0xCA43,0xCA44,0xCA45,0xCA46, -0x3131,0x3132,0x3133,0x3134,0x3135,0x3136,0x3137,0x3138, -0x3139,0x313A,0x313B,0x313C,0x313D,0x313E,0x313F,0x3140, -0x3141,0x3142,0x3143,0x3144,0x3145,0x3146,0x3147,0x3148, -0x3149,0x314A,0x314B,0x314C,0x314D,0x314E,0x314F,0x3150, -0x3151,0x3152,0x3153,0x3154,0x3155,0x3156,0x3157,0x3158, -0x3159,0x315A,0x315B,0x315C,0x315D,0x315E,0x315F,0x3160, -0x3161,0x3162,0x3163,0x3164,0x3165,0x3166,0x3167,0x3168, -0x3169,0x316A,0x316B,0x316C,0x316D,0x316E,0x316F,0x3170, -0x3171,0x3172,0x3173,0x3174,0x3175,0x3176,0x3177,0x3178, -0x3179,0x317A,0x317B,0x317C,0x317D,0x317E,0x317F,0x3180, -0x3181,0x3182,0x3183,0x3184,0x3185,0x3186,0x3187,0x3188, -0x3189,0x318A,0x318B,0x318C,0x318D,0x318E, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCA47,0xCA48,0xCA49,0xCA4A,0xCA4B,0xCA4E,0xCA4F,0xCA51, -0xCA52,0xCA53,0xCA55,0xCA56,0xCA57,0xCA58,0xCA59,0xCA5A, -0xCA5B,0xCA5E,0xCA62,0xCA63,0xCA64,0xCA65,0xCA66,0xCA67, -0xCA69,0xCA6A, 0, 0, 0, 0, 0, 0, -0xCA6B,0xCA6C,0xCA6D,0xCA6E,0xCA6F,0xCA70,0xCA71,0xCA72, -0xCA73,0xCA74,0xCA75,0xCA76,0xCA77,0xCA78,0xCA79,0xCA7A, -0xCA7B,0xCA7C,0xCA7E,0xCA7F,0xCA80,0xCA81,0xCA82,0xCA83, -0xCA85,0xCA86, 0, 0, 0, 0, 0, 0, -0xCA87,0xCA88,0xCA89,0xCA8A,0xCA8B,0xCA8C,0xCA8D,0xCA8E, -0xCA8F,0xCA90,0xCA91,0xCA92,0xCA93,0xCA94,0xCA95,0xCA96, -0xCA97,0xCA99,0xCA9A,0xCA9B,0xCA9C,0xCA9D,0xCA9E,0xCA9F, -0xCAA0,0xCAA1,0xCAA2,0xCAA3,0xCAA4,0xCAA5,0xCAA6,0xCAA7, -0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177, -0x2178,0x2179, 0, 0, 0, 0, 0,0x2160, -0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168, -0x2169, 0, 0, 0, 0, 0, 0, 0, -0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,0x0398, -0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,0x03A0, -0x03A1,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,0x03A9, - 0, 0, 0, 0, 0, 0, 0, 0, -0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,0x03B8, -0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,0x03C0, -0x03C1,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,0x03C9, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCAA8,0xCAA9,0xCAAA,0xCAAB,0xCAAC,0xCAAD,0xCAAE,0xCAAF, -0xCAB0,0xCAB1,0xCAB2,0xCAB3,0xCAB4,0xCAB5,0xCAB6,0xCAB7, -0xCAB8,0xCAB9,0xCABA,0xCABB,0xCABE,0xCABF,0xCAC1,0xCAC2, -0xCAC3,0xCAC5, 0, 0, 0, 0, 0, 0, -0xCAC6,0xCAC7,0xCAC8,0xCAC9,0xCACA,0xCACB,0xCACE,0xCAD0, -0xCAD2,0xCAD4,0xCAD5,0xCAD6,0xCAD7,0xCADA,0xCADB,0xCADC, -0xCADD,0xCADE,0xCADF,0xCAE1,0xCAE2,0xCAE3,0xCAE4,0xCAE5, -0xCAE6,0xCAE7, 0, 0, 0, 0, 0, 0, -0xCAE8,0xCAE9,0xCAEA,0xCAEB,0xCAED,0xCAEE,0xCAEF,0xCAF0, -0xCAF1,0xCAF2,0xCAF3,0xCAF5,0xCAF6,0xCAF7,0xCAF8,0xCAF9, -0xCAFA,0xCAFB,0xCAFC,0xCAFD,0xCAFE,0xCAFF,0xCB00,0xCB01, -0xCB02,0xCB03,0xCB04,0xCB05,0xCB06,0xCB07,0xCB09,0xCB0A, -0x2500,0x2502,0x250C,0x2510,0x2518,0x2514,0x251C,0x252C, -0x2524,0x2534,0x253C,0x2501,0x2503,0x250F,0x2513,0x251B, -0x2517,0x2523,0x2533,0x252B,0x253B,0x254B,0x2520,0x252F, -0x2528,0x2537,0x253F,0x251D,0x2530,0x2525,0x2538,0x2542, -0x2512,0x2511,0x251A,0x2519,0x2516,0x2515,0x250E,0x250D, -0x251E,0x251F,0x2521,0x2522,0x2526,0x2527,0x2529,0x252A, -0x252D,0x252E,0x2531,0x2532,0x2535,0x2536,0x2539,0x253A, -0x253D,0x253E,0x2540,0x2541,0x2543,0x2544,0x2545,0x2546, -0x2547,0x2548,0x2549,0x254A, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCB0B,0xCB0C,0xCB0D,0xCB0E,0xCB0F,0xCB11,0xCB12,0xCB13, -0xCB15,0xCB16,0xCB17,0xCB19,0xCB1A,0xCB1B,0xCB1C,0xCB1D, -0xCB1E,0xCB1F,0xCB22,0xCB23,0xCB24,0xCB25,0xCB26,0xCB27, -0xCB28,0xCB29, 0, 0, 0, 0, 0, 0, -0xCB2A,0xCB2B,0xCB2C,0xCB2D,0xCB2E,0xCB2F,0xCB30,0xCB31, -0xCB32,0xCB33,0xCB34,0xCB35,0xCB36,0xCB37,0xCB38,0xCB39, -0xCB3A,0xCB3B,0xCB3C,0xCB3D,0xCB3E,0xCB3F,0xCB40,0xCB42, -0xCB43,0xCB44, 0, 0, 0, 0, 0, 0, -0xCB45,0xCB46,0xCB47,0xCB4A,0xCB4B,0xCB4D,0xCB4E,0xCB4F, -0xCB51,0xCB52,0xCB53,0xCB54,0xCB55,0xCB56,0xCB57,0xCB5A, -0xCB5B,0xCB5C,0xCB5E,0xCB5F,0xCB60,0xCB61,0xCB62,0xCB63, -0xCB65,0xCB66,0xCB67,0xCB68,0xCB69,0xCB6A,0xCB6B,0xCB6C, -0x3395,0x3396,0x3397,0x2113,0x3398,0x33C4,0x33A3,0x33A4, -0x33A5,0x33A6,0x3399,0x339A,0x339B,0x339C,0x339D,0x339E, -0x339F,0x33A0,0x33A1,0x33A2,0x33CA,0x338D,0x338E,0x338F, -0x33CF,0x3388,0x3389,0x33C8,0x33A7,0x33A8,0x33B0,0x33B1, -0x33B2,0x33B3,0x33B4,0x33B5,0x33B6,0x33B7,0x33B8,0x33B9, -0x3380,0x3381,0x3382,0x3383,0x3384,0x33BA,0x33BB,0x33BC, -0x33BD,0x33BE,0x33BF,0x3390,0x3391,0x3392,0x3393,0x3394, -0x2126,0x33C0,0x33C1,0x338A,0x338B,0x338C,0x33D6,0x33C5, -0x33AD,0x33AE,0x33AF,0x33DB,0x33A9,0x33AA,0x33AB,0x33AC, -0x33DD,0x33D0,0x33D3,0x33C3,0x33C9,0x33DC,0x33C6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCB6D,0xCB6E,0xCB6F,0xCB70,0xCB71,0xCB72,0xCB73,0xCB74, -0xCB75,0xCB76,0xCB77,0xCB7A,0xCB7B,0xCB7C,0xCB7D,0xCB7E, -0xCB7F,0xCB80,0xCB81,0xCB82,0xCB83,0xCB84,0xCB85,0xCB86, -0xCB87,0xCB88, 0, 0, 0, 0, 0, 0, -0xCB89,0xCB8A,0xCB8B,0xCB8C,0xCB8D,0xCB8E,0xCB8F,0xCB90, -0xCB91,0xCB92,0xCB93,0xCB94,0xCB95,0xCB96,0xCB97,0xCB98, -0xCB99,0xCB9A,0xCB9B,0xCB9D,0xCB9E,0xCB9F,0xCBA0,0xCBA1, -0xCBA2,0xCBA3, 0, 0, 0, 0, 0, 0, -0xCBA4,0xCBA5,0xCBA6,0xCBA7,0xCBA8,0xCBA9,0xCBAA,0xCBAB, -0xCBAC,0xCBAD,0xCBAE,0xCBAF,0xCBB0,0xCBB1,0xCBB2,0xCBB3, -0xCBB4,0xCBB5,0xCBB6,0xCBB7,0xCBB9,0xCBBA,0xCBBB,0xCBBC, -0xCBBD,0xCBBE,0xCBBF,0xCBC0,0xCBC1,0xCBC2,0xCBC3,0xCBC4, -0x00C6,0x00D0,0x00AA,0x0126, 0,0x0132, 0,0x013F, -0x0141,0x00D8,0x0152,0x00BA,0x00DE,0x0166,0x014A, 0, -0x3260,0x3261,0x3262,0x3263,0x3264,0x3265,0x3266,0x3267, -0x3268,0x3269,0x326A,0x326B,0x326C,0x326D,0x326E,0x326F, -0x3270,0x3271,0x3272,0x3273,0x3274,0x3275,0x3276,0x3277, -0x3278,0x3279,0x327A,0x327B,0x24D0,0x24D1,0x24D2,0x24D3, -0x24D4,0x24D5,0x24D6,0x24D7,0x24D8,0x24D9,0x24DA,0x24DB, -0x24DC,0x24DD,0x24DE,0x24DF,0x24E0,0x24E1,0x24E2,0x24E3, -0x24E4,0x24E5,0x24E6,0x24E7,0x24E8,0x24E9,0x2460,0x2461, -0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,0x2469, -0x246A,0x246B,0x246C,0x246D,0x246E,0x00BD,0x2153,0x2154, -0x00BC,0x00BE,0x215B,0x215C,0x215D,0x215E, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCBC5,0xCBC6,0xCBC7,0xCBC8,0xCBC9,0xCBCA,0xCBCB,0xCBCC, -0xCBCD,0xCBCE,0xCBCF,0xCBD0,0xCBD1,0xCBD2,0xCBD3,0xCBD5, -0xCBD6,0xCBD7,0xCBD8,0xCBD9,0xCBDA,0xCBDB,0xCBDC,0xCBDD, -0xCBDE,0xCBDF, 0, 0, 0, 0, 0, 0, -0xCBE0,0xCBE1,0xCBE2,0xCBE3,0xCBE5,0xCBE6,0xCBE8,0xCBEA, -0xCBEB,0xCBEC,0xCBED,0xCBEE,0xCBEF,0xCBF0,0xCBF1,0xCBF2, -0xCBF3,0xCBF4,0xCBF5,0xCBF6,0xCBF7,0xCBF8,0xCBF9,0xCBFA, -0xCBFB,0xCBFC, 0, 0, 0, 0, 0, 0, -0xCBFD,0xCBFE,0xCBFF,0xCC00,0xCC01,0xCC02,0xCC03,0xCC04, -0xCC05,0xCC06,0xCC07,0xCC08,0xCC09,0xCC0A,0xCC0B,0xCC0E, -0xCC0F,0xCC11,0xCC12,0xCC13,0xCC15,0xCC16,0xCC17,0xCC18, -0xCC19,0xCC1A,0xCC1B,0xCC1E,0xCC1F,0xCC20,0xCC23,0xCC24, -0x00E6,0x0111,0x00F0,0x0127,0x0131,0x0133,0x0138,0x0140, -0x0142,0x00F8,0x0153,0x00DF,0x00FE,0x0167,0x014B,0x0149, -0x3200,0x3201,0x3202,0x3203,0x3204,0x3205,0x3206,0x3207, -0x3208,0x3209,0x320A,0x320B,0x320C,0x320D,0x320E,0x320F, -0x3210,0x3211,0x3212,0x3213,0x3214,0x3215,0x3216,0x3217, -0x3218,0x3219,0x321A,0x321B,0x249C,0x249D,0x249E,0x249F, -0x24A0,0x24A1,0x24A2,0x24A3,0x24A4,0x24A5,0x24A6,0x24A7, -0x24A8,0x24A9,0x24AA,0x24AB,0x24AC,0x24AD,0x24AE,0x24AF, -0x24B0,0x24B1,0x24B2,0x24B3,0x24B4,0x24B5,0x2474,0x2475, -0x2476,0x2477,0x2478,0x2479,0x247A,0x247B,0x247C,0x247D, -0x247E,0x247F,0x2480,0x2481,0x2482,0x00B9,0x00B2,0x00B3, -0x2074,0x207F,0x2081,0x2082,0x2083,0x2084, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCC25,0xCC26,0xCC2A,0xCC2B,0xCC2D,0xCC2F,0xCC31,0xCC32, -0xCC33,0xCC34,0xCC35,0xCC36,0xCC37,0xCC3A,0xCC3F,0xCC40, -0xCC41,0xCC42,0xCC43,0xCC46,0xCC47,0xCC49,0xCC4A,0xCC4B, -0xCC4D,0xCC4E, 0, 0, 0, 0, 0, 0, -0xCC4F,0xCC50,0xCC51,0xCC52,0xCC53,0xCC56,0xCC5A,0xCC5B, -0xCC5C,0xCC5D,0xCC5E,0xCC5F,0xCC61,0xCC62,0xCC63,0xCC65, -0xCC67,0xCC69,0xCC6A,0xCC6B,0xCC6C,0xCC6D,0xCC6E,0xCC6F, -0xCC71,0xCC72, 0, 0, 0, 0, 0, 0, -0xCC73,0xCC74,0xCC76,0xCC77,0xCC78,0xCC79,0xCC7A,0xCC7B, -0xCC7C,0xCC7D,0xCC7E,0xCC7F,0xCC80,0xCC81,0xCC82,0xCC83, -0xCC84,0xCC85,0xCC86,0xCC87,0xCC88,0xCC89,0xCC8A,0xCC8B, -0xCC8C,0xCC8D,0xCC8E,0xCC8F,0xCC90,0xCC91,0xCC92,0xCC93, -0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,0x3048, -0x3049,0x304A,0x304B,0x304C,0x304D,0x304E,0x304F,0x3050, -0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057,0x3058, -0x3059,0x305A,0x305B,0x305C,0x305D,0x305E,0x305F,0x3060, -0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067,0x3068, -0x3069,0x306A,0x306B,0x306C,0x306D,0x306E,0x306F,0x3070, -0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,0x3077,0x3078, -0x3079,0x307A,0x307B,0x307C,0x307D,0x307E,0x307F,0x3080, -0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,0x3087,0x3088, -0x3089,0x308A,0x308B,0x308C,0x308D,0x308E,0x308F,0x3090, -0x3091,0x3092,0x3093, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCC94,0xCC95,0xCC96,0xCC97,0xCC9A,0xCC9B,0xCC9D,0xCC9E, -0xCC9F,0xCCA1,0xCCA2,0xCCA3,0xCCA4,0xCCA5,0xCCA6,0xCCA7, -0xCCAA,0xCCAE,0xCCAF,0xCCB0,0xCCB1,0xCCB2,0xCCB3,0xCCB6, -0xCCB7,0xCCB9, 0, 0, 0, 0, 0, 0, -0xCCBA,0xCCBB,0xCCBD,0xCCBE,0xCCBF,0xCCC0,0xCCC1,0xCCC2, -0xCCC3,0xCCC6,0xCCC8,0xCCCA,0xCCCB,0xCCCC,0xCCCD,0xCCCE, -0xCCCF,0xCCD1,0xCCD2,0xCCD3,0xCCD5,0xCCD6,0xCCD7,0xCCD8, -0xCCD9,0xCCDA, 0, 0, 0, 0, 0, 0, -0xCCDB,0xCCDC,0xCCDD,0xCCDE,0xCCDF,0xCCE0,0xCCE1,0xCCE2, -0xCCE3,0xCCE5,0xCCE6,0xCCE7,0xCCE8,0xCCE9,0xCCEA,0xCCEB, -0xCCED,0xCCEE,0xCCEF,0xCCF1,0xCCF2,0xCCF3,0xCCF4,0xCCF5, -0xCCF6,0xCCF7,0xCCF8,0xCCF9,0xCCFA,0xCCFB,0xCCFC,0xCCFD, -0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7,0x30A8, -0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF,0x30B0, -0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7,0x30B8, -0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF,0x30C0, -0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7,0x30C8, -0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF,0x30D0, -0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7,0x30D8, -0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF,0x30E0, -0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7,0x30E8, -0x30E9,0x30EA,0x30EB,0x30EC,0x30ED,0x30EE,0x30EF,0x30F0, -0x30F1,0x30F2,0x30F3,0x30F4,0x30F5,0x30F6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCCFE,0xCCFF,0xCD00,0xCD02,0xCD03,0xCD04,0xCD05,0xCD06, -0xCD07,0xCD0A,0xCD0B,0xCD0D,0xCD0E,0xCD0F,0xCD11,0xCD12, -0xCD13,0xCD14,0xCD15,0xCD16,0xCD17,0xCD1A,0xCD1C,0xCD1E, -0xCD1F,0xCD20, 0, 0, 0, 0, 0, 0, -0xCD21,0xCD22,0xCD23,0xCD25,0xCD26,0xCD27,0xCD29,0xCD2A, -0xCD2B,0xCD2D,0xCD2E,0xCD2F,0xCD30,0xCD31,0xCD32,0xCD33, -0xCD34,0xCD35,0xCD36,0xCD37,0xCD38,0xCD3A,0xCD3B,0xCD3C, -0xCD3D,0xCD3E, 0, 0, 0, 0, 0, 0, -0xCD3F,0xCD40,0xCD41,0xCD42,0xCD43,0xCD44,0xCD45,0xCD46, -0xCD47,0xCD48,0xCD49,0xCD4A,0xCD4B,0xCD4C,0xCD4D,0xCD4E, -0xCD4F,0xCD50,0xCD51,0xCD52,0xCD53,0xCD54,0xCD55,0xCD56, -0xCD57,0xCD58,0xCD59,0xCD5A,0xCD5B,0xCD5D,0xCD5E,0xCD5F, -0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401,0x0416, -0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E, -0x041F,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426, -0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E, -0x042F, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0451,0x0436, -0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E, -0x043F,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446, -0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E, -0x044F, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCD61,0xCD62,0xCD63,0xCD65,0xCD66,0xCD67,0xCD68,0xCD69, -0xCD6A,0xCD6B,0xCD6E,0xCD70,0xCD72,0xCD73,0xCD74,0xCD75, -0xCD76,0xCD77,0xCD79,0xCD7A,0xCD7B,0xCD7C,0xCD7D,0xCD7E, -0xCD7F,0xCD80, 0, 0, 0, 0, 0, 0, -0xCD81,0xCD82,0xCD83,0xCD84,0xCD85,0xCD86,0xCD87,0xCD89, -0xCD8A,0xCD8B,0xCD8C,0xCD8D,0xCD8E,0xCD8F,0xCD90,0xCD91, -0xCD92,0xCD93,0xCD96,0xCD97,0xCD99,0xCD9A,0xCD9B,0xCD9D, -0xCD9E,0xCD9F, 0, 0, 0, 0, 0, 0, -0xCDA0,0xCDA1,0xCDA2,0xCDA3,0xCDA6,0xCDA8,0xCDAA,0xCDAB, -0xCDAC,0xCDAD,0xCDAE,0xCDAF,0xCDB1,0xCDB2,0xCDB3,0xCDB4, -0xCDB5,0xCDB6,0xCDB7,0xCDB8,0xCDB9,0xCDBA,0xCDBB,0xCDBC, -0xCDBD,0xCDBE,0xCDBF,0xCDC0,0xCDC1,0xCDC2,0xCDC3,0xCDC5, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCDC6,0xCDC7,0xCDC8,0xCDC9,0xCDCA,0xCDCB,0xCDCD,0xCDCE, -0xCDCF,0xCDD1,0xCDD2,0xCDD3,0xCDD4,0xCDD5,0xCDD6,0xCDD7, -0xCDD8,0xCDD9,0xCDDA,0xCDDB,0xCDDC,0xCDDD,0xCDDE,0xCDDF, -0xCDE0,0xCDE1, 0, 0, 0, 0, 0, 0, -0xCDE2,0xCDE3,0xCDE4,0xCDE5,0xCDE6,0xCDE7,0xCDE9,0xCDEA, -0xCDEB,0xCDED,0xCDEE,0xCDEF,0xCDF1,0xCDF2,0xCDF3,0xCDF4, -0xCDF5,0xCDF6,0xCDF7,0xCDFA,0xCDFC,0xCDFE,0xCDFF,0xCE00, -0xCE01,0xCE02, 0, 0, 0, 0, 0, 0, -0xCE03,0xCE05,0xCE06,0xCE07,0xCE09,0xCE0A,0xCE0B,0xCE0D, -0xCE0E,0xCE0F,0xCE10,0xCE11,0xCE12,0xCE13,0xCE15,0xCE16, -0xCE17,0xCE18,0xCE1A,0xCE1B,0xCE1C,0xCE1D,0xCE1E,0xCE1F, -0xCE22,0xCE23,0xCE25,0xCE26,0xCE27,0xCE29,0xCE2A,0xCE2B, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCE2C,0xCE2D,0xCE2E,0xCE2F,0xCE32,0xCE34,0xCE36,0xCE37, -0xCE38,0xCE39,0xCE3A,0xCE3B,0xCE3C,0xCE3D,0xCE3E,0xCE3F, -0xCE40,0xCE41,0xCE42,0xCE43,0xCE44,0xCE45,0xCE46,0xCE47, -0xCE48,0xCE49, 0, 0, 0, 0, 0, 0, -0xCE4A,0xCE4B,0xCE4C,0xCE4D,0xCE4E,0xCE4F,0xCE50,0xCE51, -0xCE52,0xCE53,0xCE54,0xCE55,0xCE56,0xCE57,0xCE5A,0xCE5B, -0xCE5D,0xCE5E,0xCE62,0xCE63,0xCE64,0xCE65,0xCE66,0xCE67, -0xCE6A,0xCE6C, 0, 0, 0, 0, 0, 0, -0xCE6E,0xCE6F,0xCE70,0xCE71,0xCE72,0xCE73,0xCE76,0xCE77, -0xCE79,0xCE7A,0xCE7B,0xCE7D,0xCE7E,0xCE7F,0xCE80,0xCE81, -0xCE82,0xCE83,0xCE86,0xCE88,0xCE8A,0xCE8B,0xCE8C,0xCE8D, -0xCE8E,0xCE8F,0xCE92,0xCE93,0xCE95,0xCE96,0xCE97,0xCE99, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCE9A,0xCE9B,0xCE9C,0xCE9D,0xCE9E,0xCE9F,0xCEA2,0xCEA6, -0xCEA7,0xCEA8,0xCEA9,0xCEAA,0xCEAB,0xCEAE,0xCEAF,0xCEB0, -0xCEB1,0xCEB2,0xCEB3,0xCEB4,0xCEB5,0xCEB6,0xCEB7,0xCEB8, -0xCEB9,0xCEBA, 0, 0, 0, 0, 0, 0, -0xCEBB,0xCEBC,0xCEBD,0xCEBE,0xCEBF,0xCEC0,0xCEC2,0xCEC3, -0xCEC4,0xCEC5,0xCEC6,0xCEC7,0xCEC8,0xCEC9,0xCECA,0xCECB, -0xCECC,0xCECD,0xCECE,0xCECF,0xCED0,0xCED1,0xCED2,0xCED3, -0xCED4,0xCED5, 0, 0, 0, 0, 0, 0, -0xCED6,0xCED7,0xCED8,0xCED9,0xCEDA,0xCEDB,0xCEDC,0xCEDD, -0xCEDE,0xCEDF,0xCEE0,0xCEE1,0xCEE2,0xCEE3,0xCEE6,0xCEE7, -0xCEE9,0xCEEA,0xCEED,0xCEEE,0xCEEF,0xCEF0,0xCEF1,0xCEF2, -0xCEF3,0xCEF6,0xCEFA,0xCEFB,0xCEFC,0xCEFD,0xCEFE,0xCEFF, -0xAC00,0xAC01,0xAC04,0xAC07,0xAC08,0xAC09,0xAC0A,0xAC10, -0xAC11,0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17,0xAC19, -0xAC1A,0xAC1B,0xAC1C,0xAC1D,0xAC20,0xAC24,0xAC2C,0xAC2D, -0xAC2F,0xAC30,0xAC31,0xAC38,0xAC39,0xAC3C,0xAC40,0xAC4B, -0xAC4D,0xAC54,0xAC58,0xAC5C,0xAC70,0xAC71,0xAC74,0xAC77, -0xAC78,0xAC7A,0xAC80,0xAC81,0xAC83,0xAC84,0xAC85,0xAC86, -0xAC89,0xAC8A,0xAC8B,0xAC8C,0xAC90,0xAC94,0xAC9C,0xAC9D, -0xAC9F,0xACA0,0xACA1,0xACA8,0xACA9,0xACAA,0xACAC,0xACAF, -0xACB0,0xACB8,0xACB9,0xACBB,0xACBC,0xACBD,0xACC1,0xACC4, -0xACC8,0xACCC,0xACD5,0xACD7,0xACE0,0xACE1,0xACE4,0xACE7, -0xACE8,0xACEA,0xACEC,0xACEF,0xACF0,0xACF1,0xACF3,0xACF5, -0xACF6,0xACFC,0xACFD,0xAD00,0xAD04,0xAD06, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCF02,0xCF03,0xCF05,0xCF06,0xCF07,0xCF09,0xCF0A,0xCF0B, -0xCF0C,0xCF0D,0xCF0E,0xCF0F,0xCF12,0xCF14,0xCF16,0xCF17, -0xCF18,0xCF19,0xCF1A,0xCF1B,0xCF1D,0xCF1E,0xCF1F,0xCF21, -0xCF22,0xCF23, 0, 0, 0, 0, 0, 0, -0xCF25,0xCF26,0xCF27,0xCF28,0xCF29,0xCF2A,0xCF2B,0xCF2E, -0xCF32,0xCF33,0xCF34,0xCF35,0xCF36,0xCF37,0xCF39,0xCF3A, -0xCF3B,0xCF3C,0xCF3D,0xCF3E,0xCF3F,0xCF40,0xCF41,0xCF42, -0xCF43,0xCF44, 0, 0, 0, 0, 0, 0, -0xCF45,0xCF46,0xCF47,0xCF48,0xCF49,0xCF4A,0xCF4B,0xCF4C, -0xCF4D,0xCF4E,0xCF4F,0xCF50,0xCF51,0xCF52,0xCF53,0xCF56, -0xCF57,0xCF59,0xCF5A,0xCF5B,0xCF5D,0xCF5E,0xCF5F,0xCF60, -0xCF61,0xCF62,0xCF63,0xCF66,0xCF68,0xCF6A,0xCF6B,0xCF6C, -0xAD0C,0xAD0D,0xAD0F,0xAD11,0xAD18,0xAD1C,0xAD20,0xAD29, -0xAD2C,0xAD2D,0xAD34,0xAD35,0xAD38,0xAD3C,0xAD44,0xAD45, -0xAD47,0xAD49,0xAD50,0xAD54,0xAD58,0xAD61,0xAD63,0xAD6C, -0xAD6D,0xAD70,0xAD73,0xAD74,0xAD75,0xAD76,0xAD7B,0xAD7C, -0xAD7D,0xAD7F,0xAD81,0xAD82,0xAD88,0xAD89,0xAD8C,0xAD90, -0xAD9C,0xAD9D,0xADA4,0xADB7,0xADC0,0xADC1,0xADC4,0xADC8, -0xADD0,0xADD1,0xADD3,0xADDC,0xADE0,0xADE4,0xADF8,0xADF9, -0xADFC,0xADFF,0xAE00,0xAE01,0xAE08,0xAE09,0xAE0B,0xAE0D, -0xAE14,0xAE30,0xAE31,0xAE34,0xAE37,0xAE38,0xAE3A,0xAE40, -0xAE41,0xAE43,0xAE45,0xAE46,0xAE4A,0xAE4C,0xAE4D,0xAE4E, -0xAE50,0xAE54,0xAE56,0xAE5C,0xAE5D,0xAE5F,0xAE60,0xAE61, -0xAE65,0xAE68,0xAE69,0xAE6C,0xAE70,0xAE78, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCF6D,0xCF6E,0xCF6F,0xCF72,0xCF73,0xCF75,0xCF76,0xCF77, -0xCF79,0xCF7A,0xCF7B,0xCF7C,0xCF7D,0xCF7E,0xCF7F,0xCF81, -0xCF82,0xCF83,0xCF84,0xCF86,0xCF87,0xCF88,0xCF89,0xCF8A, -0xCF8B,0xCF8D, 0, 0, 0, 0, 0, 0, -0xCF8E,0xCF8F,0xCF90,0xCF91,0xCF92,0xCF93,0xCF94,0xCF95, -0xCF96,0xCF97,0xCF98,0xCF99,0xCF9A,0xCF9B,0xCF9C,0xCF9D, -0xCF9E,0xCF9F,0xCFA0,0xCFA2,0xCFA3,0xCFA4,0xCFA5,0xCFA6, -0xCFA7,0xCFA9, 0, 0, 0, 0, 0, 0, -0xCFAA,0xCFAB,0xCFAC,0xCFAD,0xCFAE,0xCFAF,0xCFB1,0xCFB2, -0xCFB3,0xCFB4,0xCFB5,0xCFB6,0xCFB7,0xCFB8,0xCFB9,0xCFBA, -0xCFBB,0xCFBC,0xCFBD,0xCFBE,0xCFBF,0xCFC0,0xCFC1,0xCFC2, -0xCFC3,0xCFC5,0xCFC6,0xCFC7,0xCFC8,0xCFC9,0xCFCA,0xCFCB, -0xAE79,0xAE7B,0xAE7C,0xAE7D,0xAE84,0xAE85,0xAE8C,0xAEBC, -0xAEBD,0xAEBE,0xAEC0,0xAEC4,0xAECC,0xAECD,0xAECF,0xAED0, -0xAED1,0xAED8,0xAED9,0xAEDC,0xAEE8,0xAEEB,0xAEED,0xAEF4, -0xAEF8,0xAEFC,0xAF07,0xAF08,0xAF0D,0xAF10,0xAF2C,0xAF2D, -0xAF30,0xAF32,0xAF34,0xAF3C,0xAF3D,0xAF3F,0xAF41,0xAF42, -0xAF43,0xAF48,0xAF49,0xAF50,0xAF5C,0xAF5D,0xAF64,0xAF65, -0xAF79,0xAF80,0xAF84,0xAF88,0xAF90,0xAF91,0xAF95,0xAF9C, -0xAFB8,0xAFB9,0xAFBC,0xAFC0,0xAFC7,0xAFC8,0xAFC9,0xAFCB, -0xAFCD,0xAFCE,0xAFD4,0xAFDC,0xAFE8,0xAFE9,0xAFF0,0xAFF1, -0xAFF4,0xAFF8,0xB000,0xB001,0xB004,0xB00C,0xB010,0xB014, -0xB01C,0xB01D,0xB028,0xB044,0xB045,0xB048,0xB04A,0xB04C, -0xB04E,0xB053,0xB054,0xB055,0xB057,0xB059, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCFCC,0xCFCD,0xCFCE,0xCFCF,0xCFD0,0xCFD1,0xCFD2,0xCFD3, -0xCFD4,0xCFD5,0xCFD6,0xCFD7,0xCFD8,0xCFD9,0xCFDA,0xCFDB, -0xCFDC,0xCFDD,0xCFDE,0xCFDF,0xCFE2,0xCFE3,0xCFE5,0xCFE6, -0xCFE7,0xCFE9, 0, 0, 0, 0, 0, 0, -0xCFEA,0xCFEB,0xCFEC,0xCFED,0xCFEE,0xCFEF,0xCFF2,0xCFF4, -0xCFF6,0xCFF7,0xCFF8,0xCFF9,0xCFFA,0xCFFB,0xCFFD,0xCFFE, -0xCFFF,0xD001,0xD002,0xD003,0xD005,0xD006,0xD007,0xD008, -0xD009,0xD00A, 0, 0, 0, 0, 0, 0, -0xD00B,0xD00C,0xD00D,0xD00E,0xD00F,0xD010,0xD012,0xD013, -0xD014,0xD015,0xD016,0xD017,0xD019,0xD01A,0xD01B,0xD01C, -0xD01D,0xD01E,0xD01F,0xD020,0xD021,0xD022,0xD023,0xD024, -0xD025,0xD026,0xD027,0xD028,0xD029,0xD02A,0xD02B,0xD02C, -0xB05D,0xB07C,0xB07D,0xB080,0xB084,0xB08C,0xB08D,0xB08F, -0xB091,0xB098,0xB099,0xB09A,0xB09C,0xB09F,0xB0A0,0xB0A1, -0xB0A2,0xB0A8,0xB0A9,0xB0AB,0xB0AC,0xB0AD,0xB0AE,0xB0AF, -0xB0B1,0xB0B3,0xB0B4,0xB0B5,0xB0B8,0xB0BC,0xB0C4,0xB0C5, -0xB0C7,0xB0C8,0xB0C9,0xB0D0,0xB0D1,0xB0D4,0xB0D8,0xB0E0, -0xB0E5,0xB108,0xB109,0xB10B,0xB10C,0xB110,0xB112,0xB113, -0xB118,0xB119,0xB11B,0xB11C,0xB11D,0xB123,0xB124,0xB125, -0xB128,0xB12C,0xB134,0xB135,0xB137,0xB138,0xB139,0xB140, -0xB141,0xB144,0xB148,0xB150,0xB151,0xB154,0xB155,0xB158, -0xB15C,0xB160,0xB178,0xB179,0xB17C,0xB180,0xB182,0xB188, -0xB189,0xB18B,0xB18D,0xB192,0xB193,0xB194,0xB198,0xB19C, -0xB1A8,0xB1CC,0xB1D0,0xB1D4,0xB1DC,0xB1DD, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD02E,0xD02F,0xD030,0xD031,0xD032,0xD033,0xD036,0xD037, -0xD039,0xD03A,0xD03B,0xD03D,0xD03E,0xD03F,0xD040,0xD041, -0xD042,0xD043,0xD046,0xD048,0xD04A,0xD04B,0xD04C,0xD04D, -0xD04E,0xD04F, 0, 0, 0, 0, 0, 0, -0xD051,0xD052,0xD053,0xD055,0xD056,0xD057,0xD059,0xD05A, -0xD05B,0xD05C,0xD05D,0xD05E,0xD05F,0xD061,0xD062,0xD063, -0xD064,0xD065,0xD066,0xD067,0xD068,0xD069,0xD06A,0xD06B, -0xD06E,0xD06F, 0, 0, 0, 0, 0, 0, -0xD071,0xD072,0xD073,0xD075,0xD076,0xD077,0xD078,0xD079, -0xD07A,0xD07B,0xD07E,0xD07F,0xD080,0xD082,0xD083,0xD084, -0xD085,0xD086,0xD087,0xD088,0xD089,0xD08A,0xD08B,0xD08C, -0xD08D,0xD08E,0xD08F,0xD090,0xD091,0xD092,0xD093,0xD094, -0xB1DF,0xB1E8,0xB1E9,0xB1EC,0xB1F0,0xB1F9,0xB1FB,0xB1FD, -0xB204,0xB205,0xB208,0xB20B,0xB20C,0xB214,0xB215,0xB217, -0xB219,0xB220,0xB234,0xB23C,0xB258,0xB25C,0xB260,0xB268, -0xB269,0xB274,0xB275,0xB27C,0xB284,0xB285,0xB289,0xB290, -0xB291,0xB294,0xB298,0xB299,0xB29A,0xB2A0,0xB2A1,0xB2A3, -0xB2A5,0xB2A6,0xB2AA,0xB2AC,0xB2B0,0xB2B4,0xB2C8,0xB2C9, -0xB2CC,0xB2D0,0xB2D2,0xB2D8,0xB2D9,0xB2DB,0xB2DD,0xB2E2, -0xB2E4,0xB2E5,0xB2E6,0xB2E8,0xB2EB,0xB2EC,0xB2ED,0xB2EE, -0xB2EF,0xB2F3,0xB2F4,0xB2F5,0xB2F7,0xB2F8,0xB2F9,0xB2FA, -0xB2FB,0xB2FF,0xB300,0xB301,0xB304,0xB308,0xB310,0xB311, -0xB313,0xB314,0xB315,0xB31C,0xB354,0xB355,0xB356,0xB358, -0xB35B,0xB35C,0xB35E,0xB35F,0xB364,0xB365, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD095,0xD096,0xD097,0xD098,0xD099,0xD09A,0xD09B,0xD09C, -0xD09D,0xD09E,0xD09F,0xD0A0,0xD0A1,0xD0A2,0xD0A3,0xD0A6, -0xD0A7,0xD0A9,0xD0AA,0xD0AB,0xD0AD,0xD0AE,0xD0AF,0xD0B0, -0xD0B1,0xD0B2, 0, 0, 0, 0, 0, 0, -0xD0B3,0xD0B6,0xD0B8,0xD0BA,0xD0BB,0xD0BC,0xD0BD,0xD0BE, -0xD0BF,0xD0C2,0xD0C3,0xD0C5,0xD0C6,0xD0C7,0xD0CA,0xD0CB, -0xD0CC,0xD0CD,0xD0CE,0xD0CF,0xD0D2,0xD0D6,0xD0D7,0xD0D8, -0xD0D9,0xD0DA, 0, 0, 0, 0, 0, 0, -0xD0DB,0xD0DE,0xD0DF,0xD0E1,0xD0E2,0xD0E3,0xD0E5,0xD0E6, -0xD0E7,0xD0E8,0xD0E9,0xD0EA,0xD0EB,0xD0EE,0xD0F2,0xD0F3, -0xD0F4,0xD0F5,0xD0F6,0xD0F7,0xD0F9,0xD0FA,0xD0FB,0xD0FC, -0xD0FD,0xD0FE,0xD0FF,0xD100,0xD101,0xD102,0xD103,0xD104, -0xB367,0xB369,0xB36B,0xB36E,0xB370,0xB371,0xB374,0xB378, -0xB380,0xB381,0xB383,0xB384,0xB385,0xB38C,0xB390,0xB394, -0xB3A0,0xB3A1,0xB3A8,0xB3AC,0xB3C4,0xB3C5,0xB3C8,0xB3CB, -0xB3CC,0xB3CE,0xB3D0,0xB3D4,0xB3D5,0xB3D7,0xB3D9,0xB3DB, -0xB3DD,0xB3E0,0xB3E4,0xB3E8,0xB3FC,0xB410,0xB418,0xB41C, -0xB420,0xB428,0xB429,0xB42B,0xB434,0xB450,0xB451,0xB454, -0xB458,0xB460,0xB461,0xB463,0xB465,0xB46C,0xB480,0xB488, -0xB49D,0xB4A4,0xB4A8,0xB4AC,0xB4B5,0xB4B7,0xB4B9,0xB4C0, -0xB4C4,0xB4C8,0xB4D0,0xB4D5,0xB4DC,0xB4DD,0xB4E0,0xB4E3, -0xB4E4,0xB4E6,0xB4EC,0xB4ED,0xB4EF,0xB4F1,0xB4F8,0xB514, -0xB515,0xB518,0xB51B,0xB51C,0xB524,0xB525,0xB527,0xB528, -0xB529,0xB52A,0xB530,0xB531,0xB534,0xB538, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD105,0xD106,0xD107,0xD108,0xD109,0xD10A,0xD10B,0xD10C, -0xD10E,0xD10F,0xD110,0xD111,0xD112,0xD113,0xD114,0xD115, -0xD116,0xD117,0xD118,0xD119,0xD11A,0xD11B,0xD11C,0xD11D, -0xD11E,0xD11F, 0, 0, 0, 0, 0, 0, -0xD120,0xD121,0xD122,0xD123,0xD124,0xD125,0xD126,0xD127, -0xD128,0xD129,0xD12A,0xD12B,0xD12C,0xD12D,0xD12E,0xD12F, -0xD132,0xD133,0xD135,0xD136,0xD137,0xD139,0xD13B,0xD13C, -0xD13D,0xD13E, 0, 0, 0, 0, 0, 0, -0xD13F,0xD142,0xD146,0xD147,0xD148,0xD149,0xD14A,0xD14B, -0xD14E,0xD14F,0xD151,0xD152,0xD153,0xD155,0xD156,0xD157, -0xD158,0xD159,0xD15A,0xD15B,0xD15E,0xD160,0xD162,0xD163, -0xD164,0xD165,0xD166,0xD167,0xD169,0xD16A,0xD16B,0xD16D, -0xB540,0xB541,0xB543,0xB544,0xB545,0xB54B,0xB54C,0xB54D, -0xB550,0xB554,0xB55C,0xB55D,0xB55F,0xB560,0xB561,0xB5A0, -0xB5A1,0xB5A4,0xB5A8,0xB5AA,0xB5AB,0xB5B0,0xB5B1,0xB5B3, -0xB5B4,0xB5B5,0xB5BB,0xB5BC,0xB5BD,0xB5C0,0xB5C4,0xB5CC, -0xB5CD,0xB5CF,0xB5D0,0xB5D1,0xB5D8,0xB5EC,0xB610,0xB611, -0xB614,0xB618,0xB625,0xB62C,0xB634,0xB648,0xB664,0xB668, -0xB69C,0xB69D,0xB6A0,0xB6A4,0xB6AB,0xB6AC,0xB6B1,0xB6D4, -0xB6F0,0xB6F4,0xB6F8,0xB700,0xB701,0xB705,0xB728,0xB729, -0xB72C,0xB72F,0xB730,0xB738,0xB739,0xB73B,0xB744,0xB748, -0xB74C,0xB754,0xB755,0xB760,0xB764,0xB768,0xB770,0xB771, -0xB773,0xB775,0xB77C,0xB77D,0xB780,0xB784,0xB78C,0xB78D, -0xB78F,0xB790,0xB791,0xB792,0xB796,0xB797, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD16E,0xD16F,0xD170,0xD171,0xD172,0xD173,0xD174,0xD175, -0xD176,0xD177,0xD178,0xD179,0xD17A,0xD17B,0xD17D,0xD17E, -0xD17F,0xD180,0xD181,0xD182,0xD183,0xD185,0xD186,0xD187, -0xD189,0xD18A, 0, 0, 0, 0, 0, 0, -0xD18B,0xD18C,0xD18D,0xD18E,0xD18F,0xD190,0xD191,0xD192, -0xD193,0xD194,0xD195,0xD196,0xD197,0xD198,0xD199,0xD19A, -0xD19B,0xD19C,0xD19D,0xD19E,0xD19F,0xD1A2,0xD1A3,0xD1A5, -0xD1A6,0xD1A7, 0, 0, 0, 0, 0, 0, -0xD1A9,0xD1AA,0xD1AB,0xD1AC,0xD1AD,0xD1AE,0xD1AF,0xD1B2, -0xD1B4,0xD1B6,0xD1B7,0xD1B8,0xD1B9,0xD1BB,0xD1BD,0xD1BE, -0xD1BF,0xD1C1,0xD1C2,0xD1C3,0xD1C4,0xD1C5,0xD1C6,0xD1C7, -0xD1C8,0xD1C9,0xD1CA,0xD1CB,0xD1CC,0xD1CD,0xD1CE,0xD1CF, -0xB798,0xB799,0xB79C,0xB7A0,0xB7A8,0xB7A9,0xB7AB,0xB7AC, -0xB7AD,0xB7B4,0xB7B5,0xB7B8,0xB7C7,0xB7C9,0xB7EC,0xB7ED, -0xB7F0,0xB7F4,0xB7FC,0xB7FD,0xB7FF,0xB800,0xB801,0xB807, -0xB808,0xB809,0xB80C,0xB810,0xB818,0xB819,0xB81B,0xB81D, -0xB824,0xB825,0xB828,0xB82C,0xB834,0xB835,0xB837,0xB838, -0xB839,0xB840,0xB844,0xB851,0xB853,0xB85C,0xB85D,0xB860, -0xB864,0xB86C,0xB86D,0xB86F,0xB871,0xB878,0xB87C,0xB88D, -0xB8A8,0xB8B0,0xB8B4,0xB8B8,0xB8C0,0xB8C1,0xB8C3,0xB8C5, -0xB8CC,0xB8D0,0xB8D4,0xB8DD,0xB8DF,0xB8E1,0xB8E8,0xB8E9, -0xB8EC,0xB8F0,0xB8F8,0xB8F9,0xB8FB,0xB8FD,0xB904,0xB918, -0xB920,0xB93C,0xB93D,0xB940,0xB944,0xB94C,0xB94F,0xB951, -0xB958,0xB959,0xB95C,0xB960,0xB968,0xB969, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD1D0,0xD1D1,0xD1D2,0xD1D3,0xD1D4,0xD1D5,0xD1D6,0xD1D7, -0xD1D9,0xD1DA,0xD1DB,0xD1DC,0xD1DD,0xD1DE,0xD1DF,0xD1E0, -0xD1E1,0xD1E2,0xD1E3,0xD1E4,0xD1E5,0xD1E6,0xD1E7,0xD1E8, -0xD1E9,0xD1EA, 0, 0, 0, 0, 0, 0, -0xD1EB,0xD1EC,0xD1ED,0xD1EE,0xD1EF,0xD1F0,0xD1F1,0xD1F2, -0xD1F3,0xD1F5,0xD1F6,0xD1F7,0xD1F9,0xD1FA,0xD1FB,0xD1FC, -0xD1FD,0xD1FE,0xD1FF,0xD200,0xD201,0xD202,0xD203,0xD204, -0xD205,0xD206, 0, 0, 0, 0, 0, 0, -0xD208,0xD20A,0xD20B,0xD20C,0xD20D,0xD20E,0xD20F,0xD211, -0xD212,0xD213,0xD214,0xD215,0xD216,0xD217,0xD218,0xD219, -0xD21A,0xD21B,0xD21C,0xD21D,0xD21E,0xD21F,0xD220,0xD221, -0xD222,0xD223,0xD224,0xD225,0xD226,0xD227,0xD228,0xD229, -0xB96B,0xB96D,0xB974,0xB975,0xB978,0xB97C,0xB984,0xB985, -0xB987,0xB989,0xB98A,0xB98D,0xB98E,0xB9AC,0xB9AD,0xB9B0, -0xB9B4,0xB9BC,0xB9BD,0xB9BF,0xB9C1,0xB9C8,0xB9C9,0xB9CC, -0xB9CE,0xB9CF,0xB9D0,0xB9D1,0xB9D2,0xB9D8,0xB9D9,0xB9DB, -0xB9DD,0xB9DE,0xB9E1,0xB9E3,0xB9E4,0xB9E5,0xB9E8,0xB9EC, -0xB9F4,0xB9F5,0xB9F7,0xB9F8,0xB9F9,0xB9FA,0xBA00,0xBA01, -0xBA08,0xBA15,0xBA38,0xBA39,0xBA3C,0xBA40,0xBA42,0xBA48, -0xBA49,0xBA4B,0xBA4D,0xBA4E,0xBA53,0xBA54,0xBA55,0xBA58, -0xBA5C,0xBA64,0xBA65,0xBA67,0xBA68,0xBA69,0xBA70,0xBA71, -0xBA74,0xBA78,0xBA83,0xBA84,0xBA85,0xBA87,0xBA8C,0xBAA8, -0xBAA9,0xBAAB,0xBAAC,0xBAB0,0xBAB2,0xBAB8,0xBAB9,0xBABB, -0xBABD,0xBAC4,0xBAC8,0xBAD8,0xBAD9,0xBAFC, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD22A,0xD22B,0xD22E,0xD22F,0xD231,0xD232,0xD233,0xD235, -0xD236,0xD237,0xD238,0xD239,0xD23A,0xD23B,0xD23E,0xD240, -0xD242,0xD243,0xD244,0xD245,0xD246,0xD247,0xD249,0xD24A, -0xD24B,0xD24C, 0, 0, 0, 0, 0, 0, -0xD24D,0xD24E,0xD24F,0xD250,0xD251,0xD252,0xD253,0xD254, -0xD255,0xD256,0xD257,0xD258,0xD259,0xD25A,0xD25B,0xD25D, -0xD25E,0xD25F,0xD260,0xD261,0xD262,0xD263,0xD265,0xD266, -0xD267,0xD268, 0, 0, 0, 0, 0, 0, -0xD269,0xD26A,0xD26B,0xD26C,0xD26D,0xD26E,0xD26F,0xD270, -0xD271,0xD272,0xD273,0xD274,0xD275,0xD276,0xD277,0xD278, -0xD279,0xD27A,0xD27B,0xD27C,0xD27D,0xD27E,0xD27F,0xD282, -0xD283,0xD285,0xD286,0xD287,0xD289,0xD28A,0xD28B,0xD28C, -0xBB00,0xBB04,0xBB0D,0xBB0F,0xBB11,0xBB18,0xBB1C,0xBB20, -0xBB29,0xBB2B,0xBB34,0xBB35,0xBB36,0xBB38,0xBB3B,0xBB3C, -0xBB3D,0xBB3E,0xBB44,0xBB45,0xBB47,0xBB49,0xBB4D,0xBB4F, -0xBB50,0xBB54,0xBB58,0xBB61,0xBB63,0xBB6C,0xBB88,0xBB8C, -0xBB90,0xBBA4,0xBBA8,0xBBAC,0xBBB4,0xBBB7,0xBBC0,0xBBC4, -0xBBC8,0xBBD0,0xBBD3,0xBBF8,0xBBF9,0xBBFC,0xBBFF,0xBC00, -0xBC02,0xBC08,0xBC09,0xBC0B,0xBC0C,0xBC0D,0xBC0F,0xBC11, -0xBC14,0xBC15,0xBC16,0xBC17,0xBC18,0xBC1B,0xBC1C,0xBC1D, -0xBC1E,0xBC1F,0xBC24,0xBC25,0xBC27,0xBC29,0xBC2D,0xBC30, -0xBC31,0xBC34,0xBC38,0xBC40,0xBC41,0xBC43,0xBC44,0xBC45, -0xBC49,0xBC4C,0xBC4D,0xBC50,0xBC5D,0xBC84,0xBC85,0xBC88, -0xBC8B,0xBC8C,0xBC8E,0xBC94,0xBC95,0xBC97, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD28D,0xD28E,0xD28F,0xD292,0xD293,0xD294,0xD296,0xD297, -0xD298,0xD299,0xD29A,0xD29B,0xD29D,0xD29E,0xD29F,0xD2A1, -0xD2A2,0xD2A3,0xD2A5,0xD2A6,0xD2A7,0xD2A8,0xD2A9,0xD2AA, -0xD2AB,0xD2AD, 0, 0, 0, 0, 0, 0, -0xD2AE,0xD2AF,0xD2B0,0xD2B2,0xD2B3,0xD2B4,0xD2B5,0xD2B6, -0xD2B7,0xD2BA,0xD2BB,0xD2BD,0xD2BE,0xD2C1,0xD2C3,0xD2C4, -0xD2C5,0xD2C6,0xD2C7,0xD2CA,0xD2CC,0xD2CD,0xD2CE,0xD2CF, -0xD2D0,0xD2D1, 0, 0, 0, 0, 0, 0, -0xD2D2,0xD2D3,0xD2D5,0xD2D6,0xD2D7,0xD2D9,0xD2DA,0xD2DB, -0xD2DD,0xD2DE,0xD2DF,0xD2E0,0xD2E1,0xD2E2,0xD2E3,0xD2E6, -0xD2E7,0xD2E8,0xD2E9,0xD2EA,0xD2EB,0xD2EC,0xD2ED,0xD2EE, -0xD2EF,0xD2F2,0xD2F3,0xD2F5,0xD2F6,0xD2F7,0xD2F9,0xD2FA, -0xBC99,0xBC9A,0xBCA0,0xBCA1,0xBCA4,0xBCA7,0xBCA8,0xBCB0, -0xBCB1,0xBCB3,0xBCB4,0xBCB5,0xBCBC,0xBCBD,0xBCC0,0xBCC4, -0xBCCD,0xBCCF,0xBCD0,0xBCD1,0xBCD5,0xBCD8,0xBCDC,0xBCF4, -0xBCF5,0xBCF6,0xBCF8,0xBCFC,0xBD04,0xBD05,0xBD07,0xBD09, -0xBD10,0xBD14,0xBD24,0xBD2C,0xBD40,0xBD48,0xBD49,0xBD4C, -0xBD50,0xBD58,0xBD59,0xBD64,0xBD68,0xBD80,0xBD81,0xBD84, -0xBD87,0xBD88,0xBD89,0xBD8A,0xBD90,0xBD91,0xBD93,0xBD95, -0xBD99,0xBD9A,0xBD9C,0xBDA4,0xBDB0,0xBDB8,0xBDD4,0xBDD5, -0xBDD8,0xBDDC,0xBDE9,0xBDF0,0xBDF4,0xBDF8,0xBE00,0xBE03, -0xBE05,0xBE0C,0xBE0D,0xBE10,0xBE14,0xBE1C,0xBE1D,0xBE1F, -0xBE44,0xBE45,0xBE48,0xBE4C,0xBE4E,0xBE54,0xBE55,0xBE57, -0xBE59,0xBE5A,0xBE5B,0xBE60,0xBE61,0xBE64, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD2FB,0xD2FC,0xD2FD,0xD2FE,0xD2FF,0xD302,0xD304,0xD306, -0xD307,0xD308,0xD309,0xD30A,0xD30B,0xD30F,0xD311,0xD312, -0xD313,0xD315,0xD317,0xD318,0xD319,0xD31A,0xD31B,0xD31E, -0xD322,0xD323, 0, 0, 0, 0, 0, 0, -0xD324,0xD326,0xD327,0xD32A,0xD32B,0xD32D,0xD32E,0xD32F, -0xD331,0xD332,0xD333,0xD334,0xD335,0xD336,0xD337,0xD33A, -0xD33E,0xD33F,0xD340,0xD341,0xD342,0xD343,0xD346,0xD347, -0xD348,0xD349, 0, 0, 0, 0, 0, 0, -0xD34A,0xD34B,0xD34C,0xD34D,0xD34E,0xD34F,0xD350,0xD351, -0xD352,0xD353,0xD354,0xD355,0xD356,0xD357,0xD358,0xD359, -0xD35A,0xD35B,0xD35C,0xD35D,0xD35E,0xD35F,0xD360,0xD361, -0xD362,0xD363,0xD364,0xD365,0xD366,0xD367,0xD368,0xD369, -0xBE68,0xBE6A,0xBE70,0xBE71,0xBE73,0xBE74,0xBE75,0xBE7B, -0xBE7C,0xBE7D,0xBE80,0xBE84,0xBE8C,0xBE8D,0xBE8F,0xBE90, -0xBE91,0xBE98,0xBE99,0xBEA8,0xBED0,0xBED1,0xBED4,0xBED7, -0xBED8,0xBEE0,0xBEE3,0xBEE4,0xBEE5,0xBEEC,0xBF01,0xBF08, -0xBF09,0xBF18,0xBF19,0xBF1B,0xBF1C,0xBF1D,0xBF40,0xBF41, -0xBF44,0xBF48,0xBF50,0xBF51,0xBF55,0xBF94,0xBFB0,0xBFC5, -0xBFCC,0xBFCD,0xBFD0,0xBFD4,0xBFDC,0xBFDF,0xBFE1,0xC03C, -0xC051,0xC058,0xC05C,0xC060,0xC068,0xC069,0xC090,0xC091, -0xC094,0xC098,0xC0A0,0xC0A1,0xC0A3,0xC0A5,0xC0AC,0xC0AD, -0xC0AF,0xC0B0,0xC0B3,0xC0B4,0xC0B5,0xC0B6,0xC0BC,0xC0BD, -0xC0BF,0xC0C0,0xC0C1,0xC0C5,0xC0C8,0xC0C9,0xC0CC,0xC0D0, -0xC0D8,0xC0D9,0xC0DB,0xC0DC,0xC0DD,0xC0E4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD36A,0xD36B,0xD36C,0xD36D,0xD36E,0xD36F,0xD370,0xD371, -0xD372,0xD373,0xD374,0xD375,0xD376,0xD377,0xD378,0xD379, -0xD37A,0xD37B,0xD37E,0xD37F,0xD381,0xD382,0xD383,0xD385, -0xD386,0xD387, 0, 0, 0, 0, 0, 0, -0xD388,0xD389,0xD38A,0xD38B,0xD38E,0xD392,0xD393,0xD394, -0xD395,0xD396,0xD397,0xD39A,0xD39B,0xD39D,0xD39E,0xD39F, -0xD3A1,0xD3A2,0xD3A3,0xD3A4,0xD3A5,0xD3A6,0xD3A7,0xD3AA, -0xD3AC,0xD3AE, 0, 0, 0, 0, 0, 0, -0xD3AF,0xD3B0,0xD3B1,0xD3B2,0xD3B3,0xD3B5,0xD3B6,0xD3B7, -0xD3B9,0xD3BA,0xD3BB,0xD3BD,0xD3BE,0xD3BF,0xD3C0,0xD3C1, -0xD3C2,0xD3C3,0xD3C6,0xD3C7,0xD3CA,0xD3CB,0xD3CC,0xD3CD, -0xD3CE,0xD3CF,0xD3D1,0xD3D2,0xD3D3,0xD3D4,0xD3D5,0xD3D6, -0xC0E5,0xC0E8,0xC0EC,0xC0F4,0xC0F5,0xC0F7,0xC0F9,0xC100, -0xC104,0xC108,0xC110,0xC115,0xC11C,0xC11D,0xC11E,0xC11F, -0xC120,0xC123,0xC124,0xC126,0xC127,0xC12C,0xC12D,0xC12F, -0xC130,0xC131,0xC136,0xC138,0xC139,0xC13C,0xC140,0xC148, -0xC149,0xC14B,0xC14C,0xC14D,0xC154,0xC155,0xC158,0xC15C, -0xC164,0xC165,0xC167,0xC168,0xC169,0xC170,0xC174,0xC178, -0xC185,0xC18C,0xC18D,0xC18E,0xC190,0xC194,0xC196,0xC19C, -0xC19D,0xC19F,0xC1A1,0xC1A5,0xC1A8,0xC1A9,0xC1AC,0xC1B0, -0xC1BD,0xC1C4,0xC1C8,0xC1CC,0xC1D4,0xC1D7,0xC1D8,0xC1E0, -0xC1E4,0xC1E8,0xC1F0,0xC1F1,0xC1F3,0xC1FC,0xC1FD,0xC200, -0xC204,0xC20C,0xC20D,0xC20F,0xC211,0xC218,0xC219,0xC21C, -0xC21F,0xC220,0xC228,0xC229,0xC22B,0xC22D, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD3D7,0xD3D9,0xD3DA,0xD3DB,0xD3DC,0xD3DD,0xD3DE,0xD3DF, -0xD3E0,0xD3E2,0xD3E4,0xD3E5,0xD3E6,0xD3E7,0xD3E8,0xD3E9, -0xD3EA,0xD3EB,0xD3EE,0xD3EF,0xD3F1,0xD3F2,0xD3F3,0xD3F5, -0xD3F6,0xD3F7, 0, 0, 0, 0, 0, 0, -0xD3F8,0xD3F9,0xD3FA,0xD3FB,0xD3FE,0xD400,0xD402,0xD403, -0xD404,0xD405,0xD406,0xD407,0xD409,0xD40A,0xD40B,0xD40C, -0xD40D,0xD40E,0xD40F,0xD410,0xD411,0xD412,0xD413,0xD414, -0xD415,0xD416, 0, 0, 0, 0, 0, 0, -0xD417,0xD418,0xD419,0xD41A,0xD41B,0xD41C,0xD41E,0xD41F, -0xD420,0xD421,0xD422,0xD423,0xD424,0xD425,0xD426,0xD427, -0xD428,0xD429,0xD42A,0xD42B,0xD42C,0xD42D,0xD42E,0xD42F, -0xD430,0xD431,0xD432,0xD433,0xD434,0xD435,0xD436,0xD437, -0xC22F,0xC231,0xC232,0xC234,0xC248,0xC250,0xC251,0xC254, -0xC258,0xC260,0xC265,0xC26C,0xC26D,0xC270,0xC274,0xC27C, -0xC27D,0xC27F,0xC281,0xC288,0xC289,0xC290,0xC298,0xC29B, -0xC29D,0xC2A4,0xC2A5,0xC2A8,0xC2AC,0xC2AD,0xC2B4,0xC2B5, -0xC2B7,0xC2B9,0xC2DC,0xC2DD,0xC2E0,0xC2E3,0xC2E4,0xC2EB, -0xC2EC,0xC2ED,0xC2EF,0xC2F1,0xC2F6,0xC2F8,0xC2F9,0xC2FB, -0xC2FC,0xC300,0xC308,0xC309,0xC30C,0xC30D,0xC313,0xC314, -0xC315,0xC318,0xC31C,0xC324,0xC325,0xC328,0xC329,0xC345, -0xC368,0xC369,0xC36C,0xC370,0xC372,0xC378,0xC379,0xC37C, -0xC37D,0xC384,0xC388,0xC38C,0xC3C0,0xC3D8,0xC3D9,0xC3DC, -0xC3DF,0xC3E0,0xC3E2,0xC3E8,0xC3E9,0xC3ED,0xC3F4,0xC3F5, -0xC3F8,0xC408,0xC410,0xC424,0xC42C,0xC430, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD438,0xD439,0xD43A,0xD43B,0xD43C,0xD43D,0xD43E,0xD43F, -0xD441,0xD442,0xD443,0xD445,0xD446,0xD447,0xD448,0xD449, -0xD44A,0xD44B,0xD44C,0xD44D,0xD44E,0xD44F,0xD450,0xD451, -0xD452,0xD453, 0, 0, 0, 0, 0, 0, -0xD454,0xD455,0xD456,0xD457,0xD458,0xD459,0xD45A,0xD45B, -0xD45D,0xD45E,0xD45F,0xD461,0xD462,0xD463,0xD465,0xD466, -0xD467,0xD468,0xD469,0xD46A,0xD46B,0xD46C,0xD46E,0xD470, -0xD471,0xD472, 0, 0, 0, 0, 0, 0, -0xD473,0xD474,0xD475,0xD476,0xD477,0xD47A,0xD47B,0xD47D, -0xD47E,0xD481,0xD483,0xD484,0xD485,0xD486,0xD487,0xD48A, -0xD48C,0xD48E,0xD48F,0xD490,0xD491,0xD492,0xD493,0xD495, -0xD496,0xD497,0xD498,0xD499,0xD49A,0xD49B,0xD49C,0xD49D, -0xC434,0xC43C,0xC43D,0xC448,0xC464,0xC465,0xC468,0xC46C, -0xC474,0xC475,0xC479,0xC480,0xC494,0xC49C,0xC4B8,0xC4BC, -0xC4E9,0xC4F0,0xC4F1,0xC4F4,0xC4F8,0xC4FA,0xC4FF,0xC500, -0xC501,0xC50C,0xC510,0xC514,0xC51C,0xC528,0xC529,0xC52C, -0xC530,0xC538,0xC539,0xC53B,0xC53D,0xC544,0xC545,0xC548, -0xC549,0xC54A,0xC54C,0xC54D,0xC54E,0xC553,0xC554,0xC555, -0xC557,0xC558,0xC559,0xC55D,0xC55E,0xC560,0xC561,0xC564, -0xC568,0xC570,0xC571,0xC573,0xC574,0xC575,0xC57C,0xC57D, -0xC580,0xC584,0xC587,0xC58C,0xC58D,0xC58F,0xC591,0xC595, -0xC597,0xC598,0xC59C,0xC5A0,0xC5A9,0xC5B4,0xC5B5,0xC5B8, -0xC5B9,0xC5BB,0xC5BC,0xC5BD,0xC5BE,0xC5C4,0xC5C5,0xC5C6, -0xC5C7,0xC5C8,0xC5C9,0xC5CA,0xC5CC,0xC5CE, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD49E,0xD49F,0xD4A0,0xD4A1,0xD4A2,0xD4A3,0xD4A4,0xD4A5, -0xD4A6,0xD4A7,0xD4A8,0xD4AA,0xD4AB,0xD4AC,0xD4AD,0xD4AE, -0xD4AF,0xD4B0,0xD4B1,0xD4B2,0xD4B3,0xD4B4,0xD4B5,0xD4B6, -0xD4B7,0xD4B8, 0, 0, 0, 0, 0, 0, -0xD4B9,0xD4BA,0xD4BB,0xD4BC,0xD4BD,0xD4BE,0xD4BF,0xD4C0, -0xD4C1,0xD4C2,0xD4C3,0xD4C4,0xD4C5,0xD4C6,0xD4C7,0xD4C8, -0xD4C9,0xD4CA,0xD4CB,0xD4CD,0xD4CE,0xD4CF,0xD4D1,0xD4D2, -0xD4D3,0xD4D5, 0, 0, 0, 0, 0, 0, -0xD4D6,0xD4D7,0xD4D8,0xD4D9,0xD4DA,0xD4DB,0xD4DD,0xD4DE, -0xD4E0,0xD4E1,0xD4E2,0xD4E3,0xD4E4,0xD4E5,0xD4E6,0xD4E7, -0xD4E9,0xD4EA,0xD4EB,0xD4ED,0xD4EE,0xD4EF,0xD4F1,0xD4F2, -0xD4F3,0xD4F4,0xD4F5,0xD4F6,0xD4F7,0xD4F9,0xD4FA,0xD4FC, -0xC5D0,0xC5D1,0xC5D4,0xC5D8,0xC5E0,0xC5E1,0xC5E3,0xC5E5, -0xC5EC,0xC5ED,0xC5EE,0xC5F0,0xC5F4,0xC5F6,0xC5F7,0xC5FC, -0xC5FD,0xC5FE,0xC5FF,0xC600,0xC601,0xC605,0xC606,0xC607, -0xC608,0xC60C,0xC610,0xC618,0xC619,0xC61B,0xC61C,0xC624, -0xC625,0xC628,0xC62C,0xC62D,0xC62E,0xC630,0xC633,0xC634, -0xC635,0xC637,0xC639,0xC63B,0xC640,0xC641,0xC644,0xC648, -0xC650,0xC651,0xC653,0xC654,0xC655,0xC65C,0xC65D,0xC660, -0xC66C,0xC66F,0xC671,0xC678,0xC679,0xC67C,0xC680,0xC688, -0xC689,0xC68B,0xC68D,0xC694,0xC695,0xC698,0xC69C,0xC6A4, -0xC6A5,0xC6A7,0xC6A9,0xC6B0,0xC6B1,0xC6B4,0xC6B8,0xC6B9, -0xC6BA,0xC6C0,0xC6C1,0xC6C3,0xC6C5,0xC6CC,0xC6CD,0xC6D0, -0xC6D4,0xC6DC,0xC6DD,0xC6E0,0xC6E1,0xC6E8, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD4FE,0xD4FF,0xD500,0xD501,0xD502,0xD503,0xD505,0xD506, -0xD507,0xD509,0xD50A,0xD50B,0xD50D,0xD50E,0xD50F,0xD510, -0xD511,0xD512,0xD513,0xD516,0xD518,0xD519,0xD51A,0xD51B, -0xD51C,0xD51D, 0, 0, 0, 0, 0, 0, -0xD51E,0xD51F,0xD520,0xD521,0xD522,0xD523,0xD524,0xD525, -0xD526,0xD527,0xD528,0xD529,0xD52A,0xD52B,0xD52C,0xD52D, -0xD52E,0xD52F,0xD530,0xD531,0xD532,0xD533,0xD534,0xD535, -0xD536,0xD537, 0, 0, 0, 0, 0, 0, -0xD538,0xD539,0xD53A,0xD53B,0xD53E,0xD53F,0xD541,0xD542, -0xD543,0xD545,0xD546,0xD547,0xD548,0xD549,0xD54A,0xD54B, -0xD54E,0xD550,0xD552,0xD553,0xD554,0xD555,0xD556,0xD557, -0xD55A,0xD55B,0xD55D,0xD55E,0xD55F,0xD561,0xD562,0xD563, -0xC6E9,0xC6EC,0xC6F0,0xC6F8,0xC6F9,0xC6FD,0xC704,0xC705, -0xC708,0xC70C,0xC714,0xC715,0xC717,0xC719,0xC720,0xC721, -0xC724,0xC728,0xC730,0xC731,0xC733,0xC735,0xC737,0xC73C, -0xC73D,0xC740,0xC744,0xC74A,0xC74C,0xC74D,0xC74F,0xC751, -0xC752,0xC753,0xC754,0xC755,0xC756,0xC757,0xC758,0xC75C, -0xC760,0xC768,0xC76B,0xC774,0xC775,0xC778,0xC77C,0xC77D, -0xC77E,0xC783,0xC784,0xC785,0xC787,0xC788,0xC789,0xC78A, -0xC78E,0xC790,0xC791,0xC794,0xC796,0xC797,0xC798,0xC79A, -0xC7A0,0xC7A1,0xC7A3,0xC7A4,0xC7A5,0xC7A6,0xC7AC,0xC7AD, -0xC7B0,0xC7B4,0xC7BC,0xC7BD,0xC7BF,0xC7C0,0xC7C1,0xC7C8, -0xC7C9,0xC7CC,0xC7CE,0xC7D0,0xC7D8,0xC7DD,0xC7E4,0xC7E8, -0xC7EC,0xC800,0xC801,0xC804,0xC808,0xC80A, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD564,0xD566,0xD567,0xD56A,0xD56C,0xD56E,0xD56F,0xD570, -0xD571,0xD572,0xD573,0xD576,0xD577,0xD579,0xD57A,0xD57B, -0xD57D,0xD57E,0xD57F,0xD580,0xD581,0xD582,0xD583,0xD586, -0xD58A,0xD58B, 0, 0, 0, 0, 0, 0, -0xD58C,0xD58D,0xD58E,0xD58F,0xD591,0xD592,0xD593,0xD594, -0xD595,0xD596,0xD597,0xD598,0xD599,0xD59A,0xD59B,0xD59C, -0xD59D,0xD59E,0xD59F,0xD5A0,0xD5A1,0xD5A2,0xD5A3,0xD5A4, -0xD5A6,0xD5A7, 0, 0, 0, 0, 0, 0, -0xD5A8,0xD5A9,0xD5AA,0xD5AB,0xD5AC,0xD5AD,0xD5AE,0xD5AF, -0xD5B0,0xD5B1,0xD5B2,0xD5B3,0xD5B4,0xD5B5,0xD5B6,0xD5B7, -0xD5B8,0xD5B9,0xD5BA,0xD5BB,0xD5BC,0xD5BD,0xD5BE,0xD5BF, -0xD5C0,0xD5C1,0xD5C2,0xD5C3,0xD5C4,0xD5C5,0xD5C6,0xD5C7, -0xC810,0xC811,0xC813,0xC815,0xC816,0xC81C,0xC81D,0xC820, -0xC824,0xC82C,0xC82D,0xC82F,0xC831,0xC838,0xC83C,0xC840, -0xC848,0xC849,0xC84C,0xC84D,0xC854,0xC870,0xC871,0xC874, -0xC878,0xC87A,0xC880,0xC881,0xC883,0xC885,0xC886,0xC887, -0xC88B,0xC88C,0xC88D,0xC894,0xC89D,0xC89F,0xC8A1,0xC8A8, -0xC8BC,0xC8BD,0xC8C4,0xC8C8,0xC8CC,0xC8D4,0xC8D5,0xC8D7, -0xC8D9,0xC8E0,0xC8E1,0xC8E4,0xC8F5,0xC8FC,0xC8FD,0xC900, -0xC904,0xC905,0xC906,0xC90C,0xC90D,0xC90F,0xC911,0xC918, -0xC92C,0xC934,0xC950,0xC951,0xC954,0xC958,0xC960,0xC961, -0xC963,0xC96C,0xC970,0xC974,0xC97C,0xC988,0xC989,0xC98C, -0xC990,0xC998,0xC999,0xC99B,0xC99D,0xC9C0,0xC9C1,0xC9C4, -0xC9C7,0xC9C8,0xC9CA,0xC9D0,0xC9D1,0xC9D3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD5CA,0xD5CB,0xD5CD,0xD5CE,0xD5CF,0xD5D1,0xD5D3,0xD5D4, -0xD5D5,0xD5D6,0xD5D7,0xD5DA,0xD5DC,0xD5DE,0xD5DF,0xD5E0, -0xD5E1,0xD5E2,0xD5E3,0xD5E6,0xD5E7,0xD5E9,0xD5EA,0xD5EB, -0xD5ED,0xD5EE, 0, 0, 0, 0, 0, 0, -0xD5EF,0xD5F0,0xD5F1,0xD5F2,0xD5F3,0xD5F6,0xD5F8,0xD5FA, -0xD5FB,0xD5FC,0xD5FD,0xD5FE,0xD5FF,0xD602,0xD603,0xD605, -0xD606,0xD607,0xD609,0xD60A,0xD60B,0xD60C,0xD60D,0xD60E, -0xD60F,0xD612, 0, 0, 0, 0, 0, 0, -0xD616,0xD617,0xD618,0xD619,0xD61A,0xD61B,0xD61D,0xD61E, -0xD61F,0xD621,0xD622,0xD623,0xD625,0xD626,0xD627,0xD628, -0xD629,0xD62A,0xD62B,0xD62C,0xD62E,0xD62F,0xD630,0xD631, -0xD632,0xD633,0xD634,0xD635,0xD636,0xD637,0xD63A,0xD63B, -0xC9D5,0xC9D6,0xC9D9,0xC9DA,0xC9DC,0xC9DD,0xC9E0,0xC9E2, -0xC9E4,0xC9E7,0xC9EC,0xC9ED,0xC9EF,0xC9F0,0xC9F1,0xC9F8, -0xC9F9,0xC9FC,0xCA00,0xCA08,0xCA09,0xCA0B,0xCA0C,0xCA0D, -0xCA14,0xCA18,0xCA29,0xCA4C,0xCA4D,0xCA50,0xCA54,0xCA5C, -0xCA5D,0xCA5F,0xCA60,0xCA61,0xCA68,0xCA7D,0xCA84,0xCA98, -0xCABC,0xCABD,0xCAC0,0xCAC4,0xCACC,0xCACD,0xCACF,0xCAD1, -0xCAD3,0xCAD8,0xCAD9,0xCAE0,0xCAEC,0xCAF4,0xCB08,0xCB10, -0xCB14,0xCB18,0xCB20,0xCB21,0xCB41,0xCB48,0xCB49,0xCB4C, -0xCB50,0xCB58,0xCB59,0xCB5D,0xCB64,0xCB78,0xCB79,0xCB9C, -0xCBB8,0xCBD4,0xCBE4,0xCBE7,0xCBE9,0xCC0C,0xCC0D,0xCC10, -0xCC14,0xCC1C,0xCC1D,0xCC21,0xCC22,0xCC27,0xCC28,0xCC29, -0xCC2C,0xCC2E,0xCC30,0xCC38,0xCC39,0xCC3B, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD63D,0xD63E,0xD63F,0xD641,0xD642,0xD643,0xD644,0xD646, -0xD647,0xD64A,0xD64C,0xD64E,0xD64F,0xD650,0xD652,0xD653, -0xD656,0xD657,0xD659,0xD65A,0xD65B,0xD65D,0xD65E,0xD65F, -0xD660,0xD661, 0, 0, 0, 0, 0, 0, -0xD662,0xD663,0xD664,0xD665,0xD666,0xD668,0xD66A,0xD66B, -0xD66C,0xD66D,0xD66E,0xD66F,0xD672,0xD673,0xD675,0xD676, -0xD677,0xD678,0xD679,0xD67A,0xD67B,0xD67C,0xD67D,0xD67E, -0xD67F,0xD680, 0, 0, 0, 0, 0, 0, -0xD681,0xD682,0xD684,0xD686,0xD687,0xD688,0xD689,0xD68A, -0xD68B,0xD68E,0xD68F,0xD691,0xD692,0xD693,0xD695,0xD696, -0xD697,0xD698,0xD699,0xD69A,0xD69B,0xD69C,0xD69E,0xD6A0, -0xD6A2,0xD6A3,0xD6A4,0xD6A5,0xD6A6,0xD6A7,0xD6A9,0xD6AA, -0xCC3C,0xCC3D,0xCC3E,0xCC44,0xCC45,0xCC48,0xCC4C,0xCC54, -0xCC55,0xCC57,0xCC58,0xCC59,0xCC60,0xCC64,0xCC66,0xCC68, -0xCC70,0xCC75,0xCC98,0xCC99,0xCC9C,0xCCA0,0xCCA8,0xCCA9, -0xCCAB,0xCCAC,0xCCAD,0xCCB4,0xCCB5,0xCCB8,0xCCBC,0xCCC4, -0xCCC5,0xCCC7,0xCCC9,0xCCD0,0xCCD4,0xCCE4,0xCCEC,0xCCF0, -0xCD01,0xCD08,0xCD09,0xCD0C,0xCD10,0xCD18,0xCD19,0xCD1B, -0xCD1D,0xCD24,0xCD28,0xCD2C,0xCD39,0xCD5C,0xCD60,0xCD64, -0xCD6C,0xCD6D,0xCD6F,0xCD71,0xCD78,0xCD88,0xCD94,0xCD95, -0xCD98,0xCD9C,0xCDA4,0xCDA5,0xCDA7,0xCDA9,0xCDB0,0xCDC4, -0xCDCC,0xCDD0,0xCDE8,0xCDEC,0xCDF0,0xCDF8,0xCDF9,0xCDFB, -0xCDFD,0xCE04,0xCE08,0xCE0C,0xCE14,0xCE19,0xCE20,0xCE21, -0xCE24,0xCE28,0xCE30,0xCE31,0xCE33,0xCE35, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD6AB,0xD6AD,0xD6AE,0xD6AF,0xD6B1,0xD6B2,0xD6B3,0xD6B4, -0xD6B5,0xD6B6,0xD6B7,0xD6B8,0xD6BA,0xD6BC,0xD6BD,0xD6BE, -0xD6BF,0xD6C0,0xD6C1,0xD6C2,0xD6C3,0xD6C6,0xD6C7,0xD6C9, -0xD6CA,0xD6CB, 0, 0, 0, 0, 0, 0, -0xD6CD,0xD6CE,0xD6CF,0xD6D0,0xD6D2,0xD6D3,0xD6D5,0xD6D6, -0xD6D8,0xD6DA,0xD6DB,0xD6DC,0xD6DD,0xD6DE,0xD6DF,0xD6E1, -0xD6E2,0xD6E3,0xD6E5,0xD6E6,0xD6E7,0xD6E9,0xD6EA,0xD6EB, -0xD6EC,0xD6ED, 0, 0, 0, 0, 0, 0, -0xD6EE,0xD6EF,0xD6F1,0xD6F2,0xD6F3,0xD6F4,0xD6F6,0xD6F7, -0xD6F8,0xD6F9,0xD6FA,0xD6FB,0xD6FE,0xD6FF,0xD701,0xD702, -0xD703,0xD705,0xD706,0xD707,0xD708,0xD709,0xD70A,0xD70B, -0xD70C,0xD70D,0xD70E,0xD70F,0xD710,0xD712,0xD713,0xD714, -0xCE58,0xCE59,0xCE5C,0xCE5F,0xCE60,0xCE61,0xCE68,0xCE69, -0xCE6B,0xCE6D,0xCE74,0xCE75,0xCE78,0xCE7C,0xCE84,0xCE85, -0xCE87,0xCE89,0xCE90,0xCE91,0xCE94,0xCE98,0xCEA0,0xCEA1, -0xCEA3,0xCEA4,0xCEA5,0xCEAC,0xCEAD,0xCEC1,0xCEE4,0xCEE5, -0xCEE8,0xCEEB,0xCEEC,0xCEF4,0xCEF5,0xCEF7,0xCEF8,0xCEF9, -0xCF00,0xCF01,0xCF04,0xCF08,0xCF10,0xCF11,0xCF13,0xCF15, -0xCF1C,0xCF20,0xCF24,0xCF2C,0xCF2D,0xCF2F,0xCF30,0xCF31, -0xCF38,0xCF54,0xCF55,0xCF58,0xCF5C,0xCF64,0xCF65,0xCF67, -0xCF69,0xCF70,0xCF71,0xCF74,0xCF78,0xCF80,0xCF85,0xCF8C, -0xCFA1,0xCFA8,0xCFB0,0xCFC4,0xCFE0,0xCFE1,0xCFE4,0xCFE8, -0xCFF0,0xCFF1,0xCFF3,0xCFF5,0xCFFC,0xD000,0xD004,0xD011, -0xD018,0xD02D,0xD034,0xD035,0xD038,0xD03C, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD715,0xD716,0xD717,0xD71A,0xD71B,0xD71D,0xD71E,0xD71F, -0xD721,0xD722,0xD723,0xD724,0xD725,0xD726,0xD727,0xD72A, -0xD72C,0xD72E,0xD72F,0xD730,0xD731,0xD732,0xD733,0xD736, -0xD737,0xD739, 0, 0, 0, 0, 0, 0, -0xD73A,0xD73B,0xD73D,0xD73E,0xD73F,0xD740,0xD741,0xD742, -0xD743,0xD745,0xD746,0xD748,0xD74A,0xD74B,0xD74C,0xD74D, -0xD74E,0xD74F,0xD752,0xD753,0xD755,0xD75A,0xD75B,0xD75C, -0xD75D,0xD75E, 0, 0, 0, 0, 0, 0, -0xD75F,0xD762,0xD764,0xD766,0xD767,0xD768,0xD76A,0xD76B, -0xD76D,0xD76E,0xD76F,0xD771,0xD772,0xD773,0xD775,0xD776, -0xD777,0xD778,0xD779,0xD77A,0xD77B,0xD77E,0xD77F,0xD780, -0xD782,0xD783,0xD784,0xD785,0xD786,0xD787,0xD78A,0xD78B, -0xD044,0xD045,0xD047,0xD049,0xD050,0xD054,0xD058,0xD060, -0xD06C,0xD06D,0xD070,0xD074,0xD07C,0xD07D,0xD081,0xD0A4, -0xD0A5,0xD0A8,0xD0AC,0xD0B4,0xD0B5,0xD0B7,0xD0B9,0xD0C0, -0xD0C1,0xD0C4,0xD0C8,0xD0C9,0xD0D0,0xD0D1,0xD0D3,0xD0D4, -0xD0D5,0xD0DC,0xD0DD,0xD0E0,0xD0E4,0xD0EC,0xD0ED,0xD0EF, -0xD0F0,0xD0F1,0xD0F8,0xD10D,0xD130,0xD131,0xD134,0xD138, -0xD13A,0xD140,0xD141,0xD143,0xD144,0xD145,0xD14C,0xD14D, -0xD150,0xD154,0xD15C,0xD15D,0xD15F,0xD161,0xD168,0xD16C, -0xD17C,0xD184,0xD188,0xD1A0,0xD1A1,0xD1A4,0xD1A8,0xD1B0, -0xD1B1,0xD1B3,0xD1B5,0xD1BA,0xD1BC,0xD1C0,0xD1D8,0xD1F4, -0xD1F8,0xD207,0xD209,0xD210,0xD22C,0xD22D,0xD230,0xD234, -0xD23C,0xD23D,0xD23F,0xD241,0xD248,0xD25C, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD78D,0xD78E,0xD78F,0xD791,0xD792,0xD793,0xD794,0xD795, -0xD796,0xD797,0xD79A,0xD79C,0xD79E,0xD79F,0xD7A0,0xD7A1, -0xD7A2,0xD7A3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD264,0xD280,0xD281,0xD284,0xD288,0xD290,0xD291,0xD295, -0xD29C,0xD2A0,0xD2A4,0xD2AC,0xD2B1,0xD2B8,0xD2B9,0xD2BC, -0xD2BF,0xD2C0,0xD2C2,0xD2C8,0xD2C9,0xD2CB,0xD2D4,0xD2D8, -0xD2DC,0xD2E4,0xD2E5,0xD2F0,0xD2F1,0xD2F4,0xD2F8,0xD300, -0xD301,0xD303,0xD305,0xD30C,0xD30D,0xD30E,0xD310,0xD314, -0xD316,0xD31C,0xD31D,0xD31F,0xD320,0xD321,0xD325,0xD328, -0xD329,0xD32C,0xD330,0xD338,0xD339,0xD33B,0xD33C,0xD33D, -0xD344,0xD345,0xD37C,0xD37D,0xD380,0xD384,0xD38C,0xD38D, -0xD38F,0xD390,0xD391,0xD398,0xD399,0xD39C,0xD3A0,0xD3A8, -0xD3A9,0xD3AB,0xD3AD,0xD3B4,0xD3B8,0xD3BC,0xD3C4,0xD3C5, -0xD3C8,0xD3C9,0xD3D0,0xD3D8,0xD3E1,0xD3E3,0xD3EC,0xD3ED, -0xD3F0,0xD3F4,0xD3FC,0xD3FD,0xD3FF,0xD401, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD408,0xD41D,0xD440,0xD444,0xD45C,0xD460,0xD464,0xD46D, -0xD46F,0xD478,0xD479,0xD47C,0xD47F,0xD480,0xD482,0xD488, -0xD489,0xD48B,0xD48D,0xD494,0xD4A9,0xD4CC,0xD4D0,0xD4D4, -0xD4DC,0xD4DF,0xD4E8,0xD4EC,0xD4F0,0xD4F8,0xD4FB,0xD4FD, -0xD504,0xD508,0xD50C,0xD514,0xD515,0xD517,0xD53C,0xD53D, -0xD540,0xD544,0xD54C,0xD54D,0xD54F,0xD551,0xD558,0xD559, -0xD55C,0xD560,0xD565,0xD568,0xD569,0xD56B,0xD56D,0xD574, -0xD575,0xD578,0xD57C,0xD584,0xD585,0xD587,0xD588,0xD589, -0xD590,0xD5A5,0xD5C8,0xD5C9,0xD5CC,0xD5D0,0xD5D2,0xD5D8, -0xD5D9,0xD5DB,0xD5DD,0xD5E4,0xD5E5,0xD5E8,0xD5EC,0xD5F4, -0xD5F5,0xD5F7,0xD5F9,0xD600,0xD601,0xD604,0xD608,0xD610, -0xD611,0xD613,0xD614,0xD615,0xD61C,0xD620, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD624,0xD62D,0xD638,0xD639,0xD63C,0xD640,0xD645,0xD648, -0xD649,0xD64B,0xD64D,0xD651,0xD654,0xD655,0xD658,0xD65C, -0xD667,0xD669,0xD670,0xD671,0xD674,0xD683,0xD685,0xD68C, -0xD68D,0xD690,0xD694,0xD69D,0xD69F,0xD6A1,0xD6A8,0xD6AC, -0xD6B0,0xD6B9,0xD6BB,0xD6C4,0xD6C5,0xD6C8,0xD6CC,0xD6D1, -0xD6D4,0xD6D7,0xD6D9,0xD6E0,0xD6E4,0xD6E8,0xD6F0,0xD6F5, -0xD6FC,0xD6FD,0xD700,0xD704,0xD711,0xD718,0xD719,0xD71C, -0xD720,0xD728,0xD729,0xD72B,0xD72D,0xD734,0xD735,0xD738, -0xD73C,0xD744,0xD747,0xD749,0xD750,0xD751,0xD754,0xD756, -0xD757,0xD758,0xD759,0xD760,0xD761,0xD763,0xD765,0xD769, -0xD76C,0xD770,0xD774,0xD77C,0xD77D,0xD781,0xD788,0xD789, -0xD78C,0xD790,0xD798,0xD799,0xD79B,0xD79D}; - -/* page 1 0xCAA1-0xFDFE */ -static uint16 tab_ksc5601_uni1[]={ -0x4F3D,0x4F73,0x5047,0x50F9,0x52A0,0x53EF,0x5475,0x54E5, -0x5609,0x5AC1,0x5BB6,0x6687,0x67B6,0x67B7,0x67EF,0x6B4C, -0x73C2,0x75C2,0x7A3C,0x82DB,0x8304,0x8857,0x8888,0x8A36, -0x8CC8,0x8DCF,0x8EFB,0x8FE6,0x99D5,0x523B,0x5374,0x5404, -0x606A,0x6164,0x6BBC,0x73CF,0x811A,0x89BA,0x89D2,0x95A3, -0x4F83,0x520A,0x58BE,0x5978,0x59E6,0x5E72,0x5E79,0x61C7, -0x63C0,0x6746,0x67EC,0x687F,0x6F97,0x764E,0x770B,0x78F5, -0x7A08,0x7AFF,0x7C21,0x809D,0x826E,0x8271,0x8AEB,0x9593, -0x4E6B,0x559D,0x66F7,0x6E34,0x78A3,0x7AED,0x845B,0x8910, -0x874E,0x97A8,0x52D8,0x574E,0x582A,0x5D4C,0x611F,0x61BE, -0x6221,0x6562,0x67D1,0x6A44,0x6E1B,0x7518,0x75B3,0x76E3, -0x77B0,0x7D3A,0x90AF,0x9451,0x9452,0x9F95, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5323,0x5CAC,0x7532,0x80DB,0x9240,0x9598,0x525B,0x5808, -0x59DC,0x5CA1,0x5D17,0x5EB7,0x5F3A,0x5F4A,0x6177,0x6C5F, -0x757A,0x7586,0x7CE0,0x7D73,0x7DB1,0x7F8C,0x8154,0x8221, -0x8591,0x8941,0x8B1B,0x92FC,0x964D,0x9C47,0x4ECB,0x4EF7, -0x500B,0x51F1,0x584F,0x6137,0x613E,0x6168,0x6539,0x69EA, -0x6F11,0x75A5,0x7686,0x76D6,0x7B87,0x82A5,0x84CB,0xF900, -0x93A7,0x958B,0x5580,0x5BA2,0x5751,0xF901,0x7CB3,0x7FB9, -0x91B5,0x5028,0x53BB,0x5C45,0x5DE8,0x62D2,0x636E,0x64DA, -0x64E7,0x6E20,0x70AC,0x795B,0x8DDD,0x8E1E,0xF902,0x907D, -0x9245,0x92F8,0x4E7E,0x4EF6,0x5065,0x5DFE,0x5EFA,0x6106, -0x6957,0x8171,0x8654,0x8E47,0x9375,0x9A2B,0x4E5E,0x5091, -0x6770,0x6840,0x5109,0x528D,0x5292,0x6AA2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x77BC,0x9210,0x9ED4,0x52AB,0x602F,0x8FF2,0x5048,0x61A9, -0x63ED,0x64CA,0x683C,0x6A84,0x6FC0,0x8188,0x89A1,0x9694, -0x5805,0x727D,0x72AC,0x7504,0x7D79,0x7E6D,0x80A9,0x898B, -0x8B74,0x9063,0x9D51,0x6289,0x6C7A,0x6F54,0x7D50,0x7F3A, -0x8A23,0x517C,0x614A,0x7B9D,0x8B19,0x9257,0x938C,0x4EAC, -0x4FD3,0x501E,0x50BE,0x5106,0x52C1,0x52CD,0x537F,0x5770, -0x5883,0x5E9A,0x5F91,0x6176,0x61AC,0x64CE,0x656C,0x666F, -0x66BB,0x66F4,0x6897,0x6D87,0x7085,0x70F1,0x749F,0x74A5, -0x74CA,0x75D9,0x786C,0x78EC,0x7ADF,0x7AF6,0x7D45,0x7D93, -0x8015,0x803F,0x811B,0x8396,0x8B66,0x8F15,0x9015,0x93E1, -0x9803,0x9838,0x9A5A,0x9BE8,0x4FC2,0x5553,0x583A,0x5951, -0x5B63,0x5C46,0x60B8,0x6212,0x6842,0x68B0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x68E8,0x6EAA,0x754C,0x7678,0x78CE,0x7A3D,0x7CFB,0x7E6B, -0x7E7C,0x8A08,0x8AA1,0x8C3F,0x968E,0x9DC4,0x53E4,0x53E9, -0x544A,0x5471,0x56FA,0x59D1,0x5B64,0x5C3B,0x5EAB,0x62F7, -0x6537,0x6545,0x6572,0x66A0,0x67AF,0x69C1,0x6CBD,0x75FC, -0x7690,0x777E,0x7A3F,0x7F94,0x8003,0x80A1,0x818F,0x82E6, -0x82FD,0x83F0,0x85C1,0x8831,0x88B4,0x8AA5,0xF903,0x8F9C, -0x932E,0x96C7,0x9867,0x9AD8,0x9F13,0x54ED,0x659B,0x66F2, -0x688F,0x7A40,0x8C37,0x9D60,0x56F0,0x5764,0x5D11,0x6606, -0x68B1,0x68CD,0x6EFE,0x7428,0x889E,0x9BE4,0x6C68,0xF904, -0x9AA8,0x4F9B,0x516C,0x5171,0x529F,0x5B54,0x5DE5,0x6050, -0x606D,0x62F1,0x63A7,0x653B,0x73D9,0x7A7A,0x86A3,0x8CA2, -0x978F,0x4E32,0x5BE1,0x6208,0x679C,0x74DC, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x79D1,0x83D3,0x8A87,0x8AB2,0x8DE8,0x904E,0x934B,0x9846, -0x5ED3,0x69E8,0x85FF,0x90ED,0xF905,0x51A0,0x5B98,0x5BEC, -0x6163,0x68FA,0x6B3E,0x704C,0x742F,0x74D8,0x7BA1,0x7F50, -0x83C5,0x89C0,0x8CAB,0x95DC,0x9928,0x522E,0x605D,0x62EC, -0x9002,0x4F8A,0x5149,0x5321,0x58D9,0x5EE3,0x66E0,0x6D38, -0x709A,0x72C2,0x73D6,0x7B50,0x80F1,0x945B,0x5366,0x639B, -0x7F6B,0x4E56,0x5080,0x584A,0x58DE,0x602A,0x6127,0x62D0, -0x69D0,0x9B41,0x5B8F,0x7D18,0x80B1,0x8F5F,0x4EA4,0x50D1, -0x54AC,0x55AC,0x5B0C,0x5DA0,0x5DE7,0x652A,0x654E,0x6821, -0x6A4B,0x72E1,0x768E,0x77EF,0x7D5E,0x7FF9,0x81A0,0x854E, -0x86DF,0x8F03,0x8F4E,0x90CA,0x9903,0x9A55,0x9BAB,0x4E18, -0x4E45,0x4E5D,0x4EC7,0x4FF1,0x5177,0x52FE, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5340,0x53E3,0x53E5,0x548E,0x5614,0x5775,0x57A2,0x5BC7, -0x5D87,0x5ED0,0x61FC,0x62D8,0x6551,0x67B8,0x67E9,0x69CB, -0x6B50,0x6BC6,0x6BEC,0x6C42,0x6E9D,0x7078,0x72D7,0x7396, -0x7403,0x77BF,0x77E9,0x7A76,0x7D7F,0x8009,0x81FC,0x8205, -0x820A,0x82DF,0x8862,0x8B33,0x8CFC,0x8EC0,0x9011,0x90B1, -0x9264,0x92B6,0x99D2,0x9A45,0x9CE9,0x9DD7,0x9F9C,0x570B, -0x5C40,0x83CA,0x97A0,0x97AB,0x9EB4,0x541B,0x7A98,0x7FA4, -0x88D9,0x8ECD,0x90E1,0x5800,0x5C48,0x6398,0x7A9F,0x5BAE, -0x5F13,0x7A79,0x7AAE,0x828E,0x8EAC,0x5026,0x5238,0x52F8, -0x5377,0x5708,0x62F3,0x6372,0x6B0A,0x6DC3,0x7737,0x53A5, -0x7357,0x8568,0x8E76,0x95D5,0x673A,0x6AC3,0x6F70,0x8A6D, -0x8ECC,0x994B,0xF906,0x6677,0x6B78,0x8CB4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9B3C,0xF907,0x53EB,0x572D,0x594E,0x63C6,0x69FB,0x73EA, -0x7845,0x7ABA,0x7AC5,0x7CFE,0x8475,0x898F,0x8D73,0x9035, -0x95A8,0x52FB,0x5747,0x7547,0x7B60,0x83CC,0x921E,0xF908, -0x6A58,0x514B,0x524B,0x5287,0x621F,0x68D8,0x6975,0x9699, -0x50C5,0x52A4,0x52E4,0x61C3,0x65A4,0x6839,0x69FF,0x747E, -0x7B4B,0x82B9,0x83EB,0x89B2,0x8B39,0x8FD1,0x9949,0xF909, -0x4ECA,0x5997,0x64D2,0x6611,0x6A8E,0x7434,0x7981,0x79BD, -0x82A9,0x887E,0x887F,0x895F,0xF90A,0x9326,0x4F0B,0x53CA, -0x6025,0x6271,0x6C72,0x7D1A,0x7D66,0x4E98,0x5162,0x77DC, -0x80AF,0x4F01,0x4F0E,0x5176,0x5180,0x55DC,0x5668,0x573B, -0x57FA,0x57FC,0x5914,0x5947,0x5993,0x5BC4,0x5C90,0x5D0E, -0x5DF1,0x5E7E,0x5FCC,0x6280,0x65D7,0x65E3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x671E,0x671F,0x675E,0x68CB,0x68C4,0x6A5F,0x6B3A,0x6C23, -0x6C7D,0x6C82,0x6DC7,0x7398,0x7426,0x742A,0x7482,0x74A3, -0x7578,0x757F,0x7881,0x78EF,0x7941,0x7947,0x7948,0x797A, -0x7B95,0x7D00,0x7DBA,0x7F88,0x8006,0x802D,0x808C,0x8A18, -0x8B4F,0x8C48,0x8D77,0x9321,0x9324,0x98E2,0x9951,0x9A0E, -0x9A0F,0x9A65,0x9E92,0x7DCA,0x4F76,0x5409,0x62EE,0x6854, -0x91D1,0x55AB,0x513A,0xF90B,0xF90C,0x5A1C,0x61E6,0xF90D, -0x62CF,0x62FF,0xF90E,0xF90F,0xF910,0xF911,0xF912,0xF913, -0x90A3,0xF914,0xF915,0xF916,0xF917,0xF918,0x8AFE,0xF919, -0xF91A,0xF91B,0xF91C,0x6696,0xF91D,0x7156,0xF91E,0xF91F, -0x96E3,0xF920,0x634F,0x637A,0x5357,0xF921,0x678F,0x6960, -0x6E73,0xF922,0x7537,0xF923,0xF924,0xF925, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7D0D,0xF926,0xF927,0x8872,0x56CA,0x5A18,0xF928,0xF929, -0xF92A,0xF92B,0xF92C,0x4E43,0xF92D,0x5167,0x5948,0x67F0, -0x8010,0xF92E,0x5973,0x5E74,0x649A,0x79CA,0x5FF5,0x606C, -0x62C8,0x637B,0x5BE7,0x5BD7,0x52AA,0xF92F,0x5974,0x5F29, -0x6012,0xF930,0xF931,0xF932,0x7459,0xF933,0xF934,0xF935, -0xF936,0xF937,0xF938,0x99D1,0xF939,0xF93A,0xF93B,0xF93C, -0xF93D,0xF93E,0xF93F,0xF940,0xF941,0xF942,0xF943,0x6FC3, -0xF944,0xF945,0x81BF,0x8FB2,0x60F1,0xF946,0xF947,0x8166, -0xF948,0xF949,0x5C3F,0xF94A,0xF94B,0xF94C,0xF94D,0xF94E, -0xF94F,0xF950,0xF951,0x5AE9,0x8A25,0x677B,0x7D10,0xF952, -0xF953,0xF954,0xF955,0xF956,0xF957,0x80FD,0xF958,0xF959, -0x5C3C,0x6CE5,0x533F,0x6EBA,0x591A,0x8336, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4E39,0x4EB6,0x4F46,0x55AE,0x5718,0x58C7,0x5F56,0x65B7, -0x65E6,0x6A80,0x6BB5,0x6E4D,0x77ED,0x7AEF,0x7C1E,0x7DDE, -0x86CB,0x8892,0x9132,0x935B,0x64BB,0x6FBE,0x737A,0x75B8, -0x9054,0x5556,0x574D,0x61BA,0x64D4,0x66C7,0x6DE1,0x6E5B, -0x6F6D,0x6FB9,0x75F0,0x8043,0x81BD,0x8541,0x8983,0x8AC7, -0x8B5A,0x931F,0x6C93,0x7553,0x7B54,0x8E0F,0x905D,0x5510, -0x5802,0x5858,0x5E62,0x6207,0x649E,0x68E0,0x7576,0x7CD6, -0x87B3,0x9EE8,0x4EE3,0x5788,0x576E,0x5927,0x5C0D,0x5CB1, -0x5E36,0x5F85,0x6234,0x64E1,0x73B3,0x81FA,0x888B,0x8CB8, -0x968A,0x9EDB,0x5B85,0x5FB7,0x60B3,0x5012,0x5200,0x5230, -0x5716,0x5835,0x5857,0x5C0E,0x5C60,0x5CF6,0x5D8B,0x5EA6, -0x5F92,0x60BC,0x6311,0x6389,0x6417,0x6843, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x68F9,0x6AC2,0x6DD8,0x6E21,0x6ED4,0x6FE4,0x71FE,0x76DC, -0x7779,0x79B1,0x7A3B,0x8404,0x89A9,0x8CED,0x8DF3,0x8E48, -0x9003,0x9014,0x9053,0x90FD,0x934D,0x9676,0x97DC,0x6BD2, -0x7006,0x7258,0x72A2,0x7368,0x7763,0x79BF,0x7BE4,0x7E9B, -0x8B80,0x58A9,0x60C7,0x6566,0x65FD,0x66BE,0x6C8C,0x711E, -0x71C9,0x8C5A,0x9813,0x4E6D,0x7A81,0x4EDD,0x51AC,0x51CD, -0x52D5,0x540C,0x61A7,0x6771,0x6850,0x68DF,0x6D1E,0x6F7C, -0x75BC,0x77B3,0x7AE5,0x80F4,0x8463,0x9285,0x515C,0x6597, -0x675C,0x6793,0x75D8,0x7AC7,0x8373,0xF95A,0x8C46,0x9017, -0x982D,0x5C6F,0x81C0,0x829A,0x9041,0x906F,0x920D,0x5F97, -0x5D9D,0x6A59,0x71C8,0x767B,0x7B49,0x85E4,0x8B04,0x9127, -0x9A30,0x5587,0x61F6,0xF95B,0x7669,0x7F85, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x863F,0x87BA,0x88F8,0x908F,0xF95C,0x6D1B,0x70D9,0x73DE, -0x7D61,0x843D,0xF95D,0x916A,0x99F1,0xF95E,0x4E82,0x5375, -0x6B04,0x6B12,0x703E,0x721B,0x862D,0x9E1E,0x524C,0x8FA3, -0x5D50,0x64E5,0x652C,0x6B16,0x6FEB,0x7C43,0x7E9C,0x85CD, -0x8964,0x89BD,0x62C9,0x81D8,0x881F,0x5ECA,0x6717,0x6D6A, -0x72FC,0x7405,0x746F,0x8782,0x90DE,0x4F86,0x5D0D,0x5FA0, -0x840A,0x51B7,0x63A0,0x7565,0x4EAE,0x5006,0x5169,0x51C9, -0x6881,0x6A11,0x7CAE,0x7CB1,0x7CE7,0x826F,0x8AD2,0x8F1B, -0x91CF,0x4FB6,0x5137,0x52F5,0x5442,0x5EEC,0x616E,0x623E, -0x65C5,0x6ADA,0x6FFE,0x792A,0x85DC,0x8823,0x95AD,0x9A62, -0x9A6A,0x9E97,0x9ECE,0x529B,0x66C6,0x6B77,0x701D,0x792B, -0x8F62,0x9742,0x6190,0x6200,0x6523,0x6F23, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7149,0x7489,0x7DF4,0x806F,0x84EE,0x8F26,0x9023,0x934A, -0x51BD,0x5217,0x52A3,0x6D0C,0x70C8,0x88C2,0x5EC9,0x6582, -0x6BAE,0x6FC2,0x7C3E,0x7375,0x4EE4,0x4F36,0x56F9,0xF95F, -0x5CBA,0x5DBA,0x601C,0x73B2,0x7B2D,0x7F9A,0x7FCE,0x8046, -0x901E,0x9234,0x96F6,0x9748,0x9818,0x9F61,0x4F8B,0x6FA7, -0x79AE,0x91B4,0x96B7,0x52DE,0xF960,0x6488,0x64C4,0x6AD3, -0x6F5E,0x7018,0x7210,0x76E7,0x8001,0x8606,0x865C,0x8DEF, -0x8F05,0x9732,0x9B6F,0x9DFA,0x9E75,0x788C,0x797F,0x7DA0, -0x83C9,0x9304,0x9E7F,0x9E93,0x8AD6,0x58DF,0x5F04,0x6727, -0x7027,0x74CF,0x7C60,0x807E,0x5121,0x7028,0x7262,0x78CA, -0x8CC2,0x8CDA,0x8CF4,0x96F7,0x4E86,0x50DA,0x5BEE,0x5ED6, -0x6599,0x71CE,0x7642,0x77AD,0x804A,0x84FC, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x907C,0x9B27,0x9F8D,0x58D8,0x5A41,0x5C62,0x6A13,0x6DDA, -0x6F0F,0x763B,0x7D2F,0x7E37,0x851E,0x8938,0x93E4,0x964B, -0x5289,0x65D2,0x67F3,0x69B4,0x6D41,0x6E9C,0x700F,0x7409, -0x7460,0x7559,0x7624,0x786B,0x8B2C,0x985E,0x516D,0x622E, -0x9678,0x4F96,0x502B,0x5D19,0x6DEA,0x7DB8,0x8F2A,0x5F8B, -0x6144,0x6817,0xF961,0x9686,0x52D2,0x808B,0x51DC,0x51CC, -0x695E,0x7A1C,0x7DBE,0x83F1,0x9675,0x4FDA,0x5229,0x5398, -0x540F,0x550E,0x5C65,0x60A7,0x674E,0x68A8,0x6D6C,0x7281, -0x72F8,0x7406,0x7483,0xF962,0x75E2,0x7C6C,0x7F79,0x7FB8, -0x8389,0x88CF,0x88E1,0x91CC,0x91D0,0x96E2,0x9BC9,0x541D, -0x6F7E,0x71D0,0x7498,0x85FA,0x8EAA,0x96A3,0x9C57,0x9E9F, -0x6797,0x6DCB,0x7433,0x81E8,0x9716,0x782C, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7ACB,0x7B20,0x7C92,0x6469,0x746A,0x75F2,0x78BC,0x78E8, -0x99AC,0x9B54,0x9EBB,0x5BDE,0x5E55,0x6F20,0x819C,0x83AB, -0x9088,0x4E07,0x534D,0x5A29,0x5DD2,0x5F4E,0x6162,0x633D, -0x6669,0x66FC,0x6EFF,0x6F2B,0x7063,0x779E,0x842C,0x8513, -0x883B,0x8F13,0x9945,0x9C3B,0x551C,0x62B9,0x672B,0x6CAB, -0x8309,0x896A,0x977A,0x4EA1,0x5984,0x5FD8,0x5FD9,0x671B, -0x7DB2,0x7F54,0x8292,0x832B,0x83BD,0x8F1E,0x9099,0x57CB, -0x59B9,0x5A92,0x5BD0,0x6627,0x679A,0x6885,0x6BCF,0x7164, -0x7F75,0x8CB7,0x8CE3,0x9081,0x9B45,0x8108,0x8C8A,0x964C, -0x9A40,0x9EA5,0x5B5F,0x6C13,0x731B,0x76F2,0x76DF,0x840C, -0x51AA,0x8993,0x514D,0x5195,0x52C9,0x68C9,0x6C94,0x7704, -0x7720,0x7DBF,0x7DEC,0x9762,0x9EB5,0x6EC5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8511,0x51A5,0x540D,0x547D,0x660E,0x669D,0x6927,0x6E9F, -0x76BF,0x7791,0x8317,0x84C2,0x879F,0x9169,0x9298,0x9CF4, -0x8882,0x4FAE,0x5192,0x52DF,0x59C6,0x5E3D,0x6155,0x6478, -0x6479,0x66AE,0x67D0,0x6A21,0x6BCD,0x6BDB,0x725F,0x7261, -0x7441,0x7738,0x77DB,0x8017,0x82BC,0x8305,0x8B00,0x8B28, -0x8C8C,0x6728,0x6C90,0x7267,0x76EE,0x7766,0x7A46,0x9DA9, -0x6B7F,0x6C92,0x5922,0x6726,0x8499,0x536F,0x5893,0x5999, -0x5EDF,0x63CF,0x6634,0x6773,0x6E3A,0x732B,0x7AD7,0x82D7, -0x9328,0x52D9,0x5DEB,0x61AE,0x61CB,0x620A,0x62C7,0x64AB, -0x65E0,0x6959,0x6B66,0x6BCB,0x7121,0x73F7,0x755D,0x7E46, -0x821E,0x8302,0x856A,0x8AA3,0x8CBF,0x9727,0x9D61,0x58A8, -0x9ED8,0x5011,0x520E,0x543B,0x554F,0x6587, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6C76,0x7D0A,0x7D0B,0x805E,0x868A,0x9580,0x96EF,0x52FF, -0x6C95,0x7269,0x5473,0x5A9A,0x5C3E,0x5D4B,0x5F4C,0x5FAE, -0x672A,0x68B6,0x6963,0x6E3C,0x6E44,0x7709,0x7C73,0x7F8E, -0x8587,0x8B0E,0x8FF7,0x9761,0x9EF4,0x5CB7,0x60B6,0x610D, -0x61AB,0x654F,0x65FB,0x65FC,0x6C11,0x6CEF,0x739F,0x73C9, -0x7DE1,0x9594,0x5BC6,0x871C,0x8B10,0x525D,0x535A,0x62CD, -0x640F,0x64B2,0x6734,0x6A38,0x6CCA,0x73C0,0x749E,0x7B94, -0x7C95,0x7E1B,0x818A,0x8236,0x8584,0x8FEB,0x96F9,0x99C1, -0x4F34,0x534A,0x53CD,0x53DB,0x62CC,0x642C,0x6500,0x6591, -0x69C3,0x6CEE,0x6F58,0x73ED,0x7554,0x7622,0x76E4,0x76FC, -0x78D0,0x78FB,0x792C,0x7D46,0x822C,0x87E0,0x8FD4,0x9812, -0x98EF,0x52C3,0x62D4,0x64A5,0x6E24,0x6F51, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x767C,0x8DCB,0x91B1,0x9262,0x9AEE,0x9B43,0x5023,0x508D, -0x574A,0x59A8,0x5C28,0x5E47,0x5F77,0x623F,0x653E,0x65B9, -0x65C1,0x6609,0x678B,0x699C,0x6EC2,0x78C5,0x7D21,0x80AA, -0x8180,0x822B,0x82B3,0x84A1,0x868C,0x8A2A,0x8B17,0x90A6, -0x9632,0x9F90,0x500D,0x4FF3,0xF963,0x57F9,0x5F98,0x62DC, -0x6392,0x676F,0x6E43,0x7119,0x76C3,0x80CC,0x80DA,0x88F4, -0x88F5,0x8919,0x8CE0,0x8F29,0x914D,0x966A,0x4F2F,0x4F70, -0x5E1B,0x67CF,0x6822,0x767D,0x767E,0x9B44,0x5E61,0x6A0A, -0x7169,0x71D4,0x756A,0xF964,0x7E41,0x8543,0x85E9,0x98DC, -0x4F10,0x7B4F,0x7F70,0x95A5,0x51E1,0x5E06,0x68B5,0x6C3E, -0x6C4E,0x6CDB,0x72AF,0x7BC4,0x8303,0x6CD5,0x743A,0x50FB, -0x5288,0x58C1,0x64D8,0x6A97,0x74A7,0x7656, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x78A7,0x8617,0x95E2,0x9739,0xF965,0x535E,0x5F01,0x8B8A, -0x8FA8,0x8FAF,0x908A,0x5225,0x77A5,0x9C49,0x9F08,0x4E19, -0x5002,0x5175,0x5C5B,0x5E77,0x661E,0x663A,0x67C4,0x68C5, -0x70B3,0x7501,0x75C5,0x79C9,0x7ADD,0x8F27,0x9920,0x9A08, -0x4FDD,0x5821,0x5831,0x5BF6,0x666E,0x6B65,0x6D11,0x6E7A, -0x6F7D,0x73E4,0x752B,0x83E9,0x88DC,0x8913,0x8B5C,0x8F14, -0x4F0F,0x50D5,0x5310,0x535C,0x5B93,0x5FA9,0x670D,0x798F, -0x8179,0x832F,0x8514,0x8907,0x8986,0x8F39,0x8F3B,0x99A5, -0x9C12,0x672C,0x4E76,0x4FF8,0x5949,0x5C01,0x5CEF,0x5CF0, -0x6367,0x68D2,0x70FD,0x71A2,0x742B,0x7E2B,0x84EC,0x8702, -0x9022,0x92D2,0x9CF3,0x4E0D,0x4ED8,0x4FEF,0x5085,0x5256, -0x526F,0x5426,0x5490,0x57E0,0x592B,0x5A66, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5B5A,0x5B75,0x5BCC,0x5E9C,0xF966,0x6276,0x6577,0x65A7, -0x6D6E,0x6EA5,0x7236,0x7B26,0x7C3F,0x7F36,0x8150,0x8151, -0x819A,0x8240,0x8299,0x83A9,0x8A03,0x8CA0,0x8CE6,0x8CFB, -0x8D74,0x8DBA,0x90E8,0x91DC,0x961C,0x9644,0x99D9,0x9CE7, -0x5317,0x5206,0x5429,0x5674,0x58B3,0x5954,0x596E,0x5FFF, -0x61A4,0x626E,0x6610,0x6C7E,0x711A,0x76C6,0x7C89,0x7CDE, -0x7D1B,0x82AC,0x8CC1,0x96F0,0xF967,0x4F5B,0x5F17,0x5F7F, -0x62C2,0x5D29,0x670B,0x68DA,0x787C,0x7E43,0x9D6C,0x4E15, -0x5099,0x5315,0x532A,0x5351,0x5983,0x5A62,0x5E87,0x60B2, -0x618A,0x6249,0x6279,0x6590,0x6787,0x69A7,0x6BD4,0x6BD6, -0x6BD7,0x6BD8,0x6CB8,0xF968,0x7435,0x75FA,0x7812,0x7891, -0x79D5,0x79D8,0x7C83,0x7DCB,0x7FE1,0x80A5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x813E,0x81C2,0x83F2,0x871A,0x88E8,0x8AB9,0x8B6C,0x8CBB, -0x9119,0x975E,0x98DB,0x9F3B,0x56AC,0x5B2A,0x5F6C,0x658C, -0x6AB3,0x6BAF,0x6D5C,0x6FF1,0x7015,0x725D,0x73AD,0x8CA7, -0x8CD3,0x983B,0x6191,0x6C37,0x8058,0x9A01,0x4E4D,0x4E8B, -0x4E9B,0x4ED5,0x4F3A,0x4F3C,0x4F7F,0x4FDF,0x50FF,0x53F2, -0x53F8,0x5506,0x55E3,0x56DB,0x58EB,0x5962,0x5A11,0x5BEB, -0x5BFA,0x5C04,0x5DF3,0x5E2B,0x5F99,0x601D,0x6368,0x659C, -0x65AF,0x67F6,0x67FB,0x68AD,0x6B7B,0x6C99,0x6CD7,0x6E23, -0x7009,0x7345,0x7802,0x793E,0x7940,0x7960,0x79C1,0x7BE9, -0x7D17,0x7D72,0x8086,0x820D,0x838E,0x84D1,0x86C7,0x88DF, -0x8A50,0x8A5E,0x8B1D,0x8CDC,0x8D66,0x8FAD,0x90AA,0x98FC, -0x99DF,0x9E9D,0x524A,0xF969,0x6714,0xF96A, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5098,0x522A,0x5C71,0x6563,0x6C55,0x73CA,0x7523,0x759D, -0x7B97,0x849C,0x9178,0x9730,0x4E77,0x6492,0x6BBA,0x715E, -0x85A9,0x4E09,0xF96B,0x6749,0x68EE,0x6E17,0x829F,0x8518, -0x886B,0x63F7,0x6F81,0x9212,0x98AF,0x4E0A,0x50B7,0x50CF, -0x511F,0x5546,0x55AA,0x5617,0x5B40,0x5C19,0x5CE0,0x5E38, -0x5E8A,0x5EA0,0x5EC2,0x60F3,0x6851,0x6A61,0x6E58,0x723D, -0x7240,0x72C0,0x76F8,0x7965,0x7BB1,0x7FD4,0x88F3,0x89F4, -0x8A73,0x8C61,0x8CDE,0x971C,0x585E,0x74BD,0x8CFD,0x55C7, -0xF96C,0x7A61,0x7D22,0x8272,0x7272,0x751F,0x7525,0xF96D, -0x7B19,0x5885,0x58FB,0x5DBC,0x5E8F,0x5EB6,0x5F90,0x6055, -0x6292,0x637F,0x654D,0x6691,0x66D9,0x66F8,0x6816,0x68F2, -0x7280,0x745E,0x7B6E,0x7D6E,0x7DD6,0x7F72, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x80E5,0x8212,0x85AF,0x897F,0x8A93,0x901D,0x92E4,0x9ECD, -0x9F20,0x5915,0x596D,0x5E2D,0x60DC,0x6614,0x6673,0x6790, -0x6C50,0x6DC5,0x6F5F,0x77F3,0x78A9,0x84C6,0x91CB,0x932B, -0x4ED9,0x50CA,0x5148,0x5584,0x5B0B,0x5BA3,0x6247,0x657E, -0x65CB,0x6E32,0x717D,0x7401,0x7444,0x7487,0x74BF,0x766C, -0x79AA,0x7DDA,0x7E55,0x7FA8,0x817A,0x81B3,0x8239,0x861A, -0x87EC,0x8A75,0x8DE3,0x9078,0x9291,0x9425,0x994D,0x9BAE, -0x5368,0x5C51,0x6954,0x6CC4,0x6D29,0x6E2B,0x820C,0x859B, -0x893B,0x8A2D,0x8AAA,0x96EA,0x9F67,0x5261,0x66B9,0x6BB2, -0x7E96,0x87FE,0x8D0D,0x9583,0x965D,0x651D,0x6D89,0x71EE, -0xF96E,0x57CE,0x59D3,0x5BAC,0x6027,0x60FA,0x6210,0x661F, -0x665F,0x7329,0x73F9,0x76DB,0x7701,0x7B6C, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8056,0x8072,0x8165,0x8AA0,0x9192,0x4E16,0x52E2,0x6B72, -0x6D17,0x7A05,0x7B39,0x7D30,0xF96F,0x8CB0,0x53EC,0x562F, -0x5851,0x5BB5,0x5C0F,0x5C11,0x5DE2,0x6240,0x6383,0x6414, -0x662D,0x68B3,0x6CBC,0x6D88,0x6EAF,0x701F,0x70A4,0x71D2, -0x7526,0x758F,0x758E,0x7619,0x7B11,0x7BE0,0x7C2B,0x7D20, -0x7D39,0x852C,0x856D,0x8607,0x8A34,0x900D,0x9061,0x90B5, -0x92B7,0x97F6,0x9A37,0x4FD7,0x5C6C,0x675F,0x6D91,0x7C9F, -0x7E8C,0x8B16,0x8D16,0x901F,0x5B6B,0x5DFD,0x640D,0x84C0, -0x905C,0x98E1,0x7387,0x5B8B,0x609A,0x677E,0x6DDE,0x8A1F, -0x8AA6,0x9001,0x980C,0x5237,0xF970,0x7051,0x788E,0x9396, -0x8870,0x91D7,0x4FEE,0x53D7,0x55FD,0x56DA,0x5782,0x58FD, -0x5AC2,0x5B88,0x5CAB,0x5CC0,0x5E25,0x6101, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x620D,0x624B,0x6388,0x641C,0x6536,0x6578,0x6A39,0x6B8A, -0x6C34,0x6D19,0x6F31,0x71E7,0x72E9,0x7378,0x7407,0x74B2, -0x7626,0x7761,0x79C0,0x7A57,0x7AEA,0x7CB9,0x7D8F,0x7DAC, -0x7E61,0x7F9E,0x8129,0x8331,0x8490,0x84DA,0x85EA,0x8896, -0x8AB0,0x8B90,0x8F38,0x9042,0x9083,0x916C,0x9296,0x92B9, -0x968B,0x96A7,0x96A8,0x96D6,0x9700,0x9808,0x9996,0x9AD3, -0x9B1A,0x53D4,0x587E,0x5919,0x5B70,0x5BBF,0x6DD1,0x6F5A, -0x719F,0x7421,0x74B9,0x8085,0x83FD,0x5DE1,0x5F87,0x5FAA, -0x6042,0x65EC,0x6812,0x696F,0x6A53,0x6B89,0x6D35,0x6DF3, -0x73E3,0x76FE,0x77AC,0x7B4D,0x7D14,0x8123,0x821C,0x8340, -0x84F4,0x8563,0x8A62,0x8AC4,0x9187,0x931E,0x9806,0x99B4, -0x620C,0x8853,0x8FF0,0x9265,0x5D07,0x5D27, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5D69,0x745F,0x819D,0x8768,0x6FD5,0x62FE,0x7FD2,0x8936, -0x8972,0x4E1E,0x4E58,0x50E7,0x52DD,0x5347,0x627F,0x6607, -0x7E69,0x8805,0x965E,0x4F8D,0x5319,0x5636,0x59CB,0x5AA4, -0x5C38,0x5C4E,0x5C4D,0x5E02,0x5F11,0x6043,0x65BD,0x662F, -0x6642,0x67BE,0x67F4,0x731C,0x77E2,0x793A,0x7FC5,0x8494, -0x84CD,0x8996,0x8A66,0x8A69,0x8AE1,0x8C55,0x8C7A,0x57F4, -0x5BD4,0x5F0F,0x606F,0x62ED,0x690D,0x6B96,0x6E5C,0x7184, -0x7BD2,0x8755,0x8B58,0x8EFE,0x98DF,0x98FE,0x4F38,0x4F81, -0x4FE1,0x547B,0x5A20,0x5BB8,0x613C,0x65B0,0x6668,0x71FC, -0x7533,0x795E,0x7D33,0x814E,0x81E3,0x8398,0x85AA,0x85CE, -0x8703,0x8A0A,0x8EAB,0x8F9B,0xF971,0x8FC5,0x5931,0x5BA4, -0x5BE6,0x6089,0x5BE9,0x5C0B,0x5FC3,0x6C81, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF972,0x6DF1,0x700B,0x751A,0x82AF,0x8AF6,0x4EC0,0x5341, -0xF973,0x96D9,0x6C0F,0x4E9E,0x4FC4,0x5152,0x555E,0x5A25, -0x5CE8,0x6211,0x7259,0x82BD,0x83AA,0x86FE,0x8859,0x8A1D, -0x963F,0x96C5,0x9913,0x9D09,0x9D5D,0x580A,0x5CB3,0x5DBD, -0x5E44,0x60E1,0x6115,0x63E1,0x6A02,0x6E25,0x9102,0x9354, -0x984E,0x9C10,0x9F77,0x5B89,0x5CB8,0x6309,0x664F,0x6848, -0x773C,0x96C1,0x978D,0x9854,0x9B9F,0x65A1,0x8B01,0x8ECB, -0x95BC,0x5535,0x5CA9,0x5DD6,0x5EB5,0x6697,0x764C,0x83F4, -0x95C7,0x58D3,0x62BC,0x72CE,0x9D28,0x4EF0,0x592E,0x600F, -0x663B,0x6B83,0x79E7,0x9D26,0x5393,0x54C0,0x57C3,0x5D16, -0x611B,0x66D6,0x6DAF,0x788D,0x827E,0x9698,0x9744,0x5384, -0x627C,0x6396,0x6DB2,0x7E0A,0x814B,0x984D, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6AFB,0x7F4C,0x9DAF,0x9E1A,0x4E5F,0x503B,0x51B6,0x591C, -0x60F9,0x63F6,0x6930,0x723A,0x8036,0xF974,0x91CE,0x5F31, -0xF975,0xF976,0x7D04,0x82E5,0x846F,0x84BB,0x85E5,0x8E8D, -0xF977,0x4F6F,0xF978,0xF979,0x58E4,0x5B43,0x6059,0x63DA, -0x6518,0x656D,0x6698,0xF97A,0x694A,0x6A23,0x6D0B,0x7001, -0x716C,0x75D2,0x760D,0x79B3,0x7A70,0xF97B,0x7F8A,0xF97C, -0x8944,0xF97D,0x8B93,0x91C0,0x967D,0xF97E,0x990A,0x5704, -0x5FA1,0x65BC,0x6F01,0x7600,0x79A6,0x8A9E,0x99AD,0x9B5A, -0x9F6C,0x5104,0x61B6,0x6291,0x6A8D,0x81C6,0x5043,0x5830, -0x5F66,0x7109,0x8A00,0x8AFA,0x5B7C,0x8616,0x4FFA,0x513C, -0x56B4,0x5944,0x63A9,0x6DF9,0x5DAA,0x696D,0x5186,0x4E88, -0x4F59,0xF97F,0xF980,0xF981,0x5982,0xF982, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF983,0x6B5F,0x6C5D,0xF984,0x74B5,0x7916,0xF985,0x8207, -0x8245,0x8339,0x8F3F,0x8F5D,0xF986,0x9918,0xF987,0xF988, -0xF989,0x4EA6,0xF98A,0x57DF,0x5F79,0x6613,0xF98B,0xF98C, -0x75AB,0x7E79,0x8B6F,0xF98D,0x9006,0x9A5B,0x56A5,0x5827, -0x59F8,0x5A1F,0x5BB4,0xF98E,0x5EF6,0xF98F,0xF990,0x6350, -0x633B,0xF991,0x693D,0x6C87,0x6CBF,0x6D8E,0x6D93,0x6DF5, -0x6F14,0xF992,0x70DF,0x7136,0x7159,0xF993,0x71C3,0x71D5, -0xF994,0x784F,0x786F,0xF995,0x7B75,0x7DE3,0xF996,0x7E2F, -0xF997,0x884D,0x8EDF,0xF998,0xF999,0xF99A,0x925B,0xF99B, -0x9CF6,0xF99C,0xF99D,0xF99E,0x6085,0x6D85,0xF99F,0x71B1, -0xF9A0,0xF9A1,0x95B1,0x53AD,0xF9A2,0xF9A3,0xF9A4,0x67D3, -0xF9A5,0x708E,0x7130,0x7430,0x8276,0x82D2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF9A6,0x95BB,0x9AE5,0x9E7D,0x66C4,0xF9A7,0x71C1,0x8449, -0xF9A8,0xF9A9,0x584B,0xF9AA,0xF9AB,0x5DB8,0x5F71,0xF9AC, -0x6620,0x668E,0x6979,0x69AE,0x6C38,0x6CF3,0x6E36,0x6F41, -0x6FDA,0x701B,0x702F,0x7150,0x71DF,0x7370,0xF9AD,0x745B, -0xF9AE,0x74D4,0x76C8,0x7A4E,0x7E93,0xF9AF,0xF9B0,0x82F1, -0x8A60,0x8FCE,0xF9B1,0x9348,0xF9B2,0x9719,0xF9B3,0xF9B4, -0x4E42,0x502A,0xF9B5,0x5208,0x53E1,0x66F3,0x6C6D,0x6FCA, -0x730A,0x777F,0x7A62,0x82AE,0x85DD,0x8602,0xF9B6,0x88D4, -0x8A63,0x8B7D,0x8C6B,0xF9B7,0x92B3,0xF9B8,0x9713,0x9810, -0x4E94,0x4F0D,0x4FC9,0x50B2,0x5348,0x543E,0x5433,0x55DA, -0x5862,0x58BA,0x5967,0x5A1B,0x5BE4,0x609F,0xF9B9,0x61CA, -0x6556,0x65FF,0x6664,0x68A7,0x6C5A,0x6FB3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x70CF,0x71AC,0x7352,0x7B7D,0x8708,0x8AA4,0x9C32,0x9F07, -0x5C4B,0x6C83,0x7344,0x7389,0x923A,0x6EAB,0x7465,0x761F, -0x7A69,0x7E15,0x860A,0x5140,0x58C5,0x64C1,0x74EE,0x7515, -0x7670,0x7FC1,0x9095,0x96CD,0x9954,0x6E26,0x74E6,0x7AA9, -0x7AAA,0x81E5,0x86D9,0x8778,0x8A1B,0x5A49,0x5B8C,0x5B9B, -0x68A1,0x6900,0x6D63,0x73A9,0x7413,0x742C,0x7897,0x7DE9, -0x7FEB,0x8118,0x8155,0x839E,0x8C4C,0x962E,0x9811,0x66F0, -0x5F80,0x65FA,0x6789,0x6C6A,0x738B,0x502D,0x5A03,0x6B6A, -0x77EE,0x5916,0x5D6C,0x5DCD,0x7325,0x754F,0xF9BA,0xF9BB, -0x50E5,0x51F9,0x582F,0x592D,0x5996,0x59DA,0x5BE5,0xF9BC, -0xF9BD,0x5DA2,0x62D7,0x6416,0x6493,0x64FE,0xF9BE,0x66DC, -0xF9BF,0x6A48,0xF9C0,0x71FF,0x7464,0xF9C1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7A88,0x7AAF,0x7E47,0x7E5E,0x8000,0x8170,0xF9C2,0x87EF, -0x8981,0x8B20,0x9059,0xF9C3,0x9080,0x9952,0x617E,0x6B32, -0x6D74,0x7E1F,0x8925,0x8FB1,0x4FD1,0x50AD,0x5197,0x52C7, -0x57C7,0x5889,0x5BB9,0x5EB8,0x6142,0x6995,0x6D8C,0x6E67, -0x6EB6,0x7194,0x7462,0x7528,0x752C,0x8073,0x8338,0x84C9, -0x8E0A,0x9394,0x93DE,0xF9C4,0x4E8E,0x4F51,0x5076,0x512A, -0x53C8,0x53CB,0x53F3,0x5B87,0x5BD3,0x5C24,0x611A,0x6182, -0x65F4,0x725B,0x7397,0x7440,0x76C2,0x7950,0x7991,0x79B9, -0x7D06,0x7FBD,0x828B,0x85D5,0x865E,0x8FC2,0x9047,0x90F5, -0x91EA,0x9685,0x96E8,0x96E9,0x52D6,0x5F67,0x65ED,0x6631, -0x682F,0x715C,0x7A36,0x90C1,0x980A,0x4E91,0xF9C5,0x6A52, -0x6B9E,0x6F90,0x7189,0x8018,0x82B8,0x8553, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x904B,0x9695,0x96F2,0x97FB,0x851A,0x9B31,0x4E90,0x718A, -0x96C4,0x5143,0x539F,0x54E1,0x5713,0x5712,0x57A3,0x5A9B, -0x5AC4,0x5BC3,0x6028,0x613F,0x63F4,0x6C85,0x6D39,0x6E72, -0x6E90,0x7230,0x733F,0x7457,0x82D1,0x8881,0x8F45,0x9060, -0xF9C6,0x9662,0x9858,0x9D1B,0x6708,0x8D8A,0x925E,0x4F4D, -0x5049,0x50DE,0x5371,0x570D,0x59D4,0x5A01,0x5C09,0x6170, -0x6690,0x6E2D,0x7232,0x744B,0x7DEF,0x80C3,0x840E,0x8466, -0x853F,0x875F,0x885B,0x8918,0x8B02,0x9055,0x97CB,0x9B4F, -0x4E73,0x4F91,0x5112,0x516A,0xF9C7,0x552F,0x55A9,0x5B7A, -0x5BA5,0x5E7C,0x5E7D,0x5EBE,0x60A0,0x60DF,0x6108,0x6109, -0x63C4,0x6538,0x6709,0xF9C8,0x67D4,0x67DA,0xF9C9,0x6961, -0x6962,0x6CB9,0x6D27,0xF9CA,0x6E38,0xF9CB, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6FE1,0x7336,0x7337,0xF9CC,0x745C,0x7531,0xF9CD,0x7652, -0xF9CE,0xF9CF,0x7DAD,0x81FE,0x8438,0x88D5,0x8A98,0x8ADB, -0x8AED,0x8E30,0x8E42,0x904A,0x903E,0x907A,0x9149,0x91C9, -0x936E,0xF9D0,0xF9D1,0x5809,0xF9D2,0x6BD3,0x8089,0x80B2, -0xF9D3,0xF9D4,0x5141,0x596B,0x5C39,0xF9D5,0xF9D6,0x6F64, -0x73A7,0x80E4,0x8D07,0xF9D7,0x9217,0x958F,0xF9D8,0xF9D9, -0xF9DA,0xF9DB,0x807F,0x620E,0x701C,0x7D68,0x878D,0xF9DC, -0x57A0,0x6069,0x6147,0x6BB7,0x8ABE,0x9280,0x96B1,0x4E59, -0x541F,0x6DEB,0x852D,0x9670,0x97F3,0x98EE,0x63D6,0x6CE3, -0x9091,0x51DD,0x61C9,0x81BA,0x9DF9,0x4F9D,0x501A,0x5100, -0x5B9C,0x610F,0x61FF,0x64EC,0x6905,0x6BC5,0x7591,0x77E3, -0x7FA9,0x8264,0x858F,0x87FB,0x8863,0x8ABC, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8B70,0x91AB,0x4E8C,0x4EE5,0x4F0A,0xF9DD,0xF9DE,0x5937, -0x59E8,0xF9DF,0x5DF2,0x5F1B,0x5F5B,0x6021,0xF9E0,0xF9E1, -0xF9E2,0xF9E3,0x723E,0x73E5,0xF9E4,0x7570,0x75CD,0xF9E5, -0x79FB,0xF9E6,0x800C,0x8033,0x8084,0x82E1,0x8351,0xF9E7, -0xF9E8,0x8CBD,0x8CB3,0x9087,0xF9E9,0xF9EA,0x98F4,0x990C, -0xF9EB,0xF9EC,0x7037,0x76CA,0x7FCA,0x7FCC,0x7FFC,0x8B1A, -0x4EBA,0x4EC1,0x5203,0x5370,0xF9ED,0x54BD,0x56E0,0x59FB, -0x5BC5,0x5F15,0x5FCD,0x6E6E,0xF9EE,0xF9EF,0x7D6A,0x8335, -0xF9F0,0x8693,0x8A8D,0xF9F1,0x976D,0x9777,0xF9F2,0xF9F3, -0x4E00,0x4F5A,0x4F7E,0x58F9,0x65E5,0x6EA2,0x9038,0x93B0, -0x99B9,0x4EFB,0x58EC,0x598A,0x59D9,0x6041,0xF9F4,0xF9F5, -0x7A14,0xF9F6,0x834F,0x8CC3,0x5165,0x5344, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF9F7,0xF9F8,0xF9F9,0x4ECD,0x5269,0x5B55,0x82BF,0x4ED4, -0x523A,0x54A8,0x59C9,0x59FF,0x5B50,0x5B57,0x5B5C,0x6063, -0x6148,0x6ECB,0x7099,0x716E,0x7386,0x74F7,0x75B5,0x78C1, -0x7D2B,0x8005,0x81EA,0x8328,0x8517,0x85C9,0x8AEE,0x8CC7, -0x96CC,0x4F5C,0x52FA,0x56BC,0x65AB,0x6628,0x707C,0x70B8, -0x7235,0x7DBD,0x828D,0x914C,0x96C0,0x9D72,0x5B71,0x68E7, -0x6B98,0x6F7A,0x76DE,0x5C91,0x66AB,0x6F5B,0x7BB4,0x7C2A, -0x8836,0x96DC,0x4E08,0x4ED7,0x5320,0x5834,0x58BB,0x58EF, -0x596C,0x5C07,0x5E33,0x5E84,0x5F35,0x638C,0x66B2,0x6756, -0x6A1F,0x6AA3,0x6B0C,0x6F3F,0x7246,0xF9FA,0x7350,0x748B, -0x7AE0,0x7CA7,0x8178,0x81DF,0x81E7,0x838A,0x846C,0x8523, -0x8594,0x85CF,0x88DD,0x8D13,0x91AC,0x9577, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x969C,0x518D,0x54C9,0x5728,0x5BB0,0x624D,0x6750,0x683D, -0x6893,0x6E3D,0x6ED3,0x707D,0x7E21,0x88C1,0x8CA1,0x8F09, -0x9F4B,0x9F4E,0x722D,0x7B8F,0x8ACD,0x931A,0x4F47,0x4F4E, -0x5132,0x5480,0x59D0,0x5E95,0x62B5,0x6775,0x696E,0x6A17, -0x6CAE,0x6E1A,0x72D9,0x732A,0x75BD,0x7BB8,0x7D35,0x82E7, -0x83F9,0x8457,0x85F7,0x8A5B,0x8CAF,0x8E87,0x9019,0x90B8, -0x96CE,0x9F5F,0x52E3,0x540A,0x5AE1,0x5BC2,0x6458,0x6575, -0x6EF4,0x72C4,0xF9FB,0x7684,0x7A4D,0x7B1B,0x7C4D,0x7E3E, -0x7FDF,0x837B,0x8B2B,0x8CCA,0x8D64,0x8DE1,0x8E5F,0x8FEA, -0x8FF9,0x9069,0x93D1,0x4F43,0x4F7A,0x50B3,0x5168,0x5178, -0x524D,0x526A,0x5861,0x587C,0x5960,0x5C08,0x5C55,0x5EDB, -0x609B,0x6230,0x6813,0x6BBF,0x6C08,0x6FB1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x714E,0x7420,0x7530,0x7538,0x7551,0x7672,0x7B4C,0x7B8B, -0x7BAD,0x7BC6,0x7E8F,0x8A6E,0x8F3E,0x8F49,0x923F,0x9293, -0x9322,0x942B,0x96FB,0x985A,0x986B,0x991E,0x5207,0x622A, -0x6298,0x6D59,0x7664,0x7ACA,0x7BC0,0x7D76,0x5360,0x5CBE, -0x5E97,0x6F38,0x70B9,0x7C98,0x9711,0x9B8E,0x9EDE,0x63A5, -0x647A,0x8776,0x4E01,0x4E95,0x4EAD,0x505C,0x5075,0x5448, -0x59C3,0x5B9A,0x5E40,0x5EAD,0x5EF7,0x5F81,0x60C5,0x633A, -0x653F,0x6574,0x65CC,0x6676,0x6678,0x67FE,0x6968,0x6A89, -0x6B63,0x6C40,0x6DC0,0x6DE8,0x6E1F,0x6E5E,0x701E,0x70A1, -0x738E,0x73FD,0x753A,0x775B,0x7887,0x798E,0x7A0B,0x7A7D, -0x7CBE,0x7D8E,0x8247,0x8A02,0x8AEA,0x8C9E,0x912D,0x914A, -0x91D8,0x9266,0x92CC,0x9320,0x9706,0x9756, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x975C,0x9802,0x9F0E,0x5236,0x5291,0x557C,0x5824,0x5E1D, -0x5F1F,0x608C,0x63D0,0x68AF,0x6FDF,0x796D,0x7B2C,0x81CD, -0x85BA,0x88FD,0x8AF8,0x8E44,0x918D,0x9664,0x969B,0x973D, -0x984C,0x9F4A,0x4FCE,0x5146,0x51CB,0x52A9,0x5632,0x5F14, -0x5F6B,0x63AA,0x64CD,0x65E9,0x6641,0x66FA,0x66F9,0x671D, -0x689D,0x68D7,0x69FD,0x6F15,0x6F6E,0x7167,0x71E5,0x722A, -0x74AA,0x773A,0x7956,0x795A,0x79DF,0x7A20,0x7A95,0x7C97, -0x7CDF,0x7D44,0x7E70,0x8087,0x85FB,0x86A4,0x8A54,0x8ABF, -0x8D99,0x8E81,0x9020,0x906D,0x91E3,0x963B,0x96D5,0x9CE5, -0x65CF,0x7C07,0x8DB3,0x93C3,0x5B58,0x5C0A,0x5352,0x62D9, -0x731D,0x5027,0x5B97,0x5F9E,0x60B0,0x616B,0x68D5,0x6DD9, -0x742E,0x7A2E,0x7D42,0x7D9C,0x7E31,0x816B, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8E2A,0x8E35,0x937E,0x9418,0x4F50,0x5750,0x5DE6,0x5EA7, -0x632B,0x7F6A,0x4E3B,0x4F4F,0x4F8F,0x505A,0x59DD,0x80C4, -0x546A,0x5468,0x55FE,0x594F,0x5B99,0x5DDE,0x5EDA,0x665D, -0x6731,0x67F1,0x682A,0x6CE8,0x6D32,0x6E4A,0x6F8D,0x70B7, -0x73E0,0x7587,0x7C4C,0x7D02,0x7D2C,0x7DA2,0x821F,0x86DB, -0x8A3B,0x8A85,0x8D70,0x8E8A,0x8F33,0x9031,0x914E,0x9152, -0x9444,0x99D0,0x7AF9,0x7CA5,0x4FCA,0x5101,0x51C6,0x57C8, -0x5BEF,0x5CFB,0x6659,0x6A3D,0x6D5A,0x6E96,0x6FEC,0x710C, -0x756F,0x7AE3,0x8822,0x9021,0x9075,0x96CB,0x99FF,0x8301, -0x4E2D,0x4EF2,0x8846,0x91CD,0x537D,0x6ADB,0x696B,0x6C41, -0x847A,0x589E,0x618E,0x66FE,0x62EF,0x70DD,0x7511,0x75C7, -0x7E52,0x84B8,0x8B49,0x8D08,0x4E4B,0x53EA, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x54AB,0x5730,0x5740,0x5FD7,0x6301,0x6307,0x646F,0x652F, -0x65E8,0x667A,0x679D,0x67B3,0x6B62,0x6C60,0x6C9A,0x6F2C, -0x77E5,0x7825,0x7949,0x7957,0x7D19,0x80A2,0x8102,0x81F3, -0x829D,0x82B7,0x8718,0x8A8C,0xF9FC,0x8D04,0x8DBE,0x9072, -0x76F4,0x7A19,0x7A37,0x7E54,0x8077,0x5507,0x55D4,0x5875, -0x632F,0x6422,0x6649,0x664B,0x686D,0x699B,0x6B84,0x6D25, -0x6EB1,0x73CD,0x7468,0x74A1,0x755B,0x75B9,0x76E1,0x771E, -0x778B,0x79E6,0x7E09,0x7E1D,0x81FB,0x852F,0x8897,0x8A3A, -0x8CD1,0x8EEB,0x8FB0,0x9032,0x93AD,0x9663,0x9673,0x9707, -0x4F84,0x53F1,0x59EA,0x5AC9,0x5E19,0x684E,0x74C6,0x75BE, -0x79E9,0x7A92,0x81A3,0x86ED,0x8CEA,0x8DCC,0x8FED,0x659F, -0x6715,0xF9FD,0x57F7,0x6F57,0x7DDD,0x8F2F, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x93F6,0x96C6,0x5FB5,0x61F2,0x6F84,0x4E14,0x4F98,0x501F, -0x53C9,0x55DF,0x5D6F,0x5DEE,0x6B21,0x6B64,0x78CB,0x7B9A, -0xF9FE,0x8E49,0x8ECA,0x906E,0x6349,0x643E,0x7740,0x7A84, -0x932F,0x947F,0x9F6A,0x64B0,0x6FAF,0x71E6,0x74A8,0x74DA, -0x7AC4,0x7C12,0x7E82,0x7CB2,0x7E98,0x8B9A,0x8D0A,0x947D, -0x9910,0x994C,0x5239,0x5BDF,0x64E6,0x672D,0x7D2E,0x50ED, -0x53C3,0x5879,0x6158,0x6159,0x61FA,0x65AC,0x7AD9,0x8B92, -0x8B96,0x5009,0x5021,0x5275,0x5531,0x5A3C,0x5EE0,0x5F70, -0x6134,0x655E,0x660C,0x6636,0x66A2,0x69CD,0x6EC4,0x6F32, -0x7316,0x7621,0x7A93,0x8139,0x8259,0x83D6,0x84BC,0x50B5, -0x57F0,0x5BC0,0x5BE8,0x5F69,0x63A1,0x7826,0x7DB5,0x83DC, -0x8521,0x91C7,0x91F5,0x518A,0x67F5,0x7B56, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8CAC,0x51C4,0x59BB,0x60BD,0x8655,0x501C,0xF9FF,0x5254, -0x5C3A,0x617D,0x621A,0x62D3,0x64F2,0x65A5,0x6ECC,0x7620, -0x810A,0x8E60,0x965F,0x96BB,0x4EDF,0x5343,0x5598,0x5929, -0x5DDD,0x64C5,0x6CC9,0x6DFA,0x7394,0x7A7F,0x821B,0x85A6, -0x8CE4,0x8E10,0x9077,0x91E7,0x95E1,0x9621,0x97C6,0x51F8, -0x54F2,0x5586,0x5FB9,0x64A4,0x6F88,0x7DB4,0x8F1F,0x8F4D, -0x9435,0x50C9,0x5C16,0x6CBE,0x6DFB,0x751B,0x77BB,0x7C3D, -0x7C64,0x8A79,0x8AC2,0x581E,0x59BE,0x5E16,0x6377,0x7252, -0x758A,0x776B,0x8ADC,0x8CBC,0x8F12,0x5EF3,0x6674,0x6DF8, -0x807D,0x83C1,0x8ACB,0x9751,0x9BD6,0xFA00,0x5243,0x66FF, -0x6D95,0x6EEF,0x7DE0,0x8AE6,0x902E,0x905E,0x9AD4,0x521D, -0x527F,0x54E8,0x6194,0x6284,0x62DB,0x68A2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6912,0x695A,0x6A35,0x7092,0x7126,0x785D,0x7901,0x790E, -0x79D2,0x7A0D,0x8096,0x8278,0x82D5,0x8349,0x8549,0x8C82, -0x8D85,0x9162,0x918B,0x91AE,0x4FC3,0x56D1,0x71ED,0x77D7, -0x8700,0x89F8,0x5BF8,0x5FD6,0x6751,0x90A8,0x53E2,0x585A, -0x5BF5,0x60A4,0x6181,0x6460,0x7E3D,0x8070,0x8525,0x9283, -0x64AE,0x50AC,0x5D14,0x6700,0x589C,0x62BD,0x63A8,0x690E, -0x6978,0x6A1E,0x6E6B,0x76BA,0x79CB,0x82BB,0x8429,0x8ACF, -0x8DA8,0x8FFD,0x9112,0x914B,0x919C,0x9310,0x9318,0x939A, -0x96DB,0x9A36,0x9C0D,0x4E11,0x755C,0x795D,0x7AFA,0x7B51, -0x7BC9,0x7E2E,0x84C4,0x8E59,0x8E74,0x8EF8,0x9010,0x6625, -0x693F,0x7443,0x51FA,0x672E,0x9EDC,0x5145,0x5FE0,0x6C96, -0x87F2,0x885D,0x8877,0x60B4,0x81B5,0x8403, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8D05,0x53D6,0x5439,0x5634,0x5A36,0x5C31,0x708A,0x7FE0, -0x805A,0x8106,0x81ED,0x8DA3,0x9189,0x9A5F,0x9DF2,0x5074, -0x4EC4,0x53A0,0x60FB,0x6E2C,0x5C64,0x4F88,0x5024,0x55E4, -0x5CD9,0x5E5F,0x6065,0x6894,0x6CBB,0x6DC4,0x71BE,0x75D4, -0x75F4,0x7661,0x7A1A,0x7A49,0x7DC7,0x7DFB,0x7F6E,0x81F4, -0x86A9,0x8F1C,0x96C9,0x99B3,0x9F52,0x5247,0x52C5,0x98ED, -0x89AA,0x4E03,0x67D2,0x6F06,0x4FB5,0x5BE2,0x6795,0x6C88, -0x6D78,0x741B,0x7827,0x91DD,0x937C,0x87C4,0x79E4,0x7A31, -0x5FEB,0x4ED6,0x54A4,0x553E,0x58AE,0x59A5,0x60F0,0x6253, -0x62D6,0x6736,0x6955,0x8235,0x9640,0x99B1,0x99DD,0x502C, -0x5353,0x5544,0x577C,0xFA01,0x6258,0xFA02,0x64E2,0x666B, -0x67DD,0x6FC1,0x6FEF,0x7422,0x7438,0x8A17, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9438,0x5451,0x5606,0x5766,0x5F48,0x619A,0x6B4E,0x7058, -0x70AD,0x7DBB,0x8A95,0x596A,0x812B,0x63A2,0x7708,0x803D, -0x8CAA,0x5854,0x642D,0x69BB,0x5B95,0x5E11,0x6E6F,0xFA03, -0x8569,0x514C,0x53F0,0x592A,0x6020,0x614B,0x6B86,0x6C70, -0x6CF0,0x7B1E,0x80CE,0x82D4,0x8DC6,0x90B0,0x98B1,0xFA04, -0x64C7,0x6FA4,0x6491,0x6504,0x514E,0x5410,0x571F,0x8A0E, -0x615F,0x6876,0xFA05,0x75DB,0x7B52,0x7D71,0x901A,0x5806, -0x69CC,0x817F,0x892A,0x9000,0x9839,0x5078,0x5957,0x59AC, -0x6295,0x900F,0x9B2A,0x615D,0x7279,0x95D6,0x5761,0x5A46, -0x5DF4,0x628A,0x64AD,0x64FA,0x6777,0x6CE2,0x6D3E,0x722C, -0x7436,0x7834,0x7F77,0x82AD,0x8DDB,0x9817,0x5224,0x5742, -0x677F,0x7248,0x74E3,0x8CA9,0x8FA6,0x9211, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x962A,0x516B,0x53ED,0x634C,0x4F69,0x5504,0x6096,0x6557, -0x6C9B,0x6D7F,0x724C,0x72FD,0x7A17,0x8987,0x8C9D,0x5F6D, -0x6F8E,0x70F9,0x81A8,0x610E,0x4FBF,0x504F,0x6241,0x7247, -0x7BC7,0x7DE8,0x7FE9,0x904D,0x97AD,0x9A19,0x8CB6,0x576A, -0x5E73,0x67B0,0x840D,0x8A55,0x5420,0x5B16,0x5E63,0x5EE2, -0x5F0A,0x6583,0x80BA,0x853D,0x9589,0x965B,0x4F48,0x5305, -0x530D,0x530F,0x5486,0x54FA,0x5703,0x5E03,0x6016,0x629B, -0x62B1,0x6355,0xFA06,0x6CE1,0x6D66,0x75B1,0x7832,0x80DE, -0x812F,0x82DE,0x8461,0x84B2,0x888D,0x8912,0x900B,0x92EA, -0x98FD,0x9B91,0x5E45,0x66B4,0x66DD,0x7011,0x7206,0xFA07, -0x4FF5,0x527D,0x5F6A,0x6153,0x6753,0x6A19,0x6F02,0x74E2, -0x7968,0x8868,0x8C79,0x98C7,0x98C4,0x9A43, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x54C1,0x7A1F,0x6953,0x8AF7,0x8C4A,0x98A8,0x99AE,0x5F7C, -0x62AB,0x75B2,0x76AE,0x88AB,0x907F,0x9642,0x5339,0x5F3C, -0x5FC5,0x6CCC,0x73CC,0x7562,0x758B,0x7B46,0x82FE,0x999D, -0x4E4F,0x903C,0x4E0B,0x4F55,0x53A6,0x590F,0x5EC8,0x6630, -0x6CB3,0x7455,0x8377,0x8766,0x8CC0,0x9050,0x971E,0x9C15, -0x58D1,0x5B78,0x8650,0x8B14,0x9DB4,0x5BD2,0x6068,0x608D, -0x65F1,0x6C57,0x6F22,0x6FA3,0x701A,0x7F55,0x7FF0,0x9591, -0x9592,0x9650,0x97D3,0x5272,0x8F44,0x51FD,0x542B,0x54B8, -0x5563,0x558A,0x6ABB,0x6DB5,0x7DD8,0x8266,0x929C,0x9677, -0x9E79,0x5408,0x54C8,0x76D2,0x86E4,0x95A4,0x95D4,0x965C, -0x4EA2,0x4F09,0x59EE,0x5AE6,0x5DF7,0x6052,0x6297,0x676D, -0x6841,0x6C86,0x6E2F,0x7F38,0x809B,0x822A, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xFA08,0xFA09,0x9805,0x4EA5,0x5055,0x54B3,0x5793,0x595A, -0x5B69,0x5BB3,0x61C8,0x6977,0x6D77,0x7023,0x87F9,0x89E3, -0x8A72,0x8AE7,0x9082,0x99ED,0x9AB8,0x52BE,0x6838,0x5016, -0x5E78,0x674F,0x8347,0x884C,0x4EAB,0x5411,0x56AE,0x73E6, -0x9115,0x97FF,0x9909,0x9957,0x9999,0x5653,0x589F,0x865B, -0x8A31,0x61B2,0x6AF6,0x737B,0x8ED2,0x6B47,0x96AA,0x9A57, -0x5955,0x7200,0x8D6B,0x9769,0x4FD4,0x5CF4,0x5F26,0x61F8, -0x665B,0x6CEB,0x70AB,0x7384,0x73B9,0x73FE,0x7729,0x774D, -0x7D43,0x7D62,0x7E23,0x8237,0x8852,0xFA0A,0x8CE2,0x9249, -0x986F,0x5B51,0x7A74,0x8840,0x9801,0x5ACC,0x4FE0,0x5354, -0x593E,0x5CFD,0x633E,0x6D79,0x72F9,0x8105,0x8107,0x83A2, -0x92CF,0x9830,0x4EA8,0x5144,0x5211,0x578B, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5F62,0x6CC2,0x6ECE,0x7005,0x7050,0x70AF,0x7192,0x73E9, -0x7469,0x834A,0x87A2,0x8861,0x9008,0x90A2,0x93A3,0x99A8, -0x516E,0x5F57,0x60E0,0x6167,0x66B3,0x8559,0x8E4A,0x91AF, -0x978B,0x4E4E,0x4E92,0x547C,0x58D5,0x58FA,0x597D,0x5CB5, -0x5F27,0x6236,0x6248,0x660A,0x6667,0x6BEB,0x6D69,0x6DCF, -0x6E56,0x6EF8,0x6F94,0x6FE0,0x6FE9,0x705D,0x72D0,0x7425, -0x745A,0x74E0,0x7693,0x795C,0x7CCA,0x7E1E,0x80E1,0x82A6, -0x846B,0x84BF,0x864E,0x865F,0x8774,0x8B77,0x8C6A,0x93AC, -0x9800,0x9865,0x60D1,0x6216,0x9177,0x5A5A,0x660F,0x6DF7, -0x6E3E,0x743F,0x9B42,0x5FFD,0x60DA,0x7B0F,0x54C4,0x5F18, -0x6C5E,0x6CD3,0x6D2A,0x70D8,0x7D05,0x8679,0x8A0C,0x9D3B, -0x5316,0x548C,0x5B05,0x6A3A,0x706B,0x7575, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x798D,0x79BE,0x82B1,0x83EF,0x8A71,0x8B41,0x8CA8,0x9774, -0xFA0B,0x64F4,0x652B,0x78BA,0x78BB,0x7A6B,0x4E38,0x559A, -0x5950,0x5BA6,0x5E7B,0x60A3,0x63DB,0x6B61,0x6665,0x6853, -0x6E19,0x7165,0x74B0,0x7D08,0x9084,0x9A69,0x9C25,0x6D3B, -0x6ED1,0x733E,0x8C41,0x95CA,0x51F0,0x5E4C,0x5FA8,0x604D, -0x60F6,0x6130,0x614C,0x6643,0x6644,0x69A5,0x6CC1,0x6E5F, -0x6EC9,0x6F62,0x714C,0x749C,0x7687,0x7BC1,0x7C27,0x8352, -0x8757,0x9051,0x968D,0x9EC3,0x532F,0x56DE,0x5EFB,0x5F8A, -0x6062,0x6094,0x61F7,0x6666,0x6703,0x6A9C,0x6DEE,0x6FAE, -0x7070,0x736A,0x7E6A,0x81BE,0x8334,0x86D4,0x8AA8,0x8CC4, -0x5283,0x7372,0x5B96,0x6A6B,0x9404,0x54EE,0x5686,0x5B5D, -0x6548,0x6585,0x66C9,0x689F,0x6D8D,0x6DC6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x723B,0x80B4,0x9175,0x9A4D,0x4FAF,0x5019,0x539A,0x540E, -0x543C,0x5589,0x55C5,0x5E3F,0x5F8C,0x673D,0x7166,0x73DD, -0x9005,0x52DB,0x52F3,0x5864,0x58CE,0x7104,0x718F,0x71FB, -0x85B0,0x8A13,0x6688,0x85A8,0x55A7,0x6684,0x714A,0x8431, -0x5349,0x5599,0x6BC1,0x5F59,0x5FBD,0x63EE,0x6689,0x7147, -0x8AF1,0x8F1D,0x9EBE,0x4F11,0x643A,0x70CB,0x7566,0x8667, -0x6064,0x8B4E,0x9DF8,0x5147,0x51F6,0x5308,0x6D36,0x80F8, -0x9ED1,0x6615,0x6B23,0x7098,0x75D5,0x5403,0x5C79,0x7D07, -0x8A16,0x6B20,0x6B3D,0x6B46,0x5438,0x6070,0x6D3D,0x7FD5, -0x8208,0x50D6,0x51DE,0x559C,0x566B,0x56CD,0x59EC,0x5B09, -0x5E0C,0x6199,0x6198,0x6231,0x665E,0x66E6,0x7199,0x71B9, -0x71BA,0x72A7,0x79A7,0x7A00,0x7FB2,0x8A70}; - -static int func_ksc5601_uni_onechar(int code){ - if ((code>=0x8141)&&(code<=0xC8FE)) - return(tab_ksc5601_uni0[code-0x8141]); - if ((code>=0xCAA1)&&(code<=0xFDFE)) - return(tab_ksc5601_uni1[code-0xCAA1]); - return(0); -} -/* page 0 0x00A1-0x0167 */ -static uint16 tab_uni_ksc56010[]={ -0xA2AE, 0, 0,0xA2B4, 0, 0,0xA1D7,0xA1A7, - 0,0xA8A3, 0, 0,0xA1A9,0xA2E7, 0,0xA1C6, -0xA1BE,0xA9F7,0xA9F8,0xA2A5, 0,0xA2D2,0xA1A4,0xA2AC, -0xA9F6,0xA8AC, 0,0xA8F9,0xA8F6,0xA8FA,0xA2AF, 0, - 0, 0, 0, 0, 0,0xA8A1, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xA8A2, - 0, 0, 0, 0, 0, 0,0xA1BF,0xA8AA, - 0, 0, 0, 0, 0,0xA8AD,0xA9AC, 0, - 0, 0, 0, 0, 0,0xA9A1, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xA9A3, - 0, 0, 0, 0, 0, 0,0xA1C0,0xA9AA, - 0, 0, 0, 0, 0,0xA9AD, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA9A2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA8A4,0xA9A4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA9A5,0xA8A6,0xA9A6, 0, 0, 0, 0,0xA9A7, - 0, 0, 0, 0, 0, 0,0xA8A8,0xA9A8, -0xA8A9,0xA9A9, 0, 0, 0, 0, 0, 0, -0xA9B0,0xA8AF,0xA9AF, 0, 0, 0, 0, 0, - 0,0xA8AB,0xA9AB, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA8AE,0xA9AE}; - -/* page 1 0x02C7-0x0451 */ -static uint16 tab_uni_ksc56011[]={ -0xA2A7, 0, 0, 0, 0, 0, 0, 0, - 0,0xA2B0, 0, 0, 0, 0, 0, 0, - 0,0xA2A8,0xA2AB,0xA2AA,0xA2AD, 0,0xA2A9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xA5C1,0xA5C2,0xA5C3,0xA5C4,0xA5C5,0xA5C6, -0xA5C7,0xA5C8,0xA5C9,0xA5CA,0xA5CB,0xA5CC,0xA5CD,0xA5CE, -0xA5CF,0xA5D0,0xA5D1, 0,0xA5D2,0xA5D3,0xA5D4,0xA5D5, -0xA5D6,0xA5D7,0xA5D8, 0, 0, 0, 0, 0, - 0, 0,0xA5E1,0xA5E2,0xA5E3,0xA5E4,0xA5E5,0xA5E6, -0xA5E7,0xA5E8,0xA5E9,0xA5EA,0xA5EB,0xA5EC,0xA5ED,0xA5EE, -0xA5EF,0xA5F0,0xA5F1, 0,0xA5F2,0xA5F3,0xA5F4,0xA5F5, -0xA5F6,0xA5F7,0xA5F8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xACA7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xACA1,0xACA2,0xACA3,0xACA4,0xACA5,0xACA6,0xACA8, -0xACA9,0xACAA,0xACAB,0xACAC,0xACAD,0xACAE,0xACAF,0xACB0, -0xACB1,0xACB2,0xACB3,0xACB4,0xACB5,0xACB6,0xACB7,0xACB8, -0xACB9,0xACBA,0xACBB,0xACBC,0xACBD,0xACBE,0xACBF,0xACC0, -0xACC1,0xACD1,0xACD2,0xACD3,0xACD4,0xACD5,0xACD6,0xACD8, -0xACD9,0xACDA,0xACDB,0xACDC,0xACDD,0xACDE,0xACDF,0xACE0, -0xACE1,0xACE2,0xACE3,0xACE4,0xACE5,0xACE6,0xACE7,0xACE8, -0xACE9,0xACEA,0xACEB,0xACEC,0xACED,0xACEE,0xACEF,0xACF0, -0xACF1, 0,0xACD7}; - -/* page 2 0x2015-0x2312 */ -static uint16 tab_uni_ksc56012[]={ -0xA1AA, 0, 0,0xA1AE,0xA1AF, 0, 0,0xA1B0, -0xA1B1, 0, 0,0xA2D3,0xA2D4, 0, 0, 0, -0xA1A5,0xA1A6, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xA2B6, 0,0xA1C7,0xA1C8, 0, - 0, 0, 0, 0, 0, 0,0xA1D8, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xA9F9, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xA9FA, 0,0xA9FB,0xA9FC,0xA9FD,0xA9FE, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xA2E6, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xA1C9, 0, - 0, 0, 0, 0,0xA2B5, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xA7A4, 0, - 0,0xA2E0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xA2E5,0xA2E2, 0, 0, - 0,0xA7D9, 0, 0, 0, 0,0xA1CA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xA8F7,0xA8F8, - 0, 0, 0, 0, 0, 0,0xA8FB,0xA8FC, -0xA8FD,0xA8FE, 0,0xA5B0,0xA5B1,0xA5B2,0xA5B3,0xA5B4, -0xA5B5,0xA5B6,0xA5B7,0xA5B8,0xA5B9, 0, 0, 0, - 0, 0, 0,0xA5A1,0xA5A2,0xA5A3,0xA5A4,0xA5A5, -0xA5A6,0xA5A7,0xA5A8,0xA5A9,0xA5AA, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xA1E7,0xA1E8,0xA1E6,0xA1E9,0xA1EA, -0xA2D5,0xA2D8,0xA2D6,0xA2D9,0xA2D7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA2A1, 0,0xA2A2, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xA2A3, 0,0xA1D3,0xA2A4, 0, - 0, 0,0xA1D4,0xA1F4, 0, 0,0xA1F5, 0, - 0, 0,0xA2B3, 0,0xA2B2, 0, 0, 0, - 0, 0, 0, 0, 0,0xA1EE, 0, 0, -0xA1F0,0xA1C4, 0,0xA1D0, 0, 0, 0, 0, -0xA1AB, 0,0xA1FC,0xA1FD,0xA1FB,0xA1FA,0xA1F2,0xA1F3, - 0,0xA2B1, 0, 0, 0, 0, 0,0xA1C5, -0xA1F1, 0, 0, 0, 0, 0, 0,0xA1AD, -0xA1EF, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA1D6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xA1C1,0xA1D5, 0, 0,0xA1C2, -0xA1C3, 0, 0, 0, 0,0xA1EC,0xA1ED, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA1F8,0xA1F9, 0, - 0,0xA1F6,0xA1F7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xA2C1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA1D1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA1D2}; - -/* page 3 0x2460-0x266D */ -static uint16 tab_uni_ksc56013[]={ -0xA8E7,0xA8E8,0xA8E9,0xA8EA,0xA8EB,0xA8EC,0xA8ED,0xA8EE, -0xA8EF,0xA8F0,0xA8F1,0xA8F2,0xA8F3,0xA8F4,0xA8F5, 0, - 0, 0, 0, 0,0xA9E7,0xA9E8,0xA9E9,0xA9EA, -0xA9EB,0xA9EC,0xA9ED,0xA9EE,0xA9EF,0xA9F0,0xA9F1,0xA9F2, -0xA9F3,0xA9F4,0xA9F5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xA9CD,0xA9CE,0xA9CF,0xA9D0, -0xA9D1,0xA9D2,0xA9D3,0xA9D4,0xA9D5,0xA9D6,0xA9D7,0xA9D8, -0xA9D9,0xA9DA,0xA9DB,0xA9DC,0xA9DD,0xA9DE,0xA9DF,0xA9E0, -0xA9E1,0xA9E2,0xA9E3,0xA9E4,0xA9E5,0xA9E6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA8CD,0xA8CE,0xA8CF,0xA8D0,0xA8D1,0xA8D2,0xA8D3,0xA8D4, -0xA8D5,0xA8D6,0xA8D7,0xA8D8,0xA8D9,0xA8DA,0xA8DB,0xA8DC, -0xA8DD,0xA8DE,0xA8DF,0xA8E0,0xA8E1,0xA8E2,0xA8E3,0xA8E4, -0xA8E5,0xA8E6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA6A1,0xA6AC,0xA6A2,0xA6AD, 0, 0, 0, 0, - 0, 0, 0, 0,0xA6A3,0xA6C8,0xA6C7,0xA6AE, -0xA6A4,0xA6C2,0xA6C1,0xA6AF,0xA6A6,0xA6C6,0xA6C5,0xA6B1, -0xA6A5,0xA6C4,0xA6C3,0xA6B0,0xA6A7,0xA6BC,0xA6C9,0xA6CA, -0xA6B7,0xA6CB,0xA6CC,0xA6B2,0xA6A9,0xA6BE,0xA6CD,0xA6CE, -0xA6B9,0xA6CF,0xA6D0,0xA6B4,0xA6A8,0xA6D1,0xA6D2,0xA6B8, -0xA6BD,0xA6D3,0xA6D4,0xA6B3,0xA6AA,0xA6D5,0xA6D6,0xA6BA, -0xA6BF,0xA6D7,0xA6D8,0xA6B5,0xA6AB,0xA6D9,0xA6DA,0xA6BB, -0xA6DB,0xA6DC,0xA6C0,0xA6DD,0xA6DE,0xA6DF,0xA6E0,0xA6E1, -0xA6E2,0xA6E3,0xA6E4,0xA6B6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xA2C6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA1E1,0xA1E0, 0,0xA2C3,0xA2C7,0xA2C8,0xA2CB,0xA2CA, -0xA2C9,0xA2CC, 0, 0, 0, 0, 0, 0, - 0, 0,0xA1E3,0xA1E2, 0, 0,0xA2BA,0xA2B9, - 0, 0, 0, 0,0xA1E5,0xA1E4, 0, 0, -0xA2B8,0xA2B7, 0, 0, 0, 0,0xA1DF,0xA1DE, -0xA2C2, 0, 0,0xA1DB, 0, 0,0xA1DD,0xA1DC, -0xA2C4,0xA2C5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA1DA,0xA1D9, 0, - 0, 0, 0, 0, 0, 0,0xA2CF,0xA2CE, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xA2D0, 0,0xA2D1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA1CF, 0,0xA1CE, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA2BC,0xA2BD, 0,0xA2C0,0xA2BB,0xA2BE, 0,0xA2BF, -0xA2CD,0xA2DB,0xA2DC, 0,0xA2DD,0xA2DA}; - -/* page 4 0x3000-0x327F */ -static uint16 tab_uni_ksc56014[]={ -0xA1A1,0xA1A2,0xA1A3,0xA1A8, 0, 0, 0, 0, -0xA1B4,0xA1B5,0xA1B6,0xA1B7,0xA1B8,0xA1B9,0xA1BA,0xA1BB, -0xA1BC,0xA1BD, 0,0xA1EB,0xA1B2,0xA1B3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xAAA1,0xAAA2,0xAAA3,0xAAA4,0xAAA5,0xAAA6,0xAAA7, -0xAAA8,0xAAA9,0xAAAA,0xAAAB,0xAAAC,0xAAAD,0xAAAE,0xAAAF, -0xAAB0,0xAAB1,0xAAB2,0xAAB3,0xAAB4,0xAAB5,0xAAB6,0xAAB7, -0xAAB8,0xAAB9,0xAABA,0xAABB,0xAABC,0xAABD,0xAABE,0xAABF, -0xAAC0,0xAAC1,0xAAC2,0xAAC3,0xAAC4,0xAAC5,0xAAC6,0xAAC7, -0xAAC8,0xAAC9,0xAACA,0xAACB,0xAACC,0xAACD,0xAACE,0xAACF, -0xAAD0,0xAAD1,0xAAD2,0xAAD3,0xAAD4,0xAAD5,0xAAD6,0xAAD7, -0xAAD8,0xAAD9,0xAADA,0xAADB,0xAADC,0xAADD,0xAADE,0xAADF, -0xAAE0,0xAAE1,0xAAE2,0xAAE3,0xAAE4,0xAAE5,0xAAE6,0xAAE7, -0xAAE8,0xAAE9,0xAAEA,0xAAEB,0xAAEC,0xAAED,0xAAEE,0xAAEF, -0xAAF0,0xAAF1,0xAAF2,0xAAF3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xABA1,0xABA2,0xABA3,0xABA4,0xABA5,0xABA6,0xABA7, -0xABA8,0xABA9,0xABAA,0xABAB,0xABAC,0xABAD,0xABAE,0xABAF, -0xABB0,0xABB1,0xABB2,0xABB3,0xABB4,0xABB5,0xABB6,0xABB7, -0xABB8,0xABB9,0xABBA,0xABBB,0xABBC,0xABBD,0xABBE,0xABBF, -0xABC0,0xABC1,0xABC2,0xABC3,0xABC4,0xABC5,0xABC6,0xABC7, -0xABC8,0xABC9,0xABCA,0xABCB,0xABCC,0xABCD,0xABCE,0xABCF, -0xABD0,0xABD1,0xABD2,0xABD3,0xABD4,0xABD5,0xABD6,0xABD7, -0xABD8,0xABD9,0xABDA,0xABDB,0xABDC,0xABDD,0xABDE,0xABDF, -0xABE0,0xABE1,0xABE2,0xABE3,0xABE4,0xABE5,0xABE6,0xABE7, -0xABE8,0xABE9,0xABEA,0xABEB,0xABEC,0xABED,0xABEE,0xABEF, -0xABF0,0xABF1,0xABF2,0xABF3,0xABF4,0xABF5,0xABF6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xA4A1,0xA4A2,0xA4A3,0xA4A4,0xA4A5,0xA4A6,0xA4A7, -0xA4A8,0xA4A9,0xA4AA,0xA4AB,0xA4AC,0xA4AD,0xA4AE,0xA4AF, -0xA4B0,0xA4B1,0xA4B2,0xA4B3,0xA4B4,0xA4B5,0xA4B6,0xA4B7, -0xA4B8,0xA4B9,0xA4BA,0xA4BB,0xA4BC,0xA4BD,0xA4BE,0xA4BF, -0xA4C0,0xA4C1,0xA4C2,0xA4C3,0xA4C4,0xA4C5,0xA4C6,0xA4C7, -0xA4C8,0xA4C9,0xA4CA,0xA4CB,0xA4CC,0xA4CD,0xA4CE,0xA4CF, -0xA4D0,0xA4D1,0xA4D2,0xA4D3,0xA4D4,0xA4D5,0xA4D6,0xA4D7, -0xA4D8,0xA4D9,0xA4DA,0xA4DB,0xA4DC,0xA4DD,0xA4DE,0xA4DF, -0xA4E0,0xA4E1,0xA4E2,0xA4E3,0xA4E4,0xA4E5,0xA4E6,0xA4E7, -0xA4E8,0xA4E9,0xA4EA,0xA4EB,0xA4EC,0xA4ED,0xA4EE,0xA4EF, -0xA4F0,0xA4F1,0xA4F2,0xA4F3,0xA4F4,0xA4F5,0xA4F6,0xA4F7, -0xA4F8,0xA4F9,0xA4FA,0xA4FB,0xA4FC,0xA4FD,0xA4FE, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA9B1,0xA9B2,0xA9B3,0xA9B4,0xA9B5,0xA9B6,0xA9B7,0xA9B8, -0xA9B9,0xA9BA,0xA9BB,0xA9BC,0xA9BD,0xA9BE,0xA9BF,0xA9C0, -0xA9C1,0xA9C2,0xA9C3,0xA9C4,0xA9C5,0xA9C6,0xA9C7,0xA9C8, -0xA9C9,0xA9CA,0xA9CB,0xA9CC,0xA2DF, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA8B1,0xA8B2,0xA8B3,0xA8B4,0xA8B5,0xA8B6,0xA8B7,0xA8B8, -0xA8B9,0xA8BA,0xA8BB,0xA8BC,0xA8BD,0xA8BE,0xA8BF,0xA8C0, -0xA8C1,0xA8C2,0xA8C3,0xA8C4,0xA8C5,0xA8C6,0xA8C7,0xA8C8, -0xA8C9,0xA8CA,0xA8CB,0xA8CC, 0, 0, 0,0xA2DE -}; - -/* page 5 0x3380-0x33DD */ -static uint16 tab_uni_ksc56015[]={ -0xA7C9,0xA7CA,0xA7CB,0xA7CC,0xA7CD, 0, 0, 0, -0xA7BA,0xA7BB,0xA7DC,0xA7DD,0xA7DE,0xA7B6,0xA7B7,0xA7B8, -0xA7D4,0xA7D5,0xA7D6,0xA7D7,0xA7D8,0xA7A1,0xA7A2,0xA7A3, -0xA7A5,0xA7AB,0xA7AC,0xA7AD,0xA7AE,0xA7AF,0xA7B0,0xA7B1, -0xA7B2,0xA7B3,0xA7B4,0xA7A7,0xA7A8,0xA7A9,0xA7AA,0xA7BD, -0xA7BE,0xA7E5,0xA7E6,0xA7E7,0xA7E8,0xA7E1,0xA7E2,0xA7E3, -0xA7BF,0xA7C0,0xA7C1,0xA7C2,0xA7C3,0xA7C4,0xA7C5,0xA7C6, -0xA7C7,0xA7C8,0xA7CE,0xA7CF,0xA7D0,0xA7D1,0xA7D2,0xA7D3, -0xA7DA,0xA7DB,0xA2E3,0xA7EC,0xA7A6,0xA7E0,0xA7EF,0xA2E1, -0xA7BC,0xA7ED,0xA7B5, 0, 0, 0, 0,0xA7B9, -0xA7EA, 0, 0,0xA7EB, 0, 0,0xA7DF, 0, -0xA2E4, 0, 0,0xA7E4,0xA7EE,0xA7E9}; - -/* page 6 0x4E00-0x947F */ -static uint16 tab_uni_ksc56016[]={ -0xECE9,0xEFCB, 0,0xF6D2, 0, 0, 0,0xD8B2, -0xEDDB,0xDFB2,0xDFBE,0xF9BB, 0,0xDCF4, 0, 0, - 0,0xF5E4, 0, 0,0xF3A6,0xDDE0,0xE1A6, 0, -0xCEF8,0xDCB0, 0, 0, 0, 0,0xE3AA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF1E9, 0, 0, - 0, 0,0xCDFA, 0, 0, 0, 0, 0, -0xFCAF,0xD3A1, 0,0xF1AB, 0, 0, 0, 0, - 0, 0,0xE7D1,0xD2AC, 0,0xCEF9, 0, 0, - 0, 0, 0,0xF1FD, 0,0xDEBF,0xFBBA,0xF9B9, - 0, 0, 0, 0, 0, 0,0xCED2, 0, -0xE3AB,0xEBE0, 0, 0, 0,0xCEFA,0xCBF7,0xE5A5, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xCAE1, 0,0xD4CC, 0, 0, - 0, 0, 0,0xEAE1, 0, 0,0xDCE3,0xDFAD, - 0, 0, 0, 0, 0, 0,0xCBEB, 0, - 0, 0,0xD5AF, 0, 0, 0,0xD6F5, 0, -0xE5F8, 0, 0,0xDEC0,0xECA3, 0,0xE9CD, 0, -0xEAA7,0xE9F6,0xFBBB, 0,0xE7E9,0xEFCC, 0, 0, -0xD0E6, 0, 0,0xDEC1, 0, 0,0xE4AC, 0, - 0,0xD8CC,0xF9F1, 0,0xCEDF,0xFAA4,0xE6B2, 0, -0xFAFB, 0, 0,0xFABD,0xCCC8,0xEFCD,0xD5D5, 0, - 0, 0, 0, 0, 0, 0,0xD3A2, 0, - 0, 0,0xECD1, 0, 0, 0, 0, 0, -0xE4A7,0xECD2, 0, 0,0xF6B1, 0, 0,0xCEFB, - 0, 0,0xD0D1,0xCBBF, 0,0xEDA4, 0, 0, - 0, 0, 0, 0,0xEDA8,0xDEC2,0xF6E2,0xEDDC, -0xDCF5,0xE0B9, 0, 0, 0,0xD4CE, 0,0xF4B5, - 0, 0, 0,0xD3DB,0xD6B5,0xECA4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE4E6, 0,0xF1EA, 0, 0, 0,0xCBEC,0xCBC0, - 0, 0, 0,0xECF2, 0, 0, 0, 0, - 0,0xD0EA, 0, 0, 0, 0, 0, 0, - 0,0xF9F2,0xECA5,0xD0DF, 0,0xE7EA,0xD0EB,0xDCD1, -0xDBE9,0xFDCC, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xDBD7, - 0, 0, 0, 0,0xDAE1, 0,0xD6B6, 0, -0xE3DF, 0,0xDEC3, 0,0xDEC4,0xCAA1, 0, 0, - 0, 0, 0,0xEEEC, 0, 0,0xD3A3,0xEEB7, -0xF8CF, 0, 0, 0, 0,0xEAC8,0xEEB8,0xF1AC, -0xF1A5,0xE9CE, 0, 0, 0,0xF9BC, 0, 0, - 0,0xE5F9,0xECEA,0xDDD6,0xEDC2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF8A5, 0, 0, 0, 0, 0,0xE5BA, -0xDBD8, 0, 0,0xCAA2, 0, 0,0xD1CD, 0, - 0, 0,0xEEED, 0, 0, 0,0xECEB,0xDEC5, - 0,0xE3E0, 0,0xCAC9,0xF2E9, 0,0xD5CE, 0, -0xF6B6, 0,0xCEC2,0xD6C7, 0,0xE3B4, 0,0xF1AD, - 0,0xEAE2, 0, 0, 0, 0,0xD7C2, 0, -0xF3A7, 0, 0,0xCDEA, 0,0xEBEE, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xD9B2,0xFDA5, - 0, 0, 0, 0, 0,0xF6D5,0xD5E2, 0, - 0, 0, 0, 0, 0, 0, 0,0xF8B5, - 0, 0,0xCCF5,0xF5B5,0xE4AD, 0, 0, 0, - 0,0xE7EB,0xF1D5, 0, 0, 0,0xF0BB, 0, - 0,0xE9B5, 0,0xCCC9,0xFAD5, 0, 0,0xE1D4, - 0, 0,0xD7D6, 0, 0,0xDCC1, 0,0xDEC6, -0xFAEF,0xE3E1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE1F3,0xDCF6, - 0,0xCEFC, 0,0xDBC4, 0,0xF8F1, 0, 0, -0xDCE4, 0,0xE5EF, 0, 0, 0, 0, 0, - 0, 0,0xDCB1, 0, 0, 0,0xD5D6, 0, - 0,0xF3DA, 0,0xCBC1, 0,0xDBC3, 0, 0, - 0,0xD9FA,0xD3EE, 0, 0, 0,0xFAB8, 0, - 0,0xFDA6,0xEBEF, 0,0xF4A6, 0,0xCCCA,0xF3A8, - 0,0xF3DB, 0,0xDBA7,0xF6B7, 0,0xCFE6,0xF0F2, -0xCBDA, 0,0xE7D2,0xD7C3,0xF6F0,0xE8DE, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE5A6, 0, 0, 0, 0, - 0, 0, 0,0xE5E7, 0, 0, 0,0xCAA3, -0xCCA7,0xEAC9, 0, 0, 0, 0, 0,0xF8B6, - 0, 0, 0, 0, 0,0xFAA5, 0, 0, - 0, 0,0xF1AE, 0,0xEFCE, 0, 0, 0, - 0, 0, 0, 0, 0,0xCBED, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xF6B0,0xEFCF,0xE9CF, 0, -0xF7DE, 0, 0, 0, 0, 0, 0, 0, -0xCED3, 0, 0, 0, 0,0xDCF7, 0, 0, - 0, 0, 0, 0, 0,0xDBA8, 0, 0, - 0,0xCBF8, 0, 0, 0, 0, 0, 0, -0xDFA1,0xDDE1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xF5CA,0xE9B6, 0, 0, - 0, 0,0xE7EC,0xEEEE, 0,0xF3F0, 0,0xDFBF, - 0, 0, 0, 0, 0, 0,0xCCCB, 0, - 0, 0, 0, 0, 0,0xD0C1, 0, 0, - 0,0xF4D2,0xE0BA, 0, 0, 0, 0,0xDFC0, - 0,0xCEE0, 0, 0, 0,0xDCD2,0xFDEA, 0, - 0, 0,0xD6F6, 0, 0, 0,0xEACA, 0, - 0, 0, 0, 0, 0,0xE8E9, 0,0xE3AC, - 0, 0, 0, 0, 0,0xF3D0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xCAA4, 0,0xDBF8, 0, 0, 0,0xDEC7, -0xEBF0,0xF1D6, 0, 0,0xE5E2, 0,0xCCCC, 0, - 0,0xCBFB, 0, 0, 0, 0, 0, 0, - 0, 0,0xEAE3, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xDFC1, - 0,0xD6ED, 0, 0, 0, 0, 0, 0, - 0, 0,0xE9D0, 0, 0, 0, 0, 0, - 0, 0,0xEEB9, 0, 0, 0, 0,0xD5E3, - 0, 0,0xD1D3, 0,0xE5F0, 0, 0, 0, -0xE8B4,0xEBC3, 0,0xEAAA,0xFAFC,0xF5F6,0xF0BC,0xFDD4, -0xE0BB,0xCEC3, 0,0xD0BA,0xF7BA,0xD8F3,0xF7CD, 0, - 0, 0,0xE4AE, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xD4DF, 0, 0, 0, - 0, 0,0xD0E7, 0, 0,0xECFD, 0,0xD2AE, -0xEEEF,0xD5D7,0xEAE4,0xF8A2,0xCDEB,0xD7BF,0xFBB1, 0, - 0,0xCDEC, 0, 0, 0,0xDCB2,0xD0EC,0xCEFD, -0xEEF0, 0, 0, 0,0xCCC2, 0, 0, 0, -0xD0ED, 0, 0, 0, 0, 0,0xE5F7, 0, - 0, 0,0xF3FC, 0, 0,0xEEA2, 0, 0, - 0, 0,0xD9B3, 0, 0,0xD8F4, 0,0xE9B7, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCEAE, 0, 0, 0, 0,0xD9A2, 0, 0, - 0, 0,0xD8F1, 0,0xD4CF, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE5A7,0xD5D2, - 0, 0, 0, 0, 0,0xD6A9, 0, 0, - 0, 0, 0, 0,0xF4A2, 0,0xF1D7, 0, - 0,0xD5D8, 0,0xF0BD,0xD7D0,0xD4D0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xD7CF,0xEBEA,0xFDEB, 0, - 0,0xDBED, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xFCC5,0xCBC2, 0, 0, 0, 0,0xFDD5, 0, -0xF4C8,0xE8EA,0xF5F3, 0, 0,0xF9DE, 0, 0, -0xD3EF, 0, 0,0xECD3, 0, 0,0xDDC2,0xEFB7, -0xE7D4, 0,0xCACA, 0, 0, 0,0xD9FB, 0, - 0,0xFAFD, 0, 0, 0, 0, 0,0xD6AA, - 0, 0, 0, 0, 0,0xF4F8, 0, 0, - 0, 0, 0, 0,0xF7F7,0xDCAC, 0, 0, - 0,0xD7D7,0xDFA2, 0, 0, 0,0xCEBE, 0, -0xD3F0, 0, 0, 0, 0, 0,0xF0A4,0xE1EC, -0xCFE7,0xF3CB,0xEDA9,0xCABE, 0, 0, 0, 0, - 0, 0, 0,0xF4EF, 0, 0, 0,0xF6CE, - 0, 0,0xDEFB,0xD0BB,0xD5B7,0xEEF1, 0, 0, - 0, 0, 0, 0,0xF4A8, 0,0xDCF8, 0, - 0, 0, 0,0xCBA7, 0,0xDACE, 0, 0, - 0,0xE0E6, 0, 0, 0, 0, 0, 0, - 0,0xEDA5,0xEEF2, 0, 0, 0, 0,0xDCF9, - 0, 0,0xF9DC, 0, 0,0xF3DC, 0, 0, - 0, 0, 0, 0, 0,0xF8F2, 0,0xF4F9, - 0, 0, 0,0xFCF1, 0, 0, 0,0xD0BC, -0xDBF9,0xD7B1, 0, 0, 0,0xCBFC, 0, 0, - 0,0xF0A5,0xCBFD, 0, 0, 0, 0, 0, - 0, 0, 0,0xD5F4, 0, 0, 0,0xCDED, -0xCAA5, 0, 0,0xD6AB,0xD0C2, 0, 0, 0, - 0,0xF0BE,0xD2BD,0xCCA4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xFAB6, 0, - 0,0xCCCD, 0,0xDAFA, 0,0xF6CF, 0,0xE9B8, - 0,0xD8F5, 0, 0, 0,0xCCCE, 0, 0, - 0, 0,0xD7CD, 0, 0,0xD4D1,0xE9ED, 0, -0xCAEB,0xD9E2, 0,0xFDB2, 0,0xE3AD,0xD6CC,0xD9B4, - 0, 0,0xE1A7,0xEED3,0xD0C3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xFDB3, 0,0xD5E4, 0, 0, -0xCFE8, 0,0xEDC3,0xD0B2, 0, 0,0xCEFE,0xDAA8, - 0, 0, 0, 0, 0,0xF8D0, 0, 0, -0xFDD6, 0, 0, 0, 0,0xF8D1, 0,0xF8D2, -0xDCD3, 0, 0, 0, 0,0xDDE2,0xFBF9,0xDDC1, - 0,0xE3B5, 0, 0, 0, 0, 0, 0, -0xEDDD,0xCEC4, 0,0xCBA1, 0, 0, 0, 0, - 0, 0,0xDDE3, 0, 0, 0, 0,0xFCDD, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF9AF, 0, 0, 0, 0, 0,0xD2FB, -0xCFA1,0xE4A8, 0,0xF4B6,0xECFE, 0, 0,0xE3AE, -0xE7ED,0xFDC1,0xDAE2, 0, 0,0xD8B3, 0, 0, - 0,0xDDE4,0xF0EF,0xF6F1,0xFAF0, 0, 0,0xD1F5, - 0, 0,0xDACF, 0,0xDCD4, 0,0xDCA6, 0, -0xEFBF, 0, 0, 0, 0, 0,0xCECF, 0, -0xE0D9, 0, 0, 0, 0, 0, 0,0xD9D6, -0xECD4,0xEACB, 0, 0,0xCABF,0xD5B0, 0,0xCFE9, - 0, 0, 0, 0, 0,0xF1ED, 0,0xCCCF, - 0, 0, 0, 0,0xE4F8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE4ED, 0, 0, 0, 0, -0xD7D8, 0,0xFDA7, 0, 0, 0, 0,0xEAAB, -0xF6B2, 0, 0, 0, 0,0xCFF0,0xF9BD, 0, - 0, 0, 0, 0, 0,0xE6F4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xCBDB, 0, 0, 0, 0, - 0, 0, 0,0xF3D1, 0, 0, 0, 0, -0xE9D1,0xF3A9,0xD0E0,0xE9D2, 0,0xDAE3, 0, 0, - 0, 0, 0, 0,0xE2D2, 0,0xF6A2,0xE1F4, - 0, 0, 0,0xDAE4, 0, 0, 0, 0, - 0,0xE7D5,0xF5BF,0xCFA2,0xCDAF,0xCFA3, 0, 0, - 0,0xCDB0,0xF1FE,0xD0A3,0xE1AF,0xF8A3, 0,0xCAA6, -0xF7BB,0xF2EA,0xDEC8,0xE9D3, 0, 0, 0, 0, -0xDEC9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xFDDE,0xCAC0, 0, 0, 0, -0xF9EA,0xD1CE,0xEED4, 0,0xD4D2,0xD9A3,0xFDA8,0xD7D9, -0xF7CE,0xFABE, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xCFD6, 0,0xD7F0, 0,0xEBE1, -0xF8C5, 0, 0, 0, 0, 0,0xDCFA, 0, - 0,0xDDC3, 0,0xF9DF, 0, 0, 0, 0, - 0, 0, 0,0xE7EF, 0, 0, 0, 0, -0xFDE5,0xF6A3, 0,0xD9FC,0xFDA9, 0,0xE7EE, 0, - 0, 0,0xD5E5, 0, 0, 0, 0, 0, -0xEFD0, 0,0xCDB1, 0, 0, 0, 0, 0, - 0,0xF7A2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF1B2, 0,0xF1B1, 0, 0, 0, 0, 0, - 0,0xCDB2, 0,0xDAAB, 0,0xCAA7, 0, 0, - 0, 0, 0,0xE3E2,0xFBBC,0xD9A4, 0, 0, -0xEEBA, 0, 0, 0, 0, 0,0xF8D3, 0, - 0, 0, 0, 0,0xFBFA, 0,0xCFA4, 0, -0xDCFB, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xF6E3, 0, 0, 0, -0xEDAA, 0, 0,0xF2A1,0xCEE1, 0, 0, 0, - 0, 0, 0,0xFAA6, 0, 0, 0, 0, -0xF9E0, 0, 0, 0, 0,0xECD6, 0, 0, -0xE4EE,0xF9A1, 0, 0,0xFBEF, 0, 0, 0, -0xF9EB,0xEEA3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xEAAC, 0, 0, 0,0xCAA8, 0, 0, -0xF4FA, 0, 0, 0, 0,0xCDD6,0xFCF6, 0, - 0, 0,0xF4C9, 0, 0, 0, 0, 0, - 0, 0,0xF8D4, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xF8A6, 0,0xDECA,0xF2C6, - 0, 0, 0, 0, 0, 0,0xD7DA, 0, -0xD3D0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xD8C5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xEAE6, - 0,0xF3DD, 0, 0, 0,0xE4DA, 0, 0, - 0, 0, 0, 0, 0, 0,0xF6E4, 0, - 0, 0, 0, 0,0xF6F2, 0,0xDFC2, 0, - 0, 0, 0, 0, 0, 0, 0,0xD9FD, - 0, 0, 0,0xCCF6, 0, 0,0xD3BA, 0, - 0, 0, 0, 0, 0, 0,0xE4AF, 0, - 0, 0, 0,0xF9E1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xF0A6, 0, 0, 0, -0xCBD3, 0, 0, 0,0xE0BC, 0,0xF4CA,0xD4FA, - 0,0xFDAA,0xF9E2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF4B7,0xFDC2,0xFCB0, 0,0xFDEC,0xCAE2, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xFDBD, - 0,0xEAE7,0xDFC3,0xD1D2,0xCEE2, 0,0xD3A4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xFDAB, 0,0xDFE0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xF2C7, 0, 0, 0, - 0, 0,0xE7F0, 0,0xD0EE, 0, 0,0xF3AA, - 0, 0, 0,0xDECB,0xF6B8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE1F5,0xF1B3, 0, - 0, 0, 0, 0, 0, 0,0xF7A3, 0, - 0,0xCAA9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xCFA5, 0, 0,0xDFC4, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE1B0, - 0, 0,0xF0BF, 0,0xF6A4, 0,0xE3B6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xFAC6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD0EF, 0, 0,0xFDED, 0, 0, 0, 0, - 0, 0, 0, 0,0xDDC4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xFCF7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE6BF, 0, 0, - 0, 0, 0, 0,0xDEAD, 0,0xFABF, 0, - 0, 0, 0, 0,0xE5F1, 0, 0, 0, - 0, 0, 0, 0,0xEDC4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xD2A5, 0, 0,0xFDEE, 0, 0, - 0,0xF5B6, 0, 0, 0, 0, 0, 0, - 0, 0,0xE1F6,0xDECC, 0, 0,0xFCDE, 0, -0xECD7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCDDD, 0, 0, 0, 0, 0, 0, 0, - 0,0xD6B7,0xCDB3, 0, 0, 0, 0, 0, - 0, 0, 0,0xF8D5,0xE5D8, 0, 0, 0, -0xCFEA, 0, 0,0xCFD0, 0,0xEACC, 0, 0, - 0, 0,0xEAAE,0xEAAD, 0, 0,0xD3F1, 0, -0xD3A5, 0, 0, 0, 0, 0, 0,0xF7CF, - 0, 0, 0, 0, 0, 0, 0, 0, -0xEEA4, 0, 0, 0, 0,0xD0A4, 0, 0, -0xF2A2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xD0F0, 0, 0, 0, 0, -0xF2A3, 0,0xF7F8, 0, 0, 0, 0,0xD0B3, - 0, 0,0xDBA9, 0, 0,0xD3BB,0xCAEC, 0, -0xF1A6,0xCBD5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF7E7, 0, 0,0xCDDE, 0,0xF7A4, 0, - 0, 0,0xF8C0, 0, 0, 0,0xD3DD, 0, -0xCCD0, 0, 0, 0, 0,0xCFA6, 0, 0, - 0, 0, 0, 0,0xF6F3, 0, 0, 0, - 0, 0,0xE1F7, 0, 0, 0, 0, 0, -0xD3DC, 0, 0,0xFAFE, 0, 0, 0, 0, - 0, 0, 0,0xFAA7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xEBD9, 0,0xCFA7,0xEAAF, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE4EF, 0, 0, 0,0xE9B9, -0xF1D8, 0, 0,0xD8D8, 0, 0,0xE0F2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE6B4, -0xDCFC, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF3F1, 0, 0, 0,0xE3D0, 0, 0,0xF2FB, - 0,0xDBC6,0xD0F1, 0,0xD0F2, 0, 0, 0, -0xCFDC, 0,0xD3D1, 0, 0,0xCCB1,0xF7D8, 0, -0xCBA8,0xEBBC,0xE4BE, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF4DC, 0, - 0,0xDCC2, 0, 0,0xF0A7, 0, 0,0xE6C0, - 0, 0,0xCAED, 0, 0, 0, 0,0xE8EB, -0xE5E8,0xDCC3, 0, 0,0xEDDE,0xD3F2, 0, 0, - 0, 0,0xCCF7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xCED4,0xE7AB, 0, 0, 0,0xCBC3, - 0,0xE1B1, 0, 0,0xF7B2, 0, 0,0xD3F3, -0xD3D2, 0,0xF5C0, 0, 0, 0,0xDFDD, 0, - 0,0xEEF3,0xE7F1, 0,0xFDB4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF2C8, 0, 0, - 0,0xF3D2, 0, 0,0xEEF4, 0,0xE2D3, 0, - 0, 0, 0,0xCCD1, 0,0xDFEA, 0, 0, - 0,0xE9BA, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xD9D7, 0, 0, 0, 0, - 0, 0, 0, 0,0xF5CD, 0,0xF1F2,0xFAC7, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD9F8,0xD4C2, 0, 0, 0, 0,0xF6E5, 0, - 0, 0, 0,0xDDC5, 0, 0, 0, 0, - 0, 0,0xE7F2,0xEDDF, 0, 0,0xCACB, 0, - 0,0xDBFA, 0, 0, 0,0xE8B5, 0,0xD3A6, - 0, 0, 0, 0, 0, 0,0xFDB5, 0, - 0,0xF9C9, 0,0xE4E2, 0,0xFBBD, 0, 0, -0xD7A4,0xCEC5, 0, 0, 0, 0,0xCED5,0xD6E6, - 0, 0, 0, 0,0xE5BD, 0, 0, 0, - 0, 0, 0,0xDECD,0xECF3, 0, 0,0xEDE0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xECEC,0xFBBE,0xDFEB, 0,0xE1F8, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xF9BE, - 0, 0, 0, 0,0xD0F3,0xE0AA,0xE8E2, 0, - 0,0xE2D4,0xD2FD, 0,0xE5A8, 0, 0, 0, - 0, 0,0xD9D3, 0, 0, 0, 0,0xD3DE, - 0,0xF4B8,0xF7BC,0xDCFD, 0,0xE8EC,0xE4E7, 0, - 0,0xE3F7, 0, 0, 0, 0, 0,0xECA8, - 0, 0, 0, 0, 0, 0,0xFAF1, 0, - 0, 0, 0, 0,0xE5F2, 0, 0,0xD0F4, -0xD2AF,0xDCE5, 0, 0, 0, 0,0xD0A5,0xF1B4, -0xFCB1,0xCCF8, 0, 0,0xDDC6,0xFAD1, 0,0xF7DF, - 0, 0,0xFAA8, 0, 0, 0, 0, 0, -0xEEF5, 0,0xDECE, 0, 0, 0, 0,0xE7F3, - 0, 0,0xF7AC,0xEBC4,0xEDE1,0xE0AB,0xDDC7, 0, - 0, 0, 0,0xD2B3,0xD2BF, 0, 0, 0, -0xCACC, 0, 0, 0, 0,0xFBBF, 0, 0, - 0, 0,0xE5FD,0xDDE5,0xD8CD, 0, 0, 0, - 0, 0,0xECF4, 0, 0, 0, 0, 0, - 0, 0, 0,0xD0F5, 0, 0,0xE8ED,0xD0D2, - 0,0xD9D8, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF6E6, 0, 0, -0xDBAA, 0, 0, 0,0xF7E0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xD8D9, 0,0xF4A3, 0, 0,0xF4DD, 0, - 0, 0, 0,0xEFD1, 0, 0,0xD9B5, 0, - 0,0xEDAB, 0,0xE3B7, 0, 0, 0, 0, -0xEEBB,0xCDB4, 0,0xE0F3,0xEACD, 0, 0, 0, - 0,0xECF5,0xE8EE, 0,0xCBA9,0xF1AF, 0, 0, - 0, 0, 0, 0, 0, 0,0xCACD, 0, -0xECA9, 0,0xF2EB, 0,0xFDEF, 0,0xF9F3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE6C1, 0, 0,0xECD8, 0, 0, 0,0xEDAC, - 0,0xEACE, 0,0xE8DF, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xDECF, 0, 0, 0, 0, 0, 0, -0xD2A6, 0, 0,0xE7F4,0xD1D6, 0, 0,0xE6C2, -0xE3E3, 0, 0, 0, 0,0xE4B0, 0, 0, - 0,0xD8B4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF6A5, 0, - 0, 0, 0, 0,0xF3DE, 0, 0, 0, - 0,0xD7A5, 0, 0, 0, 0,0xF7E8, 0, - 0,0xE8C6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xFBE6, 0, 0, 0, 0, 0, - 0, 0,0xDDE6, 0, 0, 0,0xDCFE, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xD8DA, 0, 0, 0, 0, 0, - 0, 0,0xDAAC,0xEAB0, 0, 0, 0, 0, - 0, 0, 0, 0,0xE3B8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xCAAA,0xE1F9, 0,0xEAB1, 0, 0, 0, - 0,0xF2EC, 0, 0,0xFAEE, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xEED5, 0, 0, 0, 0,0xF9F4, 0, - 0,0xD2EC, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xFBFB, 0, 0, - 0,0xFDF0, 0,0xE0BD,0xCEE3, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF8C6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xDEAE, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xDFC5, 0, 0,0xE5BE, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xEDAD,0xFAEA, 0, 0,0xCDEE,0xEDA6, 0,0xEDAE, -0xF0ED, 0,0xDDA1, 0,0xEDAF,0xFCF8, 0,0xD8EB, - 0, 0, 0,0xCCF9,0xCDB5, 0, 0, 0, - 0,0xFAA9, 0,0xE1DD, 0, 0, 0, 0, -0xE2D5,0xEDCF, 0, 0, 0,0xDDA2, 0, 0, -0xF9CA, 0,0xEAE8, 0,0xE5ED, 0, 0, 0, - 0, 0, 0, 0, 0,0xD3EB, 0,0xE9D4, -0xE1FA,0xE4CC, 0,0xE1E4,0xE8C7, 0, 0,0xCEDB, - 0, 0, 0,0xDCD5, 0,0xF7B5,0xFCF3,0xF0F3, -0xCEAF,0xF1B5,0xEFD2,0xE8C8,0xEBF1, 0, 0, 0, - 0, 0,0xCBD4,0xE0BE,0xE3F8,0xEAE9,0xFCB2, 0, - 0, 0, 0, 0,0xE0F4, 0,0xCFE0, 0, -0xEEA5, 0, 0,0xFAAA,0xE6C3,0xE1B2,0xCAAB, 0, -0xE3E4,0xE9BB, 0, 0, 0, 0, 0,0xE2D6, -0xF3F2, 0,0xEED6,0xEAB2,0xD0F6,0xECD9,0xDACB,0xCFA8, - 0, 0, 0, 0,0xDDA3, 0, 0, 0, -0xD8DB, 0,0xF9CE,0xE9D5,0xE3D1, 0, 0,0xD2BC, - 0, 0, 0, 0, 0, 0,0xD8AC,0xF3CC, - 0,0xCDFB,0xF6D6, 0,0xE7F5,0xE8EF,0xE3F9,0xD2BB, -0xF3F3,0xE3FB, 0,0xDED0,0xCEB0, 0,0xD6F7,0xF1D9, - 0, 0, 0, 0, 0,0xF5C1,0xDCC4, 0, -0xF5BB, 0,0xDED1, 0, 0, 0, 0, 0, - 0,0xDCE6, 0, 0,0xDED2, 0, 0,0xEDE2, -0xEEF6,0xEACF,0xF0EE,0xE3FC, 0,0xD3DF,0xD3F4,0xE1B3, - 0,0xE1B4, 0, 0, 0, 0,0xF4D3, 0, - 0,0xDFC6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xE9D6, 0, 0, 0, -0xDBAB, 0, 0, 0, 0, 0, 0, 0, - 0,0xF6A6, 0, 0, 0, 0, 0, 0, -0xE3B9,0xEBC5,0xF4A9,0xCDB6,0xD2F9, 0,0xDAAD,0xD2E3, -0xCFD1, 0, 0, 0, 0,0xCBDC,0xCCFA, 0, -0xCFDD, 0, 0,0xE8A9, 0,0xE3BB,0xE3BA, 0, - 0,0xE0DA, 0, 0, 0,0xEEF7, 0, 0, - 0, 0, 0,0xDCB3, 0, 0, 0, 0, -0xD3F5, 0,0xD7A6, 0,0xF6B5,0xD7DB, 0, 0, - 0, 0, 0, 0,0xE1D5, 0, 0,0xD4EA, - 0,0xDFA3, 0, 0, 0, 0, 0, 0, - 0,0xFDDF, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD0F7,0xEDD4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xCBAA, 0, 0, 0, 0, 0, 0, - 0,0xE4DB, 0,0xE1FB,0xCBA2, 0, 0, 0, - 0,0xD3E0, 0,0xE4BF, 0,0xFBC0, 0,0xDABE, -0xE4CD, 0,0xD6B9, 0, 0, 0,0xEFC0, 0, -0xE1FC, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF6B9, 0, 0, 0, 0, 0, 0, -0xDFC7, 0, 0, 0, 0, 0, 0, 0, -0xE4B1, 0, 0, 0, 0, 0, 0,0xDCE7, -0xDCE8, 0, 0, 0,0xFAD6, 0,0xD3F6, 0, - 0, 0, 0,0xF1DA, 0,0xFAF2, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE2FD, - 0, 0, 0, 0, 0,0xD5CF,0xD0F8, 0, - 0,0xCDDF, 0, 0,0xF5CB, 0,0xE4F0,0xCBAB, - 0,0xD7C4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE2FE, - 0,0xDDDA, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xDAAE,0xCAEE, 0, 0, 0, -0xD5B9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xE3A1, 0, 0,0xE8E3, 0, 0,0xF3AB, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xCFA9, - 0, 0, 0,0xD3F7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xD4F1, 0, 0, -0xCEE4, 0,0xE8F2, 0, 0, 0, 0, 0, - 0, 0,0xE5F5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE7AE, 0,0xD6BA, 0,0xDFEC,0xE4C0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE8E4, 0, 0, - 0, 0,0xD8B5, 0, 0, 0,0xE4DC, 0, - 0, 0, 0, 0, 0,0xF4B9,0xF1B6, 0, - 0,0xE2DE,0xE1B5, 0, 0,0xCDEF,0xF1A7,0xCEE5, -0xCBDD, 0, 0,0xD9E3, 0, 0,0xF3AC, 0, - 0,0xD0F9,0xECAB,0xDED3,0xF7E9, 0, 0,0xF9F5, - 0, 0, 0, 0, 0,0xE1DE,0xCBEE, 0, - 0, 0,0xE3BC,0xF8D6, 0, 0,0xDBEE, 0, - 0, 0, 0, 0,0xFDF1, 0, 0, 0, - 0,0xF7B6, 0, 0, 0, 0,0xF4DE, 0, - 0,0xF2ED, 0,0xDBD9, 0,0xF0A8, 0, 0, - 0, 0, 0, 0, 0,0xE1FD, 0, 0, - 0, 0, 0,0xDED4, 0,0xE0AC, 0, 0, - 0, 0, 0,0xEDE3, 0, 0,0xD3E1, 0, -0xDFC8, 0, 0, 0, 0,0xD9B6, 0,0xFDAC, -0xEFD3, 0, 0, 0,0xE4C1,0xF8EB, 0,0xDBAC, - 0, 0, 0, 0,0xFCC6, 0, 0, 0, - 0, 0, 0, 0, 0,0xD8AD, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xF6BA, - 0,0xDBDF,0xD3D3,0xF8C7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xCACE,0xF8C1,0xD2B4, 0, 0,0xDCB4, -0xFAB9,0xCACF, 0,0xFCB3,0xEAEA,0xEAEB,0xD0FA, 0, - 0, 0, 0, 0,0xEDE4, 0, 0,0xDDE7, - 0, 0,0xDFC9, 0, 0, 0, 0,0xDFED, - 0, 0, 0, 0, 0,0xEEBC, 0,0xEFC1, - 0, 0,0xCCD2, 0,0xDDA4, 0, 0, 0, -0xDFCA, 0, 0, 0, 0, 0,0xD3F8,0xF1A8, - 0, 0, 0,0xCDB7, 0,0xEFD4, 0, 0, - 0, 0, 0, 0, 0,0xE4DD,0xDFEE,0xCBAC, -0xE9BC, 0, 0, 0, 0, 0,0xEAEC, 0, - 0, 0,0xDFCB, 0, 0, 0, 0, 0, -0xF9BF,0xD6AF,0xD5C6, 0, 0, 0, 0, 0, -0xCFAA, 0, 0,0xCEA9, 0, 0,0xD6F8, 0, - 0, 0,0xF1B7,0xEEF8, 0, 0, 0,0xD9D9, -0xF3DF, 0,0xF8C8,0xCEC6, 0, 0, 0, 0, - 0, 0, 0, 0,0xD5E6, 0, 0, 0, - 0, 0, 0,0xF4E6, 0, 0,0xE6C5,0xEFD5, - 0, 0,0xCBEF,0xFCDF, 0, 0, 0, 0, - 0,0xDCA7, 0, 0,0xD6E7, 0, 0, 0, - 0, 0,0xF8C9, 0, 0, 0, 0,0xE3D2, - 0,0xE3BD, 0,0xCFE1,0xF0C0,0xECDA, 0,0xDDD7, -0xFBF0, 0, 0,0xECAC, 0, 0, 0,0xF0A9, - 0, 0, 0, 0, 0, 0,0xFAD7,0xFBC1, - 0,0xD2C0, 0, 0, 0, 0, 0, 0, - 0,0xE5B0, 0, 0, 0,0xEDE5, 0, 0, - 0, 0,0xCBAD, 0,0xF9B0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF7A5, 0,0xCBAE, 0,0xDAAF, 0,0xD8B6, 0, - 0, 0, 0, 0, 0, 0,0xD3A7,0xFBB2, - 0,0xFDC4, 0,0xECAD, 0, 0, 0, 0, - 0, 0,0xFBA1, 0, 0, 0,0xE5E9,0xE9EE, - 0,0xF3F4,0xF8F3,0xF0C1,0xDEAF,0xF8B0, 0, 0, -0xF3E0,0xE7AF, 0, 0, 0, 0, 0,0xDBAD, - 0,0xE6B5, 0, 0,0xF9A8, 0, 0,0xDDD8, -0xE8D9,0xEFD6, 0, 0, 0,0xD3E2, 0,0xE2DF, - 0, 0,0xFCE0,0xD7C8,0xFDAD, 0, 0, 0, -0xDFEF,0xCCD3,0xD3F9, 0, 0, 0, 0,0xD4F0, -0xDBC7,0xDED5, 0, 0, 0, 0,0xF0F4, 0, -0xD5D0,0xE5D9, 0, 0, 0, 0, 0, 0, -0xFCC7,0xDCD6,0xE2E0, 0, 0, 0,0xDAB0, 0, - 0, 0, 0, 0, 0,0xF3A3, 0,0xD3EC, - 0,0xF4CB, 0, 0, 0,0xFDC5, 0, 0, - 0, 0, 0,0xE3FD, 0,0xF9B1, 0, 0, - 0, 0, 0, 0,0xD0FB,0xECDB, 0, 0, - 0, 0, 0, 0, 0, 0,0xF5BC,0xF2A4, -0xD8CE,0xD8CF, 0, 0, 0, 0, 0, 0, -0xF5F7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xF6E1, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xD2B7, 0, 0, - 0, 0, 0, 0, 0,0xFBEC, 0,0xDDC8, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE4E8, - 0, 0,0xD2C1, 0, 0, 0,0xF8D7, 0, - 0, 0, 0, 0,0xD6BB,0xDED6, 0, 0, -0xF7BD,0xECAE, 0, 0, 0,0xD0E1, 0,0xE0F5, -0xEAB3, 0,0xCED6, 0, 0, 0, 0,0xCCA5, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xECF6,0xE2E1,0xE3BE, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xFCC8, 0, 0, -0xCDF0, 0,0xF9F6, 0, 0,0xDFF0, 0, 0, - 0,0xE5BF, 0, 0, 0,0xCEBF, 0, 0, - 0, 0,0xFCE1,0xEDB0,0xFDD1,0xF6BB, 0, 0, -0xF9CF,0xEBDA,0xCAC1, 0,0xD2B8,0xCDF1, 0,0xE3D3, -0xFDE6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE6ED, 0, 0, - 0,0xE3FA, 0, 0,0xF0AA,0xF9D0, 0, 0, - 0, 0, 0, 0,0xFCE2, 0,0xF8A7, 0, - 0, 0,0xE1E5,0xEEF9, 0, 0, 0,0xE7F6, -0xEAED, 0, 0,0xFCB4,0xF5C2, 0, 0,0xD7DC, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF0F5, 0,0xDDE8,0xD3ED,0xF5FC, 0,0xDABF, 0, -0xCCFB, 0, 0, 0,0xD3FA,0xF4A4, 0, 0, - 0, 0, 0, 0, 0,0xEFD7, 0,0xD4C3, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xFBE3, 0, 0, 0, 0, 0, 0, - 0, 0,0xFBED, 0,0xE0AD, 0, 0,0xEAEE, -0xFBB3,0xE4C2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF6E7,0xD2DD, 0,0xDFCC, 0, 0,0xFCC9, 0, - 0,0xE5A9,0xE0F6,0xF6B3, 0, 0, 0, 0, - 0,0xE1FE, 0, 0, 0, 0,0xCBF0, 0, -0xEAEF,0xEAF0, 0, 0, 0,0xDAC0,0xF8B4,0xEBF2, - 0, 0, 0, 0, 0,0xE4C3, 0, 0, - 0, 0,0xE9D7,0xE4F1, 0, 0, 0,0xCAEF, - 0, 0, 0, 0, 0, 0, 0,0xCED7, - 0, 0, 0, 0, 0, 0, 0, 0, -0xFCCA, 0, 0, 0,0xF3E1, 0, 0,0xCBC4, - 0, 0, 0, 0,0xE3E5, 0,0xCBC5,0xEAB4, - 0, 0,0xE9BD, 0,0xD7C9, 0, 0,0xEBDB, -0xEDB1, 0,0xCCC3,0xF7BE,0xFCCB, 0, 0, 0, - 0, 0, 0,0xF8F4, 0,0xD9B7, 0, 0, -0xF3D3,0xF3D4, 0, 0, 0,0xF7E4, 0,0xF7D1, - 0, 0,0xD8B7,0xCEB1,0xCAC2, 0, 0,0xFBB4, -0xCBC6, 0, 0,0xF0F6, 0, 0,0xD5E7, 0, -0xEAD0, 0, 0, 0, 0, 0,0xCCD4,0xCBAF, - 0, 0, 0, 0, 0,0xF4AA,0xE9AF, 0, - 0,0xF5C3,0xE9D8, 0, 0, 0, 0, 0, - 0, 0,0xDDE9, 0, 0, 0,0xF1F3, 0, -0xD5FB,0xDEBB, 0, 0,0xF4FB, 0, 0, 0, -0xFDF3,0xFDF2,0xF7A6, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xDDC9, 0, 0,0xD4D3, - 0,0xCCA8, 0,0xDAC1,0xCCD5, 0,0xD9E4, 0, - 0, 0,0xFACA, 0, 0, 0,0xE5E3, 0, - 0, 0,0xD3BC, 0, 0, 0,0xCAF0, 0, - 0, 0, 0,0xD0C4, 0, 0, 0,0xCAD0, -0xFAAB,0xEBEB,0xE7F8,0xD9E5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xD1D7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF3A4, 0, 0, 0,0xD4FB,0xFCE3, -0xFAD8, 0,0xF3D5, 0,0xCFAB, 0, 0,0xEBF3, -0xD5FC, 0, 0, 0, 0, 0, 0,0xD3D4, -0xCDFC, 0,0xD9E6, 0,0xE2F9,0xE2A1,0xEBD4, 0, -0xE0F7,0xE4B2,0xCCFC, 0, 0, 0,0xFBE4, 0, - 0, 0,0xF4AB, 0, 0, 0, 0,0xD0BD, - 0,0xCAF1, 0, 0, 0, 0, 0, 0, - 0, 0,0xEFB8, 0, 0, 0,0xD7C0, 0, -0xEEFA,0xFDF4, 0, 0,0xD3E3, 0,0xFBC2, 0, - 0, 0, 0, 0, 0, 0,0xD5E8,0xDBAE, -0xE1B6,0xF8B7, 0, 0, 0, 0, 0,0xE0BF, -0xFBC3,0xDDEA, 0,0xE2A2, 0,0xEEA6, 0, 0, - 0, 0, 0,0xF6E8, 0, 0, 0, 0, -0xF6F5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xDDCA, 0, - 0,0xD0E2, 0, 0, 0, 0,0xDDA6, 0, - 0,0xDDEB, 0, 0,0xE4F9, 0, 0,0xE3AF, -0xD0FC, 0, 0, 0,0xF4FC, 0, 0, 0, - 0,0xCCBC,0xF7EA, 0, 0, 0, 0, 0, - 0,0xE5E4,0xDFF1, 0, 0,0xF7E1, 0,0xF9F7, -0xEFB9, 0, 0,0xF8D8, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xF9A9, 0, 0, 0, 0, - 0,0xF8D9, 0, 0, 0,0xEEBD, 0, 0, - 0,0xD8C6, 0, 0,0xE4E3,0xF5CE, 0, 0, - 0, 0,0xDDD9, 0, 0, 0, 0,0xD9E7, -0xD2B9,0xD5C3, 0, 0,0xDAE5,0xDAD0, 0,0xD1D9, -0xCED8, 0,0xCBDE,0xF4AC,0xDAFB, 0,0xF6E9,0xE8F3, -0xCFAC,0xF0F0, 0,0xF4FD,0xDBC8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xCEC0,0xE3D4,0xD1CF,0xF1F5, - 0,0xCDF2, 0,0xCFEB, 0, 0, 0,0xCDB8, - 0, 0, 0, 0, 0, 0,0xE3A6,0xD1DA, - 0,0xF2A5, 0, 0, 0, 0, 0,0xF2A6, - 0,0xE4CE, 0, 0, 0, 0, 0, 0, - 0,0xD3FB, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xF1A9, 0, 0, 0,0xF2C9, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xEFD8,0xE6C9, 0,0xD8B8,0xFAF3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF3B5, 0, 0,0xF8A4, 0, 0,0xD1F3, -0xE6C8, 0, 0, 0, 0,0xF8DA, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xDCE9, -0xDED7, 0, 0, 0, 0, 0,0xCBDF, 0, - 0, 0,0xCFEC, 0, 0, 0, 0,0xF4DF, - 0, 0,0xD1F4,0xD2BA, 0, 0, 0,0xDFF2, - 0, 0, 0,0xE1B7, 0, 0, 0, 0, -0xE2A3,0xD3FC, 0, 0,0xEDE6, 0, 0, 0, - 0, 0,0xDBC9, 0, 0, 0,0xE4FA, 0, -0xCFDE, 0, 0,0xCED0, 0, 0, 0, 0, -0xD5D3,0xF3F5,0xF7AE, 0, 0,0xEFC8, 0,0xCDF3, -0xF5CF,0xE5F3,0xF0C2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCAD1, 0, 0, 0,0xEAF1, 0,0xD0A6, 0, - 0, 0, 0, 0, 0, 0, 0,0xD9DA, -0xF0AB, 0, 0, 0, 0, 0,0xEBE7, 0, - 0, 0,0xE5C0,0xFCB5, 0, 0, 0, 0, - 0,0xE4C4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xCCA9,0xFDC6, 0, - 0, 0, 0, 0,0xEAB5, 0,0xE5AA,0xDFBA, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE1DF, 0,0xDAD1, - 0, 0, 0, 0,0xE1B8, 0,0xE8F4,0xD3FD, - 0, 0, 0, 0,0xE2A4, 0, 0, 0, - 0, 0,0xF2CA, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xDAE6,0xF7B3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xFDCD, 0, 0, 0,0xF3B6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xEED7, 0, 0, 0, 0, 0, 0, 0, -0xF5C4, 0, 0, 0, 0, 0, 0, 0, - 0,0xD8A4, 0, 0, 0, 0, 0,0xF2A7, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD9B8,0xD9B9,0xEFC9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD6CE, 0, 0, 0, 0, 0, 0, 0, - 0,0xF7CB,0xDFAE,0xE8F5, 0, 0, 0, 0, - 0, 0,0xD2B5, 0, 0, 0,0xD3D5, 0, - 0, 0, 0, 0,0xF4CC,0xDAFC, 0, 0, - 0, 0, 0,0xD9E8, 0,0xF7EB,0xF5C9, 0, -0xF3BC, 0,0xDAD2, 0, 0, 0, 0, 0, - 0, 0, 0,0xD3B5, 0, 0, 0, 0, - 0,0xE8B6, 0, 0,0xD6CF,0xF4BA, 0,0xF7C9, - 0, 0,0xCCAA, 0, 0,0xF0C3,0xCCD6, 0, - 0, 0,0xD0D3, 0,0xD3BD, 0, 0, 0, -0xDBFB, 0,0xCBE0, 0, 0, 0, 0, 0, - 0,0xD3E4,0xF6F7, 0, 0,0xD5BA,0xF3CD,0xCBE1, - 0, 0, 0, 0,0xEBF4, 0, 0, 0, - 0, 0,0xF4AD, 0,0xFCAA, 0, 0, 0, - 0, 0,0xF7EC, 0, 0, 0,0xE8F6, 0, -0xDAE7, 0, 0, 0,0xF7CC, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE5C1, 0, 0, 0, 0,0xE0EE, 0, 0, - 0, 0, 0,0xD5FD, 0, 0, 0, 0, - 0, 0,0xCEE6,0xFCAB,0xD5BB, 0, 0,0xF2A8, - 0, 0, 0, 0, 0, 0,0xE2A5,0xCDB9, -0xEAF2,0xCBC7, 0,0xCDF4, 0, 0,0xDBAF,0xEFD9, - 0, 0, 0, 0, 0,0xCDBA, 0, 0, -0xFCF9, 0, 0, 0, 0,0xDFF3,0xCEE7,0xDAC2, - 0,0xCFAD, 0, 0, 0, 0,0xE7F9,0xF8A8, - 0, 0, 0, 0, 0, 0,0xF3E2, 0, - 0, 0,0xCAF2,0xDFA4, 0, 0,0xD4C4, 0, - 0, 0, 0, 0,0xCCD7,0xE5C2, 0, 0, - 0, 0,0xCDBB, 0,0xEFDA,0xEED8, 0,0xDDA7, -0xE2A6, 0, 0, 0, 0, 0,0xE0C0, 0, - 0, 0,0xD6B0,0xF8CA, 0,0xFCFA, 0,0xD9FE, - 0, 0, 0, 0,0xDEB0, 0, 0, 0, -0xDDEC,0xDAE8, 0, 0, 0, 0, 0,0xD4E0, - 0,0xD6F9, 0,0xCDD7,0xDED8, 0, 0,0xF2F8, - 0,0xE4D6, 0, 0,0xD0C5,0xF4AE, 0,0xDDA8, - 0, 0, 0,0xEDC5,0xF3D6, 0, 0,0xDED9, -0xE3E6, 0, 0, 0, 0, 0, 0,0xD3A8, - 0,0xDBB0, 0, 0,0xE5DA,0xE3BF, 0, 0, - 0,0xDBB1, 0, 0, 0,0xD5E9, 0, 0, - 0, 0, 0,0xE0C1,0xEFDB, 0, 0,0xF0E9, - 0, 0,0xD7B2, 0, 0, 0, 0,0xD0FD, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD9E9, 0, 0,0xD0FE, 0,0xECED,0xD3A9, 0, -0xF2A9,0xF0C4, 0, 0,0xE2E2,0xE9EF, 0, 0, - 0,0xF9D1, 0, 0,0xE9D9, 0, 0, 0, - 0, 0,0xE8DA,0xDAC3,0xDAC4,0xD4C5, 0,0xE7FA, - 0, 0, 0, 0, 0, 0,0xCDE0,0xE3B0, - 0,0xDBB2,0xFBC4, 0,0xF3E3, 0,0xD9A5,0xFBE7, -0xDDCB,0xD0D4, 0,0xE6B6,0xE0AE,0xFDDA, 0, 0, - 0, 0, 0, 0, 0, 0,0xDCB5,0xE0F8, -0xE7B1, 0, 0, 0, 0,0xF5F0, 0,0xD8DC, -0xEDC6, 0, 0, 0, 0,0xE1B9, 0,0xE3C0, -0xF9C0,0xE9F0, 0, 0,0xD9DB, 0,0xF3E4, 0, - 0, 0,0xDCB6,0xE4E9, 0, 0, 0, 0, - 0,0xF0C5,0xE3C1,0xFCCC,0xFCCD, 0, 0, 0, - 0,0xF2CB, 0,0xF2CC, 0, 0, 0,0xE4CF, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF1DB, 0,0xFAD9, 0,0xF1B8,0xFDF5,0xE0F9, - 0, 0, 0, 0,0xE7FB,0xFCB7,0xFCE4,0xFBC5, -0xE3E7,0xD8B9, 0,0xF6F8, 0, 0,0xDCC5,0xCCD8, - 0, 0, 0,0xE0AF,0xF4E7, 0,0xEFDC,0xCFFC, -0xEFDD, 0,0xF2AA, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xFDBE, 0, 0,0xCAAC, -0xFDBB,0xFDC7, 0, 0, 0, 0,0xE7B2, 0, -0xEAD1,0xDFF4, 0, 0, 0, 0,0xD1EC,0xE4DE, -0xE5C3, 0, 0, 0, 0,0xD9A6, 0, 0, -0xCDBC, 0,0xF3E5, 0, 0, 0, 0, 0, - 0, 0, 0,0xEDD5, 0, 0,0xD9BA, 0, - 0, 0,0xEDE7,0xFBB5,0xF8EC, 0, 0, 0, - 0,0xE0E7, 0,0xCCD9, 0, 0,0xD4C6, 0, - 0, 0, 0, 0,0xE7A5, 0,0xD5F5,0xD3BE, - 0,0xFCFB, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE4F2, 0, - 0,0xDFF5, 0, 0,0xE8F8,0xF8ED, 0, 0, -0xCEC7, 0, 0, 0, 0, 0,0xFDF6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE8D8, 0,0xCDD8,0xE7D6,0xCCDA, 0, 0,0xCAE3, -0xDFF6,0xF0C7,0xF0C6, 0,0xD8BA, 0,0xF1F4,0xF4F0, -0xF5CC, 0, 0,0xFCE5, 0, 0, 0, 0, -0xEAC5,0xEAF3, 0,0xDDDB, 0,0xDCD7, 0, 0, - 0, 0, 0, 0,0xDEFD,0xF2F9, 0,0xD5C7, - 0, 0, 0,0xD8D0, 0,0xF0C8,0xD1A1,0xD1A2, - 0, 0, 0, 0, 0, 0,0xD9D4,0xD6E8, -0xD9CA, 0,0xDAB1,0xD8C7,0xDCE2,0xF3CE,0xF5F4, 0, - 0,0xF1B9, 0, 0,0xDAD3, 0,0xF6EA, 0, - 0, 0,0xCFF5, 0, 0,0xFDAE, 0, 0, - 0, 0, 0, 0, 0, 0,0xCAD2, 0, - 0,0xDFB4, 0, 0, 0, 0,0xD7DD,0xFABA, -0xEEA7,0xF5BD, 0,0xF8F5, 0, 0,0xEDE8, 0, - 0, 0, 0, 0,0xD4E1, 0,0xD1A3,0xE1D6, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF9F8, 0,0xDBCA, -0xCBF9,0xD4D4, 0,0xD9DC, 0,0xEEBE, 0,0xF7ED, - 0, 0, 0,0xD2EE, 0, 0,0xE1E6,0xF7F9, - 0, 0, 0, 0, 0, 0, 0,0xDDED, - 0,0xE8DB, 0,0xDBB3, 0, 0, 0,0xD1F7, -0xE0B0, 0, 0,0xD4E2, 0,0xF6D7, 0,0xD7F9, - 0, 0,0xD8DD, 0,0xCDFD,0xF2AB, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xCDBD, -0xF8C2, 0, 0,0xF2AC, 0, 0,0xCAAD,0xCAAE, -0xCFAE, 0, 0, 0, 0, 0,0xE3C2, 0, - 0, 0, 0, 0,0xDCB7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xDBDA, -0xD9BB,0xCAF3,0xF6D3,0xE6F8,0xEAF5, 0, 0, 0, - 0, 0,0xEAF6, 0, 0,0xF6F9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xCFAF, 0, 0,0xCAD3, 0, 0,0xCAAF, -0xD2B0,0xF1BA, 0,0xD7B3,0xE3C3,0xF3FD,0xDEDA, 0, - 0, 0, 0,0xDEDB, 0, 0,0xEFDE, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xE2E3,0xEEFB, 0, 0,0xDFF7,0xD7CA, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xCEE8,0xDBDB, 0, 0, 0, 0, 0, - 0, 0,0xF1BB, 0, 0, 0, 0,0xE9F1, - 0, 0, 0, 0, 0, 0, 0, 0, -0xFAB7,0xD0C6, 0, 0,0xCCAB,0xEEA8, 0, 0, -0xCBFA,0xF9F9,0xCCFD,0xD3FE, 0, 0, 0, 0, -0xE4D0, 0, 0, 0, 0, 0,0xF2EE, 0, -0xD4D5,0xDFCD, 0,0xFCB8,0xD1D0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF2CD, 0, 0, - 0, 0, 0, 0, 0, 0,0xF7D2, 0, - 0, 0, 0, 0, 0, 0, 0,0xCAD4, - 0,0xD5D9, 0, 0, 0,0xD8DE, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xCDD9, - 0, 0, 0,0xEEA9,0xF6BC, 0, 0,0xCCDB, - 0, 0, 0, 0, 0,0xF0C9, 0,0xFCFC, - 0,0xE8C9,0xF4FE, 0, 0, 0, 0,0xE7FC, -0xD7DE, 0, 0, 0, 0,0xDEDC, 0,0xF0AC, -0xCCFE,0xCDE1, 0,0xE1BA, 0,0xDBEF,0xDAB2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xD1A5,0xDCB8, 0, 0, - 0,0xD8F6, 0,0xD1A4, 0,0xCDE2, 0, 0, - 0, 0,0xDCEA, 0, 0,0xF0F7, 0,0xF0CA, -0xD0BE, 0,0xDDDC, 0, 0, 0, 0,0xD4D6, -0xD3D6, 0, 0, 0, 0, 0, 0,0xEDD0, -0xCDA1, 0, 0, 0, 0, 0,0xDFB5, 0, - 0, 0,0xDFF8, 0, 0, 0, 0, 0, - 0,0xD4A1,0xCEB2, 0, 0, 0, 0, 0, -0xE8CA, 0, 0, 0, 0,0xEBF5, 0, 0, - 0, 0, 0, 0, 0,0xE3D5,0xF5D0, 0, - 0, 0,0xF5A1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xD9A7, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE5AB, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE6CB, 0,0xF5F1, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xE5C5, 0, 0, 0, 0, 0, - 0, 0, 0,0xF9A3,0xE0DB,0xF6EB, 0,0xCBF1, - 0,0xD9EA,0xF5A2, 0, 0, 0,0xD7D1, 0, -0xD1F8,0xEAF8,0xEAF9,0xDAB3, 0, 0, 0, 0, -0xEFDF, 0, 0,0xF1EF, 0,0xE5F6,0xEEBF,0xE2E4, - 0, 0, 0, 0, 0,0xD0BF, 0,0xFAAC, -0xF5D1,0xE7B3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE9BE, 0, 0, - 0, 0, 0,0xF2CE,0xDBB4, 0, 0, 0, - 0, 0, 0, 0, 0,0xFCCE, 0,0xDDEE, - 0, 0, 0, 0, 0, 0,0xE7B4, 0, - 0, 0, 0, 0,0xD7B4, 0, 0, 0, - 0, 0, 0,0xF7B4, 0, 0, 0, 0, - 0,0xCDBE, 0,0xDAE9, 0, 0, 0, 0, - 0, 0, 0,0xCFB0,0xF7D9,0xF3E6, 0, 0, -0xCED9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCEAA, 0,0xCBC8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xD0A7, 0,0xF0CB, 0,0xD0C7, - 0, 0,0xE4C5, 0, 0, 0, 0, 0, - 0, 0,0xDBE0, 0, 0, 0, 0, 0, - 0,0xD5DA, 0,0xD7A7, 0, 0, 0,0xEEC0, - 0,0xF8F6, 0, 0, 0, 0,0xF5D2,0xEDE9, - 0,0xD9BC, 0,0xE5C6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF5A3, 0, 0, -0xDAD4,0xE2A7,0xFBFC, 0, 0,0xF1DC, 0, 0, - 0, 0, 0, 0,0xCAF4, 0, 0, 0, -0xE8FA, 0, 0,0xCEE9, 0, 0, 0, 0, - 0, 0,0xE9F8,0xE2E5, 0, 0, 0, 0, -0xD0B9,0xD4F2, 0, 0, 0, 0, 0,0xD1A6, - 0,0xDFCE, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xFCF4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD3AA, 0, 0, 0,0xCCAC, 0, 0, 0, - 0,0xEFE0, 0, 0, 0,0xE5E5,0xD0D5, 0, - 0, 0, 0, 0, 0, 0, 0,0xDBFC, - 0, 0, 0, 0,0xFCE6, 0, 0, 0, - 0, 0,0xCBFE,0xEDEA, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xDEB1, 0, 0, 0, 0, - 0, 0, 0,0xF9E3, 0, 0, 0, 0, - 0, 0,0xD4A2,0xCFF6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xD6D0, 0, 0, 0, 0, - 0, 0,0xD5EA,0xF1EE, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xFACB, 0, - 0, 0, 0,0xE5A1, 0, 0, 0, 0, - 0, 0, 0, 0,0xD5B1, 0, 0, 0, - 0, 0,0xCFED, 0,0xEDEB, 0, 0, 0, - 0, 0,0xD5B2, 0, 0, 0,0xD5BC, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xFDE2,0xF3AD, 0,0xFDDB, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xE9B0, 0, 0, 0, 0, 0, - 0, 0,0xD1A7, 0, 0,0xFDE3,0xCEB3, 0, - 0, 0, 0, 0, 0, 0,0xFDE4,0xFACE, - 0, 0, 0, 0,0xCAB0, 0,0xF7A7, 0, -0xCFB1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE6A2, - 0,0xFCB6,0xF2AD,0xEFE1,0xF3AE,0xDCC6,0xD9EB, 0, - 0, 0,0xE8E0, 0, 0, 0, 0, 0, - 0, 0,0xE1A8, 0, 0, 0, 0,0xD5F6, -0xCFFD, 0, 0,0xDEDD, 0, 0, 0,0xD9D1, - 0, 0, 0,0xE4EA,0xF2CF, 0,0xF7BF, 0, - 0,0xE2E6,0xE2A8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE3D6, 0, -0xEDD1, 0, 0, 0, 0, 0,0xE9F9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xD6B1,0xDEB2, - 0, 0,0xE0E8, 0, 0,0xD3AB, 0,0xEBDC, - 0, 0,0xDFAF, 0,0xCAC3, 0, 0,0xEEFC, - 0,0xFDC3, 0, 0, 0,0xEBF6,0xCFB2, 0, - 0, 0, 0,0xD9EC, 0,0xD9BD, 0,0xD8DF, - 0, 0,0xD4B8,0xEBBE,0xDDEF, 0,0xDDF0,0xDDF1, -0xDDF2, 0, 0,0xD9BE, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xFBC6,0xCFB3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xEEFD, 0, 0, 0, 0, 0, 0,0xE4AB, - 0,0xDAC5, 0,0xD8EC, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xD1A8, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xE2A9, 0, 0,0xDEBC, -0xE7B5, 0, 0, 0, 0, 0,0xDBF0, 0, -0xEFE2,0xF1F0,0xCFB4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xDBF1, 0, -0xE0B1, 0, 0, 0, 0,0xDFA5, 0,0xF9D2, - 0, 0,0xE7FD, 0, 0,0xE6A3,0xFBF1,0xCBB0, -0xF2AE, 0, 0, 0, 0, 0, 0, 0, -0xCDE7, 0,0xE8DC, 0, 0,0xE7D7, 0, 0, -0xF7C0, 0,0xD0E3, 0, 0, 0,0xDAA1, 0, - 0, 0,0xCCBD, 0, 0,0xD1A9,0xDDCC, 0, - 0,0xE3FE,0xD1AA,0xE8AA, 0,0xEAB6,0xF9FA,0xE6CC, -0xF6D8, 0, 0, 0,0xD4C7, 0, 0, 0, -0xD9CB, 0,0xD9D2,0xD3CB,0xD8F7,0xDAA9,0xF5F8, 0, - 0,0xDEDE,0xF2AF,0xF8A9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xD8C8, 0, 0,0xEEC1, 0, - 0, 0, 0,0xF9C1, 0, 0, 0, 0, -0xDDF3,0xEAFA, 0,0xF6BD,0xE1BB,0xCDBF,0xF4D4,0xE6CD, - 0,0xFCCF,0xFBA2, 0,0xE0DC, 0, 0, 0, - 0,0xF4BB,0xDAD5, 0,0xF9B2, 0, 0, 0, - 0, 0, 0,0xFBF2, 0,0xDBF6, 0,0xDEDF, - 0, 0, 0,0xDBF2, 0, 0, 0, 0, - 0,0xF8DC,0xF7EE,0xEBE8, 0,0xD2FA, 0, 0, -0xF1BC, 0, 0,0xFADA, 0, 0,0xDAEA,0xDAC6, -0xF7C1, 0, 0,0xE7B6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE5C7,0xD6AC, 0, 0, 0, - 0,0xDCC7, 0, 0, 0, 0, 0,0xE1A9, - 0,0xE2AA, 0,0xD5A6, 0, 0,0xD4D7, 0, - 0, 0, 0, 0, 0,0xF2D0, 0,0xEAFB, - 0,0xE0DD,0xFBF3, 0, 0, 0, 0, 0, - 0, 0,0xF1BD, 0, 0,0xE2E7,0xFDD7, 0, -0xCEC8,0xEAB7, 0,0xFCC0, 0,0xFDE7,0xF7EF, 0, - 0,0xD7B5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xEFBA,0xF1DD, 0,0xDEB3, 0, 0, 0, - 0, 0, 0,0xE8CB, 0, 0,0xF8DD, 0, - 0,0xFBC7,0xD5C8, 0,0xD7DF, 0,0xDDA9, 0, - 0, 0, 0, 0,0xE9B1, 0, 0,0xFAAD, -0xF6D9,0xFAF4, 0, 0, 0, 0, 0,0xF8AA, - 0, 0, 0, 0, 0,0xE6EE, 0,0xCCDC, -0xE1BC,0xE0EF, 0, 0,0xE9BF,0xFCFD,0xE6CE, 0, - 0,0xE1D7, 0,0xE6CF, 0,0xF4F1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE4F3, - 0, 0,0xE4FB, 0, 0,0xF9E4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xEFE3, 0, 0,0xCFEE,0xF6BE,0xE0B2,0xFCFE,0xD1AB, - 0, 0, 0,0xD7FA, 0, 0, 0,0xFBC8, - 0,0xE2D7, 0, 0, 0, 0, 0, 0, -0xD4A3,0xF0F8,0xD7A8, 0, 0, 0,0xE1E7, 0, - 0,0xD3BF, 0, 0, 0, 0, 0, 0, -0xEFE4, 0,0xD7C5,0xEBE2, 0, 0,0xFCE7, 0, - 0,0xE4A2, 0,0xE2E8, 0,0xE6D0, 0,0xFBE8, -0xF4E8,0xE5F4,0xF4BC,0xF4D5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xDFB6, - 0,0xFCB9,0xEEC2,0xCAF5, 0, 0, 0,0xEFE5, -0xCBE2,0xD4A4, 0,0xDEE0,0xDAFD,0xE4C6,0xE8BE, 0, - 0, 0, 0,0xE0DE,0xF6B4,0xEAD2, 0,0xF9FB, - 0, 0,0xE0C2, 0,0xCAE4, 0,0xE7B7, 0, -0xEAFD, 0,0xD9DD, 0,0xDAB4,0xEEAA,0xFBE9, 0, - 0, 0, 0,0xDBCB,0xDAB5, 0, 0, 0, - 0, 0,0xF1BE, 0, 0,0xD3AC, 0, 0, - 0, 0, 0, 0, 0, 0,0xFBC9, 0, -0xDFCF, 0, 0,0xD3C0,0xE3D7, 0,0xEFE6,0xFCD0, - 0, 0, 0, 0, 0, 0, 0,0xE9C0, - 0, 0, 0,0xF5D3, 0, 0,0xECDC,0xF7B7, - 0, 0,0xEAB8,0xD1F9, 0, 0, 0, 0, - 0, 0,0xDCC8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xEAB9, 0, 0, 0, 0, 0,0xF1DE, 0, - 0, 0, 0, 0,0xD7B6,0xCFB5, 0,0xD9A8, - 0, 0,0xECEE, 0, 0,0xDDAA, 0, 0, - 0, 0,0xCDA2,0xE8AE, 0, 0, 0,0xE1BD, - 0,0xF2D1, 0, 0, 0, 0,0xE9C1, 0, - 0, 0,0xD2FC, 0, 0, 0, 0, 0, - 0, 0,0xDBB5, 0,0xF3E7,0xD8FE, 0, 0, - 0,0xFCD1, 0,0xEDB2,0xF4AF, 0,0xFBA3, 0, - 0,0xFCC1, 0,0xEEAB,0xD4A5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xF4F2, - 0, 0, 0, 0,0xEED9, 0, 0, 0, -0xFBCA, 0, 0, 0, 0, 0,0xCDE3,0xD8BB, - 0,0xE5DB,0xF8F7, 0, 0, 0,0xF6D4, 0, - 0, 0, 0, 0, 0, 0, 0,0xD7A9, - 0,0xCBC9, 0, 0,0xE6D1,0xF0CC, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD8AE, 0,0xF9D3,0xD5FE, 0, 0, 0, 0, - 0, 0, 0,0xD8BC,0xF2B0, 0, 0, 0, - 0,0xE2AB,0xF3E8, 0, 0, 0, 0, 0, -0xEFC2, 0, 0, 0, 0, 0, 0,0xEDEC, - 0,0xE7B8, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xDAFE, 0, 0,0xCCBE, 0, 0,0xF2FC, -0xDAEB, 0,0xE2D8,0xEDD6, 0, 0,0xD6D1,0xE0B3, - 0, 0,0xFCD2, 0,0xEBC8, 0, 0, 0, - 0, 0, 0, 0, 0,0xD3C1,0xF0CD, 0, -0xCFF7, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xEDD2, 0,0xD4D8,0xDCC9,0xD7F1, 0, - 0,0xDFBB, 0, 0,0xF3A5, 0, 0, 0, -0xF4CD, 0, 0, 0, 0,0xF1BF,0xF8B1, 0, -0xE9FA, 0, 0, 0,0xFBCB, 0, 0,0xCAD5, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xF9D4,0xF7CA, 0, 0,0xD6C8, - 0, 0, 0, 0, 0, 0,0xFCE8,0xF3BD, - 0,0xEEFE, 0,0xE7FE, 0, 0, 0, 0, - 0,0xD3C2, 0, 0, 0, 0,0xD3B6, 0, -0xCCAD,0xF6FA,0xD6B2,0xD2D8, 0, 0, 0, 0, - 0, 0,0xE7D8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE3A5, 0, 0, - 0, 0,0xE7B9, 0, 0, 0, 0,0xF0AD, -0xFBCC,0xEBA1, 0, 0,0xD4A6, 0, 0, 0, - 0,0xFBCD, 0,0xD5BD,0xF1DF, 0, 0,0xF6FB, - 0,0xDEB4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xD5EB, 0, - 0,0xE5C8, 0, 0, 0,0xFBA4,0xD4B9, 0, - 0,0xDEE1, 0,0xE4A3, 0, 0, 0,0xD7B7, - 0,0xF8EE, 0, 0, 0,0xDEB5, 0, 0, -0xD6D2, 0,0xF9D5,0xE7BA,0xEBD5,0xD5F7,0xEFE7,0xE1BE, - 0, 0, 0,0xFAAE, 0, 0, 0,0xD6E9, -0xD6EE, 0, 0, 0, 0, 0, 0,0xE7BB, - 0, 0, 0, 0, 0, 0, 0,0xECCB, - 0, 0, 0, 0, 0, 0,0xD5B3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xCEB4, 0, 0, 0, -0xFBA5,0xE1EE, 0, 0, 0, 0, 0, 0, -0xF7A8, 0, 0, 0, 0,0xFBCE, 0, 0, - 0, 0, 0,0xD8BD, 0, 0, 0, 0, - 0, 0, 0,0xFBFD, 0, 0, 0, 0, -0xFCE9, 0, 0, 0, 0, 0, 0, 0, -0xCFB6, 0, 0, 0,0xEDC7,0xEEAC, 0, 0, - 0, 0, 0, 0, 0,0xCCDD, 0, 0, - 0, 0,0xF6A7, 0, 0, 0,0xE6FA, 0, - 0, 0,0xF5A4, 0, 0, 0, 0, 0, -0xFDDC,0xEDB3,0xCEC9, 0, 0, 0, 0, 0, - 0,0xEFE8, 0, 0,0xE1BF, 0, 0, 0, - 0, 0, 0,0xFADB,0xCBE3,0xF7A9, 0,0xFBA6, - 0, 0, 0,0xDCB9, 0, 0, 0,0xF1C0, -0xEDC8,0xEFC3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD6AD, 0, 0,0xFDCE, 0, 0, 0,0xE8A1, - 0, 0, 0, 0, 0, 0, 0, 0, -0xFBF4,0xD5A7, 0, 0, 0,0xF1F6, 0,0xE6D3, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xCCDE, 0, 0, 0, 0, 0, 0, - 0,0xF8B2, 0, 0, 0,0xDCEB, 0, 0, - 0, 0, 0, 0,0xFDB6, 0, 0, 0, - 0,0xE5EA, 0, 0,0xF1E0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xDBCC,0xDDCD, 0, 0, 0,0xD4C8, 0, - 0,0xD9ED, 0, 0, 0, 0,0xF5A5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE6FB, 0, 0, 0, 0, 0,0xE6D4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xFDC8, - 0,0xD6A1,0xFDBF, 0,0xFCD3, 0,0xEFA1, 0, -0xE7BC, 0, 0, 0, 0, 0,0xD1EE, 0, - 0,0xE6D5, 0, 0,0xE9F2, 0,0xDFB0, 0, - 0, 0, 0, 0,0xD8E0,0xFCBA,0xFDAF,0xF0CE, - 0,0xDBE1, 0, 0,0xE5C9, 0,0xEDB4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE0C3, 0, 0, - 0, 0, 0, 0,0xE3D8, 0, 0, 0, - 0,0xE9FB,0xEAA8, 0, 0, 0, 0,0xFDB7, - 0, 0,0xFBA7, 0,0xE9C2, 0, 0, 0, - 0,0xFDF7, 0, 0, 0, 0, 0,0xE2D9, - 0, 0,0xDCEC, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xE8A2, 0, 0, 0, - 0,0xE6F0, 0, 0, 0, 0, 0, 0, - 0,0xFDF8,0xFDF9, 0, 0, 0,0xF6BF, 0, - 0,0xE7A7, 0,0xE6D7, 0, 0, 0, 0, -0xD4F3,0xD4C9, 0, 0, 0, 0,0xD6FA, 0, -0xD7F2, 0,0xE1C0, 0,0xDBE2,0xE6D8, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE7BD, - 0, 0, 0, 0, 0,0xF0CF,0xF3BE,0xE2AC, - 0, 0, 0, 0, 0,0xF5B7,0xE0F0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xFDB8,0xE3E8, 0,0xD4A7,0xE8FC, -0xFAD2, 0, 0, 0, 0, 0,0xF8EF, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD6D3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xD5B4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF0D0, 0,0xF7F0,0xEEB3, 0, 0, -0xEABA, 0,0xEAD3, 0, 0,0xEDC9,0xDDAB, 0, - 0, 0,0xE5AC,0xFDA1, 0,0xDFD0,0xECB3, 0, -0xDFD1, 0, 0, 0, 0, 0,0xEDED,0xF8B8, -0xF7FA, 0, 0, 0,0xF8AB, 0, 0, 0, - 0, 0,0xF4E0, 0, 0, 0, 0, 0, -0xD4BA,0xE4B3, 0,0xE9DA, 0,0xDEB6, 0,0xD9BF, - 0,0xD9C0,0xD6EF, 0, 0, 0, 0,0xD9CC, - 0,0xDAAA, 0, 0, 0, 0, 0, 0, - 0, 0,0xDFE5, 0, 0, 0, 0, 0, - 0,0xF7E5, 0, 0, 0,0xCCB2, 0, 0, -0xDFF9,0xD7E0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xD4BB, 0, 0, 0, 0,0xFDFA, - 0, 0, 0, 0,0xCCB3, 0, 0,0xDBF3, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xDFD2, 0,0xCECA, 0,0xEEDA, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE4E4, 0, -0xFBCF, 0, 0, 0, 0, 0, 0,0xCFB7, - 0,0xEEC3, 0, 0, 0, 0, 0, 0, - 0,0xCEEA, 0, 0, 0, 0, 0, 0, - 0,0xE2AD, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD7E1,0xFAF5, 0, 0,0xD5C9,0xF8AC, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xE7D9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF3E9, 0, - 0, 0, 0,0xD8ED,0xE3C4,0xF0F1, 0, 0, - 0, 0, 0, 0, 0,0xE8E5, 0, 0, - 0,0xE0FA,0xEEC4,0xD9DE, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xEBA2,0xEBA3, - 0, 0, 0, 0, 0, 0,0xFCC2,0xEABB, - 0, 0, 0, 0,0xE8AB,0xDEE2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xEDEF, 0,0xE8A3, 0, 0, 0, 0,0xCFF1, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD4BC, 0,0xFCEA, 0, 0, 0, 0, 0, -0xE7BE, 0,0xFCF2, 0, 0,0xD6B4, 0, 0, -0xE2AE, 0,0xD3B7,0xFACC, 0, 0, 0, 0, - 0, 0, 0, 0,0xFADC, 0,0xEDB5,0xE1E3, - 0,0xE8AC, 0,0xE8DD, 0, 0,0xEFE9, 0, - 0, 0, 0, 0,0xF4BD, 0,0xCFB8,0xE9DB, -0xD1AC, 0, 0, 0, 0, 0, 0,0xDAC7, - 0, 0, 0, 0, 0, 0, 0,0xEBC9, - 0,0xE8CC, 0, 0, 0,0xDEB7, 0, 0, - 0, 0,0xD6BC,0xD3E5, 0, 0, 0, 0, - 0,0xFADD, 0, 0, 0, 0, 0, 0, -0xDAD6, 0,0xCAB1, 0, 0, 0, 0, 0, - 0,0xDAC8,0xDFA6, 0,0xF9B3,0xF2D2, 0,0xCAC4, - 0, 0, 0, 0, 0, 0,0xCECB, 0, - 0,0xCDF5, 0, 0, 0,0xFDB0,0xD5A8, 0, -0xF1C1, 0, 0,0xE2E9,0xDCCA,0xECB4,0xFAC0, 0, - 0,0xFBA8,0xD0A8, 0, 0,0xDAEC, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xD9EE, - 0,0xE0FB, 0, 0, 0,0xEFEA,0xFADE, 0, - 0,0xE0C4, 0,0xCFB9, 0,0xD5CA,0xD7E2,0xE2AF, - 0,0xD7B8, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE8CD, 0, 0, 0, 0, - 0, 0, 0,0xF6DA, 0, 0, 0, 0, -0xEFA2,0xE2DA,0xF6FC, 0, 0,0xFBD0,0xD1AD, 0, -0xCDE4, 0,0xD1AE,0xDCED,0xE8CE, 0,0xF0F9,0xCEB5, -0xE6FC, 0, 0,0xD7FB,0xD0D6,0xDDF5,0xF7F1, 0, -0xF6FD, 0,0xDBF7, 0, 0, 0, 0,0xFBEA, -0xE9DC,0xD9C1, 0,0xF5F2,0xE0C5, 0, 0, 0, - 0, 0, 0,0xEAD4, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF9C2, 0,0xEABC, - 0,0xD2C5,0xFBD1,0xE7C0,0xEBA5, 0,0xDFFA,0xE3A2, -0xD7B9, 0,0xE9C3, 0,0xE8FD,0xE8AF, 0, 0, -0xF2D3,0xFBA9,0xD8A5, 0, 0, 0, 0,0xD5CB, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xD0C8, 0, - 0, 0,0xD1AF,0xD7E3, 0, 0, 0,0xE0C6, - 0,0xD6A2, 0,0xEDF0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD7F3, 0, 0, 0,0xFCD4, 0,0xDAD7,0xCCDF, - 0,0xF2D4, 0,0xD1B0, 0,0xCCE0, 0,0xDBFD, -0xF3BF, 0,0xF0D1, 0, 0, 0, 0, 0, -0xFCBB, 0,0xE2B0, 0, 0,0xE6A5, 0, 0, - 0,0xE2DB, 0, 0, 0,0xDFDE, 0,0xE0C7, - 0, 0, 0, 0, 0, 0,0xF2EF, 0, - 0, 0,0xCCE1, 0, 0, 0, 0,0xD6EA, - 0, 0, 0, 0,0xE7C2, 0, 0, 0, -0xCEB6, 0,0xF3C0, 0,0xCDFE, 0, 0, 0, -0xFBD2, 0,0xF8F8,0xF7FB, 0, 0,0xE8BF, 0, - 0, 0, 0, 0, 0, 0,0xE8B7, 0, - 0, 0, 0, 0, 0, 0, 0,0xEDB6, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xDCBA, 0, 0,0xCCB4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF1F7, 0, 0, 0,0xE8B8, 0, 0, -0xCAF6, 0,0xE4A4,0xF4D6, 0, 0, 0,0xDFE6, - 0, 0, 0,0xDFA7, 0,0xDFE7,0xE1C1, 0, -0xE9C4, 0, 0,0xDCCB,0xE9C5, 0, 0, 0, -0xEFA3,0xEBA6,0xCBA3,0xE3E9, 0, 0, 0,0xD1FB, -0xEFA4, 0,0xEFEB, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xD0B4, - 0, 0, 0, 0,0xCDA3, 0, 0,0xE8E6, - 0,0xEFA5, 0,0xD3CC,0xDAED, 0, 0, 0, - 0,0xD7BA, 0,0xF2D5,0xF5E5,0xD9EF, 0, 0, - 0, 0,0xF9B4, 0, 0,0xD5D4,0xFDCF, 0, - 0, 0,0xDBE3, 0, 0, 0, 0,0xF1E1, -0xECB6, 0, 0, 0, 0,0xFBFE,0xD3D7, 0, -0xD1B1, 0,0xCBB1, 0, 0, 0, 0,0xD1B2, - 0, 0, 0, 0, 0, 0,0xCBB2,0xF1C2, - 0, 0,0xF4E1,0xF9B5, 0, 0,0xE1C3,0xE1C2, - 0,0xEBF7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xDFA8, 0, 0, - 0, 0, 0, 0, 0,0xCBCA, 0, 0, - 0, 0, 0,0xE6B9, 0, 0, 0, 0, - 0,0xF8DE,0xF9AA,0xCAF7, 0,0xEDB7, 0, 0, -0xD3B8,0xF2D6, 0, 0,0xD4D9,0xEEC5,0xF2F0, 0, - 0, 0,0xCAB2, 0, 0,0xDCBB, 0,0xF1F8, - 0, 0, 0, 0, 0,0xECB7, 0, 0, - 0, 0,0xE5CA, 0,0xF6C0,0xFDDD, 0, 0, -0xD4E3,0xCCE2, 0,0xF7D4, 0, 0, 0, 0, - 0, 0,0xD7E5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD3C3, 0,0xD8A6, 0,0xF6C1, 0, 0, 0, - 0, 0,0xDDF6, 0,0xCDC0, 0, 0, 0, -0xE5DC, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE5CB, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xE1C4, 0, 0, 0, 0, 0,0xE8B0, -0xF4B0,0xF3EA,0xDAEE, 0,0xD7BB, 0,0xE2B1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xD7AA, 0, 0, 0, 0, - 0, 0,0xD6FB, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xE4DF, 0,0xCAD6, 0, - 0, 0,0xEBA8, 0, 0, 0,0xDBFE, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF6C2, 0, 0,0xEFBB, 0, 0, 0, - 0,0xD4FD, 0, 0,0xE0C8, 0, 0, 0, -0xE8B9, 0,0xEFA6, 0, 0, 0, 0, 0, -0xCDA4, 0, 0,0xD4F4,0xDBA1,0xDBDC,0xDBDD, 0, - 0, 0, 0, 0,0xEEDC, 0,0xCBCB,0xFCD5, - 0, 0, 0, 0, 0, 0,0xCEEB, 0, -0xCDC1, 0, 0,0xFBD3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF9AB, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF5D4, 0, 0, 0, 0,0xD9A9, - 0, 0,0xE9DD,0xDBCD, 0, 0,0xDDCE, 0, -0xE7C3, 0,0xECCC, 0, 0, 0, 0, 0, - 0, 0,0xF9EC, 0, 0, 0,0xCBCC, 0, - 0, 0, 0,0xE0FC,0xD4A8, 0,0xEDD3,0xD8EF, - 0,0xF2D7, 0,0xCAF8,0xDAEF, 0, 0,0xD6D4, - 0, 0, 0, 0, 0, 0,0xD9CD, 0, - 0, 0,0xD8EE, 0,0xF2C1, 0, 0, 0, -0xDFD3, 0, 0, 0,0xDAF0, 0,0xE2EA, 0, - 0,0xE0FD, 0, 0,0xD8F8, 0, 0, 0, -0xF7AF,0xDAB6, 0,0xCAD7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF2D8, 0, -0xD8F9, 0, 0, 0, 0, 0, 0, 0, - 0,0xFADF, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xCFEF, -0xD9C2, 0,0xF0D2, 0,0xE4D1, 0, 0, 0, -0xF3B7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xFAE0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xEFEC, 0, 0, 0, 0, - 0,0xE2B2, 0,0xD4BD, 0, 0,0xD9CE, 0, - 0, 0, 0,0xF4E2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xD4A9, 0, 0, 0, 0,0xCDC2,0xE7DA, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xF2D9, 0, 0, 0, 0, - 0,0xD9AA, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xD8BE, 0, - 0, 0, 0, 0, 0,0xDCAD, 0, 0, - 0, 0, 0, 0,0xE2EB,0xD6FC, 0, 0, -0xCAF9, 0, 0,0xD4DA, 0, 0, 0, 0, - 0, 0, 0,0xF4D7,0xCCA1, 0, 0,0xCFBA, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xF5B8, - 0, 0, 0,0xD9C3,0xD0E8, 0, 0, 0, - 0, 0,0xE3C5,0xEBF8, 0,0xF2B1, 0, 0, - 0,0xCFBB, 0, 0, 0,0xD3AD,0xE8E1,0xCEEC, - 0, 0, 0,0xE0B4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xDEE3, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xDDF7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF2B2,0xF3F6,0xF6DB, - 0, 0, 0, 0,0xD7FE, 0, 0, 0, - 0, 0,0xF8DF, 0,0xF7F2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xD0A9, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE6DA, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF5A6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xD7BC,0xCCE3, 0, 0,0xE6DB, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xDDDD, 0, 0, 0, - 0,0xD1B3, 0, 0, 0, 0, 0,0xEFED, - 0, 0, 0, 0,0xD6DE,0xE4F4,0xE1EF, 0, - 0,0xDDF8, 0, 0, 0, 0, 0,0xE8CF, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xCAE5, 0, 0, 0,0xDCA1, - 0,0xE0B5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xFCAC,0xFCAD,0xD8A7, 0, 0, 0, - 0,0xEDB8, 0, 0, 0,0xDBB6, 0, 0, - 0, 0,0xD6F0,0xF3AF, 0, 0,0xCDA5, 0, -0xDAF1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD8A8, 0, 0, 0,0xCCE4, 0, 0,0xD1B4, - 0, 0, 0, 0, 0,0xCAD8, 0, 0, - 0, 0, 0,0xDAF2, 0, 0, 0, 0, - 0,0xF5A7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF5A8, 0, - 0, 0, 0, 0, 0, 0,0xE6A6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xD5EC,0xD5F8,0xDAF3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xE3C6, 0, 0, 0,0xDEE4, 0, -0xDEE5,0xD1B5, 0, 0, 0, 0, 0,0xD1B6, -0xD1B7,0xF2B3, 0, 0, 0, 0, 0, 0, -0xE9DE, 0, 0, 0, 0, 0,0xF0D3,0xF2B4, - 0, 0,0xF0D4,0xCBE4,0xFBD4,0xF5E6,0xE3EA, 0, -0xDEE6, 0, 0, 0, 0,0xDFD4, 0, 0, -0xF8F9, 0, 0, 0, 0,0xF0AE, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xD1B8, 0, 0, 0, 0,0xD6DF, - 0,0xD0D7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xFCA1,0xEFEE,0xDCD8, - 0,0xE9DF, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE5DD,0xFDFB, - 0, 0,0xE0C9, 0, 0, 0,0xD6C9, 0, - 0,0xD4AA, 0,0xE5CC, 0, 0, 0, 0, - 0,0xE9E0, 0, 0, 0,0xD0D8,0xFCA2,0xD4BE, -0xE2B3,0xDEE7, 0, 0, 0, 0, 0, 0, - 0,0xDCBC,0xD2B6,0xF5D5, 0, 0, 0, 0, - 0,0xCEA1,0xF5A9, 0, 0,0xDDF9, 0, 0, -0xDDFA, 0, 0, 0, 0, 0, 0,0xF0D5, - 0, 0, 0, 0,0xF6DF, 0,0xF2DA,0xE4EB, - 0,0xF2F1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xECB9, 0, 0, 0, 0, -0xFDFC, 0, 0, 0, 0,0xE1AA, 0, 0, -0xCAD9, 0, 0,0xEFEF, 0,0xF5AA, 0, 0, - 0, 0, 0, 0,0xECF9, 0, 0,0xF8AD, - 0,0xF2C2,0xF6C3, 0,0xD7D2, 0, 0,0xF9A2, -0xF0D6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF0FA, 0, - 0,0xF6E0, 0, 0, 0, 0,0xE9F3,0xF2C3, - 0, 0, 0,0xD4AB,0xCAB3,0xCDA6, 0,0xCDC3, -0xCDDA, 0, 0, 0, 0, 0,0xD9CF, 0, - 0,0xF6C4, 0, 0, 0,0xEEDD,0xE7C4, 0, - 0, 0, 0, 0, 0, 0, 0,0xE2B4, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xDFE2,0xE7DB, 0, 0, 0, 0, 0, - 0,0xE8B1, 0,0xFCAE, 0, 0, 0, 0, -0xE5CD, 0, 0, 0,0xFAEB, 0,0xCFBC, 0, - 0,0xCFE2,0xCDF6, 0, 0,0xEFF0, 0,0xF4BE, - 0,0xD4CD, 0, 0,0xF3B8, 0, 0, 0, -0xE9A1, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF2F2,0xF3EB, 0,0xF0D7, 0, 0, -0xCFD7, 0, 0, 0, 0, 0, 0,0xCFDF, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xE8C0,0xE8C1, 0, 0, 0,0xCFE3,0xE9A2, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xD0AA, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xF3C1,0xD0AB, 0,0xD4E4, - 0, 0,0xEFBC,0xD8A1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xD9DF, - 0,0xF3D7, 0, 0, 0,0xDCBD, 0,0xCCE5, -0xEDF1, 0, 0,0xF1E2, 0,0xD4DB, 0, 0, - 0, 0,0xE2B5, 0, 0,0xCAE6, 0,0xD3AE, - 0, 0, 0, 0, 0, 0,0xCCE6, 0, - 0,0xF1D3,0xF5E7, 0, 0, 0, 0,0xCADA, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xFBEE, - 0,0xE1C5, 0, 0, 0, 0, 0, 0, - 0,0xDFE9, 0,0xEEDE, 0, 0,0xF7C2, 0, -0xD8A2, 0, 0, 0, 0, 0,0xDDAC, 0, - 0, 0, 0, 0,0xF0AF,0xD6BD, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xE1AB, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF9B6, 0, - 0,0xD4F5, 0,0xD0C9,0xEFA7,0xE2EC, 0,0xDBEA, -0xCECC,0xF5E8,0xF7D5, 0,0xD3CD, 0,0xF3FE, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD0B5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xE0FE, 0,0xDFFB, 0, - 0, 0, 0, 0, 0,0xE6DD, 0, 0, - 0, 0, 0, 0, 0,0xE8A4, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xCBCD, - 0, 0, 0,0xEFA8, 0, 0, 0,0xEEB4, - 0, 0, 0, 0,0xDAD8,0xD1B9, 0,0xDFA9, - 0, 0,0xF3B0, 0, 0,0xCCC4, 0, 0, - 0,0xCEB7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xEFA9, 0, 0, - 0,0xDFD5, 0, 0,0xEDD7, 0, 0, 0, -0xEEC6, 0, 0, 0, 0, 0, 0, 0, -0xEFBD,0xFCD6, 0, 0,0xDBF4, 0,0xEFAA,0xF8B9, - 0,0xF5E9, 0, 0, 0, 0, 0, 0, - 0, 0,0xE3D9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE1C6, 0, 0, 0,0xD4BF, 0, 0, 0, - 0,0xDEE8, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xF0EA, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF3C2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xD3AF, 0, - 0,0xCADB, 0, 0, 0, 0, 0,0xFCD7, - 0, 0,0xEDD8,0xE1C7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF4D8,0xD6B3,0xDDAD, - 0, 0, 0,0xD5BE, 0, 0, 0, 0, - 0, 0, 0, 0,0xF1C3,0xEEDF, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD6EB, 0, 0, 0,0xF4D9, 0, 0, 0, - 0, 0, 0, 0,0xD7E6, 0, 0, 0, - 0, 0, 0,0xDAB7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xDDFB, 0, 0, 0, 0, - 0,0xDDCF, 0, 0, 0, 0, 0, 0, - 0, 0,0xD8A3, 0, 0,0xDAD9, 0,0xF0D8, -0xEFC4, 0, 0, 0, 0, 0, 0,0xE1D8, - 0, 0, 0, 0, 0,0xF1D4, 0,0xEDF2, - 0, 0, 0, 0, 0, 0,0xD5DB, 0, - 0,0xD5DC,0xF3C4,0xCBD7, 0, 0, 0, 0, - 0,0xE2B6, 0, 0, 0, 0,0xEFF1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xFBD5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xD3D8, 0, - 0, 0, 0, 0, 0, 0,0xDDD0,0xF0D9, -0xCBB3, 0, 0, 0, 0, 0, 0,0xD5DD, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xCDA7, 0, 0,0xD0AC, 0, -0xD1BA, 0,0xF1C4, 0,0xE5B3,0xFBF5,0xE9E1,0xFDE0, -0xFCBC, 0,0xDAA2,0xDAA3, 0,0xD2A1, 0, 0, -0xD2EF, 0, 0, 0,0xE2ED, 0, 0,0xDEE9, -0xCEDC,0xF2B5,0xD0E4,0xDDD1, 0, 0, 0, 0, -0xE1C8,0xDBB7,0xDFE3, 0, 0, 0, 0, 0, - 0, 0, 0,0xEDB9,0xF1C5, 0,0xF3CF,0xD7AB, -0xE1AC, 0, 0,0xE3EB, 0,0xEEC7, 0, 0, - 0,0xE1C9,0xCAFA, 0, 0, 0, 0, 0, - 0, 0,0xF0FB,0xFAE1,0xF0DA,0xCCE7,0xDAF4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCCBF, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xCEED, 0, - 0,0xD5A9,0xFAE2, 0, 0, 0,0xD0E5, 0, -0xEBD6, 0,0xECDF, 0, 0, 0,0xDFFC, 0, - 0,0xF7D6,0xDEEA,0xCBB4, 0, 0,0xEFBE, 0, - 0,0xCCB5, 0, 0, 0, 0, 0,0xCFBD, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xEFF2,0xE2B7, - 0, 0, 0,0xCCE8, 0, 0, 0, 0, - 0, 0, 0, 0,0xF0FC, 0, 0, 0, -0xD6E0, 0,0xF1C6, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xE2B8,0xEBAB, 0, 0, - 0,0xCBB5,0xD8D1, 0,0xF4CE,0xF3F7, 0, 0, -0xD7C6, 0,0xD1BB,0xF7AA, 0,0xEDCA,0xD7D3,0xD8FA, - 0, 0, 0, 0, 0, 0, 0,0xF6C5, - 0, 0,0xD1CC,0xDDFC, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xDFFD, 0, -0xF9E5, 0,0xE0CA, 0, 0,0xF2FD,0xD3B0, 0, -0xF4F3,0xDAC9, 0,0xE6DE, 0, 0, 0, 0, -0xF8BA,0xE8D0, 0, 0,0xD8FB, 0, 0,0xEAD5, - 0, 0, 0, 0,0xD6A3, 0, 0, 0, - 0, 0, 0,0xF6C6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF2DB,0xE4FC, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE8B2, 0, 0, - 0, 0, 0,0xDADA, 0,0xF2DC,0xFBD6,0xE9B2, - 0,0xEEAD, 0,0xFAE3, 0, 0, 0, 0, - 0, 0, 0,0xDCEE, 0, 0,0xF5EA,0xE6E0, - 0,0xF0FD, 0, 0, 0, 0, 0,0xD7AC, - 0, 0, 0, 0, 0,0xF5C5,0xEEE0, 0, - 0,0xDBE5, 0,0xDDDE, 0, 0,0xD9F0,0xE9A3, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF1F9, 0,0xF2C4,0xE0CB, 0, 0, - 0, 0, 0, 0, 0, 0,0xE9A4, 0, - 0,0xE2B9, 0, 0, 0, 0, 0, 0, - 0,0xE3B1,0xFCEB,0xCDA8, 0,0xCCB6, 0, 0, -0xF0DB, 0, 0, 0, 0, 0, 0, 0, - 0,0xE6BA, 0, 0,0xCDA9, 0, 0, 0, - 0, 0,0xF3C3, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xE1D9, 0, 0,0xEFAB, - 0, 0, 0,0xE7C5, 0, 0,0xE0E9, 0, -0xF3C5, 0, 0,0xD4C0,0xD5BF, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xDDAE, 0, -0xF9FC, 0,0xCCC0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xE5A2, 0, 0, 0, -0xCEB8, 0, 0, 0,0xD8D2,0xF9D6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF1AA,0xCED1, 0, 0,0xF6C7, 0, -0xDBEB, 0,0xDFFE, 0, 0,0xD8E1, 0,0xF7F3, - 0,0xD7E7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xD4FE, 0, 0, -0xD1BC, 0,0xE5CF, 0,0xCBB6, 0,0xDAB8, 0, - 0, 0, 0, 0,0xCDC4, 0, 0, 0, - 0, 0,0xD6BE, 0, 0, 0,0xE2BA, 0, - 0, 0, 0, 0,0xCFD8, 0, 0, 0, -0xE0CC,0xEBF9, 0, 0, 0, 0, 0, 0, - 0, 0,0xFDFD, 0, 0, 0, 0, 0, -0xD7E8,0xCBD8, 0, 0, 0,0xE9E2, 0, 0, - 0,0xE8BA, 0, 0, 0,0xE3C7, 0, 0, - 0, 0,0xECCD, 0,0xECCE, 0,0xD6BF, 0, - 0, 0,0xE3A7, 0,0xDFD6,0xFDE8, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xEEE1, -0xF6A8,0xDDFD, 0, 0, 0, 0, 0, 0, - 0,0xF8BB, 0,0xE8D1, 0, 0, 0, 0, -0xF9D7, 0, 0, 0, 0, 0, 0, 0, - 0,0xCEEE, 0, 0,0xECCF, 0, 0, 0, -0xE9A5,0xD6D5, 0,0xCDC5, 0,0xEDBA,0xD1BD, 0, - 0,0xCFBE, 0, 0,0xECBB, 0, 0, 0, -0xD2B1, 0, 0, 0, 0,0xCCE9, 0,0xD9C4, -0xE9FC, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xD1BE, 0, 0, - 0, 0, 0,0xECBC, 0, 0,0xE5AD, 0, - 0, 0, 0, 0, 0,0xF7B0, 0,0xCCEA, - 0, 0, 0,0xD3C4, 0, 0,0xD6C0, 0, - 0, 0,0xD6FD, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE1A1, 0, -0xDEBD, 0,0xF6A9, 0, 0, 0,0xDAA4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xD6A4, -0xF5C6, 0,0xE1A2,0xE9C6, 0, 0, 0,0xF2C5, - 0, 0, 0, 0, 0,0xF4E9,0xD6EC,0xEBD3, - 0, 0, 0, 0,0xECBD,0xE2DC,0xDEEB,0xF0DC, - 0,0xEBBF, 0,0xD7CE,0xD1BF, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF5AB, 0, - 0, 0, 0,0xF9FD, 0,0xCADC, 0, 0, - 0,0xCDC6,0xF2B6, 0, 0,0xDDFE, 0, 0, - 0,0xCCB7,0xDBB8, 0, 0, 0, 0,0xD0E9, - 0,0xCEDD,0xEBC0, 0,0xFDA2, 0, 0, 0, - 0, 0,0xF8CB, 0, 0, 0, 0, 0, - 0, 0, 0,0xEAD6,0xF1B0, 0, 0, 0, - 0, 0, 0, 0,0xDBCE, 0,0xF7C3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xDBCF,0xCBA4, 0, 0,0xF8E0, 0, - 0,0xFBD7, 0, 0,0xEBCA,0xE0A1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xCECD, 0, 0,0xD4DC, 0, 0, 0, -0xFDD8, 0, 0, 0, 0,0xD2F6, 0, 0, - 0, 0,0xF2B7, 0, 0,0xFAF6,0xF6AA,0xFAF7, -0xD8E6, 0,0xF4B1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE8D2, 0,0xCAC5,0xCCEB, 0, 0, 0, 0, - 0, 0, 0,0xE2EE, 0, 0, 0, 0, - 0,0xE2BB, 0,0xF7AD, 0, 0, 0,0xF8E1, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF3EC, 0, 0, 0, 0,0xDEA1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE4FD, 0, 0,0xE3EC, 0, -0xDDAF,0xDDB0, 0, 0,0xCBB7,0xE8D3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE1A3,0xD2E0, 0, - 0, 0, 0,0xF0FE, 0, 0, 0, 0, -0xE9A6,0xCBF2, 0, 0, 0, 0, 0, 0, -0xEDF3,0xDCD9,0xE0CD, 0, 0, 0, 0,0xF7DA, -0xDBB9, 0, 0, 0, 0, 0, 0, 0, -0xCCAE, 0,0xDADB, 0, 0, 0, 0,0xCDC7, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xDDB1, 0,0xD8AF,0xE3A3, 0, 0, -0xCEEF, 0, 0,0xF2F3, 0, 0, 0, 0, -0xF8B3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE0CE, 0,0xF5FD, 0, 0, - 0, 0,0xEBEC, 0, 0,0xD3C5,0xFCEC,0xD2DB, -0xD4EB, 0,0xDEA2, 0, 0, 0,0xE5E6, 0, - 0, 0, 0, 0, 0,0xF0B0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD5C4, 0, 0, 0, 0, 0, 0,0xEDF4, - 0, 0, 0,0xE3ED, 0,0xE8C2, 0,0xEDF5, -0xD7FC, 0,0xEDBB, 0, 0,0xF6AB, 0, 0, - 0, 0, 0,0xF2B8,0xF6C8, 0, 0, 0, - 0, 0,0xD3E6,0xF2DD,0xCFBF, 0,0xEBAC, 0, - 0, 0, 0, 0, 0,0xCFC0, 0,0xE6A8, -0xFDE9, 0,0xCFC1, 0,0xE0DF,0xDEEC, 0, 0, - 0, 0,0xE0A2, 0, 0, 0, 0, 0, - 0, 0, 0,0xF4BF,0xE2EF, 0,0xD9F1,0xF1C7, - 0,0xCBB8, 0, 0, 0, 0, 0, 0, - 0, 0,0xF9FE,0xDBBA,0xDAF5, 0, 0, 0, - 0, 0, 0, 0, 0,0xF6EC,0xDADC,0xFAE4, - 0,0xE0CF, 0, 0, 0, 0, 0, 0, -0xDDB2, 0, 0, 0, 0,0xE6A9, 0,0xEFF3, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF3ED, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xEBFA, 0,0xF9E6, 0, - 0, 0, 0, 0, 0, 0,0xCADD,0xD5DE, - 0,0xCADE,0xDFE4, 0, 0, 0,0xE6FD, 0, -0xF5AC, 0, 0, 0, 0, 0,0xE4F5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE9E3, 0,0xEDCB,0xCFE4, 0, - 0, 0,0xD8D3, 0, 0, 0, 0, 0, - 0,0xDDB3,0xD4EC, 0, 0,0xF2B9, 0,0xDFB7, - 0, 0, 0, 0, 0,0xCBCE,0xFBD8, 0, - 0,0xD0D9, 0, 0,0xDDD2,0xF7F4,0xE7DC,0xE4A5, - 0,0xFCA3, 0,0xDBBB, 0, 0, 0,0xF2BA, -0xE9FD,0xD0CA, 0,0xF5D6,0xD9C5,0xE4B4, 0,0xEDA7, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xEABD,0xE6FE, 0,0xF7C4,0xF5AD, 0,0xD9E0, - 0, 0, 0,0xCAB4, 0, 0,0xF8E2,0xCFC2, - 0,0xECBE, 0, 0, 0,0xE5B4,0xCDC8,0xEEC8, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xE7C8, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xCDC9,0xF9B7, 0, - 0,0xF1E8,0xD9F2,0xDBF5,0xCAB5,0xD9C6, 0, 0, - 0,0xD8C9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xD9AB, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xEDBC, 0, 0,0xD8D4, 0, 0, 0,0xDCDA, - 0,0xE2BC, 0, 0,0xFCED,0xECE0,0xD2FE, 0, -0xE9C7,0xE6AA, 0, 0, 0, 0, 0, 0, -0xE2F0, 0, 0, 0, 0, 0, 0,0xFABB, - 0,0xF5AE,0xFBAA, 0, 0, 0, 0,0xECFB, - 0,0xECBF,0xFCD8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xD4E5, 0, 0, 0,0xF9C3, - 0, 0, 0,0xEEE2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xD7E9,0xEDF6, 0, 0, 0,0xDEED, 0, - 0, 0, 0, 0, 0, 0,0xCCEC, 0, -0xE3EE, 0, 0, 0, 0, 0,0xE8D4, 0, - 0, 0,0xFAF8, 0, 0, 0, 0, 0, - 0,0xDDB4,0xE4B5,0xD8B0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xD8D5, 0, 0, - 0,0xF4EA, 0, 0, 0,0xCEB9, 0, 0, - 0,0xD6E1,0xCFD2, 0,0xD0B6, 0, 0, 0, - 0, 0, 0,0xCEA2, 0, 0,0xF3EE, 0, - 0, 0, 0, 0,0xF3F8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xDCCC, 0,0xD0CB, 0, 0, 0,0xFCA4, -0xCDCA,0xD7D4,0xDEA3, 0,0xE4E0, 0, 0, 0, - 0,0xEEC9, 0, 0, 0,0xE2DD, 0, 0, - 0, 0, 0,0xF5FE,0xD4AC, 0, 0, 0, - 0, 0,0xD5D1, 0,0xD8F0,0xF8C3,0xEAD7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF5D7, 0, 0,0xD8BF, 0, 0, 0, - 0,0xFDC0, 0, 0, 0, 0, 0, 0, -0xEBAD, 0, 0, 0, 0,0xD5AA, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xE7A8, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xEECA, - 0, 0, 0,0xCAE7, 0, 0, 0, 0, - 0,0xF8E3, 0,0xD4DD, 0, 0,0xEAD8, 0, - 0, 0, 0,0xFBD9,0xEDF7, 0, 0,0xE5B5, - 0, 0, 0, 0, 0,0xD0AD, 0, 0, - 0, 0,0xF1F1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE2BD, 0, 0, 0,0xE3C8, 0, 0, 0, - 0,0xD9D5, 0, 0,0xDFAA, 0, 0, 0, - 0,0xDBBC, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF8E4, 0, 0, 0, 0, 0, -0xF1FA, 0, 0,0xE5B6,0xF3EF, 0, 0,0xFBDA, -0xE1E0, 0,0xD9AC, 0,0xF5EB, 0,0xE0B6, 0, - 0,0xE9C8, 0,0xCBCF, 0,0xE3C9, 0, 0, - 0,0xDEEE, 0, 0, 0, 0, 0, 0, - 0, 0,0xE2BE, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xDCEF, 0,0xD6A5, 0, - 0, 0, 0, 0,0xE2F1, 0, 0, 0, - 0, 0, 0, 0,0xD6FE, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xD9A1, 0,0xD8C0,0xDCDB, 0, 0,0xEDBD, -0xDFB8, 0,0xEAA5, 0, 0, 0,0xD7AD, 0, - 0,0xF3F9, 0,0xEDF8, 0,0xF5C7, 0, 0, - 0, 0, 0, 0,0xE1CA,0xEBE3, 0,0xF2DE, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF8CC, 0,0xEAD9, - 0,0xD3C6, 0,0xDBE6, 0, 0, 0, 0, - 0,0xF5AF, 0, 0, 0, 0,0xCEF0, 0, - 0, 0, 0,0xE9FE, 0, 0, 0, 0, - 0,0xFBB6, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE2F2, 0, 0, 0, 0, -0xCFF2,0xF7B9,0xD9F3, 0, 0,0xE1CB, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xDADD, 0, 0,0xDAB9, - 0, 0, 0, 0, 0, 0, 0,0xEBFB, - 0,0xCBB9, 0, 0,0xEDF9, 0, 0, 0, - 0, 0, 0,0xE0E0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF4C0, 0, -0xFDBC,0xDFB1,0xE3EF, 0, 0, 0, 0,0xE0A3, -0xFDB9, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF0B1, 0, 0, 0, 0, 0, - 0,0xCDCB, 0, 0, 0, 0, 0, 0, - 0,0xEDBE, 0, 0, 0,0xD5C0,0xE3F0,0xEDFA, - 0, 0, 0, 0, 0,0xE9E4, 0, 0, - 0, 0, 0, 0,0xD5ED,0xE7DD, 0, 0, - 0, 0, 0, 0,0xD4F6,0xE5B7, 0, 0, - 0,0xDBE7,0xE2BF, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xEECB, - 0, 0,0xD7F4,0xF0DD, 0, 0, 0,0xCEAB, - 0, 0,0xE7DE, 0, 0, 0,0xD6D6,0xE1CC, - 0, 0,0xE8B3, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE5EE,0xDCA2, - 0, 0,0xE0D0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xD5B5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xD5A1, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xFBDB, 0, -0xF9CB, 0, 0, 0,0xCBF3,0xF4A5, 0, 0, - 0, 0, 0,0xFAC8,0xD6D7, 0,0xE9E5,0xFBDC, - 0, 0, 0, 0, 0, 0, 0,0xFDD0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xFBF6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xDAA5, 0,0xDBBD, 0, 0, 0, - 0, 0, 0,0xECE2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xCDF7,0xF0DE, 0, 0, 0, - 0,0xF6C9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xDEEF, - 0, 0, 0,0xD3B1, 0, 0, 0, 0, - 0, 0, 0, 0,0xFCEE, 0, 0, 0, - 0,0xE8C3, 0,0xF1C8, 0, 0, 0,0xCEF1, - 0, 0, 0, 0,0xF9ED, 0, 0, 0, - 0, 0, 0, 0, 0,0xF2F4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE4B6, 0, -0xF5B9, 0,0xDCF0,0xE3F1, 0, 0, 0, 0, -0xE8A5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF2BB, 0,0xDEA4, 0,0xDACC, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xCAE9, 0, - 0, 0, 0, 0, 0,0xE3DA, 0,0xFCD9, - 0, 0, 0, 0, 0, 0, 0,0xEADA, - 0, 0, 0, 0, 0, 0,0xF9C4, 0, -0xE3A4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xFBDD, 0,0xEFCA, 0, -0xE8C4, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xD5CC, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xEBD7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xD9AD, - 0, 0,0xFBAB, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xD3D9, 0, 0, 0, 0, - 0, 0,0xD5A2, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xF6DE, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xDAF6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xE0D1, 0, 0,0xE9A8, - 0, 0,0xF5F9, 0, 0, 0, 0, 0, - 0,0xFAAF, 0,0xEBFC, 0, 0,0xE0EA, 0, - 0, 0, 0, 0, 0,0xE3B2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xD5C5, - 0, 0,0xF1E3,0xD5EE, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xCDCC, 0, 0, 0, 0,0xEDD9, 0, - 0, 0, 0,0xD8C1, 0, 0, 0, 0, -0xFAEC, 0, 0, 0, 0, 0,0xF1EB, 0, - 0, 0, 0, 0,0xFABC,0xE6E2, 0, 0, - 0, 0,0xFAE5,0xE2FA, 0, 0, 0,0xCAB6, - 0,0xE4B7, 0,0xEADB, 0,0xF5FA, 0, 0, - 0,0xFBAC,0xCFC3,0xEBFD, 0, 0, 0, 0, -0xF8FA, 0, 0,0xDFB9, 0, 0, 0, 0, -0xE1F1, 0,0xD2A4, 0, 0, 0, 0,0xF5FB, - 0, 0, 0, 0, 0, 0,0xD0DA,0xD0DB, - 0,0xEABE,0xD9B1, 0, 0, 0, 0, 0, -0xCAB7, 0, 0,0xD3E7, 0,0xF8E5, 0, 0, - 0, 0,0xD3B2, 0, 0, 0,0xE2C0,0xF2DF, - 0, 0, 0, 0, 0, 0,0xCDE5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xF9AC, 0, 0, 0, 0, - 0, 0, 0, 0,0xCDCD, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xEEAE,0xD6AE, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xD7EA, - 0, 0, 0, 0,0xE7E0,0xEBAE, 0, 0, - 0,0xCFD9, 0, 0,0xDCCD,0xEDFB, 0,0xDEF0, - 0,0xD7EB, 0, 0, 0, 0, 0, 0, -0xDEA5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xDFD7,0xDBD0,0xDBD1, 0, 0, -0xD5A3, 0, 0, 0, 0,0xF0B2, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xDCDC, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCAE8, 0,0xF8E6,0xDCCE, 0, 0, 0, 0, -0xEADC,0xDBD2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE9B3, 0, 0, - 0, 0,0xF7DB, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE3A8, 0, -0xD7AE, 0, 0,0xE0E1, 0, 0, 0, 0, - 0,0xCBBA, 0, 0,0xE5D1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xD0DC, - 0, 0, 0, 0,0xD5C1, 0, 0, 0, - 0, 0,0xD8CA, 0, 0, 0, 0, 0, - 0, 0,0xE3A9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE0A4, - 0,0xE9A9, 0,0xD3C7, 0, 0,0xDCDD,0xF8AE, - 0, 0, 0,0xCCB8, 0, 0, 0,0xD0AE, - 0, 0, 0,0xD8F2, 0, 0,0xE3CA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xCCAF, 0, 0, 0, 0, 0, 0, - 0,0xD4AD,0xF6D1, 0, 0, 0, 0, 0, - 0, 0,0xD0CC, 0, 0, 0, 0, 0, - 0, 0,0xCAC6, 0, 0,0xD5C2, 0, 0, -0xCEBA, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xCAC7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xFAB0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xDFD8, 0, 0, 0, -0xF5BA, 0, 0, 0, 0, 0, 0, 0, -0xE5EB, 0,0xEFF4,0xDDB5, 0, 0, 0, 0, -0xCDAA, 0,0xE3F2, 0,0xFBF7, 0,0xF7D0, 0, - 0, 0, 0,0xFDBA, 0, 0,0xFDE1,0xF6FE, -0xD1C0, 0, 0,0xE8C5, 0,0xE4B8, 0,0xE1E8, - 0, 0, 0,0xCCC1, 0,0xD2ED, 0, 0, - 0, 0,0xDBBE, 0, 0,0xE0E2, 0, 0, - 0,0xFAC9, 0, 0,0xE1CD, 0,0xCAB8, 0, - 0, 0,0xF2E0,0xF1C9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xDEF1, 0, 0, 0,0xF0DF,0xF8C4, 0, 0, - 0, 0, 0,0xEECC, 0, 0,0xDEF2, 0, -0xE7C9, 0,0xE2F3,0xE7E1, 0, 0,0xE3CB, 0, - 0,0xE3CC, 0, 0, 0,0xCFF8,0xEFAC, 0, -0xFDFE,0xFCA5,0xFAB1,0xDFD9, 0,0xE0D2, 0, 0, - 0,0xF4DA, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF1CA, 0,0xCEA3, - 0, 0, 0, 0,0xF2BC,0xECE3, 0, 0, - 0, 0, 0,0xE0A5, 0,0xF7AB, 0, 0, -0xEBAF, 0, 0, 0, 0, 0,0xE5DE, 0, -0xE1A4,0xCDAB, 0,0xD9F4,0xE8A6,0xCDCE,0xE1E9, 0, -0xFCEF, 0,0xE0E3, 0, 0, 0, 0, 0, -0xE2C1, 0,0xCEA4, 0, 0, 0, 0, 0, - 0,0xDEA6, 0, 0,0xEBFE, 0,0xEBDD,0xF0E0, - 0, 0,0xF4DB, 0,0xE2F4, 0, 0,0xD3C8, - 0, 0, 0,0xF4EB, 0,0xEEB5, 0,0xF5D8, - 0, 0,0xD5DF, 0, 0, 0,0xD6E5, 0, - 0, 0, 0,0xEBB0,0xF4E3, 0, 0, 0, - 0,0xE3CD, 0, 0, 0, 0,0xF4F4,0xFAB2, - 0, 0,0xEFF5,0xCADF, 0,0xEBB1,0xEDBF, 0, - 0,0xFDC9, 0, 0, 0, 0,0xE4A6,0xF9A4, -0xF0B3, 0,0xE5EC, 0, 0, 0,0xD1E7, 0, -0xD9C7,0xE4D7,0xEADD, 0,0xD4F7, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xDABA, 0, -0xDACD, 0, 0, 0,0xF9CC, 0,0xE1DA,0xDBBF, - 0,0xCCC5,0xECD0,0xCBBB, 0,0xDEF3, 0, 0, -0xE9AA, 0, 0, 0, 0, 0, 0, 0, -0xD9C8, 0, 0,0xEEE3,0xD7BD, 0, 0, 0, - 0, 0, 0,0xCFC4, 0, 0, 0, 0, - 0,0xD0CD, 0, 0, 0, 0, 0, 0, - 0,0xFCA6, 0, 0, 0, 0, 0, 0, - 0,0xF1FB, 0, 0, 0, 0,0xFDD2,0xD1C1, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE3DB, 0,0xD3C9, 0,0xDCCF, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xCCED, 0, - 0, 0, 0, 0,0xDEA7, 0, 0,0xE6BB, -0xECA1, 0, 0, 0,0xCCB9, 0, 0,0xFBDE, - 0, 0, 0, 0, 0,0xE7E2, 0, 0, -0xD4C1, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xDCA8, 0, 0, 0, 0, 0, -0xE2C2, 0,0xF3D8,0xE5D3, 0, 0,0xF3D9, 0, - 0, 0,0xF3C6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xCDDB, - 0, 0, 0, 0, 0, 0, 0,0xCDAC, - 0,0xFCC3, 0, 0, 0, 0,0xD4E7, 0, -0xD1C2, 0,0xF9A5, 0,0xE8D5, 0, 0, 0, - 0, 0, 0, 0, 0,0xE3CE, 0, 0, - 0, 0,0xD4CA, 0, 0, 0, 0, 0, - 0,0xDFDA, 0, 0, 0, 0, 0, 0, - 0, 0,0xFBDF,0xE7E3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF8FB,0xE3CF, 0, 0, 0, 0, 0, - 0, 0,0xF5B0, 0, 0, 0, 0, 0, - 0, 0,0xD8E7, 0,0xD9C9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF8AF,0xEFF6, 0, -0xDDB6,0xEEAF,0xCDF8, 0, 0, 0, 0,0xDEB8, -0xFCA7,0xF7FC,0xF7B1,0xCEBB,0xF4A1, 0, 0,0xEECD, -0xE1AE, 0, 0,0xECC3,0xCFFE, 0,0xF8BF,0xD8E2, -0xD3E8, 0, 0,0xDEA8,0xF4E4,0xECC2, 0,0xD9F5, -0xF9C5,0xDDD3,0xD6F1,0xECFC,0xFCF0, 0, 0,0xEDC0, -0xCAB9, 0,0xEEE4, 0, 0, 0, 0, 0, - 0,0xF2E1, 0,0xDEB9, 0, 0, 0, 0, - 0, 0,0xD6F2, 0,0xDEF4, 0,0xDFDB, 0, -0xDBD3, 0,0xFAE7,0xD8E3,0xF4C1, 0,0xDDB7, 0, - 0, 0,0xF2F5, 0, 0,0xD4AE, 0, 0, - 0, 0, 0, 0,0xD6F3, 0, 0, 0, - 0, 0, 0,0xDDB8,0xCFC5,0xDFDF, 0, 0, - 0, 0, 0, 0,0xF2BE,0xF6A1, 0,0xEBCB, -0xF1FC, 0,0xF3C7, 0, 0,0xE0EB, 0, 0, - 0, 0, 0,0xEDFC, 0, 0,0xE1DB, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xEEE5, 0,0xDEF5, 0, - 0, 0, 0,0xFAD3, 0, 0, 0, 0, -0xF1CB, 0, 0,0xD0AF,0xDDB9, 0, 0,0xD1C3, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF5B1, 0, 0, - 0, 0,0xEAC6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF0E1, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xF6AC, 0, 0, 0, 0, -0xF5D9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xF0EB, 0, 0, 0, 0, - 0, 0,0xDDBA, 0, 0, 0,0xF2BF, 0, - 0, 0, 0, 0, 0, 0,0xF7C5, 0, - 0, 0, 0,0xDBA2,0xF2F6, 0, 0,0xCABA, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xF7F5, 0,0xCBE5, 0, 0, - 0,0xEEE6, 0,0xE0D3, 0, 0, 0, 0, -0xCEA5, 0, 0, 0, 0, 0, 0,0xD6D8, - 0, 0, 0,0xD4AF, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xE9C9, 0, 0, 0, 0,0xD3CE, -0xF4C2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xCBE6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF1A1, 0, 0, 0, 0, 0, -0xEBB2, 0, 0, 0, 0,0xF1A2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xEBB3, 0,0xF0B4, 0, 0,0xCBF4, -0xD4B0,0xF3B2,0xFBB7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF5EC, 0, 0, 0, 0, 0,0xEEE7, -0xF4B2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xF5ED, 0,0xCFF3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF0E2, 0, 0, 0, 0, 0,0xEECE, - 0, 0,0xF1CC, 0, 0,0xE5B8, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xD7F5,0xE3F3,0xCFE5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCFC6, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF3B3,0xE4D8,0xCFF9,0xCFDA, 0, 0, - 0, 0,0xFACD, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE6E3, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xF2E2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF5EE, 0, 0,0xCABB, 0, 0,0xE3DC, 0, - 0, 0, 0,0xCEF2, 0,0xD6D9, 0, 0, - 0,0xEEB0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF4E5,0xD8C2,0xDCD0,0xCCEE, 0, 0, - 0, 0, 0,0xD5E0,0xF6CA,0xFDCA,0xD8D6,0xF4CF, - 0, 0, 0, 0, 0, 0,0xD6A6,0xDCBE, - 0,0xDBD4,0xD7C7, 0, 0, 0, 0,0xF2FE, - 0, 0, 0,0xF1CD, 0, 0, 0, 0, -0xE2C3,0xDCDE, 0,0xDCDF, 0, 0,0xEFAD,0xE6AB, - 0, 0, 0, 0,0xF9DD,0xEABF, 0, 0, - 0,0xEFAE, 0, 0, 0,0xF4D0,0xCEF3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE6AC, 0,0xCEDE, - 0, 0,0xD5F9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE3F4,0xCDD0, 0, 0, 0, - 0, 0, 0,0xD5B8, 0, 0,0xF7FD, 0, -0xDCA9, 0, 0, 0, 0,0xDEF6, 0,0xDCAA, -0xF2E3,0xE9B4,0xD2DC, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xE9E6, 0, 0,0xE3F6, 0, 0, - 0, 0, 0, 0, 0, 0,0xE7CA, 0, - 0,0xD0CE, 0, 0,0xDAF7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xCABC, 0, - 0, 0,0xEEE8,0xDADE, 0,0xF2F7, 0, 0, -0xE2FB, 0,0xCCA6, 0, 0, 0, 0,0xDABB, - 0,0xEEE9, 0, 0, 0,0xF5DA, 0, 0, -0xF7DC,0xE1EA,0xCEC1,0xD4B1, 0,0xFDB1,0xE6BD, 0, -0xFBAD, 0, 0,0xF8E7, 0,0xE1CE, 0,0xF7E2, -0xF5EF,0xCFC7, 0, 0,0xD4B2,0xCCEF, 0,0xD4E8, - 0,0xEECF,0xF7D7, 0, 0,0xE0A6,0xD6C1,0xE1DC, -0xF0E3,0xF1E4,0xDCF1,0xD6A7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF4F5, 0, - 0,0xF1CE,0xF2E4, 0, 0,0xD0B0, 0, 0, -0xECEF, 0, 0, 0,0xF9BA, 0,0xEBB5, 0, - 0,0xD4ED,0xE2C4, 0, 0, 0, 0,0xE9E7, - 0, 0,0xEBB4,0xEAA1, 0,0xF8BC,0xCEA6, 0, -0xF9C6,0xFCDA, 0,0xD4B3,0xD3B9,0xEADE, 0, 0, - 0,0xE9AB, 0, 0,0xE1E1,0xD3CF,0xF4F6, 0, -0xEAC0,0xE1CF, 0,0xCCBA, 0, 0, 0, 0, - 0,0xEEEA, 0, 0, 0,0xF0E4,0xF3B4,0xD4EE, - 0, 0,0xF2C0, 0, 0,0xF1E5, 0,0xF4C3, -0xE0D4, 0,0xEBB6, 0,0xD7A1,0xCBE8, 0,0xF9AD, -0xE9AD,0xD8E4,0xFAB3,0xE2C5,0xFCBD, 0, 0,0xECC4, -0xD8B1, 0,0xDCAB, 0, 0, 0, 0,0xD5A4, - 0,0xEBE9, 0, 0, 0,0xE8BB, 0, 0, - 0,0xD8D7, 0, 0, 0, 0, 0, 0, - 0, 0,0xFBAE,0xD1E1, 0, 0,0xDBC0, 0, -0xF5BE, 0,0xDEF7, 0, 0, 0, 0,0xCAFB, -0xF7C6,0xCFC8, 0, 0, 0,0xE1D0, 0, 0, -0xEED0, 0, 0, 0, 0, 0, 0, 0, - 0,0xE9F4, 0, 0, 0, 0, 0, 0, - 0, 0,0xCEF4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xD5CD, 0, - 0,0xCFDB, 0, 0, 0, 0, 0, 0, -0xDDBB, 0, 0, 0, 0,0xCEAC, 0, 0, - 0, 0, 0, 0, 0,0xE9E8, 0, 0, - 0, 0, 0, 0, 0,0xD4B4, 0, 0, - 0, 0,0xE4C7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF5DB, 0, 0,0xFAC1, 0, 0, - 0,0xDEA9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xD4F8, - 0, 0, 0, 0, 0,0xEFF7, 0, 0, - 0, 0,0xD3B3, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xEBB7,0xEFF8,0xF5DC,0xEDCC,0xDBD5,0xF1CF, 0, - 0, 0,0xF1D0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF5B2, 0, 0, 0, 0, 0, - 0,0xD9AE,0xD5AC, 0,0xE2C6, 0, 0, 0, - 0, 0, 0, 0, 0,0xFDA3, 0,0xFBE5, -0xDFAB, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE2F5, - 0,0xF6AD, 0,0xF5B3, 0,0xF0B5, 0, 0, - 0, 0,0xE1A5, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xF5DD, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xECA2,0xEDFD, 0,0xF5B4,0xFBB8, - 0,0xDBA3, 0, 0,0xD6CA,0xCBD9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE5D4, 0, 0, 0, 0, 0, 0,0xF3FA, - 0,0xEBB8, 0,0xE0B7,0xD7EC,0xF1EC,0xE5AF,0xD5E1, -0xD7ED,0xD1D1, 0, 0, 0, 0, 0,0xE1F2, -0xEFF9, 0, 0, 0,0xDDBC,0xF6DC, 0, 0, - 0, 0, 0,0xF0E5, 0, 0, 0,0xF4C4, - 0, 0,0xE9E9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF3FB, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xD4EF, 0, 0, -0xCCA2,0xF7FE,0xDFBC, 0, 0, 0, 0,0xEBCD, - 0, 0, 0, 0, 0, 0,0xD0B7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xD6C2, 0, 0, 0, - 0, 0,0xE8AD, 0, 0, 0, 0,0xEFAF, -0xCBA5, 0, 0, 0, 0,0xCBE9, 0, 0, - 0,0xFAE8, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xCCC6, - 0, 0, 0,0xE6E7, 0, 0,0xEAC7, 0, - 0, 0,0xDBA4, 0,0xCFC9,0xE2FC,0xEFFA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xEBDE, 0, 0,0xF5C8, 0,0xD4DE, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xE0D5, 0,0xEFB0, 0, 0,0xE2C7, 0, -0xD9AF, 0, 0, 0,0xF9E7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE7E5, 0, 0,0xCFCA,0xE1D1, - 0,0xE2C8, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xEFFB, 0, 0,0xFAF9, - 0, 0,0xDCF2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xE0A7, 0, 0, 0, - 0, 0,0xF8E8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCBEA, 0, 0, 0,0xCBBC, 0, 0, 0, - 0, 0, 0, 0,0xD6E2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF5DE, 0, 0, 0, 0, 0, 0, 0, -0xF5DF, 0,0xEEB6, 0, 0, 0,0xE2F6,0xD3CA, -0xEFFC,0xD1C4,0xEFB1, 0,0xD1C5, 0,0xD0DE, 0, -0xD9E1, 0, 0,0xE0B8, 0, 0,0xCDD1,0xF3B9, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE7CC, 0,0xD6A8,0xCEA7, 0,0xD4B5, 0, 0, - 0, 0, 0, 0,0xE4C8, 0, 0, 0, - 0, 0, 0,0xD3B4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xEBB9, 0, - 0, 0, 0, 0, 0,0xCBF5, 0, 0, - 0, 0, 0, 0,0xF6DD, 0,0xF1A3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xCCC7, 0, 0, 0, - 0, 0, 0, 0,0xE9CA, 0,0xE1F0, 0, - 0, 0,0xF5E0, 0, 0, 0, 0, 0, - 0, 0, 0,0xFBAF, 0, 0, 0,0xCBD1, - 0, 0, 0, 0,0xFBE0,0xF2E5, 0, 0, -0xECF0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xF0EC, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xEEEB, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE9CB, 0, - 0,0xCCF0, 0, 0,0xD7AF, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF3A1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xFCF5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF1A4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xE0D6, 0, 0, - 0, 0, 0,0xEFB2, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF4D1, 0, 0, -0xF7A1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xF1D1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xCAFC,0xCAFD, 0, 0, 0, 0, 0, - 0, 0, 0,0xCECE, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF3C8, 0,0xF3BA -}; - -/* page 7 0x9577-0x9F9C */ -static uint16 tab_uni_ksc56017[]={ -0xEDFE, 0, 0, 0, 0, 0, 0, 0, - 0,0xDAA6, 0, 0,0xE0EC, 0, 0, 0, - 0, 0,0xF8CD, 0,0xCBD2, 0, 0, 0, -0xEBCE, 0,0xF9D8,0xF9D9,0xCAE0,0xDACA, 0, 0, - 0,0xCBA6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xCAC8,0xF9EE,0xDBEC, 0, - 0,0xD0B1, 0, 0, 0, 0,0xD5EF, 0, - 0, 0,0xE6F3, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xE7A2,0xE4D9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE4E1, 0, 0,0xFCC4, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF9EF,0xCFF4,0xF7E6, - 0, 0, 0, 0, 0,0xCEBC, 0, 0, - 0, 0,0xF4C5,0xDCA3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xDDBD, 0, 0, - 0, 0,0xF4C6, 0, 0, 0, 0, 0, - 0, 0, 0,0xF8A1, 0, 0, 0,0xE8D6, - 0, 0, 0,0xDBC1, 0, 0, 0, 0, - 0, 0, 0, 0,0xF0E6, 0, 0, 0, -0xE4B9,0xF6ED, 0,0xF9AE, 0,0xDDBE, 0, 0, - 0, 0, 0, 0,0xD7B0,0xD8E8,0xCBBD, 0, - 0,0xF9DA, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xF8CE,0xF9F0,0xE0ED,0xE3B3, -0xF4B3, 0, 0,0xEAC2,0xF2E6,0xF0B6, 0, 0, - 0, 0, 0,0xDBD6, 0, 0, 0, 0, - 0,0xEBE4, 0, 0,0xF2E7, 0,0xD7D5,0xD4B6, -0xF9E8,0xD7C1, 0, 0, 0, 0,0xE5D5, 0, - 0, 0, 0, 0, 0, 0,0xE9EA,0xD7CC, - 0, 0, 0,0xD3E9,0xE2C9, 0,0xFCDB,0xCDAD, - 0, 0, 0, 0, 0,0xCCB0,0xEAA2, 0, - 0,0xE4F6,0xD0C0, 0,0xF0B7,0xEEA1, 0, 0, - 0, 0, 0, 0,0xD7F6, 0, 0, 0, -0xE2CA,0xE2CB, 0,0xFACF, 0, 0, 0, 0, - 0, 0,0xEBDF, 0, 0, 0, 0, 0, -0xD6CB, 0, 0, 0,0xF4B4, 0, 0, 0, - 0,0xEDCD,0xE4D2, 0, 0,0xEAA9,0xE4BA,0xF3A2, -0xCDD2, 0,0xF6CB, 0,0xF1E6,0xEDC1,0xE8BC,0xEED1, - 0, 0, 0, 0, 0, 0,0xF0E7,0xE2CC, - 0, 0,0xE4AA, 0,0xF5E1,0xEDDA, 0, 0, - 0, 0, 0,0xD7EE,0xD1F1, 0, 0, 0, - 0,0xE9EB,0xE9EC,0xE0E4, 0, 0, 0, 0, -0xDAA7,0xDDD4, 0,0xEAA3, 0, 0, 0,0xD6C3, -0xD6F4, 0,0xDADF, 0,0xEFB3, 0, 0, 0, - 0,0xE2CD, 0, 0, 0, 0, 0,0xEFFD, -0xF2E8, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xEFC5, 0,0xE7E7, 0, 0,0xD7FD, - 0, 0,0xE7CE, 0, 0,0xDFDC, 0,0xF9C7, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD9F6, 0, 0, 0, 0, 0, 0, 0, - 0,0xDFAC, 0,0xD6DA, 0, 0, 0, 0, - 0, 0,0xDCA4, 0, 0, 0,0xF0B8, 0, - 0, 0, 0,0xD5FA, 0,0xE4F7, 0, 0, - 0,0xD6C4, 0, 0, 0, 0, 0, 0, - 0, 0,0xF4EC, 0, 0, 0, 0,0xEFFE, - 0, 0, 0, 0, 0,0xF0A1, 0,0xDEAA, - 0, 0,0xDABC,0xD8FC, 0, 0, 0, 0, - 0, 0,0xFAD4, 0, 0, 0,0xECE5, 0, - 0, 0, 0, 0, 0,0xFCA8, 0, 0, -0xECE6, 0, 0,0xD8CB, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xFBB9, 0,0xE4D3, 0, -0xCDF9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xCFD3, 0, 0, 0, 0, 0, 0, - 0,0xCAEA, 0, 0,0xCFD4, 0,0xF8BD, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xF4C7, - 0, 0, 0, 0,0xEADF, 0, 0, 0, - 0, 0, 0, 0,0xF9DB, 0, 0, 0, - 0, 0, 0, 0, 0,0xD4B7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xEBE5, 0, 0,0xE1D2, - 0, 0, 0, 0,0xEAA4, 0, 0, 0, -0xFAC2,0xFBE1,0xFAED,0xF0A2,0xCCF1, 0,0xFAA3,0xE2F7, - 0,0xE2CE, 0,0xE9F5, 0,0xE1EB, 0, 0, - 0,0xE7E8,0xE8D7,0xDAF8,0xD4CB, 0, 0, 0, -0xF7F6,0xD6C5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xD4E9, 0, - 0,0xFAFA, 0, 0, 0, 0, 0, 0, - 0,0xCCF2,0xF7DD, 0,0xDEBA, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xCEA8, - 0, 0, 0, 0, 0,0xF0B9,0xE4FE,0xE4C9, - 0, 0, 0, 0, 0,0xE4D4, 0, 0, - 0,0xEAC3, 0,0xEFB4, 0, 0, 0,0xD7BE, - 0, 0, 0, 0, 0, 0,0xFBE2, 0, -0xCDD3, 0, 0, 0,0xEFB5, 0, 0, 0, -0xFAE9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF9A6, 0, 0, 0, 0, 0, 0, -0xDFBD, 0,0xF7C7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xF8FD, 0, 0, -0xF8FC, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xDEAB,0xDBE8, 0, 0, -0xE3DD, 0,0xE1E2,0xD1C6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF6D0,0xEBE6, -0xDAF9, 0, 0, 0, 0,0xECC7, 0, 0, - 0, 0, 0, 0, 0,0xDEF8,0xF8E9,0xE3DE, - 0, 0, 0, 0,0xCEF5, 0, 0, 0, - 0, 0,0xFAC3,0xE5D7, 0,0xECC8, 0, 0, - 0,0xF3C9, 0, 0,0xE4BB, 0, 0, 0, - 0,0xE6AE, 0, 0, 0, 0, 0,0xEFB6, - 0,0xDCBF, 0, 0, 0, 0, 0, 0, - 0,0xCEBD, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xD8C3, 0, - 0, 0,0xD0CF, 0,0xCFFA,0xF3CA,0xE0D7, 0, - 0, 0,0xD1C7,0xE9AE, 0,0xE8BD, 0, 0, -0xFAC4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE2CF, - 0, 0,0xFAC5, 0, 0, 0,0xF9B8, 0, - 0, 0, 0, 0, 0, 0,0xDCE0, 0, - 0,0xFBB0, 0, 0, 0,0xD8A9,0xE5DF,0xF9A7, - 0, 0,0xF6EE, 0,0xF6CC,0xE2F8, 0, 0, - 0, 0,0xECF1, 0, 0, 0, 0, 0, - 0, 0,0xDAE0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xF1D2,0xD2CC,0xCFCB, 0, 0,0xCABD, 0, - 0, 0,0xDDBF, 0, 0, 0,0xF6EF, 0, -0xDEF9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xFAB4, 0, - 0, 0,0xD5AD, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xF1E7, 0,0xDEBE, 0, 0, 0, 0, 0, - 0,0xDCC0, 0, 0, 0, 0, 0,0xD1C8, -0xD1C9, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xF8BE, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xCBF6, 0, 0, 0, - 0,0xD4F9, 0, 0, 0, 0, 0,0xF5E2, -0xE1D3, 0, 0, 0, 0, 0, 0, 0, - 0,0xD8E9, 0, 0,0xF8FE, 0,0xCFCC, 0, - 0, 0, 0, 0, 0, 0,0xFDA4, 0, - 0, 0, 0, 0, 0, 0,0xCEF6, 0, -0xFAD0, 0, 0,0xCCF3,0xE6BE, 0, 0, 0, -0xF6AE, 0, 0,0xD5F0, 0, 0,0xD1CA, 0, - 0, 0,0xFCBE,0xD5F1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xCDE9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xFAB5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xE2D0,0xF4F7, 0, 0, - 0,0xCDD4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE7A3, 0, - 0, 0, 0, 0, 0, 0, 0,0xDBA5, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE2D1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD7A2, 0, 0,0xF7E3, 0, 0, 0, 0, - 0, 0,0xEAA6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xD0A1, 0, 0, - 0, 0,0xCEDA,0xFBEB,0xDBA6,0xDBDE,0xD8E5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xEAE0, 0, 0, 0, 0,0xD8AA, 0, 0, - 0, 0, 0,0xE5E0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD6DB, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xEFC6, - 0, 0,0xF8EA, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE4D5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xCEF7, 0, 0,0xE0D8, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xD7EF, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xF4ED, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xCDE6, 0, 0, - 0,0xCCF4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF5E3, 0, - 0,0xE4CA, 0,0xDCE1, 0, 0,0xF9C8, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xFCBF, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE8A7, 0, 0, 0, 0, - 0, 0, 0, 0,0xD8C4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCBBE, 0,0xDCAE, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xD7F7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xF0E8, 0, -0xDDC0, 0,0xCFCD, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xDCF3,0xD9B0, 0,0xE6E9, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xE4BC, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xEAC4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xE4EC, - 0,0xE4E5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xFBF8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xCCBB, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE4BD, 0, - 0,0xCDDC,0xD9F7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xDDDF, 0, 0, - 0, 0, 0,0xEDCE, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xD9D0, 0, 0, 0, 0, 0, -0xE5A3, 0, 0, 0, 0,0xF9CD, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xCDAE, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xCFCE, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xF6AF, 0, 0, 0, 0, - 0,0xFDD3,0xEBED,0xD6DC, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xE5A4, 0, 0, 0,0xD5B6, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xD6DD, 0, - 0, 0,0xF9E9, 0, 0, 0,0xE7A4, 0, -0xD6E3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xD1CB,0xD6E4, 0, 0, 0, -0xD5F2, 0, 0, 0, 0, 0,0xDEFA, 0, -0xD7F8, 0, 0, 0, 0, 0,0xD8EA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xCFD5,0xD8FD, 0, - 0, 0, 0, 0,0xD8AB, 0, 0,0xFDCB, - 0, 0, 0, 0,0xFCDC, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xE0A8,0xD5F3, - 0, 0,0xFDD9, 0, 0,0xCCA3, 0, 0, - 0,0xD9F9, 0, 0,0xD3EA,0xF5F5, 0,0xEFC7, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xD3DA, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xDABD, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE8A8,0xDCAF, 0, 0, 0, 0, 0,0xF0A3, - 0, 0, 0, 0,0xCDD5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xE0A9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xDEAC, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xF0BA,0xEEB1, 0, 0,0xEEB2, - 0, 0, 0,0xF6CD, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xEED2, 0,0xD6C6, 0, 0, 0, 0, 0, -0xE0E5, 0, 0,0xF3BB, 0,0xE5E1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xE4CB, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xD7A3, 0, - 0,0xDBC2, 0, 0, 0, 0,0xCAFE, 0, - 0, 0, 0, 0, 0,0xCFCF}; - -/* page 8 0xAC00-0xD7A3 */ -static uint16 tab_uni_ksc56018[]={ -0xB0A1,0xB0A2,0x8141,0x8142,0xB0A3,0x8143,0x8144,0xB0A4, -0xB0A5,0xB0A6,0xB0A7,0x8145,0x8146,0x8147,0x8148,0x8149, -0xB0A8,0xB0A9,0xB0AA,0xB0AB,0xB0AC,0xB0AD,0xB0AE,0xB0AF, -0x814A,0xB0B0,0xB0B1,0xB0B2,0xB0B3,0xB0B4,0x814B,0x814C, -0xB0B5,0x814D,0x814E,0x814F,0xB0B6,0x8150,0x8151,0x8152, -0x8153,0x8154,0x8155,0x8156,0xB0B7,0xB0B8,0x8157,0xB0B9, -0xB0BA,0xB0BB,0x8158,0x8159,0x815A,0x8161,0x8162,0x8163, -0xB0BC,0xB0BD,0x8164,0x8165,0xB0BE,0x8166,0x8167,0x8168, -0xB0BF,0x8169,0x816A,0x816B,0x816C,0x816D,0x816E,0x816F, -0x8170,0x8171,0x8172,0xB0C0,0x8173,0xB0C1,0x8174,0x8175, -0x8176,0x8177,0x8178,0x8179,0xB0C2,0x817A,0x8181,0x8182, -0xB0C3,0x8183,0x8184,0x8185,0xB0C4,0x8186,0x8187,0x8188, -0x8189,0x818A,0x818B,0x818C,0x818D,0x818E,0x818F,0x8190, -0x8191,0x8192,0x8193,0x8194,0x8195,0x8196,0x8197,0x8198, -0xB0C5,0xB0C6,0x8199,0x819A,0xB0C7,0x819B,0x819C,0xB0C8, -0xB0C9,0x819D,0xB0CA,0x819E,0x819F,0x81A0,0x81A1,0x81A2, -0xB0CB,0xB0CC,0x81A3,0xB0CD,0xB0CE,0xB0CF,0xB0D0,0x81A4, -0x81A5,0xB0D1,0xB0D2,0xB0D3,0xB0D4,0x81A6,0x81A7,0x81A8, -0xB0D5,0x81A9,0x81AA,0x81AB,0xB0D6,0x81AC,0x81AD,0x81AE, -0x81AF,0x81B0,0x81B1,0x81B2,0xB0D7,0xB0D8,0x81B3,0xB0D9, -0xB0DA,0xB0DB,0x81B4,0x81B5,0x81B6,0x81B7,0x81B8,0x81B9, -0xB0DC,0xB0DD,0xB0DE,0x81BA,0xB0DF,0x81BB,0x81BC,0xB0E0, -0xB0E1,0x81BD,0x81BE,0x81BF,0x81C0,0x81C1,0x81C2,0x81C3, -0xB0E2,0xB0E3,0x81C4,0xB0E4,0xB0E5,0xB0E6,0x81C5,0x81C6, -0x81C7,0xB0E7,0x81C8,0x81C9,0xB0E8,0x81CA,0x81CB,0x81CC, -0xB0E9,0x81CD,0x81CE,0x81CF,0xB0EA,0x81D0,0x81D1,0x81D2, -0x81D3,0x81D4,0x81D5,0x81D6,0x81D7,0xB0EB,0x81D8,0xB0EC, -0x81D9,0x81DA,0x81DB,0x81DC,0x81DD,0x81DE,0x81DF,0x81E0, -0xB0ED,0xB0EE,0x81E1,0x81E2,0xB0EF,0x81E3,0x81E4,0xB0F0, -0xB0F1,0x81E5,0xB0F2,0x81E6,0xB0F3,0x81E7,0x81E8,0xB0F4, -0xB0F5,0xB0F6,0x81E9,0xB0F7,0x81EA,0xB0F8,0xB0F9,0x81EB, -0x81EC,0x81ED,0x81EE,0x81EF,0xB0FA,0xB0FB,0x81F0,0x81F1, -0xB0FC,0x81F2,0x81F3,0x81F4,0xB0FD,0x81F5,0xB0FE,0x81F6, -0x81F7,0x81F8,0x81F9,0x81FA,0xB1A1,0xB1A2,0x81FB,0xB1A3, -0x81FC,0xB1A4,0x81FD,0x81FE,0x8241,0x8242,0x8243,0x8244, -0xB1A5,0x8245,0x8246,0x8247,0xB1A6,0x8248,0x8249,0x824A, -0xB1A7,0x824B,0x824C,0x824D,0x824E,0x824F,0x8250,0x8251, -0x8252,0xB1A8,0x8253,0x8254,0xB1A9,0xB1AA,0x8255,0x8256, -0x8257,0x8258,0x8259,0x825A,0xB1AB,0xB1AC,0x8261,0x8262, -0xB1AD,0x8263,0x8264,0x8265,0xB1AE,0x8266,0x8267,0x8268, -0x8269,0x826A,0x826B,0x826C,0xB1AF,0xB1B0,0x826D,0xB1B1, -0x826E,0xB1B2,0x826F,0x8270,0x8271,0x8272,0x8273,0x8274, -0xB1B3,0x8275,0x8276,0x8277,0xB1B4,0x8278,0x8279,0x827A, -0xB1B5,0x8281,0x8282,0x8283,0x8284,0x8285,0x8286,0x8287, -0x8288,0xB1B6,0x8289,0xB1B7,0x828A,0x828B,0x828C,0x828D, -0x828E,0x828F,0x8290,0x8291,0xB1B8,0xB1B9,0x8292,0x8293, -0xB1BA,0x8294,0x8295,0xB1BB,0xB1BC,0xB1BD,0xB1BE,0x8296, -0x8297,0x8298,0x8299,0xB1BF,0xB1C0,0xB1C1,0x829A,0xB1C2, -0x829B,0xB1C3,0xB1C4,0x829C,0x829D,0x829E,0x829F,0x82A0, -0xB1C5,0xB1C6,0x82A1,0x82A2,0xB1C7,0x82A3,0x82A4,0x82A5, -0xB1C8,0x82A6,0x82A7,0x82A8,0x82A9,0x82AA,0x82AB,0x82AC, -0x82AD,0x82AE,0x82AF,0x82B0,0xB1C9,0xB1CA,0x82B1,0x82B2, -0x82B3,0x82B4,0x82B5,0x82B6,0xB1CB,0x82B7,0x82B8,0x82B9, -0x82BA,0x82BB,0x82BC,0x82BD,0x82BE,0x82BF,0x82C0,0x82C1, -0x82C2,0x82C3,0x82C4,0x82C5,0x82C6,0x82C7,0x82C8,0xB1CC, -0x82C9,0x82CA,0x82CB,0x82CC,0x82CD,0x82CE,0x82CF,0x82D0, -0xB1CD,0xB1CE,0x82D1,0x82D2,0xB1CF,0x82D3,0x82D4,0x82D5, -0xB1D0,0x82D6,0x82D7,0x82D8,0x82D9,0x82DA,0x82DB,0x82DC, -0xB1D1,0xB1D2,0x82DD,0xB1D3,0x82DE,0x82DF,0x82E0,0x82E1, -0x82E2,0x82E3,0x82E4,0x82E5,0xB1D4,0x82E6,0x82E7,0x82E8, -0xB1D5,0x82E9,0x82EA,0x82EB,0xB1D6,0x82EC,0x82ED,0x82EE, -0x82EF,0x82F0,0x82F1,0x82F2,0x82F3,0x82F4,0x82F5,0x82F6, -0x82F7,0x82F8,0x82F9,0x82FA,0x82FB,0x82FC,0x82FD,0x82FE, -0xB1D7,0xB1D8,0x8341,0x8342,0xB1D9,0x8343,0x8344,0xB1DA, -0xB1DB,0xB1DC,0x8345,0x8346,0x8347,0x8348,0x8349,0x834A, -0xB1DD,0xB1DE,0x834B,0xB1DF,0x834C,0xB1E0,0x834D,0x834E, -0x834F,0x8350,0x8351,0x8352,0xB1E1,0x8353,0x8354,0x8355, -0x8356,0x8357,0x8358,0x8359,0x835A,0x8361,0x8362,0x8363, -0x8364,0x8365,0x8366,0x8367,0x8368,0x8369,0x836A,0x836B, -0x836C,0x836D,0x836E,0x836F,0x8370,0x8371,0x8372,0x8373, -0xB1E2,0xB1E3,0x8374,0x8375,0xB1E4,0x8376,0x8377,0xB1E5, -0xB1E6,0x8378,0xB1E7,0x8379,0x837A,0x8381,0x8382,0x8383, -0xB1E8,0xB1E9,0x8384,0xB1EA,0x8385,0xB1EB,0xB1EC,0x8386, -0x8387,0x8388,0xB1ED,0x8389,0xB1EE,0xB1EF,0xB1F0,0x838A, -0xB1F1,0x838B,0x838C,0x838D,0xB1F2,0x838E,0xB1F3,0x838F, -0x8390,0x8391,0x8392,0x8393,0xB1F4,0xB1F5,0x8394,0xB1F6, -0xB1F7,0xB1F8,0x8395,0x8396,0x8397,0xB1F9,0x8398,0x8399, -0xB1FA,0xB1FB,0x839A,0x839B,0xB1FC,0x839C,0x839D,0x839E, -0xB1FD,0x839F,0x83A0,0x83A1,0x83A2,0x83A3,0x83A4,0x83A5, -0xB1FE,0xB2A1,0x83A6,0xB2A2,0xB2A3,0xB2A4,0x83A7,0x83A8, -0x83A9,0x83AA,0x83AB,0x83AC,0xB2A5,0xB2A6,0x83AD,0x83AE, -0x83AF,0x83B0,0x83B1,0x83B2,0xB2A7,0x83B3,0x83B4,0x83B5, -0x83B6,0x83B7,0x83B8,0x83B9,0x83BA,0x83BB,0x83BC,0x83BD, -0x83BE,0x83BF,0x83C0,0x83C1,0x83C2,0x83C3,0x83C4,0x83C5, -0x83C6,0x83C7,0x83C8,0x83C9,0x83CA,0x83CB,0x83CC,0x83CD, -0x83CE,0x83CF,0x83D0,0x83D1,0x83D2,0x83D3,0x83D4,0x83D5, -0x83D6,0x83D7,0x83D8,0x83D9,0x83DA,0x83DB,0x83DC,0x83DD, -0x83DE,0x83DF,0x83E0,0x83E1,0xB2A8,0xB2A9,0xB2AA,0x83E2, -0xB2AB,0x83E3,0x83E4,0x83E5,0xB2AC,0x83E6,0x83E7,0x83E8, -0x83E9,0x83EA,0x83EB,0x83EC,0xB2AD,0xB2AE,0x83ED,0xB2AF, -0xB2B0,0xB2B1,0x83EE,0x83EF,0x83F0,0x83F1,0x83F2,0x83F3, -0xB2B2,0xB2B3,0x83F4,0x83F5,0xB2B4,0x83F6,0x83F7,0x83F8, -0x83F9,0x83FA,0x83FB,0x83FC,0x83FD,0x83FE,0x8441,0x8442, -0xB2B5,0x8443,0x8444,0xB2B6,0x8445,0xB2B7,0x8446,0x8447, -0x8448,0x8449,0x844A,0x844B,0xB2B8,0x844C,0x844D,0x844E, -0xB2B9,0x844F,0x8450,0x8451,0xB2BA,0x8452,0x8453,0x8454, -0x8455,0x8456,0x8457,0x8458,0x8459,0x845A,0x8461,0xB2BB, -0xB2BC,0x8462,0x8463,0x8464,0x8465,0xB2BD,0x8466,0x8467, -0xB2BE,0x8468,0x8469,0x846A,0x846B,0x846C,0x846D,0x846E, -0x846F,0x8470,0x8471,0x8472,0x8473,0x8474,0x8475,0x8476, -0x8477,0x8478,0x8479,0x847A,0x8481,0x8482,0x8483,0x8484, -0x8485,0x8486,0x8487,0x8488,0xB2BF,0xB2C0,0x8489,0x848A, -0xB2C1,0x848B,0xB2C2,0x848C,0xB2C3,0x848D,0x848E,0x848F, -0x8490,0x8491,0x8492,0x8493,0xB2C4,0xB2C5,0x8494,0xB2C6, -0x8495,0xB2C7,0xB2C8,0xB2C9,0x8496,0x8497,0x8498,0x8499, -0xB2CA,0xB2CB,0x849A,0x849B,0x849C,0x849D,0x849E,0x849F, -0xB2CC,0x84A0,0x84A1,0x84A2,0x84A3,0x84A4,0x84A5,0x84A6, -0x84A7,0x84A8,0x84A9,0x84AA,0xB2CD,0xB2CE,0x84AB,0x84AC, -0x84AD,0x84AE,0x84AF,0x84B0,0xB2CF,0xB2D0,0x84B1,0x84B2, -0x84B3,0x84B4,0x84B5,0x84B6,0x84B7,0x84B8,0x84B9,0x84BA, -0x84BB,0x84BC,0x84BD,0x84BE,0x84BF,0x84C0,0x84C1,0x84C2, -0x84C3,0xB2D1,0x84C4,0x84C5,0x84C6,0x84C7,0x84C8,0x84C9, -0xB2D2,0x84CA,0x84CB,0x84CC,0xB2D3,0x84CD,0x84CE,0x84CF, -0xB2D4,0x84D0,0x84D1,0x84D2,0x84D3,0x84D4,0x84D5,0x84D6, -0xB2D5,0xB2D6,0x84D7,0x84D8,0x84D9,0xB2D7,0x84DA,0x84DB, -0x84DC,0x84DD,0x84DE,0x84DF,0xB2D8,0x84E0,0x84E1,0x84E2, -0x84E3,0x84E4,0x84E5,0x84E6,0x84E7,0x84E8,0x84E9,0x84EA, -0x84EB,0x84EC,0x84ED,0x84EE,0x84EF,0x84F0,0x84F1,0x84F2, -0x84F3,0x84F4,0x84F5,0x84F6,0x84F7,0x84F8,0x84F9,0x84FA, -0xB2D9,0xB2DA,0x84FB,0x84FC,0xB2DB,0x84FD,0x84FE,0x8541, -0xB2DC,0x8542,0x8543,0x8544,0x8545,0x8546,0x8547,0xB2DD, -0xB2DE,0xB2DF,0x8548,0xB2E0,0x8549,0xB2E1,0xB2E2,0x854A, -0x854B,0x854C,0x854D,0x854E,0xB2E3,0x854F,0x8550,0x8551, -0x8552,0x8553,0x8554,0x8555,0xB2E4,0x8556,0x8557,0x8558, -0x8559,0x855A,0x8561,0x8562,0x8563,0x8564,0x8565,0x8566, -0xB2E5,0xB2E6,0x8567,0x8568,0x8569,0x856A,0x856B,0x856C, -0xB2E7,0xB2E8,0x856D,0x856E,0xB2E9,0x856F,0x8570,0x8571, -0xB2EA,0x8572,0x8573,0x8574,0x8575,0x8576,0x8577,0x8578, -0xB2EB,0xB2EC,0x8579,0x857A,0xB2ED,0x8581,0x8582,0x8583, -0x8584,0x8585,0x8586,0x8587,0xB2EE,0x8588,0x8589,0x858A, -0xB2EF,0x858B,0x858C,0x858D,0xB2F0,0x858E,0x858F,0x8590, -0x8591,0x8592,0x8593,0x8594,0xB2F1,0xB2F2,0x8595,0x8596, -0x8597,0x8598,0x8599,0x859A,0x859B,0x859C,0x859D,0x859E, -0xB2F3,0x859F,0x85A0,0x85A1,0x85A2,0x85A3,0x85A4,0x85A5, -0x85A6,0x85A7,0x85A8,0x85A9,0x85AA,0x85AB,0x85AC,0x85AD, -0x85AE,0x85AF,0x85B0,0x85B1,0x85B2,0x85B3,0x85B4,0x85B5, -0x85B6,0x85B7,0x85B8,0x85B9,0xB2F4,0xB2F5,0x85BA,0x85BB, -0xB2F6,0x85BC,0xB2F7,0x85BD,0xB2F8,0x85BE,0xB2F9,0x85BF, -0x85C0,0x85C1,0x85C2,0xB2FA,0xB2FB,0xB2FC,0x85C3,0xB2FD, -0x85C4,0xB2FE,0x85C5,0x85C6,0x85C7,0xB3A1,0x85C8,0x85C9, -0x85CA,0x85CB,0x85CC,0x85CD,0x85CE,0x85CF,0x85D0,0x85D1, -0x85D2,0x85D3,0x85D4,0x85D5,0x85D6,0x85D7,0x85D8,0x85D9, -0x85DA,0x85DB,0x85DC,0x85DD,0x85DE,0x85DF,0x85E0,0x85E1, -0x85E2,0x85E3,0x85E4,0x85E5,0xB3A2,0xB3A3,0x85E6,0x85E7, -0xB3A4,0x85E8,0x85E9,0x85EA,0xB3A5,0x85EB,0x85EC,0x85ED, -0x85EE,0x85EF,0x85F0,0x85F1,0xB3A6,0xB3A7,0x85F2,0xB3A8, -0x85F3,0xB3A9,0x85F4,0x85F5,0x85F6,0x85F7,0x85F8,0x85F9, -0xB3AA,0xB3AB,0xB3AC,0x85FA,0xB3AD,0x85FB,0x85FC,0xB3AE, -0xB3AF,0xB3B0,0xB3B1,0x85FD,0x85FE,0x8641,0x8642,0x8643, -0xB3B2,0xB3B3,0x8644,0xB3B4,0xB3B5,0xB3B6,0xB3B7,0xB3B8, -0x8645,0xB3B9,0x8646,0xB3BA,0xB3BB,0xB3BC,0x8647,0x8648, -0xB3BD,0x8649,0x864A,0x864B,0xB3BE,0x864C,0x864D,0x864E, -0x864F,0x8650,0x8651,0x8652,0xB3BF,0xB3C0,0x8653,0xB3C1, -0xB3C2,0xB3C3,0x8654,0x8655,0x8656,0x8657,0x8658,0x8659, -0xB3C4,0xB3C5,0x865A,0x8661,0xB3C6,0x8662,0x8663,0x8664, -0xB3C7,0x8665,0x8666,0x8667,0x8668,0x8669,0x866A,0x866B, -0xB3C8,0x866C,0x866D,0x866E,0x866F,0xB3C9,0x8670,0x8671, -0x8672,0x8673,0x8674,0x8675,0x8676,0x8677,0x8678,0x8679, -0x867A,0x8681,0x8682,0x8683,0x8684,0x8685,0x8686,0x8687, -0x8688,0x8689,0x868A,0x868B,0x868C,0x868D,0x868E,0x868F, -0x8690,0x8691,0x8692,0x8693,0x8694,0x8695,0x8696,0x8697, -0xB3CA,0xB3CB,0x8698,0xB3CC,0xB3CD,0x8699,0x869A,0x869B, -0xB3CE,0x869C,0xB3CF,0xB3D0,0x869D,0x869E,0x869F,0x86A0, -0xB3D1,0xB3D2,0x86A1,0xB3D3,0xB3D4,0xB3D5,0x86A2,0x86A3, -0x86A4,0x86A5,0x86A6,0xB3D6,0xB3D7,0xB3D8,0x86A7,0x86A8, -0xB3D9,0x86A9,0x86AA,0x86AB,0xB3DA,0x86AC,0x86AD,0x86AE, -0x86AF,0x86B0,0x86B1,0x86B2,0xB3DB,0xB3DC,0x86B3,0xB3DD, -0xB3DE,0xB3DF,0x86B4,0x86B5,0x86B6,0x86B7,0x86B8,0x86B9, -0xB3E0,0xB3E1,0x86BA,0x86BB,0xB3E2,0x86BC,0x86BD,0x86BE, -0xB3E3,0x86BF,0x86C0,0x86C1,0x86C2,0x86C3,0x86C4,0x86C5, -0xB3E4,0xB3E5,0x86C6,0x86C7,0xB3E6,0xB3E7,0x86C8,0x86C9, -0xB3E8,0x86CA,0x86CB,0x86CC,0xB3E9,0x86CD,0x86CE,0x86CF, -0xB3EA,0x86D0,0x86D1,0x86D2,0x86D3,0x86D4,0x86D5,0x86D6, -0x86D7,0x86D8,0x86D9,0x86DA,0x86DB,0x86DC,0x86DD,0x86DE, -0x86DF,0x86E0,0x86E1,0x86E2,0x86E3,0x86E4,0x86E5,0x86E6, -0xB3EB,0xB3EC,0x86E7,0x86E8,0xB3ED,0x86E9,0x86EA,0x86EB, -0xB3EE,0x86EC,0xB3EF,0x86ED,0x86EE,0x86EF,0x86F0,0x86F1, -0xB3F0,0xB3F1,0x86F2,0xB3F2,0x86F3,0xB3F3,0x86F4,0x86F5, -0x86F6,0x86F7,0xB3F4,0xB3F5,0xB3F6,0x86F8,0x86F9,0x86FA, -0xB3F7,0x86FB,0x86FC,0x86FD,0xB3F8,0x86FE,0x8741,0x8742, -0x8743,0x8744,0x8745,0x8746,0x8747,0x8748,0x8749,0x874A, -0xB3F9,0x874B,0x874C,0x874D,0x874E,0x874F,0x8750,0x8751, -0x8752,0x8753,0x8754,0x8755,0x8756,0x8757,0x8758,0x8759, -0x875A,0x8761,0x8762,0x8763,0x8764,0x8765,0x8766,0x8767, -0x8768,0x8769,0x876A,0x876B,0x876C,0x876D,0x876E,0x876F, -0x8770,0x8771,0x8772,0x8773,0xB3FA,0x8774,0x8775,0x8776, -0xB3FB,0x8777,0x8778,0x8779,0xB3FC,0x877A,0x8781,0x8782, -0x8783,0x8784,0x8785,0x8786,0xB3FD,0xB3FE,0x8787,0xB4A1, -0x8788,0x8789,0x878A,0x878B,0x878C,0x878D,0x878E,0x878F, -0xB4A2,0xB4A3,0x8790,0x8791,0xB4A4,0x8792,0x8793,0x8794, -0xB4A5,0x8795,0x8796,0x8797,0x8798,0x8799,0x879A,0x879B, -0x879C,0xB4A6,0x879D,0xB4A7,0x879E,0xB4A8,0x879F,0x87A0, -0x87A1,0x87A2,0x87A3,0x87A4,0xB4A9,0xB4AA,0x87A5,0x87A6, -0xB4AB,0x87A7,0x87A8,0xB4AC,0xB4AD,0x87A9,0x87AA,0x87AB, -0x87AC,0x87AD,0x87AE,0x87AF,0xB4AE,0xB4AF,0x87B0,0xB4B0, -0x87B1,0xB4B1,0x87B2,0x87B3,0x87B4,0x87B5,0x87B6,0x87B7, -0xB4B2,0x87B8,0x87B9,0x87BA,0x87BB,0x87BC,0x87BD,0x87BE, -0x87BF,0x87C0,0x87C1,0x87C2,0x87C3,0x87C4,0x87C5,0x87C6, -0x87C7,0x87C8,0x87C9,0x87CA,0xB4B3,0x87CB,0x87CC,0x87CD, -0x87CE,0x87CF,0x87D0,0x87D1,0xB4B4,0x87D2,0x87D3,0x87D4, -0x87D5,0x87D6,0x87D7,0x87D8,0x87D9,0x87DA,0x87DB,0x87DC, -0x87DD,0x87DE,0x87DF,0x87E0,0x87E1,0x87E2,0x87E3,0x87E4, -0x87E5,0x87E6,0x87E7,0x87E8,0x87E9,0x87EA,0x87EB,0x87EC, -0xB4B5,0x87ED,0x87EE,0x87EF,0xB4B6,0x87F0,0x87F1,0x87F2, -0xB4B7,0x87F3,0x87F4,0x87F5,0x87F6,0x87F7,0x87F8,0x87F9, -0xB4B8,0xB4B9,0x87FA,0x87FB,0x87FC,0x87FD,0x87FE,0x8841, -0x8842,0x8843,0x8844,0x8845,0xB4BA,0xB4BB,0x8846,0x8847, -0x8848,0x8849,0x884A,0x884B,0xB4BC,0x884C,0x884D,0x884E, -0x884F,0x8850,0x8851,0x8852,0xB4BD,0xB4BE,0x8853,0x8854, -0x8855,0xB4BF,0x8856,0x8857,0x8858,0x8859,0x885A,0x8861, -0xB4C0,0xB4C1,0x8862,0x8863,0xB4C2,0x8864,0x8865,0x8866, -0xB4C3,0xB4C4,0xB4C5,0x8867,0x8868,0x8869,0x886A,0x886B, -0xB4C6,0xB4C7,0x886C,0xB4C8,0x886D,0xB4C9,0xB4CA,0x886E, -0x886F,0x8870,0xB4CB,0x8871,0xB4CC,0x8872,0x8873,0x8874, -0xB4CD,0x8875,0x8876,0x8877,0xB4CE,0x8878,0x8879,0x887A, -0x8881,0x8882,0x8883,0x8884,0x8885,0x8886,0x8887,0x8888, -0x8889,0x888A,0x888B,0x888C,0x888D,0x888E,0x888F,0x8890, -0xB4CF,0xB4D0,0x8891,0x8892,0xB4D1,0x8893,0x8894,0x8895, -0xB4D2,0x8896,0xB4D3,0x8897,0x8898,0x8899,0x889A,0x889B, -0xB4D4,0xB4D5,0x889C,0xB4D6,0x889D,0xB4D7,0x889E,0x889F, -0x88A0,0x88A1,0xB4D8,0x88A2,0xB4D9,0xB4DA,0xB4DB,0x88A3, -0xB4DC,0x88A4,0x88A5,0xB4DD,0xB4DE,0xB4DF,0xB4E0,0xB4E1, -0x88A6,0x88A7,0x88A8,0xB4E2,0xB4E3,0xB4E4,0x88A9,0xB4E5, -0xB4E6,0xB4E7,0xB4E8,0xB4E9,0x88AA,0x88AB,0x88AC,0xB4EA, -0xB4EB,0xB4EC,0x88AD,0x88AE,0xB4ED,0x88AF,0x88B0,0x88B1, -0xB4EE,0x88B2,0x88B3,0x88B4,0x88B5,0x88B6,0x88B7,0x88B8, -0xB4EF,0xB4F0,0x88B9,0xB4F1,0xB4F2,0xB4F3,0x88BA,0x88BB, -0x88BC,0x88BD,0x88BE,0x88BF,0xB4F4,0x88C0,0x88C1,0x88C2, -0x88C3,0x88C4,0x88C5,0x88C6,0x88C7,0x88C8,0x88C9,0x88CA, -0x88CB,0x88CC,0x88CD,0x88CE,0x88CF,0x88D0,0x88D1,0x88D2, -0x88D3,0x88D4,0x88D5,0x88D6,0x88D7,0x88D8,0x88D9,0x88DA, -0x88DB,0x88DC,0x88DD,0x88DE,0x88DF,0x88E0,0x88E1,0x88E2, -0x88E3,0x88E4,0x88E5,0x88E6,0x88E7,0x88E8,0x88E9,0x88EA, -0x88EB,0x88EC,0x88ED,0x88EE,0x88EF,0x88F0,0x88F1,0x88F2, -0x88F3,0x88F4,0x88F5,0x88F6,0xB4F5,0xB4F6,0xB4F7,0x88F7, -0xB4F8,0x88F8,0x88F9,0xB4F9,0xB4FA,0x88FA,0xB4FB,0xB4FC, -0x88FB,0x88FC,0x88FD,0x88FE,0xB4FD,0xB4FE,0x8941,0xB5A1, -0x8942,0xB5A2,0x8943,0xB5A3,0x8944,0x8945,0xB5A4,0x8946, -0xB5A5,0xB5A6,0x8947,0x8948,0xB5A7,0x8949,0x894A,0x894B, -0xB5A8,0x894C,0x894D,0x894E,0x894F,0x8950,0x8951,0x8952, -0xB5A9,0xB5AA,0x8953,0xB5AB,0xB5AC,0xB5AD,0x8954,0x8955, -0x8956,0x8957,0x8958,0x8959,0xB5AE,0x895A,0x8961,0x8962, -0xB5AF,0x8963,0x8964,0x8965,0xB5B0,0x8966,0x8967,0x8968, -0x8969,0x896A,0x896B,0x896C,0x896D,0x896E,0x896F,0x8970, -0xB5B1,0xB5B2,0x8971,0x8972,0x8973,0x8974,0x8975,0x8976, -0xB5B3,0x8977,0x8978,0x8979,0xB5B4,0x897A,0x8981,0x8982, -0x8983,0x8984,0x8985,0x8986,0x8987,0x8988,0x8989,0x898A, -0x898B,0x898C,0x898D,0x898E,0x898F,0x8990,0x8991,0x8992, -0x8993,0x8994,0x8995,0x8996,0xB5B5,0xB5B6,0x8997,0x8998, -0xB5B7,0x8999,0x899A,0xB5B8,0xB5B9,0x899B,0xB5BA,0x899C, -0xB5BB,0x899D,0x899E,0x899F,0xB5BC,0xB5BD,0x89A0,0xB5BE, -0x89A1,0xB5BF,0x89A2,0xB5C0,0x89A3,0xB5C1,0x89A4,0x89A5, -0xB5C2,0x89A6,0x89A7,0x89A8,0xB5C3,0x89A9,0x89AA,0x89AB, -0xB5C4,0x89AC,0x89AD,0x89AE,0x89AF,0x89B0,0x89B1,0x89B2, -0x89B3,0x89B4,0x89B5,0x89B6,0x89B7,0x89B8,0x89B9,0x89BA, -0x89BB,0x89BC,0x89BD,0x89BE,0xB5C5,0x89BF,0x89C0,0x89C1, -0x89C2,0x89C3,0x89C4,0x89C5,0x89C6,0x89C7,0x89C8,0x89C9, -0x89CA,0x89CB,0x89CC,0x89CD,0x89CE,0x89CF,0x89D0,0x89D1, -0xB5C6,0x89D2,0x89D3,0x89D4,0x89D5,0x89D6,0x89D7,0x89D8, -0xB5C7,0x89D9,0x89DA,0x89DB,0xB5C8,0x89DC,0x89DD,0x89DE, -0xB5C9,0x89DF,0x89E0,0x89E1,0x89E2,0x89E3,0x89E4,0x89E5, -0xB5CA,0xB5CB,0x89E6,0xB5CC,0x89E7,0x89E8,0x89E9,0x89EA, -0x89EB,0x89EC,0x89ED,0x89EE,0xB5CD,0x89EF,0x89F0,0x89F1, -0x89F2,0x89F3,0x89F4,0x89F5,0x89F6,0x89F7,0x89F8,0x89F9, -0x89FA,0x89FB,0x89FC,0x89FD,0x89FE,0x8A41,0x8A42,0x8A43, -0x8A44,0x8A45,0x8A46,0x8A47,0x8A48,0x8A49,0x8A4A,0x8A4B, -0xB5CE,0xB5CF,0x8A4C,0x8A4D,0xB5D0,0x8A4E,0x8A4F,0x8A50, -0xB5D1,0x8A51,0x8A52,0x8A53,0x8A54,0x8A55,0x8A56,0x8A57, -0xB5D2,0xB5D3,0x8A58,0xB5D4,0x8A59,0xB5D5,0x8A5A,0x8A61, -0x8A62,0x8A63,0x8A64,0x8A65,0xB5D6,0x8A66,0x8A67,0x8A68, -0x8A69,0x8A6A,0x8A6B,0x8A6C,0x8A6D,0x8A6E,0x8A6F,0x8A70, -0x8A71,0x8A72,0x8A73,0x8A74,0x8A75,0x8A76,0x8A77,0x8A78, -0xB5D7,0x8A79,0x8A7A,0x8A81,0x8A82,0x8A83,0x8A84,0x8A85, -0xB5D8,0x8A86,0x8A87,0x8A88,0x8A89,0x8A8A,0x8A8B,0x8A8C, -0x8A8D,0x8A8E,0x8A8F,0x8A90,0x8A91,0x8A92,0x8A93,0x8A94, -0x8A95,0x8A96,0x8A97,0x8A98,0x8A99,0xB5D9,0x8A9A,0x8A9B, -0x8A9C,0x8A9D,0x8A9E,0x8A9F,0xB5DA,0x8AA0,0x8AA1,0x8AA2, -0xB5DB,0x8AA3,0x8AA4,0x8AA5,0xB5DC,0x8AA6,0x8AA7,0x8AA8, -0x8AA9,0x8AAA,0x8AAB,0x8AAC,0x8AAD,0xB5DD,0x8AAE,0xB5DE, -0x8AAF,0xB5DF,0x8AB0,0x8AB1,0x8AB2,0x8AB3,0x8AB4,0x8AB5, -0xB5E0,0x8AB6,0x8AB7,0x8AB8,0xB5E1,0x8AB9,0x8ABA,0x8ABB, -0xB5E2,0x8ABC,0x8ABD,0x8ABE,0x8ABF,0x8AC0,0x8AC1,0x8AC2, -0xB5E3,0x8AC3,0x8AC4,0x8AC5,0x8AC6,0xB5E4,0x8AC7,0x8AC8, -0x8AC9,0x8ACA,0x8ACB,0x8ACC,0xB5E5,0xB5E6,0x8ACD,0x8ACE, -0xB5E7,0x8ACF,0x8AD0,0xB5E8,0xB5E9,0x8AD1,0xB5EA,0x8AD2, -0x8AD3,0x8AD4,0x8AD5,0x8AD6,0xB5EB,0xB5EC,0x8AD7,0xB5ED, -0x8AD8,0xB5EE,0x8AD9,0x8ADA,0x8ADB,0x8ADC,0x8ADD,0x8ADE, -0xB5EF,0x8ADF,0x8AE0,0x8AE1,0x8AE2,0x8AE3,0x8AE4,0x8AE5, -0x8AE6,0x8AE7,0x8AE8,0x8AE9,0x8AEA,0x8AEB,0x8AEC,0x8AED, -0x8AEE,0x8AEF,0x8AF0,0x8AF1,0x8AF2,0x8AF3,0x8AF4,0x8AF5, -0x8AF6,0x8AF7,0x8AF8,0x8AF9,0xB5F0,0xB5F1,0x8AFA,0x8AFB, -0xB5F2,0x8AFC,0x8AFD,0xB5F3,0xB5F4,0x8AFE,0x8B41,0x8B42, -0x8B43,0x8B44,0x8B45,0x8B46,0xB5F5,0xB5F6,0x8B47,0xB5F7, -0xB5F8,0xB5F9,0xB5FA,0x8B48,0x8B49,0x8B4A,0x8B4B,0x8B4C, -0xB5FB,0xB5FC,0x8B4D,0x8B4E,0xB5FD,0x8B4F,0x8B50,0x8B51, -0xB5FE,0x8B52,0x8B53,0x8B54,0x8B55,0x8B56,0x8B57,0x8B58, -0xB6A1,0xB6A2,0x8B59,0xB6A3,0xB6A4,0xB6A5,0x8B5A,0x8B61, -0x8B62,0x8B63,0x8B64,0xB6A6,0xB6A7,0xB6A8,0x8B65,0x8B66, -0xB6A9,0x8B67,0x8B68,0x8B69,0xB6AA,0x8B6A,0x8B6B,0x8B6C, -0x8B6D,0x8B6E,0x8B6F,0x8B70,0xB6AB,0xB6AC,0x8B71,0xB6AD, -0xB6AE,0xB6AF,0x8B72,0x8B73,0x8B74,0x8B75,0x8B76,0x8B77, -0x8B78,0x8B79,0x8B7A,0x8B81,0x8B82,0x8B83,0x8B84,0x8B85, -0x8B86,0x8B87,0x8B88,0x8B89,0x8B8A,0x8B8B,0x8B8C,0x8B8D, -0x8B8E,0x8B8F,0x8B90,0x8B91,0x8B92,0x8B93,0x8B94,0x8B95, -0x8B96,0x8B97,0x8B98,0x8B99,0x8B9A,0x8B9B,0x8B9C,0x8B9D, -0x8B9E,0x8B9F,0x8BA0,0x8BA1,0x8BA2,0x8BA3,0x8BA4,0x8BA5, -0x8BA6,0x8BA7,0x8BA8,0x8BA9,0x8BAA,0x8BAB,0x8BAC,0x8BAD, -0x8BAE,0x8BAF,0x8BB0,0x8BB1,0x8BB2,0x8BB3,0x8BB4,0x8BB5, -0xB6B0,0xB6B1,0x8BB6,0x8BB7,0xB6B2,0x8BB8,0x8BB9,0x8BBA, -0xB6B3,0x8BBB,0xB6B4,0xB6B5,0x8BBC,0x8BBD,0x8BBE,0x8BBF, -0xB6B6,0xB6B7,0x8BC0,0xB6B8,0xB6B9,0xB6BA,0x8BC1,0x8BC2, -0x8BC3,0x8BC4,0x8BC5,0xB6BB,0xB6BC,0xB6BD,0x8BC6,0x8BC7, -0xB6BE,0x8BC8,0x8BC9,0x8BCA,0xB6BF,0x8BCB,0x8BCC,0x8BCD, -0x8BCE,0x8BCF,0x8BD0,0x8BD1,0xB6C0,0xB6C1,0x8BD2,0xB6C2, -0xB6C3,0xB6C4,0x8BD3,0x8BD4,0x8BD5,0x8BD6,0x8BD7,0x8BD8, -0xB6C5,0x8BD9,0x8BDA,0x8BDB,0x8BDC,0x8BDD,0x8BDE,0x8BDF, -0x8BE0,0x8BE1,0x8BE2,0x8BE3,0x8BE4,0x8BE5,0x8BE6,0x8BE7, -0x8BE8,0x8BE9,0x8BEA,0x8BEB,0xB6C6,0x8BEC,0x8BED,0x8BEE, -0x8BEF,0x8BF0,0x8BF1,0x8BF2,0x8BF3,0x8BF4,0x8BF5,0x8BF6, -0x8BF7,0x8BF8,0x8BF9,0x8BFA,0x8BFB,0x8BFC,0x8BFD,0x8BFE, -0x8C41,0x8C42,0x8C43,0x8C44,0x8C45,0x8C46,0x8C47,0x8C48, -0x8C49,0x8C4A,0x8C4B,0x8C4C,0x8C4D,0x8C4E,0x8C4F,0x8C50, -0xB6C7,0xB6C8,0x8C51,0x8C52,0xB6C9,0x8C53,0x8C54,0x8C55, -0xB6CA,0x8C56,0x8C57,0x8C58,0x8C59,0x8C5A,0x8C61,0x8C62, -0x8C63,0x8C64,0x8C65,0x8C66,0x8C67,0xB6CB,0x8C68,0x8C69, -0x8C6A,0x8C6B,0x8C6C,0x8C6D,0xB6CC,0x8C6E,0x8C6F,0x8C70, -0x8C71,0x8C72,0x8C73,0x8C74,0xB6CD,0x8C75,0x8C76,0x8C77, -0x8C78,0x8C79,0x8C7A,0x8C81,0x8C82,0x8C83,0x8C84,0x8C85, -0x8C86,0x8C87,0x8C88,0x8C89,0x8C8A,0x8C8B,0x8C8C,0x8C8D, -0xB6CE,0x8C8E,0x8C8F,0x8C90,0x8C91,0x8C92,0x8C93,0x8C94, -0x8C95,0x8C96,0x8C97,0x8C98,0x8C99,0x8C9A,0x8C9B,0x8C9C, -0x8C9D,0x8C9E,0x8C9F,0x8CA0,0x8CA1,0x8CA2,0x8CA3,0x8CA4, -0x8CA5,0x8CA6,0x8CA7,0x8CA8,0xB6CF,0x8CA9,0x8CAA,0x8CAB, -0xB6D0,0x8CAC,0x8CAD,0x8CAE,0x8CAF,0x8CB0,0x8CB1,0x8CB2, -0x8CB3,0x8CB4,0x8CB5,0x8CB6,0x8CB7,0x8CB8,0x8CB9,0x8CBA, -0x8CBB,0x8CBC,0x8CBD,0x8CBE,0x8CBF,0x8CC0,0x8CC1,0x8CC2, -0x8CC3,0x8CC4,0x8CC5,0x8CC6,0x8CC7,0x8CC8,0x8CC9,0x8CCA, -0x8CCB,0x8CCC,0x8CCD,0x8CCE,0x8CCF,0x8CD0,0x8CD1,0x8CD2, -0x8CD3,0x8CD4,0x8CD5,0x8CD6,0x8CD7,0x8CD8,0x8CD9,0x8CDA, -0x8CDB,0x8CDC,0x8CDD,0x8CDE,0xB6D1,0xB6D2,0x8CDF,0x8CE0, -0xB6D3,0x8CE1,0x8CE2,0x8CE3,0xB6D4,0x8CE4,0x8CE5,0x8CE6, -0x8CE7,0x8CE8,0x8CE9,0xB6D5,0xB6D6,0x8CEA,0x8CEB,0x8CEC, -0x8CED,0xB6D7,0x8CEE,0x8CEF,0x8CF0,0x8CF1,0x8CF2,0x8CF3, -0x8CF4,0x8CF5,0x8CF6,0x8CF7,0x8CF8,0x8CF9,0x8CFA,0x8CFB, -0x8CFC,0x8CFD,0x8CFE,0x8D41,0x8D42,0x8D43,0x8D44,0x8D45, -0x8D46,0x8D47,0x8D48,0x8D49,0x8D4A,0x8D4B,0x8D4C,0x8D4D, -0x8D4E,0x8D4F,0x8D50,0x8D51,0xB6D8,0x8D52,0x8D53,0x8D54, -0x8D55,0x8D56,0x8D57,0x8D58,0x8D59,0x8D5A,0x8D61,0x8D62, -0x8D63,0x8D64,0x8D65,0x8D66,0x8D67,0x8D68,0x8D69,0x8D6A, -0x8D6B,0x8D6C,0x8D6D,0x8D6E,0x8D6F,0x8D70,0x8D71,0x8D72, -0xB6D9,0x8D73,0x8D74,0x8D75,0xB6DA,0x8D76,0x8D77,0x8D78, -0xB6DB,0x8D79,0x8D7A,0x8D81,0x8D82,0x8D83,0x8D84,0x8D85, -0xB6DC,0xB6DD,0x8D86,0x8D87,0x8D88,0xB6DE,0x8D89,0x8D8A, -0x8D8B,0x8D8C,0x8D8D,0x8D8E,0x8D8F,0x8D90,0x8D91,0x8D92, -0x8D93,0x8D94,0x8D95,0x8D96,0x8D97,0x8D98,0x8D99,0x8D9A, -0x8D9B,0x8D9C,0x8D9D,0x8D9E,0x8D9F,0x8DA0,0x8DA1,0x8DA2, -0x8DA3,0x8DA4,0x8DA5,0x8DA6,0x8DA7,0x8DA8,0x8DA9,0x8DAA, -0xB6DF,0xB6E0,0x8DAB,0x8DAC,0xB6E1,0x8DAD,0x8DAE,0xB6E2, -0xB6E3,0x8DAF,0x8DB0,0x8DB1,0x8DB2,0x8DB3,0x8DB4,0x8DB5, -0xB6E4,0xB6E5,0x8DB6,0xB6E6,0x8DB7,0x8DB8,0x8DB9,0x8DBA, -0x8DBB,0x8DBC,0x8DBD,0x8DBE,0xB6E7,0x8DBF,0x8DC0,0x8DC1, -0xB6E8,0x8DC2,0x8DC3,0x8DC4,0xB6E9,0x8DC5,0x8DC6,0x8DC7, -0x8DC8,0x8DC9,0x8DCA,0x8DCB,0xB6EA,0xB6EB,0x8DCC,0x8DCD, -0x8DCE,0x8DCF,0x8DD0,0x8DD1,0x8DD2,0x8DD3,0x8DD4,0x8DD5, -0xB6EC,0x8DD6,0x8DD7,0x8DD8,0xB6ED,0x8DD9,0x8DDA,0x8DDB, -0xB6EE,0x8DDC,0x8DDD,0x8DDE,0x8DDF,0x8DE0,0x8DE1,0x8DE2, -0xB6EF,0xB6F0,0x8DE3,0xB6F1,0x8DE4,0xB6F2,0x8DE5,0x8DE6, -0x8DE7,0x8DE8,0x8DE9,0x8DEA,0xB6F3,0xB6F4,0x8DEB,0x8DEC, -0xB6F5,0x8DED,0x8DEE,0x8DEF,0xB6F6,0x8DF0,0x8DF1,0x8DF2, -0x8DF3,0x8DF4,0x8DF5,0x8DF6,0xB6F7,0xB6F8,0x8DF7,0xB6F9, -0xB6FA,0xB6FB,0xB6FC,0x8DF8,0x8DF9,0x8DFA,0xB6FD,0xB6FE, -0xB7A1,0xB7A2,0x8DFB,0x8DFC,0xB7A3,0x8DFD,0x8DFE,0x8E41, -0xB7A4,0x8E42,0x8E43,0x8E44,0x8E45,0x8E46,0x8E47,0x8E48, -0xB7A5,0xB7A6,0x8E49,0xB7A7,0xB7A8,0xB7A9,0x8E4A,0x8E4B, -0x8E4C,0x8E4D,0x8E4E,0x8E4F,0xB7AA,0xB7AB,0x8E50,0x8E51, -0xB7AC,0x8E52,0x8E53,0x8E54,0x8E55,0x8E56,0x8E57,0x8E58, -0x8E59,0x8E5A,0x8E61,0x8E62,0x8E63,0x8E64,0x8E65,0xB7AD, -0x8E66,0xB7AE,0x8E67,0x8E68,0x8E69,0x8E6A,0x8E6B,0x8E6C, -0x8E6D,0x8E6E,0x8E6F,0x8E70,0x8E71,0x8E72,0x8E73,0x8E74, -0x8E75,0x8E76,0x8E77,0x8E78,0x8E79,0x8E7A,0x8E81,0x8E82, -0x8E83,0x8E84,0x8E85,0x8E86,0x8E87,0x8E88,0x8E89,0x8E8A, -0x8E8B,0x8E8C,0x8E8D,0x8E8E,0xB7AF,0xB7B0,0x8E8F,0x8E90, -0xB7B1,0x8E91,0x8E92,0x8E93,0xB7B2,0x8E94,0x8E95,0x8E96, -0x8E97,0x8E98,0x8E99,0x8E9A,0xB7B3,0xB7B4,0x8E9B,0xB7B5, -0xB7B6,0xB7B7,0x8E9C,0x8E9D,0x8E9E,0x8E9F,0x8EA0,0xB7B8, -0xB7B9,0xB7BA,0x8EA1,0x8EA2,0xB7BB,0x8EA3,0x8EA4,0x8EA5, -0xB7BC,0x8EA6,0x8EA7,0x8EA8,0x8EA9,0x8EAA,0x8EAB,0x8EAC, -0xB7BD,0xB7BE,0x8EAD,0xB7BF,0x8EAE,0xB7C0,0x8EAF,0x8EB0, -0x8EB1,0x8EB2,0x8EB3,0x8EB4,0xB7C1,0xB7C2,0x8EB5,0x8EB6, -0xB7C3,0x8EB7,0x8EB8,0x8EB9,0xB7C4,0x8EBA,0x8EBB,0x8EBC, -0x8EBD,0x8EBE,0x8EBF,0x8EC0,0xB7C5,0xB7C6,0x8EC1,0xB7C7, -0xB7C8,0xB7C9,0x8EC2,0x8EC3,0x8EC4,0x8EC5,0x8EC6,0x8EC7, -0xB7CA,0x8EC8,0x8EC9,0x8ECA,0xB7CB,0x8ECB,0x8ECC,0x8ECD, -0x8ECE,0x8ECF,0x8ED0,0x8ED1,0x8ED2,0x8ED3,0x8ED4,0x8ED5, -0x8ED6,0xB7CC,0x8ED7,0xB7CD,0x8ED8,0x8ED9,0x8EDA,0x8EDB, -0x8EDC,0x8EDD,0x8EDE,0x8EDF,0xB7CE,0xB7CF,0x8EE0,0x8EE1, -0xB7D0,0x8EE2,0x8EE3,0x8EE4,0xB7D1,0x8EE5,0x8EE6,0x8EE7, -0x8EE8,0x8EE9,0x8EEA,0x8EEB,0xB7D2,0xB7D3,0x8EEC,0xB7D4, -0x8EED,0xB7D5,0x8EEE,0x8EEF,0x8EF0,0x8EF1,0x8EF2,0x8EF3, -0xB7D6,0x8EF4,0x8EF5,0x8EF6,0xB7D7,0x8EF7,0x8EF8,0x8EF9, -0x8EFA,0x8EFB,0x8EFC,0x8EFD,0x8EFE,0x8F41,0x8F42,0x8F43, -0x8F44,0x8F45,0x8F46,0x8F47,0x8F48,0xB7D8,0x8F49,0x8F4A, -0x8F4B,0x8F4C,0x8F4D,0x8F4E,0x8F4F,0x8F50,0x8F51,0x8F52, -0x8F53,0x8F54,0x8F55,0x8F56,0x8F57,0x8F58,0x8F59,0x8F5A, -0x8F61,0x8F62,0x8F63,0x8F64,0x8F65,0x8F66,0x8F67,0x8F68, -0xB7D9,0x8F69,0x8F6A,0x8F6B,0x8F6C,0x8F6D,0x8F6E,0x8F6F, -0xB7DA,0x8F70,0x8F71,0x8F72,0xB7DB,0x8F73,0x8F74,0x8F75, -0xB7DC,0x8F76,0x8F77,0x8F78,0x8F79,0x8F7A,0x8F81,0x8F82, -0xB7DD,0xB7DE,0x8F83,0xB7DF,0x8F84,0xB7E0,0x8F85,0x8F86, -0x8F87,0x8F88,0x8F89,0x8F8A,0xB7E1,0x8F8B,0x8F8C,0x8F8D, -0xB7E2,0x8F8E,0x8F8F,0x8F90,0xB7E3,0x8F91,0x8F92,0x8F93, -0x8F94,0x8F95,0x8F96,0x8F97,0x8F98,0xB7E4,0x8F99,0xB7E5, -0x8F9A,0xB7E6,0x8F9B,0x8F9C,0x8F9D,0x8F9E,0x8F9F,0x8FA0, -0xB7E7,0xB7E8,0x8FA1,0x8FA2,0xB7E9,0x8FA3,0x8FA4,0x8FA5, -0xB7EA,0x8FA6,0x8FA7,0x8FA8,0x8FA9,0x8FAA,0x8FAB,0x8FAC, -0xB7EB,0xB7EC,0x8FAD,0xB7ED,0x8FAE,0xB7EE,0x8FAF,0x8FB0, -0x8FB1,0x8FB2,0x8FB3,0x8FB4,0xB7EF,0x8FB5,0x8FB6,0x8FB7, -0x8FB8,0x8FB9,0x8FBA,0x8FBB,0x8FBC,0x8FBD,0x8FBE,0x8FBF, -0x8FC0,0x8FC1,0x8FC2,0x8FC3,0x8FC4,0x8FC5,0x8FC6,0x8FC7, -0xB7F0,0x8FC8,0x8FC9,0x8FCA,0x8FCB,0x8FCC,0x8FCD,0x8FCE, -0xB7F1,0x8FCF,0x8FD0,0x8FD1,0x8FD2,0x8FD3,0x8FD4,0x8FD5, -0x8FD6,0x8FD7,0x8FD8,0x8FD9,0x8FDA,0x8FDB,0x8FDC,0x8FDD, -0x8FDE,0x8FDF,0x8FE0,0x8FE1,0x8FE2,0x8FE3,0x8FE4,0x8FE5, -0x8FE6,0x8FE7,0x8FE8,0x8FE9,0xB7F2,0xB7F3,0x8FEA,0x8FEB, -0xB7F4,0x8FEC,0x8FED,0x8FEE,0xB7F5,0x8FEF,0x8FF0,0x8FF1, -0x8FF2,0x8FF3,0x8FF4,0x8FF5,0xB7F6,0x8FF6,0x8FF7,0xB7F7, -0x8FF8,0xB7F8,0x8FF9,0x8FFA,0x8FFB,0x8FFC,0x8FFD,0x8FFE, -0xB7F9,0xB7FA,0x9041,0x9042,0xB7FB,0x9043,0x9044,0x9045, -0xB7FC,0x9046,0x9047,0x9048,0x9049,0x904A,0x904B,0x904C, -0xB7FD,0xB7FE,0x904D,0xB8A1,0x904E,0xB8A2,0x904F,0x9050, -0x9051,0x9052,0x9053,0x9054,0xB8A3,0xB8A4,0x9055,0x9056, -0xB8A5,0x9057,0x9058,0x9059,0xB8A6,0x905A,0x9061,0x9062, -0x9063,0x9064,0x9065,0x9066,0xB8A7,0xB8A8,0x9067,0xB8A9, -0x9068,0xB8AA,0xB8AB,0x9069,0x906A,0xB8AC,0xB8AD,0x906B, -0x906C,0x906D,0x906E,0x906F,0x9070,0x9071,0x9072,0x9073, -0x9074,0x9075,0x9076,0x9077,0x9078,0x9079,0x907A,0x9081, -0x9082,0x9083,0x9084,0x9085,0x9086,0x9087,0x9088,0x9089, -0x908A,0x908B,0x908C,0x908D,0xB8AE,0xB8AF,0x908E,0x908F, -0xB8B0,0x9090,0x9091,0x9092,0xB8B1,0x9093,0x9094,0x9095, -0x9096,0x9097,0x9098,0x9099,0xB8B2,0xB8B3,0x909A,0xB8B4, -0x909B,0xB8B5,0x909C,0x909D,0x909E,0x909F,0x90A0,0x90A1, -0xB8B6,0xB8B7,0x90A2,0x90A3,0xB8B8,0x90A4,0xB8B9,0xB8BA, -0xB8BB,0xB8BC,0xB8BD,0x90A5,0x90A6,0x90A7,0x90A8,0x90A9, -0xB8BE,0xB8BF,0x90AA,0xB8C0,0x90AB,0xB8C1,0xB8C2,0x90AC, -0x90AD,0xB8C3,0x90AE,0xB8C4,0xB8C5,0xB8C6,0x90AF,0x90B0, -0xB8C7,0x90B1,0x90B2,0x90B3,0xB8C8,0x90B4,0x90B5,0x90B6, -0x90B7,0x90B8,0x90B9,0x90BA,0xB8C9,0xB8CA,0x90BB,0xB8CB, -0xB8CC,0xB8CD,0xB8CE,0x90BC,0x90BD,0x90BE,0x90BF,0x90C0, -0xB8CF,0xB8D0,0x90C1,0x90C2,0x90C3,0x90C4,0x90C5,0x90C6, -0xB8D1,0x90C7,0x90C8,0x90C9,0x90CA,0x90CB,0x90CC,0x90CD, -0x90CE,0x90CF,0x90D0,0x90D1,0x90D2,0xB8D2,0x90D3,0x90D4, -0x90D5,0x90D6,0x90D7,0x90D8,0x90D9,0x90DA,0x90DB,0x90DC, -0x90DD,0x90DE,0x90DF,0x90E0,0x90E1,0x90E2,0x90E3,0x90E4, -0x90E5,0x90E6,0x90E7,0x90E8,0x90E9,0x90EA,0x90EB,0x90EC, -0x90ED,0x90EE,0x90EF,0x90F0,0x90F1,0x90F2,0x90F3,0x90F4, -0xB8D3,0xB8D4,0x90F5,0x90F6,0xB8D5,0x90F7,0x90F8,0x90F9, -0xB8D6,0x90FA,0xB8D7,0x90FB,0x90FC,0x90FD,0x90FE,0x9141, -0xB8D8,0xB8D9,0x9142,0xB8DA,0x9143,0xB8DB,0xB8DC,0x9144, -0x9145,0x9146,0x9147,0xB8DD,0xB8DE,0xB8DF,0x9148,0x9149, -0xB8E0,0x914A,0x914B,0x914C,0xB8E1,0x914D,0x914E,0x914F, -0x9150,0x9151,0x9152,0x9153,0xB8E2,0xB8E3,0x9154,0xB8E4, -0xB8E5,0xB8E6,0x9155,0x9156,0x9157,0x9158,0x9159,0x915A, -0xB8E7,0xB8E8,0x9161,0x9162,0xB8E9,0x9163,0x9164,0x9165, -0xB8EA,0x9166,0x9167,0x9168,0x9169,0x916A,0x916B,0x916C, -0x916D,0x916E,0x916F,0xB8EB,0xB8EC,0xB8ED,0x9170,0xB8EE, -0x9171,0x9172,0x9173,0x9174,0xB8EF,0x9175,0x9176,0x9177, -0x9178,0x9179,0x917A,0x9181,0x9182,0x9183,0x9184,0x9185, -0x9186,0x9187,0x9188,0x9189,0x918A,0x918B,0x918C,0x918D, -0x918E,0x918F,0x9190,0x9191,0x9192,0x9193,0x9194,0x9195, -0xB8F0,0xB8F1,0x9196,0xB8F2,0xB8F3,0x9197,0x9198,0x9199, -0xB8F4,0x919A,0xB8F5,0x919B,0x919C,0x919D,0x919E,0x919F, -0xB8F6,0xB8F7,0x91A0,0xB8F8,0x91A1,0xB8F9,0x91A2,0x91A3, -0x91A4,0x91A5,0x91A6,0x91A7,0xB8FA,0x91A8,0x91A9,0x91AA, -0xB8FB,0x91AB,0x91AC,0x91AD,0x91AE,0x91AF,0x91B0,0x91B1, -0x91B2,0x91B3,0x91B4,0x91B5,0x91B6,0x91B7,0x91B8,0x91B9, -0xB8FC,0xB8FD,0x91BA,0x91BB,0x91BC,0x91BD,0x91BE,0x91BF, -0x91C0,0x91C1,0x91C2,0x91C3,0x91C4,0x91C5,0x91C6,0x91C7, -0x91C8,0x91C9,0x91CA,0x91CB,0x91CC,0x91CD,0x91CE,0x91CF, -0x91D0,0x91D1,0x91D2,0x91D3,0x91D4,0x91D5,0x91D6,0x91D7, -0x91D8,0x91D9,0x91DA,0x91DB,0xB8FE,0x91DC,0x91DD,0x91DE, -0xB9A1,0x91DF,0x91E0,0x91E1,0xB9A2,0x91E2,0x91E3,0x91E4, -0x91E5,0x91E6,0x91E7,0x91E8,0x91E9,0xB9A3,0x91EA,0xB9A4, -0x91EB,0xB9A5,0x91EC,0x91ED,0x91EE,0x91EF,0x91F0,0x91F1, -0xB9A6,0x91F2,0x91F3,0x91F4,0xB9A7,0x91F5,0x91F6,0x91F7, -0xB9A8,0x91F8,0x91F9,0x91FA,0x91FB,0x91FC,0x91FD,0x91FE, -0x9241,0xB9A9,0x9242,0xB9AA,0x9243,0x9244,0x9245,0x9246, -0x9247,0x9248,0x9249,0x924A,0xB9AB,0xB9AC,0xB9AD,0x924B, -0xB9AE,0x924C,0x924D,0xB9AF,0xB9B0,0xB9B1,0xB9B2,0x924E, -0x924F,0x9250,0x9251,0x9252,0xB9B3,0xB9B4,0x9253,0xB9B5, -0x9254,0xB9B6,0x9255,0x9256,0x9257,0xB9B7,0x9258,0xB9B8, -0xB9B9,0x9259,0x925A,0x9261,0xB9BA,0x9262,0x9263,0x9264, -0xB9BB,0x9265,0x9266,0x9267,0x9268,0x9269,0x926A,0x926B, -0x926C,0xB9BC,0x926D,0xB9BD,0x926E,0x926F,0x9270,0x9271, -0x9272,0x9273,0x9274,0x9275,0xB9BE,0x9276,0x9277,0x9278, -0x9279,0x927A,0x9281,0x9282,0x9283,0x9284,0x9285,0x9286, -0x9287,0x9288,0x9289,0x928A,0x928B,0x928C,0x928D,0x928E, -0x928F,0x9290,0x9291,0x9292,0x9293,0x9294,0x9295,0x9296, -0xB9BF,0x9297,0x9298,0x9299,0xB9C0,0x929A,0x929B,0x929C, -0xB9C1,0x929D,0x929E,0x929F,0x92A0,0x92A1,0x92A2,0x92A3, -0x92A4,0x92A5,0x92A6,0x92A7,0x92A8,0x92A9,0x92AA,0x92AB, -0x92AC,0x92AD,0x92AE,0x92AF,0xB9C2,0x92B0,0x92B1,0x92B2, -0xB9C3,0x92B3,0x92B4,0x92B5,0xB9C4,0x92B6,0x92B7,0x92B8, -0x92B9,0x92BA,0x92BB,0x92BC,0xB9C5,0x92BD,0x92BE,0xB9C6, -0x92BF,0x92C0,0x92C1,0x92C2,0x92C3,0x92C4,0x92C5,0x92C6, -0xB9C7,0x92C7,0x92C8,0x92C9,0xB9C8,0x92CA,0x92CB,0x92CC, -0xB9C9,0x92CD,0x92CE,0x92CF,0x92D0,0x92D1,0x92D2,0x92D3, -0xB9CA,0x92D4,0x92D5,0xB9CB,0x92D6,0x92D7,0x92D8,0x92D9, -0x92DA,0x92DB,0x92DC,0x92DD,0x92DE,0x92DF,0x92E0,0x92E1, -0x92E2,0x92E3,0x92E4,0x92E5,0x92E6,0x92E7,0x92E8,0x92E9, -0x92EA,0x92EB,0x92EC,0x92ED,0x92EE,0x92EF,0x92F0,0x92F1, -0x92F2,0x92F3,0x92F4,0x92F5,0x92F6,0x92F7,0x92F8,0x92F9, -0xB9CC,0xB9CD,0x92FA,0x92FB,0xB9CE,0x92FC,0x92FD,0xB9CF, -0xB9D0,0x92FE,0xB9D1,0x9341,0x9342,0x9343,0x9344,0x9345, -0xB9D2,0xB9D3,0x9346,0xB9D4,0xB9D5,0xB9D6,0x9347,0xB9D7, -0x9348,0xB9D8,0x9349,0x934A,0xB9D9,0xB9DA,0xB9DB,0xB9DC, -0xB9DD,0x934B,0x934C,0xB9DE,0xB9DF,0xB9E0,0xB9E1,0xB9E2, -0x934D,0x934E,0x934F,0x9350,0xB9E3,0xB9E4,0x9351,0xB9E5, -0x9352,0xB9E6,0x9353,0x9354,0x9355,0xB9E7,0x9356,0x9357, -0xB9E8,0xB9E9,0x9358,0x9359,0xB9EA,0x935A,0x9361,0x9362, -0xB9EB,0x9363,0x9364,0x9365,0x9366,0x9367,0x9368,0x9369, -0xB9EC,0xB9ED,0x936A,0xB9EE,0xB9EF,0xB9F0,0x936B,0x936C, -0x936D,0xB9F1,0x936E,0x936F,0xB9F2,0xB9F3,0x9370,0x9371, -0xB9F4,0x9372,0x9373,0x9374,0x9375,0x9376,0x9377,0x9378, -0x9379,0x937A,0x9381,0x9382,0x9383,0xB9F5,0x9384,0x9385, -0x9386,0x9387,0x9388,0x9389,0x938A,0x938B,0x938C,0x938D, -0x938E,0x938F,0x9390,0x9391,0x9392,0x9393,0x9394,0x9395, -0x9396,0x9397,0x9398,0x9399,0x939A,0x939B,0x939C,0x939D, -0x939E,0x939F,0x93A0,0x93A1,0x93A2,0x93A3,0x93A4,0x93A5, -0x93A6,0x93A7,0x93A8,0x93A9,0xB9F6,0xB9F7,0x93AA,0x93AB, -0xB9F8,0x93AC,0x93AD,0xB9F9,0xB9FA,0x93AE,0xB9FB,0x93AF, -0x93B0,0x93B1,0x93B2,0x93B3,0xB9FC,0xB9FD,0x93B4,0xB9FE, -0x93B5,0xBAA1,0xBAA2,0x93B6,0x93B7,0x93B8,0x93B9,0x93BA, -0xBAA3,0xBAA4,0x93BB,0x93BC,0xBAA5,0x93BD,0x93BE,0xBAA6, -0xBAA7,0x93BF,0x93C0,0x93C1,0x93C2,0x93C3,0x93C4,0x93C5, -0xBAA8,0xBAA9,0x93C6,0xBAAA,0xBAAB,0xBAAC,0x93C7,0x93C8, -0x93C9,0x93CA,0x93CB,0x93CC,0xBAAD,0xBAAE,0x93CD,0x93CE, -0xBAAF,0x93CF,0x93D0,0x93D1,0xBAB0,0x93D2,0x93D3,0x93D4, -0x93D5,0x93D6,0x93D7,0x93D8,0x93D9,0xBAB1,0x93DA,0xBAB2, -0xBAB3,0xBAB4,0x93DB,0x93DC,0x93DD,0xBAB5,0x93DE,0x93DF, -0xBAB6,0x93E0,0x93E1,0x93E2,0xBAB7,0x93E3,0x93E4,0x93E5, -0x93E6,0x93E7,0x93E8,0x93E9,0x93EA,0x93EB,0x93EC,0x93ED, -0x93EE,0x93EF,0x93F0,0x93F1,0x93F2,0x93F3,0x93F4,0x93F5, -0x93F6,0x93F7,0x93F8,0x93F9,0xBAB8,0xBAB9,0xBABA,0x93FA, -0xBABB,0x93FB,0x93FC,0x93FD,0xBABC,0x93FE,0x9441,0x9442, -0x9443,0x9444,0x9445,0x9446,0xBABD,0xBABE,0x9447,0xBABF, -0x9448,0xBAC0,0x9449,0x944A,0x944B,0x944C,0x944D,0x944E, -0xBAC1,0x944F,0x9450,0x9451,0xBAC2,0x9452,0x9453,0x9454, -0x9455,0x9456,0x9457,0x9458,0x9459,0x945A,0x9461,0x9462, -0x9463,0x9464,0x9465,0x9466,0xBAC3,0x9467,0x9468,0x9469, -0x946A,0x946B,0x946C,0x946D,0xBAC4,0x946E,0x946F,0x9470, -0x9471,0x9472,0x9473,0x9474,0x9475,0x9476,0x9477,0x9478, -0x9479,0x947A,0x9481,0x9482,0x9483,0x9484,0x9485,0x9486, -0xBAC5,0x9487,0x9488,0x9489,0x948A,0x948B,0x948C,0x948D, -0xBAC6,0xBAC7,0x948E,0x948F,0xBAC8,0x9490,0x9491,0x9492, -0xBAC9,0x9493,0x9494,0x9495,0x9496,0x9497,0x9498,0x9499, -0xBACA,0xBACB,0x949A,0x949B,0x949C,0x949D,0x949E,0x949F, -0x94A0,0x94A1,0x94A2,0x94A3,0xBACC,0x94A4,0x94A5,0x94A6, -0xBACD,0x94A7,0x94A8,0x94A9,0x94AA,0x94AB,0x94AC,0x94AD, -0x94AE,0x94AF,0x94B0,0x94B1,0x94B2,0x94B3,0x94B4,0x94B5, -0x94B6,0x94B7,0x94B8,0x94B9,0x94BA,0x94BB,0x94BC,0x94BD, -0xBACE,0xBACF,0x94BE,0x94BF,0xBAD0,0x94C0,0x94C1,0xBAD1, -0xBAD2,0xBAD3,0xBAD4,0x94C2,0x94C3,0x94C4,0x94C5,0x94C6, -0xBAD5,0xBAD6,0x94C7,0xBAD7,0x94C8,0xBAD8,0x94C9,0x94CA, -0x94CB,0xBAD9,0xBADA,0x94CC,0xBADB,0x94CD,0x94CE,0x94CF, -0x94D0,0x94D1,0x94D2,0x94D3,0xBADC,0x94D4,0x94D5,0x94D6, -0x94D7,0x94D8,0x94D9,0x94DA,0x94DB,0x94DC,0x94DD,0x94DE, -0xBADD,0x94DF,0x94E0,0x94E1,0x94E2,0x94E3,0x94E4,0x94E5, -0xBADE,0x94E6,0x94E7,0x94E8,0x94E9,0x94EA,0x94EB,0x94EC, -0x94ED,0x94EE,0x94EF,0x94F0,0x94F1,0x94F2,0x94F3,0x94F4, -0x94F5,0x94F6,0x94F7,0x94F8,0x94F9,0x94FA,0x94FB,0x94FC, -0x94FD,0x94FE,0x9541,0x9542,0xBADF,0xBAE0,0x9543,0x9544, -0xBAE1,0x9545,0x9546,0x9547,0xBAE2,0x9548,0x9549,0x954A, -0x954B,0x954C,0x954D,0x954E,0x954F,0x9550,0x9551,0x9552, -0x9553,0xBAE3,0x9554,0x9555,0x9556,0x9557,0x9558,0x9559, -0xBAE4,0x955A,0x9561,0x9562,0xBAE5,0x9563,0x9564,0x9565, -0xBAE6,0x9566,0x9567,0x9568,0x9569,0x956A,0x956B,0x956C, -0xBAE7,0x956D,0x956E,0xBAE8,0x956F,0xBAE9,0x9570,0x9571, -0x9572,0x9573,0x9574,0x9575,0xBAEA,0xBAEB,0x9576,0x9577, -0xBAEC,0x9578,0x9579,0x957A,0xBAED,0x9581,0x9582,0x9583, -0x9584,0x9585,0x9586,0x9587,0xBAEE,0xBAEF,0x9588,0xBAF0, -0x9589,0x958A,0x958B,0x958C,0x958D,0x958E,0x958F,0x9590, -0x9591,0x9592,0x9593,0x9594,0x9595,0x9596,0x9597,0x9598, -0x9599,0x959A,0x959B,0x959C,0x959D,0x959E,0x959F,0x95A0, -0x95A1,0x95A2,0x95A3,0x95A4,0x95A5,0x95A6,0x95A7,0x95A8, -0x95A9,0x95AA,0x95AB,0x95AC,0xBAF1,0xBAF2,0x95AD,0x95AE, -0xBAF3,0x95AF,0x95B0,0x95B1,0xBAF4,0x95B2,0xBAF5,0x95B3, -0x95B4,0x95B5,0x95B6,0x95B7,0xBAF6,0xBAF7,0x95B8,0xBAF8, -0x95B9,0xBAF9,0xBAFA,0xBAFB,0x95BA,0x95BB,0x95BC,0x95BD, -0xBAFC,0xBAFD,0x95BE,0x95BF,0xBAFE,0x95C0,0x95C1,0x95C2, -0xBBA1,0x95C3,0xBBA2,0x95C4,0x95C5,0x95C6,0x95C7,0x95C8, -0xBBA3,0xBBA4,0x95C9,0xBBA5,0xBBA6,0xBBA7,0x95CA,0x95CB, -0x95CC,0x95CD,0x95CE,0xBBA8,0xBBA9,0xBBAA,0x95CF,0x95D0, -0xBBAB,0x95D1,0x95D2,0x95D3,0xBBAC,0x95D4,0x95D5,0x95D6, -0x95D7,0x95D8,0x95D9,0x95DA,0xBBAD,0xBBAE,0x95DB,0xBBAF, -0xBBB0,0xBBB1,0x95DC,0x95DD,0x95DE,0x95DF,0x95E0,0x95E1, -0xBBB2,0xBBB3,0x95E2,0x95E3,0x95E4,0x95E5,0x95E6,0x95E7, -0x95E8,0x95E9,0x95EA,0x95EB,0x95EC,0x95ED,0x95EE,0x95EF, -0xBBB4,0x95F0,0x95F1,0x95F2,0x95F3,0x95F4,0x95F5,0x95F6, -0x95F7,0x95F8,0x95F9,0x95FA,0x95FB,0x95FC,0x95FD,0x95FE, -0x9641,0x9642,0x9643,0x9644,0x9645,0x9646,0x9647,0x9648, -0x9649,0x964A,0x964B,0x964C,0x964D,0x964E,0x964F,0x9650, -0x9651,0x9652,0x9653,0x9654,0x9655,0x9656,0x9657,0x9658, -0xBBB5,0xBBB6,0x9659,0x965A,0xBBB7,0x9661,0x9662,0xBBB8, -0xBBB9,0x9663,0x9664,0x9665,0x9666,0x9667,0x9668,0x9669, -0xBBBA,0x966A,0x966B,0xBBBB,0xBBBC,0xBBBD,0x966C,0x966D, -0x966E,0x966F,0x9670,0x9671,0xBBBE,0x9672,0x9673,0x9674, -0x9675,0x9676,0x9677,0x9678,0x9679,0x967A,0x9681,0x9682, -0x9683,0x9684,0x9685,0x9686,0x9687,0x9688,0x9689,0x968A, -0x968B,0xBBBF,0x968C,0x968D,0x968E,0x968F,0x9690,0x9691, -0xBBC0,0xBBC1,0x9692,0x9693,0x9694,0x9695,0x9696,0x9697, -0x9698,0x9699,0x969A,0x969B,0x969C,0x969D,0x969E,0x969F, -0xBBC2,0xBBC3,0x96A0,0xBBC4,0xBBC5,0xBBC6,0x96A1,0x96A2, -0x96A3,0x96A4,0x96A5,0x96A6,0x96A7,0x96A8,0x96A9,0x96AA, -0x96AB,0x96AC,0x96AD,0x96AE,0x96AF,0x96B0,0x96B1,0x96B2, -0x96B3,0x96B4,0x96B5,0x96B6,0x96B7,0x96B8,0x96B9,0x96BA, -0x96BB,0x96BC,0x96BD,0x96BE,0x96BF,0x96C0,0x96C1,0x96C2, -0xBBC7,0xBBC8,0x96C3,0x96C4,0xBBC9,0x96C5,0x96C6,0x96C7, -0xBBCA,0x96C8,0x96C9,0x96CA,0x96CB,0x96CC,0x96CD,0x96CE, -0xBBCB,0xBBCC,0x96CF,0x96D0,0x96D1,0xBBCD,0x96D2,0x96D3, -0x96D4,0x96D5,0x96D6,0x96D7,0x96D8,0x96D9,0x96DA,0x96DB, -0x96DC,0x96DD,0x96DE,0x96DF,0x96E0,0x96E1,0x96E2,0x96E3, -0x96E4,0x96E5,0x96E6,0x96E7,0x96E8,0x96E9,0x96EA,0x96EB, -0x96EC,0x96ED,0x96EE,0x96EF,0x96F0,0x96F1,0x96F2,0x96F3, -0x96F4,0x96F5,0x96F6,0x96F7,0x96F8,0x96F9,0x96FA,0x96FB, -0x96FC,0x96FD,0x96FE,0x9741,0x9742,0x9743,0x9744,0x9745, -0x9746,0x9747,0x9748,0x9749,0x974A,0x974B,0x974C,0x974D, -0x974E,0x974F,0x9750,0x9751,0xBBCE,0x9752,0x9753,0x9754, -0x9755,0x9756,0x9757,0x9758,0x9759,0x975A,0x9761,0x9762, -0x9763,0x9764,0x9765,0x9766,0x9767,0x9768,0x9769,0x976A, -0x976B,0x976C,0x976D,0x976E,0x976F,0x9770,0x9771,0x9772, -0xBBCF,0x9773,0x9774,0x9775,0x9776,0x9777,0x9778,0x9779, -0x977A,0x9781,0x9782,0x9783,0x9784,0x9785,0x9786,0x9787, -0x9788,0x9789,0x978A,0x978B,0x978C,0xBBD0,0x978D,0x978E, -0x978F,0x9790,0x9791,0x9792,0xBBD1,0xBBD2,0x9793,0x9794, -0xBBD3,0x9795,0x9796,0x9797,0xBBD4,0x9798,0x9799,0x979A, -0x979B,0x979C,0x979D,0x979E,0xBBD5,0x979F,0x97A0,0xBBD6, -0x97A1,0xBBD7,0x97A2,0x97A3,0x97A4,0x97A5,0x97A6,0x97A7, -0x97A8,0x97A9,0x97AA,0x97AB,0x97AC,0x97AD,0x97AE,0x97AF, -0x97B0,0x97B1,0x97B2,0x97B3,0x97B4,0x97B5,0x97B6,0x97B7, -0x97B8,0x97B9,0x97BA,0x97BB,0x97BC,0x97BD,0x97BE,0x97BF, -0x97C0,0x97C1,0x97C2,0x97C3,0x97C4,0x97C5,0x97C6,0x97C7, -0x97C8,0x97C9,0x97CA,0x97CB,0x97CC,0x97CD,0x97CE,0x97CF, -0x97D0,0x97D1,0x97D2,0x97D3,0x97D4,0x97D5,0x97D6,0x97D7, -0x97D8,0x97D9,0x97DA,0x97DB,0x97DC,0x97DD,0x97DE,0x97DF, -0x97E0,0x97E1,0x97E2,0x97E3,0x97E4,0x97E5,0x97E6,0x97E7, -0x97E8,0x97E9,0x97EA,0x97EB,0x97EC,0x97ED,0x97EE,0x97EF, -0x97F0,0x97F1,0x97F2,0x97F3,0x97F4,0x97F5,0x97F6,0x97F7, -0x97F8,0x97F9,0x97FA,0x97FB,0xBBD8,0x97FC,0x97FD,0x97FE, -0x9841,0x9842,0x9843,0x9844,0x9845,0x9846,0x9847,0x9848, -0x9849,0x984A,0x984B,0x984C,0x984D,0x984E,0x984F,0x9850, -0x9851,0xBBD9,0x9852,0x9853,0x9854,0x9855,0x9856,0x9857, -0xBBDA,0x9858,0x9859,0x985A,0xBBDB,0x9861,0x9862,0x9863, -0xBBDC,0x9864,0x9865,0x9866,0x9867,0x9868,0x9869,0x986A, -0xBBDD,0xBBDE,0x986B,0x986C,0x986D,0x986E,0x986F,0x9870, -0x9871,0x9872,0x9873,0x9874,0x9875,0x9876,0x9877,0x9878, -0x9879,0x987A,0x9881,0x9882,0x9883,0x9884,0x9885,0x9886, -0x9887,0x9888,0x9889,0x988A,0x988B,0x988C,0x988D,0x988E, -0x988F,0x9890,0x9891,0x9892,0x9893,0x9894,0x9895,0x9896, -0xBBDF,0xBBE0,0x9897,0x9898,0xBBE1,0x9899,0x989A,0x989B, -0xBBE2,0x989C,0x989D,0x989E,0x989F,0x98A0,0x98A1,0x98A2, -0xBBE3,0xBBE4,0x98A3,0xBBE5,0x98A4,0xBBE6,0x98A5,0x98A6, -0x98A7,0x98A8,0x98A9,0x98AA,0xBBE7,0xBBE8,0x98AB,0xBBE9, -0xBBEA,0x98AC,0x98AD,0xBBEB,0xBBEC,0xBBED,0xBBEE,0x98AE, -0x98AF,0x98B0,0x98B1,0x98B2,0xBBEF,0xBBF0,0x98B3,0xBBF1, -0xBBF2,0xBBF3,0x98B4,0x98B5,0x98B6,0xBBF4,0x98B7,0x98B8, -0xBBF5,0xBBF6,0x98B9,0x98BA,0xBBF7,0x98BB,0x98BC,0x98BD, -0xBBF8,0x98BE,0x98BF,0x98C0,0x98C1,0x98C2,0x98C3,0x98C4, -0xBBF9,0xBBFA,0x98C5,0xBBFB,0xBBFC,0xBBFD,0x98C6,0x98C7, -0x98C8,0x98C9,0x98CA,0x98CB,0xBBFE,0xBCA1,0x98CC,0x98CD, -0xBCA2,0x98CE,0x98CF,0x98D0,0xBCA3,0x98D1,0x98D2,0x98D3, -0x98D4,0x98D5,0x98D6,0x98D7,0xBCA4,0xBCA5,0x98D8,0xBCA6, -0x98D9,0xBCA7,0x98DA,0x98DB,0x98DC,0x98DD,0x98DE,0x98DF, -0xBCA8,0x98E0,0x98E1,0x98E2,0xBCA9,0x98E3,0x98E4,0x98E5, -0xBCAA,0x98E6,0x98E7,0x98E8,0x98E9,0x98EA,0x98EB,0x98EC, -0xBCAB,0x98ED,0x98EE,0x98EF,0x98F0,0xBCAC,0x98F1,0x98F2, -0x98F3,0x98F4,0x98F5,0x98F6,0xBCAD,0xBCAE,0xBCAF,0xBCB0, -0xBCB1,0x98F7,0x98F8,0xBCB2,0xBCB3,0x98F9,0xBCB4,0xBCB5, -0x98FA,0x98FB,0x98FC,0x98FD,0xBCB6,0xBCB7,0x98FE,0xBCB8, -0xBCB9,0xBCBA,0x9941,0x9942,0x9943,0x9944,0xBCBB,0x9945, -0xBCBC,0xBCBD,0x9946,0x9947,0xBCBE,0x9948,0x9949,0x994A, -0xBCBF,0x994B,0x994C,0x994D,0x994E,0x994F,0x9950,0x9951, -0xBCC0,0xBCC1,0x9952,0xBCC2,0xBCC3,0xBCC4,0x9953,0x9954, -0x9955,0x9956,0x9957,0x9958,0xBCC5,0xBCC6,0x9959,0x995A, -0xBCC7,0x9961,0x9962,0x9963,0xBCC8,0x9964,0x9965,0x9966, -0x9967,0x9968,0x9969,0x996A,0xBCC9,0xBCCA,0x996B,0xBCCB, -0xBCCC,0xBCCD,0x996C,0x996D,0x996E,0x996F,0x9970,0x9971, -0xBCCE,0x9972,0x9973,0x9974,0xBCCF,0x9975,0x9976,0x9977, -0xBCD0,0x9978,0x9979,0x997A,0x9981,0x9982,0x9983,0x9984, -0x9985,0x9986,0x9987,0x9988,0x9989,0xBCD1,0x998A,0x998B, -0x998C,0x998D,0x998E,0x998F,0xBCD2,0xBCD3,0xBCD4,0x9990, -0xBCD5,0x9991,0x9992,0x9993,0xBCD6,0x9994,0xBCD7,0x9995, -0x9996,0x9997,0x9998,0x9999,0xBCD8,0xBCD9,0x999A,0xBCDA, -0x999B,0xBCDB,0x999C,0x999D,0x999E,0xBCDC,0x999F,0x99A0, -0xBCDD,0xBCDE,0x99A1,0x99A2,0xBCDF,0x99A3,0x99A4,0x99A5, -0xBCE0,0x99A6,0x99A7,0x99A8,0x99A9,0x99AA,0x99AB,0x99AC, -0x99AD,0x99AE,0x99AF,0x99B0,0x99B1,0xBCE1,0x99B2,0x99B3, -0x99B4,0x99B5,0x99B6,0x99B7,0xBCE2,0x99B8,0x99B9,0x99BA, -0xBCE3,0x99BB,0x99BC,0x99BD,0xBCE4,0x99BE,0x99BF,0x99C0, -0x99C1,0x99C2,0x99C3,0x99C4,0xBCE5,0x99C5,0x99C6,0xBCE6, -0xBCE7,0x99C7,0x99C8,0x99C9,0x99CA,0x99CB,0x99CC,0x99CD, -0xBCE8,0x99CE,0x99CF,0x99D0,0xBCE9,0x99D1,0x99D2,0x99D3, -0xBCEA,0x99D4,0x99D5,0x99D6,0x99D7,0x99D8,0x99D9,0x99DA, -0xBCEB,0xBCEC,0x99DB,0xBCED,0x99DC,0x99DD,0x99DE,0x99DF, -0x99E0,0x99E1,0x99E2,0x99E3,0xBCEE,0xBCEF,0x99E4,0x99E5, -0xBCF0,0x99E6,0x99E7,0x99E8,0xBCF1,0x99E9,0x99EA,0x99EB, -0x99EC,0x99ED,0x99EE,0x99EF,0xBCF2,0xBCF3,0x99F0,0xBCF4, -0x99F1,0xBCF5,0x99F2,0x99F3,0x99F4,0x99F5,0x99F6,0x99F7, -0xBCF6,0xBCF7,0x99F8,0x99F9,0xBCF8,0x99FA,0x99FB,0xBCF9, -0xBCFA,0x99FC,0x99FD,0x99FE,0x9A41,0x9A42,0x9A43,0x9A44, -0xBCFB,0xBCFC,0x9A45,0xBCFD,0x9A46,0xBCFE,0x9A47,0xBDA1, -0x9A48,0xBDA2,0xBDA3,0x9A49,0xBDA4,0x9A4A,0x9A4B,0x9A4C, -0x9A4D,0x9A4E,0x9A4F,0x9A50,0x9A51,0x9A52,0x9A53,0x9A54, -0x9A55,0x9A56,0x9A57,0x9A58,0x9A59,0x9A5A,0x9A61,0x9A62, -0xBDA5,0x9A63,0x9A64,0x9A65,0x9A66,0x9A67,0x9A68,0x9A69, -0xBDA6,0xBDA7,0x9A6A,0x9A6B,0xBDA8,0x9A6C,0x9A6D,0x9A6E, -0xBDA9,0x9A6F,0x9A70,0x9A71,0x9A72,0x9A73,0x9A74,0x9A75, -0xBDAA,0x9A76,0x9A77,0x9A78,0x9A79,0xBDAB,0x9A7A,0x9A81, -0x9A82,0x9A83,0x9A84,0x9A85,0xBDAC,0xBDAD,0x9A86,0x9A87, -0xBDAE,0x9A88,0x9A89,0x9A8A,0xBDAF,0x9A8B,0x9A8C,0x9A8D, -0x9A8E,0x9A8F,0x9A90,0x9A91,0xBDB0,0xBDB1,0x9A92,0xBDB2, -0x9A93,0xBDB3,0x9A94,0x9A95,0x9A96,0x9A97,0x9A98,0x9A99, -0xBDB4,0xBDB5,0x9A9A,0x9A9B,0x9A9C,0x9A9D,0x9A9E,0x9A9F, -0xBDB6,0x9AA0,0x9AA1,0x9AA2,0x9AA3,0x9AA4,0x9AA5,0x9AA6, -0xBDB7,0x9AA7,0x9AA8,0xBDB8,0x9AA9,0xBDB9,0x9AAA,0x9AAB, -0x9AAC,0x9AAD,0x9AAE,0x9AAF,0xBDBA,0xBDBB,0x9AB0,0x9AB1, -0xBDBC,0x9AB2,0x9AB3,0x9AB4,0xBDBD,0xBDBE,0x9AB5,0x9AB6, -0x9AB7,0x9AB8,0x9AB9,0x9ABA,0xBDBF,0xBDC0,0x9ABB,0xBDC1, -0x9ABC,0xBDC2,0x9ABD,0x9ABE,0x9ABF,0x9AC0,0x9AC1,0x9AC2, -0x9AC3,0x9AC4,0x9AC5,0x9AC6,0x9AC7,0x9AC8,0x9AC9,0x9ACA, -0x9ACB,0x9ACC,0x9ACD,0x9ACE,0x9ACF,0x9AD0,0x9AD1,0x9AD2, -0x9AD3,0x9AD4,0x9AD5,0x9AD6,0x9AD7,0x9AD8,0x9AD9,0x9ADA, -0x9ADB,0x9ADC,0x9ADD,0x9ADE,0xBDC3,0xBDC4,0x9ADF,0x9AE0, -0xBDC5,0x9AE1,0x9AE2,0xBDC6,0xBDC7,0x9AE3,0x9AE4,0x9AE5, -0x9AE6,0x9AE7,0x9AE8,0xBDC8,0xBDC9,0xBDCA,0x9AE9,0xBDCB, -0x9AEA,0xBDCC,0x9AEB,0x9AEC,0x9AED,0x9AEE,0xBDCD,0x9AEF, -0xBDCE,0xBDCF,0x9AF0,0xBDD0,0xBDD1,0x9AF1,0x9AF2,0x9AF3, -0xBDD2,0x9AF4,0x9AF5,0x9AF6,0x9AF7,0x9AF8,0x9AF9,0x9AFA, -0xBDD3,0xBDD4,0x9AFB,0x9AFC,0xBDD5,0xBDD6,0x9AFD,0x9AFE, -0x9B41,0x9B42,0x9B43,0xBDD7,0xBDD8,0xBDD9,0x9B44,0x9B45, -0xBDDA,0x9B46,0x9B47,0x9B48,0xBDDB,0x9B49,0x9B4A,0x9B4B, -0x9B4C,0x9B4D,0x9B4E,0x9B4F,0xBDDC,0xBDDD,0x9B50,0x9B51, -0xBDDE,0xBDDF,0x9B52,0x9B53,0x9B54,0x9B55,0x9B56,0x9B57, -0x9B58,0x9B59,0x9B5A,0x9B61,0x9B62,0x9B63,0x9B64,0x9B65, -0x9B66,0x9B67,0x9B68,0x9B69,0x9B6A,0x9B6B,0x9B6C,0x9B6D, -0x9B6E,0x9B6F,0x9B70,0x9B71,0x9B72,0xBDE0,0x9B73,0x9B74, -0x9B75,0x9B76,0x9B77,0x9B78,0x9B79,0x9B7A,0x9B81,0x9B82, -0x9B83,0x9B84,0x9B85,0x9B86,0x9B87,0x9B88,0x9B89,0x9B8A, -0x9B8B,0x9B8C,0x9B8D,0x9B8E,0x9B8F,0x9B90,0x9B91,0x9B92, -0x9B93,0x9B94,0x9B95,0x9B96,0x9B97,0x9B98,0x9B99,0x9B9A, -0xBDE1,0xBDE2,0x9B9B,0x9B9C,0xBDE3,0x9B9D,0x9B9E,0x9B9F, -0xBDE4,0x9BA0,0xBDE5,0x9BA1,0x9BA2,0x9BA3,0x9BA4,0x9BA5, -0xBDE6,0xBDE7,0x9BA6,0x9BA7,0xBDE8,0xBDE9,0x9BA8,0x9BA9, -0x9BAA,0x9BAB,0x9BAC,0x9BAD,0xBDEA,0x9BAE,0x9BAF,0x9BB0, -0xBDEB,0x9BB1,0x9BB2,0x9BB3,0xBDEC,0x9BB4,0x9BB5,0x9BB6, -0x9BB7,0x9BB8,0x9BB9,0x9BBA,0x9BBB,0x9BBC,0x9BBD,0x9BBE, -0x9BBF,0x9BC0,0x9BC1,0x9BC2,0x9BC3,0x9BC4,0x9BC5,0x9BC6, -0x9BC7,0x9BC8,0x9BC9,0x9BCA,0x9BCB,0x9BCC,0x9BCD,0x9BCE, -0x9BCF,0x9BD0,0x9BD1,0x9BD2,0x9BD3,0x9BD4,0x9BD5,0x9BD6, -0x9BD7,0x9BD8,0x9BD9,0x9BDA,0x9BDB,0x9BDC,0x9BDD,0x9BDE, -0x9BDF,0x9BE0,0x9BE1,0x9BE2,0x9BE3,0x9BE4,0x9BE5,0x9BE6, -0xBDED,0x9BE7,0x9BE8,0x9BE9,0x9BEA,0x9BEB,0x9BEC,0x9BED, -0x9BEE,0x9BEF,0x9BF0,0x9BF1,0x9BF2,0x9BF3,0x9BF4,0x9BF5, -0x9BF6,0x9BF7,0x9BF8,0x9BF9,0x9BFA,0x9BFB,0x9BFC,0x9BFD, -0xBDEE,0xBDEF,0x9BFE,0x9C41,0xBDF0,0x9C42,0x9C43,0xBDF1, -0xBDF2,0x9C44,0xBDF3,0x9C45,0x9C46,0x9C47,0x9C48,0x9C49, -0xBDF4,0xBDF5,0x9C4A,0x9C4B,0x9C4C,0xBDF6,0x9C4D,0x9C4E, -0x9C4F,0x9C50,0x9C51,0x9C52,0xBDF7,0xBDF8,0x9C53,0x9C54, -0xBDF9,0x9C55,0x9C56,0x9C57,0x9C58,0x9C59,0x9C5A,0x9C61, -0x9C62,0x9C63,0x9C64,0x9C65,0x9C66,0x9C67,0x9C68,0x9C69, -0xBDFA,0x9C6A,0x9C6B,0x9C6C,0x9C6D,0x9C6E,0x9C6F,0x9C70, -0xBDFB,0x9C71,0x9C72,0x9C73,0x9C74,0x9C75,0x9C76,0x9C77, -0x9C78,0x9C79,0x9C7A,0x9C81,0x9C82,0x9C83,0x9C84,0x9C85, -0x9C86,0x9C87,0x9C88,0x9C89,0xBDFC,0x9C8A,0x9C8B,0x9C8C, -0x9C8D,0x9C8E,0x9C8F,0x9C90,0xBDFD,0x9C91,0x9C92,0x9C93, -0xBDFE,0x9C94,0x9C95,0x9C96,0xBEA1,0x9C97,0x9C98,0x9C99, -0x9C9A,0x9C9B,0x9C9C,0x9C9D,0xBEA2,0xBEA3,0x9C9E,0x9C9F, -0x9CA0,0x9CA1,0x9CA2,0x9CA3,0x9CA4,0x9CA5,0x9CA6,0x9CA7, -0xBEA4,0x9CA8,0x9CA9,0x9CAA,0x9CAB,0x9CAC,0x9CAD,0x9CAE, -0x9CAF,0x9CB0,0x9CB1,0x9CB2,0x9CB3,0x9CB4,0x9CB5,0x9CB6, -0x9CB7,0x9CB8,0x9CB9,0x9CBA,0x9CBB,0x9CBC,0x9CBD,0x9CBE, -0x9CBF,0x9CC0,0x9CC1,0x9CC2,0xBEA5,0xBEA6,0x9CC3,0x9CC4, -0xBEA7,0x9CC5,0x9CC6,0x9CC7,0xBEA8,0x9CC8,0x9CC9,0x9CCA, -0x9CCB,0x9CCC,0x9CCD,0x9CCE,0xBEA9,0xBEAA,0x9CCF,0x9CD0, -0x9CD1,0xBEAB,0x9CD2,0x9CD3,0x9CD4,0x9CD5,0x9CD6,0x9CD7, -0xBEAC,0x9CD8,0x9CD9,0x9CDA,0x9CDB,0x9CDC,0x9CDD,0x9CDE, -0x9CDF,0x9CE0,0x9CE1,0x9CE2,0x9CE3,0x9CE4,0x9CE5,0x9CE6, -0x9CE7,0x9CE8,0x9CE9,0x9CEA,0xBEAD,0x9CEB,0x9CEC,0x9CED, -0x9CEE,0x9CEF,0x9CF0,0x9CF1,0xBEAE,0x9CF2,0x9CF3,0x9CF4, -0x9CF5,0x9CF6,0x9CF7,0x9CF8,0x9CF9,0x9CFA,0x9CFB,0x9CFC, -0x9CFD,0x9CFE,0x9D41,0x9D42,0x9D43,0x9D44,0x9D45,0x9D46, -0x9D47,0x9D48,0x9D49,0x9D4A,0x9D4B,0x9D4C,0x9D4D,0x9D4E, -0xBEAF,0x9D4F,0x9D50,0x9D51,0xBEB0,0x9D52,0x9D53,0x9D54, -0x9D55,0x9D56,0x9D57,0x9D58,0x9D59,0x9D5A,0x9D61,0x9D62, -0x9D63,0x9D64,0x9D65,0x9D66,0x9D67,0x9D68,0x9D69,0x9D6A, -0x9D6B,0x9D6C,0x9D6D,0x9D6E,0x9D6F,0x9D70,0x9D71,0x9D72, -0x9D73,0x9D74,0x9D75,0x9D76,0x9D77,0x9D78,0x9D79,0x9D7A, -0x9D81,0x9D82,0x9D83,0x9D84,0x9D85,0x9D86,0x9D87,0x9D88, -0x9D89,0xBEB1,0x9D8A,0x9D8B,0x9D8C,0x9D8D,0x9D8E,0x9D8F, -0xBEB2,0xBEB3,0x9D90,0x9D91,0xBEB4,0x9D92,0x9D93,0x9D94, -0xBEB5,0x9D95,0xBEB6,0x9D96,0x9D97,0x9D98,0x9D99,0xBEB7, -0xBEB8,0xBEB9,0x9D9A,0x9D9B,0x9D9C,0x9D9D,0x9D9E,0x9D9F, -0x9DA0,0x9DA1,0x9DA2,0x9DA3,0xBEBA,0x9DA4,0x9DA5,0x9DA6, -0xBEBB,0x9DA7,0x9DA8,0x9DA9,0xBEBC,0x9DAA,0x9DAB,0x9DAC, -0x9DAD,0x9DAE,0x9DAF,0x9DB0,0xBEBD,0x9DB1,0x9DB2,0x9DB3, -0x9DB4,0x9DB5,0x9DB6,0x9DB7,0x9DB8,0x9DB9,0x9DBA,0x9DBB, -0xBEBE,0xBEBF,0x9DBC,0x9DBD,0xBEC0,0x9DBE,0x9DBF,0x9DC0, -0xBEC1,0x9DC1,0x9DC2,0x9DC3,0x9DC4,0x9DC5,0x9DC6,0x9DC7, -0xBEC2,0xBEC3,0x9DC8,0xBEC4,0x9DC9,0xBEC5,0x9DCA,0x9DCB, -0x9DCC,0x9DCD,0x9DCE,0x9DCF,0xBEC6,0xBEC7,0x9DD0,0x9DD1, -0xBEC8,0xBEC9,0xBECA,0x9DD2,0xBECB,0xBECC,0xBECD,0x9DD3, -0x9DD4,0x9DD5,0x9DD6,0xBECE,0xBECF,0xBED0,0x9DD7,0xBED1, -0xBED2,0xBED3,0x9DD8,0x9DD9,0x9DDA,0xBED4,0xBED5,0x9DDB, -0xBED6,0xBED7,0x9DDC,0x9DDD,0xBED8,0x9DDE,0x9DDF,0x9DE0, -0xBED9,0x9DE1,0x9DE2,0x9DE3,0x9DE4,0x9DE5,0x9DE6,0x9DE7, -0xBEDA,0xBEDB,0x9DE8,0xBEDC,0xBEDD,0xBEDE,0x9DE9,0x9DEA, -0x9DEB,0x9DEC,0x9DED,0x9DEE,0xBEDF,0xBEE0,0x9DEF,0x9DF0, -0xBEE1,0x9DF1,0x9DF2,0x9DF3,0xBEE2,0x9DF4,0x9DF5,0xBEE3, -0x9DF6,0x9DF7,0x9DF8,0x9DF9,0xBEE4,0xBEE5,0x9DFA,0xBEE6, -0x9DFB,0xBEE7,0x9DFC,0x9DFD,0x9DFE,0xBEE8,0x9E41,0xBEE9, -0xBEEA,0x9E42,0x9E43,0x9E44,0xBEEB,0x9E45,0x9E46,0x9E47, -0xBEEC,0x9E48,0x9E49,0x9E4A,0x9E4B,0x9E4C,0x9E4D,0x9E4E, -0x9E4F,0xBEED,0x9E50,0x9E51,0x9E52,0x9E53,0x9E54,0x9E55, -0x9E56,0x9E57,0x9E58,0x9E59,0xBEEE,0xBEEF,0x9E5A,0x9E61, -0xBEF0,0xBEF1,0x9E62,0xBEF2,0xBEF3,0xBEF4,0xBEF5,0x9E63, -0x9E64,0x9E65,0x9E66,0x9E67,0xBEF6,0xBEF7,0xBEF8,0xBEF9, -0xBEFA,0xBEFB,0xBEFC,0x9E68,0xBEFD,0x9E69,0xBEFE,0x9E6A, -0xBFA1,0xBFA2,0x9E6B,0x9E6C,0xBFA3,0x9E6D,0x9E6E,0x9E6F, -0xBFA4,0x9E70,0x9E71,0x9E72,0x9E73,0x9E74,0x9E75,0x9E76, -0xBFA5,0xBFA6,0x9E77,0xBFA7,0x9E78,0xBFA8,0x9E79,0x9E7A, -0x9E81,0x9E82,0x9E83,0x9E84,0xBFA9,0xBFAA,0xBFAB,0x9E85, -0xBFAC,0x9E86,0x9E87,0x9E88,0xBFAD,0x9E89,0xBFAE,0xBFAF, -0x9E8A,0x9E8B,0x9E8C,0x9E8D,0xBFB0,0xBFB1,0xBFB2,0xBFB3, -0xBFB4,0xBFB5,0x9E8E,0x9E8F,0x9E90,0xBFB6,0xBFB7,0xBFB8, -0xBFB9,0x9E91,0x9E92,0x9E93,0xBFBA,0x9E94,0x9E95,0x9E96, -0xBFBB,0x9E97,0x9E98,0x9E99,0x9E9A,0x9E9B,0x9E9C,0x9E9D, -0xBFBC,0xBFBD,0x9E9E,0xBFBE,0xBFBF,0x9E9F,0x9EA0,0x9EA1, -0x9EA2,0x9EA3,0x9EA4,0x9EA5,0xBFC0,0xBFC1,0x9EA6,0x9EA7, -0xBFC2,0x9EA8,0x9EA9,0x9EAA,0xBFC3,0xBFC4,0xBFC5,0x9EAB, -0xBFC6,0x9EAC,0x9EAD,0xBFC7,0xBFC8,0xBFC9,0x9EAE,0xBFCA, -0x9EAF,0xBFCB,0x9EB0,0xBFCC,0x9EB1,0x9EB2,0x9EB3,0x9EB4, -0xBFCD,0xBFCE,0x9EB5,0x9EB6,0xBFCF,0x9EB7,0x9EB8,0x9EB9, -0xBFD0,0x9EBA,0x9EBB,0x9EBC,0x9EBD,0x9EBE,0x9EBF,0x9EC0, -0xBFD1,0xBFD2,0x9EC1,0xBFD3,0xBFD4,0xBFD5,0x9EC2,0x9EC3, -0x9EC4,0x9EC5,0x9EC6,0x9EC7,0xBFD6,0xBFD7,0x9EC8,0x9EC9, -0xBFD8,0x9ECA,0x9ECB,0x9ECC,0x9ECD,0x9ECE,0x9ECF,0x9ED0, -0x9ED1,0x9ED2,0x9ED3,0x9ED4,0xBFD9,0x9ED5,0x9ED6,0xBFDA, -0x9ED7,0xBFDB,0x9ED8,0x9ED9,0x9EDA,0x9EDB,0x9EDC,0x9EDD, -0xBFDC,0xBFDD,0x9EDE,0x9EDF,0xBFDE,0x9EE0,0x9EE1,0x9EE2, -0xBFDF,0x9EE3,0x9EE4,0x9EE5,0x9EE6,0x9EE7,0x9EE8,0x9EE9, -0xBFE0,0xBFE1,0x9EEA,0xBFE2,0x9EEB,0xBFE3,0x9EEC,0x9EED, -0x9EEE,0x9EEF,0x9EF0,0x9EF1,0xBFE4,0xBFE5,0x9EF2,0x9EF3, -0xBFE6,0x9EF4,0x9EF5,0x9EF6,0xBFE7,0x9EF7,0x9EF8,0x9EF9, -0x9EFA,0x9EFB,0x9EFC,0x9EFD,0xBFE8,0xBFE9,0x9EFE,0xBFEA, -0x9F41,0xBFEB,0x9F42,0x9F43,0x9F44,0x9F45,0x9F46,0x9F47, -0xBFEC,0xBFED,0x9F48,0x9F49,0xBFEE,0x9F4A,0x9F4B,0x9F4C, -0xBFEF,0xBFF0,0xBFF1,0x9F4D,0x9F4E,0x9F4F,0x9F50,0x9F51, -0xBFF2,0xBFF3,0x9F52,0xBFF4,0x9F53,0xBFF5,0x9F54,0x9F55, -0x9F56,0x9F57,0x9F58,0x9F59,0xBFF6,0xBFF7,0x9F5A,0x9F61, -0xBFF8,0x9F62,0x9F63,0x9F64,0xBFF9,0x9F65,0x9F66,0x9F67, -0x9F68,0x9F69,0x9F6A,0x9F6B,0xBFFA,0xBFFB,0x9F6C,0x9F6D, -0xBFFC,0xBFFD,0x9F6E,0x9F6F,0x9F70,0x9F71,0x9F72,0x9F73, -0xBFFE,0xC0A1,0x9F74,0x9F75,0xC0A2,0x9F76,0x9F77,0x9F78, -0xC0A3,0x9F79,0x9F7A,0x9F81,0x9F82,0x9F83,0x9F84,0x9F85, -0xC0A4,0xC0A5,0x9F86,0x9F87,0x9F88,0xC0A6,0x9F89,0x9F8A, -0x9F8B,0x9F8C,0x9F8D,0x9F8E,0xC0A7,0xC0A8,0x9F8F,0x9F90, -0xC0A9,0x9F91,0x9F92,0x9F93,0xC0AA,0x9F94,0x9F95,0x9F96, -0x9F97,0x9F98,0x9F99,0x9F9A,0xC0AB,0xC0AC,0x9F9B,0xC0AD, -0x9F9C,0xC0AE,0x9F9D,0x9F9E,0x9F9F,0x9FA0,0x9FA1,0x9FA2, -0xC0AF,0xC0B0,0x9FA3,0x9FA4,0xC0B1,0x9FA5,0x9FA6,0x9FA7, -0xC0B2,0x9FA8,0x9FA9,0x9FAA,0x9FAB,0x9FAC,0x9FAD,0x9FAE, -0xC0B3,0xC0B4,0x9FAF,0xC0B5,0x9FB0,0xC0B6,0x9FB1,0xC0B7, -0x9FB2,0x9FB3,0x9FB4,0x9FB5,0xC0B8,0xC0B9,0x9FB6,0x9FB7, -0xC0BA,0x9FB8,0x9FB9,0x9FBA,0xC0BB,0x9FBB,0x9FBC,0x9FBD, -0x9FBE,0x9FBF,0xC0BC,0x9FC0,0xC0BD,0xC0BE,0x9FC1,0xC0BF, -0x9FC2,0xC0C0,0xC0C1,0xC0C2,0xC0C3,0xC0C4,0xC0C5,0xC0C6, -0xC0C7,0x9FC3,0x9FC4,0x9FC5,0xC0C8,0x9FC6,0x9FC7,0x9FC8, -0xC0C9,0x9FC9,0x9FCA,0x9FCB,0x9FCC,0x9FCD,0x9FCE,0x9FCF, -0xC0CA,0x9FD0,0x9FD1,0xC0CB,0x9FD2,0x9FD3,0x9FD4,0x9FD5, -0x9FD6,0x9FD7,0x9FD8,0x9FD9,0xC0CC,0xC0CD,0x9FDA,0x9FDB, -0xC0CE,0x9FDC,0x9FDD,0x9FDE,0xC0CF,0xC0D0,0xC0D1,0x9FDF, -0x9FE0,0x9FE1,0x9FE2,0xC0D2,0xC0D3,0xC0D4,0x9FE3,0xC0D5, -0xC0D6,0xC0D7,0xC0D8,0x9FE4,0x9FE5,0x9FE6,0xC0D9,0x9FE7, -0xC0DA,0xC0DB,0x9FE8,0x9FE9,0xC0DC,0x9FEA,0xC0DD,0xC0DE, -0xC0DF,0x9FEB,0xC0E0,0x9FEC,0x9FED,0x9FEE,0x9FEF,0x9FF0, -0xC0E1,0xC0E2,0x9FF1,0xC0E3,0xC0E4,0xC0E5,0xC0E6,0x9FF2, -0x9FF3,0x9FF4,0x9FF5,0x9FF6,0xC0E7,0xC0E8,0x9FF7,0x9FF8, -0xC0E9,0x9FF9,0x9FFA,0x9FFB,0xC0EA,0x9FFC,0x9FFD,0x9FFE, -0xA041,0xA042,0xA043,0xA044,0xC0EB,0xC0EC,0xA045,0xC0ED, -0xC0EE,0xC0EF,0xA046,0xA047,0xA048,0xA049,0xA04A,0xA04B, -0xC0F0,0xC0F1,0xA04C,0xA04D,0xC0F2,0xA04E,0xC0F3,0xA04F, -0xC0F4,0xA050,0xA051,0xA052,0xA053,0xA054,0xA055,0xA056, -0xC0F5,0xA057,0xA058,0xA059,0xA05A,0xC0F6,0xA061,0xA062, -0xA063,0xA064,0xA065,0xA066,0xC0F7,0xA067,0xA068,0xA069, -0xC0F8,0xA06A,0xA06B,0xA06C,0xC0F9,0xA06D,0xA06E,0xA06F, -0xA070,0xA071,0xA072,0xA073,0xA074,0xA075,0xA076,0xA077, -0xA078,0xA079,0xA07A,0xA081,0xA082,0xA083,0xA084,0xA085, -0xC0FA,0xC0FB,0xA086,0xA087,0xC0FC,0xA088,0xA089,0xA08A, -0xC0FD,0xA08B,0xC0FE,0xA08C,0xA08D,0xA08E,0xA08F,0xA090, -0xC1A1,0xC1A2,0xA091,0xC1A3,0xA092,0xC1A4,0xC1A5,0xA093, -0xA094,0xA095,0xA096,0xA097,0xC1A6,0xC1A7,0xA098,0xA099, -0xC1A8,0xA09A,0xA09B,0xA09C,0xC1A9,0xA09D,0xA09E,0xA09F, -0xA0A0,0xA0A1,0xA0A2,0xA0A3,0xC1AA,0xC1AB,0xA0A4,0xC1AC, -0xA0A5,0xC1AD,0xA0A6,0xA0A7,0xA0A8,0xA0A9,0xA0AA,0xA0AB, -0xC1AE,0xA0AC,0xA0AD,0xA0AE,0xC1AF,0xA0AF,0xA0B0,0xA0B1, -0xC1B0,0xA0B2,0xA0B3,0xA0B4,0xA0B5,0xA0B6,0xA0B7,0xA0B8, -0xC1B1,0xC1B2,0xA0B9,0xA0BA,0xC1B3,0xC1B4,0xA0BB,0xA0BC, -0xA0BD,0xA0BE,0xA0BF,0xA0C0,0xC1B5,0xA0C1,0xA0C2,0xA0C3, -0xA0C4,0xA0C5,0xA0C6,0xA0C7,0xA0C8,0xA0C9,0xA0CA,0xA0CB, -0xA0CC,0xA0CD,0xA0CE,0xA0CF,0xA0D0,0xA0D1,0xA0D2,0xA0D3, -0xA0D4,0xA0D5,0xA0D6,0xA0D7,0xA0D8,0xA0D9,0xA0DA,0xA0DB, -0xC1B6,0xC1B7,0xA0DC,0xA0DD,0xC1B8,0xA0DE,0xA0DF,0xA0E0, -0xC1B9,0xA0E1,0xC1BA,0xA0E2,0xA0E3,0xA0E4,0xA0E5,0xA0E6, -0xC1BB,0xC1BC,0xA0E7,0xC1BD,0xA0E8,0xC1BE,0xC1BF,0xC1C0, -0xA0E9,0xA0EA,0xA0EB,0xC1C1,0xC1C2,0xC1C3,0xA0EC,0xA0ED, -0xA0EE,0xA0EF,0xA0F0,0xA0F1,0xC1C4,0xA0F2,0xA0F3,0xA0F4, -0xA0F5,0xA0F6,0xA0F7,0xA0F8,0xA0F9,0xC1C5,0xA0FA,0xC1C6, -0xA0FB,0xC1C7,0xA0FC,0xA0FD,0xA0FE,0xA141,0xA142,0xA143, -0xC1C8,0xA144,0xA145,0xA146,0xA147,0xA148,0xA149,0xA14A, -0xA14B,0xA14C,0xA14D,0xA14E,0xA14F,0xA150,0xA151,0xA152, -0xA153,0xA154,0xA155,0xA156,0xC1C9,0xC1CA,0xA157,0xA158, -0xA159,0xA15A,0xA161,0xA162,0xC1CB,0xA163,0xA164,0xA165, -0xC1CC,0xA166,0xA167,0xA168,0xC1CD,0xA169,0xA16A,0xA16B, -0xA16C,0xA16D,0xA16E,0xA16F,0xC1CE,0xC1CF,0xA170,0xC1D0, -0xA171,0xC1D1,0xA172,0xA173,0xA174,0xA175,0xA176,0xA177, -0xC1D2,0xC1D3,0xA178,0xA179,0xC1D4,0xA17A,0xA181,0xA182, -0xA183,0xA184,0xA185,0xA186,0xA187,0xA188,0xA189,0xA18A, -0xA18B,0xA18C,0xA18D,0xA18E,0xA18F,0xC1D5,0xA190,0xA191, -0xA192,0xA193,0xA194,0xA195,0xC1D6,0xC1D7,0xA196,0xA197, -0xC1D8,0xA198,0xA199,0xA19A,0xC1D9,0xC1DA,0xC1DB,0xA19B, -0xA19C,0xA19D,0xA19E,0xA19F,0xC1DC,0xC1DD,0xA1A0,0xC1DE, -0xA241,0xC1DF,0xA242,0xA243,0xA244,0xA245,0xA246,0xA247, -0xC1E0,0xA248,0xA249,0xA24A,0xA24B,0xA24C,0xA24D,0xA24E, -0xA24F,0xA250,0xA251,0xA252,0xA253,0xA254,0xA255,0xA256, -0xA257,0xA258,0xA259,0xA25A,0xC1E1,0xA261,0xA262,0xA263, -0xA264,0xA265,0xA266,0xA267,0xC1E2,0xA268,0xA269,0xA26A, -0xA26B,0xA26C,0xA26D,0xA26E,0xA26F,0xA270,0xA271,0xA272, -0xA273,0xA274,0xA275,0xA276,0xA277,0xA278,0xA279,0xA27A, -0xA281,0xA282,0xA283,0xA284,0xA285,0xA286,0xA287,0xA288, -0xC1E3,0xC1E4,0xA289,0xA28A,0xC1E5,0xA28B,0xA28C,0xA28D, -0xC1E6,0xA28E,0xA28F,0xA290,0xA291,0xA292,0xA293,0xA294, -0xC1E7,0xC1E8,0xA295,0xC1E9,0xA296,0xA297,0xA298,0xA299, -0xA29A,0xA29B,0xA29C,0xA29D,0xC1EA,0xA29E,0xA29F,0xA2A0, -0xC1EB,0xA341,0xA342,0xA343,0xC1EC,0xA344,0xA345,0xA346, -0xA347,0xA348,0xA349,0xA34A,0xC1ED,0xA34B,0xA34C,0xA34D, -0xA34E,0xA34F,0xA350,0xA351,0xA352,0xA353,0xA354,0xA355, -0xC1EE,0xC1EF,0xA356,0xA357,0xC1F0,0xA358,0xA359,0xA35A, -0xC1F1,0xA361,0xA362,0xA363,0xA364,0xA365,0xA366,0xA367, -0xC1F2,0xC1F3,0xA368,0xC1F4,0xA369,0xC1F5,0xA36A,0xA36B, -0xA36C,0xA36D,0xA36E,0xA36F,0xA370,0xA371,0xA372,0xA373, -0xA374,0xA375,0xA376,0xA377,0xA378,0xA379,0xA37A,0xA381, -0xA382,0xA383,0xA384,0xA385,0xA386,0xA387,0xA388,0xA389, -0xA38A,0xA38B,0xA38C,0xA38D,0xA38E,0xA38F,0xA390,0xA391, -0xC1F6,0xC1F7,0xA392,0xA393,0xC1F8,0xA394,0xA395,0xC1F9, -0xC1FA,0xA396,0xC1FB,0xA397,0xA398,0xA399,0xA39A,0xA39B, -0xC1FC,0xC1FD,0xA39C,0xC1FE,0xA39D,0xC2A1,0xC2A2,0xA39E, -0xA39F,0xC2A3,0xC2A4,0xA3A0,0xC2A5,0xC2A6,0xA441,0xA442, -0xC2A7,0xA443,0xC2A8,0xA444,0xC2A9,0xA445,0xA446,0xC2AA, -0xA447,0xA448,0xA449,0xA44A,0xC2AB,0xC2AC,0xA44B,0xC2AD, -0xC2AE,0xC2AF,0xA44C,0xA44D,0xA44E,0xA44F,0xA450,0xA451, -0xC2B0,0xC2B1,0xA452,0xA453,0xC2B2,0xA454,0xA455,0xA456, -0xC2B3,0xA457,0xA458,0xA459,0xA45A,0xA461,0xA462,0xA463, -0xC2B4,0xC2B5,0xA464,0xC2B6,0xC2B7,0xC2B8,0xA465,0xA466, -0xA467,0xA468,0xA469,0xA46A,0xC2B9,0xA46B,0xA46C,0xA46D, -0xC2BA,0xA46E,0xA46F,0xA470,0xA471,0xA472,0xA473,0xA474, -0xA475,0xA476,0xA477,0xA478,0xA479,0xA47A,0xA481,0xA482, -0xA483,0xC2BB,0xA484,0xA485,0xA486,0xA487,0xA488,0xA489, -0xA48A,0xA48B,0xA48C,0xA48D,0xA48E,0xA48F,0xA490,0xA491, -0xA492,0xA493,0xA494,0xA495,0xA496,0xA497,0xA498,0xA499, -0xA49A,0xA49B,0xA49C,0xA49D,0xA49E,0xA49F,0xA4A0,0xA541, -0xA542,0xA543,0xA544,0xA545,0xC2BC,0xC2BD,0xA546,0xA547, -0xC2BE,0xA548,0xA549,0xA54A,0xC2BF,0xA54B,0xA54C,0xA54D, -0xA54E,0xA54F,0xA550,0xA551,0xC2C0,0xC2C1,0xA552,0xC2C2, -0xC2C3,0xC2C4,0xA553,0xA554,0xA555,0xA556,0xA557,0xA558, -0xC2C5,0xA559,0xA55A,0xA561,0xA562,0xA563,0xA564,0xA565, -0xA566,0xA567,0xA568,0xA569,0xA56A,0xA56B,0xA56C,0xA56D, -0xA56E,0xA56F,0xA570,0xA571,0xA572,0xC2C6,0xA573,0xA574, -0xA575,0xA576,0xA577,0xA578,0xC2C7,0xA579,0xA57A,0xA581, -0xA582,0xA583,0xA584,0xA585,0xA586,0xA587,0xA588,0xA589, -0xA58A,0xA58B,0xA58C,0xA58D,0xA58E,0xA58F,0xA590,0xA591, -0xC2C8,0xA592,0xA593,0xA594,0xA595,0xA596,0xA597,0xA598, -0xA599,0xA59A,0xA59B,0xA59C,0xA59D,0xA59E,0xA59F,0xA5A0, -0xA641,0xA642,0xA643,0xA644,0xA645,0xA646,0xA647,0xA648, -0xA649,0xA64A,0xA64B,0xA64C,0xA64D,0xA64E,0xA64F,0xA650, -0xA651,0xA652,0xA653,0xA654,0xC2C9,0xC2CA,0xA655,0xA656, -0xC2CB,0xA657,0xA658,0xA659,0xC2CC,0xA65A,0xA661,0xA662, -0xA663,0xA664,0xA665,0xA666,0xC2CD,0xC2CE,0xA667,0xC2CF, -0xA668,0xC2D0,0xA669,0xC2D1,0xA66A,0xA66B,0xA66C,0xA66D, -0xC2D2,0xC2D3,0xA66E,0xA66F,0xA670,0xA671,0xA672,0xA673, -0xC2D4,0xA674,0xA675,0xA676,0xA677,0xA678,0xA679,0xA67A, -0xA681,0xA682,0xA683,0xA684,0xC2D5,0xA685,0xA686,0xA687, -0xA688,0xA689,0xA68A,0xA68B,0xC2D6,0xA68C,0xA68D,0xA68E, -0xA68F,0xA690,0xA691,0xA692,0xA693,0xA694,0xA695,0xA696, -0xA697,0xA698,0xA699,0xA69A,0xA69B,0xA69C,0xA69D,0xA69E, -0xC2D7,0xA69F,0xA6A0,0xA741,0xA742,0xA743,0xA744,0xA745, -0xC2D8,0xA746,0xA747,0xA748,0xC2D9,0xA749,0xA74A,0xA74B, -0xC2DA,0xA74C,0xA74D,0xA74E,0xA74F,0xA750,0xA751,0xA752, -0xC2DB,0xC2DC,0xA753,0xA754,0xA755,0xA756,0xA757,0xA758, -0xA759,0xA75A,0xA761,0xA762,0xA763,0xA764,0xA765,0xA766, -0xA767,0xA768,0xA769,0xA76A,0xA76B,0xA76C,0xA76D,0xA76E, -0xA76F,0xA770,0xA771,0xA772,0xA773,0xA774,0xA775,0xA776, -0xA777,0xC2DD,0xA778,0xA779,0xA77A,0xA781,0xA782,0xA783, -0xC2DE,0xC2DF,0xA784,0xA785,0xC2E0,0xA786,0xA787,0xA788, -0xC2E1,0xA789,0xA78A,0xA78B,0xA78C,0xA78D,0xA78E,0xA78F, -0xC2E2,0xC2E3,0xA790,0xA791,0xA792,0xC2E4,0xA793,0xA794, -0xA795,0xA796,0xA797,0xA798,0xC2E5,0xA799,0xA79A,0xA79B, -0xA79C,0xA79D,0xA79E,0xA79F,0xA7A0,0xA841,0xA842,0xA843, -0xA844,0xA845,0xA846,0xA847,0xA848,0xA849,0xA84A,0xA84B, -0xC2E6,0xC2E7,0xA84C,0xA84D,0xA84E,0xA84F,0xA850,0xA851, -0xA852,0xA853,0xA854,0xA855,0xA856,0xA857,0xA858,0xA859, -0xA85A,0xA861,0xA862,0xA863,0xA864,0xA865,0xA866,0xA867, -0xA868,0xA869,0xA86A,0xA86B,0xA86C,0xA86D,0xA86E,0xA86F, -0xA870,0xA871,0xA872,0xA873,0xC2E8,0xA874,0xA875,0xA876, -0xA877,0xA878,0xA879,0xA87A,0xA881,0xA882,0xA883,0xA884, -0xA885,0xA886,0xA887,0xA888,0xA889,0xA88A,0xA88B,0xA88C, -0xA88D,0xA88E,0xA88F,0xA890,0xA891,0xA892,0xA893,0xA894, -0xC2E9,0xA895,0xA896,0xA897,0xA898,0xA899,0xA89A,0xA89B, -0xA89C,0xA89D,0xA89E,0xA89F,0xA8A0,0xA941,0xA942,0xA943, -0xA944,0xA945,0xA946,0xA947,0xA948,0xA949,0xA94A,0xA94B, -0xA94C,0xA94D,0xA94E,0xA94F,0xC2EA,0xA950,0xA951,0xA952, -0xA953,0xA954,0xA955,0xA956,0xA957,0xA958,0xA959,0xA95A, -0xA961,0xA962,0xA963,0xA964,0xC2EB,0xA965,0xA966,0xC2EC, -0xA967,0xC2ED,0xA968,0xA969,0xA96A,0xA96B,0xA96C,0xA96D, -0xA96E,0xA96F,0xA970,0xA971,0xA972,0xA973,0xA974,0xA975, -0xA976,0xA977,0xA978,0xA979,0xA97A,0xA981,0xA982,0xA983, -0xA984,0xA985,0xA986,0xA987,0xA988,0xA989,0xA98A,0xA98B, -0xA98C,0xA98D,0xA98E,0xA98F,0xC2EE,0xC2EF,0xA990,0xA991, -0xC2F0,0xA992,0xA993,0xA994,0xC2F1,0xA995,0xA996,0xA997, -0xA998,0xA999,0xA99A,0xA99B,0xC2F2,0xC2F3,0xA99C,0xA99D, -0xA99E,0xC2F4,0xC2F5,0xA99F,0xA9A0,0xAA41,0xAA42,0xC2F6, -0xC2F7,0xC2F8,0xAA43,0xAA44,0xC2F9,0xAA45,0xC2FA,0xAA46, -0xC2FB,0xAA47,0xAA48,0xAA49,0xAA4A,0xAA4B,0xAA4C,0xAA4D, -0xC2FC,0xC2FD,0xAA4E,0xC2FE,0xC3A1,0xC3A2,0xC3A3,0xAA4F, -0xAA50,0xAA51,0xAA52,0xAA53,0xC3A4,0xC3A5,0xAA54,0xAA55, -0xC3A6,0xAA56,0xAA57,0xAA58,0xC3A7,0xAA59,0xAA5A,0xAA61, -0xAA62,0xAA63,0xAA64,0xAA65,0xC3A8,0xC3A9,0xAA66,0xC3AA, -0xC3AB,0xC3AC,0xAA67,0xAA68,0xAA69,0xAA6A,0xAA6B,0xAA6C, -0xC3AD,0xAA6D,0xAA6E,0xAA6F,0xC3AE,0xAA70,0xC3AF,0xAA71, -0xC3B0,0xAA72,0xAA73,0xAA74,0xAA75,0xAA76,0xAA77,0xAA78, -0xC3B1,0xAA79,0xAA7A,0xAA81,0xAA82,0xC3B2,0xAA83,0xAA84, -0xAA85,0xAA86,0xAA87,0xAA88,0xAA89,0xAA8A,0xAA8B,0xAA8C, -0xAA8D,0xAA8E,0xAA8F,0xAA90,0xAA91,0xAA92,0xAA93,0xAA94, -0xAA95,0xAA96,0xAA97,0xAA98,0xAA99,0xAA9A,0xAA9B,0xAA9C, -0xAA9D,0xAA9E,0xAA9F,0xAAA0,0xAB41,0xAB42,0xAB43,0xAB44, -0xC3B3,0xC3B4,0xAB45,0xAB46,0xC3B5,0xAB47,0xAB48,0xAB49, -0xC3B6,0xAB4A,0xAB4B,0xAB4C,0xAB4D,0xAB4E,0xAB4F,0xAB50, -0xC3B7,0xC3B8,0xAB51,0xC3B9,0xC3BA,0xC3BB,0xAB52,0xAB53, -0xAB54,0xAB55,0xAB56,0xAB57,0xC3BC,0xC3BD,0xAB58,0xAB59, -0xC3BE,0xAB5A,0xAB61,0xAB62,0xC3BF,0xAB63,0xAB64,0xAB65, -0xAB66,0xAB67,0xAB68,0xAB69,0xC3C0,0xC3C1,0xAB6A,0xC3C2, -0xAB6B,0xC3C3,0xAB6C,0xAB6D,0xAB6E,0xAB6F,0xAB70,0xAB71, -0xC3C4,0xAB72,0xAB73,0xAB74,0xC3C5,0xAB75,0xAB76,0xAB77, -0xAB78,0xAB79,0xAB7A,0xAB81,0xAB82,0xAB83,0xAB84,0xAB85, -0xAB86,0xAB87,0xAB88,0xAB89,0xC3C6,0xAB8A,0xAB8B,0xAB8C, -0xAB8D,0xAB8E,0xAB8F,0xAB90,0xC3C7,0xAB91,0xAB92,0xAB93, -0xC3C8,0xAB94,0xAB95,0xAB96,0xAB97,0xAB98,0xAB99,0xAB9A, -0xAB9B,0xAB9C,0xAB9D,0xAB9E,0xAB9F,0xABA0,0xAC41,0xAC42, -0xAC43,0xC3C9,0xAC44,0xAC45,0xAC46,0xAC47,0xAC48,0xAC49, -0xC3CA,0xC3CB,0xAC4A,0xAC4B,0xC3CC,0xAC4C,0xAC4D,0xAC4E, -0xC3CD,0xAC4F,0xAC50,0xAC51,0xAC52,0xAC53,0xAC54,0xAC55, -0xC3CE,0xC3CF,0xAC56,0xC3D0,0xAC57,0xC3D1,0xAC58,0xAC59, -0xAC5A,0xAC61,0xAC62,0xAC63,0xC3D2,0xAC64,0xAC65,0xAC66, -0xC3D3,0xAC67,0xAC68,0xAC69,0xC3D4,0xAC6A,0xAC6B,0xAC6C, -0xAC6D,0xAC6E,0xAC6F,0xAC70,0xAC71,0xAC72,0xAC73,0xAC74, -0xAC75,0xC3D5,0xAC76,0xAC77,0xAC78,0xAC79,0xAC7A,0xAC81, -0xAC82,0xAC83,0xAC84,0xAC85,0xAC86,0xAC87,0xAC88,0xAC89, -0xAC8A,0xAC8B,0xAC8C,0xAC8D,0xAC8E,0xAC8F,0xAC90,0xAC91, -0xAC92,0xAC93,0xAC94,0xAC95,0xAC96,0xAC97,0xAC98,0xAC99, -0xAC9A,0xAC9B,0xAC9C,0xAC9D,0xC3D6,0xAC9E,0xAC9F,0xACA0, -0xC3D7,0xAD41,0xAD42,0xAD43,0xC3D8,0xAD44,0xAD45,0xAD46, -0xAD47,0xAD48,0xAD49,0xAD4A,0xC3D9,0xC3DA,0xAD4B,0xC3DB, -0xAD4C,0xC3DC,0xAD4D,0xAD4E,0xAD4F,0xAD50,0xAD51,0xAD52, -0xC3DD,0xAD53,0xAD54,0xAD55,0xAD56,0xAD57,0xAD58,0xAD59, -0xAD5A,0xAD61,0xAD62,0xAD63,0xAD64,0xAD65,0xAD66,0xAD67, -0xC3DE,0xAD68,0xAD69,0xAD6A,0xAD6B,0xAD6C,0xAD6D,0xAD6E, -0xAD6F,0xAD70,0xAD71,0xAD72,0xC3DF,0xC3E0,0xAD73,0xAD74, -0xC3E1,0xAD75,0xAD76,0xAD77,0xC3E2,0xAD78,0xAD79,0xAD7A, -0xAD81,0xAD82,0xAD83,0xAD84,0xC3E3,0xC3E4,0xAD85,0xC3E5, -0xAD86,0xC3E6,0xAD87,0xAD88,0xAD89,0xAD8A,0xAD8B,0xAD8C, -0xC3E7,0xAD8D,0xAD8E,0xAD8F,0xAD90,0xAD91,0xAD92,0xAD93, -0xAD94,0xAD95,0xAD96,0xAD97,0xAD98,0xAD99,0xAD9A,0xAD9B, -0xAD9C,0xAD9D,0xAD9E,0xAD9F,0xC3E8,0xADA0,0xAE41,0xAE42, -0xAE43,0xAE44,0xAE45,0xAE46,0xC3E9,0xAE47,0xAE48,0xAE49, -0xC3EA,0xAE4A,0xAE4B,0xAE4C,0xAE4D,0xAE4E,0xAE4F,0xAE50, -0xAE51,0xAE52,0xAE53,0xAE54,0xAE55,0xAE56,0xAE57,0xAE58, -0xAE59,0xAE5A,0xAE61,0xAE62,0xAE63,0xAE64,0xAE65,0xAE66, -0xC3EB,0xAE67,0xAE68,0xAE69,0xC3EC,0xAE6A,0xAE6B,0xAE6C, -0xC3ED,0xAE6D,0xAE6E,0xAE6F,0xAE70,0xAE71,0xAE72,0xAE73, -0xC3EE,0xC3EF,0xAE74,0xC3F0,0xAE75,0xC3F1,0xAE76,0xAE77, -0xAE78,0xAE79,0xAE7A,0xAE81,0xC3F2,0xAE82,0xAE83,0xAE84, -0xC3F3,0xAE85,0xAE86,0xAE87,0xC3F4,0xAE88,0xAE89,0xAE8A, -0xAE8B,0xAE8C,0xAE8D,0xAE8E,0xC3F5,0xAE8F,0xAE90,0xAE91, -0xAE92,0xC3F6,0xAE93,0xAE94,0xAE95,0xAE96,0xAE97,0xAE98, -0xC3F7,0xC3F8,0xAE99,0xAE9A,0xC3F9,0xAE9B,0xAE9C,0xAE9D, -0xC3FA,0xAE9E,0xAE9F,0xAEA0,0xAF41,0xAF42,0xAF43,0xAF44, -0xC3FB,0xC3FC,0xAF45,0xC3FD,0xAF46,0xC3FE,0xAF47,0xAF48, -0xAF49,0xAF4A,0xAF4B,0xAF4C,0xAF4D,0xAF4E,0xAF4F,0xAF50, -0xAF51,0xAF52,0xAF53,0xAF54,0xAF55,0xAF56,0xAF57,0xAF58, -0xAF59,0xAF5A,0xAF61,0xAF62,0xAF63,0xAF64,0xAF65,0xAF66, -0xAF67,0xAF68,0xAF69,0xAF6A,0xAF6B,0xAF6C,0xAF6D,0xAF6E, -0xC4A1,0xC4A2,0xAF6F,0xAF70,0xC4A3,0xAF71,0xAF72,0xC4A4, -0xC4A5,0xC4A6,0xAF73,0xAF74,0xAF75,0xAF76,0xAF77,0xAF78, -0xC4A7,0xC4A8,0xAF79,0xC4A9,0xAF7A,0xC4AA,0xAF81,0xAF82, -0xAF83,0xAF84,0xAF85,0xAF86,0xC4AB,0xC4AC,0xAF87,0xAF88, -0xC4AD,0xAF89,0xAF8A,0xAF8B,0xC4AE,0xAF8C,0xAF8D,0xAF8E, -0xAF8F,0xAF90,0xAF91,0xAF92,0xC4AF,0xC4B0,0xAF93,0xC4B1, -0xAF94,0xC4B2,0xAF95,0xAF96,0xAF97,0xAF98,0xAF99,0xAF9A, -0xC4B3,0xC4B4,0xAF9B,0xAF9C,0xC4B5,0xAF9D,0xAF9E,0xAF9F, -0xC4B6,0xAFA0,0xB041,0xB042,0xB043,0xB044,0xB045,0xB046, -0xC4B7,0xC4B8,0xB047,0xC4B9,0xC4BA,0xC4BB,0xB048,0xB049, -0xB04A,0xB04B,0xB04C,0xB04D,0xC4BC,0xC4BD,0xB04E,0xB04F, -0xB050,0xB051,0xB052,0xB053,0xB054,0xB055,0xB056,0xB057, -0xB058,0xB059,0xB05A,0xB061,0xB062,0xB063,0xB064,0xB065, -0xB066,0xC4BE,0xB067,0xB068,0xB069,0xB06A,0xB06B,0xB06C, -0xB06D,0xB06E,0xB06F,0xB070,0xB071,0xB072,0xB073,0xB074, -0xB075,0xB076,0xB077,0xB078,0xB079,0xB07A,0xB081,0xB082, -0xB083,0xB084,0xB085,0xB086,0xB087,0xB088,0xB089,0xB08A, -0xB08B,0xB08C,0xB08D,0xB08E,0xC4BF,0xC4C0,0xB08F,0xB090, -0xC4C1,0xB091,0xB092,0xC4C2,0xC4C3,0xB093,0xB094,0xB095, -0xB096,0xB097,0xB098,0xB099,0xC4C4,0xC4C5,0xB09A,0xC4C6, -0xC4C7,0xC4C8,0xB09B,0xB09C,0xB09D,0xB09E,0xB09F,0xB0A0, -0xC4C9,0xC4CA,0xB141,0xB142,0xC4CB,0xB143,0xB144,0xB145, -0xC4CC,0xB146,0xB147,0xB148,0xB149,0xB14A,0xB14B,0xB14C, -0xC4CD,0xC4CE,0xB14D,0xC4CF,0xB14E,0xC4D0,0xB14F,0xB150, -0xB151,0xB152,0xB153,0xB154,0xC4D1,0xB155,0xB156,0xB157, -0xC4D2,0xB158,0xB159,0xB15A,0xC4D3,0xB161,0xB162,0xB163, -0xB164,0xB165,0xB166,0xB167,0xC4D4,0xC4D5,0xB168,0xC4D6, -0xC4D7,0xC4D8,0xB169,0xB16A,0xB16B,0xB16C,0xB16D,0xB16E, -0xC4D9,0xB16F,0xB170,0xB171,0xB172,0xB173,0xB174,0xB175, -0xB176,0xB177,0xB178,0xB179,0xB17A,0xB181,0xB182,0xB183, -0xB184,0xB185,0xB186,0xB187,0xB188,0xB189,0xB18A,0xB18B, -0xB18C,0xB18D,0xB18E,0xB18F,0xC4DA,0xC4DB,0xB190,0xB191, -0xC4DC,0xB192,0xB193,0xB194,0xC4DD,0xB195,0xB196,0xB197, -0xB198,0xB199,0xB19A,0xB19B,0xC4DE,0xC4DF,0xB19C,0xC4E0, -0xB19D,0xC4E1,0xB19E,0xB19F,0xB1A0,0xB241,0xB242,0xB243, -0xC4E2,0xC4E3,0xB244,0xB245,0xC4E4,0xB246,0xB247,0xB248, -0xC4E5,0xB249,0xB24A,0xB24B,0xB24C,0xB24D,0xB24E,0xB24F, -0xC4E6,0xB250,0xB251,0xB252,0xB253,0xC4E7,0xB254,0xB255, -0xB256,0xB257,0xB258,0xB259,0xC4E8,0xB25A,0xB261,0xB262, -0xB263,0xB264,0xB265,0xB266,0xB267,0xB268,0xB269,0xB26A, -0xB26B,0xB26C,0xB26D,0xB26E,0xB26F,0xB270,0xB271,0xB272, -0xB273,0xC4E9,0xB274,0xB275,0xB276,0xB277,0xB278,0xB279, -0xC4EA,0xB27A,0xB281,0xB282,0xB283,0xB284,0xB285,0xB286, -0xC4EB,0xB287,0xB288,0xB289,0xB28A,0xB28B,0xB28C,0xB28D, -0xB28E,0xB28F,0xB290,0xB291,0xB292,0xB293,0xB294,0xB295, -0xB296,0xB297,0xB298,0xB299,0xC4EC,0xB29A,0xB29B,0xB29C, -0xB29D,0xB29E,0xB29F,0xB2A0,0xB341,0xB342,0xB343,0xB344, -0xB345,0xB346,0xB347,0xB348,0xB349,0xB34A,0xB34B,0xB34C, -0xB34D,0xB34E,0xB34F,0xB350,0xB351,0xB352,0xB353,0xB354, -0xC4ED,0xC4EE,0xB355,0xB356,0xC4EF,0xB357,0xB358,0xB359, -0xC4F0,0xB35A,0xB361,0xB362,0xB363,0xB364,0xB365,0xB366, -0xC4F1,0xC4F2,0xB367,0xC4F3,0xB368,0xC4F4,0xB369,0xB36A, -0xB36B,0xB36C,0xB36D,0xB36E,0xC4F5,0xB36F,0xB370,0xB371, -0xC4F6,0xB372,0xB373,0xB374,0xC4F7,0xB375,0xB376,0xB377, -0xB378,0xB379,0xB37A,0xB381,0xB382,0xB383,0xB384,0xB385, -0xB386,0xC4F8,0xB387,0xB388,0xB389,0xB38A,0xB38B,0xB38C, -0xC4F9,0xB38D,0xB38E,0xB38F,0xB390,0xB391,0xB392,0xB393, -0xB394,0xB395,0xB396,0xB397,0xB398,0xB399,0xB39A,0xB39B, -0xB39C,0xB39D,0xB39E,0xB39F,0xB3A0,0xC4FA,0xB441,0xB442, -0xB443,0xB444,0xB445,0xB446,0xC4FB,0xC4FC,0xB447,0xB448, -0xC4FD,0xB449,0xB44A,0xB44B,0xC4FE,0xB44C,0xB44D,0xB44E, -0xB44F,0xB450,0xB451,0xB452,0xC5A1,0xC5A2,0xB453,0xC5A3, -0xB454,0xC5A4,0xB455,0xB456,0xB457,0xB458,0xB459,0xB45A, -0xC5A5,0xB461,0xB462,0xB463,0xC5A6,0xB464,0xB465,0xB466, -0xC5A7,0xB467,0xB468,0xB469,0xB46A,0xB46B,0xB46C,0xB46D, -0xC5A8,0xB46E,0xB46F,0xB470,0xB471,0xB472,0xB473,0xB474, -0xB475,0xB476,0xB477,0xB478,0xC5A9,0xC5AA,0xB479,0xB47A, -0xC5AB,0xB481,0xB482,0xB483,0xC5AC,0xB484,0xB485,0xB486, -0xB487,0xB488,0xB489,0xB48A,0xC5AD,0xC5AE,0xB48B,0xB48C, -0xB48D,0xC5AF,0xB48E,0xB48F,0xB490,0xB491,0xB492,0xB493, -0xB494,0xB495,0xB496,0xB497,0xB498,0xB499,0xB49A,0xB49B, -0xB49C,0xB49D,0xB49E,0xB49F,0xB4A0,0xB541,0xB542,0xB543, -0xB544,0xB545,0xB546,0xB547,0xB548,0xB549,0xB54A,0xB54B, -0xB54C,0xB54D,0xB54E,0xB54F,0xC5B0,0xC5B1,0xB550,0xB551, -0xC5B2,0xB552,0xB553,0xB554,0xC5B3,0xB555,0xB556,0xB557, -0xB558,0xB559,0xB55A,0xB561,0xC5B4,0xC5B5,0xB562,0xC5B6, -0xB563,0xC5B7,0xB564,0xB565,0xB566,0xB567,0xB568,0xB569, -0xC5B8,0xC5B9,0xB56A,0xB56B,0xC5BA,0xB56C,0xB56D,0xB56E, -0xC5BB,0xC5BC,0xB56F,0xB570,0xB571,0xB572,0xB573,0xB574, -0xC5BD,0xC5BE,0xB575,0xC5BF,0xC5C0,0xC5C1,0xB576,0xB577, -0xB578,0xB579,0xB57A,0xB581,0xC5C2,0xC5C3,0xB582,0xB583, -0xC5C4,0xB584,0xB585,0xB586,0xC5C5,0xB587,0xB588,0xB589, -0xB58A,0xB58B,0xB58C,0xB58D,0xC5C6,0xC5C7,0xB58E,0xC5C8, -0xC5C9,0xC5CA,0xB58F,0xB590,0xB591,0xB592,0xB593,0xB594, -0xC5CB,0xB595,0xB596,0xB597,0xB598,0xB599,0xB59A,0xB59B, -0xB59C,0xB59D,0xB59E,0xB59F,0xB5A0,0xB641,0xB642,0xB643, -0xB644,0xB645,0xB646,0xB647,0xB648,0xC5CC,0xB649,0xB64A, -0xB64B,0xB64C,0xB64D,0xB64E,0xB64F,0xB650,0xB651,0xB652, -0xB653,0xB654,0xB655,0xB656,0xB657,0xB658,0xB659,0xB65A, -0xB661,0xB662,0xB663,0xB664,0xB665,0xB666,0xB667,0xB668, -0xB669,0xB66A,0xB66B,0xB66C,0xB66D,0xB66E,0xB66F,0xB670, -0xC5CD,0xC5CE,0xB671,0xB672,0xC5CF,0xB673,0xB674,0xB675, -0xC5D0,0xB676,0xC5D1,0xB677,0xB678,0xB679,0xB67A,0xB681, -0xC5D2,0xC5D3,0xB682,0xC5D4,0xC5D5,0xC5D6,0xB683,0xB684, -0xB685,0xB686,0xB687,0xB688,0xC5D7,0xC5D8,0xB689,0xB68A, -0xC5D9,0xB68B,0xB68C,0xB68D,0xC5DA,0xB68E,0xB68F,0xB690, -0xB691,0xB692,0xB693,0xB694,0xC5DB,0xC5DC,0xB695,0xC5DD, -0xB696,0xC5DE,0xB697,0xB698,0xB699,0xB69A,0xB69B,0xB69C, -0xC5DF,0xB69D,0xB69E,0xB69F,0xC5E0,0xB6A0,0xB741,0xB742, -0xB743,0xB744,0xB745,0xB746,0xB747,0xB748,0xB749,0xB74A, -0xB74B,0xB74C,0xB74D,0xB74E,0xC5E1,0xB74F,0xB750,0xB751, -0xB752,0xB753,0xB754,0xB755,0xC5E2,0xB756,0xB757,0xB758, -0xC5E3,0xB759,0xB75A,0xB761,0xB762,0xB763,0xB764,0xB765, -0xB766,0xB767,0xB768,0xB769,0xB76A,0xB76B,0xB76C,0xB76D, -0xB76E,0xB76F,0xB770,0xB771,0xB772,0xB773,0xB774,0xB775, -0xC5E4,0xC5E5,0xB776,0xB777,0xC5E6,0xB778,0xB779,0xB77A, -0xC5E7,0xB781,0xB782,0xB783,0xB784,0xB785,0xB786,0xB787, -0xC5E8,0xC5E9,0xB788,0xC5EA,0xB789,0xC5EB,0xB78A,0xB78B, -0xB78C,0xB78D,0xC5EC,0xB78E,0xC5ED,0xB78F,0xB790,0xB791, -0xC5EE,0xB792,0xB793,0xB794,0xB795,0xB796,0xB797,0xB798, -0xB799,0xB79A,0xB79B,0xB79C,0xB79D,0xB79E,0xB79F,0xB7A0, -0xB841,0xB842,0xB843,0xB844,0xB845,0xB846,0xB847,0xB848, -0xC5EF,0xB849,0xB84A,0xB84B,0xB84C,0xB84D,0xB84E,0xB84F, -0xB850,0xB851,0xB852,0xB853,0xB854,0xB855,0xB856,0xB857, -0xB858,0xB859,0xB85A,0xB861,0xB862,0xB863,0xB864,0xB865, -0xB866,0xB867,0xB868,0xB869,0xC5F0,0xB86A,0xB86B,0xB86C, -0xC5F1,0xB86D,0xB86E,0xB86F,0xB870,0xB871,0xB872,0xB873, -0xB874,0xB875,0xB876,0xB877,0xB878,0xB879,0xB87A,0xC5F2, -0xB881,0xC5F3,0xB882,0xB883,0xB884,0xB885,0xB886,0xB887, -0xC5F4,0xB888,0xB889,0xB88A,0xB88B,0xB88C,0xB88D,0xB88E, -0xB88F,0xB890,0xB891,0xB892,0xB893,0xB894,0xB895,0xB896, -0xB897,0xB898,0xB899,0xB89A,0xB89B,0xB89C,0xB89D,0xB89E, -0xB89F,0xB8A0,0xB941,0xB942,0xC5F5,0xC5F6,0xB943,0xB944, -0xC5F7,0xB945,0xB946,0xB947,0xC5F8,0xB948,0xB949,0xB94A, -0xB94B,0xB94C,0xB94D,0xB94E,0xC5F9,0xC5FA,0xB94F,0xC5FB, -0xB950,0xC5FC,0xB951,0xB952,0xB953,0xB954,0xB955,0xB956, -0xC5FD,0xB957,0xB958,0xB959,0xB95A,0xB961,0xB962,0xB963, -0xB964,0xB965,0xB966,0xB967,0xB968,0xB969,0xB96A,0xB96B, -0xB96C,0xB96D,0xB96E,0xB96F,0xC5FE,0xB970,0xB971,0xB972, -0xB973,0xB974,0xB975,0xB976,0xC6A1,0xB977,0xB978,0xB979, -0xB97A,0xB981,0xB982,0xB983,0xB984,0xB985,0xB986,0xB987, -0xB988,0xB989,0xB98A,0xB98B,0xB98C,0xB98D,0xB98E,0xB98F, -0xB990,0xB991,0xB992,0xB993,0xB994,0xB995,0xB996,0xB997, -0xC6A2,0xC6A3,0xB998,0xB999,0xC6A4,0xB99A,0xB99B,0xB99C, -0xC6A5,0xB99D,0xB99E,0xB99F,0xB9A0,0xBA41,0xBA42,0xBA43, -0xC6A6,0xC6A7,0xBA44,0xBA45,0xBA46,0xC6A8,0xBA47,0xBA48, -0xBA49,0xBA4A,0xBA4B,0xBA4C,0xC6A9,0xBA4D,0xBA4E,0xBA4F, -0xC6AA,0xBA50,0xBA51,0xBA52,0xC6AB,0xBA53,0xBA54,0xBA55, -0xBA56,0xBA57,0xBA58,0xBA59,0xC6AC,0xBA5A,0xBA61,0xBA62, -0xBA63,0xC6AD,0xBA64,0xBA65,0xBA66,0xBA67,0xBA68,0xBA69, -0xC6AE,0xC6AF,0xBA6A,0xBA6B,0xC6B0,0xBA6C,0xBA6D,0xC6B1, -0xC6B2,0xBA6E,0xC6B3,0xBA6F,0xBA70,0xBA71,0xBA72,0xBA73, -0xC6B4,0xC6B5,0xBA74,0xC6B6,0xBA75,0xBA76,0xBA77,0xBA78, -0xBA79,0xBA7A,0xBA81,0xBA82,0xC6B7,0xBA83,0xBA84,0xBA85, -0xC6B8,0xBA86,0xBA87,0xBA88,0xC6B9,0xBA89,0xBA8A,0xBA8B, -0xBA8C,0xBA8D,0xBA8E,0xBA8F,0xC6BA,0xC6BB,0xBA90,0xBA91, -0xBA92,0xBA93,0xBA94,0xBA95,0xBA96,0xBA97,0xBA98,0xBA99, -0xC6BC,0xC6BD,0xBA9A,0xBA9B,0xC6BE,0xBA9C,0xBA9D,0xBA9E, -0xC6BF,0xBA9F,0xBAA0,0xBB41,0xBB42,0xBB43,0xBB44,0xBB45, -0xC6C0,0xC6C1,0xBB46,0xC6C2,0xBB47,0xC6C3,0xBB48,0xBB49, -0xBB4A,0xBB4B,0xBB4C,0xBB4D,0xC6C4,0xC6C5,0xC6C6,0xBB4E, -0xC6C7,0xBB4F,0xBB50,0xBB51,0xC6C8,0xBB52,0xC6C9,0xBB53, -0xBB54,0xBB55,0xBB56,0xBB57,0xC6CA,0xC6CB,0xBB58,0xC6CC, -0xC6CD,0xC6CE,0xBB59,0xBB5A,0xBB61,0xC6CF,0xBB62,0xBB63, -0xC6D0,0xC6D1,0xBB64,0xBB65,0xC6D2,0xBB66,0xBB67,0xBB68, -0xC6D3,0xBB69,0xBB6A,0xBB6B,0xBB6C,0xBB6D,0xBB6E,0xBB6F, -0xC6D4,0xC6D5,0xBB70,0xC6D6,0xC6D7,0xC6D8,0xBB71,0xBB72, -0xBB73,0xBB74,0xBB75,0xBB76,0xC6D9,0xC6DA,0xBB77,0xBB78, -0xBB79,0xBB7A,0xBB81,0xBB82,0xBB83,0xBB84,0xBB85,0xBB86, -0xBB87,0xBB88,0xBB89,0xBB8A,0xBB8B,0xBB8C,0xBB8D,0xBB8E, -0xBB8F,0xBB90,0xBB91,0xBB92,0xBB93,0xBB94,0xBB95,0xBB96, -0xBB97,0xBB98,0xBB99,0xBB9A,0xBB9B,0xBB9C,0xBB9D,0xBB9E, -0xBB9F,0xBBA0,0xBC41,0xBC42,0xBC43,0xBC44,0xBC45,0xBC46, -0xBC47,0xBC48,0xBC49,0xBC4A,0xBC4B,0xBC4C,0xBC4D,0xBC4E, -0xBC4F,0xBC50,0xBC51,0xBC52,0xC6DB,0xC6DC,0xBC53,0xBC54, -0xC6DD,0xBC55,0xBC56,0xBC57,0xC6DE,0xBC58,0xBC59,0xBC5A, -0xBC61,0xBC62,0xBC63,0xBC64,0xC6DF,0xC6E0,0xBC65,0xC6E1, -0xC6E2,0xC6E3,0xBC66,0xBC67,0xBC68,0xBC69,0xBC6A,0xBC6B, -0xC6E4,0xC6E5,0xBC6C,0xBC6D,0xC6E6,0xBC6E,0xBC6F,0xBC70, -0xC6E7,0xBC71,0xBC72,0xBC73,0xBC74,0xBC75,0xBC76,0xBC77, -0xC6E8,0xC6E9,0xBC78,0xC6EA,0xBC79,0xC6EB,0xBC7A,0xBC81, -0xBC82,0xBC83,0xBC84,0xBC85,0xC6EC,0xBC86,0xBC87,0xBC88, -0xC6ED,0xBC89,0xBC8A,0xBC8B,0xC6EE,0xBC8C,0xBC8D,0xBC8E, -0xBC8F,0xBC90,0xBC91,0xBC92,0xC6EF,0xC6F0,0xBC93,0xBC94, -0xC6F1,0xC6F2,0xBC95,0xBC96,0xBC97,0xBC98,0xBC99,0xBC9A, -0xC6F3,0xBC9B,0xBC9C,0xBC9D,0xBC9E,0xBC9F,0xBCA0,0xBD41, -0xC6F4,0xBD42,0xBD43,0xBD44,0xBD45,0xBD46,0xBD47,0xBD48, -0xBD49,0xC6F5,0xBD4A,0xC6F6,0xBD4B,0xBD4C,0xBD4D,0xBD4E, -0xBD4F,0xBD50,0xBD51,0xBD52,0xC6F7,0xC6F8,0xBD53,0xBD54, -0xC6F9,0xBD55,0xBD56,0xBD57,0xC6FA,0xBD58,0xBD59,0xBD5A, -0xBD61,0xBD62,0xBD63,0xBD64,0xC6FB,0xC6FC,0xBD65,0xC6FD, -0xBD66,0xC6FE,0xBD67,0xBD68,0xBD69,0xBD6A,0xBD6B,0xBD6C, -0xC7A1,0xBD6D,0xBD6E,0xBD6F,0xBD70,0xBD71,0xBD72,0xBD73, -0xBD74,0xBD75,0xBD76,0xBD77,0xBD78,0xBD79,0xBD7A,0xBD81, -0xBD82,0xBD83,0xBD84,0xBD85,0xBD86,0xC7A2,0xBD87,0xBD88, -0xBD89,0xBD8A,0xBD8B,0xBD8C,0xBD8D,0xBD8E,0xBD8F,0xBD90, -0xBD91,0xBD92,0xBD93,0xBD94,0xBD95,0xBD96,0xBD97,0xBD98, -0xBD99,0xBD9A,0xBD9B,0xBD9C,0xBD9D,0xBD9E,0xBD9F,0xBDA0, -0xBE41,0xBE42,0xBE43,0xBE44,0xBE45,0xBE46,0xBE47,0xBE48, -0xC7A3,0xBE49,0xBE4A,0xBE4B,0xC7A4,0xBE4C,0xBE4D,0xBE4E, -0xBE4F,0xBE50,0xBE51,0xBE52,0xBE53,0xBE54,0xBE55,0xBE56, -0xBE57,0xBE58,0xBE59,0xBE5A,0xBE61,0xBE62,0xBE63,0xBE64, -0xBE65,0xBE66,0xBE67,0xBE68,0xC7A5,0xBE69,0xBE6A,0xBE6B, -0xC7A6,0xBE6C,0xBE6D,0xBE6E,0xC7A7,0xBE6F,0xBE70,0xBE71, -0xBE72,0xBE73,0xBE74,0xBE75,0xBE76,0xC7A8,0xBE77,0xC7A9, -0xBE78,0xBE79,0xBE7A,0xBE81,0xBE82,0xBE83,0xBE84,0xBE85, -0xC7AA,0xC7AB,0xBE86,0xBE87,0xC7AC,0xBE88,0xBE89,0xC7AD, -0xC7AE,0xBE8A,0xC7AF,0xBE8B,0xBE8C,0xBE8D,0xBE8E,0xBE8F, -0xC7B0,0xC7B1,0xBE90,0xC7B2,0xBE91,0xC7B3,0xBE92,0xBE93, -0xBE94,0xBE95,0xBE96,0xBE97,0xC7B4,0xBE98,0xBE99,0xBE9A, -0xBE9B,0xBE9C,0xBE9D,0xBE9E,0xBE9F,0xBEA0,0xBF41,0xBF42, -0xBF43,0xBF44,0xBF45,0xBF46,0xBF47,0xBF48,0xBF49,0xBF4A, -0xBF4B,0xC7B5,0xBF4C,0xBF4D,0xBF4E,0xBF4F,0xBF50,0xBF51, -0xBF52,0xBF53,0xBF54,0xBF55,0xBF56,0xBF57,0xBF58,0xBF59, -0xBF5A,0xBF61,0xBF62,0xBF63,0xBF64,0xBF65,0xBF66,0xBF67, -0xBF68,0xBF69,0xBF6A,0xBF6B,0xBF6C,0xBF6D,0xBF6E,0xBF6F, -0xBF70,0xBF71,0xBF72,0xBF73,0xC7B6,0xBF74,0xBF75,0xBF76, -0xC7B7,0xBF77,0xBF78,0xBF79,0xC7B8,0xBF7A,0xBF81,0xBF82, -0xBF83,0xBF84,0xBF85,0xBF86,0xC7B9,0xBF87,0xBF88,0xC7BA, -0xBF89,0xBF8A,0xBF8B,0xBF8C,0xBF8D,0xBF8E,0xBF8F,0xBF90, -0xC7BB,0xBF91,0xBF92,0xBF93,0xC7BC,0xBF94,0xBF95,0xBF96, -0xC7BD,0xBF97,0xBF98,0xBF99,0xBF9A,0xBF9B,0xBF9C,0xBF9D, -0xC7BE,0xBF9E,0xBF9F,0xC7BF,0xBFA0,0xC7C0,0xC041,0xC042, -0xC043,0xC044,0xC045,0xC046,0xC7C1,0xC047,0xC048,0xC049, -0xC7C2,0xC04A,0xC04B,0xC04C,0xC7C3,0xC04D,0xC04E,0xC04F, -0xC050,0xC051,0xC052,0xC053,0xC7C4,0xC7C5,0xC054,0xC7C6, -0xC055,0xC056,0xC057,0xC058,0xC059,0xC05A,0xC061,0xC062, -0xC063,0xC064,0xC065,0xC066,0xC067,0xC068,0xC069,0xC06A, -0xC06B,0xC06C,0xC06D,0xC06E,0xC06F,0xC070,0xC071,0xC072, -0xC073,0xC074,0xC075,0xC076,0xC077,0xC078,0xC079,0xC07A, -0xC081,0xC082,0xC083,0xC084,0xC7C7,0xC7C8,0xC085,0xC086, -0xC7C9,0xC087,0xC088,0xC089,0xC7CA,0xC08A,0xC08B,0xC08C, -0xC08D,0xC08E,0xC08F,0xC090,0xC7CB,0xC7CC,0xC091,0xC7CD, -0xC092,0xC7CE,0xC093,0xC094,0xC095,0xC096,0xC097,0xC098, -0xC7CF,0xC7D0,0xC099,0xC09A,0xC7D1,0xC09B,0xC09C,0xC09D, -0xC7D2,0xC09E,0xC09F,0xC0A0,0xC141,0xC7D3,0xC142,0xC143, -0xC7D4,0xC7D5,0xC144,0xC7D6,0xC145,0xC7D7,0xC146,0xC147, -0xC148,0xC149,0xC14A,0xC14B,0xC7D8,0xC7D9,0xC14C,0xC14D, -0xC7DA,0xC14E,0xC14F,0xC150,0xC7DB,0xC151,0xC152,0xC153, -0xC154,0xC155,0xC156,0xC157,0xC7DC,0xC7DD,0xC158,0xC7DE, -0xC7DF,0xC7E0,0xC159,0xC15A,0xC161,0xC162,0xC163,0xC164, -0xC7E1,0xC165,0xC166,0xC167,0xC168,0xC169,0xC16A,0xC16B, -0xC16C,0xC16D,0xC16E,0xC16F,0xC170,0xC171,0xC172,0xC173, -0xC174,0xC175,0xC176,0xC177,0xC178,0xC7E2,0xC179,0xC17A, -0xC181,0xC182,0xC183,0xC184,0xC185,0xC186,0xC187,0xC188, -0xC189,0xC18A,0xC18B,0xC18C,0xC18D,0xC18E,0xC18F,0xC190, -0xC191,0xC192,0xC193,0xC194,0xC195,0xC196,0xC197,0xC198, -0xC199,0xC19A,0xC19B,0xC19C,0xC19D,0xC19E,0xC19F,0xC1A0, -0xC7E3,0xC7E4,0xC241,0xC242,0xC7E5,0xC243,0xC244,0xC245, -0xC7E6,0xC246,0xC7E7,0xC247,0xC248,0xC249,0xC24A,0xC24B, -0xC7E8,0xC7E9,0xC24C,0xC7EA,0xC24D,0xC7EB,0xC24E,0xC24F, -0xC250,0xC251,0xC252,0xC253,0xC7EC,0xC7ED,0xC254,0xC255, -0xC7EE,0xC256,0xC257,0xC258,0xC7EF,0xC259,0xC25A,0xC261, -0xC262,0xC263,0xC264,0xC265,0xC7F0,0xC7F1,0xC266,0xC7F2, -0xC267,0xC7F3,0xC268,0xC269,0xC26A,0xC26B,0xC26C,0xC26D, -0xC7F4,0xC7F5,0xC26E,0xC26F,0xC7F6,0xC270,0xC271,0xC272, -0xC7F7,0xC273,0xC274,0xC275,0xC276,0xC277,0xC278,0xC279, -0xC7F8,0xC7F9,0xC27A,0xC7FA,0xC7FB,0xC7FC,0xC281,0xC282, -0xC283,0xC284,0xC285,0xC286,0xC7FD,0xC287,0xC288,0xC289, -0xC7FE,0xC28A,0xC28B,0xC28C,0xC8A1,0xC28D,0xC28E,0xC28F, -0xC290,0xC291,0xC292,0xC293,0xC294,0xC8A2,0xC295,0xC296, -0xC297,0xC298,0xC299,0xC29A,0xC29B,0xC29C,0xC29D,0xC29E, -0xC8A3,0xC8A4,0xC29F,0xC2A0,0xC8A5,0xC341,0xC342,0xC343, -0xC8A6,0xC344,0xC345,0xC346,0xC347,0xC8A7,0xC348,0xC349, -0xC8A8,0xC8A9,0xC34A,0xC8AA,0xC34B,0xC8AB,0xC34C,0xC34D, -0xC34E,0xC8AC,0xC34F,0xC350,0xC8AD,0xC8AE,0xC351,0xC352, -0xC8AF,0xC353,0xC354,0xC355,0xC8B0,0xC356,0xC357,0xC358, -0xC359,0xC35A,0xC361,0xC362,0xC363,0xC364,0xC365,0xC8B1, -0xC366,0xC8B2,0xC367,0xC368,0xC369,0xC36A,0xC36B,0xC36C, -0xC8B3,0xC8B4,0xC36D,0xC36E,0xC8B5,0xC36F,0xC370,0xC371, -0xC372,0xC373,0xC374,0xC375,0xC376,0xC377,0xC378,0xC379, -0xC37A,0xC381,0xC382,0xC8B6,0xC383,0xC8B7,0xC384,0xC385, -0xC386,0xC387,0xC388,0xC389,0xC8B8,0xC8B9,0xC38A,0xC38B, -0xC8BA,0xC38C,0xC38D,0xC38E,0xC8BB,0xC38F,0xC390,0xC391, -0xC392,0xC393,0xC394,0xC395,0xC396,0xC8BC,0xC397,0xC8BD, -0xC398,0xC8BE,0xC399,0xC39A,0xC39B,0xC39C,0xC39D,0xC39E, -0xC8BF,0xC39F,0xC3A0,0xC441,0xC8C0,0xC442,0xC443,0xC444, -0xC8C1,0xC445,0xC446,0xC447,0xC448,0xC449,0xC44A,0xC44B, -0xC44C,0xC8C2,0xC44D,0xC8C3,0xC44E,0xC44F,0xC450,0xC451, -0xC452,0xC453,0xC454,0xC455,0xC8C4,0xC8C5,0xC456,0xC457, -0xC8C6,0xC458,0xC459,0xC45A,0xC8C7,0xC461,0xC462,0xC463, -0xC464,0xC8C8,0xC465,0xC466,0xC8C9,0xC467,0xC468,0xC8CA, -0xC469,0xC8CB,0xC46A,0xC46B,0xC46C,0xC46D,0xC46E,0xC46F, -0xC8CC,0xC470,0xC471,0xC472,0xC8CD,0xC473,0xC474,0xC475, -0xC8CE,0xC476,0xC477,0xC478,0xC479,0xC47A,0xC481,0xC482, -0xC8CF,0xC483,0xC484,0xC485,0xC486,0xC8D0,0xC487,0xC488, -0xC489,0xC48A,0xC48B,0xC48C,0xC8D1,0xC8D2,0xC48D,0xC48E, -0xC8D3,0xC48F,0xC490,0xC491,0xC8D4,0xC492,0xC493,0xC494, -0xC495,0xC496,0xC497,0xC498,0xC499,0xC49A,0xC49B,0xC49C, -0xC49D,0xC8D5,0xC49E,0xC49F,0xC4A0,0xC541,0xC542,0xC543, -0xC8D6,0xC8D7,0xC544,0xC545,0xC8D8,0xC546,0xC547,0xC548, -0xC8D9,0xC549,0xC54A,0xC54B,0xC54C,0xC54D,0xC54E,0xC54F, -0xC8DA,0xC8DB,0xC550,0xC8DC,0xC551,0xC8DD,0xC552,0xC553, -0xC554,0xC555,0xC556,0xC557,0xC8DE,0xC8DF,0xC558,0xC559, -0xC8E0,0xC55A,0xC561,0xC562,0xC8E1,0xC563,0xC564,0xC565, -0xC566,0xC567,0xC568,0xC569,0xC8E2,0xC56A,0xC56B,0xC8E3, -0xC56C,0xC8E4,0xC56D,0xC56E,0xC56F,0xC570,0xC571,0xC572, -0xC8E5,0xC8E6,0xC573,0xC574,0xC8E7,0xC575,0xC8E8,0xC8E9, -0xC8EA,0xC8EB,0xC576,0xC577,0xC578,0xC579,0xC57A,0xC581, -0xC8EC,0xC8ED,0xC582,0xC8EE,0xC583,0xC8EF,0xC584,0xC585, -0xC586,0xC8F0,0xC587,0xC588,0xC8F1,0xC589,0xC58A,0xC58B, -0xC8F2,0xC58C,0xC58D,0xC58E,0xC8F3,0xC58F,0xC590,0xC591, -0xC592,0xC593,0xC594,0xC595,0xC8F4,0xC8F5,0xC596,0xC597, -0xC598,0xC8F6,0xC599,0xC59A,0xC59B,0xC59C,0xC59D,0xC59E, -0xC8F7,0xC8F8,0xC59F,0xC5A0,0xC8F9,0xC641,0xC642,0xC643, -0xC8FA,0xC644,0xC645,0xC646,0xC647,0xC648,0xC649,0xC64A, -0xC8FB,0xC8FC,0xC64B,0xC8FD,0xC64C,0xC8FE,0xC64D,0xC64E, -0xC64F,0xC650,0xC651,0xC652}; - -/* page 9 0xF900-0xFA0B */ -static uint16 tab_uni_ksc56019[]={ -0xCBD0,0xCBD6,0xCBE7,0xCDCF,0xCDE8,0xCEAD,0xCFFB,0xD0A2, -0xD0B8,0xD0D0,0xD0DD,0xD1D4,0xD1D5,0xD1D8,0xD1DB,0xD1DC, -0xD1DD,0xD1DE,0xD1DF,0xD1E0,0xD1E2,0xD1E3,0xD1E4,0xD1E5, -0xD1E6,0xD1E8,0xD1E9,0xD1EA,0xD1EB,0xD1ED,0xD1EF,0xD1F0, -0xD1F2,0xD1F6,0xD1FA,0xD1FC,0xD1FD,0xD1FE,0xD2A2,0xD2A3, -0xD2A7,0xD2A8,0xD2A9,0xD2AA,0xD2AB,0xD2AD,0xD2B2,0xD2BE, -0xD2C2,0xD2C3,0xD2C4,0xD2C6,0xD2C7,0xD2C8,0xD2C9,0xD2CA, -0xD2CB,0xD2CD,0xD2CE,0xD2CF,0xD2D0,0xD2D1,0xD2D2,0xD2D3, -0xD2D4,0xD2D5,0xD2D6,0xD2D7,0xD2D9,0xD2DA,0xD2DE,0xD2DF, -0xD2E1,0xD2E2,0xD2E4,0xD2E5,0xD2E6,0xD2E7,0xD2E8,0xD2E9, -0xD2EA,0xD2EB,0xD2F0,0xD2F1,0xD2F2,0xD2F3,0xD2F4,0xD2F5, -0xD2F7,0xD2F8,0xD4E6,0xD4FC,0xD5A5,0xD5AB,0xD5AE,0xD6B8, -0xD6CD,0xD7CB,0xD7E4,0xDBC5,0xDBE4,0xDCA5,0xDDA5,0xDDD5, -0xDDF4,0xDEFC,0xDEFE,0xDFB3,0xDFE1,0xDFE8,0xE0F1,0xE1AD, -0xE1ED,0xE3F5,0xE4A1,0xE4A9,0xE5AE,0xE5B1,0xE5B2,0xE5B9, -0xE5BB,0xE5BC,0xE5C4,0xE5CE,0xE5D0,0xE5D2,0xE5D6,0xE5FA, -0xE5FB,0xE5FC,0xE5FE,0xE6A1,0xE6A4,0xE6A7,0xE6AD,0xE6AF, -0xE6B0,0xE6B1,0xE6B3,0xE6B7,0xE6B8,0xE6BC,0xE6C4,0xE6C6, -0xE6C7,0xE6CA,0xE6D2,0xE6D6,0xE6D9,0xE6DC,0xE6DF,0xE6E1, -0xE6E4,0xE6E5,0xE6E6,0xE6E8,0xE6EA,0xE6EB,0xE6EC,0xE6EF, -0xE6F1,0xE6F2,0xE6F5,0xE6F6,0xE6F7,0xE6F9,0xE7A1,0xE7A6, -0xE7A9,0xE7AA,0xE7AC,0xE7AD,0xE7B0,0xE7BF,0xE7C1,0xE7C6, -0xE7C7,0xE7CB,0xE7CD,0xE7CF,0xE7D0,0xE7D3,0xE7DF,0xE7E4, -0xE7E6,0xE7F7,0xE8E7,0xE8E8,0xE8F0,0xE8F1,0xE8F7,0xE8F9, -0xE8FB,0xE8FE,0xE9A7,0xE9AC,0xE9CC,0xE9F7,0xEAC1,0xEAE5, -0xEAF4,0xEAF7,0xEAFC,0xEAFE,0xEBA4,0xEBA7,0xEBA9,0xEBAA, -0xEBBA,0xEBBB,0xEBBD,0xEBC1,0xEBC2,0xEBC6,0xEBC7,0xEBCC, -0xEBCF,0xEBD0,0xEBD1,0xEBD2,0xEBD8,0xECA6,0xECA7,0xECAA, -0xECAF,0xECB0,0xECB1,0xECB2,0xECB5,0xECB8,0xECBA,0xECC0, -0xECC1,0xECC5,0xECC6,0xECC9,0xECCA,0xECD5,0xECDD,0xECDE, -0xECE1,0xECE4,0xECE7,0xECE8,0xECF7,0xECF8,0xECFA,0xEDA1, -0xEDA2,0xEDA3,0xEDEE,0xEEDB,0xF2BD,0xF2FA,0xF3B1,0xF4A7, -0xF4EE,0xF6F4,0xF6F6,0xF7B8,0xF7C8,0xF7D3,0xF8DB,0xF8F0, -0xFAA1,0xFAA2,0xFAE6,0xFCA9}; - -/* page 10 0xFF01-0xFFE6 */ -static uint16 tab_uni_ksc560110[]={ -0xA3A1,0xA3A2,0xA3A3,0xA3A4,0xA3A5,0xA3A6,0xA3A7,0xA3A8, -0xA3A9,0xA3AA,0xA3AB,0xA3AC,0xA3AD,0xA3AE,0xA3AF,0xA3B0, -0xA3B1,0xA3B2,0xA3B3,0xA3B4,0xA3B5,0xA3B6,0xA3B7,0xA3B8, -0xA3B9,0xA3BA,0xA3BB,0xA3BC,0xA3BD,0xA3BE,0xA3BF,0xA3C0, -0xA3C1,0xA3C2,0xA3C3,0xA3C4,0xA3C5,0xA3C6,0xA3C7,0xA3C8, -0xA3C9,0xA3CA,0xA3CB,0xA3CC,0xA3CD,0xA3CE,0xA3CF,0xA3D0, -0xA3D1,0xA3D2,0xA3D3,0xA3D4,0xA3D5,0xA3D6,0xA3D7,0xA3D8, -0xA3D9,0xA3DA,0xA3DB,0xA1AC,0xA3DD,0xA3DE,0xA3DF,0xA3E0, -0xA3E1,0xA3E2,0xA3E3,0xA3E4,0xA3E5,0xA3E6,0xA3E7,0xA3E8, -0xA3E9,0xA3EA,0xA3EB,0xA3EC,0xA3ED,0xA3EE,0xA3EF,0xA3F0, -0xA3F1,0xA3F2,0xA3F3,0xA3F4,0xA3F5,0xA3F6,0xA3F7,0xA3F8, -0xA3F9,0xA3FA,0xA3FB,0xA3FC,0xA3FD,0xA2A6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xA1CB, -0xA1CC,0xA1FE,0xA3FE, 0,0xA1CD,0xA3DC}; - -static int func_uni_ksc5601_onechar(int code){ - if ((code>=0x00A1)&&(code<=0x0167)) - return(tab_uni_ksc56010[code-0x00A1]); - if ((code>=0x02C7)&&(code<=0x0451)) - return(tab_uni_ksc56011[code-0x02C7]); - if ((code>=0x2015)&&(code<=0x2312)) - return(tab_uni_ksc56012[code-0x2015]); - if ((code>=0x2460)&&(code<=0x266D)) - return(tab_uni_ksc56013[code-0x2460]); - if ((code>=0x3000)&&(code<=0x327F)) - return(tab_uni_ksc56014[code-0x3000]); - if ((code>=0x3380)&&(code<=0x33DD)) - return(tab_uni_ksc56015[code-0x3380]); - if ((code>=0x4E00)&&(code<=0x947F)) - return(tab_uni_ksc56016[code-0x4E00]); - if ((code>=0x9577)&&(code<=0x9F9C)) - return(tab_uni_ksc56017[code-0x9577]); - if ((code>=0xAC00)&&(code<=0xD7A3)) - return(tab_uni_ksc56018[code-0xAC00]); - if ((code>=0xF900)&&(code<=0xFA0B)) - return(tab_uni_ksc56019[code-0xF900]); - if ((code>=0xFF01)&&(code<=0xFFE6)) - return(tab_uni_ksc560110[code-0xFF01]); - return(0); -} - - -static int -my_wc_mb_euc_kr(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, uchar *s, uchar *e) -{ - int code; - - if (s >= e) - return MY_CS_TOOSMALL; - - if ((uint) wc < 0x80) - { - s[0]= (uchar) wc; - return 1; - } - - if (!(code=func_uni_ksc5601_onechar(wc))) - return MY_CS_ILUNI; - - if (s+2>e) - return MY_CS_TOOSMALL2; - - s[0]=code>>8; - s[1]=code&0xFF; - - return 2; -} - - -static int -my_mb_wc_euc_kr(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t *pwc, const uchar *s, const uchar *e) -{ - - int hi; - - if (s >= e) - return MY_CS_TOOSMALL; - - if ((hi= s[0]) < 0x80) - { - pwc[0]=hi; - return 1; - } - - if (s+2>e) - return MY_CS_TOOSMALL2; - - if (!(pwc[0]=func_ksc5601_uni_onechar((hi<<8)+s[1]))) - return -2; - - return 2; -} - - -/* - Returns well formed length of a EUC-KR string. -*/ -static size_t -my_well_formed_len_euckr(CHARSET_INFO *cs __attribute__((unused)), - const char *b, const char *e, - size_t pos, int *error) -{ - const char *b0= b; - const char *emb= e - 1; /* Last possible end of an MB character */ - - *error= 0; - while (pos-- && b < e) - { - if ((uchar) b[0] < 128) - { - /* Single byte ascii character */ - b++; - } - else if (b < emb && iseuc_kr_head(*b) && iseuc_kr_tail(b[1])) - { - /* Double byte character */ - b+= 2; - } - else - { - /* Wrong byte sequence */ - *error= 1; - break; - } - } - return (size_t) (b - b0); -} - - -static MY_COLLATION_HANDLER my_collation_ci_handler = -{ - NULL, /* init */ - my_strnncoll_simple, /* strnncoll */ - my_strnncollsp_simple, - my_strnxfrm_simple, /* strnxfrm */ - my_strnxfrmlen_simple, - my_like_range_mb, /* like_range */ - my_wildcmp_mb, /* wildcmp */ - my_strcasecmp_mb, - my_instr_mb, - my_hash_sort_simple, - my_propagate_simple -}; - -static MY_CHARSET_HANDLER my_charset_handler= -{ - NULL, /* init */ - ismbchar_euc_kr, - mbcharlen_euc_kr, - my_numchars_mb, - my_charpos_mb, - my_well_formed_len_euckr, - my_lengthsp_8bit, - my_numcells_8bit, - my_mb_wc_euc_kr, /* mb_wc */ - my_wc_mb_euc_kr, /* wc_mb */ - my_mb_ctype_mb, - my_caseup_str_mb, - my_casedn_str_mb, - my_caseup_mb_varlen, /* UPPER() can reduce length: Turkish DOTLESS i -> I */ - my_casedn_mb, /* LOWER() does not change length, use simple version*/ - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_strtoll10_8bit, - my_strntoull10rnd_8bit, - my_scan_8bit -}; - - -CHARSET_INFO my_charset_euckr_korean_ci= -{ - 19,0,0, /* number */ - MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ - "euckr", /* cs name */ - "euckr_korean_ci", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_euc_kr, - to_lower_euc_kr, - to_upper_euc_kr, - sort_order_euc_kr, - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_caseinfo_euckr, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 2, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFEFE, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_handler, - &my_collation_ci_handler -}; - - -CHARSET_INFO my_charset_euckr_bin= -{ - 85,0,0, /* number */ - MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "euckr", /* cs name */ - "euckr_bin", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_euc_kr, - to_lower_euc_kr, - to_upper_euc_kr, - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_caseinfo_euckr, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 2, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFEFE, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_handler, - &my_collation_mb_bin_handler -}; - -#endif diff --git a/deps/mysqllite/strings/ctype-extra.c b/deps/mysqllite/strings/ctype-extra.c deleted file mode 100644 index f89a45d6ed83d3..00000000000000 --- a/deps/mysqllite/strings/ctype-extra.c +++ /dev/null @@ -1,8649 +0,0 @@ -/* - This file was generated by the conf_to_src utility. Do not edit it directly, - edit the XML definitions in sql/share/charsets/ instead. - - To re-generate, run the following in the strings/ directory: - ./conf_to_src ../sql/share/charsets/ > FILE -*/ - -/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - -#include -#include - -#ifdef HAVE_CHARSET_dec8 -uchar ctype_dec8_swedish_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 -}; - -uchar to_lower_dec8_swedish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_dec8_swedish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_dec8_swedish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0x41,0x41,0x41,0x41,0x5C,0x5B,0x5C,0x43,0x45,0x45,0x45,0x45,0x49,0x49,0x49,0x49, -0x44,0x4E,0x4F,0x4F,0x4F,0x4F,0x5D,0xD7,0xD8,0x55,0x55,0x55,0x59,0x59,0xDE,0xDF, -0x41,0x41,0x41,0x41,0x5C,0x5B,0x5C,0x43,0x45,0x45,0x45,0x45,0x49,0x49,0x49,0x49, -0x44,0x4E,0x4F,0x4F,0x4F,0x4F,0x5D,0xF7,0xD8,0x55,0x55,0x55,0x59,0x59,0xDE,0xFF -}; - -uint16 to_uni_dec8_swedish_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x00A1,0x00A2,0x00A3,0x0000,0x00A5,0x0000,0x00A7, -0x00A4,0x00A9,0x00AA,0x00AB,0x0000,0x0000,0x0000,0x0000, -0x00B0,0x00B1,0x00B2,0x00B3,0x0000,0x00B5,0x00B6,0x00B7, -0x0000,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x0000,0x00BF, -0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, -0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, -0x0000,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x0152, -0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x0178,0x0000,0x00DF, -0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, -0x0000,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x0153, -0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FF,0x0000,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_cp850 -uchar ctype_cp850_general_ci[] = { -0x00, -0x20,0x30,0x30,0x30,0x30,0x30,0x30,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x30,0x30, -0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x20,0x30,0x30,0x30,0x30,0x30, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x30, -0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01, -0x01,0x02,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x02,0x10,0x01,0x10,0x10, -0x02,0x02,0x02,0x02,0x02,0x01,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x01,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x02,0x01,0x01,0x01,0x01,0x02,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10,0x01,0x10, -0x01,0x02,0x01,0x01,0x02,0x01,0x10,0x02,0x01,0x01,0x01,0x01,0x02,0x01,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20 -}; - -uchar to_lower_cp850_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x87,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x84,0x86, -0x82,0x91,0x91,0x93,0x94,0x95,0x96,0x97,0x98,0x94,0x81,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA4,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp850_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, -0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar sort_order_cp850_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x51,0x53,0x55,0x59,0x63,0x65,0x67,0x69,0x74,0x76,0x78,0x7A,0x7C,0x80, -0x8E,0x90,0x92,0x94,0x97,0x99,0xA3,0xA5,0xA7,0xA9,0xAE,0xB1,0xB2,0xB3,0xB4,0xB5, -0xB6,0x41,0x51,0x53,0x55,0x59,0x63,0x65,0x67,0x69,0x74,0x76,0x78,0x7A,0x7C,0x80, -0x8E,0x90,0x92,0x94,0x97,0x99,0xA3,0xA5,0xA7,0xA9,0xAE,0xB7,0xB8,0xB9,0xBA,0xBB, -0x54,0xA1,0x5D,0x47,0x4B,0x43,0x4D,0x54,0x5F,0x61,0x5B,0x71,0x6F,0x6B,0x4B,0x4D, -0x5D,0x4F,0x4F,0x86,0x8A,0x82,0x9F,0x9B,0xAD,0x8A,0xA1,0x8C,0xE3,0x8C,0xBD,0xBE, -0x45,0x6D,0x84,0x9D,0x7E,0x7E,0xEA,0xFA,0xFF,0xEE,0xEC,0xFD,0xFC,0xCE,0xEB,0xFB, -0xDC,0xDD,0xDE,0xC3,0xC9,0x45,0x47,0x43,0xE9,0xD5,0xCF,0xD1,0xD3,0xE2,0xE5,0xC5, -0xC6,0xCB,0xCA,0xC8,0xC2,0xCC,0x49,0x49,0xD2,0xD0,0xD7,0xD6,0xD4,0xCD,0xD8,0xE4, -0x57,0x57,0x5F,0x61,0x5B,0x73,0x6D,0x6F,0x71,0xC7,0xC4,0xDB,0xDA,0xE6,0x6B,0xD9, -0x84,0x96,0x86,0x82,0x88,0x88,0xF5,0xB0,0xB0,0x9D,0x9F,0x9B,0xAB,0xAB,0xEF,0xF4, -0xED,0xF1,0xC1,0xFE,0xF6,0xE7,0xBF,0xBC,0xF0,0xE8,0xF7,0xF9,0xF3,0xF2,0xDF,0xE0 -}; - -uint16 to_uni_cp850_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x00C7,0x00FC,0x00E9,0x00E2,0x00E4,0x00E0,0x00E5,0x00E7, -0x00EA,0x00EB,0x00E8,0x00EF,0x00EE,0x00EC,0x00C4,0x00C5, -0x00C9,0x00E6,0x00C6,0x00F4,0x00F6,0x00F2,0x00FB,0x00F9, -0x00FF,0x00D6,0x00DC,0x00F8,0x00A3,0x00D8,0x00D7,0x0192, -0x00E1,0x00ED,0x00F3,0x00FA,0x00F1,0x00D1,0x00AA,0x00BA, -0x00BF,0x00AE,0x00AC,0x00BD,0x00BC,0x00A1,0x00AB,0x00BB, -0x2591,0x2592,0x2593,0x2502,0x2524,0x00C1,0x00C2,0x00C0, -0x00A9,0x2563,0x2551,0x2557,0x255D,0x00A2,0x00A5,0x2510, -0x2514,0x2534,0x252C,0x251C,0x2500,0x253C,0x00E3,0x00C3, -0x255A,0x2554,0x2569,0x2566,0x2560,0x2550,0x256C,0x00A4, -0x00F0,0x00D0,0x00CA,0x00CB,0x00C8,0x0131,0x00CD,0x00CE, -0x00CF,0x2518,0x250C,0x2588,0x2584,0x00A6,0x00CC,0x2580, -0x00D3,0x00DF,0x00D4,0x00D2,0x00F5,0x00D5,0x00B5,0x00FE, -0x00DE,0x00DA,0x00DB,0x00D9,0x00FD,0x00DD,0x00AF,0x00B4, -0x00AD,0x00B1,0x2017,0x00BE,0x00B6,0x00A7,0x00F7,0x00B8, -0x00B0,0x00A8,0x00B7,0x00B9,0x00B3,0x00B2,0x25A0,0x00A0 -}; - -#endif - -#ifdef HAVE_CHARSET_latin1 -uchar ctype_latin1_german1_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x10,0x00,0x10,0x02,0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x10,0x01,0x00,0x01,0x00, -0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x02,0x00,0x02,0x01, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 -}; - -uchar to_lower_latin1_german1_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin1_german1_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_latin1_german1_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x43,0x45,0x45,0x45,0x45,0x49,0x49,0x49,0x49, -0xD0,0x4E,0x4F,0x4F,0x4F,0x4F,0x4F,0xD7,0x4F,0x55,0x55,0x55,0x55,0x59,0xDE,0x53, -0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x43,0x45,0x45,0x45,0x45,0x49,0x49,0x49,0x49, -0xD0,0x4E,0x4F,0x4F,0x4F,0x4F,0x4F,0xF7,0x4F,0x55,0x55,0x55,0x55,0x59,0xDE,0xFF -}; - -uint16 to_uni_latin1_german1_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0081,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, -0x02C6,0x2030,0x0160,0x2039,0x0152,0x008D,0x017D,0x008F, -0x0090,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x02DC,0x2122,0x0161,0x203A,0x0153,0x009D,0x017E,0x0178, -0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, -0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, -0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, -0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, -0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF, -0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, -0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, -0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF -}; - -#endif - -#ifdef HAVE_CHARSET_hp8 -uchar ctype_hp8_english_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x02,0x02, -0x01,0x10,0x10,0x01,0x02,0x10,0x10,0x02,0x01,0x10,0x01,0x01,0x01,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x20,0x20,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20 -}; - -uchar to_lower_hp8_english_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xC8,0xC0,0xC9,0xC1,0xCD,0xD1,0xDD,0xA8,0xA9,0xAA,0xAB,0xAC,0xCB,0xC3,0xAF, -0xB0,0xB2,0xB2,0xB3,0xB5,0xB5,0xB7,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD4,0xD1,0xD6,0xD7,0xD4,0xD5,0xD6,0xD7,0xCC,0xD9,0xCE,0xCF,0xC5,0xDD,0xDE,0xC2, -0xC4,0xE2,0xE2,0xE4,0xE4,0xD5,0xD9,0xC6,0xCA,0xEA,0xEA,0xEC,0xEC,0xC7,0xEF,0xEF, -0xF1,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_hp8_english_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB1,0xB3,0xB4,0xB4,0xB6,0xB6,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xA2,0xA4,0xDF,0xAE,0xE0,0xDC,0xE7,0xED,0xA1,0xA3,0xE8,0xAD,0xD8,0xA5,0xDA,0xDB, -0xD0,0xA6,0xD2,0xD3,0xD0,0xE5,0xD2,0xD3,0xD8,0xE6,0xDA,0xDB,0xDC,0xA7,0xDE,0xDF, -0xE0,0xE1,0xE1,0xE3,0xE3,0xE5,0xE6,0xE7,0xE8,0xE9,0xE9,0xEB,0xEB,0xED,0xEE,0xEE, -0xF0,0xF0,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar sort_order_hp8_english_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5C,0x5D,0x5B,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_hp8_english_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x00C0,0x00C2,0x00C8,0x00CA,0x00CB,0x00CE,0x00CF, -0x00B4,0x02CB,0x02C6,0x00A8,0x02DC,0x00D9,0x00DB,0x20A4, -0x00AF,0x00DD,0x00FD,0x00B0,0x00C7,0x00E7,0x00D1,0x00F1, -0x00A1,0x00BF,0x00A4,0x00A3,0x00A5,0x00A7,0x0192,0x00A2, -0x00E2,0x00EA,0x00F4,0x00FB,0x00E1,0x00E9,0x00F3,0x00FA, -0x00E0,0x00E8,0x00F2,0x00F9,0x00E4,0x00EB,0x00F6,0x00FC, -0x00C5,0x00EE,0x00D8,0x00C6,0x00E5,0x00ED,0x00F8,0x00E6, -0x00C4,0x00EC,0x00D6,0x00DC,0x00C9,0x00EF,0x00DF,0x00D4, -0x00C1,0x00C3,0x00E3,0x00D0,0x00F0,0x00CD,0x00CC,0x00D3, -0x00D2,0x00D5,0x00F5,0x0160,0x0161,0x00DA,0x0178,0x00FF, -0x00DE,0x00FE,0x00B7,0x00B5,0x00B6,0x00BE,0x2014,0x00BC, -0x00BD,0x00AA,0x00BA,0x00AB,0x25A0,0x00BB,0x00B1,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_koi8r -uchar ctype_koi8r_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x02,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x01,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01 -}; - -uchar to_lower_koi8r_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xA3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF -}; - -uchar to_upper_koi8r_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xB3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar sort_order_koi8r_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xE5,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE, -0xAF,0xB0,0xB1,0xE5,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD, -0xFE,0xDF,0xE0,0xF6,0xE3,0xE4,0xF4,0xE2,0xF5,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE, -0xEF,0xFF,0xF0,0xF1,0xF2,0xF3,0xE6,0xE1,0xFC,0xFB,0xE7,0xF8,0xFD,0xF9,0xF7,0xFA, -0xFE,0xDF,0xE0,0xF6,0xE3,0xE4,0xF4,0xE2,0xF5,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE, -0xEF,0xFF,0xF0,0xF1,0xF2,0xF3,0xE6,0xE1,0xFC,0xFB,0xE7,0xF8,0xFD,0xF9,0xF7,0xFA -}; - -uint16 to_uni_koi8r_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x2500,0x2502,0x250C,0x2510,0x2514,0x2518,0x251C,0x2524, -0x252C,0x2534,0x253C,0x2580,0x2584,0x2588,0x258C,0x2590, -0x2591,0x2592,0x2593,0x2320,0x25A0,0x2219,0x221A,0x2248, -0x2264,0x2265,0x00A0,0x2321,0x00B0,0x00B2,0x00B7,0x00F7, -0x2550,0x2551,0x2552,0x0451,0x2553,0x2554,0x2555,0x2556, -0x2557,0x2558,0x2559,0x255A,0x255B,0x255C,0x255D,0x255E, -0x255F,0x2560,0x2561,0x0401,0x2562,0x2563,0x2564,0x2565, -0x2566,0x2567,0x2568,0x2569,0x256A,0x256B,0x256C,0x00A9, -0x044E,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433, -0x0445,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E, -0x043F,0x044F,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432, -0x044C,0x044B,0x0437,0x0448,0x044D,0x0449,0x0447,0x044A, -0x042E,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413, -0x0425,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E, -0x041F,0x042F,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412, -0x042C,0x042B,0x0417,0x0428,0x042D,0x0429,0x0427,0x042A -}; - -#endif - -#ifdef HAVE_CHARSET_latin2 -uchar ctype_latin2_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x01,0x10,0x01,0x10,0x01,0x01,0x10,0x10,0x01,0x01,0x01,0x01,0x10,0x01,0x01, -0x10,0x02,0x10,0x02,0x10,0x02,0x02,0x10,0x10,0x02,0x02,0x02,0x02,0x10,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10 -}; - -uchar to_lower_latin2_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xB1,0xA2,0xB3,0xA4,0xB5,0xB6,0xA7,0xA8,0xB9,0xBA,0xBB,0xBC,0xAD,0xBE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin2_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xA1,0xB2,0xA3,0xB4,0xA5,0xA6,0xB7,0xB8,0xA9,0xAA,0xAB,0xAC,0xBD,0xAE,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_latin2_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x44,0x45,0x48,0x49,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x53,0x54,0x56, -0x58,0x59,0x5A,0x5B,0x5E,0x5F,0x60,0x61,0x62,0x63,0x64,0x68,0x69,0x6A,0x6B,0x6C, -0x6D,0x41,0x44,0x45,0x48,0x49,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x53,0x54,0x56, -0x58,0x59,0x5A,0x5B,0x5E,0x5F,0x60,0x61,0x62,0x63,0x64,0x6E,0x6F,0x70,0x71,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0x42,0xFF,0x52,0xFF,0x51,0x5C,0xFF,0xFF,0x5D,0x5B,0x5E,0x65,0xFF,0x67,0x66, -0xFF,0x42,0xFF,0x52,0xFF,0x51,0x5C,0xFF,0xFF,0x5D,0x5B,0x5E,0x65,0xFF,0x67,0x66, -0x5A,0x43,0x43,0x43,0x43,0x51,0x46,0x45,0x47,0x49,0x4A,0x49,0x49,0x4E,0x4E,0x48, -0xFF,0x55,0x54,0x57,0x56,0x56,0x56,0xFF,0x5A,0x5F,0x5F,0x5F,0x5F,0x63,0x5E,0xFF, -0x5A,0x43,0x43,0x43,0x43,0x51,0x46,0x45,0x47,0x49,0x4A,0x49,0x49,0x4E,0x4E,0x48, -0xFF,0x55,0x54,0x57,0x56,0x56,0x56,0xFF,0x5A,0x5F,0x5F,0x5F,0x5F,0x63,0x5E,0xFF -}; - -uint16 to_uni_latin2_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x0104,0x02D8,0x0141,0x00A4,0x013D,0x015A,0x00A7, -0x00A8,0x0160,0x015E,0x0164,0x0179,0x00AD,0x017D,0x017B, -0x00B0,0x0105,0x02DB,0x0142,0x00B4,0x013E,0x015B,0x02C7, -0x00B8,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C, -0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, -0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, -0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, -0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, -0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, -0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, -0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, -0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 -}; - -#endif - -#ifdef HAVE_CHARSET_swe7 -uchar ctype_swe7_swedish_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x01,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10, -0x01,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x20, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; - -uchar to_lower_swe7_swedish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_swe7_swedish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar sort_order_swe7_swedish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x45,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5C,0x5D,0x5B,0x59,0x5F, -0x45,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5C,0x5D,0x5B,0x59,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_swe7_swedish_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x00C9,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x00C4,0x00D6,0x00C5,0x00DC,0x005F, -0x00E9,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x00E4,0x00F6,0x00E5,0x00FC,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_ascii -uchar ctype_ascii_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; - -uchar to_lower_ascii_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_ascii_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar sort_order_ascii_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_ascii_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_cp1251 -uchar ctype_cp1251_bulgarian_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x01,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01,0x01, -0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x02,0x02,0x02, -0x00,0x01,0x02,0x01,0x00,0x01,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x01, -0x00,0x00,0x01,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x01,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 -}; - -uchar to_lower_cp1251_bulgarian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x90,0x83,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x9A,0x8B,0x9C,0x9D,0x9E,0x9F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA2,0xA2,0xBC,0xA4,0xB4,0xA6,0xA7,0xB8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB3,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp1251_bulgarian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x81,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x80,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x9D,0x8E,0x8F, -0xA0,0xA1,0xA1,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB2,0xA5,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xA3,0xBD,0xBD,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF -}; - -uchar sort_order_cp1251_bulgarian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7C,0x7D,0x7E,0x7F,0x80, -0x81,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x82,0x83,0x84,0x85,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x61,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x61,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0x5B,0x5C,0x5D,0x5E,0x5F,0x60,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B, -0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B, -0x5B,0x5C,0x5D,0x5E,0x5F,0x60,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B, -0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B -}; - -uint16 to_uni_cp1251_bulgarian_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021, -0x20AC,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F, -0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x2122,0x0459,0x203A,0x045A,0x045C,0x045B,0x045F, -0x00A0,0x040E,0x045E,0x0408,0x00A4,0x0490,0x00A6,0x00A7, -0x0401,0x00A9,0x0404,0x00AB,0x00AC,0x00AD,0x00AE,0x0407, -0x00B0,0x00B1,0x0406,0x0456,0x0491,0x00B5,0x00B6,0x00B7, -0x0451,0x2116,0x0454,0x00BB,0x0458,0x0405,0x0455,0x0457, -0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, -0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, -0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, -0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, -0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437, -0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F, -0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447, -0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F -}; - -#endif - -#ifdef HAVE_CHARSET_latin1 -uchar ctype_latin1_danish_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x10,0x00,0x10,0x02,0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x10,0x01,0x00,0x01,0x00, -0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x02,0x00,0x02,0x01, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 -}; - -uchar to_lower_latin1_danish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin1_danish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_latin1_danish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0x41,0x41,0x41,0x41,0x5B,0x5D,0x5B,0x43,0x45,0x45,0x45,0x45,0x49,0x49,0x49,0x49, -0x44,0x4E,0x4F,0x4F,0x4F,0x4F,0x5C,0xD7,0x5C,0x55,0x55,0x55,0x59,0x59,0xDE,0xDF, -0x41,0x41,0x41,0x41,0x5B,0x5D,0x5B,0x43,0x45,0x45,0x45,0x45,0x49,0x49,0x49,0x49, -0x44,0x4E,0x4F,0x4F,0x4F,0x4F,0x5C,0xF7,0x5C,0x55,0x55,0x55,0x59,0x59,0xDE,0xFF -}; - -uint16 to_uni_latin1_danish_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0081,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, -0x02C6,0x2030,0x0160,0x2039,0x0152,0x008D,0x017D,0x008F, -0x0090,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x02DC,0x2122,0x0161,0x203A,0x0153,0x009D,0x017E,0x0178, -0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, -0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, -0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, -0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, -0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF, -0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, -0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, -0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF -}; - -#endif - -#ifdef HAVE_CHARSET_hebrew -uchar ctype_hebrew_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x20,0x20,0x00 -}; - -uchar to_lower_hebrew_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_hebrew_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar sort_order_hebrew_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_hebrew_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x0000,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00D7,0x00AB,0x00AC,0x00AD,0x00AE,0x203E, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00F7,0x00BB,0x00BC,0x00BD,0x00BE,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2017, -0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7, -0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF, -0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7, -0x05E8,0x05E9,0x05EA,0x0000,0x0000,0x200E,0x200F,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_latin7 -uchar ctype_latin7_estonian_cs[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x01,0x20,0x10,0x20,0x10,0x10,0x00,0x00,0x20,0x10,0x20,0x10,0x20,0x10,0x10,0x10, -0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x00,0x20,0x10,0x20,0x10,0x10,0x20, -0x48,0x20,0x10,0x10,0x10,0x20,0x10,0x10,0x10,0x10,0x01,0x10,0x10,0x10,0x10,0x01, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x10,0x10,0x10,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10 -}; - -uchar to_lower_latin7_estonian_cs[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xB8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin7_estonian_cs[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xBC,0xBD,0xBE,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_latin7_estonian_cs[] = { -0x00,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x2E,0x2F,0x30,0x31,0x32,0x0A,0x0B, -0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B, -0x2C,0x33,0x34,0x35,0x36,0x37,0x38,0x27,0x39,0x3A,0x3B,0x5D,0x3C,0x28,0x3D,0x3E, -0x76,0x7A,0x7C,0x7E,0x80,0x81,0x82,0x83,0x84,0x85,0x3F,0x40,0x5E,0x5F,0x60,0x41, -0x42,0x86,0x90,0x92,0x98,0x9A,0xA4,0xA6,0xAA,0xAC,0xB2,0xB4,0xB8,0xBE,0xC0,0xC6, -0xCE,0xD0,0xD2,0xD6,0xE5,0xE8,0xEE,0xF0,0xFA,0xFC,0xDD,0x43,0x44,0x45,0x46,0x47, -0x48,0x87,0x91,0x93,0x99,0x9B,0xA5,0xA7,0xAB,0xAD,0xB3,0xB5,0xB9,0xBF,0xC1,0xC7, -0xCF,0xD1,0xD3,0xD7,0xE6,0xE9,0xEF,0xF1,0xFB,0xFD,0xDE,0x49,0x4A,0x4B,0x4C,0x1C, -0x01,0x1D,0x57,0x1E,0x5A,0x74,0x71,0x72,0x1F,0x75,0x20,0x5B,0x21,0x4E,0x52,0x51, -0x22,0x55,0x56,0x58,0x59,0x73,0x2A,0x2B,0x23,0xE7,0x24,0x5C,0x25,0x4F,0x54,0x26, -0x2D,0xFE,0x66,0x67,0x68,0xFF,0x4D,0x69,0xCC,0x6A,0xD4,0x62,0x6B,0x29,0x6C,0x8E, -0x6D,0x61,0x7D,0x7F,0x50,0x6E,0x6F,0x70,0xCD,0x7B,0xD5,0x63,0x77,0x78,0x79,0x8F, -0x8C,0xB0,0x88,0x94,0xF4,0x8A,0xA2,0xA0,0x96,0x9C,0xDF,0x9E,0xA8,0xB6,0xAE,0xBA, -0xDB,0xC2,0xC4,0xC8,0xCA,0xF2,0xF6,0x64,0xEC,0xBC,0xD8,0xEA,0xF8,0xE1,0xE3,0xDA, -0x8D,0xB1,0x89,0x95,0xF5,0x8B,0xA3,0xA1,0x97,0x9D,0xE0,0x9F,0xA9,0xB7,0xAF,0xBB, -0xDC,0xC3,0xC5,0xC9,0xCB,0xF3,0xF7,0x65,0xED,0xBD,0xD9,0xEB,0xF9,0xE2,0xE4,0x53 -}; - -uint16 to_uni_latin7_estonian_cs[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x201D,0x00A2,0x00A3,0x00A4,0x201E,0x00A6,0x00A7, -0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6, -0x00B0,0x00B1,0x00B2,0x00B3,0x201C,0x00B5,0x00B6,0x00B7, -0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6, -0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112, -0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B, -0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7, -0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF, -0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113, -0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C, -0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7, -0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x2019 -}; - -#endif - -#ifdef HAVE_CHARSET_latin2 -uchar ctype_latin2_hungarian_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x01,0x10,0x01,0x10,0x01,0x01,0x10,0x10,0x01,0x01,0x01,0x01,0x10,0x01,0x01, -0x10,0x02,0x10,0x02,0x10,0x02,0x02,0x10,0x10,0x02,0x02,0x02,0x02,0x10,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10 -}; - -uchar to_lower_latin2_hungarian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xB1,0xA2,0xB3,0xA4,0xB5,0xB6,0xA7,0xA8,0xB9,0xBA,0xBB,0xBC,0xAD,0xBE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin2_hungarian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xA1,0xB2,0xA3,0xB4,0xA5,0xA6,0xB7,0xB8,0xA9,0xAA,0xAB,0xAC,0xBD,0xAE,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_latin2_hungarian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x47,0x48,0x4C,0x4E,0x53,0x54,0x55,0x56,0x5A,0x5B,0x5C,0x60,0x61,0x64, -0x69,0x6A,0x6B,0x6E,0x72,0x75,0x7A,0x7B,0x7C,0x7D,0x7F,0x83,0x84,0x85,0x86,0x87, -0x88,0x41,0x47,0x48,0x4C,0x4E,0x53,0x54,0x55,0x56,0x5A,0x5B,0x5C,0x60,0x61,0x64, -0x69,0x6A,0x6B,0x6E,0x72,0x75,0x7A,0x7B,0x7C,0x7D,0x7F,0x89,0x8A,0x8B,0x8C,0x00, -0x01,0x78,0x4E,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x67,0x67,0x56,0x56,0x0F,0x41, -0x4E,0x12,0x13,0x67,0x67,0x64,0x78,0x75,0x78,0x67,0x78,0x1C,0x1D,0x1E,0x1F,0xFF, -0x41,0x56,0x64,0x75,0x5E,0x6F,0xFF,0x67,0xFF,0x70,0x71,0x73,0x80,0xFF,0x81,0x82, -0xFF,0x42,0xFF,0x5D,0xFF,0x41,0x6F,0xFF,0xFF,0x70,0x71,0x73,0x80,0xFF,0x81,0x82, -0x6C,0x41,0x44,0x45,0x46,0x5F,0x49,0x4B,0x4A,0x4E,0x51,0x52,0x50,0x56,0x57,0x4D, -0xFF,0x62,0x63,0x64,0x66,0x67,0x67,0xFF,0x6D,0x77,0x75,0x78,0x78,0x7E,0x74,0xFF, -0x64,0x41,0x44,0x45,0x46,0x5F,0x49,0x4B,0x4A,0x4E,0x51,0x78,0x50,0x56,0x58,0x4D, -0xFF,0x62,0x63,0x64,0x66,0x67,0x67,0xFF,0x6D,0x77,0x75,0x78,0x78,0x7E,0x74,0xFF -}; - -uint16 to_uni_latin2_hungarian_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x0104,0x02D8,0x0141,0x00A4,0x013D,0x015A,0x00A7, -0x00A8,0x0160,0x015E,0x0164,0x0179,0x00AD,0x017D,0x017B, -0x00B0,0x0105,0x02DB,0x0142,0x00B4,0x013E,0x015B,0x02C7, -0x00B8,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C, -0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, -0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, -0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, -0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, -0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, -0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, -0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, -0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 -}; - -#endif - -#ifdef HAVE_CHARSET_koi8u -uchar ctype_koi8u_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x02,0x02,0x10,0x02,0x02,0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x10, -0x10,0x10,0x10,0x01,0x01,0x10,0x01,0x01,0x10,0x10,0x10,0x10,0x10,0x01,0x10,0x10, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01 -}; - -uchar to_lower_koi8u_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x20,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x20,0x20,0x20,0xA3,0xA4,0x20,0xA6,0xA7,0x20,0x20,0x20,0x20,0x20,0xAD,0x20,0x20, -0x20,0x20,0x20,0xA3,0xA4,0x20,0xA6,0xA7,0x20,0x20,0x20,0x20,0x20,0xAD,0x20,0x20, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF -}; - -uchar to_upper_koi8u_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x20,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x20,0x20,0x20,0xB3,0xB4,0x20,0xB6,0xB7,0x20,0x20,0x20,0x20,0x20,0xBD,0x20,0x20, -0x20,0x20,0x20,0xB3,0xB4,0x20,0xB6,0xB7,0x20,0x20,0x20,0x20,0x20,0xBD,0x20,0x20, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar sort_order_koi8u_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x20,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4, -0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,0xC0,0xC1,0xC2,0xC3,0xC4, -0xC5,0xC6,0xC7,0x88,0x87,0xC8,0x8C,0x8D,0xC9,0xCA,0xCB,0xCC,0xCD,0x84,0xCE,0xCF, -0xD0,0xD1,0xD2,0x88,0x87,0xD3,0x8C,0x8D,0xD4,0xD5,0xD6,0xD7,0xD8,0x84,0xD9,0xDA, -0xA3,0x80,0x81,0x9B,0x85,0x86,0x99,0x83,0x9A,0x8B,0x8E,0x8F,0x90,0x91,0x92,0x93, -0x94,0xA4,0x95,0x96,0x97,0x98,0x89,0x82,0xA1,0xA0,0x8A,0x9D,0xA2,0x9E,0x9C,0x9F, -0xA3,0x80,0x81,0x9B,0x85,0x86,0x99,0x83,0x9A,0x8B,0x8E,0x8F,0x90,0x91,0x92,0x93, -0x94,0xA4,0x95,0x96,0x97,0x98,0x89,0x82,0xA1,0xA0,0x8A,0x9D,0xA2,0x9E,0x9C,0x9F -}; - -uint16 to_uni_koi8u_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x2500,0x2502,0x250C,0x2510,0x2514,0x2518,0x251C,0x2524, -0x252C,0x2534,0x253C,0x2580,0x2584,0x2588,0x258C,0x2590, -0x2591,0x2592,0x2593,0x2320,0x25A0,0x2022,0x221A,0x2248, -0x2264,0x2265,0x00A0,0x2321,0x00B0,0x00B2,0x00B7,0x00F7, -0x2550,0x2551,0x2552,0x0451,0x0454,0x2554,0x0456,0x0457, -0x2557,0x2558,0x2559,0x255A,0x255B,0x0491,0x255D,0x255E, -0x255F,0x2560,0x2561,0x0401,0x0404,0x2563,0x0406,0x0407, -0x2566,0x2567,0x2568,0x2569,0x256A,0x0490,0x256C,0x00A9, -0x044E,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433, -0x0445,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E, -0x043F,0x044F,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432, -0x044C,0x044B,0x0437,0x0448,0x044D,0x0449,0x0447,0x044A, -0x042E,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413, -0x0425,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E, -0x041F,0x042F,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412, -0x042C,0x042B,0x0417,0x0428,0x042D,0x0429,0x0427,0x042A -}; - -#endif - -#ifdef HAVE_CHARSET_cp1251 -uchar ctype_cp1251_ukrainian_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x01,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01,0x01, -0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x02,0x02,0x02, -0x00,0x01,0x02,0x01,0x00,0x01,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x01, -0x00,0x00,0x01,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x01,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 -}; - -uchar to_lower_cp1251_ukrainian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x90,0x83,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x9A,0x8B,0x9C,0x9D,0x9E,0x9F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA2,0xA2,0xBC,0xA4,0xB4,0xA6,0xA7,0xB8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB3,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp1251_ukrainian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x81,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x80,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x9D,0x8E,0x8F, -0xA0,0xA1,0xA1,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB2,0xA5,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xA3,0xBD,0xBD,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF -}; - -uchar sort_order_cp1251_ukrainian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x20,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4, -0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,0xC0,0xC1,0xC2,0xC3,0xC4, -0xC5,0xC6,0xC7,0xC8,0xC9,0x84,0xCA,0xCB,0x88,0xCC,0x87,0xCD,0xCE,0xCF,0xD0,0x8D, -0xD1,0xD2,0x8C,0x8C,0x84,0xD3,0xD4,0xD5,0x88,0xD6,0x87,0xD7,0xD8,0xD9,0xDA,0x8D, -0x80,0x81,0x82,0x83,0x85,0x86,0x89,0x8A,0x8B,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94, -0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xA0,0xA1,0xA2,0xA3,0xA4, -0x80,0x81,0x82,0x83,0x85,0x86,0x89,0x8A,0x8B,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94, -0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xA0,0xA1,0xA2,0xA3,0xA4 -}; - -uint16 to_uni_cp1251_ukrainian_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021, -0x20AC,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F, -0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x2122,0x0459,0x203A,0x045A,0x045C,0x045B,0x045F, -0x00A0,0x040E,0x045E,0x0408,0x00A4,0x0490,0x00A6,0x00A7, -0x0401,0x00A9,0x0404,0x00AB,0x00AC,0x00AD,0x00AE,0x0407, -0x00B0,0x00B1,0x0406,0x0456,0x0491,0x00B5,0x00B6,0x00B7, -0x0451,0x2116,0x0454,0x00BB,0x0458,0x0405,0x0455,0x0457, -0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, -0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, -0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, -0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, -0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437, -0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F, -0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447, -0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F -}; - -#endif - -#ifdef HAVE_CHARSET_greek -uchar ctype_greek_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x10,0x10,0x10,0x00,0x00,0x10,0x10,0x10,0x10,0x00,0x10,0x10,0x10,0x00,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x10,0x01,0x01,0x01,0x10,0x01,0x10,0x01,0x01, -0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00 -}; - -uchar to_lower_greek_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xDC,0xB7,0xDD,0xDE,0xDF,0xBB,0xFC,0xBD,0xFD,0xFE, -0xC0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xD2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_greek_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xDA,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xC1,0xC5,0xC7,0xC9, -0xDB,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD3,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xCF,0xD5,0xD9,0xFF -}; - -uchar sort_order_greek_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xC1,0xB7,0xC5,0xC7,0xC9,0xBB,0xCF,0xBD,0xD5,0xD9, -0xC9,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xC9,0xD5,0xC1,0xC5,0xC7,0xC9, -0xD5,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD3,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xC9,0xD5,0xCF,0xD5,0xD9,0xFF -}; - -uint16 to_uni_greek_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x02BD,0x02BC,0x00A3,0x0000,0x0000,0x00A6,0x00A7, -0x00A8,0x00A9,0x0000,0x00AB,0x00AC,0x00AD,0x0000,0x2015, -0x00B0,0x00B1,0x00B2,0x00B3,0x0384,0x0385,0x0386,0x00B7, -0x0388,0x0389,0x038A,0x00BB,0x038C,0x00BD,0x038E,0x038F, -0x0390,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397, -0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F, -0x03A0,0x03A1,0x0000,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7, -0x03A8,0x03A9,0x03AA,0x03AB,0x03AC,0x03AD,0x03AE,0x03AF, -0x03B0,0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7, -0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF, -0x03C0,0x03C1,0x03C2,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7, -0x03C8,0x03C9,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_cp1250 -uchar ctype_cp1250_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x20,0x20,0x10,0x20,0x10,0x10,0x10,0x10,0x20,0x10,0x01,0x10,0x01,0x01,0x01,0x01, -0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x02,0x10,0x02,0x02,0x02,0x02, -0x48,0x10,0x10,0x01,0x10,0x01,0x10,0x01,0x10,0x10,0x01,0x10,0x10,0x10,0x10,0x01, -0x10,0x10,0x10,0x02,0x10,0x10,0x10,0x10,0x10,0x02,0x02,0x10,0x01,0x10,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10 -}; - -uchar to_lower_cp1250_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x9A,0x8B,0x9C,0x9D,0x9E,0x9F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xB3,0xA4,0xB9,0xA6,0xA7,0xA8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBE,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp1250_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xA3,0xB4,0xB5,0xB6,0xB7,0xB8,0xA5,0xAA,0xBB,0xBC,0xBD,0xBC,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_cp1250_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x46,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x52,0x53,0x55, -0x56,0x57,0x58,0x59,0x5B,0x5C,0x5D,0x5E,0x5F,0x60,0x61,0x63,0x64,0x65,0x66,0x67, -0x68,0x41,0x42,0x43,0x46,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x52,0x53,0x55, -0x56,0x57,0x58,0x59,0x5B,0x5C,0x5D,0x5E,0x5F,0x60,0x61,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x5A,0x8B,0x5A,0x5B,0x62,0x62, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x5A,0x9B,0x5A,0x5B,0x62,0x62, -0x20,0xA1,0xA2,0x50,0xA4,0x41,0xA6,0x59,0xA8,0xA9,0x59,0xAB,0xAC,0xAD,0xAE,0x62, -0xB0,0xB1,0xB2,0x50,0xB4,0xB5,0xB6,0xB7,0xB8,0x41,0x59,0xBB,0x50,0xBD,0x50,0x62, -0x58,0x41,0x41,0x41,0x41,0x50,0x45,0x43,0x44,0x49,0x49,0x49,0x49,0x4D,0x4D,0x46, -0x47,0x53,0x53,0x55,0x55,0x55,0x55,0xD7,0x58,0x5C,0x5C,0x5C,0x5C,0x60,0x5B,0x59, -0x58,0x41,0x41,0x41,0x41,0x50,0x45,0x43,0x44,0x49,0x49,0x49,0x49,0x4D,0x4D,0x46, -0x47,0x53,0x53,0x55,0x55,0x55,0x55,0xF7,0x58,0x5C,0x5C,0x5C,0x5C,0x60,0x5B,0xFF -}; - -uint16 to_uni_cp1250_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0000,0x201A,0x0000,0x201E,0x2026,0x2020,0x2021, -0x0000,0x2030,0x0160,0x2039,0x015A,0x0164,0x017D,0x0179, -0x0000,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x2122,0x0161,0x203A,0x015B,0x0165,0x017E,0x017A, -0x00A0,0x02C7,0x02D8,0x0141,0x00A4,0x0104,0x00A6,0x00A7, -0x00A8,0x00A9,0x015E,0x00AB,0x00AC,0x00AD,0x00AE,0x017B, -0x00B0,0x00B1,0x02DB,0x0142,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x0105,0x015F,0x00BB,0x013D,0x02DD,0x013E,0x017C, -0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, -0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, -0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, -0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, -0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, -0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, -0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, -0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 -}; - -#endif - -#ifdef HAVE_CHARSET_latin2 -uchar ctype_latin2_croatian_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x01,0x10,0x01,0x10,0x01,0x01,0x10,0x10,0x01,0x01,0x01,0x01,0x10,0x01,0x01, -0x10,0x02,0x10,0x02,0x10,0x02,0x02,0x10,0x10,0x02,0x02,0x02,0x02,0x10,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10 -}; - -uchar to_lower_latin2_croatian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xB1,0xA2,0xB3,0xA4,0xB5,0xB6,0xA7,0xA8,0xB9,0xBA,0xBB,0xBC,0xAD,0xBE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin2_croatian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xA1,0xB2,0xA3,0xB4,0xA5,0xA6,0xB7,0xB8,0xA9,0xAA,0xAB,0xAC,0xBD,0xAE,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_latin2_croatian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x43,0x44,0x48,0x4B,0x4D,0x4E,0x4F,0x50,0x52,0x53,0x54,0x56,0x57,0x59, -0x5B,0x5C,0x5D,0x5F,0x62,0x64,0x66,0x67,0x68,0x69,0x6B,0xC6,0xC7,0xC8,0xC9,0xCA, -0xCB,0x41,0x43,0x44,0x48,0x4B,0x4D,0x4E,0x4F,0x50,0x52,0x53,0x54,0x56,0x57,0x59, -0x5B,0x5C,0x5D,0x5F,0x62,0x64,0x66,0x67,0x68,0x69,0x6B,0xCC,0xCD,0xCE,0xCF,0xD0, -0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0, -0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0, -0xF1,0x41,0xF2,0x54,0xF3,0x54,0x5F,0xF4,0xF5,0x61,0x5F,0x62,0x6B,0xF6,0x8E,0x6B, -0xF7,0x41,0xF8,0x54,0xF9,0x54,0x5F,0xFA,0xFB,0x61,0x5F,0x62,0x6B,0xFC,0x8E,0x6B, -0x5D,0x41,0x41,0x41,0x41,0x54,0x47,0x44,0x46,0x4B,0x4B,0x4B,0x4B,0x50,0x50,0x48, -0x4A,0x57,0x57,0x59,0x59,0x59,0x59,0xFD,0x5D,0x64,0x64,0x64,0x64,0x69,0x62,0x5F, -0x5D,0x41,0x41,0x41,0x41,0x54,0x47,0x44,0x46,0x4B,0x4B,0x4B,0x4B,0x50,0x50,0x48, -0x4A,0x57,0x57,0x59,0x59,0x59,0x59,0xFE,0x5D,0x64,0x64,0x64,0x64,0x69,0x62,0xFF -}; - -uint16 to_uni_latin2_croatian_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x0104,0x02D8,0x0141,0x00A4,0x013D,0x015A,0x00A7, -0x00A8,0x0160,0x015E,0x0164,0x0179,0x00AD,0x017D,0x017B, -0x00B0,0x0105,0x02DB,0x0142,0x00B4,0x013E,0x015B,0x02C7, -0x00B8,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C, -0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, -0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, -0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, -0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, -0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, -0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, -0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, -0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 -}; - -#endif - -#ifdef HAVE_CHARSET_cp1257 -uchar ctype_cp1257_lithuanian_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x01, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00 -}; - -uchar to_lower_cp1257_lithuanian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xB8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp1257_lithuanian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xA8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_cp1257_lithuanian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x43,0x44,0x46,0x47,0x4A,0x4B,0x4C,0x4D,0x50,0x51,0x52,0x53,0x54,0x55, -0x56,0x57,0x58,0x59,0x5B,0x5C,0x5F,0x60,0x61,0x4E,0xFF,0x62,0x63,0x64,0x65,0x66, -0x67,0x41,0x43,0x44,0x46,0x47,0x4A,0x4B,0x4C,0x4D,0x50,0x51,0x52,0x53,0x54,0x55, -0x56,0x57,0x58,0x59,0x5B,0x5C,0x5F,0x60,0x61,0x4E,0xFF,0x68,0x69,0x6A,0x6B,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0x42,0x4F,0xFF,0xFF,0xFF,0xFF,0x48,0xFF,0x45,0xFF,0xFF,0x49,0xFF,0xFF,0xFF,0xFF, -0x5A,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x5E,0xFF,0xFF,0x5D,0xFF,0xFF,0xFF,0xFF, -0xFF,0x4F,0xFF,0xFF,0xFF,0xFF,0x48,0xFF,0x45,0xFF,0xFF,0x49,0xFF,0xFF,0xFF,0xFF, -0x5A,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x5E,0xFF,0xFF,0x5D,0xFF,0xFF,0xFF,0xFF -}; - -uint16 to_uni_cp1257_lithuanian_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0000,0x201A,0x0000,0x201E,0x2026,0x2020,0x2021, -0x0000,0x2030,0x0000,0x2039,0x0000,0x00A8,0x02C7,0x00B8, -0x0000,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x2122,0x0000,0x203A,0x0000,0x00AF,0x02DB,0x0000, -0x00A0,0x0000,0x00A2,0x00A3,0x00A4,0x0000,0x00A6,0x00A7, -0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6, -0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112, -0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B, -0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7, -0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF, -0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113, -0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C, -0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7, -0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x02D9 -}; - -#endif - -#ifdef HAVE_CHARSET_latin5 -uchar ctype_latin5_turkish_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 -}; - -uchar to_lower_latin5_turkish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0xFD,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0x69,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin5_turkish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0xDD,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0x49,0xDE,0xFF -}; - -uchar sort_order_latin5_turkish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x45,0x46,0x47,0x48,0x4A,0x4B,0x4D,0x4E,0x4F,0x50,0x51,0x52, -0x54,0x55,0x56,0x57,0x59,0x5A,0x5C,0x5D,0x5E,0x5F,0x60,0x61,0x62,0x63,0x64,0x65, -0x66,0x41,0x42,0x43,0x45,0x46,0x47,0x48,0x4A,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52, -0x54,0x55,0x56,0x57,0x59,0x5A,0x5C,0x5D,0x5E,0x5F,0x60,0x87,0x88,0x89,0x8A,0x8B, -0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B, -0x9C,0x9D,0x9E,0x9F,0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB, -0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB, -0xBC,0xBD,0xBE,0xBF,0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB, -0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x44,0x46,0x46,0x46,0x46,0x4C,0x4C,0x4C,0x4C, -0x49,0x51,0x52,0x52,0x52,0x52,0x53,0xE0,0x52,0x5A,0x5A,0x5A,0x5B,0x4C,0x58,0x57, -0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x44,0x46,0x46,0x46,0x46,0x4C,0x4C,0x4C,0x4C, -0x49,0x51,0x52,0x52,0x52,0x52,0x53,0xFA,0x52,0x5A,0x5A,0x5A,0x5B,0x4B,0x58,0x5F -}; - -uint16 to_uni_latin5_turkish_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, -0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, -0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, -0x011E,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, -0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x0130,0x015E,0x00DF, -0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, -0x011F,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, -0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x0131,0x015F,0x00FF -}; - -#endif - -#ifdef HAVE_CHARSET_armscii8 -uchar ctype_armscii8_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02, -0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02, -0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02, -0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02, -0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x10,0x10 -}; - -uchar to_lower_armscii8_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xB8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB3,0xB3,0xB5,0xB5,0xB7,0xB7,0xB9,0xB9,0xBB,0xBB,0xBD,0xBD,0xBF,0xBF, -0xC1,0xC1,0xC3,0xC3,0xC5,0xC5,0xC7,0xC7,0xC9,0xC9,0xCB,0xCB,0xCD,0xCD,0xCF,0xCF, -0xD1,0xD1,0xD3,0xD3,0xD5,0xD5,0xD7,0xD7,0xD9,0xD9,0xDB,0xDB,0xDD,0xDD,0xDF,0xDF, -0xE1,0xE1,0xE3,0xE3,0xE5,0xE5,0xE7,0xE7,0xE9,0xE9,0xEB,0xEB,0xED,0xED,0xEF,0xEF, -0xF1,0xF1,0xF3,0xF3,0xF5,0xF5,0xF7,0xF7,0xF9,0xF9,0xFB,0xFB,0xFD,0xFD,0xFE,0xFF -}; - -uchar to_upper_armscii8_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB2,0xB4,0xB4,0xB6,0xB6,0xB8,0xB8,0xBA,0xBA,0xBC,0xBC,0xBE,0xBE, -0xC0,0xC0,0xC2,0xC2,0xC4,0xC4,0xC6,0xC6,0xC8,0xC8,0xCA,0xCA,0xCC,0xCC,0xCE,0xCE, -0xD0,0xD0,0xD2,0xD2,0xD4,0xD4,0xD6,0xD6,0xD8,0xD8,0xDA,0xDA,0xDC,0xDC,0xDE,0xDE, -0xE0,0xE0,0xE2,0xE2,0xE4,0xE4,0xE6,0xE6,0xE8,0xE8,0xEA,0xEA,0xEC,0xEC,0xEE,0xEE, -0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFE,0xFF -}; - -uchar sort_order_armscii8_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_armscii8_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x2741,0x00A7,0x0589,0x0029,0x0028,0x00BB,0x00AB, -0x2014,0x002E,0x055D,0x002C,0x002D,0x055F,0x2026,0x055C, -0x055B,0x055E,0x0531,0x0561,0x0532,0x0562,0x0533,0x0563, -0x0534,0x0564,0x0535,0x0565,0x0536,0x0566,0x0537,0x0567, -0x0538,0x0568,0x0539,0x0569,0x053A,0x056A,0x053B,0x056B, -0x053C,0x056C,0x053D,0x056D,0x053E,0x056E,0x053F,0x056F, -0x0540,0x0570,0x0541,0x0571,0x0542,0x0572,0x0543,0x0573, -0x0544,0x0574,0x0545,0x0575,0x0546,0x0576,0x0547,0x0577, -0x0548,0x0578,0x0549,0x0579,0x054A,0x057A,0x054B,0x057B, -0x054C,0x057C,0x054D,0x057D,0x054E,0x057E,0x054F,0x057F, -0x0550,0x0580,0x0551,0x0581,0x0552,0x0582,0x0553,0x0583, -0x0554,0x0584,0x0555,0x0585,0x0556,0x0586,0x2019,0x0027 -}; - -#endif - -#ifdef HAVE_CHARSET_cp866 -uchar ctype_cp866_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48 -}; - -uchar to_lower_cp866_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0x86,0x87,0x88,0x89,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0x86,0x87,0x88,0x89,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF1,0xF1,0xF3,0xF3,0xF5,0xF5,0xF7,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp866_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar sort_order_cp866_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x43,0x45,0x47,0x49,0x4B,0x4D,0x4F,0x51,0x53,0x55,0x57,0x59,0x5B,0x5D, -0x5F,0x61,0x63,0x65,0x67,0x69,0x6B,0x6D,0x6F,0x71,0x73,0xBD,0xBE,0xBF,0xC0,0xC1, -0xC2,0x41,0x43,0x45,0x47,0x49,0x4B,0x4D,0x4F,0x51,0x54,0x55,0x57,0x59,0x5B,0x5D, -0x5F,0x61,0x63,0x65,0x67,0x69,0x6B,0x6D,0x6F,0x71,0x73,0xC3,0xC4,0xC5,0xC6,0xC7, -0x75,0x77,0x79,0x7B,0x7D,0x7F,0x85,0x87,0x89,0x8D,0x8F,0x91,0x93,0x95,0x97,0x99, -0x9B,0x9D,0x9F,0xA1,0xA5,0xA7,0xA9,0xAB,0xAD,0xAF,0xB1,0xB3,0xB5,0xB7,0xB9,0xBB, -0x75,0x77,0x79,0x7B,0x7D,0x7F,0x85,0x87,0x89,0x8D,0x8F,0x91,0x93,0x95,0x97,0x99, -0xC8,0xC9,0xCA,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -0x9B,0x9D,0x9F,0xA1,0xA5,0xA7,0xA9,0xAB,0xAD,0xAF,0xB1,0xB3,0xB5,0xB7,0xB9,0xBB, -0x81,0x81,0x83,0x83,0x8B,0x8B,0xA3,0xA3,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2 -}; - -uint16 to_uni_cp866_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, -0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, -0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, -0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, -0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437, -0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F, -0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556, -0x2555,0x2563,0x2551,0x2557,0x255D,0x255C,0x255B,0x2510, -0x2514,0x2534,0x252C,0x251C,0x2500,0x253C,0x255E,0x255F, -0x255A,0x2554,0x2569,0x2566,0x2560,0x2550,0x256C,0x2567, -0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256B, -0x256A,0x2518,0x250C,0x2588,0x2584,0x258C,0x2590,0x2580, -0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447, -0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F, -0x0401,0x0451,0x0404,0x0454,0x0407,0x0457,0x040E,0x045E, -0x00B0,0x2219,0x00B7,0x221A,0x207F,0x00B2,0x25A0,0x00A0 -}; - -#endif - -#ifdef HAVE_CHARSET_keybcs2 -uchar ctype_keybcs2_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x01,0x02,0x82,0x02,0x02,0x01,0x01,0x02,0x82,0x81,0x01,0x01,0x02,0x02,0x01,0x01, -0x81,0x02,0x01,0x02,0x02,0x01,0x02,0x01,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x01,0x02,0x01,0x02,0x00,0x02,0x01,0x01,0x01,0x02,0x00,0x02,0x02,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48 -}; - -uchar to_lower_keybcs2_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x87,0x81,0x82,0x83,0x84,0x83,0x86,0x87,0x88,0x88,0x8D,0xA1,0x8C,0x8D,0x84,0xA0, -0x82,0x91,0x91,0x93,0x94,0xA2,0x96,0xA3,0x98,0x94,0x81,0x9B,0x8C,0x98,0xA9,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA4,0x96,0x93,0x9B,0xA9,0xAA,0xAA,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xED,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_keybcs2_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x68,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x87,0x9A,0x90,0x85,0x8E,0x85,0x86,0x80,0x89,0x89,0x8A,0x8B,0x9C,0x8A,0x8E,0x8F, -0x90,0x92,0x92,0xA7,0x99,0x95,0xA6,0x97,0x9D,0x99,0x9A,0xA8,0x9C,0x9D,0x9E,0x9F, -0x8F,0x8B,0x95,0x97,0xA5,0xA5,0xA6,0xA7,0xA8,0x9E,0xAB,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xE8,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar sort_order_keybcs2_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x44,0x45,0x47,0x49,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x5A, -0x5E,0x5F,0x60,0x63,0x66,0x68,0x6C,0x6D,0x6E,0x6F,0x72,0x90,0x91,0x92,0x93,0x94, -0x95,0x41,0x44,0x45,0x47,0x49,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x5A, -0x5E,0x5F,0x60,0x63,0x66,0x68,0x6C,0x6D,0x6E,0x6F,0x72,0x96,0x97,0x98,0x99,0x9A, -0x45,0x68,0x49,0x47,0x41,0x47,0x66,0x45,0x49,0x49,0x56,0x53,0x56,0x56,0x41,0x41, -0x49,0x72,0x72,0x5A,0x5A,0x5A,0x68,0x68,0x6F,0x5A,0x68,0x63,0x56,0x6F,0x60,0x66, -0x41,0x53,0x5A,0x68,0x58,0x58,0x68,0x5A,0x63,0x60,0x60,0x60,0xA0,0xA1,0xA2,0xA3, -0xA4,0xA5,0xA6,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC, -0xBD,0xBE,0xBF,0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC, -0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC, -0x80,0x65,0x83,0x87,0x88,0x89,0xDD,0x8A,0x85,0x8B,0x84,0x81,0xDE,0x85,0x82,0xDF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_keybcs2_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x010C,0x00FC,0x00E9,0x010F,0x00E4,0x010E,0x0164,0x010D, -0x011B,0x011A,0x0139,0x00CD,0x013E,0x013A,0x00C4,0x00C1, -0x00C9,0x017E,0x017D,0x00F4,0x00F6,0x00D3,0x016F,0x00DA, -0x00FD,0x00D6,0x00DC,0x0160,0x013D,0x00DD,0x0158,0x0165, -0x00E1,0x00ED,0x00F3,0x00FA,0x0148,0x0147,0x016E,0x00D4, -0x0161,0x0159,0x0155,0x0154,0x00BC,0x00A1,0x00AB,0x00BB, -0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556, -0x2555,0x2563,0x2551,0x2557,0x255D,0x255C,0x255B,0x2510, -0x2514,0x2534,0x252C,0x251C,0x2500,0x253C,0x255E,0x255F, -0x255A,0x2554,0x2569,0x2566,0x2560,0x2550,0x256C,0x2567, -0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256B, -0x256A,0x2518,0x250C,0x2588,0x2584,0x258C,0x2590,0x2580, -0x03B1,0x00DF,0x0393,0x03C0,0x03A3,0x03C3,0x00B5,0x03C4, -0x03A6,0x0398,0x03A9,0x03B4,0x221E,0x03C6,0x03B5,0x2229, -0x2261,0x00B1,0x2265,0x2264,0x2320,0x2321,0x00F7,0x2248, -0x00B0,0x2219,0x00B7,0x221A,0x207F,0x00B2,0x25A0,0x00A0 -}; - -#endif - -#ifdef HAVE_CHARSET_macce -uchar ctype_macce_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x01,0x01,0x02,0x01,0x01,0x01,0x01,0x02,0x02,0x01,0x02,0x02,0x01,0x02,0x02,0x01, -0x02,0x01,0x02,0x02,0x01,0x02,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x02,0x02, -0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x02,0x01, -0x02,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01, -0x02,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x02,0x01, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x02,0x01,0x00,0x00,0x02,0x01, -0x02,0x01,0x00,0x00,0x02,0x01,0x02,0x01,0x01,0x02,0x01,0x01,0x02,0x01,0x01,0x01, -0x02,0x01,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x02,0x01,0x01,0x02,0x01,0x00 -}; - -uchar to_lower_macce_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x54,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x54,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x8A,0x82,0x82,0x8E,0x88,0x9A,0x9F,0x87,0x88,0x8B,0x8A,0x8B,0x8D,0x8D,0x8E,0x90, -0x90,0x93,0x92,0x93,0x95,0x95,0x98,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9E,0x9E,0x9F, -0xA0,0xA1,0xAB,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xB0, -0xB0,0xB4,0xB2,0xB3,0xB4,0xFA,0xB6,0xB7,0xB8,0xBA,0xBA,0xBC,0xBC,0xBE,0xBE,0xC0, -0xC0,0xC4,0xC2,0xC3,0xC4,0xCB,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0x9B,0xCE,0xD8, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xDA,0xDA,0xDE,0xDC,0xDD,0xDE,0xE0, -0xE0,0xE4,0xE2,0xE3,0xE4,0xE6,0xE6,0x87,0xE9,0xE9,0x92,0xEC,0xEC,0xF0,0x97,0x99, -0xF0,0xF3,0x9C,0xF3,0xF5,0xF5,0xF7,0xF7,0xF9,0xF9,0xFA,0xFD,0xB8,0xFD,0xAE,0xFF -}; - -uchar to_upper_macce_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x74,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x74,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x81,0x83,0x84,0x85,0x86,0xE7,0x84,0x89,0x80,0x89,0x8C,0x8C,0x83,0x8F, -0x8F,0x91,0xEA,0x91,0x94,0x94,0x96,0xEE,0x96,0xEF,0x85,0xCD,0xF2,0x9D,0x9D,0x86, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xA2,0xAC,0xAD,0xFE,0xAF, -0xAF,0xB1,0xB2,0xB3,0xB1,0xB5,0xB6,0xB7,0xFC,0xB9,0xB9,0xBB,0xBB,0xBD,0xBD,0xBF, -0xBF,0xC1,0xC2,0xC3,0xC1,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xC5,0xCC,0xCD,0xCC,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xCF,0xD9,0xD9,0xDB,0xDC,0xDD,0xDB,0xDF, -0xDF,0xE1,0xE2,0xE3,0xE1,0xE5,0xE5,0xE7,0xE8,0xE8,0xEA,0xEB,0xEB,0xED,0xEE,0xEF, -0xED,0xF1,0xF2,0xF1,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xB5,0xFB,0xFC,0xFB,0xFE,0xFF -}; - -uchar sort_order_macce_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x46,0x47,0x4A,0x4C,0x52,0x53,0x55,0x56,0x5A,0x5B,0x5D,0x62,0x62,0x67, -0x6F,0x70,0x71,0x75,0x79,0x81,0x88,0x89,0x8A,0x8B,0x8D,0x90,0x91,0x92,0x93,0x94, -0x95,0x41,0x46,0x47,0x4A,0x4C,0x52,0x53,0x55,0x56,0x5A,0x5B,0x5D,0x62,0x62,0x67, -0x6F,0x70,0x71,0x75,0x79,0x81,0x88,0x89,0x8A,0x8B,0x8D,0x96,0x97,0x98,0x99,0x9A, -0x41,0x41,0x41,0x4C,0x41,0x67,0x81,0x41,0x41,0x47,0x41,0x47,0x47,0x47,0x4C,0x8D, -0x8D,0x4A,0x56,0x4A,0x4C,0x4C,0x4C,0x67,0x4C,0x67,0x67,0x67,0x81,0x4C,0x4C,0x81, -0xA0,0xA1,0x4C,0xA3,0xA4,0xA5,0xA6,0x75,0xA8,0xA9,0xAA,0x4C,0xAC,0xAD,0x53,0x56, -0x56,0x56,0xB2,0xB3,0x56,0x5B,0xB6,0xB7,0x5D,0x5D,0x5D,0x5D,0x5D,0x5D,0x5D,0x62, -0x62,0x62,0xC2,0xC3,0x62,0x62,0xC6,0xC7,0xC8,0xC9,0xCA,0x62,0x67,0x67,0x67,0x67, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0x67,0x71,0x71,0x71,0xDC,0xDD,0x71,0x71, -0x71,0x75,0xE2,0xE3,0x75,0x75,0x75,0x41,0x79,0x79,0x56,0x8D,0x8D,0x81,0x67,0x67, -0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x8B,0x8B,0x5B,0x8D,0x5D,0x8D,0x53,0xFF -}; - -uint16 to_uni_macce_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x00C4,0x0100,0x0101,0x00C9,0x0104,0x00D6,0x00DC,0x00E1, -0x0105,0x010C,0x00E4,0x010D,0x0106,0x0107,0x00E9,0x0179, -0x017A,0x010E,0x00ED,0x010F,0x0112,0x0113,0x0116,0x00F3, -0x0117,0x00F4,0x00F6,0x00F5,0x00FA,0x011A,0x011B,0x00FC, -0x2020,0x00B0,0x0118,0x00A3,0x00A7,0x2022,0x00B6,0x00DF, -0x00AE,0x00A9,0x2122,0x0119,0x00A8,0x2260,0x0123,0x012E, -0x012F,0x012A,0x2264,0x2265,0x012B,0x0136,0x2202,0x2211, -0x0142,0x013B,0x013C,0x013D,0x013E,0x0139,0x013A,0x0145, -0x0146,0x0143,0x00AC,0x221A,0x0144,0x0147,0x2206,0x00AB, -0x00BB,0x2026,0x00A0,0x0148,0x0150,0x00D5,0x0151,0x014C, -0x2013,0x2014,0x201C,0x201D,0x2018,0x2019,0x00F7,0x25CA, -0x014D,0x0154,0x0155,0x0158,0x2039,0x203A,0x0159,0x0156, -0x0157,0x0160,0x201A,0x201E,0x0161,0x015A,0x015B,0x00C1, -0x0164,0x0165,0x00CD,0x017D,0x017E,0x016A,0x00D3,0x00D4, -0x016B,0x016E,0x00DA,0x016F,0x0170,0x0171,0x0172,0x0173, -0x00DD,0x00FD,0x0137,0x017B,0x0141,0x017C,0x0122,0x02C7 -}; - -#endif - -#ifdef HAVE_CHARSET_macroman -uchar ctype_macroman_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x10, -0x20,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, -0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x01,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x20,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x00,0x01,0x01,0x01,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; - -uchar to_lower_macroman_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x8A,0x8C,0x8D,0x8E,0x96,0x9A,0x9F,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xBE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0x88,0x8B,0x9B,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD8,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0x89,0x90,0x87,0x91,0x8F,0x92,0x94,0x95,0x93,0x97,0x99, -0xF0,0x98,0x9C,0x9E,0x9D,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_macroman_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0xE7,0xCB,0xE5,0x80,0xCC,0x81,0x82,0x83,0xE9, -0xE6,0xE8,0xEA,0xED,0xEB,0xEC,0x84,0xEE,0xF1,0xEF,0x85,0xCD,0xF2,0xF4,0xF3,0x86, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xAE,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD9,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar sort_order_macroman_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x49,0x50,0x52,0x53,0x57,0x59,0x60,0x61,0x67,0x68,0x69,0x70,0x71,0x72, -0x79,0x80,0x81,0x82,0x84,0x85,0x90,0x91,0x92,0x93,0x95,0xA0,0xA1,0xA2,0xA3,0xA4, -0xA5,0x41,0x49,0x50,0x52,0x53,0x57,0x59,0x60,0x61,0x67,0x68,0x69,0x70,0x71,0x72, -0x79,0x80,0x81,0x82,0x84,0x85,0x90,0x91,0x92,0x93,0x95,0xA6,0xA7,0xA8,0xA9,0xAA, -0x41,0x41,0x50,0x53,0x71,0x72,0x85,0x41,0x41,0x41,0x41,0x41,0x41,0x50,0x53,0x53, -0x53,0x53,0x61,0x61,0x61,0x61,0x71,0x72,0x72,0x72,0x72,0x72,0x85,0x85,0x85,0x85, -0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0x82,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0x48,0x72, -0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0x48,0x72, -0xC6,0xC7,0xC8,0xC9,0x57,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0x41,0x41,0x72,0xD0,0xD1, -0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x93,0x93,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0x41,0x53,0x41,0x53,0x53,0x61,0x61,0x61,0x61,0x72,0x72, -0xF0,0x72,0x85,0x85,0x85,0x61,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_macroman_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x00C4,0x00C5,0x00C7,0x00C9,0x00D1,0x00D6,0x00DC,0x00E1, -0x00E0,0x00E2,0x00E4,0x00E3,0x00E5,0x00E7,0x00E9,0x00E8, -0x00EA,0x00EB,0x00ED,0x00EC,0x00EE,0x00EF,0x00F1,0x00F3, -0x00F2,0x00F4,0x00F6,0x00F5,0x00FA,0x00F9,0x00FB,0x00FC, -0x2020,0x00B0,0x00A2,0x00A3,0x00A7,0x2022,0x00B6,0x00DF, -0x00AE,0x00A9,0x2122,0x00B4,0x00A8,0x2260,0x00C6,0x00D8, -0x221E,0x00B1,0x2264,0x2265,0x00A5,0x00B5,0x2202,0x2211, -0x220F,0x03C0,0x222B,0x00AA,0x00BA,0x03A9,0x00E6,0x00F8, -0x00BF,0x00A1,0x00AC,0x221A,0x0192,0x2248,0x2206,0x00AB, -0x00BB,0x2026,0x00A0,0x00C0,0x00C3,0x00D5,0x0152,0x0153, -0x2013,0x2014,0x201C,0x201D,0x2018,0x2019,0x00F7,0x25CA, -0x00FF,0x0178,0x2044,0x20AC,0x2039,0x203A,0xFB01,0xFB02, -0x2021,0x00B7,0x201A,0x201E,0x2030,0x00C2,0x00CA,0x00C1, -0x00CB,0x00C8,0x00CD,0x00CE,0x00CF,0x00CC,0x00D3,0x00D4, -0xF8FF,0x00D2,0x00DA,0x00DB,0x00D9,0x0131,0x02C6,0x02DC, -0x00AF,0x02D8,0x02D9,0x02DA,0x00B8,0x02DD,0x02DB,0x02C7 -}; - -#endif - -#ifdef HAVE_CHARSET_cp852 -uchar ctype_cp852_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x02,0x02,0x01,0x01,0x01, -0x01,0x01,0x02,0x02,0x02,0x01,0x02,0x01,0x02,0x01,0x01,0x01,0x02,0x01,0x00,0x02, -0x02,0x02,0x02,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x00,0x02,0x01,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x00,0x00,0x00,0x00,0x01,0x02,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x01,0x01,0x01,0x02,0x01,0x01,0x01,0x02,0x00,0x00,0x00,0x00,0x01,0x01,0x00, -0x01,0x02,0x01,0x01,0x02,0x02,0x01,0x02,0x01,0x01,0x02,0x01,0x02,0x01,0x02,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x02,0x00,0x48 -}; - -uchar to_lower_cp852_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x87,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8B,0x8B,0x8C,0xAB,0x84,0x86, -0x82,0x92,0x92,0x93,0x94,0x96,0x96,0x98,0x98,0x94,0x81,0x9C,0x9C,0x88,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA5,0xA5,0xA7,0xA7,0xA9,0xA9,0xAA,0xAB,0x9F,0xB8,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xA0,0x83,0xD8,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD0,0xD4,0x89,0xD4,0xE5,0xA1,0x8C,0xD8,0xD9,0xDA,0xDB,0xDC,0xEE,0x85,0xDF, -0xA2,0xE1,0x93,0xE4,0xE4,0xE5,0xE7,0xE7,0xEA,0xA3,0xE8,0xFB,0xEC,0xEC,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp852_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x9A,0x90,0xB6,0x8E,0xDE,0x8F,0x80,0x9D,0xD3,0x8A,0x8A,0xD7,0x8D,0x8E,0x8F, -0x90,0x91,0x91,0xE2,0x99,0x95,0x95,0x97,0x97,0x99,0x9A,0x9B,0x9B,0x9D,0x9E,0xAC, -0xB5,0xD6,0xE0,0xE9,0xA4,0xA4,0xA6,0xA6,0xA8,0xA8,0xAA,0x8D,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xAD,0xB9,0xBA,0xBB,0xBC,0xBE,0xBD,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC6,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD1,0xD1,0xD2,0xD3,0xD2,0xD5,0xD6,0xD7,0xB7,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE3,0xD5,0xE6,0xE6,0xE8,0xE9,0xE8,0xEB,0xED,0xED,0xDD,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xEB,0xFC,0xFC,0xFE,0xFF -}; - -uchar sort_order_cp852_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x47,0x48,0x4C,0x4F,0x54,0x55,0x56,0x57,0x5A,0x5B,0x5C,0x5E,0x5F,0x62, -0x67,0x68,0x69,0x6C,0x71,0x74,0x75,0x76,0x77,0x78,0x7B,0x90,0x91,0x92,0x93,0x94, -0x95,0x41,0x47,0x48,0x4C,0x4F,0x54,0x55,0x56,0x57,0x5A,0x5B,0x5C,0x5E,0x5F,0x62, -0x67,0x68,0x69,0x6C,0x71,0x74,0x75,0x76,0x77,0x78,0x7B,0x96,0x97,0x98,0x99,0x9A, -0x48,0x74,0x4F,0x41,0x41,0x74,0x48,0x48,0x5C,0x4F,0x62,0x62,0x57,0x7B,0x41,0x48, -0x4F,0x5C,0x5C,0x62,0x62,0x5C,0x5C,0x6C,0x6C,0x62,0x74,0x71,0x71,0x5C,0x9E,0x48, -0x41,0x57,0x62,0x74,0x41,0x41,0x7B,0x7B,0x4F,0x4F,0xAA,0x7B,0x48,0x6C,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0x41,0x41,0x4F,0x6C,0xB5,0xBA,0xBB,0xBC,0x7B,0x7B,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0x41,0x41,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0x4C,0x4C,0x4C,0x4F,0x4C,0x60,0x57,0x57,0x4F,0xD9,0xDA,0xDB,0xDC,0x71,0x74,0xDF, -0x62,0x70,0x62,0x60,0x60,0x60,0x6C,0x6C,0x69,0x74,0x69,0x74,0x78,0x78,0x71,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0x74,0x69,0x69,0xFE,0xFF -}; - -uint16 to_uni_cp852_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x00C7,0x00FC,0x00E9,0x00E2,0x00E4,0x016F,0x0107,0x00E7, -0x0142,0x00EB,0x0150,0x0151,0x00EE,0x0179,0x00C4,0x0106, -0x00C9,0x0139,0x013A,0x00F4,0x00F6,0x013D,0x013E,0x015A, -0x015B,0x00D6,0x00DC,0x0164,0x0165,0x0141,0x00D7,0x010D, -0x00E1,0x00ED,0x00F3,0x00FA,0x0104,0x0105,0x017D,0x017E, -0x0118,0x0119,0x00AC,0x017A,0x010C,0x015F,0x00AB,0x00BB, -0x2591,0x2592,0x2593,0x2502,0x2524,0x00C1,0x00C2,0x011A, -0x015E,0x2563,0x2551,0x2557,0x255D,0x017B,0x017C,0x2510, -0x2514,0x2534,0x252C,0x251C,0x2500,0x253C,0x0102,0x0103, -0x255A,0x2554,0x2569,0x2566,0x2560,0x2550,0x256C,0x00A4, -0x0111,0x0110,0x010E,0x00CB,0x010F,0x0147,0x00CD,0x00CE, -0x011B,0x2518,0x250C,0x2588,0x2584,0x0162,0x016E,0x2580, -0x00D3,0x00DF,0x00D4,0x0143,0x0144,0x0148,0x0160,0x0161, -0x0154,0x00DA,0x0155,0x0170,0x00FD,0x00DD,0x0163,0x00B4, -0x00AD,0x02DD,0x02DB,0x02C7,0x02D8,0x00A7,0x00F7,0x00B8, -0x00B0,0x00A8,0x02D9,0x0171,0x0158,0x0159,0x25A0,0x00A0 -}; - -#endif - -#ifdef HAVE_CHARSET_latin7 -uchar ctype_latin7_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x01,0x20,0x10,0x20,0x10,0x10,0x00,0x00,0x20,0x10,0x20,0x10,0x20,0x10,0x10,0x10, -0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x00,0x20,0x10,0x20,0x10,0x10,0x20, -0x48,0x20,0x10,0x10,0x10,0x20,0x10,0x10,0x10,0x10,0x01,0x10,0x10,0x10,0x10,0x01, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x10,0x10,0x10,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10 -}; - -uchar to_lower_latin7_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xB8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin7_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xBC,0xBD,0xBE,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_latin7_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x30,0x32,0x33,0x34,0x35,0x36,0x37,0x2B,0x38,0x39,0x3A,0x5C,0x3B,0x2C,0x3C,0x3D, -0x76,0x7A,0x7C,0x7E,0x80,0x81,0x82,0x83,0x84,0x85,0x3E,0x3F,0x5D,0x5E,0x5F,0x40, -0x41,0x86,0x92,0x94,0x9A,0x9C,0xA6,0xA8,0xAC,0xAE,0xB4,0xB6,0xBA,0xC0,0xC2,0xC8, -0xD4,0xD6,0xD8,0xDC,0xE3,0xE6,0xEE,0xF0,0xF2,0xF4,0xF6,0x42,0x43,0x44,0x45,0x46, -0x47,0x86,0x92,0x94,0x9A,0x9C,0xA6,0xA8,0xAC,0xAE,0xB4,0xB6,0xBA,0xC0,0xC2,0xC8, -0xD4,0xD6,0xD8,0xDC,0xE2,0xE6,0xEE,0xF0,0xF2,0xF4,0xF6,0x48,0x49,0x4A,0x4B,0x20, -0x75,0x21,0x56,0x22,0x59,0x73,0x70,0x71,0x23,0x74,0x24,0x5A,0x25,0x4D,0x51,0x50, -0x26,0x54,0x55,0x57,0x58,0x72,0x2E,0x2F,0x27,0xE5,0x28,0x5B,0x29,0x4E,0x53,0x2A, -0x31,0xFE,0x65,0x66,0x67,0xFF,0x4C,0x68,0x2D,0x69,0xDA,0x61,0x6A,0x2D,0x6B,0x90, -0x6C,0x60,0x7D,0x7F,0x4F,0x6D,0x6E,0x6F,0xD3,0x7B,0xDB,0x62,0x77,0x78,0x79,0x90, -0x8E,0xB2,0x8A,0x96,0x88,0x8C,0xA4,0xA2,0x98,0x9E,0xF8,0xA0,0xAA,0xB8,0xB0,0xBE, -0xE1,0xC4,0xC6,0xCA,0xCE,0xD0,0xCC,0x63,0xEC,0xBC,0xDE,0xEA,0xE8,0xFA,0xFC,0xE0, -0x8E,0xB2,0x8A,0x96,0x88,0x8C,0xA4,0xA2,0x98,0x9E,0xF8,0xA0,0xAA,0xB8,0xB0,0xBE, -0xE1,0xC4,0xC6,0xCA,0xCE,0xD0,0xCC,0x64,0xEC,0xBC,0xDE,0xEA,0xE8,0xFA,0xFC,0x52 -}; - -uint16 to_uni_latin7_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x201D,0x00A2,0x00A3,0x00A4,0x201E,0x00A6,0x00A7, -0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6, -0x00B0,0x00B1,0x00B2,0x00B3,0x201C,0x00B5,0x00B6,0x00B7, -0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6, -0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112, -0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B, -0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7, -0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF, -0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113, -0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C, -0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7, -0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x2019 -}; - -#endif - -#ifdef HAVE_CHARSET_latin7 -uchar ctype_latin7_general_cs[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x01,0x20,0x10,0x20,0x10,0x10,0x00,0x00,0x20,0x10,0x20,0x10,0x20,0x10,0x10,0x10, -0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x00,0x20,0x10,0x20,0x10,0x10,0x20, -0x48,0x20,0x10,0x10,0x10,0x20,0x10,0x10,0x10,0x10,0x01,0x10,0x10,0x10,0x10,0x01, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x10,0x10,0x10,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10 -}; - -uchar to_lower_latin7_general_cs[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xB8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin7_general_cs[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xBC,0xBD,0xBE,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_latin7_general_cs[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x30,0x32,0x33,0x34,0x35,0x36,0x37,0x2B,0x38,0x39,0x3A,0x5C,0x3B,0x2C,0x3C,0x3D, -0x76,0x7A,0x7C,0x7E,0x80,0x81,0x82,0x83,0x84,0x85,0x3E,0x3F,0x5D,0x5E,0x5F,0x40, -0x41,0x86,0x92,0x94,0x9A,0x9C,0xA6,0xA8,0xAC,0xAE,0xB4,0xB6,0xBA,0xC0,0xC2,0xC8, -0xD4,0xD6,0xD8,0xDC,0xE3,0xE6,0xEE,0xF0,0xF2,0xF4,0xF6,0x42,0x43,0x44,0x45,0x46, -0x47,0x87,0x93,0x95,0x9B,0x9D,0xA7,0xA9,0xAD,0xAF,0xB5,0xB7,0xBB,0xC1,0xC3,0xC9, -0xD5,0xD7,0xD9,0xDD,0xE4,0xE7,0xEF,0xF1,0xF3,0xF5,0xF7,0x48,0x49,0x4A,0x4B,0x20, -0x75,0x21,0x56,0x22,0x59,0x73,0x70,0x71,0x23,0x74,0x24,0x5A,0x25,0x4D,0x51,0x50, -0x26,0x54,0x55,0x57,0x58,0x72,0x2E,0x2F,0x27,0xE5,0x28,0x5B,0x29,0x4E,0x53,0x2A, -0x31,0xFE,0x65,0x66,0x67,0xFF,0x4C,0x68,0xD3,0x69,0xDA,0x61,0x6A,0x2D,0x6B,0x90, -0x6C,0x60,0x7D,0x7F,0x4F,0x6D,0x6E,0x6F,0xD2,0x7B,0xDB,0x62,0x77,0x78,0x79,0x91, -0x8E,0xB2,0x8A,0x96,0x88,0x8C,0xA4,0xA2,0x98,0x9E,0xF8,0xA0,0xAA,0xB8,0xB0,0xBE, -0xE1,0xC4,0xC6,0xCA,0xCE,0xD0,0xCC,0x63,0xEC,0xBC,0xDE,0xEA,0xE8,0xFA,0xFC,0xE0, -0x8F,0xB3,0x8B,0x97,0x89,0x8D,0xA5,0xA3,0x99,0x9F,0xF9,0xA1,0xAB,0xB9,0xB1,0xBF, -0xE2,0xC5,0xC7,0xCB,0xCF,0xD1,0xCD,0x64,0xED,0xBD,0xDF,0xEB,0xE9,0xFB,0xFD,0x52 -}; - -uint16 to_uni_latin7_general_cs[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x201D,0x00A2,0x00A3,0x00A4,0x201E,0x00A6,0x00A7, -0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6, -0x00B0,0x00B1,0x00B2,0x00B3,0x201C,0x00B5,0x00B6,0x00B7, -0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6, -0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112, -0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B, -0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7, -0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF, -0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113, -0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C, -0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7, -0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x2019 -}; - -#endif - -#ifdef HAVE_CHARSET_macce -uchar ctype_macce_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x01,0x01,0x02,0x01,0x01,0x01,0x01,0x02,0x02,0x01,0x02,0x02,0x01,0x02,0x02,0x01, -0x02,0x01,0x02,0x02,0x01,0x02,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x02,0x02, -0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x02,0x01, -0x02,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01, -0x02,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x02,0x01, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x02,0x01,0x00,0x00,0x02,0x01, -0x02,0x01,0x00,0x00,0x02,0x01,0x02,0x01,0x01,0x02,0x01,0x01,0x02,0x01,0x01,0x01, -0x02,0x01,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x02,0x01,0x01,0x02,0x01,0x00 -}; - -uchar to_lower_macce_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x54,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x54,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x8A,0x82,0x82,0x8E,0x88,0x9A,0x9F,0x87,0x88,0x8B,0x8A,0x8B,0x8D,0x8D,0x8E,0x90, -0x90,0x93,0x92,0x93,0x95,0x95,0x98,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9E,0x9E,0x9F, -0xA0,0xA1,0xAB,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xB0, -0xB0,0xB4,0xB2,0xB3,0xB4,0xFA,0xB6,0xB7,0xB8,0xBA,0xBA,0xBC,0xBC,0xBE,0xBE,0xC0, -0xC0,0xC4,0xC2,0xC3,0xC4,0xCB,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0x9B,0xCE,0xD8, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xDA,0xDA,0xDE,0xDC,0xDD,0xDE,0xE0, -0xE0,0xE4,0xE2,0xE3,0xE4,0xE6,0xE6,0x87,0xE9,0xE9,0x92,0xEC,0xEC,0xF0,0x97,0x99, -0xF0,0xF3,0x9C,0xF3,0xF5,0xF5,0xF7,0xF7,0xF9,0xF9,0xFA,0xFD,0xB8,0xFD,0xAE,0xFF -}; - -uchar to_upper_macce_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x74,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x74,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x81,0x83,0x84,0x85,0x86,0xE7,0x84,0x89,0x80,0x89,0x8C,0x8C,0x83,0x8F, -0x8F,0x91,0xEA,0x91,0x94,0x94,0x96,0xEE,0x96,0xEF,0x85,0xCD,0xF2,0x9D,0x9D,0x86, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xA2,0xAC,0xAD,0xFE,0xAF, -0xAF,0xB1,0xB2,0xB3,0xB1,0xB5,0xB6,0xB7,0xFC,0xB9,0xB9,0xBB,0xBB,0xBD,0xBD,0xBF, -0xBF,0xC1,0xC2,0xC3,0xC1,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xC5,0xCC,0xCD,0xCC,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xCF,0xD9,0xD9,0xDB,0xDC,0xDD,0xDB,0xDF, -0xDF,0xE1,0xE2,0xE3,0xE1,0xE5,0xE5,0xE7,0xE8,0xE8,0xEA,0xEB,0xEB,0xED,0xEE,0xEF, -0xED,0xF1,0xF2,0xF1,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xB5,0xFB,0xFC,0xFB,0xFE,0xFF -}; - -uint16 to_uni_macce_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x00C4,0x0100,0x0101,0x00C9,0x0104,0x00D6,0x00DC,0x00E1, -0x0105,0x010C,0x00E4,0x010D,0x0106,0x0107,0x00E9,0x0179, -0x017A,0x010E,0x00ED,0x010F,0x0112,0x0113,0x0116,0x00F3, -0x0117,0x00F4,0x00F6,0x00F5,0x00FA,0x011A,0x011B,0x00FC, -0x2020,0x00B0,0x0118,0x00A3,0x00A7,0x2022,0x00B6,0x00DF, -0x00AE,0x00A9,0x2122,0x0119,0x00A8,0x2260,0x0123,0x012E, -0x012F,0x012A,0x2264,0x2265,0x012B,0x0136,0x2202,0x2211, -0x0142,0x013B,0x013C,0x013D,0x013E,0x0139,0x013A,0x0145, -0x0146,0x0143,0x00AC,0x221A,0x0144,0x0147,0x2206,0x00AB, -0x00BB,0x2026,0x00A0,0x0148,0x0150,0x00D5,0x0151,0x014C, -0x2013,0x2014,0x201C,0x201D,0x2018,0x2019,0x00F7,0x25CA, -0x014D,0x0154,0x0155,0x0158,0x2039,0x203A,0x0159,0x0156, -0x0157,0x0160,0x201A,0x201E,0x0161,0x015A,0x015B,0x00C1, -0x0164,0x0165,0x00CD,0x017D,0x017E,0x016A,0x00D3,0x00D4, -0x016B,0x016E,0x00DA,0x016F,0x0170,0x0171,0x0172,0x0173, -0x00DD,0x00FD,0x0137,0x017B,0x0141,0x017C,0x0122,0x02C7 -}; - -#endif - -#ifdef HAVE_CHARSET_cp1250 -uchar ctype_cp1250_croatian_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x20,0x20,0x10,0x20,0x10,0x10,0x10,0x10,0x20,0x10,0x01,0x10,0x01,0x01,0x01,0x01, -0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x02,0x10,0x02,0x02,0x02,0x02, -0x48,0x10,0x10,0x01,0x10,0x01,0x10,0x01,0x10,0x10,0x01,0x10,0x10,0x10,0x10,0x01, -0x10,0x10,0x10,0x02,0x10,0x10,0x10,0x10,0x10,0x02,0x02,0x10,0x01,0x10,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10 -}; - -uchar to_lower_cp1250_croatian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x9A,0x8B,0x9C,0x9D,0x9E,0x9F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xB3,0xA4,0xB9,0xA6,0xA7,0xA8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBE,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp1250_croatian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xA3,0xB4,0xB5,0xB6,0xB7,0xB8,0xA5,0xAA,0xBB,0xBC,0xBD,0xBC,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_cp1250_croatian_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x43,0x44,0x48,0x4B,0x4D,0x4E,0x4F,0x50,0x52,0x53,0x54,0x56,0x57,0x59, -0x5B,0x5C,0x5D,0x5F,0x62,0x64,0x66,0x67,0x68,0x69,0x6B,0x90,0x91,0x92,0x93,0x94, -0x95,0x41,0x43,0x44,0x48,0x4B,0x4D,0x4E,0x4F,0x50,0x52,0x53,0x54,0x56,0x57,0x59, -0x5B,0x5C,0x5D,0x5F,0x62,0x64,0x66,0x67,0x68,0x69,0x6B,0x96,0x97,0x98,0x99,0x9A, -0x9B,0x9C,0x9E,0x9F,0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0x60,0xA6,0x5F,0x62,0x6C,0x6B, -0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0x60,0xB1,0x5F,0x62,0x6C,0x6B, -0xB2,0xB3,0xB4,0x54,0xB5,0x41,0xB6,0xB7,0xB8,0xB9,0x5F,0xBA,0xBB,0xBC,0xBD,0x6B, -0xBE,0xBF,0xC0,0x54,0xC1,0xC2,0xC3,0xC4,0xC5,0x41,0x5F,0xC6,0x54,0xC7,0x54,0x6B, -0x5D,0x41,0x41,0x41,0x41,0x54,0x47,0x44,0x46,0x4B,0x4B,0x4B,0x4B,0x50,0x50,0x48, -0x4A,0x57,0x57,0x59,0x59,0x59,0x59,0xC8,0x5D,0x64,0x64,0x64,0x64,0x69,0x62,0x5F, -0x5D,0x41,0x41,0x41,0x41,0x54,0x47,0x44,0x46,0x4B,0x4B,0x4B,0x4B,0x50,0x50,0x48, -0x4A,0x57,0x57,0x59,0x59,0x59,0x59,0xC9,0x5D,0x64,0x64,0x64,0x64,0x69,0x62,0xFF -}; - -uint16 to_uni_cp1250_croatian_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0000,0x201A,0x0000,0x201E,0x2026,0x2020,0x2021, -0x0000,0x2030,0x0160,0x2039,0x015A,0x0164,0x017D,0x0179, -0x0000,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x2122,0x0161,0x203A,0x015B,0x0165,0x017E,0x017A, -0x00A0,0x02C7,0x02D8,0x0141,0x00A4,0x0104,0x00A6,0x00A7, -0x00A8,0x00A9,0x015E,0x00AB,0x00AC,0x00AD,0x00AE,0x017B, -0x00B0,0x00B1,0x02DB,0x0142,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x0105,0x015F,0x00BB,0x013D,0x02DD,0x013E,0x017C, -0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, -0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, -0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, -0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, -0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, -0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, -0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, -0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 -}; - -#endif - -#ifdef HAVE_CHARSET_latin1 -uchar ctype_latin1_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x10,0x00,0x10,0x02,0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x10,0x01,0x00,0x01,0x00, -0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x02,0x00,0x02,0x01, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 -}; - -uchar to_lower_latin1_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin1_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_latin1_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x51,0x53,0x57,0x5B,0x65,0x67,0x69,0x6B,0x75,0x77,0x79,0x7B,0x7D,0x81, -0x8F,0x91,0x93,0x95,0x98,0x9A,0xA4,0xA6,0xA8,0xAA,0xAF,0xB3,0xB4,0xB5,0xB6,0xB7, -0xB8,0x41,0x51,0x53,0x57,0x5B,0x65,0x67,0x69,0x6B,0x75,0x77,0x79,0x7B,0x7D,0x81, -0x8F,0x91,0x93,0x95,0x98,0x9A,0xA4,0xA6,0xA8,0xAA,0xAF,0xB9,0xBA,0xBB,0xBC,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -0x43,0x45,0x47,0x49,0x4B,0x4D,0x4F,0x55,0x5D,0x5F,0x61,0x63,0x6D,0x6F,0x71,0x73, -0x59,0x7F,0x83,0x85,0x87,0x89,0x8B,0xBD,0x8D,0x9C,0x9E,0xA0,0xA2,0xAC,0xB1,0x97, -0x43,0x45,0x47,0x49,0x4B,0x4D,0x4F,0x55,0x5D,0x5F,0x61,0x63,0x6D,0x6F,0x71,0x73, -0x59,0x7F,0x83,0x85,0x87,0x89,0x8B,0xBE,0x8D,0x9C,0x9E,0xA0,0xA2,0xAC,0xB1,0xAE -}; - -uint16 to_uni_latin1_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0081,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, -0x02C6,0x2030,0x0160,0x2039,0x0152,0x008D,0x017D,0x008F, -0x0090,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x02DC,0x2122,0x0161,0x203A,0x0153,0x009D,0x017E,0x0178, -0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, -0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, -0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, -0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, -0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF, -0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, -0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, -0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF -}; - -#endif - -#ifdef HAVE_CHARSET_latin1 -uchar ctype_latin1_general_cs[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x10,0x00,0x10,0x02,0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x10,0x01,0x00,0x01,0x00, -0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x02,0x00,0x02,0x01, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 -}; - -uchar to_lower_latin1_general_cs[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin1_general_cs[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_latin1_general_cs[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x51,0x53,0x57,0x5B,0x65,0x67,0x69,0x6B,0x75,0x77,0x79,0x7B,0x7D,0x81, -0x8F,0x91,0x93,0x95,0x98,0x9A,0xA4,0xA6,0xA8,0xAA,0xAF,0xB3,0xB4,0xB5,0xB6,0xB7, -0xB8,0x42,0x52,0x54,0x58,0x5C,0x66,0x68,0x6A,0x6C,0x76,0x78,0x7A,0x7C,0x7E,0x82, -0x90,0x92,0x94,0x96,0x99,0x9B,0xA5,0xA7,0xA9,0xAB,0xB0,0xB9,0xBA,0xBB,0xBC,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -0x43,0x45,0x47,0x49,0x4B,0x4D,0x4F,0x55,0x5D,0x5F,0x61,0x63,0x6D,0x6F,0x71,0x73, -0x59,0x7F,0x83,0x85,0x87,0x89,0x8B,0xBD,0x8D,0x9C,0x9E,0xA0,0xA2,0xAC,0xB1,0x97, -0x44,0x46,0x48,0x4A,0x4C,0x4E,0x50,0x56,0x5E,0x60,0x62,0x64,0x6E,0x70,0x72,0x74, -0x5A,0x80,0x84,0x86,0x88,0x8A,0x8C,0xBE,0x8E,0x9D,0x9F,0xA1,0xA3,0xAD,0xB2,0xAE -}; - -uint16 to_uni_latin1_general_cs[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0081,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, -0x02C6,0x2030,0x0160,0x2039,0x0152,0x008D,0x017D,0x008F, -0x0090,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x02DC,0x2122,0x0161,0x203A,0x0153,0x009D,0x017E,0x0178, -0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, -0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, -0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, -0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, -0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF, -0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, -0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, -0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF -}; - -#endif - -#ifdef HAVE_CHARSET_cp1251 -uchar ctype_cp1251_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x01,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01,0x01, -0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x02,0x02,0x02, -0x00,0x01,0x02,0x01,0x00,0x01,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x01, -0x00,0x00,0x01,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x01,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 -}; - -uchar to_lower_cp1251_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x90,0x83,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x9A,0x8B,0x9C,0x9D,0x9E,0x9F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA2,0xA2,0xBC,0xA4,0xB4,0xA6,0xA7,0xB8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB3,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp1251_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x81,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x80,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x9D,0x8E,0x8F, -0xA0,0xA1,0xA1,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB2,0xA5,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xA3,0xBD,0xBD,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF -}; - -uint16 to_uni_cp1251_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021, -0x20AC,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F, -0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x2122,0x0459,0x203A,0x045A,0x045C,0x045B,0x045F, -0x00A0,0x040E,0x045E,0x0408,0x00A4,0x0490,0x00A6,0x00A7, -0x0401,0x00A9,0x0404,0x00AB,0x00AC,0x00AD,0x00AE,0x0407, -0x00B0,0x00B1,0x0406,0x0456,0x0491,0x00B5,0x00B6,0x00B7, -0x0451,0x2116,0x0454,0x00BB,0x0458,0x0405,0x0455,0x0457, -0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, -0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, -0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, -0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, -0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437, -0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F, -0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447, -0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F -}; - -#endif - -#ifdef HAVE_CHARSET_cp1251 -uchar ctype_cp1251_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x01,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01,0x01, -0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x02,0x02,0x02, -0x00,0x01,0x02,0x01,0x00,0x01,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x01, -0x00,0x00,0x01,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x01,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 -}; - -uchar to_lower_cp1251_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x90,0x83,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x9A,0x8B,0x9C,0x9D,0x9E,0x9F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA2,0xA2,0xBC,0xA4,0xB4,0xA6,0xA7,0xB8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB3,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp1251_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x81,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x80,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x9D,0x8E,0x8F, -0xA0,0xA1,0xA1,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB2,0xA5,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xA3,0xBD,0xBD,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF -}; - -uchar sort_order_cp1251_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x43,0x45,0x47,0x49,0x4B,0x4D,0x4F,0x51,0x53,0x55,0x57,0x59,0x5B,0x5D, -0x5F,0x61,0x63,0x65,0x67,0x69,0x6B,0x6D,0x6F,0x71,0x73,0xD3,0xD4,0xD5,0xD6,0xD7, -0xD8,0x41,0x43,0x45,0x47,0x49,0x4B,0x4D,0x4F,0x51,0x53,0x55,0x57,0x59,0x5B,0x5D, -0x5F,0x61,0x63,0x65,0x67,0x69,0x6B,0x6D,0x6F,0x71,0x73,0xD9,0xDA,0xDB,0xDC,0xDD, -0x81,0x83,0xDE,0x83,0xDF,0xE0,0xE1,0xE2,0xE3,0xE4,0xA1,0xE5,0xA7,0x9D,0xB3,0xC1, -0x81,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xA1,0xEF,0xA7,0x9D,0xB3,0xC1, -0xF0,0xB7,0xB7,0x99,0xF1,0x7D,0xF2,0xF3,0x87,0xF4,0x89,0xF5,0xF6,0xF7,0xF8,0x95, -0xF9,0xFA,0x93,0x93,0x7D,0xFB,0xFC,0xFD,0x87,0xFE,0x89,0xFF,0x99,0x8F,0x8F,0x95, -0x75,0x77,0x79,0x7B,0x7F,0x85,0x8B,0x8D,0x91,0x97,0x9B,0x9F,0xA3,0xA5,0xA9,0xAB, -0xAD,0xAF,0xB1,0xB5,0xB9,0xBB,0xBD,0xBF,0xC3,0xC5,0xC7,0xC9,0xCB,0xCD,0xCF,0xD1, -0x75,0x77,0x79,0x7B,0x7F,0x85,0x8B,0x8D,0x91,0x97,0x9B,0x9F,0xA3,0xA5,0xA9,0xAB, -0xAD,0xAF,0xB1,0xB5,0xB9,0xBB,0xBD,0xBF,0xC3,0xC5,0xC7,0xC9,0xCB,0xCD,0xCF,0xD1 -}; - -uint16 to_uni_cp1251_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021, -0x20AC,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F, -0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x2122,0x0459,0x203A,0x045A,0x045C,0x045B,0x045F, -0x00A0,0x040E,0x045E,0x0408,0x00A4,0x0490,0x00A6,0x00A7, -0x0401,0x00A9,0x0404,0x00AB,0x00AC,0x00AD,0x00AE,0x0407, -0x00B0,0x00B1,0x0406,0x0456,0x0491,0x00B5,0x00B6,0x00B7, -0x0451,0x2116,0x0454,0x00BB,0x0458,0x0405,0x0455,0x0457, -0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, -0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, -0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, -0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, -0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437, -0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F, -0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447, -0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F -}; - -#endif - -#ifdef HAVE_CHARSET_cp1251 -uchar ctype_cp1251_general_cs[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x01,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01,0x01, -0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x02,0x02,0x02, -0x00,0x01,0x02,0x01,0x00,0x01,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x01, -0x00,0x00,0x01,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x01,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 -}; - -uchar to_lower_cp1251_general_cs[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x90,0x83,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x9A,0x8B,0x9C,0x9D,0x9E,0x9F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA2,0xA2,0xBC,0xA4,0xB4,0xA6,0xA7,0xB8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB3,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp1251_general_cs[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x81,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x80,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x9D,0x8E,0x8F, -0xA0,0xA1,0xA1,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB2,0xA5,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xA3,0xBD,0xBD,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF -}; - -uchar sort_order_cp1251_general_cs[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x43,0x45,0x47,0x49,0x4B,0x4D,0x4F,0x51,0x53,0x55,0x57,0x59,0x5B,0x5D, -0x5F,0x61,0x63,0x65,0x67,0x69,0x6B,0x6D,0x6F,0x71,0x73,0xD3,0xD4,0xD5,0xD6,0xD7, -0xD8,0x42,0x44,0x46,0x48,0x4A,0x4C,0x4E,0x50,0x52,0x54,0x56,0x58,0x5A,0x5C,0x5E, -0x60,0x62,0x64,0x66,0x68,0x6A,0x6C,0x6E,0x70,0x72,0x74,0xD9,0xDA,0xDB,0xDC,0xDD, -0x81,0x83,0xDE,0x84,0xDF,0xE0,0xE1,0xE2,0xE3,0xE4,0xA1,0xE5,0xA7,0x9D,0xB3,0xC1, -0x82,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xA2,0xEF,0xA8,0x9E,0xB4,0xC2, -0xF0,0xB7,0xB8,0x99,0xF1,0x7D,0xF2,0xF3,0x87,0xF4,0x89,0xF5,0xF6,0xF7,0xF8,0x95, -0xF9,0xFA,0x93,0x94,0x7E,0xFB,0xFC,0xFD,0x88,0xFE,0x8A,0xFF,0x9A,0x8F,0x90,0x96, -0x75,0x77,0x79,0x7B,0x7F,0x85,0x8B,0x8D,0x91,0x97,0x9B,0x9F,0xA3,0xA5,0xA9,0xAB, -0xAD,0xAF,0xB1,0xB5,0xB9,0xBB,0xBD,0xBF,0xC3,0xC5,0xC7,0xC9,0xCB,0xCD,0xCF,0xD1, -0x76,0x78,0x7A,0x7C,0x80,0x86,0x8C,0x8E,0x92,0x98,0x9C,0xA0,0xA4,0xA6,0xAA,0xAC, -0xAE,0xB0,0xB2,0xB6,0xBA,0xBC,0xBE,0xC0,0xC4,0xC6,0xC8,0xCA,0xCC,0xCE,0xD0,0xD2 -}; - -uint16 to_uni_cp1251_general_cs[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021, -0x20AC,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F, -0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x2122,0x0459,0x203A,0x045A,0x045C,0x045B,0x045F, -0x00A0,0x040E,0x045E,0x0408,0x00A4,0x0490,0x00A6,0x00A7, -0x0401,0x00A9,0x0404,0x00AB,0x00AC,0x00AD,0x00AE,0x0407, -0x00B0,0x00B1,0x0406,0x0456,0x0491,0x00B5,0x00B6,0x00B7, -0x0451,0x2116,0x0454,0x00BB,0x0458,0x0405,0x0455,0x0457, -0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, -0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, -0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, -0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, -0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437, -0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F, -0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447, -0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F -}; - -#endif - -#ifdef HAVE_CHARSET_macroman -uchar ctype_macroman_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x10, -0x20,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02, -0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x01,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x20,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x00,0x01,0x01,0x01,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; - -uchar to_lower_macroman_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x8A,0x8C,0x8D,0x8E,0x96,0x9A,0x9F,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xBE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0x88,0x8B,0x9B,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD8,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0x89,0x90,0x87,0x91,0x8F,0x92,0x94,0x95,0x93,0x97,0x99, -0xF0,0x98,0x9C,0x9E,0x9D,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_macroman_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0xE7,0xCB,0xE5,0x80,0xCC,0x81,0x82,0x83,0xE9, -0xE6,0xE8,0xEA,0xED,0xEB,0xEC,0x84,0xEE,0xF1,0xEF,0x85,0xCD,0xF2,0xF4,0xF3,0x86, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xAE,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD9,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_macroman_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x00C4,0x00C5,0x00C7,0x00C9,0x00D1,0x00D6,0x00DC,0x00E1, -0x00E0,0x00E2,0x00E4,0x00E3,0x00E5,0x00E7,0x00E9,0x00E8, -0x00EA,0x00EB,0x00ED,0x00EC,0x00EE,0x00EF,0x00F1,0x00F3, -0x00F2,0x00F4,0x00F6,0x00F5,0x00FA,0x00F9,0x00FB,0x00FC, -0x2020,0x00B0,0x00A2,0x00A3,0x00A7,0x2022,0x00B6,0x00DF, -0x00AE,0x00A9,0x2122,0x00B4,0x00A8,0x2260,0x00C6,0x00D8, -0x221E,0x00B1,0x2264,0x2265,0x00A5,0x00B5,0x2202,0x2211, -0x220F,0x03C0,0x222B,0x00AA,0x00BA,0x03A9,0x00E6,0x00F8, -0x00BF,0x00A1,0x00AC,0x221A,0x0192,0x2248,0x2206,0x00AB, -0x00BB,0x2026,0x00A0,0x00C0,0x00C3,0x00D5,0x0152,0x0153, -0x2013,0x2014,0x201C,0x201D,0x2018,0x2019,0x00F7,0x25CA, -0x00FF,0x0178,0x2044,0x20AC,0x2039,0x203A,0xFB01,0xFB02, -0x2021,0x00B7,0x201A,0x201E,0x2030,0x00C2,0x00CA,0x00C1, -0x00CB,0x00C8,0x00CD,0x00CE,0x00CF,0x00CC,0x00D3,0x00D4, -0xF8FF,0x00D2,0x00DA,0x00DB,0x00D9,0x0131,0x02C6,0x02DC, -0x00AF,0x02D8,0x02D9,0x02DA,0x00B8,0x02DD,0x02DB,0x02C7 -}; - -#endif - -#ifdef HAVE_CHARSET_cp1256 -uchar ctype_cp1256_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x00,0x00, -0x00,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x03,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x00, -0x03,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x00,0x00, -0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x10, -0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, -0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, -0x02,0x03,0x02,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02,0x02, -0x03,0x03,0x03,0x03,0x02,0x03,0x03,0x00,0x03,0x02,0x03,0x02,0x02,0x00,0x00,0x00 -}; - -uchar to_lower_cp1256_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x54,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x54,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x9C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp1256_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x74,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5F,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x74,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7F,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x8C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar sort_order_cp1256_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x45,0x47,0x4A,0x4C,0x52,0x55,0x57,0x59,0x5D,0x5F,0x61,0x63,0x65,0x67, -0x6C,0x6E,0x70,0x72,0x74,0x76,0x7B,0x7D,0x7F,0x81,0x83,0xB9,0xBA,0xBB,0xBC,0xBD, -0xBE,0x41,0x45,0x47,0x4A,0x4C,0x52,0x55,0x57,0x59,0x5D,0x5F,0x61,0x63,0x65,0x67, -0x6C,0x6E,0x70,0x72,0x74,0x76,0x7B,0x7D,0x7F,0x81,0x83,0xBF,0xC0,0xC1,0xC2,0xC3, -0xC4,0x8E,0xC5,0x54,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0x6A,0x92,0x99,0xCE, -0xA5,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x6A,0xDA,0xDB,0xDC, -0xDD,0xB6,0xDE,0xDF,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB, -0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xB7,0xF6,0xF7,0xF8,0xF9,0xB8, -0xFA,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x9F,0x90,0x91,0x93,0x94,0x95, -0x96,0x97,0x98,0x9A,0x9B,0x9C,0x9D,0xFB,0x9E,0x9F,0xA0,0xA1,0xAD,0xA2,0xA3,0xA4, -0x43,0xA6,0x44,0xA7,0xA8,0xA9,0xAA,0x49,0x4E,0x4F,0x50,0x51,0xAB,0xAC,0x5B,0x5C, -0xAE,0xAF,0xB0,0xB1,0x69,0xB2,0xB3,0xFC,0xB4,0x78,0xB5,0x79,0x7A,0xFD,0xFE,0xFF -}; - -uint16 to_uni_cp1256_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x067E,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, -0x02C6,0x2030,0x0000,0x2039,0x0152,0x0686,0x0698,0x0000, -0x06AF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x2122,0x0000,0x203A,0x0153,0x200C,0x200D,0x0000, -0x00A0,0x060C,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x0000,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x061B,0x00BB,0x00BC,0x00BD,0x00BE,0x061F, -0x0000,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627, -0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F, -0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x00D7, -0x0637,0x0638,0x0639,0x063A,0x0640,0x0641,0x0642,0x0643, -0x00E0,0x0644,0x00E2,0x0645,0x0646,0x0647,0x0648,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x0649,0x064A,0x00EE,0x00EF, -0x064B,0x064C,0x064D,0x064E,0x00F4,0x064F,0x0650,0x00F7, -0x0651,0x00F9,0x0652,0x00FB,0x00FC,0x200E,0x200F,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_cp1257 -uchar ctype_cp1257_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x01, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00 -}; - -uchar to_lower_cp1257_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xB8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp1257_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xA8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uint16 to_uni_cp1257_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0000,0x201A,0x0000,0x201E,0x2026,0x2020,0x2021, -0x0000,0x2030,0x0000,0x2039,0x0000,0x00A8,0x02C7,0x00B8, -0x0000,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x2122,0x0000,0x203A,0x0000,0x00AF,0x02DB,0x0000, -0x00A0,0x0000,0x00A2,0x00A3,0x00A4,0x0000,0x00A6,0x00A7, -0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6, -0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112, -0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B, -0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7, -0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF, -0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113, -0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C, -0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7, -0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x02D9 -}; - -#endif - -#ifdef HAVE_CHARSET_cp1257 -uchar ctype_cp1257_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x01, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00 -}; - -uchar to_lower_cp1257_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xB8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp1257_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xA8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_cp1257_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x4D,0x4F,0x55,0x57,0x61,0x63,0x67,0x69,0x6F,0x71,0x75,0x7B,0x7D,0x83, -0x8F,0x91,0x93,0x97,0x9E,0xA0,0xA8,0xAA,0xAC,0xAE,0xB0,0xB8,0xB9,0xBA,0xBB,0xBC, -0xBD,0x41,0x4D,0x4F,0x55,0x57,0x61,0x63,0x67,0x69,0x6F,0x71,0x75,0x7B,0x7D,0x83, -0x8F,0x91,0x93,0x97,0x9E,0xA0,0xA8,0xAA,0xAC,0xAE,0xB0,0xBE,0xBF,0xC0,0xC1,0xC4, -0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4, -0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0,0xE1,0xE2,0xE3,0xE4, -0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0x83,0xED,0x93,0xEE,0xEF,0xF0,0xF1,0x41, -0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0x83,0xFA,0x93,0xFB,0xFC,0xFD,0xFE,0x41, -0x41,0x69,0x41,0x4F,0x41,0x41,0x57,0x57,0x4F,0x57,0xB0,0x57,0x63,0x71,0x69,0x75, -0x97,0x7D,0x7D,0x83,0x83,0x83,0x83,0xC2,0xA0,0x75,0x97,0xA0,0xA0,0xB0,0xB0,0x97, -0x41,0x69,0x41,0x4F,0x41,0x41,0x57,0x57,0x4F,0x57,0xB0,0x57,0x63,0x71,0x69,0x75, -0x97,0x7D,0x7D,0x83,0x83,0x83,0x83,0xC3,0xA0,0x75,0x97,0xA0,0xA0,0xB0,0xB0,0xFF -}; - -uint16 to_uni_cp1257_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0000,0x201A,0x0000,0x201E,0x2026,0x2020,0x2021, -0x0000,0x2030,0x0000,0x2039,0x0000,0x00A8,0x02C7,0x00B8, -0x0000,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x2122,0x0000,0x203A,0x0000,0x00AF,0x02DB,0x0000, -0x00A0,0x0000,0x00A2,0x00A3,0x00A4,0x0000,0x00A6,0x00A7, -0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6, -0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112, -0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B, -0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7, -0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF, -0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113, -0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C, -0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7, -0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x02D9 -}; - -#endif - -#ifdef HAVE_CHARSET_armscii8 -uchar ctype_armscii8_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02, -0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02, -0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02, -0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02, -0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x10,0x10 -}; - -uchar to_lower_armscii8_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xB8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB3,0xB3,0xB5,0xB5,0xB7,0xB7,0xB9,0xB9,0xBB,0xBB,0xBD,0xBD,0xBF,0xBF, -0xC1,0xC1,0xC3,0xC3,0xC5,0xC5,0xC7,0xC7,0xC9,0xC9,0xCB,0xCB,0xCD,0xCD,0xCF,0xCF, -0xD1,0xD1,0xD3,0xD3,0xD5,0xD5,0xD7,0xD7,0xD9,0xD9,0xDB,0xDB,0xDD,0xDD,0xDF,0xDF, -0xE1,0xE1,0xE3,0xE3,0xE5,0xE5,0xE7,0xE7,0xE9,0xE9,0xEB,0xEB,0xED,0xED,0xEF,0xEF, -0xF1,0xF1,0xF3,0xF3,0xF5,0xF5,0xF7,0xF7,0xF9,0xF9,0xFB,0xFB,0xFD,0xFD,0xFE,0xFF -}; - -uchar to_upper_armscii8_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB2,0xB4,0xB4,0xB6,0xB6,0xB8,0xB8,0xBA,0xBA,0xBC,0xBC,0xBE,0xBE, -0xC0,0xC0,0xC2,0xC2,0xC4,0xC4,0xC6,0xC6,0xC8,0xC8,0xCA,0xCA,0xCC,0xCC,0xCE,0xCE, -0xD0,0xD0,0xD2,0xD2,0xD4,0xD4,0xD6,0xD6,0xD8,0xD8,0xDA,0xDA,0xDC,0xDC,0xDE,0xDE, -0xE0,0xE0,0xE2,0xE2,0xE4,0xE4,0xE6,0xE6,0xE8,0xE8,0xEA,0xEA,0xEC,0xEC,0xEE,0xEE, -0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFE,0xFF -}; - -uint16 to_uni_armscii8_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x2741,0x00A7,0x0589,0x0029,0x0028,0x00BB,0x00AB, -0x2014,0x002E,0x055D,0x002C,0x002D,0x055F,0x2026,0x055C, -0x055B,0x055E,0x0531,0x0561,0x0532,0x0562,0x0533,0x0563, -0x0534,0x0564,0x0535,0x0565,0x0536,0x0566,0x0537,0x0567, -0x0538,0x0568,0x0539,0x0569,0x053A,0x056A,0x053B,0x056B, -0x053C,0x056C,0x053D,0x056D,0x053E,0x056E,0x053F,0x056F, -0x0540,0x0570,0x0541,0x0571,0x0542,0x0572,0x0543,0x0573, -0x0544,0x0574,0x0545,0x0575,0x0546,0x0576,0x0547,0x0577, -0x0548,0x0578,0x0549,0x0579,0x054A,0x057A,0x054B,0x057B, -0x054C,0x057C,0x054D,0x057D,0x054E,0x057E,0x054F,0x057F, -0x0550,0x0580,0x0551,0x0581,0x0552,0x0582,0x0553,0x0583, -0x0554,0x0584,0x0555,0x0585,0x0556,0x0586,0x2019,0x0027 -}; - -#endif - -#ifdef HAVE_CHARSET_ascii -uchar ctype_ascii_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; - -uchar to_lower_ascii_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_ascii_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_ascii_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_cp1250 -uchar ctype_cp1250_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x20,0x20,0x10,0x20,0x10,0x10,0x10,0x10,0x20,0x10,0x01,0x10,0x01,0x01,0x01,0x01, -0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x02,0x10,0x02,0x02,0x02,0x02, -0x48,0x10,0x10,0x01,0x10,0x01,0x10,0x01,0x10,0x10,0x01,0x10,0x10,0x10,0x10,0x01, -0x10,0x10,0x10,0x02,0x10,0x10,0x10,0x10,0x10,0x02,0x02,0x10,0x01,0x10,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10 -}; - -uchar to_lower_cp1250_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x9A,0x8B,0x9C,0x9D,0x9E,0x9F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xB3,0xA4,0xB9,0xA6,0xA7,0xA8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBE,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp1250_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xA3,0xB4,0xB5,0xB6,0xB7,0xB8,0xA5,0xAA,0xBB,0xBC,0xBD,0xBC,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uint16 to_uni_cp1250_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0000,0x201A,0x0000,0x201E,0x2026,0x2020,0x2021, -0x0000,0x2030,0x0160,0x2039,0x015A,0x0164,0x017D,0x0179, -0x0000,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x2122,0x0161,0x203A,0x015B,0x0165,0x017E,0x017A, -0x00A0,0x02C7,0x02D8,0x0141,0x00A4,0x0104,0x00A6,0x00A7, -0x00A8,0x00A9,0x015E,0x00AB,0x00AC,0x00AD,0x00AE,0x017B, -0x00B0,0x00B1,0x02DB,0x0142,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x0105,0x015F,0x00BB,0x013D,0x02DD,0x013E,0x017C, -0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, -0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, -0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, -0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, -0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, -0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, -0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, -0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 -}; - -#endif - -#ifdef HAVE_CHARSET_cp1256 -uchar ctype_cp1256_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x00,0x00, -0x00,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x03,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x00, -0x03,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x00,0x00, -0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x10, -0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, -0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, -0x02,0x03,0x02,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02,0x02, -0x03,0x03,0x03,0x03,0x02,0x03,0x03,0x00,0x03,0x02,0x03,0x02,0x02,0x00,0x00,0x00 -}; - -uchar to_lower_cp1256_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x54,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x54,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x9C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp1256_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x74,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5F,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x74,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7F,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x8C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_cp1256_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x067E,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, -0x02C6,0x2030,0x0000,0x2039,0x0152,0x0686,0x0698,0x0000, -0x06AF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x2122,0x0000,0x203A,0x0153,0x200C,0x200D,0x0000, -0x00A0,0x060C,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x0000,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x061B,0x00BB,0x00BC,0x00BD,0x00BE,0x061F, -0x0000,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627, -0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F, -0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x00D7, -0x0637,0x0638,0x0639,0x063A,0x0640,0x0641,0x0642,0x0643, -0x00E0,0x0644,0x00E2,0x0645,0x0646,0x0647,0x0648,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x0649,0x064A,0x00EE,0x00EF, -0x064B,0x064C,0x064D,0x064E,0x00F4,0x064F,0x0650,0x00F7, -0x0651,0x00F9,0x0652,0x00FB,0x00FC,0x200E,0x200F,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_cp866 -uchar ctype_cp866_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48 -}; - -uchar to_lower_cp866_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0x86,0x87,0x88,0x89,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0x86,0x87,0x88,0x89,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF1,0xF1,0xF3,0xF3,0xF5,0xF5,0xF7,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp866_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_cp866_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, -0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, -0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, -0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, -0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437, -0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F, -0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556, -0x2555,0x2563,0x2551,0x2557,0x255D,0x255C,0x255B,0x2510, -0x2514,0x2534,0x252C,0x251C,0x2500,0x253C,0x255E,0x255F, -0x255A,0x2554,0x2569,0x2566,0x2560,0x2550,0x256C,0x2567, -0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256B, -0x256A,0x2518,0x250C,0x2588,0x2584,0x258C,0x2590,0x2580, -0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447, -0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F, -0x0401,0x0451,0x0404,0x0454,0x0407,0x0457,0x040E,0x045E, -0x00B0,0x2219,0x00B7,0x221A,0x207F,0x00B2,0x25A0,0x00A0 -}; - -#endif - -#ifdef HAVE_CHARSET_dec8 -uchar ctype_dec8_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 -}; - -uchar to_lower_dec8_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_dec8_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uint16 to_uni_dec8_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x00A1,0x00A2,0x00A3,0x0000,0x00A5,0x0000,0x00A7, -0x00A4,0x00A9,0x00AA,0x00AB,0x0000,0x0000,0x0000,0x0000, -0x00B0,0x00B1,0x00B2,0x00B3,0x0000,0x00B5,0x00B6,0x00B7, -0x0000,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x0000,0x00BF, -0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, -0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, -0x0000,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x0152, -0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x0178,0x0000,0x00DF, -0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, -0x0000,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x0153, -0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FF,0x0000,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_greek -uchar ctype_greek_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x10,0x10,0x10,0x00,0x00,0x10,0x10,0x10,0x10,0x00,0x10,0x10,0x10,0x00,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x10,0x01,0x01,0x01,0x10,0x01,0x10,0x01,0x01, -0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00 -}; - -uchar to_lower_greek_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xDC,0xB7,0xDD,0xDE,0xDF,0xBB,0xFC,0xBD,0xFD,0xFE, -0xC0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xD2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_greek_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xDA,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xC1,0xC5,0xC7,0xC9, -0xDB,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD3,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xCF,0xD5,0xD9,0xFF -}; - -uint16 to_uni_greek_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x02BD,0x02BC,0x00A3,0x0000,0x0000,0x00A6,0x00A7, -0x00A8,0x00A9,0x0000,0x00AB,0x00AC,0x00AD,0x0000,0x2015, -0x00B0,0x00B1,0x00B2,0x00B3,0x0384,0x0385,0x0386,0x00B7, -0x0388,0x0389,0x038A,0x00BB,0x038C,0x00BD,0x038E,0x038F, -0x0390,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397, -0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F, -0x03A0,0x03A1,0x0000,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7, -0x03A8,0x03A9,0x03AA,0x03AB,0x03AC,0x03AD,0x03AE,0x03AF, -0x03B0,0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7, -0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF, -0x03C0,0x03C1,0x03C2,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7, -0x03C8,0x03C9,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_hebrew -uchar ctype_hebrew_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x20,0x20,0x00 -}; - -uchar to_lower_hebrew_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_hebrew_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_hebrew_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x0000,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00D7,0x00AB,0x00AC,0x00AD,0x00AE,0x203E, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00F7,0x00BB,0x00BC,0x00BD,0x00BE,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2017, -0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7, -0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF, -0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7, -0x05E8,0x05E9,0x05EA,0x0000,0x0000,0x200E,0x200F,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_hp8 -uchar ctype_hp8_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x02,0x02, -0x01,0x10,0x10,0x01,0x02,0x10,0x10,0x02,0x01,0x10,0x01,0x01,0x01,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x20,0x20,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20 -}; - -uchar to_lower_hp8_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xC8,0xC0,0xC9,0xC1,0xCD,0xD1,0xDD,0xA8,0xA9,0xAA,0xAB,0xAC,0xCB,0xC3,0xAF, -0xB0,0xB2,0xB2,0xB3,0xB5,0xB5,0xB7,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD4,0xD1,0xD6,0xD7,0xD4,0xD5,0xD6,0xD7,0xCC,0xD9,0xCE,0xCF,0xC5,0xDD,0xDE,0xC2, -0xC4,0xE2,0xE2,0xE4,0xE4,0xD5,0xD9,0xC6,0xCA,0xEA,0xEA,0xEC,0xEC,0xC7,0xEF,0xEF, -0xF1,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_hp8_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB1,0xB3,0xB4,0xB4,0xB6,0xB6,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xA2,0xA4,0xDF,0xAE,0xE0,0xDC,0xE7,0xED,0xA1,0xA3,0xE8,0xAD,0xD8,0xA5,0xDA,0xDB, -0xD0,0xA6,0xD2,0xD3,0xD0,0xE5,0xD2,0xD3,0xD8,0xE6,0xDA,0xDB,0xDC,0xA7,0xDE,0xDF, -0xE0,0xE1,0xE1,0xE3,0xE3,0xE5,0xE6,0xE7,0xE8,0xE9,0xE9,0xEB,0xEB,0xED,0xEE,0xEE, -0xF0,0xF0,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_hp8_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x00C0,0x00C2,0x00C8,0x00CA,0x00CB,0x00CE,0x00CF, -0x00B4,0x02CB,0x02C6,0x00A8,0x02DC,0x00D9,0x00DB,0x20A4, -0x00AF,0x00DD,0x00FD,0x00B0,0x00C7,0x00E7,0x00D1,0x00F1, -0x00A1,0x00BF,0x00A4,0x00A3,0x00A5,0x00A7,0x0192,0x00A2, -0x00E2,0x00EA,0x00F4,0x00FB,0x00E1,0x00E9,0x00F3,0x00FA, -0x00E0,0x00E8,0x00F2,0x00F9,0x00E4,0x00EB,0x00F6,0x00FC, -0x00C5,0x00EE,0x00D8,0x00C6,0x00E5,0x00ED,0x00F8,0x00E6, -0x00C4,0x00EC,0x00D6,0x00DC,0x00C9,0x00EF,0x00DF,0x00D4, -0x00C1,0x00C3,0x00E3,0x00D0,0x00F0,0x00CD,0x00CC,0x00D3, -0x00D2,0x00D5,0x00F5,0x0160,0x0161,0x00DA,0x0178,0x00FF, -0x00DE,0x00FE,0x00B7,0x00B5,0x00B6,0x00BE,0x2014,0x00BC, -0x00BD,0x00AA,0x00BA,0x00AB,0x25A0,0x00BB,0x00B1,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_keybcs2 -uchar ctype_keybcs2_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x01,0x02,0x82,0x02,0x02,0x01,0x01,0x02,0x82,0x81,0x01,0x01,0x02,0x02,0x01,0x01, -0x81,0x02,0x01,0x02,0x02,0x01,0x02,0x01,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x01,0x02,0x01,0x02,0x00,0x02,0x01,0x01,0x01,0x02,0x00,0x02,0x02,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48 -}; - -uchar to_lower_keybcs2_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x87,0x81,0x82,0x83,0x84,0x83,0x86,0x87,0x88,0x88,0x8D,0xA1,0x8C,0x8D,0x84,0xA0, -0x82,0x91,0x91,0x93,0x94,0xA2,0x96,0xA3,0x98,0x94,0x81,0x9B,0x8C,0x98,0xA9,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA4,0x96,0x93,0x9B,0xA9,0xAA,0xAA,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xED,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_keybcs2_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x68,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x87,0x9A,0x90,0x85,0x8E,0x85,0x86,0x80,0x89,0x89,0x8A,0x8B,0x9C,0x8A,0x8E,0x8F, -0x90,0x92,0x92,0xA7,0x99,0x95,0xA6,0x97,0x9D,0x99,0x9A,0xA8,0x9C,0x9D,0x9E,0x9F, -0x8F,0x8B,0x95,0x97,0xA5,0xA5,0xA6,0xA7,0xA8,0x9E,0xAB,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xE8,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_keybcs2_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x010C,0x00FC,0x00E9,0x010F,0x00E4,0x010E,0x0164,0x010D, -0x011B,0x011A,0x0139,0x00CD,0x013E,0x013A,0x00C4,0x00C1, -0x00C9,0x017E,0x017D,0x00F4,0x00F6,0x00D3,0x016F,0x00DA, -0x00FD,0x00D6,0x00DC,0x0160,0x013D,0x00DD,0x0158,0x0165, -0x00E1,0x00ED,0x00F3,0x00FA,0x0148,0x0147,0x016E,0x00D4, -0x0161,0x0159,0x0155,0x0154,0x00BC,0x00A1,0x00AB,0x00BB, -0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556, -0x2555,0x2563,0x2551,0x2557,0x255D,0x255C,0x255B,0x2510, -0x2514,0x2534,0x252C,0x251C,0x2500,0x253C,0x255E,0x255F, -0x255A,0x2554,0x2569,0x2566,0x2560,0x2550,0x256C,0x2567, -0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256B, -0x256A,0x2518,0x250C,0x2588,0x2584,0x258C,0x2590,0x2580, -0x03B1,0x00DF,0x0393,0x03C0,0x03A3,0x03C3,0x00B5,0x03C4, -0x03A6,0x0398,0x03A9,0x03B4,0x221E,0x03C6,0x03B5,0x2229, -0x2261,0x00B1,0x2265,0x2264,0x2320,0x2321,0x00F7,0x2248, -0x00B0,0x2219,0x00B7,0x221A,0x207F,0x00B2,0x25A0,0x00A0 -}; - -#endif - -#ifdef HAVE_CHARSET_koi8r -uchar ctype_koi8r_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x02,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x01,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01 -}; - -uchar to_lower_koi8r_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xA3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF -}; - -uchar to_upper_koi8r_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xB3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_koi8r_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x2500,0x2502,0x250C,0x2510,0x2514,0x2518,0x251C,0x2524, -0x252C,0x2534,0x253C,0x2580,0x2584,0x2588,0x258C,0x2590, -0x2591,0x2592,0x2593,0x2320,0x25A0,0x2219,0x221A,0x2248, -0x2264,0x2265,0x00A0,0x2321,0x00B0,0x00B2,0x00B7,0x00F7, -0x2550,0x2551,0x2552,0x0451,0x2553,0x2554,0x2555,0x2556, -0x2557,0x2558,0x2559,0x255A,0x255B,0x255C,0x255D,0x255E, -0x255F,0x2560,0x2561,0x0401,0x2562,0x2563,0x2564,0x2565, -0x2566,0x2567,0x2568,0x2569,0x256A,0x256B,0x256C,0x00A9, -0x044E,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433, -0x0445,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E, -0x043F,0x044F,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432, -0x044C,0x044B,0x0437,0x0448,0x044D,0x0449,0x0447,0x044A, -0x042E,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413, -0x0425,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E, -0x041F,0x042F,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412, -0x042C,0x042B,0x0417,0x0428,0x042D,0x0429,0x0427,0x042A -}; - -#endif - -#ifdef HAVE_CHARSET_koi8u -uchar ctype_koi8u_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x02,0x02,0x10,0x02,0x02,0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x10, -0x10,0x10,0x10,0x01,0x01,0x10,0x01,0x01,0x10,0x10,0x10,0x10,0x10,0x01,0x10,0x10, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01 -}; - -uchar to_lower_koi8u_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x20,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x20,0x20,0x20,0xA3,0xA4,0x20,0xA6,0xA7,0x20,0x20,0x20,0x20,0x20,0xAD,0x20,0x20, -0x20,0x20,0x20,0xA3,0xA4,0x20,0xA6,0xA7,0x20,0x20,0x20,0x20,0x20,0xAD,0x20,0x20, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF -}; - -uchar to_upper_koi8u_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x20,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x20,0x20,0x20,0xB3,0xB4,0x20,0xB6,0xB7,0x20,0x20,0x20,0x20,0x20,0xBD,0x20,0x20, -0x20,0x20,0x20,0xB3,0xB4,0x20,0xB6,0xB7,0x20,0x20,0x20,0x20,0x20,0xBD,0x20,0x20, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_koi8u_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x2500,0x2502,0x250C,0x2510,0x2514,0x2518,0x251C,0x2524, -0x252C,0x2534,0x253C,0x2580,0x2584,0x2588,0x258C,0x2590, -0x2591,0x2592,0x2593,0x2320,0x25A0,0x2022,0x221A,0x2248, -0x2264,0x2265,0x00A0,0x2321,0x00B0,0x00B2,0x00B7,0x00F7, -0x2550,0x2551,0x2552,0x0451,0x0454,0x2554,0x0456,0x0457, -0x2557,0x2558,0x2559,0x255A,0x255B,0x0491,0x255D,0x255E, -0x255F,0x2560,0x2561,0x0401,0x0404,0x2563,0x0406,0x0407, -0x2566,0x2567,0x2568,0x2569,0x256A,0x0490,0x256C,0x00A9, -0x044E,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433, -0x0445,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E, -0x043F,0x044F,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432, -0x044C,0x044B,0x0437,0x0448,0x044D,0x0449,0x0447,0x044A, -0x042E,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413, -0x0425,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E, -0x041F,0x042F,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412, -0x042C,0x042B,0x0417,0x0428,0x042D,0x0429,0x0427,0x042A -}; - -#endif - -#ifdef HAVE_CHARSET_latin2 -uchar ctype_latin2_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x01,0x10,0x01,0x10,0x01,0x01,0x10,0x10,0x01,0x01,0x01,0x01,0x10,0x01,0x01, -0x10,0x02,0x10,0x02,0x10,0x02,0x02,0x10,0x10,0x02,0x02,0x02,0x02,0x10,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10 -}; - -uchar to_lower_latin2_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xB1,0xA2,0xB3,0xA4,0xB5,0xB6,0xA7,0xA8,0xB9,0xBA,0xBB,0xBC,0xAD,0xBE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin2_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xA1,0xB2,0xA3,0xB4,0xA5,0xA6,0xB7,0xB8,0xA9,0xAA,0xAB,0xAC,0xBD,0xAE,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uint16 to_uni_latin2_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x0104,0x02D8,0x0141,0x00A4,0x013D,0x015A,0x00A7, -0x00A8,0x0160,0x015E,0x0164,0x0179,0x00AD,0x017D,0x017B, -0x00B0,0x0105,0x02DB,0x0142,0x00B4,0x013E,0x015B,0x02C7, -0x00B8,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C, -0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, -0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, -0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, -0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, -0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, -0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, -0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, -0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 -}; - -#endif - -#ifdef HAVE_CHARSET_latin5 -uchar ctype_latin5_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 -}; - -uchar to_lower_latin5_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0xFD,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0x69,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin5_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0xDD,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0x49,0xDE,0xFF -}; - -uint16 to_uni_latin5_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, -0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, -0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, -0x011E,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, -0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x0130,0x015E,0x00DF, -0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, -0x011F,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, -0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x0131,0x015F,0x00FF -}; - -#endif - -#ifdef HAVE_CHARSET_latin7 -uchar ctype_latin7_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x01,0x20,0x10,0x20,0x10,0x10,0x00,0x00,0x20,0x10,0x20,0x10,0x20,0x10,0x10,0x10, -0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x00,0x20,0x10,0x20,0x10,0x10,0x20, -0x48,0x20,0x10,0x10,0x10,0x20,0x10,0x10,0x10,0x10,0x01,0x10,0x10,0x10,0x10,0x01, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x10,0x10,0x10,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10 -}; - -uchar to_lower_latin7_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xB8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin7_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xBC,0xBD,0xBE,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uint16 to_uni_latin7_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x201D,0x00A2,0x00A3,0x00A4,0x201E,0x00A6,0x00A7, -0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6, -0x00B0,0x00B1,0x00B2,0x00B3,0x201C,0x00B5,0x00B6,0x00B7, -0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6, -0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112, -0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B, -0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7, -0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF, -0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113, -0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C, -0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7, -0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x2019 -}; - -#endif - -#ifdef HAVE_CHARSET_cp850 -uchar ctype_cp850_bin[] = { -0x00, -0x20,0x30,0x30,0x30,0x30,0x30,0x30,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x30,0x30, -0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x20,0x30,0x30,0x30,0x30,0x30, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x30, -0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01, -0x01,0x02,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x02,0x10,0x01,0x10,0x10, -0x02,0x02,0x02,0x02,0x02,0x01,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x01,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x02,0x01,0x01,0x01,0x01,0x02,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10,0x01,0x10, -0x01,0x02,0x01,0x01,0x02,0x01,0x10,0x02,0x01,0x01,0x01,0x01,0x02,0x01,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20 -}; - -uchar to_lower_cp850_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x87,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x84,0x86, -0x82,0x91,0x91,0x93,0x94,0x95,0x96,0x97,0x98,0x94,0x81,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA4,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp850_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, -0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_cp850_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x00C7,0x00FC,0x00E9,0x00E2,0x00E4,0x00E0,0x00E5,0x00E7, -0x00EA,0x00EB,0x00E8,0x00EF,0x00EE,0x00EC,0x00C4,0x00C5, -0x00C9,0x00E6,0x00C6,0x00F4,0x00F6,0x00F2,0x00FB,0x00F9, -0x00FF,0x00D6,0x00DC,0x00F8,0x00A3,0x00D8,0x00D7,0x0192, -0x00E1,0x00ED,0x00F3,0x00FA,0x00F1,0x00D1,0x00AA,0x00BA, -0x00BF,0x00AE,0x00AC,0x00BD,0x00BC,0x00A1,0x00AB,0x00BB, -0x2591,0x2592,0x2593,0x2502,0x2524,0x00C1,0x00C2,0x00C0, -0x00A9,0x2563,0x2551,0x2557,0x255D,0x00A2,0x00A5,0x2510, -0x2514,0x2534,0x252C,0x251C,0x2500,0x253C,0x00E3,0x00C3, -0x255A,0x2554,0x2569,0x2566,0x2560,0x2550,0x256C,0x00A4, -0x00F0,0x00D0,0x00CA,0x00CB,0x00C8,0x0131,0x00CD,0x00CE, -0x00CF,0x2518,0x250C,0x2588,0x2584,0x00A6,0x00CC,0x2580, -0x00D3,0x00DF,0x00D4,0x00D2,0x00F5,0x00D5,0x00B5,0x00FE, -0x00DE,0x00DA,0x00DB,0x00D9,0x00FD,0x00DD,0x00AF,0x00B4, -0x00AD,0x00B1,0x2017,0x00BE,0x00B6,0x00A7,0x00F7,0x00B8, -0x00B0,0x00A8,0x00B7,0x00B9,0x00B3,0x00B2,0x25A0,0x00A0 -}; - -#endif - -#ifdef HAVE_CHARSET_cp852 -uchar ctype_cp852_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x00, -0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x02,0x02,0x01,0x01,0x01, -0x01,0x01,0x02,0x02,0x02,0x01,0x02,0x01,0x02,0x01,0x01,0x01,0x02,0x01,0x00,0x02, -0x02,0x02,0x02,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x00,0x02,0x01,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x00,0x00,0x00,0x00,0x01,0x02,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x01,0x01,0x01,0x02,0x01,0x01,0x01,0x02,0x00,0x00,0x00,0x00,0x01,0x01,0x00, -0x01,0x02,0x01,0x01,0x02,0x02,0x01,0x02,0x01,0x01,0x02,0x01,0x02,0x01,0x02,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x02,0x00,0x48 -}; - -uchar to_lower_cp852_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x87,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8B,0x8B,0x8C,0xAB,0x84,0x86, -0x82,0x92,0x92,0x93,0x94,0x96,0x96,0x98,0x98,0x94,0x81,0x9C,0x9C,0x88,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA5,0xA5,0xA7,0xA7,0xA9,0xA9,0xAA,0xAB,0x9F,0xB8,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xA0,0x83,0xD8,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD0,0xD4,0x89,0xD4,0xE5,0xA1,0x8C,0xD8,0xD9,0xDA,0xDB,0xDC,0xEE,0x85,0xDF, -0xA2,0xE1,0x93,0xE4,0xE4,0xE5,0xE7,0xE7,0xEA,0xA3,0xE8,0xFB,0xEC,0xEC,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp852_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x9A,0x90,0xB6,0x8E,0xDE,0x8F,0x80,0x9D,0xD3,0x8A,0x8A,0xD7,0x8D,0x8E,0x8F, -0x90,0x91,0x91,0xE2,0x99,0x95,0x95,0x97,0x97,0x99,0x9A,0x9B,0x9B,0x9D,0x9E,0xAC, -0xB5,0xD6,0xE0,0xE9,0xA4,0xA4,0xA6,0xA6,0xA8,0xA8,0xAA,0x8D,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xAD,0xB9,0xBA,0xBB,0xBC,0xBE,0xBD,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC6,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD1,0xD1,0xD2,0xD3,0xD2,0xD5,0xD6,0xD7,0xB7,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE3,0xD5,0xE6,0xE6,0xE8,0xE9,0xE8,0xEB,0xED,0xED,0xDD,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xEB,0xFC,0xFC,0xFE,0xFF -}; - -uint16 to_uni_cp852_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x00C7,0x00FC,0x00E9,0x00E2,0x00E4,0x016F,0x0107,0x00E7, -0x0142,0x00EB,0x0150,0x0151,0x00EE,0x0179,0x00C4,0x0106, -0x00C9,0x0139,0x013A,0x00F4,0x00F6,0x013D,0x013E,0x015A, -0x015B,0x00D6,0x00DC,0x0164,0x0165,0x0141,0x00D7,0x010D, -0x00E1,0x00ED,0x00F3,0x00FA,0x0104,0x0105,0x017D,0x017E, -0x0118,0x0119,0x00AC,0x017A,0x010C,0x015F,0x00AB,0x00BB, -0x2591,0x2592,0x2593,0x2502,0x2524,0x00C1,0x00C2,0x011A, -0x015E,0x2563,0x2551,0x2557,0x255D,0x017B,0x017C,0x2510, -0x2514,0x2534,0x252C,0x251C,0x2500,0x253C,0x0102,0x0103, -0x255A,0x2554,0x2569,0x2566,0x2560,0x2550,0x256C,0x00A4, -0x0111,0x0110,0x010E,0x00CB,0x010F,0x0147,0x00CD,0x00CE, -0x011B,0x2518,0x250C,0x2588,0x2584,0x0162,0x016E,0x2580, -0x00D3,0x00DF,0x00D4,0x0143,0x0144,0x0148,0x0160,0x0161, -0x0154,0x00DA,0x0155,0x0170,0x00FD,0x00DD,0x0163,0x00B4, -0x00AD,0x02DD,0x02DB,0x02C7,0x02D8,0x00A7,0x00F7,0x00B8, -0x00B0,0x00A8,0x02D9,0x0171,0x0158,0x0159,0x25A0,0x00A0 -}; - -#endif - -#ifdef HAVE_CHARSET_swe7 -uchar ctype_swe7_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x01,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10, -0x01,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x20, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; - -uchar to_lower_swe7_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_swe7_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_swe7_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x00C9,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x00C4,0x00D6,0x00C5,0x00DC,0x005F, -0x00E9,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x00E4,0x00F6,0x00E5,0x00FC,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_geostd8 -uchar ctype_geostd8_general_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x00,0x10,0x00,0x10,0x10,0x10,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00, -0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, -0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, -0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; - -uchar to_lower_geostd8_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_geostd8_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar sort_order_geostd8_general_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_geostd8_general_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0000,0x201A,0x0000,0x201E,0x2026,0x2020,0x2021, -0x0000,0x2030,0x0000,0x2039,0x0000,0x0000,0x0000,0x0000, -0x0000,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x0000,0x0000,0x203A,0x0000,0x0000,0x0000,0x0000, -0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, -0x10D0,0x10D1,0x10D2,0x10D3,0x10D4,0x10D5,0x10D6,0x10F1, -0x10D7,0x10D8,0x10D9,0x10DA,0x10DB,0x10DC,0x10F2,0x10DD, -0x10DE,0x10DF,0x10E0,0x10E1,0x10E2,0x10F3,0x10E3,0x10E4, -0x10E5,0x10E6,0x10E7,0x10E8,0x10E9,0x10EA,0x10EB,0x10EC, -0x10ED,0x10EE,0x10F4,0x10EF,0x10F0,0x10F5,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x2116,0x0000,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_geostd8 -uchar ctype_geostd8_bin[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x00,0x00,0x10,0x00,0x10,0x10,0x10,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00, -0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, -0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, -0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; - -uchar to_lower_geostd8_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_geostd8_bin[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uint16 to_uni_geostd8_bin[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0000,0x201A,0x0000,0x201E,0x2026,0x2020,0x2021, -0x0000,0x2030,0x0000,0x2039,0x0000,0x0000,0x0000,0x0000, -0x0000,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x0000,0x0000,0x203A,0x0000,0x0000,0x0000,0x0000, -0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, -0x10D0,0x10D1,0x10D2,0x10D3,0x10D4,0x10D5,0x10D6,0x10F1, -0x10D7,0x10D8,0x10D9,0x10DA,0x10DB,0x10DC,0x10F2,0x10DD, -0x10DE,0x10DF,0x10E0,0x10E1,0x10E2,0x10F3,0x10E3,0x10E4, -0x10E5,0x10E6,0x10E7,0x10E8,0x10E9,0x10EA,0x10EB,0x10EC, -0x10ED,0x10EE,0x10F4,0x10EF,0x10F0,0x10F5,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x2116,0x0000,0x0000 -}; - -#endif - -#ifdef HAVE_CHARSET_latin1 -uchar ctype_latin1_spanish_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x10,0x00,0x10,0x02,0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x10,0x01,0x00,0x01,0x00, -0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x02,0x10,0x02,0x00,0x02,0x01, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 -}; - -uchar to_lower_latin1_spanish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_latin1_spanish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_latin1_spanish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x51,0x53,0x57,0x5B,0x65,0x67,0x69,0x6B,0x75,0x77,0x79,0x7B,0x7D,0x81, -0x8F,0x91,0x93,0x95,0x98,0x9A,0xA4,0xA6,0xA8,0xAA,0xAF,0xB3,0xB4,0xB5,0xB6,0xB7, -0xB8,0x41,0x51,0x53,0x57,0x5B,0x65,0x67,0x69,0x6B,0x75,0x77,0x79,0x7B,0x7D,0x81, -0x8F,0x91,0x93,0x95,0x98,0x9A,0xA4,0xA6,0xA8,0xAA,0xAF,0xB9,0xBA,0xBB,0xBC,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x53,0x5B,0x5B,0x5B,0x5B,0x6B,0x6B,0x6B,0x6B, -0x57,0x7F,0x81,0x81,0x81,0x81,0x81,0xBD,0x81,0x9A,0x9A,0x9A,0x9A,0xAA,0xB1,0x97, -0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x53,0x5B,0x5B,0x5B,0x5B,0x6B,0x6B,0x6B,0x6B, -0x57,0x7F,0x81,0x81,0x81,0x81,0x81,0xBE,0x81,0x9A,0x9A,0x9A,0x9A,0xAA,0xB1,0xAA -}; - -uint16 to_uni_latin1_spanish_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0081,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, -0x02C6,0x2030,0x0160,0x2039,0x0152,0x008D,0x017D,0x008F, -0x0090,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x02DC,0x2122,0x0161,0x203A,0x0153,0x009D,0x017E,0x0178, -0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, -0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, -0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, -0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, -0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF, -0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, -0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, -0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF -}; - -#endif - -#ifdef HAVE_CHARSET_cp1250 -uchar ctype_cp1250_polish_ci[] = { -0x00, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x28,0x28,0x28,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, -0x48,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x10,0x10,0x10,0x10,0x10, -0x10,0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10, -0x10,0x82,0x82,0x82,0x82,0x82,0x82,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x20, -0x20,0x20,0x10,0x20,0x10,0x10,0x10,0x10,0x20,0x10,0x01,0x10,0x01,0x01,0x01,0x01, -0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x02,0x10,0x02,0x02,0x02,0x02, -0x48,0x10,0x10,0x01,0x10,0x01,0x10,0x01,0x10,0x10,0x01,0x10,0x10,0x10,0x10,0x01, -0x10,0x10,0x10,0x02,0x10,0x10,0x10,0x10,0x10,0x02,0x02,0x10,0x01,0x10,0x02,0x02, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, -0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10 -}; - -uchar to_lower_cp1250_polish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x9A,0x8B,0x9C,0x9D,0x9E,0x9F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0xA1,0xA2,0xB3,0xA4,0xB9,0xA6,0xA7,0xA8,0xA9,0xBA,0xAB,0xAC,0xAD,0xAE,0xBF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBE,0xBD,0xBE,0xBF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xD7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -uchar to_upper_cp1250_polish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xA3,0xB4,0xB5,0xB6,0xB7,0xB8,0xA5,0xAA,0xBB,0xBC,0xBD,0xBC,0xAF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF -}; - -uchar sort_order_cp1250_polish_ci[] = { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x43,0x44,0x48,0x4B,0x4D,0x4E,0x4F,0x50,0x52,0x53,0x54,0x56,0x57,0x59, -0x5B,0x5C,0x5D,0x5F,0x62,0x64,0x66,0x67,0x68,0x69,0x6B,0x90,0x91,0x92,0x93,0x94, -0x95,0x41,0x43,0x44,0x48,0x4B,0x4D,0x4E,0x4F,0x50,0x52,0x53,0x54,0x56,0x57,0x59, -0x5B,0x5C,0x5D,0x5F,0x62,0x64,0x66,0x67,0x68,0x69,0x6B,0x96,0x97,0x98,0x99,0x9A, -0x9B,0x9C,0x9E,0x9F,0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0x5F,0xA6,0x60,0x62,0x6B,0x6C, -0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0x5F,0xB1,0x60,0x62,0x6B,0x6C, -0xB2,0xB3,0xB4,0x55,0xB5,0x42,0xB6,0xB7,0xB8,0xB9,0x5F,0xBA,0xBB,0xBC,0xBD,0x6D, -0xBE,0xBF,0xC0,0x55,0xC1,0xC2,0xC3,0xC4,0xC5,0x42,0x5F,0xC6,0x54,0xC7,0x54,0x6D, -0x5D,0x41,0x41,0x41,0x41,0x54,0x47,0x44,0x44,0x4B,0x4C,0x4B,0x4B,0x50,0x50,0x48, -0x48,0x58,0x57,0x5A,0x59,0x59,0x59,0xC8,0x5D,0x64,0x64,0x64,0x64,0x69,0x62,0x5F, -0x5D,0x41,0x41,0x41,0x41,0x54,0x47,0x44,0x44,0x4B,0x4C,0x4B,0x4B,0x50,0x50,0x48, -0x48,0x58,0x57,0x5A,0x59,0x59,0x59,0xC9,0x5D,0x64,0x64,0x64,0x64,0x69,0x62,0xFF -}; - -uint16 to_uni_cp1250_polish_ci[] = { -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0000,0x201A,0x0000,0x201E,0x2026,0x2020,0x2021, -0x0000,0x2030,0x0160,0x2039,0x015A,0x0164,0x017D,0x0179, -0x0000,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x0000,0x2122,0x0161,0x203A,0x015B,0x0165,0x017E,0x017A, -0x00A0,0x02C7,0x02D8,0x0141,0x00A4,0x0104,0x00A6,0x00A7, -0x00A8,0x00A9,0x015E,0x00AB,0x00AC,0x00AD,0x00AE,0x017B, -0x00B0,0x00B1,0x02DB,0x0142,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x0105,0x015F,0x00BB,0x013D,0x02DD,0x013E,0x017C, -0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, -0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, -0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, -0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, -0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, -0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, -0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, -0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 -}; - -#endif - -CHARSET_INFO compiled_charsets[] = { -#ifdef HAVE_CHARSET_dec8 -{ - 3,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "dec8", /* cset name */ - "dec8_swedish_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_dec8_swedish_ci, /* ctype */ - to_lower_dec8_swedish_ci, /* lower */ - to_upper_dec8_swedish_ci, /* upper */ - sort_order_dec8_swedish_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_dec8_swedish_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp850 -{ - 4,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "cp850", /* cset name */ - "cp850_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp850_general_ci, /* ctype */ - to_lower_cp850_general_ci, /* lower */ - to_upper_cp850_general_ci, /* upper */ - sort_order_cp850_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp850_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin1 -{ - 5,0,0, - MY_CS_COMPILED, - "latin1", /* cset name */ - "latin1_german1_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin1_german1_ci, /* ctype */ - to_lower_latin1_german1_ci, /* lower */ - to_upper_latin1_german1_ci, /* upper */ - sort_order_latin1_german1_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin1_german1_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_hp8 -{ - 6,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "hp8", /* cset name */ - "hp8_english_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_hp8_english_ci, /* ctype */ - to_lower_hp8_english_ci, /* lower */ - to_upper_hp8_english_ci, /* upper */ - sort_order_hp8_english_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_hp8_english_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_koi8r -{ - 7,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "koi8r", /* cset name */ - "koi8r_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_koi8r_general_ci, /* ctype */ - to_lower_koi8r_general_ci, /* lower */ - to_upper_koi8r_general_ci, /* upper */ - sort_order_koi8r_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_koi8r_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin2 -{ - 9,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "latin2", /* cset name */ - "latin2_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin2_general_ci, /* ctype */ - to_lower_latin2_general_ci, /* lower */ - to_upper_latin2_general_ci, /* upper */ - sort_order_latin2_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin2_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_swe7 -{ - 10,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_NONASCII, - "swe7", /* cset name */ - "swe7_swedish_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_swe7_swedish_ci, /* ctype */ - to_lower_swe7_swedish_ci, /* lower */ - to_upper_swe7_swedish_ci, /* upper */ - sort_order_swe7_swedish_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_swe7_swedish_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_ascii -{ - 11,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_PUREASCII, - "ascii", /* cset name */ - "ascii_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_ascii_general_ci, /* ctype */ - to_lower_ascii_general_ci, /* lower */ - to_upper_ascii_general_ci, /* upper */ - sort_order_ascii_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_ascii_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp1251 -{ - 14,0,0, - MY_CS_COMPILED, - "cp1251", /* cset name */ - "cp1251_bulgarian_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp1251_bulgarian_ci, /* ctype */ - to_lower_cp1251_bulgarian_ci, /* lower */ - to_upper_cp1251_bulgarian_ci, /* upper */ - sort_order_cp1251_bulgarian_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp1251_bulgarian_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin1 -{ - 15,0,0, - MY_CS_COMPILED, - "latin1", /* cset name */ - "latin1_danish_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin1_danish_ci, /* ctype */ - to_lower_latin1_danish_ci, /* lower */ - to_upper_latin1_danish_ci, /* upper */ - sort_order_latin1_danish_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin1_danish_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_hebrew -{ - 16,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "hebrew", /* cset name */ - "hebrew_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_hebrew_general_ci, /* ctype */ - to_lower_hebrew_general_ci, /* lower */ - to_upper_hebrew_general_ci, /* upper */ - sort_order_hebrew_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_hebrew_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin7 -{ - 20,0,0, - MY_CS_COMPILED|MY_CS_CSSORT, - "latin7", /* cset name */ - "latin7_estonian_cs", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin7_estonian_cs, /* ctype */ - to_lower_latin7_estonian_cs, /* lower */ - to_upper_latin7_estonian_cs, /* upper */ - sort_order_latin7_estonian_cs, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin7_estonian_cs, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin2 -{ - 21,0,0, - MY_CS_COMPILED, - "latin2", /* cset name */ - "latin2_hungarian_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin2_hungarian_ci, /* ctype */ - to_lower_latin2_hungarian_ci, /* lower */ - to_upper_latin2_hungarian_ci, /* upper */ - sort_order_latin2_hungarian_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin2_hungarian_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_koi8u -{ - 22,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "koi8u", /* cset name */ - "koi8u_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_koi8u_general_ci, /* ctype */ - to_lower_koi8u_general_ci, /* lower */ - to_upper_koi8u_general_ci, /* upper */ - sort_order_koi8u_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_koi8u_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp1251 -{ - 23,0,0, - MY_CS_COMPILED, - "cp1251", /* cset name */ - "cp1251_ukrainian_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp1251_ukrainian_ci, /* ctype */ - to_lower_cp1251_ukrainian_ci, /* lower */ - to_upper_cp1251_ukrainian_ci, /* upper */ - sort_order_cp1251_ukrainian_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp1251_ukrainian_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_greek -{ - 25,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "greek", /* cset name */ - "greek_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_greek_general_ci, /* ctype */ - to_lower_greek_general_ci, /* lower */ - to_upper_greek_general_ci, /* upper */ - sort_order_greek_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_greek_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp1250 -{ - 26,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "cp1250", /* cset name */ - "cp1250_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp1250_general_ci, /* ctype */ - to_lower_cp1250_general_ci, /* lower */ - to_upper_cp1250_general_ci, /* upper */ - sort_order_cp1250_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp1250_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin2 -{ - 27,0,0, - MY_CS_COMPILED, - "latin2", /* cset name */ - "latin2_croatian_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin2_croatian_ci, /* ctype */ - to_lower_latin2_croatian_ci, /* lower */ - to_upper_latin2_croatian_ci, /* upper */ - sort_order_latin2_croatian_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin2_croatian_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp1257 -{ - 29,0,0, - MY_CS_COMPILED, - "cp1257", /* cset name */ - "cp1257_lithuanian_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp1257_lithuanian_ci, /* ctype */ - to_lower_cp1257_lithuanian_ci, /* lower */ - to_upper_cp1257_lithuanian_ci, /* upper */ - sort_order_cp1257_lithuanian_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp1257_lithuanian_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin5 -{ - 30,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "latin5", /* cset name */ - "latin5_turkish_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin5_turkish_ci, /* ctype */ - to_lower_latin5_turkish_ci, /* lower */ - to_upper_latin5_turkish_ci, /* upper */ - sort_order_latin5_turkish_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin5_turkish_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_armscii8 -{ - 32,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "armscii8", /* cset name */ - "armscii8_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_armscii8_general_ci, /* ctype */ - to_lower_armscii8_general_ci, /* lower */ - to_upper_armscii8_general_ci, /* upper */ - sort_order_armscii8_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_armscii8_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp866 -{ - 36,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "cp866", /* cset name */ - "cp866_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp866_general_ci, /* ctype */ - to_lower_cp866_general_ci, /* lower */ - to_upper_cp866_general_ci, /* upper */ - sort_order_cp866_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp866_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_keybcs2 -{ - 37,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "keybcs2", /* cset name */ - "keybcs2_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_keybcs2_general_ci, /* ctype */ - to_lower_keybcs2_general_ci, /* lower */ - to_upper_keybcs2_general_ci, /* upper */ - sort_order_keybcs2_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_keybcs2_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_macce -{ - 38,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "macce", /* cset name */ - "macce_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_macce_general_ci, /* ctype */ - to_lower_macce_general_ci, /* lower */ - to_upper_macce_general_ci, /* upper */ - sort_order_macce_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_macce_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_macroman -{ - 39,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "macroman", /* cset name */ - "macroman_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_macroman_general_ci, /* ctype */ - to_lower_macroman_general_ci, /* lower */ - to_upper_macroman_general_ci, /* upper */ - sort_order_macroman_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_macroman_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp852 -{ - 40,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "cp852", /* cset name */ - "cp852_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp852_general_ci, /* ctype */ - to_lower_cp852_general_ci, /* lower */ - to_upper_cp852_general_ci, /* upper */ - sort_order_cp852_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp852_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin7 -{ - 41,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "latin7", /* cset name */ - "latin7_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin7_general_ci, /* ctype */ - to_lower_latin7_general_ci, /* lower */ - to_upper_latin7_general_ci, /* upper */ - sort_order_latin7_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin7_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin7 -{ - 42,0,0, - MY_CS_COMPILED|MY_CS_CSSORT, - "latin7", /* cset name */ - "latin7_general_cs", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin7_general_cs, /* ctype */ - to_lower_latin7_general_cs, /* lower */ - to_upper_latin7_general_cs, /* upper */ - sort_order_latin7_general_cs, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin7_general_cs, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_macce -{ - 43,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "macce", /* cset name */ - "macce_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_macce_bin, /* ctype */ - to_lower_macce_bin, /* lower */ - to_upper_macce_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_macce_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp1250 -{ - 44,0,0, - MY_CS_COMPILED, - "cp1250", /* cset name */ - "cp1250_croatian_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp1250_croatian_ci, /* ctype */ - to_lower_cp1250_croatian_ci, /* lower */ - to_upper_cp1250_croatian_ci, /* upper */ - sort_order_cp1250_croatian_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp1250_croatian_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin1 -{ - 48,0,0, - MY_CS_COMPILED, - "latin1", /* cset name */ - "latin1_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin1_general_ci, /* ctype */ - to_lower_latin1_general_ci, /* lower */ - to_upper_latin1_general_ci, /* upper */ - sort_order_latin1_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin1_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin1 -{ - 49,0,0, - MY_CS_COMPILED|MY_CS_CSSORT, - "latin1", /* cset name */ - "latin1_general_cs", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin1_general_cs, /* ctype */ - to_lower_latin1_general_cs, /* lower */ - to_upper_latin1_general_cs, /* upper */ - sort_order_latin1_general_cs, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin1_general_cs, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp1251 -{ - 50,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "cp1251", /* cset name */ - "cp1251_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp1251_bin, /* ctype */ - to_lower_cp1251_bin, /* lower */ - to_upper_cp1251_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp1251_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp1251 -{ - 51,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "cp1251", /* cset name */ - "cp1251_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp1251_general_ci, /* ctype */ - to_lower_cp1251_general_ci, /* lower */ - to_upper_cp1251_general_ci, /* upper */ - sort_order_cp1251_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp1251_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp1251 -{ - 52,0,0, - MY_CS_COMPILED|MY_CS_CSSORT, - "cp1251", /* cset name */ - "cp1251_general_cs", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp1251_general_cs, /* ctype */ - to_lower_cp1251_general_cs, /* lower */ - to_upper_cp1251_general_cs, /* upper */ - sort_order_cp1251_general_cs, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp1251_general_cs, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_macroman -{ - 53,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "macroman", /* cset name */ - "macroman_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_macroman_bin, /* ctype */ - to_lower_macroman_bin, /* lower */ - to_upper_macroman_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_macroman_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp1256 -{ - 57,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "cp1256", /* cset name */ - "cp1256_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp1256_general_ci, /* ctype */ - to_lower_cp1256_general_ci, /* lower */ - to_upper_cp1256_general_ci, /* upper */ - sort_order_cp1256_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp1256_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp1257 -{ - 58,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "cp1257", /* cset name */ - "cp1257_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp1257_bin, /* ctype */ - to_lower_cp1257_bin, /* lower */ - to_upper_cp1257_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp1257_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp1257 -{ - 59,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "cp1257", /* cset name */ - "cp1257_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp1257_general_ci, /* ctype */ - to_lower_cp1257_general_ci, /* lower */ - to_upper_cp1257_general_ci, /* upper */ - sort_order_cp1257_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp1257_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_armscii8 -{ - 64,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "armscii8", /* cset name */ - "armscii8_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_armscii8_bin, /* ctype */ - to_lower_armscii8_bin, /* lower */ - to_upper_armscii8_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_armscii8_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_ascii -{ - 65,0,0, - MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_PUREASCII, - "ascii", /* cset name */ - "ascii_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_ascii_bin, /* ctype */ - to_lower_ascii_bin, /* lower */ - to_upper_ascii_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_ascii_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp1250 -{ - 66,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "cp1250", /* cset name */ - "cp1250_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp1250_bin, /* ctype */ - to_lower_cp1250_bin, /* lower */ - to_upper_cp1250_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp1250_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp1256 -{ - 67,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "cp1256", /* cset name */ - "cp1256_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp1256_bin, /* ctype */ - to_lower_cp1256_bin, /* lower */ - to_upper_cp1256_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp1256_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp866 -{ - 68,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "cp866", /* cset name */ - "cp866_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp866_bin, /* ctype */ - to_lower_cp866_bin, /* lower */ - to_upper_cp866_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp866_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_dec8 -{ - 69,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "dec8", /* cset name */ - "dec8_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_dec8_bin, /* ctype */ - to_lower_dec8_bin, /* lower */ - to_upper_dec8_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_dec8_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_greek -{ - 70,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "greek", /* cset name */ - "greek_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_greek_bin, /* ctype */ - to_lower_greek_bin, /* lower */ - to_upper_greek_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_greek_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_hebrew -{ - 71,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "hebrew", /* cset name */ - "hebrew_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_hebrew_bin, /* ctype */ - to_lower_hebrew_bin, /* lower */ - to_upper_hebrew_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_hebrew_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_hp8 -{ - 72,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "hp8", /* cset name */ - "hp8_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_hp8_bin, /* ctype */ - to_lower_hp8_bin, /* lower */ - to_upper_hp8_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_hp8_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_keybcs2 -{ - 73,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "keybcs2", /* cset name */ - "keybcs2_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_keybcs2_bin, /* ctype */ - to_lower_keybcs2_bin, /* lower */ - to_upper_keybcs2_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_keybcs2_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_koi8r -{ - 74,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "koi8r", /* cset name */ - "koi8r_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_koi8r_bin, /* ctype */ - to_lower_koi8r_bin, /* lower */ - to_upper_koi8r_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_koi8r_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_koi8u -{ - 75,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "koi8u", /* cset name */ - "koi8u_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_koi8u_bin, /* ctype */ - to_lower_koi8u_bin, /* lower */ - to_upper_koi8u_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_koi8u_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin2 -{ - 77,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "latin2", /* cset name */ - "latin2_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin2_bin, /* ctype */ - to_lower_latin2_bin, /* lower */ - to_upper_latin2_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin2_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin5 -{ - 78,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "latin5", /* cset name */ - "latin5_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin5_bin, /* ctype */ - to_lower_latin5_bin, /* lower */ - to_upper_latin5_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin5_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin7 -{ - 79,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "latin7", /* cset name */ - "latin7_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin7_bin, /* ctype */ - to_lower_latin7_bin, /* lower */ - to_upper_latin7_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin7_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp850 -{ - 80,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "cp850", /* cset name */ - "cp850_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp850_bin, /* ctype */ - to_lower_cp850_bin, /* lower */ - to_upper_cp850_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp850_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp852 -{ - 81,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "cp852", /* cset name */ - "cp852_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp852_bin, /* ctype */ - to_lower_cp852_bin, /* lower */ - to_upper_cp852_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp852_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_swe7 -{ - 82,0,0, - MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NONASCII, - "swe7", /* cset name */ - "swe7_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_swe7_bin, /* ctype */ - to_lower_swe7_bin, /* lower */ - to_upper_swe7_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_swe7_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_geostd8 -{ - 92,0,0, - MY_CS_COMPILED|MY_CS_PRIMARY, - "geostd8", /* cset name */ - "geostd8_general_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_geostd8_general_ci, /* ctype */ - to_lower_geostd8_general_ci, /* lower */ - to_upper_geostd8_general_ci, /* upper */ - sort_order_geostd8_general_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_geostd8_general_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_geostd8 -{ - 93,0,0, - MY_CS_COMPILED|MY_CS_BINSORT, - "geostd8", /* cset name */ - "geostd8_bin", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_geostd8_bin, /* ctype */ - to_lower_geostd8_bin, /* lower */ - to_upper_geostd8_bin, /* upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_geostd8_bin, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_bin_handler, -} -, -#endif -#ifdef HAVE_CHARSET_latin1 -{ - 94,0,0, - MY_CS_COMPILED, - "latin1", /* cset name */ - "latin1_spanish_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin1_spanish_ci, /* ctype */ - to_lower_latin1_spanish_ci, /* lower */ - to_upper_latin1_spanish_ci, /* upper */ - sort_order_latin1_spanish_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_latin1_spanish_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -#ifdef HAVE_CHARSET_cp1250 -{ - 99,0,0, - MY_CS_COMPILED, - "cp1250", /* cset name */ - "cp1250_polish_ci", /* coll name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_cp1250_polish_ci, /* ctype */ - to_lower_cp1250_polish_ci, /* lower */ - to_upper_cp1250_polish_ci, /* upper */ - sort_order_cp1250_polish_ci, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - to_uni_cp1250_polish_ci, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -, -#endif -{ - 0,0,0, - MY_CS_COMPILED, - NULL, /* cset name */ - NULL, /* coll name */ - NULL, /* comment */ - NULL, /* tailoging */ - NULL, /* ctype */ - NULL, /* lower */ - NULL, /* upper */ - NULL, /* sort order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* to_uni */ - NULL, /* from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state map */ - NULL, /* ident map */ - 1, /* strxfrm_multiply*/ - 1, /* caseup_multiply*/ - 1, /* casedn_multiply*/ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad_char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_8bit_simple_ci_handler, -} -}; diff --git a/deps/mysqllite/strings/ctype-gb2312.c b/deps/mysqllite/strings/ctype-gb2312.c deleted file mode 100644 index b1acd643df392c..00000000000000 --- a/deps/mysqllite/strings/ctype-gb2312.c +++ /dev/null @@ -1,6474 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* This file is for Chinese EUC character sets (GB2312), and created by Miles Tsai (net-bull@126.com). - */ - -/* - * This comment is parsed by configure to create ctype.c, - * so don't change it unless you know what you are doing. - * - * .configure. mbmaxlen_gb2312=2 - */ - -#include -#include "m_string.h" -#include "m_ctype.h" - -#ifdef HAVE_CHARSET_gb2312 - -static uchar ctype_gb2312[257] = -{ - 0, /* For standard library */ - 32,32,32,32,32,32,32,32,32,40,40,40,40,40,32,32, - 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, - 72,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, - 132,132,132,132,132,132,132,132,132,132,16,16,16,16,16,16, - 16,129,129,129,129,129,129,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,16,16,16,16,16, - 16,130,130,130,130,130,130,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,16,16,16,16,32, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0, -}; - -static uchar to_lower_gb2312[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '[', '\\', ']', '^', '_', - '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '{', '|', '}', '~', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - -static uchar to_upper_gb2312[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', - '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '{', '|', '}', '~', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - -static uchar sort_order_gb2312[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '\\', ']', '[', '^', '_', - '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '{', '|', '}', 'Y', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - -/* Support for Chinese(GB2312) characters, by Miles Tsai (net-bull@126.com) - modified by Wei He (hewei@mail.ied.ac.cn) */ - -#define isgb2312head(c) (0xa1<=(uchar)(c) && (uchar)(c)<=0xf7) -#define isgb2312tail(c) (0xa1<=(uchar)(c) && (uchar)(c)<=0xfe) - - -static uint ismbchar_gb2312(CHARSET_INFO *cs __attribute__((unused)), - const char* p, const char *e) -{ - return (isgb2312head(*(p)) && (e)-(p)>1 && isgb2312tail(*((p)+1))? 2: 0); -} - -static uint mbcharlen_gb2312(CHARSET_INFO *cs __attribute__((unused)),uint c) -{ - return (isgb2312head(c)? 2 : 1); -} - - -static MY_UNICASE_INFO cA2[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xA2A0,0xA2A0,0xA2A0}, /* A2A0 */ - {0xA2A1,0xA2A1,0x003F}, - {0xA2A2,0xA2A2,0x003F}, - {0xA2A3,0xA2A3,0x003F}, - {0xA2A4,0xA2A4,0x003F}, - {0xA2A5,0xA2A5,0x003F}, - {0xA2A6,0xA2A6,0x003F}, - {0xA2A7,0xA2A7,0x003F}, - {0xA2A8,0xA2A8,0x003F}, - {0xA2A9,0xA2A9,0x003F}, - {0xA2AA,0xA2AA,0x003F}, - {0xA2AB,0xA2AB,0x003F}, - {0xA2AC,0xA2AC,0x003F}, - {0xA2AD,0xA2AD,0x003F}, - {0xA2AE,0xA2AE,0x003F}, - {0xA2AF,0xA2AF,0x003F}, - {0xA2B0,0xA2B0,0x003F}, /* A2B0 */ - {0xA2B1,0xA2B1,0x2488}, - {0xA2B2,0xA2B2,0x2489}, - {0xA2B3,0xA2B3,0x248A}, - {0xA2B4,0xA2B4,0x248B}, - {0xA2B5,0xA2B5,0x248C}, - {0xA2B6,0xA2B6,0x248D}, - {0xA2B7,0xA2B7,0x248E}, - {0xA2B8,0xA2B8,0x248F}, - {0xA2B9,0xA2B9,0x2490}, - {0xA2BA,0xA2BA,0x2491}, - {0xA2BB,0xA2BB,0x2492}, - {0xA2BC,0xA2BC,0x2493}, - {0xA2BD,0xA2BD,0x2494}, - {0xA2BE,0xA2BE,0x2495}, - {0xA2BF,0xA2BF,0x2496}, - {0xA2C0,0xA2C0,0x2497}, /* A2C0 */ - {0xA2C1,0xA2C1,0x2498}, - {0xA2C2,0xA2C2,0x2499}, - {0xA2C3,0xA2C3,0x249A}, - {0xA2C4,0xA2C4,0x249B}, - {0xA2C5,0xA2C5,0x2474}, - {0xA2C6,0xA2C6,0x2475}, - {0xA2C7,0xA2C7,0x2476}, - {0xA2C8,0xA2C8,0x2477}, - {0xA2C9,0xA2C9,0x2478}, - {0xA2CA,0xA2CA,0x2479}, - {0xA2CB,0xA2CB,0x247A}, - {0xA2CC,0xA2CC,0x247B}, - {0xA2CD,0xA2CD,0x247C}, - {0xA2CE,0xA2CE,0x247D}, - {0xA2CF,0xA2CF,0x247E}, - {0xA2D0,0xA2D0,0x247F}, /* A2D0 */ - {0xA2D1,0xA2D1,0x2480}, - {0xA2D2,0xA2D2,0x2481}, - {0xA2D3,0xA2D3,0x2482}, - {0xA2D4,0xA2D4,0x2483}, - {0xA2D5,0xA2D5,0x2484}, - {0xA2D6,0xA2D6,0x2485}, - {0xA2D7,0xA2D7,0x2486}, - {0xA2D8,0xA2D8,0x2487}, - {0xA2D9,0xA2D9,0x2460}, - {0xA2DA,0xA2DA,0x2461}, - {0xA2DB,0xA2DB,0x2462}, - {0xA2DC,0xA2DC,0x2463}, - {0xA2DD,0xA2DD,0x2464}, - {0xA2DE,0xA2DE,0x2465}, - {0xA2DF,0xA2DF,0x2466}, - {0xA2E0,0xA2E0,0x2467}, /* A2E0 */ - {0xA2E1,0xA2E1,0x2468}, - {0xA2E2,0xA2E2,0x2469}, - {0xA2E3,0xA2E3,0x003F}, - {0xA2E4,0xA2E4,0x003F}, - {0xA2E5,0xA2E5,0x3220}, - {0xA2E6,0xA2E6,0x3221}, - {0xA2E7,0xA2E7,0x3222}, - {0xA2E8,0xA2E8,0x3223}, - {0xA2E9,0xA2E9,0x3224}, - {0xA2EA,0xA2EA,0x3225}, - {0xA2EB,0xA2EB,0x3226}, - {0xA2EC,0xA2EC,0x3227}, - {0xA2ED,0xA2ED,0x3228}, - {0xA2EE,0xA2EE,0x3229}, - {0xA2EF,0xA2EF,0x003F}, - {0xA2F0,0xA2F0,0x003F}, /* A2F0 */ - {0xA2F1,0xA2F1,0x2160}, - {0xA2F2,0xA2F2,0x2161}, - {0xA2F3,0xA2F3,0x2162}, - {0xA2F4,0xA2F4,0x2163}, - {0xA2F5,0xA2F5,0x2164}, - {0xA2F6,0xA2F6,0x2165}, - {0xA2F7,0xA2F7,0x2166}, - {0xA2F8,0xA2F8,0x2167}, - {0xA2F9,0xA2F9,0x2168}, - {0xA2FA,0xA2FA,0x2169}, - {0xA2FB,0xA2FB,0x216A}, - {0xA2FC,0xA2FC,0x216B}, - {0xA2FD,0xA2FD,0x003F}, - {0xA2FE,0xA2FE,0x003F}, - {0xA2FF,0xA2FF,0xA2FF} -}; - - -static MY_UNICASE_INFO cA3[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xA3A0,0xA3A0,0xA3A0}, /* A3A0 */ - {0xA3A1,0xA3A1,0xFF01}, - {0xA3A2,0xA3A2,0xFF02}, - {0xA3A3,0xA3A3,0xFF03}, - {0xA3A4,0xA3A4,0xFFE5}, - {0xA3A5,0xA3A5,0xFF05}, - {0xA3A6,0xA3A6,0xFF06}, - {0xA3A7,0xA3A7,0xFF07}, - {0xA3A8,0xA3A8,0xFF08}, - {0xA3A9,0xA3A9,0xFF09}, - {0xA3AA,0xA3AA,0xFF0A}, - {0xA3AB,0xA3AB,0xFF0B}, - {0xA3AC,0xA3AC,0xFF0C}, - {0xA3AD,0xA3AD,0xFF0D}, - {0xA3AE,0xA3AE,0xFF0E}, - {0xA3AF,0xA3AF,0xFF0F}, - {0xA3B0,0xA3B0,0xFF10}, /* A3B0 */ - {0xA3B1,0xA3B1,0xFF11}, - {0xA3B2,0xA3B2,0xFF12}, - {0xA3B3,0xA3B3,0xFF13}, - {0xA3B4,0xA3B4,0xFF14}, - {0xA3B5,0xA3B5,0xFF15}, - {0xA3B6,0xA3B6,0xFF16}, - {0xA3B7,0xA3B7,0xFF17}, - {0xA3B8,0xA3B8,0xFF18}, - {0xA3B9,0xA3B9,0xFF19}, - {0xA3BA,0xA3BA,0xFF1A}, - {0xA3BB,0xA3BB,0xFF1B}, - {0xA3BC,0xA3BC,0xFF1C}, - {0xA3BD,0xA3BD,0xFF1D}, - {0xA3BE,0xA3BE,0xFF1E}, - {0xA3BF,0xA3BF,0xFF1F}, - {0xA3C0,0xA3C0,0xFF20}, /* A3C0 */ - {0xA3C1,0xA3E1,0xFF21}, - {0xA3C2,0xA3E2,0xFF22}, - {0xA3C3,0xA3E3,0xFF23}, - {0xA3C4,0xA3E4,0xFF24}, - {0xA3C5,0xA3E5,0xFF25}, - {0xA3C6,0xA3E6,0xFF26}, - {0xA3C7,0xA3E7,0xFF27}, - {0xA3C8,0xA3E8,0xFF28}, - {0xA3C9,0xA3E9,0xFF29}, - {0xA3CA,0xA3EA,0xFF2A}, - {0xA3CB,0xA3EB,0xFF2B}, - {0xA3CC,0xA3EC,0xFF2C}, - {0xA3CD,0xA3ED,0xFF2D}, - {0xA3CE,0xA3EE,0xFF2E}, - {0xA3CF,0xA3EF,0xFF2F}, - {0xA3D0,0xA3F0,0xFF30}, /* A3D0 */ - {0xA3D1,0xA3F1,0xFF31}, - {0xA3D2,0xA3F2,0xFF32}, - {0xA3D3,0xA3F3,0xFF33}, - {0xA3D4,0xA3F4,0xFF34}, - {0xA3D5,0xA3F5,0xFF35}, - {0xA3D6,0xA3F6,0xFF36}, - {0xA3D7,0xA3F7,0xFF37}, - {0xA3D8,0xA3F8,0xFF38}, - {0xA3D9,0xA3F9,0xFF39}, - {0xA3DA,0xA3FA,0xFF3A}, - {0xA3DB,0xA3DB,0xFF3B}, - {0xA3DC,0xA3DC,0xFF3C}, - {0xA3DD,0xA3DD,0xFF3D}, - {0xA3DE,0xA3DE,0xFF3E}, - {0xA3DF,0xA3DF,0xFF3F}, - {0xA3E0,0xA3E0,0xFF40}, /* A3E0 */ - {0xA3C1,0xA3E1,0xFF41}, - {0xA3C2,0xA3E2,0xFF42}, - {0xA3C3,0xA3E3,0xFF43}, - {0xA3C4,0xA3E4,0xFF44}, - {0xA3C5,0xA3E5,0xFF45}, - {0xA3C6,0xA3E6,0xFF46}, - {0xA3C7,0xA3E7,0xFF47}, - {0xA3C8,0xA3E8,0xFF48}, - {0xA3C9,0xA3E9,0xFF49}, - {0xA3CA,0xA3EA,0xFF4A}, - {0xA3CB,0xA3EB,0xFF4B}, - {0xA3CC,0xA3EC,0xFF4C}, - {0xA3CD,0xA3ED,0xFF4D}, - {0xA3CE,0xA3EE,0xFF4E}, - {0xA3CF,0xA3EF,0xFF4F}, - {0xA3D0,0xA3F0,0xFF50}, /* A3F0 */ - {0xA3D1,0xA3F1,0xFF51}, - {0xA3D2,0xA3F2,0xFF52}, - {0xA3D3,0xA3F3,0xFF53}, - {0xA3D4,0xA3F4,0xFF54}, - {0xA3D5,0xA3F5,0xFF55}, - {0xA3D6,0xA3F6,0xFF56}, - {0xA3D7,0xA3F7,0xFF57}, - {0xA3D8,0xA3F8,0xFF58}, - {0xA3D9,0xA3F9,0xFF59}, - {0xA3DA,0xA3FA,0xFF5A}, - {0xA3FB,0xA3FB,0xFF5B}, - {0xA3FC,0xA3FC,0xFF5C}, - {0xA3FD,0xA3FD,0xFF5D}, - {0xA3FE,0xA3FE,0xFFE3}, - {0xA3FF,0xA3FF,0xA3FF} -}; - - -static MY_UNICASE_INFO cA6[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xA6A0,0xA6A0,0xA6A0}, /* A6A0 */ - {0xA6A1,0xA6C1,0x0391}, - {0xA6A2,0xA6C2,0x0392}, - {0xA6A3,0xA6C3,0x0393}, - {0xA6A4,0xA6C4,0x0394}, - {0xA6A5,0xA6C5,0x0395}, - {0xA6A6,0xA6C6,0x0396}, - {0xA6A7,0xA6C7,0x0397}, - {0xA6A8,0xA6C8,0x0398}, - {0xA6A9,0xA6C9,0x0399}, - {0xA6AA,0xA6CA,0x039A}, - {0xA6AB,0xA6CB,0x039B}, - {0xA6AC,0xA6CC,0x039C}, - {0xA6AD,0xA6CD,0x039D}, - {0xA6AE,0xA6CE,0x039E}, - {0xA6AF,0xA6CF,0x039F}, - {0xA6B0,0xA6D0,0x03A0}, /* A6B0 */ - {0xA6B1,0xA6D1,0x03A1}, - {0xA6B2,0xA6D2,0x03A3}, - {0xA6B3,0xA6D3,0x03A4}, - {0xA6B4,0xA6D4,0x03A5}, - {0xA6B5,0xA6D5,0x03A6}, - {0xA6B6,0xA6D6,0x03A7}, - {0xA6B7,0xA6D7,0x03A8}, - {0xA6B8,0xA6D8,0x03A9}, - {0xA6B9,0xA6B9,0x003F}, - {0xA6BA,0xA6BA,0x003F}, - {0xA6BB,0xA6BB,0x003F}, - {0xA6BC,0xA6BC,0x003F}, - {0xA6BD,0xA6BD,0x003F}, - {0xA6BE,0xA6BE,0x003F}, - {0xA6BF,0xA6BF,0x003F}, - {0xA6C0,0xA6C0,0x003F}, /* A6C0 */ - {0xA6A1,0xA6C1,0x03B1}, - {0xA6A2,0xA6C2,0x03B2}, - {0xA6A3,0xA6C3,0x03B3}, - {0xA6A4,0xA6C4,0x03B4}, - {0xA6A5,0xA6C5,0x03B5}, - {0xA6A6,0xA6C6,0x03B6}, - {0xA6A7,0xA6C7,0x03B7}, - {0xA6A8,0xA6C8,0x03B8}, - {0xA6A9,0xA6C9,0x03B9}, - {0xA6AA,0xA6CA,0x03BA}, - {0xA6AB,0xA6CB,0x03BB}, - {0xA6AC,0xA6CC,0x03BC}, - {0xA6AD,0xA6CD,0x03BD}, - {0xA6AE,0xA6CE,0x03BE}, - {0xA6AF,0xA6CF,0x03BF}, - {0xA6B0,0xA6D0,0x03C0}, /* A6D0 */ - {0xA6B1,0xA6D1,0x03C1}, - {0xA6B2,0xA6D2,0x03C3}, - {0xA6B3,0xA6D3,0x03C4}, - {0xA6B4,0xA6D4,0x03C5}, - {0xA6B5,0xA6D5,0x03C6}, - {0xA6B6,0xA6D6,0x03C7}, - {0xA6B7,0xA6D7,0x03C8}, - {0xA6B8,0xA6D8,0x03C9}, - {0xA6D9,0xA6D9,0x003F}, - {0xA6DA,0xA6DA,0x003F}, - {0xA6DB,0xA6DB,0x003F}, - {0xA6DC,0xA6DC,0x003F}, - {0xA6DD,0xA6DD,0x003F}, - {0xA6DE,0xA6DE,0x003F}, - {0xA6DF,0xA6DF,0x003F}, - {0xA6E0,0xA6E0,0x003F}, /* A6E0 */ - {0xA6E1,0xA6E1,0x003F}, - {0xA6E2,0xA6E2,0x003F}, - {0xA6E3,0xA6E3,0x003F}, - {0xA6E4,0xA6E4,0x003F}, - {0xA6E5,0xA6E5,0x003F}, - {0xA6E6,0xA6E6,0x003F}, - {0xA6E7,0xA6E7,0x003F}, - {0xA6E8,0xA6E8,0x003F}, - {0xA6E9,0xA6E9,0x003F}, - {0xA6EA,0xA6EA,0x003F}, - {0xA6EB,0xA6EB,0x003F}, - {0xA6EC,0xA6EC,0x003F}, - {0xA6ED,0xA6ED,0x003F}, - {0xA6EE,0xA6EE,0x003F}, - {0xA6EF,0xA6EF,0x003F}, - {0xA6F0,0xA6F0,0x003F}, /* A6F0 */ - {0xA6F1,0xA6F1,0x003F}, - {0xA6F2,0xA6F2,0x003F}, - {0xA6F3,0xA6F3,0x003F}, - {0xA6F4,0xA6F4,0x003F}, - {0xA6F5,0xA6F5,0x003F}, - {0xA6F6,0xA6F6,0x003F}, - {0xA6F7,0xA6F7,0x003F}, - {0xA6F8,0xA6F8,0x003F}, - {0xA6F9,0xA6F9,0x003F}, - {0xA6FA,0xA6FA,0x003F}, - {0xA6FB,0xA6FB,0x003F}, - {0xA6FC,0xA6FC,0x003F}, - {0xA6FD,0xA6FD,0x003F}, - {0xA6FE,0xA6FE,0x003F}, - {0xA6FF,0xA6FF,0xA6FF} -}; - - -static MY_UNICASE_INFO cA7[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xA7A0,0xA7A0,0xA7A0}, /* A7A0 */ - {0xA7A1,0xA7D1,0x0410}, - {0xA7A2,0xA7D2,0x0411}, - {0xA7A3,0xA7D3,0x0412}, - {0xA7A4,0xA7D4,0x0413}, - {0xA7A5,0xA7D5,0x0414}, - {0xA7A6,0xA7D6,0x0415}, - {0xA7A7,0xA7D7,0x0401}, - {0xA7A8,0xA7D8,0x0416}, - {0xA7A9,0xA7D9,0x0417}, - {0xA7AA,0xA7DA,0x0418}, - {0xA7AB,0xA7DB,0x0419}, - {0xA7AC,0xA7DC,0x041A}, - {0xA7AD,0xA7DD,0x041B}, - {0xA7AE,0xA7DE,0x041C}, - {0xA7AF,0xA7DF,0x041D}, - {0xA7B0,0xA7E0,0x041E}, /* A7B0 */ - {0xA7B1,0xA7E1,0x041F}, - {0xA7B2,0xA7E2,0x0420}, - {0xA7B3,0xA7E3,0x0421}, - {0xA7B4,0xA7E4,0x0422}, - {0xA7B5,0xA7E5,0x0423}, - {0xA7B6,0xA7E6,0x0424}, - {0xA7B7,0xA7E7,0x0425}, - {0xA7B8,0xA7E8,0x0426}, - {0xA7B9,0xA7E9,0x0427}, - {0xA7BA,0xA7EA,0x0428}, - {0xA7BB,0xA7EB,0x0429}, - {0xA7BC,0xA7EC,0x042A}, - {0xA7BD,0xA7ED,0x042B}, - {0xA7BE,0xA7EE,0x042C}, - {0xA7BF,0xA7EF,0x042D}, - {0xA7C0,0xA7F0,0x042E}, /* A7C0 */ - {0xA7C1,0xA7F1,0x042F}, - {0xA7C2,0xA7C2,0x003F}, - {0xA7C3,0xA7C3,0x003F}, - {0xA7C4,0xA7C4,0x003F}, - {0xA7C5,0xA7C5,0x003F}, - {0xA7C6,0xA7C6,0x003F}, - {0xA7C7,0xA7C7,0x003F}, - {0xA7C8,0xA7C8,0x003F}, - {0xA7C9,0xA7C9,0x003F}, - {0xA7CA,0xA7CA,0x003F}, - {0xA7CB,0xA7CB,0x003F}, - {0xA7CC,0xA7CC,0x003F}, - {0xA7CD,0xA7CD,0x003F}, - {0xA7CE,0xA7CE,0x003F}, - {0xA7CF,0xA7CF,0x003F}, - {0xA7D0,0xA7D0,0x003F}, /* A7D0 */ - {0xA7A1,0xA7D1,0x0430}, - {0xA7A2,0xA7D2,0x0431}, - {0xA7A3,0xA7D3,0x0432}, - {0xA7A4,0xA7D4,0x0433}, - {0xA7A5,0xA7D5,0x0434}, - {0xA7A6,0xA7D6,0x0435}, - {0xA7A7,0xA7D7,0x0451}, - {0xA7A8,0xA7D8,0x0436}, - {0xA7A9,0xA7D9,0x0437}, - {0xA7AA,0xA7DA,0x0438}, - {0xA7AB,0xA7DB,0x0439}, - {0xA7AC,0xA7DC,0x043A}, - {0xA7AD,0xA7DD,0x043B}, - {0xA7AE,0xA7DE,0x043C}, - {0xA7AF,0xA7DF,0x043D}, - {0xA7B0,0xA7E0,0x043E}, /* A7E0 */ - {0xA7B1,0xA7E1,0x043F}, - {0xA7B2,0xA7E2,0x0440}, - {0xA7B3,0xA7E3,0x0441}, - {0xA7B4,0xA7E4,0x0442}, - {0xA7B5,0xA7E5,0x0443}, - {0xA7B6,0xA7E6,0x0444}, - {0xA7B7,0xA7E7,0x0445}, - {0xA7B8,0xA7E8,0x0446}, - {0xA7B9,0xA7E9,0x0447}, - {0xA7BA,0xA7EA,0x0448}, - {0xA7BB,0xA7EB,0x0449}, - {0xA7BC,0xA7EC,0x044A}, - {0xA7BD,0xA7ED,0x044B}, - {0xA7BE,0xA7EE,0x044C}, - {0xA7BF,0xA7EF,0x044D}, - {0xA7C0,0xA7F0,0x044E}, /* A7F0 */ - {0xA7C1,0xA7F1,0x044F}, - {0xA7F2,0xA7F2,0x003F}, - {0xA7F3,0xA7F3,0x003F}, - {0xA7F4,0xA7F4,0x003F}, - {0xA7F5,0xA7F5,0x003F}, - {0xA7F6,0xA7F6,0x003F}, - {0xA7F7,0xA7F7,0x003F}, - {0xA7F8,0xA7F8,0x003F}, - {0xA7F9,0xA7F9,0x003F}, - {0xA7FA,0xA7FA,0x003F}, - {0xA7FB,0xA7FB,0x003F}, - {0xA7FC,0xA7FC,0x003F}, - {0xA7FD,0xA7FD,0x003F}, - {0xA7FE,0xA7FE,0x003F}, - {0xA7FF,0xA7FF,0xA7FF} -}; - - -static MY_UNICASE_INFO cA8[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xA8A0,0xA8A0,0xA8A0}, /* A8A0 */ - {0xA8A1,0xA8A1,0x0101}, - {0xA8A2,0xA8A2,0x00E1}, - {0xA8A3,0xA8A3,0x01CE}, - {0xA8A4,0xA8A4,0x00E0}, - {0xA8A5,0xA8A5,0x0113}, - {0xA8A6,0xA8A6,0x00E9}, - {0xA8A7,0xA8A7,0x011B}, - {0xA8A8,0xA8A8,0x00E8}, - {0xA8A9,0xA8A9,0x012B}, - {0xA8AA,0xA8AA,0x00ED}, - {0xA8AB,0xA8AB,0x01D0}, - {0xA8AC,0xA8AC,0x00EC}, - {0xA8AD,0xA8AD,0x014D}, - {0xA8AE,0xA8AE,0x00F3}, - {0xA8AF,0xA8AF,0x01D2}, - {0xA8B0,0xA8B0,0x00F2}, /* A8B0 */ - {0xA8B1,0xA8B1,0x016B}, - {0xA8B2,0xA8B2,0x00FA}, - {0xA8B3,0xA8B3,0x01D4}, - {0xA8B4,0xA8B4,0x00F9}, - {0xA8B5,0xA8B5,0x01D6}, - {0xA8B6,0xA8B6,0x01D8}, - {0xA8B7,0xA8B7,0x01DA}, - {0xA8B8,0xA8B8,0x01DC}, - {0xA8B9,0xA8B9,0x00FC}, - {0xA8BA,0xA8BA,0x00EA}, - {0xA8BB,0xA8BB,0x003F}, - {0xA8BC,0xA8BC,0x003F}, - {0xA8BD,0xA8BD,0x003F}, - {0xA8BE,0xA8BE,0x003F}, - {0xA8BF,0xA8BF,0x003F}, - {0xA8C0,0xA8C0,0x003F}, /* A8C0 */ - {0xA8C1,0xA8C1,0x003F}, - {0xA8C2,0xA8C2,0x003F}, - {0xA8C3,0xA8C3,0x003F}, - {0xA8C4,0xA8C4,0x003F}, - {0xA8C5,0xA8C5,0x3105}, - {0xA8C6,0xA8C6,0x3106}, - {0xA8C7,0xA8C7,0x3107}, - {0xA8C8,0xA8C8,0x3108}, - {0xA8C9,0xA8C9,0x3109}, - {0xA8CA,0xA8CA,0x310A}, - {0xA8CB,0xA8CB,0x310B}, - {0xA8CC,0xA8CC,0x310C}, - {0xA8CD,0xA8CD,0x310D}, - {0xA8CE,0xA8CE,0x310E}, - {0xA8CF,0xA8CF,0x310F}, - {0xA8D0,0xA8D0,0x3110}, /* A8D0 */ - {0xA8D1,0xA8D1,0x3111}, - {0xA8D2,0xA8D2,0x3112}, - {0xA8D3,0xA8D3,0x3113}, - {0xA8D4,0xA8D4,0x3114}, - {0xA8D5,0xA8D5,0x3115}, - {0xA8D6,0xA8D6,0x3116}, - {0xA8D7,0xA8D7,0x3117}, - {0xA8D8,0xA8D8,0x3118}, - {0xA8D9,0xA8D9,0x3119}, - {0xA8DA,0xA8DA,0x311A}, - {0xA8DB,0xA8DB,0x311B}, - {0xA8DC,0xA8DC,0x311C}, - {0xA8DD,0xA8DD,0x311D}, - {0xA8DE,0xA8DE,0x311E}, - {0xA8DF,0xA8DF,0x311F}, - {0xA8E0,0xA8E0,0x3120}, /* A8E0 */ - {0xA8E1,0xA8E1,0x3121}, - {0xA8E2,0xA8E2,0x3122}, - {0xA8E3,0xA8E3,0x3123}, - {0xA8E4,0xA8E4,0x3124}, - {0xA8E5,0xA8E5,0x3125}, - {0xA8E6,0xA8E6,0x3126}, - {0xA8E7,0xA8E7,0x3127}, - {0xA8E8,0xA8E8,0x3128}, - {0xA8E9,0xA8E9,0x3129}, - {0xA8EA,0xA8EA,0x003F}, - {0xA8EB,0xA8EB,0x003F}, - {0xA8EC,0xA8EC,0x003F}, - {0xA8ED,0xA8ED,0x003F}, - {0xA8EE,0xA8EE,0x003F}, - {0xA8EF,0xA8EF,0x003F}, - {0xA8F0,0xA8F0,0x003F}, /* A8F0 */ - {0xA8F1,0xA8F1,0x003F}, - {0xA8F2,0xA8F2,0x003F}, - {0xA8F3,0xA8F3,0x003F}, - {0xA8F4,0xA8F4,0x003F}, - {0xA8F5,0xA8F5,0x003F}, - {0xA8F6,0xA8F6,0x003F}, - {0xA8F7,0xA8F7,0x003F}, - {0xA8F8,0xA8F8,0x003F}, - {0xA8F9,0xA8F9,0x003F}, - {0xA8FA,0xA8FA,0x003F}, - {0xA8FB,0xA8FB,0x003F}, - {0xA8FC,0xA8FC,0x003F}, - {0xA8FD,0xA8FD,0x003F}, - {0xA8FE,0xA8FE,0x003F}, - {0xA8FF,0xA8FF,0xA8FF} -}; - - -static MY_UNICASE_INFO *my_caseinfo_gb2312[256]= -{ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 8 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, cA2, cA3, NULL, NULL, cA6, cA7, /* A */ - cA8, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* C */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* F */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - - -/* page 0 0x2121-0x2658 */ -static uint16 tab_gb2312_uni0[]={ -0x3000,0x3001,0x3002,0x30FB,0x02C9,0x02C7,0x00A8,0x3003, -0x3005,0x2015,0xFF5E,0x2016,0x2026,0x2018,0x2019,0x201C, -0x201D,0x3014,0x3015,0x3008,0x3009,0x300A,0x300B,0x300C, -0x300D,0x300E,0x300F,0x3016,0x3017,0x3010,0x3011,0x00B1, -0x00D7,0x00F7,0x2236,0x2227,0x2228,0x2211,0x220F,0x222A, -0x2229,0x2208,0x2237,0x221A,0x22A5,0x2225,0x2220,0x2312, -0x2299,0x222B,0x222E,0x2261,0x224C,0x2248,0x223D,0x221D, -0x2260,0x226E,0x226F,0x2264,0x2265,0x221E,0x2235,0x2234, -0x2642,0x2640,0x00B0,0x2032,0x2033,0x2103,0xFF04,0x00A4, -0xFFE0,0xFFE1,0x2030,0x00A7,0x2116,0x2606,0x2605,0x25CB, -0x25CF,0x25CE,0x25C7,0x25C6,0x25A1,0x25A0,0x25B3,0x25B2, -0x203B,0x2192,0x2190,0x2191,0x2193,0x3013, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x2488,0x2489,0x248A,0x248B,0x248C,0x248D,0x248E,0x248F, -0x2490,0x2491,0x2492,0x2493,0x2494,0x2495,0x2496,0x2497, -0x2498,0x2499,0x249A,0x249B,0x2474,0x2475,0x2476,0x2477, -0x2478,0x2479,0x247A,0x247B,0x247C,0x247D,0x247E,0x247F, -0x2480,0x2481,0x2482,0x2483,0x2484,0x2485,0x2486,0x2487, -0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467, -0x2468,0x2469, 0, 0,0x3220,0x3221,0x3222,0x3223, -0x3224,0x3225,0x3226,0x3227,0x3228,0x3229, 0, 0, -0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167, -0x2168,0x2169,0x216A,0x216B, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xFF01,0xFF02,0xFF03,0xFFE5,0xFF05,0xFF06,0xFF07,0xFF08, -0xFF09,0xFF0A,0xFF0B,0xFF0C,0xFF0D,0xFF0E,0xFF0F,0xFF10, -0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17,0xFF18, -0xFF19,0xFF1A,0xFF1B,0xFF1C,0xFF1D,0xFF1E,0xFF1F,0xFF20, -0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28, -0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30, -0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38, -0xFF39,0xFF3A,0xFF3B,0xFF3C,0xFF3D,0xFF3E,0xFF3F,0xFF40, -0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48, -0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50, -0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58, -0xFF59,0xFF5A,0xFF5B,0xFF5C,0xFF5D,0xFFE3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,0x3048, -0x3049,0x304A,0x304B,0x304C,0x304D,0x304E,0x304F,0x3050, -0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057,0x3058, -0x3059,0x305A,0x305B,0x305C,0x305D,0x305E,0x305F,0x3060, -0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067,0x3068, -0x3069,0x306A,0x306B,0x306C,0x306D,0x306E,0x306F,0x3070, -0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,0x3077,0x3078, -0x3079,0x307A,0x307B,0x307C,0x307D,0x307E,0x307F,0x3080, -0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,0x3087,0x3088, -0x3089,0x308A,0x308B,0x308C,0x308D,0x308E,0x308F,0x3090, -0x3091,0x3092,0x3093, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7,0x30A8, -0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF,0x30B0, -0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7,0x30B8, -0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF,0x30C0, -0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7,0x30C8, -0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF,0x30D0, -0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7,0x30D8, -0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF,0x30E0, -0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7,0x30E8, -0x30E9,0x30EA,0x30EB,0x30EC,0x30ED,0x30EE,0x30EF,0x30F0, -0x30F1,0x30F2,0x30F3,0x30F4,0x30F5,0x30F6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,0x0398, -0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,0x03A0, -0x03A1,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,0x03A9, - 0, 0, 0, 0, 0, 0, 0, 0, -0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,0x03B8, -0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,0x03C0, -0x03C1,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,0x03C9 -}; - -/* page 1 0x2721-0x296F */ -static uint16 tab_gb2312_uni1[]={ -0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401,0x0416, -0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E, -0x041F,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426, -0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E, -0x042F, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0451,0x0436, -0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E, -0x043F,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446, -0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E, -0x044F, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x0101,0x00E1,0x01CE,0x00E0,0x0113,0x00E9,0x011B,0x00E8, -0x012B,0x00ED,0x01D0,0x00EC,0x014D,0x00F3,0x01D2,0x00F2, -0x016B,0x00FA,0x01D4,0x00F9,0x01D6,0x01D8,0x01DA,0x01DC, -0x00FC,0x00EA, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x3105,0x3106,0x3107,0x3108, -0x3109,0x310A,0x310B,0x310C,0x310D,0x310E,0x310F,0x3110, -0x3111,0x3112,0x3113,0x3114,0x3115,0x3116,0x3117,0x3118, -0x3119,0x311A,0x311B,0x311C,0x311D,0x311E,0x311F,0x3120, -0x3121,0x3122,0x3123,0x3124,0x3125,0x3126,0x3127,0x3128, -0x3129, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x2500,0x2501,0x2502,0x2503,0x2504, -0x2505,0x2506,0x2507,0x2508,0x2509,0x250A,0x250B,0x250C, -0x250D,0x250E,0x250F,0x2510,0x2511,0x2512,0x2513,0x2514, -0x2515,0x2516,0x2517,0x2518,0x2519,0x251A,0x251B,0x251C, -0x251D,0x251E,0x251F,0x2520,0x2521,0x2522,0x2523,0x2524, -0x2525,0x2526,0x2527,0x2528,0x2529,0x252A,0x252B,0x252C, -0x252D,0x252E,0x252F,0x2530,0x2531,0x2532,0x2533,0x2534, -0x2535,0x2536,0x2537,0x2538,0x2539,0x253A,0x253B,0x253C, -0x253D,0x253E,0x253F,0x2540,0x2541,0x2542,0x2543,0x2544, -0x2545,0x2546,0x2547,0x2548,0x2549,0x254A,0x254B}; - -/* page 2 0x3021-0x777E */ -static uint16 tab_gb2312_uni2[]={ -0x554A,0x963F,0x57C3,0x6328,0x54CE,0x5509,0x54C0,0x7691, -0x764C,0x853C,0x77EE,0x827E,0x788D,0x7231,0x9698,0x978D, -0x6C28,0x5B89,0x4FFA,0x6309,0x6697,0x5CB8,0x80FA,0x6848, -0x80AE,0x6602,0x76CE,0x51F9,0x6556,0x71AC,0x7FF1,0x8884, -0x50B2,0x5965,0x61CA,0x6FB3,0x82AD,0x634C,0x6252,0x53ED, -0x5427,0x7B06,0x516B,0x75A4,0x5DF4,0x62D4,0x8DCB,0x9776, -0x628A,0x8019,0x575D,0x9738,0x7F62,0x7238,0x767D,0x67CF, -0x767E,0x6446,0x4F70,0x8D25,0x62DC,0x7A17,0x6591,0x73ED, -0x642C,0x6273,0x822C,0x9881,0x677F,0x7248,0x626E,0x62CC, -0x4F34,0x74E3,0x534A,0x529E,0x7ECA,0x90A6,0x5E2E,0x6886, -0x699C,0x8180,0x7ED1,0x68D2,0x78C5,0x868C,0x9551,0x508D, -0x8C24,0x82DE,0x80DE,0x5305,0x8912,0x5265, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8584,0x96F9,0x4FDD,0x5821,0x9971,0x5B9D,0x62B1,0x62A5, -0x66B4,0x8C79,0x9C8D,0x7206,0x676F,0x7891,0x60B2,0x5351, -0x5317,0x8F88,0x80CC,0x8D1D,0x94A1,0x500D,0x72C8,0x5907, -0x60EB,0x7119,0x88AB,0x5954,0x82EF,0x672C,0x7B28,0x5D29, -0x7EF7,0x752D,0x6CF5,0x8E66,0x8FF8,0x903C,0x9F3B,0x6BD4, -0x9119,0x7B14,0x5F7C,0x78A7,0x84D6,0x853D,0x6BD5,0x6BD9, -0x6BD6,0x5E01,0x5E87,0x75F9,0x95ED,0x655D,0x5F0A,0x5FC5, -0x8F9F,0x58C1,0x81C2,0x907F,0x965B,0x97AD,0x8FB9,0x7F16, -0x8D2C,0x6241,0x4FBF,0x53D8,0x535E,0x8FA8,0x8FA9,0x8FAB, -0x904D,0x6807,0x5F6A,0x8198,0x8868,0x9CD6,0x618B,0x522B, -0x762A,0x5F6C,0x658C,0x6FD2,0x6EE8,0x5BBE,0x6448,0x5175, -0x51B0,0x67C4,0x4E19,0x79C9,0x997C,0x70B3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x75C5,0x5E76,0x73BB,0x83E0,0x64AD,0x62E8,0x94B5,0x6CE2, -0x535A,0x52C3,0x640F,0x94C2,0x7B94,0x4F2F,0x5E1B,0x8236, -0x8116,0x818A,0x6E24,0x6CCA,0x9A73,0x6355,0x535C,0x54FA, -0x8865,0x57E0,0x4E0D,0x5E03,0x6B65,0x7C3F,0x90E8,0x6016, -0x64E6,0x731C,0x88C1,0x6750,0x624D,0x8D22,0x776C,0x8E29, -0x91C7,0x5F69,0x83DC,0x8521,0x9910,0x53C2,0x8695,0x6B8B, -0x60ED,0x60E8,0x707F,0x82CD,0x8231,0x4ED3,0x6CA7,0x85CF, -0x64CD,0x7CD9,0x69FD,0x66F9,0x8349,0x5395,0x7B56,0x4FA7, -0x518C,0x6D4B,0x5C42,0x8E6D,0x63D2,0x53C9,0x832C,0x8336, -0x67E5,0x78B4,0x643D,0x5BDF,0x5C94,0x5DEE,0x8BE7,0x62C6, -0x67F4,0x8C7A,0x6400,0x63BA,0x8749,0x998B,0x8C17,0x7F20, -0x94F2,0x4EA7,0x9610,0x98A4,0x660C,0x7316, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x573A,0x5C1D,0x5E38,0x957F,0x507F,0x80A0,0x5382,0x655E, -0x7545,0x5531,0x5021,0x8D85,0x6284,0x949E,0x671D,0x5632, -0x6F6E,0x5DE2,0x5435,0x7092,0x8F66,0x626F,0x64A4,0x63A3, -0x5F7B,0x6F88,0x90F4,0x81E3,0x8FB0,0x5C18,0x6668,0x5FF1, -0x6C89,0x9648,0x8D81,0x886C,0x6491,0x79F0,0x57CE,0x6A59, -0x6210,0x5448,0x4E58,0x7A0B,0x60E9,0x6F84,0x8BDA,0x627F, -0x901E,0x9A8B,0x79E4,0x5403,0x75F4,0x6301,0x5319,0x6C60, -0x8FDF,0x5F1B,0x9A70,0x803B,0x9F7F,0x4F88,0x5C3A,0x8D64, -0x7FC5,0x65A5,0x70BD,0x5145,0x51B2,0x866B,0x5D07,0x5BA0, -0x62BD,0x916C,0x7574,0x8E0C,0x7A20,0x6101,0x7B79,0x4EC7, -0x7EF8,0x7785,0x4E11,0x81ED,0x521D,0x51FA,0x6A71,0x53A8, -0x8E87,0x9504,0x96CF,0x6EC1,0x9664,0x695A, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7840,0x50A8,0x77D7,0x6410,0x89E6,0x5904,0x63E3,0x5DDD, -0x7A7F,0x693D,0x4F20,0x8239,0x5598,0x4E32,0x75AE,0x7A97, -0x5E62,0x5E8A,0x95EF,0x521B,0x5439,0x708A,0x6376,0x9524, -0x5782,0x6625,0x693F,0x9187,0x5507,0x6DF3,0x7EAF,0x8822, -0x6233,0x7EF0,0x75B5,0x8328,0x78C1,0x96CC,0x8F9E,0x6148, -0x74F7,0x8BCD,0x6B64,0x523A,0x8D50,0x6B21,0x806A,0x8471, -0x56F1,0x5306,0x4ECE,0x4E1B,0x51D1,0x7C97,0x918B,0x7C07, -0x4FC3,0x8E7F,0x7BE1,0x7A9C,0x6467,0x5D14,0x50AC,0x8106, -0x7601,0x7CB9,0x6DEC,0x7FE0,0x6751,0x5B58,0x5BF8,0x78CB, -0x64AE,0x6413,0x63AA,0x632B,0x9519,0x642D,0x8FBE,0x7B54, -0x7629,0x6253,0x5927,0x5446,0x6B79,0x50A3,0x6234,0x5E26, -0x6B86,0x4EE3,0x8D37,0x888B,0x5F85,0x902E, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6020,0x803D,0x62C5,0x4E39,0x5355,0x90F8,0x63B8,0x80C6, -0x65E6,0x6C2E,0x4F46,0x60EE,0x6DE1,0x8BDE,0x5F39,0x86CB, -0x5F53,0x6321,0x515A,0x8361,0x6863,0x5200,0x6363,0x8E48, -0x5012,0x5C9B,0x7977,0x5BFC,0x5230,0x7A3B,0x60BC,0x9053, -0x76D7,0x5FB7,0x5F97,0x7684,0x8E6C,0x706F,0x767B,0x7B49, -0x77AA,0x51F3,0x9093,0x5824,0x4F4E,0x6EF4,0x8FEA,0x654C, -0x7B1B,0x72C4,0x6DA4,0x7FDF,0x5AE1,0x62B5,0x5E95,0x5730, -0x8482,0x7B2C,0x5E1D,0x5F1F,0x9012,0x7F14,0x98A0,0x6382, -0x6EC7,0x7898,0x70B9,0x5178,0x975B,0x57AB,0x7535,0x4F43, -0x7538,0x5E97,0x60E6,0x5960,0x6DC0,0x6BBF,0x7889,0x53FC, -0x96D5,0x51CB,0x5201,0x6389,0x540A,0x9493,0x8C03,0x8DCC, -0x7239,0x789F,0x8776,0x8FED,0x8C0D,0x53E0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4E01,0x76EF,0x53EE,0x9489,0x9876,0x9F0E,0x952D,0x5B9A, -0x8BA2,0x4E22,0x4E1C,0x51AC,0x8463,0x61C2,0x52A8,0x680B, -0x4F97,0x606B,0x51BB,0x6D1E,0x515C,0x6296,0x6597,0x9661, -0x8C46,0x9017,0x75D8,0x90FD,0x7763,0x6BD2,0x728A,0x72EC, -0x8BFB,0x5835,0x7779,0x8D4C,0x675C,0x9540,0x809A,0x5EA6, -0x6E21,0x5992,0x7AEF,0x77ED,0x953B,0x6BB5,0x65AD,0x7F0E, -0x5806,0x5151,0x961F,0x5BF9,0x58A9,0x5428,0x8E72,0x6566, -0x987F,0x56E4,0x949D,0x76FE,0x9041,0x6387,0x54C6,0x591A, -0x593A,0x579B,0x8EB2,0x6735,0x8DFA,0x8235,0x5241,0x60F0, -0x5815,0x86FE,0x5CE8,0x9E45,0x4FC4,0x989D,0x8BB9,0x5A25, -0x6076,0x5384,0x627C,0x904F,0x9102,0x997F,0x6069,0x800C, -0x513F,0x8033,0x5C14,0x9975,0x6D31,0x4E8C, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8D30,0x53D1,0x7F5A,0x7B4F,0x4F10,0x4E4F,0x9600,0x6CD5, -0x73D0,0x85E9,0x5E06,0x756A,0x7FFB,0x6A0A,0x77FE,0x9492, -0x7E41,0x51E1,0x70E6,0x53CD,0x8FD4,0x8303,0x8D29,0x72AF, -0x996D,0x6CDB,0x574A,0x82B3,0x65B9,0x80AA,0x623F,0x9632, -0x59A8,0x4EFF,0x8BBF,0x7EBA,0x653E,0x83F2,0x975E,0x5561, -0x98DE,0x80A5,0x532A,0x8BFD,0x5420,0x80BA,0x5E9F,0x6CB8, -0x8D39,0x82AC,0x915A,0x5429,0x6C1B,0x5206,0x7EB7,0x575F, -0x711A,0x6C7E,0x7C89,0x594B,0x4EFD,0x5FFF,0x6124,0x7CAA, -0x4E30,0x5C01,0x67AB,0x8702,0x5CF0,0x950B,0x98CE,0x75AF, -0x70FD,0x9022,0x51AF,0x7F1D,0x8BBD,0x5949,0x51E4,0x4F5B, -0x5426,0x592B,0x6577,0x80A4,0x5B75,0x6276,0x62C2,0x8F90, -0x5E45,0x6C1F,0x7B26,0x4F0F,0x4FD8,0x670D, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6D6E,0x6DAA,0x798F,0x88B1,0x5F17,0x752B,0x629A,0x8F85, -0x4FEF,0x91DC,0x65A7,0x812F,0x8151,0x5E9C,0x8150,0x8D74, -0x526F,0x8986,0x8D4B,0x590D,0x5085,0x4ED8,0x961C,0x7236, -0x8179,0x8D1F,0x5BCC,0x8BA3,0x9644,0x5987,0x7F1A,0x5490, -0x5676,0x560E,0x8BE5,0x6539,0x6982,0x9499,0x76D6,0x6E89, -0x5E72,0x7518,0x6746,0x67D1,0x7AFF,0x809D,0x8D76,0x611F, -0x79C6,0x6562,0x8D63,0x5188,0x521A,0x94A2,0x7F38,0x809B, -0x7EB2,0x5C97,0x6E2F,0x6760,0x7BD9,0x768B,0x9AD8,0x818F, -0x7F94,0x7CD5,0x641E,0x9550,0x7A3F,0x544A,0x54E5,0x6B4C, -0x6401,0x6208,0x9E3D,0x80F3,0x7599,0x5272,0x9769,0x845B, -0x683C,0x86E4,0x9601,0x9694,0x94EC,0x4E2A,0x5404,0x7ED9, -0x6839,0x8DDF,0x8015,0x66F4,0x5E9A,0x7FB9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x57C2,0x803F,0x6897,0x5DE5,0x653B,0x529F,0x606D,0x9F9A, -0x4F9B,0x8EAC,0x516C,0x5BAB,0x5F13,0x5DE9,0x6C5E,0x62F1, -0x8D21,0x5171,0x94A9,0x52FE,0x6C9F,0x82DF,0x72D7,0x57A2, -0x6784,0x8D2D,0x591F,0x8F9C,0x83C7,0x5495,0x7B8D,0x4F30, -0x6CBD,0x5B64,0x59D1,0x9F13,0x53E4,0x86CA,0x9AA8,0x8C37, -0x80A1,0x6545,0x987E,0x56FA,0x96C7,0x522E,0x74DC,0x5250, -0x5BE1,0x6302,0x8902,0x4E56,0x62D0,0x602A,0x68FA,0x5173, -0x5B98,0x51A0,0x89C2,0x7BA1,0x9986,0x7F50,0x60EF,0x704C, -0x8D2F,0x5149,0x5E7F,0x901B,0x7470,0x89C4,0x572D,0x7845, -0x5F52,0x9F9F,0x95FA,0x8F68,0x9B3C,0x8BE1,0x7678,0x6842, -0x67DC,0x8DEA,0x8D35,0x523D,0x8F8A,0x6EDA,0x68CD,0x9505, -0x90ED,0x56FD,0x679C,0x88F9,0x8FC7,0x54C8, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9AB8,0x5B69,0x6D77,0x6C26,0x4EA5,0x5BB3,0x9A87,0x9163, -0x61A8,0x90AF,0x97E9,0x542B,0x6DB5,0x5BD2,0x51FD,0x558A, -0x7F55,0x7FF0,0x64BC,0x634D,0x65F1,0x61BE,0x608D,0x710A, -0x6C57,0x6C49,0x592F,0x676D,0x822A,0x58D5,0x568E,0x8C6A, -0x6BEB,0x90DD,0x597D,0x8017,0x53F7,0x6D69,0x5475,0x559D, -0x8377,0x83CF,0x6838,0x79BE,0x548C,0x4F55,0x5408,0x76D2, -0x8C89,0x9602,0x6CB3,0x6DB8,0x8D6B,0x8910,0x9E64,0x8D3A, -0x563F,0x9ED1,0x75D5,0x5F88,0x72E0,0x6068,0x54FC,0x4EA8, -0x6A2A,0x8861,0x6052,0x8F70,0x54C4,0x70D8,0x8679,0x9E3F, -0x6D2A,0x5B8F,0x5F18,0x7EA2,0x5589,0x4FAF,0x7334,0x543C, -0x539A,0x5019,0x540E,0x547C,0x4E4E,0x5FFD,0x745A,0x58F6, -0x846B,0x80E1,0x8774,0x72D0,0x7CCA,0x6E56, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5F27,0x864E,0x552C,0x62A4,0x4E92,0x6CAA,0x6237,0x82B1, -0x54D7,0x534E,0x733E,0x6ED1,0x753B,0x5212,0x5316,0x8BDD, -0x69D0,0x5F8A,0x6000,0x6DEE,0x574F,0x6B22,0x73AF,0x6853, -0x8FD8,0x7F13,0x6362,0x60A3,0x5524,0x75EA,0x8C62,0x7115, -0x6DA3,0x5BA6,0x5E7B,0x8352,0x614C,0x9EC4,0x78FA,0x8757, -0x7C27,0x7687,0x51F0,0x60F6,0x714C,0x6643,0x5E4C,0x604D, -0x8C0E,0x7070,0x6325,0x8F89,0x5FBD,0x6062,0x86D4,0x56DE, -0x6BC1,0x6094,0x6167,0x5349,0x60E0,0x6666,0x8D3F,0x79FD, -0x4F1A,0x70E9,0x6C47,0x8BB3,0x8BF2,0x7ED8,0x8364,0x660F, -0x5A5A,0x9B42,0x6D51,0x6DF7,0x8C41,0x6D3B,0x4F19,0x706B, -0x83B7,0x6216,0x60D1,0x970D,0x8D27,0x7978,0x51FB,0x573E, -0x57FA,0x673A,0x7578,0x7A3D,0x79EF,0x7B95, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x808C,0x9965,0x8FF9,0x6FC0,0x8BA5,0x9E21,0x59EC,0x7EE9, -0x7F09,0x5409,0x6781,0x68D8,0x8F91,0x7C4D,0x96C6,0x53CA, -0x6025,0x75BE,0x6C72,0x5373,0x5AC9,0x7EA7,0x6324,0x51E0, -0x810A,0x5DF1,0x84DF,0x6280,0x5180,0x5B63,0x4F0E,0x796D, -0x5242,0x60B8,0x6D4E,0x5BC4,0x5BC2,0x8BA1,0x8BB0,0x65E2, -0x5FCC,0x9645,0x5993,0x7EE7,0x7EAA,0x5609,0x67B7,0x5939, -0x4F73,0x5BB6,0x52A0,0x835A,0x988A,0x8D3E,0x7532,0x94BE, -0x5047,0x7A3C,0x4EF7,0x67B6,0x9A7E,0x5AC1,0x6B7C,0x76D1, -0x575A,0x5C16,0x7B3A,0x95F4,0x714E,0x517C,0x80A9,0x8270, -0x5978,0x7F04,0x8327,0x68C0,0x67EC,0x78B1,0x7877,0x62E3, -0x6361,0x7B80,0x4FED,0x526A,0x51CF,0x8350,0x69DB,0x9274, -0x8DF5,0x8D31,0x89C1,0x952E,0x7BAD,0x4EF6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5065,0x8230,0x5251,0x996F,0x6E10,0x6E85,0x6DA7,0x5EFA, -0x50F5,0x59DC,0x5C06,0x6D46,0x6C5F,0x7586,0x848B,0x6868, -0x5956,0x8BB2,0x5320,0x9171,0x964D,0x8549,0x6912,0x7901, -0x7126,0x80F6,0x4EA4,0x90CA,0x6D47,0x9A84,0x5A07,0x56BC, -0x6405,0x94F0,0x77EB,0x4FA5,0x811A,0x72E1,0x89D2,0x997A, -0x7F34,0x7EDE,0x527F,0x6559,0x9175,0x8F7F,0x8F83,0x53EB, -0x7A96,0x63ED,0x63A5,0x7686,0x79F8,0x8857,0x9636,0x622A, -0x52AB,0x8282,0x6854,0x6770,0x6377,0x776B,0x7AED,0x6D01, -0x7ED3,0x89E3,0x59D0,0x6212,0x85C9,0x82A5,0x754C,0x501F, -0x4ECB,0x75A5,0x8BEB,0x5C4A,0x5DFE,0x7B4B,0x65A4,0x91D1, -0x4ECA,0x6D25,0x895F,0x7D27,0x9526,0x4EC5,0x8C28,0x8FDB, -0x9773,0x664B,0x7981,0x8FD1,0x70EC,0x6D78, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5C3D,0x52B2,0x8346,0x5162,0x830E,0x775B,0x6676,0x9CB8, -0x4EAC,0x60CA,0x7CBE,0x7CB3,0x7ECF,0x4E95,0x8B66,0x666F, -0x9888,0x9759,0x5883,0x656C,0x955C,0x5F84,0x75C9,0x9756, -0x7ADF,0x7ADE,0x51C0,0x70AF,0x7A98,0x63EA,0x7A76,0x7EA0, -0x7396,0x97ED,0x4E45,0x7078,0x4E5D,0x9152,0x53A9,0x6551, -0x65E7,0x81FC,0x8205,0x548E,0x5C31,0x759A,0x97A0,0x62D8, -0x72D9,0x75BD,0x5C45,0x9A79,0x83CA,0x5C40,0x5480,0x77E9, -0x4E3E,0x6CAE,0x805A,0x62D2,0x636E,0x5DE8,0x5177,0x8DDD, -0x8E1E,0x952F,0x4FF1,0x53E5,0x60E7,0x70AC,0x5267,0x6350, -0x9E43,0x5A1F,0x5026,0x7737,0x5377,0x7EE2,0x6485,0x652B, -0x6289,0x6398,0x5014,0x7235,0x89C9,0x51B3,0x8BC0,0x7EDD, -0x5747,0x83CC,0x94A7,0x519B,0x541B,0x5CFB, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4FCA,0x7AE3,0x6D5A,0x90E1,0x9A8F,0x5580,0x5496,0x5361, -0x54AF,0x5F00,0x63E9,0x6977,0x51EF,0x6168,0x520A,0x582A, -0x52D8,0x574E,0x780D,0x770B,0x5EB7,0x6177,0x7CE0,0x625B, -0x6297,0x4EA2,0x7095,0x8003,0x62F7,0x70E4,0x9760,0x5777, -0x82DB,0x67EF,0x68F5,0x78D5,0x9897,0x79D1,0x58F3,0x54B3, -0x53EF,0x6E34,0x514B,0x523B,0x5BA2,0x8BFE,0x80AF,0x5543, -0x57A6,0x6073,0x5751,0x542D,0x7A7A,0x6050,0x5B54,0x63A7, -0x62A0,0x53E3,0x6263,0x5BC7,0x67AF,0x54ED,0x7A9F,0x82E6, -0x9177,0x5E93,0x88E4,0x5938,0x57AE,0x630E,0x8DE8,0x80EF, -0x5757,0x7B77,0x4FA9,0x5FEB,0x5BBD,0x6B3E,0x5321,0x7B50, -0x72C2,0x6846,0x77FF,0x7736,0x65F7,0x51B5,0x4E8F,0x76D4, -0x5CBF,0x7AA5,0x8475,0x594E,0x9B41,0x5080, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9988,0x6127,0x6E83,0x5764,0x6606,0x6346,0x56F0,0x62EC, -0x6269,0x5ED3,0x9614,0x5783,0x62C9,0x5587,0x8721,0x814A, -0x8FA3,0x5566,0x83B1,0x6765,0x8D56,0x84DD,0x5A6A,0x680F, -0x62E6,0x7BEE,0x9611,0x5170,0x6F9C,0x8C30,0x63FD,0x89C8, -0x61D2,0x7F06,0x70C2,0x6EE5,0x7405,0x6994,0x72FC,0x5ECA, -0x90CE,0x6717,0x6D6A,0x635E,0x52B3,0x7262,0x8001,0x4F6C, -0x59E5,0x916A,0x70D9,0x6D9D,0x52D2,0x4E50,0x96F7,0x956D, -0x857E,0x78CA,0x7D2F,0x5121,0x5792,0x64C2,0x808B,0x7C7B, -0x6CEA,0x68F1,0x695E,0x51B7,0x5398,0x68A8,0x7281,0x9ECE, -0x7BF1,0x72F8,0x79BB,0x6F13,0x7406,0x674E,0x91CC,0x9CA4, -0x793C,0x8389,0x8354,0x540F,0x6817,0x4E3D,0x5389,0x52B1, -0x783E,0x5386,0x5229,0x5088,0x4F8B,0x4FD0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x75E2,0x7ACB,0x7C92,0x6CA5,0x96B6,0x529B,0x7483,0x54E9, -0x4FE9,0x8054,0x83B2,0x8FDE,0x9570,0x5EC9,0x601C,0x6D9F, -0x5E18,0x655B,0x8138,0x94FE,0x604B,0x70BC,0x7EC3,0x7CAE, -0x51C9,0x6881,0x7CB1,0x826F,0x4E24,0x8F86,0x91CF,0x667E, -0x4EAE,0x8C05,0x64A9,0x804A,0x50DA,0x7597,0x71CE,0x5BE5, -0x8FBD,0x6F66,0x4E86,0x6482,0x9563,0x5ED6,0x6599,0x5217, -0x88C2,0x70C8,0x52A3,0x730E,0x7433,0x6797,0x78F7,0x9716, -0x4E34,0x90BB,0x9CDE,0x6DCB,0x51DB,0x8D41,0x541D,0x62CE, -0x73B2,0x83F1,0x96F6,0x9F84,0x94C3,0x4F36,0x7F9A,0x51CC, -0x7075,0x9675,0x5CAD,0x9886,0x53E6,0x4EE4,0x6E9C,0x7409, -0x69B4,0x786B,0x998F,0x7559,0x5218,0x7624,0x6D41,0x67F3, -0x516D,0x9F99,0x804B,0x5499,0x7B3C,0x7ABF, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9686,0x5784,0x62E2,0x9647,0x697C,0x5A04,0x6402,0x7BD3, -0x6F0F,0x964B,0x82A6,0x5362,0x9885,0x5E90,0x7089,0x63B3, -0x5364,0x864F,0x9C81,0x9E93,0x788C,0x9732,0x8DEF,0x8D42, -0x9E7F,0x6F5E,0x7984,0x5F55,0x9646,0x622E,0x9A74,0x5415, -0x94DD,0x4FA3,0x65C5,0x5C65,0x5C61,0x7F15,0x8651,0x6C2F, -0x5F8B,0x7387,0x6EE4,0x7EFF,0x5CE6,0x631B,0x5B6A,0x6EE6, -0x5375,0x4E71,0x63A0,0x7565,0x62A1,0x8F6E,0x4F26,0x4ED1, -0x6CA6,0x7EB6,0x8BBA,0x841D,0x87BA,0x7F57,0x903B,0x9523, -0x7BA9,0x9AA1,0x88F8,0x843D,0x6D1B,0x9A86,0x7EDC,0x5988, -0x9EBB,0x739B,0x7801,0x8682,0x9A6C,0x9A82,0x561B,0x5417, -0x57CB,0x4E70,0x9EA6,0x5356,0x8FC8,0x8109,0x7792,0x9992, -0x86EE,0x6EE1,0x8513,0x66FC,0x6162,0x6F2B, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8C29,0x8292,0x832B,0x76F2,0x6C13,0x5FD9,0x83BD,0x732B, -0x8305,0x951A,0x6BDB,0x77DB,0x94C6,0x536F,0x8302,0x5192, -0x5E3D,0x8C8C,0x8D38,0x4E48,0x73AB,0x679A,0x6885,0x9176, -0x9709,0x7164,0x6CA1,0x7709,0x5A92,0x9541,0x6BCF,0x7F8E, -0x6627,0x5BD0,0x59B9,0x5A9A,0x95E8,0x95F7,0x4EEC,0x840C, -0x8499,0x6AAC,0x76DF,0x9530,0x731B,0x68A6,0x5B5F,0x772F, -0x919A,0x9761,0x7CDC,0x8FF7,0x8C1C,0x5F25,0x7C73,0x79D8, -0x89C5,0x6CCC,0x871C,0x5BC6,0x5E42,0x68C9,0x7720,0x7EF5, -0x5195,0x514D,0x52C9,0x5A29,0x7F05,0x9762,0x82D7,0x63CF, -0x7784,0x85D0,0x79D2,0x6E3A,0x5E99,0x5999,0x8511,0x706D, -0x6C11,0x62BF,0x76BF,0x654F,0x60AF,0x95FD,0x660E,0x879F, -0x9E23,0x94ED,0x540D,0x547D,0x8C2C,0x6478, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6479,0x8611,0x6A21,0x819C,0x78E8,0x6469,0x9B54,0x62B9, -0x672B,0x83AB,0x58A8,0x9ED8,0x6CAB,0x6F20,0x5BDE,0x964C, -0x8C0B,0x725F,0x67D0,0x62C7,0x7261,0x4EA9,0x59C6,0x6BCD, -0x5893,0x66AE,0x5E55,0x52DF,0x6155,0x6728,0x76EE,0x7766, -0x7267,0x7A46,0x62FF,0x54EA,0x5450,0x94A0,0x90A3,0x5A1C, -0x7EB3,0x6C16,0x4E43,0x5976,0x8010,0x5948,0x5357,0x7537, -0x96BE,0x56CA,0x6320,0x8111,0x607C,0x95F9,0x6DD6,0x5462, -0x9981,0x5185,0x5AE9,0x80FD,0x59AE,0x9713,0x502A,0x6CE5, -0x5C3C,0x62DF,0x4F60,0x533F,0x817B,0x9006,0x6EBA,0x852B, -0x62C8,0x5E74,0x78BE,0x64B5,0x637B,0x5FF5,0x5A18,0x917F, -0x9E1F,0x5C3F,0x634F,0x8042,0x5B7D,0x556E,0x954A,0x954D, -0x6D85,0x60A8,0x67E0,0x72DE,0x51DD,0x5B81, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x62E7,0x6CDE,0x725B,0x626D,0x94AE,0x7EBD,0x8113,0x6D53, -0x519C,0x5F04,0x5974,0x52AA,0x6012,0x5973,0x6696,0x8650, -0x759F,0x632A,0x61E6,0x7CEF,0x8BFA,0x54E6,0x6B27,0x9E25, -0x6BB4,0x85D5,0x5455,0x5076,0x6CA4,0x556A,0x8DB4,0x722C, -0x5E15,0x6015,0x7436,0x62CD,0x6392,0x724C,0x5F98,0x6E43, -0x6D3E,0x6500,0x6F58,0x76D8,0x78D0,0x76FC,0x7554,0x5224, -0x53DB,0x4E53,0x5E9E,0x65C1,0x802A,0x80D6,0x629B,0x5486, -0x5228,0x70AE,0x888D,0x8DD1,0x6CE1,0x5478,0x80DA,0x57F9, -0x88F4,0x8D54,0x966A,0x914D,0x4F69,0x6C9B,0x55B7,0x76C6, -0x7830,0x62A8,0x70F9,0x6F8E,0x5F6D,0x84EC,0x68DA,0x787C, -0x7BF7,0x81A8,0x670B,0x9E4F,0x6367,0x78B0,0x576F,0x7812, -0x9739,0x6279,0x62AB,0x5288,0x7435,0x6BD7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5564,0x813E,0x75B2,0x76AE,0x5339,0x75DE,0x50FB,0x5C41, -0x8B6C,0x7BC7,0x504F,0x7247,0x9A97,0x98D8,0x6F02,0x74E2, -0x7968,0x6487,0x77A5,0x62FC,0x9891,0x8D2B,0x54C1,0x8058, -0x4E52,0x576A,0x82F9,0x840D,0x5E73,0x51ED,0x74F6,0x8BC4, -0x5C4F,0x5761,0x6CFC,0x9887,0x5A46,0x7834,0x9B44,0x8FEB, -0x7C95,0x5256,0x6251,0x94FA,0x4EC6,0x8386,0x8461,0x83E9, -0x84B2,0x57D4,0x6734,0x5703,0x666E,0x6D66,0x8C31,0x66DD, -0x7011,0x671F,0x6B3A,0x6816,0x621A,0x59BB,0x4E03,0x51C4, -0x6F06,0x67D2,0x6C8F,0x5176,0x68CB,0x5947,0x6B67,0x7566, -0x5D0E,0x8110,0x9F50,0x65D7,0x7948,0x7941,0x9A91,0x8D77, -0x5C82,0x4E5E,0x4F01,0x542F,0x5951,0x780C,0x5668,0x6C14, -0x8FC4,0x5F03,0x6C7D,0x6CE3,0x8BAB,0x6390, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6070,0x6D3D,0x7275,0x6266,0x948E,0x94C5,0x5343,0x8FC1, -0x7B7E,0x4EDF,0x8C26,0x4E7E,0x9ED4,0x94B1,0x94B3,0x524D, -0x6F5C,0x9063,0x6D45,0x8C34,0x5811,0x5D4C,0x6B20,0x6B49, -0x67AA,0x545B,0x8154,0x7F8C,0x5899,0x8537,0x5F3A,0x62A2, -0x6A47,0x9539,0x6572,0x6084,0x6865,0x77A7,0x4E54,0x4FA8, -0x5DE7,0x9798,0x64AC,0x7FD8,0x5CED,0x4FCF,0x7A8D,0x5207, -0x8304,0x4E14,0x602F,0x7A83,0x94A6,0x4FB5,0x4EB2,0x79E6, -0x7434,0x52E4,0x82B9,0x64D2,0x79BD,0x5BDD,0x6C81,0x9752, -0x8F7B,0x6C22,0x503E,0x537F,0x6E05,0x64CE,0x6674,0x6C30, -0x60C5,0x9877,0x8BF7,0x5E86,0x743C,0x7A77,0x79CB,0x4E18, -0x90B1,0x7403,0x6C42,0x56DA,0x914B,0x6CC5,0x8D8B,0x533A, -0x86C6,0x66F2,0x8EAF,0x5C48,0x9A71,0x6E20, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x53D6,0x5A36,0x9F8B,0x8DA3,0x53BB,0x5708,0x98A7,0x6743, -0x919B,0x6CC9,0x5168,0x75CA,0x62F3,0x72AC,0x5238,0x529D, -0x7F3A,0x7094,0x7638,0x5374,0x9E4A,0x69B7,0x786E,0x96C0, -0x88D9,0x7FA4,0x7136,0x71C3,0x5189,0x67D3,0x74E4,0x58E4, -0x6518,0x56B7,0x8BA9,0x9976,0x6270,0x7ED5,0x60F9,0x70ED, -0x58EC,0x4EC1,0x4EBA,0x5FCD,0x97E7,0x4EFB,0x8BA4,0x5203, -0x598A,0x7EAB,0x6254,0x4ECD,0x65E5,0x620E,0x8338,0x84C9, -0x8363,0x878D,0x7194,0x6EB6,0x5BB9,0x7ED2,0x5197,0x63C9, -0x67D4,0x8089,0x8339,0x8815,0x5112,0x5B7A,0x5982,0x8FB1, -0x4E73,0x6C5D,0x5165,0x8925,0x8F6F,0x962E,0x854A,0x745E, -0x9510,0x95F0,0x6DA6,0x82E5,0x5F31,0x6492,0x6D12,0x8428, -0x816E,0x9CC3,0x585E,0x8D5B,0x4E09,0x53C1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4F1E,0x6563,0x6851,0x55D3,0x4E27,0x6414,0x9A9A,0x626B, -0x5AC2,0x745F,0x8272,0x6DA9,0x68EE,0x50E7,0x838E,0x7802, -0x6740,0x5239,0x6C99,0x7EB1,0x50BB,0x5565,0x715E,0x7B5B, -0x6652,0x73CA,0x82EB,0x6749,0x5C71,0x5220,0x717D,0x886B, -0x95EA,0x9655,0x64C5,0x8D61,0x81B3,0x5584,0x6C55,0x6247, -0x7F2E,0x5892,0x4F24,0x5546,0x8D4F,0x664C,0x4E0A,0x5C1A, -0x88F3,0x68A2,0x634E,0x7A0D,0x70E7,0x828D,0x52FA,0x97F6, -0x5C11,0x54E8,0x90B5,0x7ECD,0x5962,0x8D4A,0x86C7,0x820C, -0x820D,0x8D66,0x6444,0x5C04,0x6151,0x6D89,0x793E,0x8BBE, -0x7837,0x7533,0x547B,0x4F38,0x8EAB,0x6DF1,0x5A20,0x7EC5, -0x795E,0x6C88,0x5BA1,0x5A76,0x751A,0x80BE,0x614E,0x6E17, -0x58F0,0x751F,0x7525,0x7272,0x5347,0x7EF3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7701,0x76DB,0x5269,0x80DC,0x5723,0x5E08,0x5931,0x72EE, -0x65BD,0x6E7F,0x8BD7,0x5C38,0x8671,0x5341,0x77F3,0x62FE, -0x65F6,0x4EC0,0x98DF,0x8680,0x5B9E,0x8BC6,0x53F2,0x77E2, -0x4F7F,0x5C4E,0x9A76,0x59CB,0x5F0F,0x793A,0x58EB,0x4E16, -0x67FF,0x4E8B,0x62ED,0x8A93,0x901D,0x52BF,0x662F,0x55DC, -0x566C,0x9002,0x4ED5,0x4F8D,0x91CA,0x9970,0x6C0F,0x5E02, -0x6043,0x5BA4,0x89C6,0x8BD5,0x6536,0x624B,0x9996,0x5B88, -0x5BFF,0x6388,0x552E,0x53D7,0x7626,0x517D,0x852C,0x67A2, -0x68B3,0x6B8A,0x6292,0x8F93,0x53D4,0x8212,0x6DD1,0x758F, -0x4E66,0x8D4E,0x5B70,0x719F,0x85AF,0x6691,0x66D9,0x7F72, -0x8700,0x9ECD,0x9F20,0x5C5E,0x672F,0x8FF0,0x6811,0x675F, -0x620D,0x7AD6,0x5885,0x5EB6,0x6570,0x6F31, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6055,0x5237,0x800D,0x6454,0x8870,0x7529,0x5E05,0x6813, -0x62F4,0x971C,0x53CC,0x723D,0x8C01,0x6C34,0x7761,0x7A0E, -0x542E,0x77AC,0x987A,0x821C,0x8BF4,0x7855,0x6714,0x70C1, -0x65AF,0x6495,0x5636,0x601D,0x79C1,0x53F8,0x4E1D,0x6B7B, -0x8086,0x5BFA,0x55E3,0x56DB,0x4F3A,0x4F3C,0x9972,0x5DF3, -0x677E,0x8038,0x6002,0x9882,0x9001,0x5B8B,0x8BBC,0x8BF5, -0x641C,0x8258,0x64DE,0x55FD,0x82CF,0x9165,0x4FD7,0x7D20, -0x901F,0x7C9F,0x50F3,0x5851,0x6EAF,0x5BBF,0x8BC9,0x8083, -0x9178,0x849C,0x7B97,0x867D,0x968B,0x968F,0x7EE5,0x9AD3, -0x788E,0x5C81,0x7A57,0x9042,0x96A7,0x795F,0x5B59,0x635F, -0x7B0B,0x84D1,0x68AD,0x5506,0x7F29,0x7410,0x7D22,0x9501, -0x6240,0x584C,0x4ED6,0x5B83,0x5979,0x5854, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x736D,0x631E,0x8E4B,0x8E0F,0x80CE,0x82D4,0x62AC,0x53F0, -0x6CF0,0x915E,0x592A,0x6001,0x6C70,0x574D,0x644A,0x8D2A, -0x762B,0x6EE9,0x575B,0x6A80,0x75F0,0x6F6D,0x8C2D,0x8C08, -0x5766,0x6BEF,0x8892,0x78B3,0x63A2,0x53F9,0x70AD,0x6C64, -0x5858,0x642A,0x5802,0x68E0,0x819B,0x5510,0x7CD6,0x5018, -0x8EBA,0x6DCC,0x8D9F,0x70EB,0x638F,0x6D9B,0x6ED4,0x7EE6, -0x8404,0x6843,0x9003,0x6DD8,0x9676,0x8BA8,0x5957,0x7279, -0x85E4,0x817E,0x75BC,0x8A8A,0x68AF,0x5254,0x8E22,0x9511, -0x63D0,0x9898,0x8E44,0x557C,0x4F53,0x66FF,0x568F,0x60D5, -0x6D95,0x5243,0x5C49,0x5929,0x6DFB,0x586B,0x7530,0x751C, -0x606C,0x8214,0x8146,0x6311,0x6761,0x8FE2,0x773A,0x8DF3, -0x8D34,0x94C1,0x5E16,0x5385,0x542C,0x70C3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6C40,0x5EF7,0x505C,0x4EAD,0x5EAD,0x633A,0x8247,0x901A, -0x6850,0x916E,0x77B3,0x540C,0x94DC,0x5F64,0x7AE5,0x6876, -0x6345,0x7B52,0x7EDF,0x75DB,0x5077,0x6295,0x5934,0x900F, -0x51F8,0x79C3,0x7A81,0x56FE,0x5F92,0x9014,0x6D82,0x5C60, -0x571F,0x5410,0x5154,0x6E4D,0x56E2,0x63A8,0x9893,0x817F, -0x8715,0x892A,0x9000,0x541E,0x5C6F,0x81C0,0x62D6,0x6258, -0x8131,0x9E35,0x9640,0x9A6E,0x9A7C,0x692D,0x59A5,0x62D3, -0x553E,0x6316,0x54C7,0x86D9,0x6D3C,0x5A03,0x74E6,0x889C, -0x6B6A,0x5916,0x8C4C,0x5F2F,0x6E7E,0x73A9,0x987D,0x4E38, -0x70F7,0x5B8C,0x7897,0x633D,0x665A,0x7696,0x60CB,0x5B9B, -0x5A49,0x4E07,0x8155,0x6C6A,0x738B,0x4EA1,0x6789,0x7F51, -0x5F80,0x65FA,0x671B,0x5FD8,0x5984,0x5A01, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5DCD,0x5FAE,0x5371,0x97E6,0x8FDD,0x6845,0x56F4,0x552F, -0x60DF,0x4E3A,0x6F4D,0x7EF4,0x82C7,0x840E,0x59D4,0x4F1F, -0x4F2A,0x5C3E,0x7EAC,0x672A,0x851A,0x5473,0x754F,0x80C3, -0x5582,0x9B4F,0x4F4D,0x6E2D,0x8C13,0x5C09,0x6170,0x536B, -0x761F,0x6E29,0x868A,0x6587,0x95FB,0x7EB9,0x543B,0x7A33, -0x7D0A,0x95EE,0x55E1,0x7FC1,0x74EE,0x631D,0x8717,0x6DA1, -0x7A9D,0x6211,0x65A1,0x5367,0x63E1,0x6C83,0x5DEB,0x545C, -0x94A8,0x4E4C,0x6C61,0x8BEC,0x5C4B,0x65E0,0x829C,0x68A7, -0x543E,0x5434,0x6BCB,0x6B66,0x4E94,0x6342,0x5348,0x821E, -0x4F0D,0x4FAE,0x575E,0x620A,0x96FE,0x6664,0x7269,0x52FF, -0x52A1,0x609F,0x8BEF,0x6614,0x7199,0x6790,0x897F,0x7852, -0x77FD,0x6670,0x563B,0x5438,0x9521,0x727A, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7A00,0x606F,0x5E0C,0x6089,0x819D,0x5915,0x60DC,0x7184, -0x70EF,0x6EAA,0x6C50,0x7280,0x6A84,0x88AD,0x5E2D,0x4E60, -0x5AB3,0x559C,0x94E3,0x6D17,0x7CFB,0x9699,0x620F,0x7EC6, -0x778E,0x867E,0x5323,0x971E,0x8F96,0x6687,0x5CE1,0x4FA0, -0x72ED,0x4E0B,0x53A6,0x590F,0x5413,0x6380,0x9528,0x5148, -0x4ED9,0x9C9C,0x7EA4,0x54B8,0x8D24,0x8854,0x8237,0x95F2, -0x6D8E,0x5F26,0x5ACC,0x663E,0x9669,0x73B0,0x732E,0x53BF, -0x817A,0x9985,0x7FA1,0x5BAA,0x9677,0x9650,0x7EBF,0x76F8, -0x53A2,0x9576,0x9999,0x7BB1,0x8944,0x6E58,0x4E61,0x7FD4, -0x7965,0x8BE6,0x60F3,0x54CD,0x4EAB,0x9879,0x5DF7,0x6A61, -0x50CF,0x5411,0x8C61,0x8427,0x785D,0x9704,0x524A,0x54EE, -0x56A3,0x9500,0x6D88,0x5BB5,0x6DC6,0x6653, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5C0F,0x5B5D,0x6821,0x8096,0x5578,0x7B11,0x6548,0x6954, -0x4E9B,0x6B47,0x874E,0x978B,0x534F,0x631F,0x643A,0x90AA, -0x659C,0x80C1,0x8C10,0x5199,0x68B0,0x5378,0x87F9,0x61C8, -0x6CC4,0x6CFB,0x8C22,0x5C51,0x85AA,0x82AF,0x950C,0x6B23, -0x8F9B,0x65B0,0x5FFB,0x5FC3,0x4FE1,0x8845,0x661F,0x8165, -0x7329,0x60FA,0x5174,0x5211,0x578B,0x5F62,0x90A2,0x884C, -0x9192,0x5E78,0x674F,0x6027,0x59D3,0x5144,0x51F6,0x80F8, -0x5308,0x6C79,0x96C4,0x718A,0x4F11,0x4FEE,0x7F9E,0x673D, -0x55C5,0x9508,0x79C0,0x8896,0x7EE3,0x589F,0x620C,0x9700, -0x865A,0x5618,0x987B,0x5F90,0x8BB8,0x84C4,0x9157,0x53D9, -0x65ED,0x5E8F,0x755C,0x6064,0x7D6E,0x5A7F,0x7EEA,0x7EED, -0x8F69,0x55A7,0x5BA3,0x60AC,0x65CB,0x7384, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9009,0x7663,0x7729,0x7EDA,0x9774,0x859B,0x5B66,0x7A74, -0x96EA,0x8840,0x52CB,0x718F,0x5FAA,0x65EC,0x8BE2,0x5BFB, -0x9A6F,0x5DE1,0x6B89,0x6C5B,0x8BAD,0x8BAF,0x900A,0x8FC5, -0x538B,0x62BC,0x9E26,0x9E2D,0x5440,0x4E2B,0x82BD,0x7259, -0x869C,0x5D16,0x8859,0x6DAF,0x96C5,0x54D1,0x4E9A,0x8BB6, -0x7109,0x54BD,0x9609,0x70DF,0x6DF9,0x76D0,0x4E25,0x7814, -0x8712,0x5CA9,0x5EF6,0x8A00,0x989C,0x960E,0x708E,0x6CBF, -0x5944,0x63A9,0x773C,0x884D,0x6F14,0x8273,0x5830,0x71D5, -0x538C,0x781A,0x96C1,0x5501,0x5F66,0x7130,0x5BB4,0x8C1A, -0x9A8C,0x6B83,0x592E,0x9E2F,0x79E7,0x6768,0x626C,0x4F6F, -0x75A1,0x7F8A,0x6D0B,0x9633,0x6C27,0x4EF0,0x75D2,0x517B, -0x6837,0x6F3E,0x9080,0x8170,0x5996,0x7476, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6447,0x5C27,0x9065,0x7A91,0x8C23,0x59DA,0x54AC,0x8200, -0x836F,0x8981,0x8000,0x6930,0x564E,0x8036,0x7237,0x91CE, -0x51B6,0x4E5F,0x9875,0x6396,0x4E1A,0x53F6,0x66F3,0x814B, -0x591C,0x6DB2,0x4E00,0x58F9,0x533B,0x63D6,0x94F1,0x4F9D, -0x4F0A,0x8863,0x9890,0x5937,0x9057,0x79FB,0x4EEA,0x80F0, -0x7591,0x6C82,0x5B9C,0x59E8,0x5F5D,0x6905,0x8681,0x501A, -0x5DF2,0x4E59,0x77E3,0x4EE5,0x827A,0x6291,0x6613,0x9091, -0x5C79,0x4EBF,0x5F79,0x81C6,0x9038,0x8084,0x75AB,0x4EA6, -0x88D4,0x610F,0x6BC5,0x5FC6,0x4E49,0x76CA,0x6EA2,0x8BE3, -0x8BAE,0x8C0A,0x8BD1,0x5F02,0x7FFC,0x7FCC,0x7ECE,0x8335, -0x836B,0x56E0,0x6BB7,0x97F3,0x9634,0x59FB,0x541F,0x94F6, -0x6DEB,0x5BC5,0x996E,0x5C39,0x5F15,0x9690, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5370,0x82F1,0x6A31,0x5A74,0x9E70,0x5E94,0x7F28,0x83B9, -0x8424,0x8425,0x8367,0x8747,0x8FCE,0x8D62,0x76C8,0x5F71, -0x9896,0x786C,0x6620,0x54DF,0x62E5,0x4F63,0x81C3,0x75C8, -0x5EB8,0x96CD,0x8E0A,0x86F9,0x548F,0x6CF3,0x6D8C,0x6C38, -0x607F,0x52C7,0x7528,0x5E7D,0x4F18,0x60A0,0x5FE7,0x5C24, -0x7531,0x90AE,0x94C0,0x72B9,0x6CB9,0x6E38,0x9149,0x6709, -0x53CB,0x53F3,0x4F51,0x91C9,0x8BF1,0x53C8,0x5E7C,0x8FC2, -0x6DE4,0x4E8E,0x76C2,0x6986,0x865E,0x611A,0x8206,0x4F59, -0x4FDE,0x903E,0x9C7C,0x6109,0x6E1D,0x6E14,0x9685,0x4E88, -0x5A31,0x96E8,0x4E0E,0x5C7F,0x79B9,0x5B87,0x8BED,0x7FBD, -0x7389,0x57DF,0x828B,0x90C1,0x5401,0x9047,0x55BB,0x5CEA, -0x5FA1,0x6108,0x6B32,0x72F1,0x80B2,0x8A89, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6D74,0x5BD3,0x88D5,0x9884,0x8C6B,0x9A6D,0x9E33,0x6E0A, -0x51A4,0x5143,0x57A3,0x8881,0x539F,0x63F4,0x8F95,0x56ED, -0x5458,0x5706,0x733F,0x6E90,0x7F18,0x8FDC,0x82D1,0x613F, -0x6028,0x9662,0x66F0,0x7EA6,0x8D8A,0x8DC3,0x94A5,0x5CB3, -0x7CA4,0x6708,0x60A6,0x9605,0x8018,0x4E91,0x90E7,0x5300, -0x9668,0x5141,0x8FD0,0x8574,0x915D,0x6655,0x97F5,0x5B55, -0x531D,0x7838,0x6742,0x683D,0x54C9,0x707E,0x5BB0,0x8F7D, -0x518D,0x5728,0x54B1,0x6512,0x6682,0x8D5E,0x8D43,0x810F, -0x846C,0x906D,0x7CDF,0x51FF,0x85FB,0x67A3,0x65E9,0x6FA1, -0x86A4,0x8E81,0x566A,0x9020,0x7682,0x7076,0x71E5,0x8D23, -0x62E9,0x5219,0x6CFD,0x8D3C,0x600E,0x589E,0x618E,0x66FE, -0x8D60,0x624E,0x55B3,0x6E23,0x672D,0x8F67, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x94E1,0x95F8,0x7728,0x6805,0x69A8,0x548B,0x4E4D,0x70B8, -0x8BC8,0x6458,0x658B,0x5B85,0x7A84,0x503A,0x5BE8,0x77BB, -0x6BE1,0x8A79,0x7C98,0x6CBE,0x76CF,0x65A9,0x8F97,0x5D2D, -0x5C55,0x8638,0x6808,0x5360,0x6218,0x7AD9,0x6E5B,0x7EFD, -0x6A1F,0x7AE0,0x5F70,0x6F33,0x5F20,0x638C,0x6DA8,0x6756, -0x4E08,0x5E10,0x8D26,0x4ED7,0x80C0,0x7634,0x969C,0x62DB, -0x662D,0x627E,0x6CBC,0x8D75,0x7167,0x7F69,0x5146,0x8087, -0x53EC,0x906E,0x6298,0x54F2,0x86F0,0x8F99,0x8005,0x9517, -0x8517,0x8FD9,0x6D59,0x73CD,0x659F,0x771F,0x7504,0x7827, -0x81FB,0x8D1E,0x9488,0x4FA6,0x6795,0x75B9,0x8BCA,0x9707, -0x632F,0x9547,0x9635,0x84B8,0x6323,0x7741,0x5F81,0x72F0, -0x4E89,0x6014,0x6574,0x62EF,0x6B63,0x653F, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5E27,0x75C7,0x90D1,0x8BC1,0x829D,0x679D,0x652F,0x5431, -0x8718,0x77E5,0x80A2,0x8102,0x6C41,0x4E4B,0x7EC7,0x804C, -0x76F4,0x690D,0x6B96,0x6267,0x503C,0x4F84,0x5740,0x6307, -0x6B62,0x8DBE,0x53EA,0x65E8,0x7EB8,0x5FD7,0x631A,0x63B7, -0x81F3,0x81F4,0x7F6E,0x5E1C,0x5CD9,0x5236,0x667A,0x79E9, -0x7A1A,0x8D28,0x7099,0x75D4,0x6EDE,0x6CBB,0x7A92,0x4E2D, -0x76C5,0x5FE0,0x949F,0x8877,0x7EC8,0x79CD,0x80BF,0x91CD, -0x4EF2,0x4F17,0x821F,0x5468,0x5DDE,0x6D32,0x8BCC,0x7CA5, -0x8F74,0x8098,0x5E1A,0x5492,0x76B1,0x5B99,0x663C,0x9AA4, -0x73E0,0x682A,0x86DB,0x6731,0x732A,0x8BF8,0x8BDB,0x9010, -0x7AF9,0x70DB,0x716E,0x62C4,0x77A9,0x5631,0x4E3B,0x8457, -0x67F1,0x52A9,0x86C0,0x8D2E,0x94F8,0x7B51, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4F4F,0x6CE8,0x795D,0x9A7B,0x6293,0x722A,0x62FD,0x4E13, -0x7816,0x8F6C,0x64B0,0x8D5A,0x7BC6,0x6869,0x5E84,0x88C5, -0x5986,0x649E,0x58EE,0x72B6,0x690E,0x9525,0x8FFD,0x8D58, -0x5760,0x7F00,0x8C06,0x51C6,0x6349,0x62D9,0x5353,0x684C, -0x7422,0x8301,0x914C,0x5544,0x7740,0x707C,0x6D4A,0x5179, -0x54A8,0x8D44,0x59FF,0x6ECB,0x6DC4,0x5B5C,0x7D2B,0x4ED4, -0x7C7D,0x6ED3,0x5B50,0x81EA,0x6E0D,0x5B57,0x9B03,0x68D5, -0x8E2A,0x5B97,0x7EFC,0x603B,0x7EB5,0x90B9,0x8D70,0x594F, -0x63CD,0x79DF,0x8DB3,0x5352,0x65CF,0x7956,0x8BC5,0x963B, -0x7EC4,0x94BB,0x7E82,0x5634,0x9189,0x6700,0x7F6A,0x5C0A, -0x9075,0x6628,0x5DE6,0x4F50,0x67DE,0x505A,0x4F5C,0x5750, -0x5EA7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4E8D,0x4E0C,0x5140,0x4E10,0x5EFF,0x5345,0x4E15,0x4E98, -0x4E1E,0x9B32,0x5B6C,0x5669,0x4E28,0x79BA,0x4E3F,0x5315, -0x4E47,0x592D,0x723B,0x536E,0x6C10,0x56DF,0x80E4,0x9997, -0x6BD3,0x777E,0x9F17,0x4E36,0x4E9F,0x9F10,0x4E5C,0x4E69, -0x4E93,0x8288,0x5B5B,0x556C,0x560F,0x4EC4,0x538D,0x539D, -0x53A3,0x53A5,0x53AE,0x9765,0x8D5D,0x531A,0x53F5,0x5326, -0x532E,0x533E,0x8D5C,0x5366,0x5363,0x5202,0x5208,0x520E, -0x522D,0x5233,0x523F,0x5240,0x524C,0x525E,0x5261,0x525C, -0x84AF,0x527D,0x5282,0x5281,0x5290,0x5293,0x5182,0x7F54, -0x4EBB,0x4EC3,0x4EC9,0x4EC2,0x4EE8,0x4EE1,0x4EEB,0x4EDE, -0x4F1B,0x4EF3,0x4F22,0x4F64,0x4EF5,0x4F25,0x4F27,0x4F09, -0x4F2B,0x4F5E,0x4F67,0x6538,0x4F5A,0x4F5D, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4F5F,0x4F57,0x4F32,0x4F3D,0x4F76,0x4F74,0x4F91,0x4F89, -0x4F83,0x4F8F,0x4F7E,0x4F7B,0x4FAA,0x4F7C,0x4FAC,0x4F94, -0x4FE6,0x4FE8,0x4FEA,0x4FC5,0x4FDA,0x4FE3,0x4FDC,0x4FD1, -0x4FDF,0x4FF8,0x5029,0x504C,0x4FF3,0x502C,0x500F,0x502E, -0x502D,0x4FFE,0x501C,0x500C,0x5025,0x5028,0x507E,0x5043, -0x5055,0x5048,0x504E,0x506C,0x507B,0x50A5,0x50A7,0x50A9, -0x50BA,0x50D6,0x5106,0x50ED,0x50EC,0x50E6,0x50EE,0x5107, -0x510B,0x4EDD,0x6C3D,0x4F58,0x4F65,0x4FCE,0x9FA0,0x6C46, -0x7C74,0x516E,0x5DFD,0x9EC9,0x9998,0x5181,0x5914,0x52F9, -0x530D,0x8A07,0x5310,0x51EB,0x5919,0x5155,0x4EA0,0x5156, -0x4EB3,0x886E,0x88A4,0x4EB5,0x8114,0x88D2,0x7980,0x5B34, -0x8803,0x7FB8,0x51AB,0x51B1,0x51BD,0x51BC, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x51C7,0x5196,0x51A2,0x51A5,0x8BA0,0x8BA6,0x8BA7,0x8BAA, -0x8BB4,0x8BB5,0x8BB7,0x8BC2,0x8BC3,0x8BCB,0x8BCF,0x8BCE, -0x8BD2,0x8BD3,0x8BD4,0x8BD6,0x8BD8,0x8BD9,0x8BDC,0x8BDF, -0x8BE0,0x8BE4,0x8BE8,0x8BE9,0x8BEE,0x8BF0,0x8BF3,0x8BF6, -0x8BF9,0x8BFC,0x8BFF,0x8C00,0x8C02,0x8C04,0x8C07,0x8C0C, -0x8C0F,0x8C11,0x8C12,0x8C14,0x8C15,0x8C16,0x8C19,0x8C1B, -0x8C18,0x8C1D,0x8C1F,0x8C20,0x8C21,0x8C25,0x8C27,0x8C2A, -0x8C2B,0x8C2E,0x8C2F,0x8C32,0x8C33,0x8C35,0x8C36,0x5369, -0x537A,0x961D,0x9622,0x9621,0x9631,0x962A,0x963D,0x963C, -0x9642,0x9649,0x9654,0x965F,0x9667,0x966C,0x9672,0x9674, -0x9688,0x968D,0x9697,0x96B0,0x9097,0x909B,0x909D,0x9099, -0x90AC,0x90A1,0x90B4,0x90B3,0x90B6,0x90BA, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x90B8,0x90B0,0x90CF,0x90C5,0x90BE,0x90D0,0x90C4,0x90C7, -0x90D3,0x90E6,0x90E2,0x90DC,0x90D7,0x90DB,0x90EB,0x90EF, -0x90FE,0x9104,0x9122,0x911E,0x9123,0x9131,0x912F,0x9139, -0x9143,0x9146,0x520D,0x5942,0x52A2,0x52AC,0x52AD,0x52BE, -0x54FF,0x52D0,0x52D6,0x52F0,0x53DF,0x71EE,0x77CD,0x5EF4, -0x51F5,0x51FC,0x9B2F,0x53B6,0x5F01,0x755A,0x5DEF,0x574C, -0x57A9,0x57A1,0x587E,0x58BC,0x58C5,0x58D1,0x5729,0x572C, -0x572A,0x5733,0x5739,0x572E,0x572F,0x575C,0x573B,0x5742, -0x5769,0x5785,0x576B,0x5786,0x577C,0x577B,0x5768,0x576D, -0x5776,0x5773,0x57AD,0x57A4,0x578C,0x57B2,0x57CF,0x57A7, -0x57B4,0x5793,0x57A0,0x57D5,0x57D8,0x57DA,0x57D9,0x57D2, -0x57B8,0x57F4,0x57EF,0x57F8,0x57E4,0x57DD, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x580B,0x580D,0x57FD,0x57ED,0x5800,0x581E,0x5819,0x5844, -0x5820,0x5865,0x586C,0x5881,0x5889,0x589A,0x5880,0x99A8, -0x9F19,0x61FF,0x8279,0x827D,0x827F,0x828F,0x828A,0x82A8, -0x8284,0x828E,0x8291,0x8297,0x8299,0x82AB,0x82B8,0x82BE, -0x82B0,0x82C8,0x82CA,0x82E3,0x8298,0x82B7,0x82AE,0x82CB, -0x82CC,0x82C1,0x82A9,0x82B4,0x82A1,0x82AA,0x829F,0x82C4, -0x82CE,0x82A4,0x82E1,0x8309,0x82F7,0x82E4,0x830F,0x8307, -0x82DC,0x82F4,0x82D2,0x82D8,0x830C,0x82FB,0x82D3,0x8311, -0x831A,0x8306,0x8314,0x8315,0x82E0,0x82D5,0x831C,0x8351, -0x835B,0x835C,0x8308,0x8392,0x833C,0x8334,0x8331,0x839B, -0x835E,0x832F,0x834F,0x8347,0x8343,0x835F,0x8340,0x8317, -0x8360,0x832D,0x833A,0x8333,0x8366,0x8365, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8368,0x831B,0x8369,0x836C,0x836A,0x836D,0x836E,0x83B0, -0x8378,0x83B3,0x83B4,0x83A0,0x83AA,0x8393,0x839C,0x8385, -0x837C,0x83B6,0x83A9,0x837D,0x83B8,0x837B,0x8398,0x839E, -0x83A8,0x83BA,0x83BC,0x83C1,0x8401,0x83E5,0x83D8,0x5807, -0x8418,0x840B,0x83DD,0x83FD,0x83D6,0x841C,0x8438,0x8411, -0x8406,0x83D4,0x83DF,0x840F,0x8403,0x83F8,0x83F9,0x83EA, -0x83C5,0x83C0,0x8426,0x83F0,0x83E1,0x845C,0x8451,0x845A, -0x8459,0x8473,0x8487,0x8488,0x847A,0x8489,0x8478,0x843C, -0x8446,0x8469,0x8476,0x848C,0x848E,0x8431,0x846D,0x84C1, -0x84CD,0x84D0,0x84E6,0x84BD,0x84D3,0x84CA,0x84BF,0x84BA, -0x84E0,0x84A1,0x84B9,0x84B4,0x8497,0x84E5,0x84E3,0x850C, -0x750D,0x8538,0x84F0,0x8539,0x851F,0x853A, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8556,0x853B,0x84FF,0x84FC,0x8559,0x8548,0x8568,0x8564, -0x855E,0x857A,0x77A2,0x8543,0x8572,0x857B,0x85A4,0x85A8, -0x8587,0x858F,0x8579,0x85AE,0x859C,0x8585,0x85B9,0x85B7, -0x85B0,0x85D3,0x85C1,0x85DC,0x85FF,0x8627,0x8605,0x8629, -0x8616,0x863C,0x5EFE,0x5F08,0x593C,0x5941,0x8037,0x5955, -0x595A,0x5958,0x530F,0x5C22,0x5C25,0x5C2C,0x5C34,0x624C, -0x626A,0x629F,0x62BB,0x62CA,0x62DA,0x62D7,0x62EE,0x6322, -0x62F6,0x6339,0x634B,0x6343,0x63AD,0x63F6,0x6371,0x637A, -0x638E,0x63B4,0x636D,0x63AC,0x638A,0x6369,0x63AE,0x63BC, -0x63F2,0x63F8,0x63E0,0x63FF,0x63C4,0x63DE,0x63CE,0x6452, -0x63C6,0x63BE,0x6445,0x6441,0x640B,0x641B,0x6420,0x640C, -0x6426,0x6421,0x645E,0x6484,0x646D,0x6496, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x647A,0x64B7,0x64B8,0x6499,0x64BA,0x64C0,0x64D0,0x64D7, -0x64E4,0x64E2,0x6509,0x6525,0x652E,0x5F0B,0x5FD2,0x7519, -0x5F11,0x535F,0x53F1,0x53FD,0x53E9,0x53E8,0x53FB,0x5412, -0x5416,0x5406,0x544B,0x5452,0x5453,0x5454,0x5456,0x5443, -0x5421,0x5457,0x5459,0x5423,0x5432,0x5482,0x5494,0x5477, -0x5471,0x5464,0x549A,0x549B,0x5484,0x5476,0x5466,0x549D, -0x54D0,0x54AD,0x54C2,0x54B4,0x54D2,0x54A7,0x54A6,0x54D3, -0x54D4,0x5472,0x54A3,0x54D5,0x54BB,0x54BF,0x54CC,0x54D9, -0x54DA,0x54DC,0x54A9,0x54AA,0x54A4,0x54DD,0x54CF,0x54DE, -0x551B,0x54E7,0x5520,0x54FD,0x5514,0x54F3,0x5522,0x5523, -0x550F,0x5511,0x5527,0x552A,0x5567,0x558F,0x55B5,0x5549, -0x556D,0x5541,0x5555,0x553F,0x5550,0x553C, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5537,0x5556,0x5575,0x5576,0x5577,0x5533,0x5530,0x555C, -0x558B,0x55D2,0x5583,0x55B1,0x55B9,0x5588,0x5581,0x559F, -0x557E,0x55D6,0x5591,0x557B,0x55DF,0x55BD,0x55BE,0x5594, -0x5599,0x55EA,0x55F7,0x55C9,0x561F,0x55D1,0x55EB,0x55EC, -0x55D4,0x55E6,0x55DD,0x55C4,0x55EF,0x55E5,0x55F2,0x55F3, -0x55CC,0x55CD,0x55E8,0x55F5,0x55E4,0x8F94,0x561E,0x5608, -0x560C,0x5601,0x5624,0x5623,0x55FE,0x5600,0x5627,0x562D, -0x5658,0x5639,0x5657,0x562C,0x564D,0x5662,0x5659,0x565C, -0x564C,0x5654,0x5686,0x5664,0x5671,0x566B,0x567B,0x567C, -0x5685,0x5693,0x56AF,0x56D4,0x56D7,0x56DD,0x56E1,0x56F5, -0x56EB,0x56F9,0x56FF,0x5704,0x570A,0x5709,0x571C,0x5E0F, -0x5E19,0x5E14,0x5E11,0x5E31,0x5E3B,0x5E3C, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5E37,0x5E44,0x5E54,0x5E5B,0x5E5E,0x5E61,0x5C8C,0x5C7A, -0x5C8D,0x5C90,0x5C96,0x5C88,0x5C98,0x5C99,0x5C91,0x5C9A, -0x5C9C,0x5CB5,0x5CA2,0x5CBD,0x5CAC,0x5CAB,0x5CB1,0x5CA3, -0x5CC1,0x5CB7,0x5CC4,0x5CD2,0x5CE4,0x5CCB,0x5CE5,0x5D02, -0x5D03,0x5D27,0x5D26,0x5D2E,0x5D24,0x5D1E,0x5D06,0x5D1B, -0x5D58,0x5D3E,0x5D34,0x5D3D,0x5D6C,0x5D5B,0x5D6F,0x5D5D, -0x5D6B,0x5D4B,0x5D4A,0x5D69,0x5D74,0x5D82,0x5D99,0x5D9D, -0x8C73,0x5DB7,0x5DC5,0x5F73,0x5F77,0x5F82,0x5F87,0x5F89, -0x5F8C,0x5F95,0x5F99,0x5F9C,0x5FA8,0x5FAD,0x5FB5,0x5FBC, -0x8862,0x5F61,0x72AD,0x72B0,0x72B4,0x72B7,0x72B8,0x72C3, -0x72C1,0x72CE,0x72CD,0x72D2,0x72E8,0x72EF,0x72E9,0x72F2, -0x72F4,0x72F7,0x7301,0x72F3,0x7303,0x72FA, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x72FB,0x7317,0x7313,0x7321,0x730A,0x731E,0x731D,0x7315, -0x7322,0x7339,0x7325,0x732C,0x7338,0x7331,0x7350,0x734D, -0x7357,0x7360,0x736C,0x736F,0x737E,0x821B,0x5925,0x98E7, -0x5924,0x5902,0x9963,0x9967,0x9968,0x9969,0x996A,0x996B, -0x996C,0x9974,0x9977,0x997D,0x9980,0x9984,0x9987,0x998A, -0x998D,0x9990,0x9991,0x9993,0x9994,0x9995,0x5E80,0x5E91, -0x5E8B,0x5E96,0x5EA5,0x5EA0,0x5EB9,0x5EB5,0x5EBE,0x5EB3, -0x8D53,0x5ED2,0x5ED1,0x5EDB,0x5EE8,0x5EEA,0x81BA,0x5FC4, -0x5FC9,0x5FD6,0x5FCF,0x6003,0x5FEE,0x6004,0x5FE1,0x5FE4, -0x5FFE,0x6005,0x6006,0x5FEA,0x5FED,0x5FF8,0x6019,0x6035, -0x6026,0x601B,0x600F,0x600D,0x6029,0x602B,0x600A,0x603F, -0x6021,0x6078,0x6079,0x607B,0x607A,0x6042, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x606A,0x607D,0x6096,0x609A,0x60AD,0x609D,0x6083,0x6092, -0x608C,0x609B,0x60EC,0x60BB,0x60B1,0x60DD,0x60D8,0x60C6, -0x60DA,0x60B4,0x6120,0x6126,0x6115,0x6123,0x60F4,0x6100, -0x610E,0x612B,0x614A,0x6175,0x61AC,0x6194,0x61A7,0x61B7, -0x61D4,0x61F5,0x5FDD,0x96B3,0x95E9,0x95EB,0x95F1,0x95F3, -0x95F5,0x95F6,0x95FC,0x95FE,0x9603,0x9604,0x9606,0x9608, -0x960A,0x960B,0x960C,0x960D,0x960F,0x9612,0x9615,0x9616, -0x9617,0x9619,0x961A,0x4E2C,0x723F,0x6215,0x6C35,0x6C54, -0x6C5C,0x6C4A,0x6CA3,0x6C85,0x6C90,0x6C94,0x6C8C,0x6C68, -0x6C69,0x6C74,0x6C76,0x6C86,0x6CA9,0x6CD0,0x6CD4,0x6CAD, -0x6CF7,0x6CF8,0x6CF1,0x6CD7,0x6CB2,0x6CE0,0x6CD6,0x6CFA, -0x6CEB,0x6CEE,0x6CB1,0x6CD3,0x6CEF,0x6CFE, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6D39,0x6D27,0x6D0C,0x6D43,0x6D48,0x6D07,0x6D04,0x6D19, -0x6D0E,0x6D2B,0x6D4D,0x6D2E,0x6D35,0x6D1A,0x6D4F,0x6D52, -0x6D54,0x6D33,0x6D91,0x6D6F,0x6D9E,0x6DA0,0x6D5E,0x6D93, -0x6D94,0x6D5C,0x6D60,0x6D7C,0x6D63,0x6E1A,0x6DC7,0x6DC5, -0x6DDE,0x6E0E,0x6DBF,0x6DE0,0x6E11,0x6DE6,0x6DDD,0x6DD9, -0x6E16,0x6DAB,0x6E0C,0x6DAE,0x6E2B,0x6E6E,0x6E4E,0x6E6B, -0x6EB2,0x6E5F,0x6E86,0x6E53,0x6E54,0x6E32,0x6E25,0x6E44, -0x6EDF,0x6EB1,0x6E98,0x6EE0,0x6F2D,0x6EE2,0x6EA5,0x6EA7, -0x6EBD,0x6EBB,0x6EB7,0x6ED7,0x6EB4,0x6ECF,0x6E8F,0x6EC2, -0x6E9F,0x6F62,0x6F46,0x6F47,0x6F24,0x6F15,0x6EF9,0x6F2F, -0x6F36,0x6F4B,0x6F74,0x6F2A,0x6F09,0x6F29,0x6F89,0x6F8D, -0x6F8C,0x6F78,0x6F72,0x6F7C,0x6F7A,0x6FD1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6FC9,0x6FA7,0x6FB9,0x6FB6,0x6FC2,0x6FE1,0x6FEE,0x6FDE, -0x6FE0,0x6FEF,0x701A,0x7023,0x701B,0x7039,0x7035,0x704F, -0x705E,0x5B80,0x5B84,0x5B95,0x5B93,0x5BA5,0x5BB8,0x752F, -0x9A9E,0x6434,0x5BE4,0x5BEE,0x8930,0x5BF0,0x8E47,0x8B07, -0x8FB6,0x8FD3,0x8FD5,0x8FE5,0x8FEE,0x8FE4,0x8FE9,0x8FE6, -0x8FF3,0x8FE8,0x9005,0x9004,0x900B,0x9026,0x9011,0x900D, -0x9016,0x9021,0x9035,0x9036,0x902D,0x902F,0x9044,0x9051, -0x9052,0x9050,0x9068,0x9058,0x9062,0x905B,0x66B9,0x9074, -0x907D,0x9082,0x9088,0x9083,0x908B,0x5F50,0x5F57,0x5F56, -0x5F58,0x5C3B,0x54AB,0x5C50,0x5C59,0x5B71,0x5C63,0x5C66, -0x7FBC,0x5F2A,0x5F29,0x5F2D,0x8274,0x5F3C,0x9B3B,0x5C6E, -0x5981,0x5983,0x598D,0x59A9,0x59AA,0x59A3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5997,0x59CA,0x59AB,0x599E,0x59A4,0x59D2,0x59B2,0x59AF, -0x59D7,0x59BE,0x5A05,0x5A06,0x59DD,0x5A08,0x59E3,0x59D8, -0x59F9,0x5A0C,0x5A09,0x5A32,0x5A34,0x5A11,0x5A23,0x5A13, -0x5A40,0x5A67,0x5A4A,0x5A55,0x5A3C,0x5A62,0x5A75,0x80EC, -0x5AAA,0x5A9B,0x5A77,0x5A7A,0x5ABE,0x5AEB,0x5AB2,0x5AD2, -0x5AD4,0x5AB8,0x5AE0,0x5AE3,0x5AF1,0x5AD6,0x5AE6,0x5AD8, -0x5ADC,0x5B09,0x5B17,0x5B16,0x5B32,0x5B37,0x5B40,0x5C15, -0x5C1C,0x5B5A,0x5B65,0x5B73,0x5B51,0x5B53,0x5B62,0x9A75, -0x9A77,0x9A78,0x9A7A,0x9A7F,0x9A7D,0x9A80,0x9A81,0x9A85, -0x9A88,0x9A8A,0x9A90,0x9A92,0x9A93,0x9A96,0x9A98,0x9A9B, -0x9A9C,0x9A9D,0x9A9F,0x9AA0,0x9AA2,0x9AA3,0x9AA5,0x9AA7, -0x7E9F,0x7EA1,0x7EA3,0x7EA5,0x7EA8,0x7EA9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7EAD,0x7EB0,0x7EBE,0x7EC0,0x7EC1,0x7EC2,0x7EC9,0x7ECB, -0x7ECC,0x7ED0,0x7ED4,0x7ED7,0x7EDB,0x7EE0,0x7EE1,0x7EE8, -0x7EEB,0x7EEE,0x7EEF,0x7EF1,0x7EF2,0x7F0D,0x7EF6,0x7EFA, -0x7EFB,0x7EFE,0x7F01,0x7F02,0x7F03,0x7F07,0x7F08,0x7F0B, -0x7F0C,0x7F0F,0x7F11,0x7F12,0x7F17,0x7F19,0x7F1C,0x7F1B, -0x7F1F,0x7F21,0x7F22,0x7F23,0x7F24,0x7F25,0x7F26,0x7F27, -0x7F2A,0x7F2B,0x7F2C,0x7F2D,0x7F2F,0x7F30,0x7F31,0x7F32, -0x7F33,0x7F35,0x5E7A,0x757F,0x5DDB,0x753E,0x9095,0x738E, -0x7391,0x73AE,0x73A2,0x739F,0x73CF,0x73C2,0x73D1,0x73B7, -0x73B3,0x73C0,0x73C9,0x73C8,0x73E5,0x73D9,0x987C,0x740A, -0x73E9,0x73E7,0x73DE,0x73BA,0x73F2,0x740F,0x742A,0x745B, -0x7426,0x7425,0x7428,0x7430,0x742E,0x742C, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x741B,0x741A,0x7441,0x745C,0x7457,0x7455,0x7459,0x7477, -0x746D,0x747E,0x749C,0x748E,0x7480,0x7481,0x7487,0x748B, -0x749E,0x74A8,0x74A9,0x7490,0x74A7,0x74D2,0x74BA,0x97EA, -0x97EB,0x97EC,0x674C,0x6753,0x675E,0x6748,0x6769,0x67A5, -0x6787,0x676A,0x6773,0x6798,0x67A7,0x6775,0x67A8,0x679E, -0x67AD,0x678B,0x6777,0x677C,0x67F0,0x6809,0x67D8,0x680A, -0x67E9,0x67B0,0x680C,0x67D9,0x67B5,0x67DA,0x67B3,0x67DD, -0x6800,0x67C3,0x67B8,0x67E2,0x680E,0x67C1,0x67FD,0x6832, -0x6833,0x6860,0x6861,0x684E,0x6862,0x6844,0x6864,0x6883, -0x681D,0x6855,0x6866,0x6841,0x6867,0x6840,0x683E,0x684A, -0x6849,0x6829,0x68B5,0x688F,0x6874,0x6877,0x6893,0x686B, -0x68C2,0x696E,0x68FC,0x691F,0x6920,0x68F9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6924,0x68F0,0x690B,0x6901,0x6957,0x68E3,0x6910,0x6971, -0x6939,0x6960,0x6942,0x695D,0x6984,0x696B,0x6980,0x6998, -0x6978,0x6934,0x69CC,0x6987,0x6988,0x69CE,0x6989,0x6966, -0x6963,0x6979,0x699B,0x69A7,0x69BB,0x69AB,0x69AD,0x69D4, -0x69B1,0x69C1,0x69CA,0x69DF,0x6995,0x69E0,0x698D,0x69FF, -0x6A2F,0x69ED,0x6A17,0x6A18,0x6A65,0x69F2,0x6A44,0x6A3E, -0x6AA0,0x6A50,0x6A5B,0x6A35,0x6A8E,0x6A79,0x6A3D,0x6A28, -0x6A58,0x6A7C,0x6A91,0x6A90,0x6AA9,0x6A97,0x6AAB,0x7337, -0x7352,0x6B81,0x6B82,0x6B87,0x6B84,0x6B92,0x6B93,0x6B8D, -0x6B9A,0x6B9B,0x6BA1,0x6BAA,0x8F6B,0x8F6D,0x8F71,0x8F72, -0x8F73,0x8F75,0x8F76,0x8F78,0x8F77,0x8F79,0x8F7A,0x8F7C, -0x8F7E,0x8F81,0x8F82,0x8F84,0x8F87,0x8F8B, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8F8D,0x8F8E,0x8F8F,0x8F98,0x8F9A,0x8ECE,0x620B,0x6217, -0x621B,0x621F,0x6222,0x6221,0x6225,0x6224,0x622C,0x81E7, -0x74EF,0x74F4,0x74FF,0x750F,0x7511,0x7513,0x6534,0x65EE, -0x65EF,0x65F0,0x660A,0x6619,0x6772,0x6603,0x6615,0x6600, -0x7085,0x66F7,0x661D,0x6634,0x6631,0x6636,0x6635,0x8006, -0x665F,0x6654,0x6641,0x664F,0x6656,0x6661,0x6657,0x6677, -0x6684,0x668C,0x66A7,0x669D,0x66BE,0x66DB,0x66DC,0x66E6, -0x66E9,0x8D32,0x8D33,0x8D36,0x8D3B,0x8D3D,0x8D40,0x8D45, -0x8D46,0x8D48,0x8D49,0x8D47,0x8D4D,0x8D55,0x8D59,0x89C7, -0x89CA,0x89CB,0x89CC,0x89CE,0x89CF,0x89D0,0x89D1,0x726E, -0x729F,0x725D,0x7266,0x726F,0x727E,0x727F,0x7284,0x728B, -0x728D,0x728F,0x7292,0x6308,0x6332,0x63B0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x643F,0x64D8,0x8004,0x6BEA,0x6BF3,0x6BFD,0x6BF5,0x6BF9, -0x6C05,0x6C07,0x6C06,0x6C0D,0x6C15,0x6C18,0x6C19,0x6C1A, -0x6C21,0x6C29,0x6C24,0x6C2A,0x6C32,0x6535,0x6555,0x656B, -0x724D,0x7252,0x7256,0x7230,0x8662,0x5216,0x809F,0x809C, -0x8093,0x80BC,0x670A,0x80BD,0x80B1,0x80AB,0x80AD,0x80B4, -0x80B7,0x80E7,0x80E8,0x80E9,0x80EA,0x80DB,0x80C2,0x80C4, -0x80D9,0x80CD,0x80D7,0x6710,0x80DD,0x80EB,0x80F1,0x80F4, -0x80ED,0x810D,0x810E,0x80F2,0x80FC,0x6715,0x8112,0x8C5A, -0x8136,0x811E,0x812C,0x8118,0x8132,0x8148,0x814C,0x8153, -0x8174,0x8159,0x815A,0x8171,0x8160,0x8169,0x817C,0x817D, -0x816D,0x8167,0x584D,0x5AB5,0x8188,0x8182,0x8191,0x6ED5, -0x81A3,0x81AA,0x81CC,0x6726,0x81CA,0x81BB, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x81C1,0x81A6,0x6B24,0x6B37,0x6B39,0x6B43,0x6B46,0x6B59, -0x98D1,0x98D2,0x98D3,0x98D5,0x98D9,0x98DA,0x6BB3,0x5F40, -0x6BC2,0x89F3,0x6590,0x9F51,0x6593,0x65BC,0x65C6,0x65C4, -0x65C3,0x65CC,0x65CE,0x65D2,0x65D6,0x7080,0x709C,0x7096, -0x709D,0x70BB,0x70C0,0x70B7,0x70AB,0x70B1,0x70E8,0x70CA, -0x7110,0x7113,0x7116,0x712F,0x7131,0x7173,0x715C,0x7168, -0x7145,0x7172,0x714A,0x7178,0x717A,0x7198,0x71B3,0x71B5, -0x71A8,0x71A0,0x71E0,0x71D4,0x71E7,0x71F9,0x721D,0x7228, -0x706C,0x7118,0x7166,0x71B9,0x623E,0x623D,0x6243,0x6248, -0x6249,0x793B,0x7940,0x7946,0x7949,0x795B,0x795C,0x7953, -0x795A,0x7962,0x7957,0x7960,0x796F,0x7967,0x797A,0x7985, -0x798A,0x799A,0x79A7,0x79B3,0x5FD1,0x5FD0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x603C,0x605D,0x605A,0x6067,0x6041,0x6059,0x6063,0x60AB, -0x6106,0x610D,0x615D,0x61A9,0x619D,0x61CB,0x61D1,0x6206, -0x8080,0x807F,0x6C93,0x6CF6,0x6DFC,0x77F6,0x77F8,0x7800, -0x7809,0x7817,0x7818,0x7811,0x65AB,0x782D,0x781C,0x781D, -0x7839,0x783A,0x783B,0x781F,0x783C,0x7825,0x782C,0x7823, -0x7829,0x784E,0x786D,0x7856,0x7857,0x7826,0x7850,0x7847, -0x784C,0x786A,0x789B,0x7893,0x789A,0x7887,0x789C,0x78A1, -0x78A3,0x78B2,0x78B9,0x78A5,0x78D4,0x78D9,0x78C9,0x78EC, -0x78F2,0x7905,0x78F4,0x7913,0x7924,0x791E,0x7934,0x9F9B, -0x9EF9,0x9EFB,0x9EFC,0x76F1,0x7704,0x770D,0x76F9,0x7707, -0x7708,0x771A,0x7722,0x7719,0x772D,0x7726,0x7735,0x7738, -0x7750,0x7751,0x7747,0x7743,0x775A,0x7768, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7762,0x7765,0x777F,0x778D,0x777D,0x7780,0x778C,0x7791, -0x779F,0x77A0,0x77B0,0x77B5,0x77BD,0x753A,0x7540,0x754E, -0x754B,0x7548,0x755B,0x7572,0x7579,0x7583,0x7F58,0x7F61, -0x7F5F,0x8A48,0x7F68,0x7F74,0x7F71,0x7F79,0x7F81,0x7F7E, -0x76CD,0x76E5,0x8832,0x9485,0x9486,0x9487,0x948B,0x948A, -0x948C,0x948D,0x948F,0x9490,0x9494,0x9497,0x9495,0x949A, -0x949B,0x949C,0x94A3,0x94A4,0x94AB,0x94AA,0x94AD,0x94AC, -0x94AF,0x94B0,0x94B2,0x94B4,0x94B6,0x94B7,0x94B8,0x94B9, -0x94BA,0x94BC,0x94BD,0x94BF,0x94C4,0x94C8,0x94C9,0x94CA, -0x94CB,0x94CC,0x94CD,0x94CE,0x94D0,0x94D1,0x94D2,0x94D5, -0x94D6,0x94D7,0x94D9,0x94D8,0x94DB,0x94DE,0x94DF,0x94E0, -0x94E2,0x94E4,0x94E5,0x94E7,0x94E8,0x94EA, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x94E9,0x94EB,0x94EE,0x94EF,0x94F3,0x94F4,0x94F5,0x94F7, -0x94F9,0x94FC,0x94FD,0x94FF,0x9503,0x9502,0x9506,0x9507, -0x9509,0x950A,0x950D,0x950E,0x950F,0x9512,0x9513,0x9514, -0x9515,0x9516,0x9518,0x951B,0x951D,0x951E,0x951F,0x9522, -0x952A,0x952B,0x9529,0x952C,0x9531,0x9532,0x9534,0x9536, -0x9537,0x9538,0x953C,0x953E,0x953F,0x9542,0x9535,0x9544, -0x9545,0x9546,0x9549,0x954C,0x954E,0x954F,0x9552,0x9553, -0x9554,0x9556,0x9557,0x9558,0x9559,0x955B,0x955E,0x955F, -0x955D,0x9561,0x9562,0x9564,0x9565,0x9566,0x9567,0x9568, -0x9569,0x956A,0x956B,0x956C,0x956F,0x9571,0x9572,0x9573, -0x953A,0x77E7,0x77EC,0x96C9,0x79D5,0x79ED,0x79E3,0x79EB, -0x7A06,0x5D47,0x7A03,0x7A02,0x7A1E,0x7A14, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7A39,0x7A37,0x7A51,0x9ECF,0x99A5,0x7A70,0x7688,0x768E, -0x7693,0x7699,0x76A4,0x74DE,0x74E0,0x752C,0x9E20,0x9E22, -0x9E28,0x9E29,0x9E2A,0x9E2B,0x9E2C,0x9E32,0x9E31,0x9E36, -0x9E38,0x9E37,0x9E39,0x9E3A,0x9E3E,0x9E41,0x9E42,0x9E44, -0x9E46,0x9E47,0x9E48,0x9E49,0x9E4B,0x9E4C,0x9E4E,0x9E51, -0x9E55,0x9E57,0x9E5A,0x9E5B,0x9E5C,0x9E5E,0x9E63,0x9E66, -0x9E67,0x9E68,0x9E69,0x9E6A,0x9E6B,0x9E6C,0x9E71,0x9E6D, -0x9E73,0x7592,0x7594,0x7596,0x75A0,0x759D,0x75AC,0x75A3, -0x75B3,0x75B4,0x75B8,0x75C4,0x75B1,0x75B0,0x75C3,0x75C2, -0x75D6,0x75CD,0x75E3,0x75E8,0x75E6,0x75E4,0x75EB,0x75E7, -0x7603,0x75F1,0x75FC,0x75FF,0x7610,0x7600,0x7605,0x760C, -0x7617,0x760A,0x7625,0x7618,0x7615,0x7619, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x761B,0x763C,0x7622,0x7620,0x7640,0x762D,0x7630,0x763F, -0x7635,0x7643,0x763E,0x7633,0x764D,0x765E,0x7654,0x765C, -0x7656,0x766B,0x766F,0x7FCA,0x7AE6,0x7A78,0x7A79,0x7A80, -0x7A86,0x7A88,0x7A95,0x7AA6,0x7AA0,0x7AAC,0x7AA8,0x7AAD, -0x7AB3,0x8864,0x8869,0x8872,0x887D,0x887F,0x8882,0x88A2, -0x88C6,0x88B7,0x88BC,0x88C9,0x88E2,0x88CE,0x88E3,0x88E5, -0x88F1,0x891A,0x88FC,0x88E8,0x88FE,0x88F0,0x8921,0x8919, -0x8913,0x891B,0x890A,0x8934,0x892B,0x8936,0x8941,0x8966, -0x897B,0x758B,0x80E5,0x76B2,0x76B4,0x77DC,0x8012,0x8014, -0x8016,0x801C,0x8020,0x8022,0x8025,0x8026,0x8027,0x8029, -0x8028,0x8031,0x800B,0x8035,0x8043,0x8046,0x804D,0x8052, -0x8069,0x8071,0x8983,0x9878,0x9880,0x9883, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9889,0x988C,0x988D,0x988F,0x9894,0x989A,0x989B,0x989E, -0x989F,0x98A1,0x98A2,0x98A5,0x98A6,0x864D,0x8654,0x866C, -0x866E,0x867F,0x867A,0x867C,0x867B,0x86A8,0x868D,0x868B, -0x86AC,0x869D,0x86A7,0x86A3,0x86AA,0x8693,0x86A9,0x86B6, -0x86C4,0x86B5,0x86CE,0x86B0,0x86BA,0x86B1,0x86AF,0x86C9, -0x86CF,0x86B4,0x86E9,0x86F1,0x86F2,0x86ED,0x86F3,0x86D0, -0x8713,0x86DE,0x86F4,0x86DF,0x86D8,0x86D1,0x8703,0x8707, -0x86F8,0x8708,0x870A,0x870D,0x8709,0x8723,0x873B,0x871E, -0x8725,0x872E,0x871A,0x873E,0x8748,0x8734,0x8731,0x8729, -0x8737,0x873F,0x8782,0x8722,0x877D,0x877E,0x877B,0x8760, -0x8770,0x874C,0x876E,0x878B,0x8753,0x8763,0x877C,0x8764, -0x8759,0x8765,0x8793,0x87AF,0x87A8,0x87D2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x87C6,0x8788,0x8785,0x87AD,0x8797,0x8783,0x87AB,0x87E5, -0x87AC,0x87B5,0x87B3,0x87CB,0x87D3,0x87BD,0x87D1,0x87C0, -0x87CA,0x87DB,0x87EA,0x87E0,0x87EE,0x8816,0x8813,0x87FE, -0x880A,0x881B,0x8821,0x8839,0x883C,0x7F36,0x7F42,0x7F44, -0x7F45,0x8210,0x7AFA,0x7AFD,0x7B08,0x7B03,0x7B04,0x7B15, -0x7B0A,0x7B2B,0x7B0F,0x7B47,0x7B38,0x7B2A,0x7B19,0x7B2E, -0x7B31,0x7B20,0x7B25,0x7B24,0x7B33,0x7B3E,0x7B1E,0x7B58, -0x7B5A,0x7B45,0x7B75,0x7B4C,0x7B5D,0x7B60,0x7B6E,0x7B7B, -0x7B62,0x7B72,0x7B71,0x7B90,0x7BA6,0x7BA7,0x7BB8,0x7BAC, -0x7B9D,0x7BA8,0x7B85,0x7BAA,0x7B9C,0x7BA2,0x7BAB,0x7BB4, -0x7BD1,0x7BC1,0x7BCC,0x7BDD,0x7BDA,0x7BE5,0x7BE6,0x7BEA, -0x7C0C,0x7BFE,0x7BFC,0x7C0F,0x7C16,0x7C0B, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7C1F,0x7C2A,0x7C26,0x7C38,0x7C41,0x7C40,0x81FE,0x8201, -0x8202,0x8204,0x81EC,0x8844,0x8221,0x8222,0x8223,0x822D, -0x822F,0x8228,0x822B,0x8238,0x823B,0x8233,0x8234,0x823E, -0x8244,0x8249,0x824B,0x824F,0x825A,0x825F,0x8268,0x887E, -0x8885,0x8888,0x88D8,0x88DF,0x895E,0x7F9D,0x7F9F,0x7FA7, -0x7FAF,0x7FB0,0x7FB2,0x7C7C,0x6549,0x7C91,0x7C9D,0x7C9C, -0x7C9E,0x7CA2,0x7CB2,0x7CBC,0x7CBD,0x7CC1,0x7CC7,0x7CCC, -0x7CCD,0x7CC8,0x7CC5,0x7CD7,0x7CE8,0x826E,0x66A8,0x7FBF, -0x7FCE,0x7FD5,0x7FE5,0x7FE1,0x7FE6,0x7FE9,0x7FEE,0x7FF3, -0x7CF8,0x7D77,0x7DA6,0x7DAE,0x7E47,0x7E9B,0x9EB8,0x9EB4, -0x8D73,0x8D84,0x8D94,0x8D91,0x8DB1,0x8D67,0x8D6D,0x8C47, -0x8C49,0x914A,0x9150,0x914E,0x914F,0x9164, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9162,0x9161,0x9170,0x9169,0x916F,0x917D,0x917E,0x9172, -0x9174,0x9179,0x918C,0x9185,0x9190,0x918D,0x9191,0x91A2, -0x91A3,0x91AA,0x91AD,0x91AE,0x91AF,0x91B5,0x91B4,0x91BA, -0x8C55,0x9E7E,0x8DB8,0x8DEB,0x8E05,0x8E59,0x8E69,0x8DB5, -0x8DBF,0x8DBC,0x8DBA,0x8DC4,0x8DD6,0x8DD7,0x8DDA,0x8DDE, -0x8DCE,0x8DCF,0x8DDB,0x8DC6,0x8DEC,0x8DF7,0x8DF8,0x8DE3, -0x8DF9,0x8DFB,0x8DE4,0x8E09,0x8DFD,0x8E14,0x8E1D,0x8E1F, -0x8E2C,0x8E2E,0x8E23,0x8E2F,0x8E3A,0x8E40,0x8E39,0x8E35, -0x8E3D,0x8E31,0x8E49,0x8E41,0x8E42,0x8E51,0x8E52,0x8E4A, -0x8E70,0x8E76,0x8E7C,0x8E6F,0x8E74,0x8E85,0x8E8F,0x8E94, -0x8E90,0x8E9C,0x8E9E,0x8C78,0x8C82,0x8C8A,0x8C85,0x8C98, -0x8C94,0x659B,0x89D6,0x89DE,0x89DA,0x89DC, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x89E5,0x89EB,0x89EF,0x8A3E,0x8B26,0x9753,0x96E9,0x96F3, -0x96EF,0x9706,0x9701,0x9708,0x970F,0x970E,0x972A,0x972D, -0x9730,0x973E,0x9F80,0x9F83,0x9F85,0x9F86,0x9F87,0x9F88, -0x9F89,0x9F8A,0x9F8C,0x9EFE,0x9F0B,0x9F0D,0x96B9,0x96BC, -0x96BD,0x96CE,0x96D2,0x77BF,0x96E0,0x928E,0x92AE,0x92C8, -0x933E,0x936A,0x93CA,0x938F,0x943E,0x946B,0x9C7F,0x9C82, -0x9C85,0x9C86,0x9C87,0x9C88,0x7A23,0x9C8B,0x9C8E,0x9C90, -0x9C91,0x9C92,0x9C94,0x9C95,0x9C9A,0x9C9B,0x9C9E,0x9C9F, -0x9CA0,0x9CA1,0x9CA2,0x9CA3,0x9CA5,0x9CA6,0x9CA7,0x9CA8, -0x9CA9,0x9CAB,0x9CAD,0x9CAE,0x9CB0,0x9CB1,0x9CB2,0x9CB3, -0x9CB4,0x9CB5,0x9CB6,0x9CB7,0x9CBA,0x9CBB,0x9CBC,0x9CBD, -0x9CC4,0x9CC5,0x9CC6,0x9CC7,0x9CCA,0x9CCB, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9CCC,0x9CCD,0x9CCE,0x9CCF,0x9CD0,0x9CD3,0x9CD4,0x9CD5, -0x9CD7,0x9CD8,0x9CD9,0x9CDC,0x9CDD,0x9CDF,0x9CE2,0x977C, -0x9785,0x9791,0x9792,0x9794,0x97AF,0x97AB,0x97A3,0x97B2, -0x97B4,0x9AB1,0x9AB0,0x9AB7,0x9E58,0x9AB6,0x9ABA,0x9ABC, -0x9AC1,0x9AC0,0x9AC5,0x9AC2,0x9ACB,0x9ACC,0x9AD1,0x9B45, -0x9B43,0x9B47,0x9B49,0x9B48,0x9B4D,0x9B51,0x98E8,0x990D, -0x992E,0x9955,0x9954,0x9ADF,0x9AE1,0x9AE6,0x9AEF,0x9AEB, -0x9AFB,0x9AED,0x9AF9,0x9B08,0x9B0F,0x9B13,0x9B1F,0x9B23, -0x9EBD,0x9EBE,0x7E3B,0x9E82,0x9E87,0x9E88,0x9E8B,0x9E92, -0x93D6,0x9E9D,0x9E9F,0x9EDB,0x9EDC,0x9EDD,0x9EE0,0x9EDF, -0x9EE2,0x9EE9,0x9EE7,0x9EE5,0x9EEA,0x9EEF,0x9F22,0x9F2C, -0x9F2F,0x9F39,0x9F37,0x9F3D,0x9F3E,0x9F44}; - -static int func_gb2312_uni_onechar(int code){ - if ((code>=0x2121)&&(code<=0x2658)) - return(tab_gb2312_uni0[code-0x2121]); - if ((code>=0x2721)&&(code<=0x296F)) - return(tab_gb2312_uni1[code-0x2721]); - if ((code>=0x3021)&&(code<=0x777E)) - return(tab_gb2312_uni2[code-0x3021]); - return(0); -} - - -/* page 0 0x00A4-0x01DC */ -static uint16 tab_uni_gb23120[]={ -0x2168, 0, 0,0x216C,0x2127, 0, 0, 0, - 0, 0, 0, 0,0x2163,0x2140, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x2141, 0, 0, 0, 0, - 0, 0, 0, 0,0x2824,0x2822, 0, 0, - 0, 0, 0, 0,0x2828,0x2826,0x283A, 0, -0x282C,0x282A, 0, 0, 0, 0,0x2830,0x282E, - 0, 0, 0,0x2142, 0,0x2834,0x2832, 0, -0x2839, 0, 0, 0, 0,0x2821, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x2825, - 0, 0, 0, 0, 0, 0, 0,0x2827, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x2829, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x282D, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x2831, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x2823, 0,0x282B, 0,0x282F, 0, -0x2833, 0,0x2835, 0,0x2836, 0,0x2837, 0, -0x2838}; - -/* page 1 0x02C7-0x0451 */ -static uint16 tab_uni_gb23121[]={ -0x2126, 0,0x2125, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x2621,0x2622,0x2623,0x2624,0x2625,0x2626, -0x2627,0x2628,0x2629,0x262A,0x262B,0x262C,0x262D,0x262E, -0x262F,0x2630,0x2631, 0,0x2632,0x2633,0x2634,0x2635, -0x2636,0x2637,0x2638, 0, 0, 0, 0, 0, - 0, 0,0x2641,0x2642,0x2643,0x2644,0x2645,0x2646, -0x2647,0x2648,0x2649,0x264A,0x264B,0x264C,0x264D,0x264E, -0x264F,0x2650,0x2651, 0,0x2652,0x2653,0x2654,0x2655, -0x2656,0x2657,0x2658, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x2727, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x2721,0x2722,0x2723,0x2724,0x2725,0x2726,0x2728, -0x2729,0x272A,0x272B,0x272C,0x272D,0x272E,0x272F,0x2730, -0x2731,0x2732,0x2733,0x2734,0x2735,0x2736,0x2737,0x2738, -0x2739,0x273A,0x273B,0x273C,0x273D,0x273E,0x273F,0x2740, -0x2741,0x2751,0x2752,0x2753,0x2754,0x2755,0x2756,0x2758, -0x2759,0x275A,0x275B,0x275C,0x275D,0x275E,0x275F,0x2760, -0x2761,0x2762,0x2763,0x2764,0x2765,0x2766,0x2767,0x2768, -0x2769,0x276A,0x276B,0x276C,0x276D,0x276E,0x276F,0x2770, -0x2771, 0,0x2757}; - -/* page 2 0x2015-0x2312 */ -static uint16 tab_uni_gb23122[]={ -0x212A,0x212C, 0,0x212E,0x212F, 0, 0,0x2130, -0x2131, 0, 0, 0, 0, 0, 0, 0, - 0,0x212D, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x216B, 0,0x2164,0x2165, 0, - 0, 0, 0, 0, 0, 0,0x2179, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x2166, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x216D, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x2271,0x2272,0x2273,0x2274,0x2275, -0x2276,0x2277,0x2278,0x2279,0x227A,0x227B,0x227C, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x217B,0x217C,0x217A,0x217D, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x214A, 0, 0, 0, 0, - 0, 0,0x2147, 0,0x2146, 0, 0, 0, - 0, 0, 0, 0, 0,0x214C, 0, 0, -0x2158,0x215E, 0,0x214F, 0, 0, 0, 0, -0x214E, 0,0x2144,0x2145,0x2149,0x2148,0x2152, 0, - 0,0x2153, 0, 0, 0, 0, 0,0x2160, -0x215F,0x2143,0x214B, 0, 0, 0, 0, 0, -0x2157, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x2156, 0, 0, 0,0x2155, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x2159,0x2154, 0, 0,0x215C, -0x215D, 0, 0, 0, 0, 0, 0, 0, - 0,0x215A,0x215B, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x2151, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x214D, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x2150}; - -/* page 3 0x2460-0x2642 */ -static uint16 tab_uni_gb23123[]={ -0x2259,0x225A,0x225B,0x225C,0x225D,0x225E,0x225F,0x2260, -0x2261,0x2262, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x2245,0x2246,0x2247,0x2248, -0x2249,0x224A,0x224B,0x224C,0x224D,0x224E,0x224F,0x2250, -0x2251,0x2252,0x2253,0x2254,0x2255,0x2256,0x2257,0x2258, -0x2231,0x2232,0x2233,0x2234,0x2235,0x2236,0x2237,0x2238, -0x2239,0x223A,0x223B,0x223C,0x223D,0x223E,0x223F,0x2240, -0x2241,0x2242,0x2243,0x2244, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x2924,0x2925,0x2926,0x2927,0x2928,0x2929,0x292A,0x292B, -0x292C,0x292D,0x292E,0x292F,0x2930,0x2931,0x2932,0x2933, -0x2934,0x2935,0x2936,0x2937,0x2938,0x2939,0x293A,0x293B, -0x293C,0x293D,0x293E,0x293F,0x2940,0x2941,0x2942,0x2943, -0x2944,0x2945,0x2946,0x2947,0x2948,0x2949,0x294A,0x294B, -0x294C,0x294D,0x294E,0x294F,0x2950,0x2951,0x2952,0x2953, -0x2954,0x2955,0x2956,0x2957,0x2958,0x2959,0x295A,0x295B, -0x295C,0x295D,0x295E,0x295F,0x2960,0x2961,0x2962,0x2963, -0x2964,0x2965,0x2966,0x2967,0x2968,0x2969,0x296A,0x296B, -0x296C,0x296D,0x296E,0x296F, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x2176,0x2175, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x2178,0x2177, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x2174,0x2173, - 0, 0, 0,0x2170, 0, 0,0x2172,0x2171, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x216F,0x216E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x2162, 0,0x2161}; - -/* page 4 0x3000-0x3129 */ -static uint16 tab_uni_gb23124[]={ -0x2121,0x2122,0x2123,0x2128, 0,0x2129, 0, 0, -0x2134,0x2135,0x2136,0x2137,0x2138,0x2139,0x213A,0x213B, -0x213E,0x213F, 0,0x217E,0x2132,0x2133,0x213C,0x213D, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x2421,0x2422,0x2423,0x2424,0x2425,0x2426,0x2427, -0x2428,0x2429,0x242A,0x242B,0x242C,0x242D,0x242E,0x242F, -0x2430,0x2431,0x2432,0x2433,0x2434,0x2435,0x2436,0x2437, -0x2438,0x2439,0x243A,0x243B,0x243C,0x243D,0x243E,0x243F, -0x2440,0x2441,0x2442,0x2443,0x2444,0x2445,0x2446,0x2447, -0x2448,0x2449,0x244A,0x244B,0x244C,0x244D,0x244E,0x244F, -0x2450,0x2451,0x2452,0x2453,0x2454,0x2455,0x2456,0x2457, -0x2458,0x2459,0x245A,0x245B,0x245C,0x245D,0x245E,0x245F, -0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467, -0x2468,0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F, -0x2470,0x2471,0x2472,0x2473, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x2521,0x2522,0x2523,0x2524,0x2525,0x2526,0x2527, -0x2528,0x2529,0x252A,0x252B,0x252C,0x252D,0x252E,0x252F, -0x2530,0x2531,0x2532,0x2533,0x2534,0x2535,0x2536,0x2537, -0x2538,0x2539,0x253A,0x253B,0x253C,0x253D,0x253E,0x253F, -0x2540,0x2541,0x2542,0x2543,0x2544,0x2545,0x2546,0x2547, -0x2548,0x2549,0x254A,0x254B,0x254C,0x254D,0x254E,0x254F, -0x2550,0x2551,0x2552,0x2553,0x2554,0x2555,0x2556,0x2557, -0x2558,0x2559,0x255A,0x255B,0x255C,0x255D,0x255E,0x255F, -0x2560,0x2561,0x2562,0x2563,0x2564,0x2565,0x2566,0x2567, -0x2568,0x2569,0x256A,0x256B,0x256C,0x256D,0x256E,0x256F, -0x2570,0x2571,0x2572,0x2573,0x2574,0x2575,0x2576, 0, - 0, 0, 0,0x2124, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x2845,0x2846,0x2847, -0x2848,0x2849,0x284A,0x284B,0x284C,0x284D,0x284E,0x284F, -0x2850,0x2851,0x2852,0x2853,0x2854,0x2855,0x2856,0x2857, -0x2858,0x2859,0x285A,0x285B,0x285C,0x285D,0x285E,0x285F, -0x2860,0x2861,0x2862,0x2863,0x2864,0x2865,0x2866,0x2867, -0x2868,0x2869}; - -/* page 5 0x3220-0x3229 */ -static uint16 tab_uni_gb23125[]={ -0x2265,0x2266,0x2267,0x2268,0x2269,0x226A,0x226B,0x226C, -0x226D,0x226E}; - -/* page 6 0x4E00-0x9B54 */ -static uint16 tab_uni_gb23126[]={ -0x523B,0x3621, 0,0x465F, 0, 0, 0,0x4D72, -0x5549,0x487D,0x494F,0x4F42,0x5822,0x323B,0x536B, 0, -0x5824,0x3373, 0,0x5728,0x4752,0x5827,0x4A40, 0, -0x4770,0x317B,0x5235,0x3454,0x362B,0x4B3F,0x5829, 0, - 0, 0,0x362A, 0,0x413D,0x514F, 0,0x4925, -0x582D, 0,0x3876,0x513E,0x635C,0x5650, 0, 0, -0x3761, 0,0x342E, 0,0x4159, 0,0x583C, 0, -0x4D68,0x3524,0x4E2A,0x5677, 0,0x4076,0x3E59,0x582F, - 0, 0, 0,0x444B, 0,0x3E43, 0,0x5831, -0x4334,0x5265, 0,0x562E,0x4E5A,0x5527,0x3A75,0x3726, -0x4056, 0,0x4639,0x4552,0x4747, 0,0x3954, 0, -0x334B,0x5252, 0, 0,0x583F,0x3E45,0x4672,0x5232, -0x4F30,0x4F67, 0, 0, 0, 0,0x4A69, 0, - 0,0x5840, 0, 0, 0, 0, 0, 0, -0x4272,0x4252, 0,0x4869, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x472C, 0, - 0, 0, 0, 0, 0, 0,0x414B, 0, -0x5368,0x5579, 0,0x4A42,0x367E,0x5821,0x535A,0x3F77, - 0,0x5446,0x3B25,0x5841,0x4E65,0x3E2E, 0, 0, -0x5828, 0,0x5147,0x5029, 0, 0, 0,0x583D, -0x596F,0x4D76,0x3F3A, 0,0x3D3B,0x3A25,0x5260,0x327A, -0x3A60,0x4436, 0,0x4F6D,0x3E29,0x4D24,0x4141, 0, - 0, 0,0x4757,0x5971, 0,0x5974, 0, 0, - 0, 0,0x484B,0x5869, 0, 0, 0,0x525A, -0x4A32,0x484A,0x586C,0x586A,0x5846,0x3D76,0x464D,0x3370, - 0,0x586B,0x3D71,0x3D69, 0,0x4854,0x3453, 0, - 0,0x4258, 0,0x3256,0x5750,0x4A4B,0x4B7B,0x554C, -0x3836,0x4F49, 0, 0, 0,0x595A,0x5870,0x472A, - 0,0x586E, 0,0x347A,0x416E,0x5254, 0, 0, -0x586D, 0,0x5247,0x586F,0x4347, 0, 0, 0, -0x5176, 0,0x5659,0x5872, 0,0x5875,0x3C7E,0x3C5B, - 0, 0, 0,0x484E, 0,0x375D, 0,0x3742, - 0,0x4673, 0, 0, 0, 0, 0, 0, - 0,0x5878,0x5241, 0, 0,0x4E69,0x3C3F,0x377C, -0x3725,0x505D, 0, 0, 0, 0, 0,0x565A, -0x5345,0x3B6F,0x3B61,0x5871, 0, 0,0x4921,0x4E30, -0x342B, 0,0x5873, 0,0x494B,0x5876,0x4257,0x5877, - 0, 0,0x4E31,0x5879, 0, 0, 0,0x322E, -0x3940, 0,0x5923, 0,0x3069, 0,0x4166, 0, -0x496C, 0,0x4B45, 0,0x4B46,0x5924, 0, 0, - 0, 0, 0,0x3568, 0, 0,0x352B, 0, - 0, 0, 0, 0, 0,0x4E3B,0x354D,0x5721, -0x5774,0x5353, 0,0x4C65, 0,0x3A4E, 0,0x5922, -0x595C,0x5360,0x587D,0x3770,0x5777,0x587E,0x587A,0x5921, -0x4463, 0, 0,0x5336,0x5874,0x595D, 0,0x587B, - 0,0x4565, 0, 0,0x4050, 0, 0,0x5170, -0x305B, 0, 0,0x3C51,0x5926, 0,0x5925, 0, - 0, 0, 0,0x592C,0x592E, 0,0x592B,0x4A39, - 0, 0, 0,0x5929,0x5636, 0, 0, 0, -0x335E,0x5928, 0,0x407D, 0,0x4A4C, 0,0x592A, - 0,0x5927, 0, 0,0x5930, 0, 0,0x3631, - 0, 0, 0,0x3929, 0,0x5240, 0, 0, -0x4F40, 0, 0,0x4242, 0,0x3D44,0x556C,0x3260, -0x4748,0x3F6B,0x592D, 0,0x592F, 0,0x4E6A,0x3A6E, - 0, 0, 0, 0, 0,0x4756, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x3163, - 0, 0, 0,0x3459,0x366D,0x5934, 0, 0, - 0, 0,0x3F21, 0, 0, 0,0x595E,0x474E, -0x407E,0x5938, 0, 0, 0, 0, 0,0x4B57, -0x377D, 0,0x5935, 0,0x5937,0x3123,0x5361,0x5939, - 0,0x5045, 0,0x5936, 0, 0,0x5931, 0, -0x5932,0x4129,0x5933, 0, 0,0x3C73,0x505E,0x3829, - 0,0x3E63, 0,0x593D, 0, 0, 0, 0, -0x593A, 0,0x3033, 0, 0, 0,0x5942, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x5944,0x3136, 0,0x593F, - 0, 0,0x3539, 0,0x3E73, 0, 0, 0, -0x4C48,0x3A72,0x5250, 0,0x5943, 0, 0,0x3D68, - 0,0x332B, 0, 0, 0,0x5945,0x3E6B, 0, -0x5946,0x593B,0x445F, 0,0x593E,0x5941,0x5940, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x552E, 0,0x5635, 0,0x4763, 0, - 0, 0, 0,0x5948, 0, 0, 0,0x3C59, -0x594A, 0, 0, 0,0x593C, 0,0x594B,0x462B, - 0, 0, 0, 0, 0,0x5949, 0, 0, - 0, 0,0x5776, 0,0x4D23, 0, 0, 0, - 0, 0, 0, 0, 0,0x3D21, 0, 0, - 0, 0, 0, 0,0x594C, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x453C,0x4D35, - 0, 0, 0,0x594D, 0, 0,0x5947,0x3325, -0x3F7E, 0, 0, 0, 0,0x3835, 0, 0, -0x407C, 0, 0, 0, 0,0x3078, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x3476, 0,0x594E, 0,0x594F, -0x3422,0x5950, 0, 0,0x345F, 0, 0, 0, - 0, 0,0x3041, 0, 0, 0, 0, 0, - 0, 0,0x5951,0x4935, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x4F71, - 0, 0, 0, 0, 0, 0,0x5952, 0, - 0, 0,0x4145, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x5956,0x492E, - 0, 0, 0, 0,0x5955,0x5954,0x5957, 0, - 0, 0, 0,0x4B5B, 0,0x3D29, 0, 0, - 0, 0, 0,0x4627, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x5953,0x5958, - 0, 0, 0,0x5959, 0, 0, 0, 0, - 0, 0,0x4865, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x405C, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x3679, -0x5823,0x544A, 0,0x542A,0x5056,0x3364,0x5557, 0, -0x4F48,0x3962, 0,0x3F4B, 0,0x4362, 0, 0, - 0,0x3652, 0, 0,0x4D43,0x596E,0x5970, 0, - 0, 0,0x3533, 0,0x3635, 0, 0, 0, - 0, 0,0x3E24, 0, 0,0x486B, 0, 0, -0x482B, 0, 0,0x304B,0x392B,0x4179,0x5962, 0, -0x403C,0x3932, 0,0x3958,0x504B,0x3178,0x4664,0x3E5F, -0x3564,0x5748, 0,0x5178,0x3C66,0x4A5E, 0, 0, -0x3C3D,0x5966,0x5867, 0, 0,0x445A, 0, 0, -0x3854,0x483D, 0, 0,0x3261,0x5459, 0, 0, - 0, 0,0x4330, 0, 0,0x4361,0x5A22,0x485F, - 0,0x5034, 0,0x3E7C,0x4529, 0, 0, 0, -0x395A, 0,0x5A23, 0,0x5429,0x5A24, 0, 0, - 0, 0, 0,0x597B,0x362C, 0, 0,0x376B, -0x3179,0x597C,0x3365,0x3E76, 0,0x3F76,0x5231,0x4064, - 0, 0, 0,0x3633,0x597E,0x597D, 0, 0, -0x3E3B, 0, 0, 0,0x4660, 0,0x573C,0x5A21, - 0,0x4139, 0,0x3572,0x4168, 0, 0,0x3C75, - 0,0x3455, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x415D, 0,0x447D, 0, 0, -0x3C38,0x3732, 0, 0,0x376F, 0, 0, 0, - 0, 0, 0,0x596C, 0,0x463E, 0,0x3F2D, -0x3B4B, 0, 0,0x354A, 0,0x5B49,0x5057, 0, -0x4D39,0x303C,0x3376,0x3B77,0x5B4A,0x3A2F, 0,0x5464, -0x3536,0x3573,0x5856,0x4850, 0, 0,0x3756,0x4750, -0x5857, 0,0x3F2F, 0, 0,0x5B3B,0x5858, 0, - 0,0x504C,0x3B2E, 0, 0, 0,0x6B3E,0x4150, -0x4175,0x5472,0x3855,0x3434, 0,0x3375, 0, 0, -0x493E, 0, 0, 0,0x4550, 0, 0, 0, -0x4559,0x407B, 0,0x3170, 0,0x5859,0x394E, 0, -0x353D, 0, 0,0x585A, 0, 0,0x5646,0x4B22, -0x482F,0x4932,0x344C,0x3F4C, 0,0x3974, 0,0x585B, -0x585C,0x3667,0x3C41,0x4C6A, 0, 0, 0, 0, - 0, 0,0x4F77, 0,0x585D,0x4730, 0, 0, -0x3950,0x3D23, 0, 0,0x4C5E, 0,0x464A, 0, - 0, 0, 0, 0,0x5860, 0,0x585E, 0, - 0,0x585F, 0, 0, 0,0x307E, 0,0x3E67, - 0,0x4A23,0x3C74, 0, 0, 0, 0,0x3831, - 0, 0,0x386E, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x5862, 0,0x3D4B, - 0,0x5864,0x5863, 0, 0, 0, 0, 0, -0x457C, 0, 0, 0, 0, 0, 0, 0, -0x5865, 0, 0,0x5866, 0, 0, 0, 0, - 0, 0, 0,0x4126, 0,0x4830,0x306C,0x3926, -0x3C53,0x4E71,0x5B3D,0x4153, 0, 0, 0, 0, -0x362F,0x567A,0x452C,0x3D59,0x5B3E,0x5B3F, 0, 0, - 0,0x4078,0x3E22,0x404D, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x5B40,0x4A46, - 0, 0, 0,0x322A, 0, 0, 0,0x5342, - 0,0x4363, 0,0x512B, 0, 0, 0, 0, -0x5B42, 0,0x4055, 0, 0, 0,0x5B43, 0, -0x3F31, 0, 0, 0, 0, 0, 0,0x443C, - 0, 0, 0, 0,0x475A, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5B44, 0, 0, 0, 0, 0, 0, 0, - 0,0x5968,0x4957, 0, 0, 0,0x3934,0x4E70, -0x5448, 0, 0, 0, 0,0x307C,0x3452, 0, -0x5059, 0, 0, 0, 0,0x5969, 0,0x5E4B, -0x596B, 0, 0, 0, 0,0x5830,0x3B2F,0x3131, - 0,0x3357,0x584E, 0, 0,0x5451, 0, 0, -0x3D33,0x3F6F, 0,0x4F3B, 0, 0,0x5850, 0, - 0, 0,0x374B, 0, 0, 0,0x5851, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x4625,0x4778,0x523D, 0, 0,0x5852,0x4464, - 0,0x4A2E, 0,0x4727, 0,0x5826, 0,0x497D, -0x4E67,0x3B5C,0x306B, 0, 0, 0,0x3B2A,0x502D, - 0,0x3130,0x5764,0x573F, 0,0x3525,0x4274,0x444F, - 0, 0,0x3229, 0,0x3237, 0,0x3165,0x5F32, -0x553C,0x3F28,0x422C,0x5855,0x4231, 0,0x5854,0x4E54, - 0,0x5A60, 0,0x4E40, 0, 0,0x5834,0x432E, -0x5321,0x4E23, 0,0x3C34,0x4834,0x4251, 0,0x3E6D, -0x5036, 0,0x5A61, 0, 0, 0, 0,0x4764, - 0, 0,0x3327, 0,0x3672,0x4C7C,0x407A, 0, - 0,0x4077, 0,0x5139,0x5161,0x5847, 0, 0, - 0, 0, 0, 0, 0,0x325E, 0, 0, -0x4065, 0,0x3A71, 0, 0,0x5848, 0,0x542D, - 0, 0,0x4F61,0x5849, 0,0x584A,0x4F43, 0, -0x3378,0x3E47, 0, 0, 0, 0,0x584B, 0, - 0, 0, 0, 0, 0, 0,0x5B4C, 0, - 0, 0, 0,0x4825, 0, 0, 0,0x4F58, - 0,0x487E,0x324E, 0, 0, 0, 0, 0, -0x5356,0x3266,0x3C30,0x5351,0x4B2B,0x3734, 0, 0, - 0,0x3722, 0, 0,0x4A65, 0,0x4821,0x4A5C, -0x3164,0x5070, 0,0x4551, 0, 0, 0,0x5B45, -0x357E, 0, 0,0x3F5A,0x3945,0x3E64,0x416D, 0, -0x5F36,0x5F35,0x563B,0x3D50,0x5559,0x3048,0x3623,0x3F49, -0x4C28,0x5F33,0x4A37,0x5352, 0,0x584F,0x5236,0x3A45, -0x4B3E,0x4C3E, 0,0x5F37,0x3570,0x5F34, 0, 0, - 0,0x5375, 0,0x3354,0x3877, 0,0x5F3A, 0, -0x3A4F,0x3C2A,0x3575, 0,0x4D2C,0x437B,0x3A73,0x4074, -0x4D42,0x4F72,0x5F38,0x4F45, 0,0x4240,0x5F39,0x4270, - 0, 0, 0,0x3E7D, 0,0x415F,0x4D4C,0x5277, -0x374D,0x5F41, 0,0x5F44, 0, 0,0x3771,0x3049, -0x3656,0x3754, 0,0x3A2C,0x4C7D,0x3F54,0x4B31,0x4674, - 0,0x5628,0x5F45, 0,0x4E62,0x3333, 0, 0, -0x4E7C,0x3435, 0,0x4E47,0x3A70, 0,0x4E61, 0, -0x513D, 0, 0,0x5F40, 0, 0,0x3474, 0, -0x334A, 0,0x3866,0x5F3B, 0, 0, 0, 0, -0x4445, 0,0x5F3C,0x5F3D,0x5F3E,0x453B,0x5F3F,0x5F42, -0x5431,0x5F43, 0,0x473A,0x4E58, 0, 0, 0, - 0, 0,0x4458, 0,0x5F4A, 0,0x5F4F, 0, -0x565C, 0, 0, 0, 0, 0, 0, 0, - 0,0x5F49,0x5F5A,0x4E36, 0,0x3A47,0x5F4E,0x5F48, -0x455E, 0, 0,0x496B,0x3A74,0x437C, 0, 0, -0x3E57, 0,0x5F46, 0,0x5F4D, 0,0x4558, 0, - 0, 0, 0,0x5526,0x3A4D, 0,0x3E4C,0x533D, -0x3840, 0,0x5664, 0,0x5F47,0x393E,0x3F27, 0, - 0,0x417C,0x5F4B,0x5F4C, 0,0x5F50, 0, 0, - 0, 0, 0,0x5F5B,0x5F65, 0,0x5F57,0x5F56, -0x5749,0x5F63,0x5F64,0x656B,0x5227,0x5F52, 0,0x3F29, - 0,0x545B, 0,0x3F48,0x5F54, 0, 0, 0, -0x4F4C, 0, 0,0x5F5D, 0,0x514A, 0,0x5F5E, -0x3027,0x4637,0x5F53, 0,0x3A65, 0,0x365F,0x4D5B, -0x397E,0x5455, 0, 0,0x5F5F,0x4F6C,0x3025,0x5F67, -0x5F51,0x5146,0x5F55,0x5F58,0x5F59,0x5F5C, 0,0x3B29, - 0,0x5F60,0x5F61, 0,0x5F62,0x5F66,0x5F68,0x5334, - 0, 0, 0, 0, 0,0x3867,0x4536,0x5F6A, -0x495A,0x4128,0x4444, 0, 0,0x3F5E,0x4F78, 0, - 0, 0,0x555C,0x5F6E, 0, 0, 0, 0, - 0, 0,0x3238, 0,0x3A5F,0x5F6C, 0,0x5B41, - 0,0x5164, 0, 0, 0, 0,0x4B74,0x343D, - 0,0x3026, 0, 0, 0, 0, 0,0x5F71, -0x4C46,0x5F72, 0, 0,0x5F6D, 0, 0, 0, - 0, 0, 0,0x5F69, 0, 0, 0, 0, -0x5F6B, 0,0x5F6F,0x5F70,0x3B3D, 0, 0,0x5F73, - 0, 0,0x5F74, 0,0x3B23, 0,0x4A5B,0x4E28, -0x6027,0x332A, 0,0x6026, 0, 0, 0,0x6021, - 0, 0, 0, 0,0x5F7E, 0,0x4D59,0x5F7C, - 0,0x5F7A, 0,0x3F50,0x5744, 0,0x494C, 0, - 0,0x5F78,0x3021, 0, 0, 0, 0, 0, -0x5F7D, 0, 0, 0, 0,0x5F7B,0x6022, 0, - 0, 0, 0, 0,0x6028, 0, 0, 0, - 0,0x3748, 0, 0,0x4621,0x4936,0x4032,0x5F75, - 0, 0,0x453E, 0,0x5844,0x5F79,0x4476, 0, - 0, 0, 0, 0, 0,0x6023,0x6024,0x6025, -0x5025, 0, 0,0x6034,0x4C64, 0,0x6031, 0, -0x3F26,0x602F,0x4E39,0x602B,0x4946, 0, 0,0x402E, -0x602E,0x3A6D,0x3A30,0x6029, 0, 0, 0,0x5F76, - 0,0x6033, 0, 0,0x6038, 0, 0, 0, -0x342D,0x6039, 0, 0,0x4F32,0x3A48, 0,0x6030, - 0, 0, 0, 0, 0, 0, 0,0x507A, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x602C, 0,0x547B, 0,0x5F77, 0,0x4567, - 0,0x602D, 0,0x5377, 0,0x6036,0x6037, 0, - 0, 0, 0, 0,0x6044,0x5061, 0, 0, - 0,0x603C, 0, 0,0x6049,0x604A, 0, 0, - 0,0x603E,0x602A,0x4924,0x6041, 0,0x6032, 0, - 0, 0, 0, 0,0x4A48,0x6043, 0,0x6035, - 0,0x4E4B, 0,0x4B43,0x604D,0x6046,0x6042, 0, -0x604B, 0,0x603A,0x603F,0x6040, 0, 0,0x6045, - 0, 0,0x6047,0x6048, 0,0x604C, 0,0x603B, - 0, 0, 0, 0, 0,0x4B54,0x6055, 0, -0x6056,0x6052, 0, 0, 0, 0, 0, 0, -0x6050,0x3C4E, 0, 0,0x6051, 0,0x3842,0x5845, - 0, 0, 0, 0, 0, 0, 0, 0, -0x506A, 0, 0,0x426F, 0, 0,0x604F,0x603D, - 0, 0, 0,0x6054,0x6053, 0, 0,0x6057, - 0, 0, 0, 0,0x605C,0x6058, 0, 0, - 0,0x5676,0x3330, 0,0x576C, 0,0x4B3B, 0, - 0,0x605A, 0,0x4E7B, 0, 0, 0,0x3A59, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x6061,0x605D,0x522D, 0, - 0, 0, 0, 0,0x6062, 0, 0,0x605B, -0x6059,0x605F, 0, 0,0x6060, 0, 0, 0, - 0, 0,0x605E, 0,0x6064, 0, 0, 0, -0x4677,0x582C,0x546B,0x6066,0x4A49, 0, 0, 0, - 0,0x6065, 0, 0, 0, 0,0x3841, 0, - 0, 0, 0,0x6067,0x6068, 0, 0, 0, - 0, 0, 0, 0, 0,0x6069,0x6063, 0, - 0, 0, 0, 0, 0, 0,0x3A3F,0x4C67, - 0, 0, 0,0x606A, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x4F79, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x606B, - 0, 0, 0, 0, 0, 0, 0,0x4842, - 0, 0, 0, 0,0x3D40, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x4452, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x606C, 0, 0,0x606D, - 0, 0,0x4774,0x4B44, 0,0x606E,0x3B58,0x5836, -0x5272,0x606F,0x4D45, 0,0x365A, 0, 0, 0, - 0, 0, 0,0x6071, 0,0x5430, 0, 0, -0x4027,0x3451, 0, 0,0x4E27,0x6070, 0, 0, - 0,0x6072,0x394C, 0, 0,0x397A,0x4D3C,0x6073, - 0, 0, 0,0x4654,0x6074, 0,0x5432, 0, -0x4826,0x6076,0x6075, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x6077, 0, 0,0x4D41, - 0, 0, 0,0x4A25, 0, 0, 0, 0, -0x545A,0x5B57,0x5B59, 0,0x5B58,0x3967,0x5B5C,0x5B5D, -0x3558, 0, 0,0x5B5A, 0, 0, 0, 0, - 0,0x5B5B,0x3321,0x5B5F, 0, 0,0x3B78, 0, -0x5637, 0,0x5B60, 0, 0, 0, 0,0x3E79, - 0, 0,0x373B, 0,0x5B50,0x4C2E,0x3F32,0x3B35, -0x5778,0x3F53, 0, 0, 0, 0, 0,0x3F69, - 0, 0,0x3C61,0x4C33,0x5B5E,0x3053,0x4E6B,0x3758, -0x5739,0x4642, 0, 0,0x4024, 0,0x4C39, 0, -0x5B67,0x5B61,0x463A,0x5B63, 0,0x5B68, 0,0x4577, - 0, 0, 0,0x5B6A, 0, 0,0x5B69,0x3F40, - 0, 0, 0,0x5B66,0x5B65, 0, 0, 0, - 0, 0,0x3439,0x402C,0x4222,0x5B62,0x5B64, 0, - 0, 0, 0,0x504D,0x5B6D, 0, 0, 0, - 0, 0,0x405D,0x5B72, 0, 0, 0, 0, - 0, 0, 0,0x3662, 0, 0, 0, 0, -0x5B73,0x5B52,0x3938,0x542B,0x5B6C, 0,0x3F51,0x5B70, - 0,0x5B51, 0,0x3566, 0,0x5B6B,0x3F65, 0, - 0, 0,0x5B6E, 0,0x5B71, 0, 0, 0, -0x5B79, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x3921,0x3023, 0, 0, 0, 0, - 0, 0, 0,0x4271, 0, 0,0x3347,0x5B6F, - 0, 0,0x5B78, 0,0x4652,0x5B74, 0, 0, -0x5B75,0x5B77,0x5B76, 0, 0,0x5B7E, 0,0x5372, -0x323A, 0, 0, 0,0x5B7D, 0, 0, 0, - 0, 0, 0, 0, 0,0x5C24, 0,0x5B7B, - 0, 0, 0, 0,0x5B7A, 0, 0, 0, -0x5B7C,0x4560,0x3B79, 0, 0,0x5C23, 0, 0, -0x5C25, 0,0x4C43, 0, 0, 0,0x3651,0x5D40, - 0, 0, 0,0x5C21, 0,0x5C22, 0, 0, - 0,0x4735, 0, 0, 0,0x3669, 0, 0, - 0,0x5C27, 0, 0, 0, 0,0x5C26, 0, -0x5C29,0x3124, 0, 0,0x354C, 0, 0, 0, - 0, 0,0x3F30, 0, 0, 0, 0, 0, -0x515F, 0, 0, 0, 0,0x3642, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x5C28, 0, 0, 0, - 0, 0, 0, 0,0x4B7A,0x6B73, 0, 0, - 0,0x4B5C, 0, 0,0x4B7E, 0, 0, 0, -0x4C41, 0, 0, 0, 0, 0,0x487B, 0, - 0, 0, 0, 0, 0,0x5C2A, 0, 0, - 0, 0, 0,0x4C6E,0x5C2B, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x5B53, 0, -0x5C2F,0x5C2C, 0,0x3E33, 0,0x4A7B, 0, 0, - 0,0x5C2D, 0, 0, 0, 0, 0, 0, - 0, 0,0x494A,0x4439, 0, 0, 0, 0, - 0,0x473D,0x5C2E, 0, 0, 0,0x5476,0x5066, - 0, 0, 0, 0, 0, 0, 0, 0, -0x442B,0x3655, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x5B54, 0, 0, 0, - 0,0x315A, 0, 0, 0,0x5B55, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x5B56, 0, 0, 0,0x3A3E, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x4840, 0, 0, 0, - 0, 0, 0,0x4A3F,0x4849, 0,0x5733, 0, -0x4979, 0, 0,0x3F47, 0, 0,0x3A78, 0, - 0,0x523C, 0, 0, 0, 0, 0, 0, - 0, 0,0x623A, 0,0x3426, 0, 0,0x3138, - 0, 0, 0, 0, 0,0x3834, 0,0x4F44, - 0, 0, 0, 0,0x5967,0x4F26,0x4D62, 0, - 0,0x596D,0x3660, 0,0x5239, 0, 0,0x393B, - 0, 0, 0, 0,0x6239,0x6237, 0,0x3473, - 0,0x4C6C,0x4C2B,0x3772, 0,0x5832,0x516B,0x3A3B, - 0,0x4A27, 0, 0,0x4D37, 0, 0,0x5244, -0x3F64,0x3C50,0x3661, 0,0x5E45, 0, 0, 0, - 0,0x5E46,0x5B3C, 0,0x5159, 0, 0,0x4666, -0x444E,0x376E, 0,0x375C, 0, 0,0x3F7C,0x5760, - 0,0x4675, 0, 0,0x313C,0x5E48,0x3D31,0x4C57, -0x5E4A, 0,0x5E49, 0, 0, 0, 0, 0, -0x356C, 0,0x495D, 0, 0,0x3042, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x452E,0x452B, 0,0x444C, 0, -0x3C69,0x4B7D, 0, 0, 0,0x3A43, 0, 0, - 0,0x6579,0x4867,0x657A,0x4D7D, 0,0x5731,0x383E, -0x4268, 0,0x4851, 0, 0,0x657B, 0, 0, - 0, 0,0x364A,0x3C4B, 0, 0,0x517D,0x6621, - 0,0x436E, 0, 0, 0, 0,0x6624, 0, - 0, 0, 0,0x657E,0x6625,0x4D57, 0, 0, -0x3741,0x657C,0x657D,0x6623, 0, 0,0x445D,0x6628, - 0, 0,0x6627, 0, 0, 0, 0, 0, - 0,0x4343, 0,0x465E, 0, 0,0x662A, 0, - 0, 0, 0, 0, 0, 0,0x4437, 0, - 0, 0,0x6622,0x4A3C, 0, 0, 0, 0, -0x3D63,0x3943,0x6626,0x5055,0x4E2F, 0, 0,0x6629, -0x6630, 0,0x5226, 0,0x3D2A,0x662D, 0, 0, - 0, 0, 0,0x662F, 0,0x4051, 0, 0, -0x524C, 0, 0, 0,0x3C27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6631, 0,0x5276, 0, 0, 0,0x574B, - 0,0x4D7E, 0,0x4D5E,0x4226,0x662B,0x662C,0x3D3F, -0x662E,0x6633, 0, 0,0x6632, 0, 0, 0, - 0,0x6636, 0,0x6638, 0, 0, 0, 0, -0x446F, 0, 0, 0,0x4448, 0, 0,0x3E6A, -0x496F, 0, 0,0x6637, 0,0x3670, 0, 0, - 0,0x4364, 0, 0, 0, 0, 0, 0, - 0,0x5369,0x6634, 0,0x6635, 0,0x4822, 0, - 0, 0, 0, 0,0x663D, 0, 0, 0, -0x6639, 0, 0, 0, 0, 0,0x4645, 0, - 0,0x4D71,0x663B, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x663C, 0, 0, - 0, 0,0x3B69, 0, 0, 0, 0, 0, - 0, 0,0x663E, 0, 0, 0, 0,0x663A, - 0, 0,0x4037, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x5324,0x663F,0x4974,0x6643, - 0, 0,0x6644, 0, 0, 0, 0,0x5076, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x433D, 0, 0, 0, 0, 0, - 0, 0,0x4344,0x6642, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x6641, 0, 0, 0, 0, 0, - 0, 0,0x6647,0x4F31, 0,0x6B74, 0, 0, -0x664A, 0, 0, 0, 0, 0,0x6645, 0, - 0,0x3C5E,0x4929, 0, 0, 0, 0, 0, - 0,0x3C35, 0, 0,0x4F53, 0, 0, 0, - 0, 0,0x6648, 0,0x6649, 0,0x664E, 0, -0x6650, 0, 0, 0,0x6651, 0, 0, 0, -0x664B,0x3555, 0,0x664C, 0, 0,0x664F, 0, - 0,0x445B, 0,0x6646, 0, 0, 0, 0, - 0,0x664D, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6652, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x6654,0x6653, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x6655, 0,0x5978, 0, 0,0x6656, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6657, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5753,0x665D, 0,0x665E,0x3F57,0x5450, 0,0x5756, -0x3466,0x4B6F,0x665A,0x5843,0x574E,0x5022, 0,0x434F, - 0, 0,0x665F,0x3C3E,0x3942,0x665B,0x5127, 0, - 0,0x3A22,0x424F, 0,0x582B, 0, 0, 0, -0x4A6B,0x656E, 0,0x665C, 0,0x3775, 0, 0, - 0, 0,0x4866, 0, 0,0x4475, 0, 0, -0x6532,0x447E, 0,0x4B7C,0x6533,0x552C, 0,0x536E, -0x4A58,0x3032, 0,0x4B4E,0x4D6A, 0, 0,0x3A6A, - 0, 0, 0,0x6535, 0,0x6534, 0,0x575A, -0x3959,0x5666,0x3628,0x4D70,0x524B,0x3126,0x4A35, 0, -0x3368,0x4973,0x3F4D,0x507B,0x4A52,0x6536,0x3B42, 0, - 0, 0,0x4F5C,0x392C, 0, 0, 0, 0, -0x5457, 0, 0,0x3A26,0x5167,0x4F7C,0x3C52, 0, -0x6537,0x485D, 0, 0, 0,0x3F6D,0x3176,0x4B5E, - 0, 0,0x3C45, 0,0x3C44,0x527A,0x435C,0x3F5C, - 0, 0, 0, 0,0x383B, 0, 0, 0, -0x4342, 0,0x3A2E,0x5422, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x475E,0x442F,0x326C, - 0,0x3951, 0, 0,0x653B,0x4148, 0, 0, -0x552F, 0, 0, 0, 0, 0,0x653C, 0, -0x653E, 0, 0, 0, 0, 0, 0, 0, -0x3467,0x3654,0x4B42,0x5130,0x353C, 0, 0,0x4A59, - 0,0x3762, 0, 0,0x4964, 0,0x3D2B, 0, - 0,0x4E3E,0x5770, 0, 0, 0, 0,0x5021, - 0,0x4959, 0, 0,0x367B,0x6658,0x3C62, 0, -0x333E, 0,0x4950, 0,0x6659,0x3322, 0, 0, - 0, 0,0x5E4C, 0,0x5348,0x5E4D, 0,0x5222, - 0, 0, 0, 0,0x5E4E, 0, 0, 0, - 0,0x3E4D, 0, 0,0x5E4F, 0, 0, 0, -0x4A2C,0x527C,0x335F,0x656A,0x4461,0x3E21,0x4E32,0x4472, -0x3E56,0x4628,0x3263, 0, 0,0x3E53, 0, 0, -0x477C,0x4C6B,0x3D6C,0x4E5D, 0, 0,0x4A3A,0x4641, -0x656C,0x503C, 0, 0, 0,0x5539, 0, 0, - 0,0x656D, 0, 0, 0, 0,0x4A74, 0, -0x4D40,0x4245, 0,0x656F, 0,0x4244,0x6570, 0, - 0, 0, 0, 0, 0, 0,0x6578,0x4D4D, - 0,0x493D, 0, 0, 0, 0, 0, 0, - 0,0x5259,0x6128, 0, 0, 0, 0,0x536C, - 0,0x4B6A,0x4671, 0, 0, 0, 0, 0, -0x612C, 0, 0, 0,0x6127,0x6129, 0, 0, -0x612A,0x612F, 0, 0,0x326D, 0,0x612B,0x385A, -0x612D,0x612E,0x6130,0x353A,0x6131, 0, 0, 0, - 0, 0,0x6133,0x6138, 0, 0, 0, 0, - 0,0x5152, 0,0x6136,0x6135,0x416B, 0, 0, - 0,0x6137, 0,0x5440, 0,0x6132, 0,0x613A, -0x3036, 0, 0, 0, 0,0x6134, 0,0x3F79, - 0,0x6139, 0, 0,0x613B, 0, 0, 0, - 0, 0, 0,0x613E, 0, 0, 0, 0, - 0, 0,0x613C, 0, 0, 0, 0, 0, - 0,0x5645, 0, 0, 0, 0, 0, 0, - 0,0x4F3F, 0, 0,0x613D,0x613F,0x424D, 0, -0x366B, 0,0x5378, 0, 0,0x474D, 0, 0, -0x3765, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x3E7E, 0, 0, 0, 0, - 0, 0,0x6140,0x6141, 0, 0,0x6147,0x3367, - 0, 0, 0, 0, 0, 0,0x4669, 0, - 0, 0, 0, 0,0x345E, 0,0x5142, 0, - 0, 0, 0,0x6148, 0, 0,0x6146, 0, - 0, 0, 0, 0,0x6145, 0,0x6143,0x6142, - 0,0x3140, 0, 0, 0,0x5538,0x6144, 0, - 0, 0, 0, 0,0x614B, 0, 0, 0, - 0, 0, 0, 0, 0,0x614C,0x614A, 0, - 0, 0, 0, 0, 0, 0, 0,0x6F7A, - 0, 0,0x6153,0x6152,0x4736, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6149, 0, 0,0x614E, 0,0x6150, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6154, 0,0x6151,0x614D, 0, 0,0x614F, - 0, 0, 0, 0,0x6155, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x6156, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6157, 0, 0, 0,0x6158, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x615A, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x615B, 0, 0, - 0, 0, 0, 0, 0,0x4E21, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x675D, 0,0x3428,0x565D, 0, - 0,0x5132,0x3332, 0, 0,0x3924,0x5773,0x4749, -0x3E5E,0x392E, 0,0x4E57, 0, 0,0x326E,0x5B4F, - 0,0x3C3A,0x5251,0x4B48,0x304D, 0, 0,0x4F6F, - 0, 0, 0, 0, 0,0x5963,0x3D6D, 0, - 0,0x3152,0x4A50,0x323C, 0,0x4B27,0x372B, 0, -0x4A26, 0, 0, 0,0x4F23, 0, 0,0x6078, -0x554A,0x607B, 0, 0,0x607A,0x4541,0x4C7B, 0, -0x4131,0x6079,0x5663,0x322F,0x5644,0x355B, 0, 0, - 0, 0, 0, 0, 0, 0,0x3478,0x5621, - 0, 0, 0, 0, 0,0x4F2F,0x306F, 0, - 0,0x607C, 0, 0, 0, 0, 0,0x6121, -0x3323, 0, 0,0x607D,0x607E,0x4331, 0, 0, - 0, 0,0x435D, 0,0x6122,0x3779, 0, 0, - 0, 0, 0, 0,0x3B4F, 0, 0, 0, - 0, 0, 0, 0,0x6123,0x443B, 0, 0, - 0, 0, 0,0x6124, 0, 0,0x6125, 0, - 0,0x6126,0x3431, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x3849,0x463D,0x446A, 0,0x3222, 0, -0x5052, 0,0x675B,0x3B43,0x5357,0x5344, 0,0x3963, -0x624F, 0, 0, 0,0x572F, 0,0x476C,0x3153, - 0, 0,0x3432,0x6251, 0, 0, 0,0x5072, -0x422E,0x6250, 0,0x3F62,0x5326,0x3557,0x6252,0x356A, - 0,0x436D,0x387D, 0,0x382E, 0,0x4553,0x374F, -0x6254, 0, 0, 0, 0,0x6253,0x3648,0x5779, - 0, 0, 0, 0, 0,0x4D25, 0, 0, - 0, 0, 0,0x6258, 0,0x6256,0x4A7C,0x3F35, -0x5339,0x6255, 0, 0, 0, 0,0x6257, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x412E,0x4048, 0, 0, 0, 0, 0, - 0,0x625B,0x625A,0x402A, 0, 0,0x414E, 0, - 0, 0, 0,0x625C, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x625D, 0,0x625E, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x5B48, 0,0x5153,0x4D22, - 0, 0,0x3D28, 0, 0, 0,0x5E43,0x5825, -0x3F2A,0x5B4D,0x526C,0x467A,0x452A, 0, 0, 0, -0x5E44, 0,0x3157,0x5F2E, 0, 0, 0,0x4A3D, - 0,0x5F31, 0,0x392D, 0,0x527D, 0,0x3825, -0x3A6B, 0, 0,0x335A, 0, 0, 0,0x355C, -0x5545, 0, 0, 0, 0,0x4356,0x4F52,0x3B21, - 0,0x6573,0x6572, 0, 0,0x6574, 0,0x4D64, - 0,0x4875, 0, 0, 0, 0, 0, 0, - 0,0x352F,0x473F, 0,0x6576, 0, 0, 0, -0x6C30, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6566, 0,0x3969,0x3531, 0,0x423C,0x6568,0x6567, -0x6569, 0, 0, 0, 0,0x524D, 0, 0, - 0,0x616A,0x504E, 0,0x4D2E, 0,0x5165, 0, - 0,0x324A,0x316B, 0,0x3172,0x456D, 0, 0, -0x5543,0x5330, 0,0x615C, 0, 0, 0,0x615D, - 0,0x525B, 0,0x3339,0x314B, 0, 0, 0, -0x4D79,0x5577,0x615E, 0,0x3E36,0x347D, 0,0x615F, -0x3A5C,0x6160,0x3B32,0x4249,0x6161, 0, 0, 0, -0x506C, 0,0x4D3D, 0, 0,0x6162, 0,0x3543, -0x4547,0x6163, 0, 0,0x6164, 0, 0, 0, - 0,0x5379, 0, 0, 0, 0, 0, 0, -0x6165, 0,0x512D, 0, 0,0x6166,0x4E22, 0, - 0, 0, 0, 0, 0,0x6167, 0,0x3542, - 0, 0, 0, 0,0x6168,0x3B55, 0, 0, - 0, 0, 0,0x5044,0x6260,0x3158,0x5264, 0, - 0,0x6261, 0, 0,0x3C49,0x484C, 0,0x6263, -0x6C7E,0x6C7D,0x5F2F, 0, 0, 0,0x6262,0x563E, -0x4D7C,0x4326, 0, 0, 0,0x6343, 0, 0, -0x5652,0x6267, 0, 0,0x6268, 0, 0,0x5347, - 0, 0,0x626C,0x3F6C, 0,0x626D,0x6265, 0, - 0,0x3340, 0, 0, 0,0x446E, 0, 0, -0x626E, 0, 0,0x5043, 0,0x3A76,0x6269,0x375E, -0x3B33,0x4C2C,0x4B4B,0x6264,0x6266,0x626A,0x626B, 0, - 0, 0,0x6277, 0, 0,0x6274,0x5475,0x6273, - 0, 0,0x452D, 0,0x557A,0x4542,0x3240, 0, - 0,0x626F, 0,0x6272,0x412F,0x4B3C, 0, 0, -0x3521,0x6279, 0, 0, 0,0x3C31,0x6271,0x5054, -0x5439,0x6275,0x3956,0x6276, 0, 0, 0,0x4753, - 0, 0, 0, 0, 0,0x6270, 0, 0, - 0, 0, 0,0x575C,0x6D21, 0, 0,0x6278, - 0,0x6D25,0x627E,0x4A51, 0, 0, 0, 0, - 0, 0, 0,0x4135, 0,0x3B50, 0, 0, -0x3F56, 0,0x3A63, 0, 0,0x4B21, 0, 0, - 0,0x6D26,0x6D23, 0, 0,0x6D22, 0, 0, - 0, 0,0x3B56,0x6D27,0x5074, 0, 0,0x6D24, -0x3A5E,0x3677,0x6321,0x3632,0x4C71,0x3927, 0,0x4F22, -0x4721, 0, 0,0x3F52, 0, 0,0x3671, 0, -0x627A,0x627B,0x627D,0x627C,0x4455,0x6322, 0,0x5341, - 0, 0, 0,0x6327,0x4744, 0, 0, 0, - 0,0x4F24, 0, 0,0x6329,0x3A37, 0, 0, - 0, 0,0x6328, 0,0x3B5A, 0,0x6323, 0, - 0, 0,0x6324,0x632A, 0,0x6326, 0,0x4E72, -0x5346, 0, 0,0x3B3C, 0, 0,0x5443, 0, -0x447A, 0, 0,0x6D28,0x507C,0x6325, 0,0x4375, - 0,0x632D,0x312F, 0,0x6332, 0, 0, 0, -0x3C42, 0, 0,0x632C,0x353F, 0, 0, 0, - 0, 0, 0, 0, 0,0x4769,0x6330, 0, - 0, 0,0x3E2A,0x4D6F, 0, 0, 0, 0, - 0,0x3B73, 0, 0, 0,0x4C68, 0, 0, -0x632F, 0,0x6331, 0,0x4F27,0x632E, 0,0x4E29, -0x3B5D, 0, 0, 0, 0, 0,0x356B,0x3E65, -0x3252,0x334D, 0,0x3139,0x632B,0x3251,0x352C,0x395F, -0x3668, 0, 0,0x4F6B,0x6337, 0,0x3B4C, 0, - 0,0x4847,0x504A, 0, 0, 0, 0, 0, -0x6338,0x336E, 0, 0, 0, 0,0x6D29, 0, -0x537A,0x5364, 0, 0, 0,0x6D2A,0x6339,0x5262, - 0, 0, 0, 0, 0,0x6335, 0, 0, - 0, 0,0x535E, 0, 0, 0, 0,0x3850, -0x6333, 0, 0,0x6336,0x375F, 0,0x6334,0x4022, - 0, 0, 0,0x633A, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x5438, - 0, 0, 0, 0, 0, 0, 0, 0, -0x3448, 0,0x633B, 0,0x3B45, 0,0x4977, 0, - 0,0x4965, 0, 0, 0,0x443D, 0, 0, - 0, 0, 0, 0, 0,0x6D2B, 0, 0, - 0, 0,0x427D, 0, 0, 0, 0,0x3B5B, -0x3F2E, 0, 0, 0, 0, 0, 0, 0, -0x4E3F, 0, 0, 0, 0,0x633C, 0,0x3F36, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x316F, 0, 0,0x5477, 0, - 0, 0, 0, 0,0x633E, 0, 0, 0, - 0, 0, 0, 0, 0,0x6D2D, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x633F, -0x3A29,0x6D2C, 0, 0,0x633D, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x6340, - 0, 0, 0, 0, 0, 0,0x3A36, 0, - 0, 0,0x362E, 0, 0, 0, 0, 0, -0x5038, 0,0x3043,0x6D2E, 0, 0, 0, 0, - 0,0x6D2F,0x4041, 0,0x6341, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x4533, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x6342, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x5C32, - 0, 0, 0, 0, 0, 0,0x6D30, 0, -0x386A, 0,0x4E6C,0x6A27,0x5067,0x4A79,0x4856,0x4F37, -0x3349,0x4E52,0x3D64, 0, 0,0x635E,0x3B72,0x6A28, -0x553D, 0,0x465D,0x6A29, 0, 0, 0,0x6A2A, - 0,0x6A2C,0x6A2B, 0,0x6A2E,0x6A2D, 0, 0, - 0, 0,0x3D58, 0,0x6A2F, 0,0x423E, 0, - 0, 0, 0,0x3441,0x3477, 0, 0,0x3B27, - 0, 0, 0, 0, 0,0x6C66,0x6C65,0x373F, -0x4B79,0x3162, 0,0x6C67, 0, 0, 0,0x4948, -0x6C68,0x6C69, 0,0x4A56,0x5E50,0x3245,0x547A, 0, - 0,0x464B,0x3047,0x3472,0x4853, 0, 0, 0, -0x4D50, 0, 0,0x3F38, 0, 0, 0, 0, - 0, 0, 0,0x3F5B, 0, 0,0x4724,0x5634, - 0,0x4029,0x5E51,0x4928,0x516F,0x4524,0x3067,0x3336, -0x4845, 0, 0,0x3062, 0, 0,0x3776, 0, - 0,0x457A, 0, 0,0x3673, 0,0x5552,0x3350, -0x3C3C, 0, 0, 0,0x332D, 0, 0, 0, - 0,0x3E71,0x3051, 0, 0, 0, 0, 0, - 0,0x5256,0x4A63,0x5725, 0,0x4D36,0x3636,0x3F39, -0x555B, 0,0x3827,0x4557, 0, 0, 0,0x5E52, -0x3F59,0x4255,0x4740, 0,0x3B24,0x3128, 0, 0, -0x456A, 0, 0,0x457B,0x4C27, 0, 0, 0, - 0,0x3127, 0, 0, 0,0x3556, 0, 0, - 0,0x4428, 0,0x5E53,0x513A,0x3369, 0,0x4372, - 0, 0,0x3777, 0,0x5674,0x3523,0x3270,0x4434, -0x4469,0x402D,0x5E54, 0,0x3068,0x4544,0x4160, 0, -0x3955, 0,0x3E5C,0x4D58,0x304E, 0,0x4D4F,0x5E56, -0x3E50,0x573E,0x5E55,0x5550,0x305D, 0, 0,0x4462, - 0, 0,0x4223,0x3C70, 0,0x5335,0x4039,0x4521, -0x3226,0x5471, 0, 0,0x4028,0x4A43,0x5E57,0x557C, - 0,0x3930, 0,0x482D,0x4B29, 0,0x5E59,0x3F3D, - 0, 0, 0, 0,0x4634,0x5727,0x4A30,0x4443, - 0,0x3356,0x3952, 0, 0, 0, 0,0x5638, -0x6A7C,0x3034, 0, 0, 0, 0,0x3F66, 0, - 0,0x4C74, 0, 0, 0, 0,0x4D5A, 0, - 0, 0,0x563F,0x424E, 0,0x4E4E,0x4C22,0x502E, -0x4453,0x3532,0x5E58,0x5575,0x3C37,0x3B53, 0, 0, -0x3024, 0,0x4532,0x346C, 0, 0, 0,0x5571, - 0, 0,0x6A7D, 0, 0, 0, 0, 0, - 0,0x5E5A,0x4D26, 0, 0,0x4D6C, 0, 0, - 0, 0,0x4E66,0x5E5C, 0,0x4D31,0x4026, 0, - 0,0x573D, 0,0x5E5B,0x3046,0x3A34,0x4953,0x4473, -0x3E68, 0, 0, 0, 0,0x3236, 0, 0, - 0, 0, 0, 0, 0, 0,0x404C,0x4B70, - 0,0x3C71,0x3B3B,0x3537, 0, 0, 0,0x4575, - 0,0x5E66, 0, 0, 0,0x5E63,0x3E5D, 0, - 0,0x5E5F, 0, 0, 0, 0,0x3437,0x3D5D, - 0, 0,0x5E60,0x446D, 0, 0, 0, 0, -0x4F46, 0,0x3560, 0, 0, 0, 0,0x365E, -0x4A5A,0x3574,0x5E65, 0,0x5546, 0,0x5E61,0x4C4D, -0x467E, 0,0x4545, 0, 0, 0,0x5234, 0, -0x3E72, 0, 0, 0, 0, 0, 0, 0, -0x4253, 0,0x4C3D,0x3338, 0,0x3D53, 0,0x3F58, -0x4D46,0x515A,0x346B, 0,0x5E64,0x5E5D,0x5E67, 0, -0x6A7E, 0, 0,0x4230,0x5E62, 0, 0,0x5640, -0x3527, 0,0x3274, 0,0x5E68, 0,0x5E72, 0, - 0, 0, 0, 0,0x5E6D, 0,0x5E71, 0, - 0,0x4860, 0, 0, 0,0x5761,0x5E6F,0x4368, -0x4C61, 0,0x3265, 0, 0, 0,0x523E, 0, - 0, 0, 0, 0, 0, 0,0x5E6E, 0, -0x5E6B,0x4E55, 0,0x3427, 0, 0, 0, 0, - 0,0x3F2B,0x3E3E, 0, 0,0x3D52, 0, 0, - 0, 0,0x5E69, 0,0x542E, 0,0x5E5E, 0, -0x5E6A, 0, 0, 0, 0,0x403F, 0,0x5E6C, -0x3273,0x3869,0x4227, 0, 0,0x3D41, 0, 0, - 0, 0, 0,0x5E75,0x5E78, 0, 0,0x322B, -0x3424, 0, 0,0x346A,0x4926, 0, 0, 0, - 0, 0, 0,0x5E76,0x4B51, 0,0x3863, 0, -0x5E77,0x5E7A, 0, 0, 0, 0,0x5E79, 0, - 0, 0,0x4C42, 0,0x3061,0x346E, 0, 0, - 0, 0, 0, 0,0x653A, 0, 0, 0, - 0, 0,0x502F, 0, 0,0x326B, 0,0x6B21, - 0,0x5E74, 0, 0,0x4963,0x5E73,0x305A,0x5221, -0x3177, 0,0x4C2F, 0, 0, 0, 0, 0, - 0, 0,0x5E70, 0,0x4B24, 0, 0, 0, -0x552A, 0, 0, 0, 0, 0,0x5E7B, 0, - 0, 0, 0, 0, 0, 0, 0,0x345D, - 0,0x4426, 0, 0, 0,0x5E7D, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x437E,0x4421,0x5F21, 0, 0, 0, 0, 0, - 0, 0,0x414C, 0,0x5E7C,0x3E6F, 0,0x4632, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x3345,0x4876, 0, 0,0x4B3A,0x5E7E, 0, - 0,0x5F24, 0, 0, 0, 0,0x5732, 0, - 0, 0, 0, 0,0x3337, 0, 0, 0, - 0,0x4143, 0, 0,0x474B,0x3225,0x3469, 0, -0x572B, 0, 0, 0, 0,0x446C, 0,0x5F22, -0x5F23, 0,0x5F25, 0,0x3A33, 0, 0, 0, -0x5F26, 0,0x405E, 0, 0,0x4943, 0, 0, - 0, 0, 0, 0, 0,0x3259,0x4766, 0, -0x5F27, 0,0x475C, 0, 0, 0, 0,0x5F28, -0x6B22, 0, 0, 0, 0, 0,0x4B53, 0, - 0, 0,0x5F2A, 0,0x5F29, 0,0x3241, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x454A, 0, 0, 0, 0, 0, 0, 0, - 0,0x5F2B, 0, 0, 0, 0, 0, 0, - 0, 0,0x545C, 0, 0, 0, 0, 0, -0x4841, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x5F2C, 0, 0, - 0, 0, 0,0x3E70, 0, 0,0x5F2D,0x5627, - 0, 0, 0, 0,0x6A37,0x6B36,0x4A55, 0, -0x587C,0x3844, 0,0x3925, 0, 0,0x3745,0x557E, - 0, 0, 0, 0, 0,0x394A, 0, 0, -0x5027,0x744D, 0, 0,0x3550, 0, 0,0x4374, - 0,0x3E48, 0, 0, 0,0x6B37,0x303D, 0, - 0,0x3D4C, 0,0x4132, 0,0x3156,0x3328, 0, - 0, 0,0x3852,0x4922, 0, 0,0x3658, 0, - 0, 0, 0,0x6B38,0x3E34, 0, 0, 0, -0x4A7D, 0,0x4743, 0,0x557B, 0, 0,0x3773, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x4E44, - 0, 0, 0,0x552B,0x3173, 0, 0, 0, -0x6C33,0x305F, 0,0x6C35, 0, 0, 0,0x3637, - 0,0x414F, 0,0x757A,0x5031, 0, 0,0x5565, - 0,0x4E53, 0, 0,0x3D6F,0x3362, 0,0x382B, - 0,0x5536, 0,0x6D3D, 0,0x364F, 0,0x4B39, -0x5042, 0, 0, 0, 0, 0, 0, 0, - 0,0x373D, 0, 0,0x6C36,0x4A29, 0, 0, - 0,0x4554, 0,0x6C39,0x6C38,0x4243,0x6C37, 0, - 0, 0, 0,0x507D,0x6C3A, 0,0x6C3B,0x5765, - 0, 0,0x6C3C, 0, 0, 0,0x6C3D,0x466C, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4E5E, 0,0x3C48, 0, 0,0x4855,0x3529,0x3E49, -0x563C,0x5467, 0, 0,0x512E,0x5071,0x6A38,0x6A39, -0x6A3A,0x3A35, 0, 0, 0, 0,0x4A31,0x3F75, - 0, 0,0x4D7A, 0, 0, 0, 0, 0, -0x6A40, 0,0x303A,0x6A3E, 0, 0,0x4025, 0, - 0, 0,0x6A3B, 0,0x327D, 0,0x4377,0x3B68, - 0, 0, 0,0x5257,0x4E74,0x6A3F, 0, 0, - 0,0x6A3C, 0, 0, 0,0x6A43, 0,0x5047, -0x5333, 0, 0, 0, 0,0x343A, 0,0x4341, -0x5772, 0, 0, 0, 0,0x5551, 0,0x4A47, - 0,0x6A45, 0, 0,0x6A44,0x6A47,0x6A46, 0, - 0, 0, 0, 0,0x5667, 0,0x4F54, 0, - 0,0x6A4B, 0,0x3B4E, 0, 0, 0, 0, - 0, 0, 0,0x3D7A,0x494E, 0, 0,0x6A4C, - 0, 0,0x4939,0x4F7E,0x6A4A,0x544E,0x6A4D,0x6A4F, - 0, 0,0x4D6D, 0, 0, 0, 0,0x6A49, - 0,0x6A4E, 0, 0,0x4E6E, 0,0x3B5E, 0, -0x333F, 0, 0, 0, 0, 0,0x4655,0x3E30, -0x4E7A, 0, 0, 0,0x4767, 0,0x3E27,0x6A50, - 0, 0,0x5647, 0, 0, 0,0x4140, 0, - 0, 0,0x545D, 0,0x6A51, 0, 0,0x4F3E, - 0, 0, 0, 0,0x6A52, 0, 0, 0, - 0,0x4A6E, 0, 0, 0, 0,0x452F,0x3035, - 0, 0, 0, 0, 0,0x6A54, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x6A53, -0x745F, 0, 0, 0, 0, 0,0x443A, 0, - 0, 0, 0, 0,0x3129, 0, 0, 0, - 0,0x655F, 0, 0, 0, 0,0x6A55, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x4A6F, 0,0x6A56,0x6A57,0x4658, 0, 0, - 0, 0, 0, 0, 0, 0,0x6A58, 0, - 0,0x6A59, 0, 0, 0, 0, 0, 0, -0x543B, 0,0x477A,0x5237,0x387C, 0, 0,0x6A42, - 0,0x325C, 0, 0,0x427C, 0,0x5478,0x4C66, -0x576E, 0, 0, 0, 0, 0, 0, 0, -0x5442,0x5350,0x6B43,0x4573, 0,0x377E, 0, 0, -0x6B54, 0, 0, 0,0x4B37,0x6B5E, 0,0x404A, - 0, 0, 0,0x4D7B, 0,0x332F, 0,0x465A, - 0, 0, 0, 0, 0, 0,0x6B7C, 0, -0x443E, 0,0x4E34,0x4429,0x313E,0x547D, 0,0x4A75, - 0,0x566C, 0, 0,0x4653,0x3664, 0, 0, - 0, 0,0x3B7A, 0, 0,0x5060, 0, 0, -0x4931, 0,0x5453,0x4828, 0, 0,0x384B, 0, -0x683E,0x493C, 0, 0,0x683B, 0,0x406E,0x5053, -0x3244,0x3465, 0,0x683C, 0, 0,0x5548, 0, - 0, 0, 0, 0,0x3645, 0,0x683D,0x4A78, -0x385C,0x4C75, 0, 0, 0,0x4034, 0, 0, -0x516E,0x683F,0x6842, 0, 0,0x3A3C, 0,0x312D, -0x3D5C, 0,0x6A3D,0x6843, 0,0x6846, 0,0x684B, - 0, 0, 0, 0,0x684C, 0,0x4B49,0x3065, - 0,0x3C2B, 0, 0,0x3939, 0, 0,0x6841, - 0,0x4D77, 0,0x684A, 0, 0, 0, 0, -0x4E76, 0, 0, 0, 0,0x556D, 0,0x4156, -0x6844, 0,0x4336, 0,0x397B,0x5626,0x6848, 0, - 0, 0,0x4A60,0x5466, 0,0x6840, 0,0x6845, -0x6847, 0,0x4739,0x3763, 0,0x6849, 0,0x3F5D, -0x6852, 0, 0,0x6857, 0,0x6855,0x3C5C,0x3C4F, -0x685B, 0, 0, 0, 0, 0, 0, 0, - 0,0x685E, 0,0x685A,0x317A, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x3058, -0x4433,0x384C,0x4662,0x483E,0x4861, 0, 0, 0, -0x684F,0x6854,0x6856, 0,0x3971,0x6858,0x5775, 0, -0x447B, 0,0x685C, 0, 0,0x3269, 0, 0, - 0,0x6851, 0, 0,0x3C6D, 0, 0,0x3F42, -0x684D,0x5679, 0,0x4178,0x3271, 0, 0, 0, - 0, 0, 0, 0, 0,0x685F, 0,0x4A41, -0x6859, 0, 0, 0, 0,0x5524, 0,0x316A, -0x553B,0x684E,0x6850,0x3630,0x6853, 0,0x685D,0x4038, - 0,0x4A77, 0,0x4B28, 0, 0,0x465C,0x4075, - 0, 0, 0, 0, 0,0x6869, 0, 0, - 0,0x5023, 0, 0, 0, 0, 0, 0, - 0,0x6872,0x566A, 0, 0, 0, 0, 0, - 0, 0,0x6860,0x6861, 0, 0, 0,0x5179, -0x3A4B,0x3879, 0, 0,0x3871,0x5454,0x686F, 0, -0x686E,0x686C,0x3970,0x4C52,0x6866,0x4E26,0x3F72, 0, -0x3038,0x6871,0x6870, 0,0x5740, 0,0x6864, 0, -0x4D29,0x4923, 0,0x3B38,0x3D5B,0x686A, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6862,0x6863,0x6865,0x3535,0x6867,0x4745,0x686B,0x686D, -0x3D30,0x572E, 0,0x6878, 0, 0, 0, 0, - 0, 0, 0, 0,0x6875, 0,0x4D30,0x6876, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x413A, 0,0x6868, 0,0x4337,0x3070, 0, - 0, 0, 0, 0, 0, 0, 0,0x6874, - 0, 0, 0,0x6877, 0, 0, 0,0x3923, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x4952, 0, 0, 0,0x434E,0x4E60, -0x4066, 0, 0, 0, 0,0x4B73, 0,0x4C5D, -0x5035, 0, 0,0x4A61, 0,0x6873, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x3C6C, 0,0x6879, 0, 0, 0, 0, 0, - 0,0x435E, 0,0x4665, 0,0x3977, 0, 0, - 0, 0,0x3074, 0, 0,0x5758, 0, 0, -0x3C2C, 0,0x456F, 0, 0, 0, 0, 0, -0x4C44, 0, 0,0x6926, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x492D, 0, -0x6922,0x4062, 0, 0, 0,0x3F43, 0, 0, - 0,0x687E,0x3957, 0,0x687B, 0, 0, 0, - 0,0x6924, 0, 0, 0,0x524E, 0, 0, - 0, 0, 0,0x6923, 0,0x5632,0x5735, 0, -0x6927, 0,0x3D37, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x687C, -0x687D, 0, 0, 0,0x6921, 0, 0, 0, - 0, 0, 0, 0, 0,0x4D56, 0, 0, -0x522C, 0, 0, 0,0x6932, 0, 0, 0, - 0,0x6929, 0, 0, 0,0x342A, 0,0x343B, - 0, 0,0x692B, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x5028, 0, 0,0x6925, - 0, 0,0x337E, 0, 0,0x692C,0x4063, 0, -0x692A, 0, 0,0x6939, 0, 0,0x6938, 0, - 0, 0, 0,0x692E, 0, 0,0x687A, 0, - 0,0x6928, 0, 0, 0, 0, 0,0x3F2C, -0x6931,0x693A, 0, 0,0x4225, 0, 0, 0, -0x692F, 0,0x3845, 0,0x692D, 0,0x535C,0x6934, -0x6935,0x6937, 0, 0, 0,0x6947, 0, 0, - 0, 0, 0, 0,0x4046,0x6945, 0, 0, -0x6930, 0, 0,0x693B,0x3071, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x693C, -0x5525, 0, 0,0x693E, 0,0x693F, 0, 0, - 0,0x6941, 0, 0,0x4171, 0, 0,0x4836, - 0, 0, 0,0x693D, 0, 0, 0, 0, - 0,0x6942, 0, 0, 0, 0, 0, 0, - 0, 0,0x6943, 0,0x6933, 0,0x6936, 0, -0x3B31, 0, 0, 0,0x6940, 0, 0, 0, - 0, 0, 0,0x3C77, 0, 0, 0,0x6944, -0x6946, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x694A, 0, 0, - 0, 0,0x694E, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x325B, 0,0x6948, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x372E, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x694B, -0x694C, 0, 0, 0, 0, 0, 0,0x5541, - 0,0x4423, 0, 0, 0, 0, 0, 0, -0x6958, 0,0x3A61, 0, 0, 0, 0,0x6949, - 0,0x5323, 0, 0, 0,0x6954, 0, 0, - 0, 0, 0, 0, 0,0x6957,0x6950, 0, - 0, 0, 0, 0,0x694F, 0, 0,0x4741, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6952, 0, 0, 0, 0, 0, 0, 0, -0x6959,0x3348, 0,0x6953, 0, 0, 0, 0, - 0,0x4F70, 0, 0, 0,0x694D, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x3377, 0, 0, 0, 0, 0, 0, - 0,0x6956, 0, 0,0x695A, 0, 0, 0, -0x4C34, 0, 0, 0,0x4F2D, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x6955, 0, -0x695C,0x695B, 0, 0, 0, 0, 0,0x695E, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6951, 0, 0, 0, 0, 0, 0, 0, - 0,0x695D, 0,0x695F,0x434A, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4737,0x344E,0x3B36,0x5040,0x6C23, 0, 0,0x4537, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x537B, 0, 0, 0, 0,0x6C24, - 0,0x6C25,0x465B, 0, 0, 0,0x3F6E, 0, - 0, 0, 0,0x6C26, 0, 0,0x6C27,0x502A, - 0,0x4738, 0, 0,0x3868, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6C28, 0, 0, 0, 0, 0, 0, - 0, 0,0x5639,0x557D,0x344B,0x323D,0x4E64,0x4667, - 0, 0,0x4D61, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x3475, 0,0x4B40,0x3C5F, 0, 0, 0, - 0,0x6962,0x6963,0x516A,0x6965, 0,0x3479,0x6964, - 0,0x5133,0x4A62,0x3250, 0,0x6968, 0, 0, - 0, 0,0x6966,0x6967, 0, 0,0x5633, 0, - 0, 0,0x6969,0x696A, 0, 0, 0, 0, - 0,0x696B, 0, 0, 0, 0, 0, 0, - 0, 0,0x696C, 0, 0, 0, 0, 0, - 0, 0, 0,0x6C2F,0x4539,0x364E, 0,0x5273, - 0, 0, 0, 0, 0, 0, 0,0x356E, - 0,0x3B59,0x6C31, 0, 0,0x5263, 0, 0, - 0, 0, 0,0x4E63, 0,0x4438, 0,0x433F, - 0, 0,0x363E,0x5839,0x3148,0x314F,0x3151,0x457E, - 0,0x3150, 0,0x432B, 0, 0, 0, 0, - 0,0x5531, 0, 0, 0, 0, 0, 0, - 0, 0,0x6B24,0x3A41, 0, 0, 0,0x4C3A, - 0, 0, 0,0x6B25, 0,0x6B27, 0, 0, - 0,0x6B28, 0, 0, 0,0x6B26, 0, 0, - 0, 0, 0, 0, 0,0x6B29,0x6B2B,0x6B2A, - 0, 0, 0, 0, 0,0x6B2C, 0,0x4A4F, -0x5835,0x4371, 0,0x4325,0x4678,0x6B2D,0x444A, 0, -0x6B2E,0x6B2F,0x6B30,0x3755, 0, 0, 0,0x377A, - 0,0x6B31,0x4762, 0,0x6B33, 0,0x3A24,0x5175, -0x3031,0x6B32,0x6B34, 0, 0, 0,0x352A,0x4248, -0x4768, 0,0x6B35, 0,0x4B2E,0x635F, 0, 0, -0x5340, 0, 0, 0, 0,0x595B, 0, 0, -0x4D21,0x562D,0x4773, 0, 0, 0,0x5960,0x3B63, - 0,0x3A3A,0x6362, 0, 0, 0, 0, 0, -0x4F2B, 0, 0, 0,0x6360,0x4947, 0,0x3A39, - 0, 0, 0,0x5134,0x6361,0x486A,0x392F,0x3D2D, -0x3358,0x4E5B, 0, 0,0x4C40, 0, 0, 0, -0x6368,0x6369,0x4D74, 0, 0, 0, 0, 0, -0x4C2D, 0,0x3C33, 0,0x636A, 0,0x636B, 0, - 0,0x505A, 0, 0, 0,0x467B,0x375A, 0, - 0,0x475F,0x524A,0x4E56, 0,0x6364,0x636C, 0, -0x4972,0x3341, 0, 0,0x6367, 0, 0,0x4663, -0x6365, 0, 0,0x6D33,0x6366, 0, 0, 0, - 0,0x4933, 0,0x4566, 0, 0, 0,0x3935, - 0,0x433B, 0,0x6363,0x453D,0x4124,0x4259,0x3257, - 0,0x636D,0x3B26,0x442D, 0,0x6370,0x3E5A, 0, - 0,0x637B,0x6375,0x3A53, 0, 0, 0, 0, -0x3750,0x534D, 0,0x564E,0x5553,0x3941,0x5534,0x5158, - 0, 0, 0, 0,0x5039,0x4776, 0, 0, - 0,0x482A,0x3234, 0,0x435A, 0, 0, 0, -0x636E, 0, 0,0x637C,0x636F,0x3728,0x6377,0x6374, - 0, 0, 0,0x373A, 0, 0,0x4522, 0, -0x6376,0x455D,0x3228,0x467C, 0,0x4460, 0, 0, -0x5722, 0,0x4061,0x6379, 0, 0,0x637A,0x637D, -0x4C29,0x6373, 0,0x533E, 0,0x3143,0x6D34,0x6371, -0x6372, 0,0x6378,0x503A,0x4643,0x5473,0x637E, 0, - 0,0x3D60, 0, 0,0x6427, 0, 0,0x6426, - 0, 0, 0,0x5173,0x6423, 0,0x6429, 0, - 0, 0,0x4877, 0, 0, 0, 0,0x4F34, - 0,0x6428,0x642E,0x4265, 0, 0,0x3634, 0, - 0, 0, 0, 0, 0,0x3D72, 0,0x6422, - 0, 0,0x3A69,0x642A, 0, 0,0x642C, 0, - 0,0x367D,0x565E,0x6432, 0,0x642D, 0, 0, - 0,0x6421, 0,0x3B6E,0x4D5D,0x4722,0x4549, 0, - 0,0x4177, 0,0x6424, 0,0x4733,0x3D2C,0x3D3D, -0x6425, 0,0x5747,0x3262, 0,0x642B,0x3C43,0x642F, - 0,0x3B6B,0x6430,0x4528,0x6431, 0, 0, 0, - 0,0x5563,0x3F23, 0,0x643A, 0,0x6437, 0, -0x643B, 0, 0,0x643D, 0, 0,0x4656, 0, - 0,0x3A46,0x404B, 0, 0, 0,0x3821,0x6434, - 0, 0, 0, 0,0x5421, 0, 0,0x3A23, -0x3D7E, 0, 0, 0,0x643C, 0, 0, 0, - 0, 0,0x4D3F, 0, 0,0x4479, 0, 0, -0x4F7B,0x4966, 0, 0,0x533F, 0,0x4F51, 0, - 0,0x6433, 0,0x6438,0x6439,0x4C69, 0, 0, - 0, 0, 0,0x4C4E, 0,0x4054,0x6435,0x4130, -0x6436,0x4E50, 0,0x3B41,0x3553, 0,0x4873,0x3D27, -0x5547,0x492C,0x3822,0x644A, 0, 0,0x644C,0x5144, - 0, 0,0x523A, 0, 0,0x3A2D, 0, 0, -0x3A54, 0, 0, 0, 0, 0, 0,0x6443, -0x356D, 0, 0, 0,0x574D,0x6440,0x4F7D,0x643F, - 0, 0, 0,0x415C,0x4C4A, 0, 0, 0, - 0,0x4A67, 0, 0, 0, 0,0x4457, 0, -0x4C54,0x6448, 0, 0, 0,0x6447,0x6441, 0, -0x6444,0x352D, 0, 0,0x5359, 0,0x6446, 0, - 0, 0, 0,0x5279,0x3463, 0,0x3B34, 0, - 0,0x496E, 0,0x343E, 0, 0, 0,0x3B6C, - 0,0x514D, 0,0x4C6D,0x6D35, 0, 0, 0, - 0, 0, 0, 0, 0,0x4765, 0, 0, - 0, 0,0x5428, 0,0x644B,0x5755,0x6442, 0, -0x3D25,0x6445, 0, 0,0x5366, 0,0x6449,0x4978, - 0, 0,0x643E, 0, 0,0x5365, 0, 0, -0x477E,0x3649, 0,0x547C,0x3233,0x6457, 0, 0, - 0,0x4E42, 0,0x644D, 0,0x4E3C, 0,0x385B, - 0, 0,0x6456, 0,0x3F4A, 0, 0, 0, -0x534E, 0,0x436C, 0, 0, 0, 0, 0, - 0, 0, 0,0x4548,0x6458, 0, 0, 0, - 0, 0, 0, 0, 0,0x4D44,0x644F, 0, - 0, 0, 0,0x6454,0x6455, 0,0x3A7E, 0, -0x4F66, 0, 0,0x553F, 0, 0, 0,0x6452, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x6450, 0, 0,0x644E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x4D65,0x4A2A, - 0, 0, 0,0x4023, 0,0x3D26,0x6453, 0, - 0,0x3848, 0, 0, 0, 0, 0,0x6467, -0x5434, 0, 0, 0, 0, 0, 0, 0, -0x645B, 0, 0, 0,0x416F, 0, 0,0x6469, - 0, 0,0x5267, 0, 0,0x645F, 0,0x6460, - 0, 0,0x4F2A, 0, 0, 0, 0,0x4B5D, - 0,0x645A,0x6451, 0,0x6465, 0,0x485C,0x6463, - 0, 0,0x4467,0x6462, 0,0x6461, 0, 0, - 0,0x337C,0x6468, 0, 0, 0, 0,0x3561, - 0, 0, 0,0x574C, 0, 0, 0,0x6466, - 0,0x3B2C, 0,0x5752,0x4C4F,0x6B78, 0,0x6464, - 0, 0,0x3976, 0, 0, 0,0x564D,0x6459, -0x645C,0x427A,0x645E, 0,0x424B,0x4044,0x4250, 0, -0x3175,0x4C32, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x354E, 0, 0, 0, - 0,0x646F, 0, 0, 0, 0, 0, 0, - 0, 0,0x462F, 0, 0, 0,0x4661, 0, - 0,0x6475, 0, 0, 0, 0, 0,0x4229, - 0, 0, 0,0x406C,0x515D,0x646E, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x442E, 0, 0, 0,0x646D, 0, 0, 0, - 0,0x6476,0x6474,0x427E, 0,0x645D, 0,0x6470, - 0,0x4A7E, 0,0x5544, 0, 0,0x6471, 0, - 0, 0, 0, 0, 0, 0,0x517A, 0, - 0, 0, 0, 0, 0, 0,0x646B,0x646C, - 0, 0, 0,0x6472, 0,0x4E2B, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x454B, 0, 0, 0,0x4731, 0,0x423A, 0, - 0, 0,0x646A, 0, 0, 0,0x414A, 0, - 0, 0, 0, 0, 0,0x4C36,0x3331, 0, - 0, 0,0x647B, 0,0x6473, 0, 0, 0, -0x647A, 0,0x647D, 0,0x647C, 0, 0, 0, - 0, 0, 0, 0,0x334E, 0, 0, 0, -0x333A,0x6477, 0, 0,0x6479,0x6478,0x456C, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x403D, 0, 0, 0, - 0,0x5468, 0, 0, 0, 0, 0,0x6522, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x3044, 0, 0,0x6524, 0, - 0,0x6523, 0, 0, 0, 0, 0, 0, -0x3C24, 0,0x6525, 0, 0, 0, 0, 0, - 0,0x6521, 0, 0, 0, 0, 0, 0, - 0,0x647E,0x3174, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x6528, 0, -0x6529,0x6526, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x6527,0x652A, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x4659, 0, 0, 0, 0, 0, 0, - 0, 0,0x652B,0x652D, 0, 0, 0, 0, - 0, 0, 0,0x652C, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x652F, 0, 0, - 0,0x652E, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x3960, 0, 0,0x6530, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x6531, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x3B70,0x6C61,0x4370, 0,0x3546, -0x3B52, 0, 0, 0, 0,0x4169,0x546E, 0, -0x3E44, 0, 0, 0,0x5746, 0,0x5456,0x3253, -0x6C3E, 0, 0, 0, 0,0x6A41, 0, 0, - 0,0x422F,0x3436, 0, 0, 0,0x5157, 0, - 0, 0,0x3334, 0,0x4832,0x3F3B,0x6C40, 0, - 0,0x564B, 0, 0,0x6C3F,0x6C41, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x6C45,0x3E66,0x4C3F,0x455A,0x3E3C, - 0,0x6C46, 0,0x317E, 0, 0, 0,0x6C44, -0x5528,0x3563, 0,0x6C42,0x4136,0x3363, 0, 0, -0x6C43,0x4B38,0x4043,0x4C7E, 0, 0, 0, 0, -0x4152, 0,0x6C48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x3A66,0x4053, 0,0x5672, 0, 0, 0,0x514C, - 0, 0, 0, 0,0x3F3E, 0,0x3733,0x4955, -0x6C47,0x3B62, 0,0x4C4C,0x3D7D,0x4848, 0,0x4F29, - 0, 0, 0, 0, 0, 0, 0,0x4D69, - 0,0x456B, 0, 0, 0,0x3769, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x5149,0x3A38, 0, 0, 0, 0, 0, -0x6C49, 0, 0,0x6C4A, 0,0x3B40,0x6C4B, 0, -0x6C62,0x313A,0x3759, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x3D39, 0, - 0, 0, 0, 0, 0, 0, 0,0x6C4C, -0x5166,0x6C4D, 0, 0, 0, 0,0x483B, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x6C51, 0, 0, - 0, 0,0x6C53, 0,0x3B4D, 0,0x3C65, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x6C4F, 0,0x4937, 0, - 0, 0, 0, 0,0x433A, 0,0x6C63,0x5555, -0x6C50, 0, 0, 0, 0, 0,0x5673, 0, - 0, 0,0x6C52,0x6C4E, 0, 0, 0, 0, -0x6C54, 0,0x6C55, 0, 0,0x493F, 0, 0, - 0, 0, 0, 0,0x4F28, 0, 0, 0, - 0, 0,0x505C, 0, 0, 0, 0,0x512C, - 0, 0, 0, 0,0x485B, 0, 0, 0, -0x6C56,0x4E75, 0, 0, 0, 0, 0,0x4A6C, -0x6C5A, 0, 0, 0, 0, 0, 0, 0, -0x6C59, 0, 0, 0,0x303E, 0, 0, 0, - 0, 0, 0,0x6C57, 0,0x6C58, 0, 0, - 0,0x6C64, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x483C, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x4147, 0, - 0, 0, 0, 0,0x6C5C,0x5160, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6C5B, 0, 0, 0, 0,0x546F, 0,0x6C5D, - 0, 0, 0, 0, 0, 0,0x5B46, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6C5E, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x312C, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x6C5F, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6C60, 0,0x5726, 0,0x4540, 0, 0, 0, -0x6B3C,0x302E, 0, 0, 0,0x3E74,0x3838,0x522F, -0x3056,0x3579, 0,0x5833, 0,0x4B2C, 0,0x635D, - 0, 0, 0, 0, 0, 0, 0,0x462C, -0x3066, 0, 0, 0,0x4546,0x6B39, 0, 0, - 0, 0,0x6B3A, 0, 0, 0,0x6B3B, 0, - 0,0x5140, 0,0x4523, 0,0x6A72, 0,0x4432, - 0,0x4435,0x404E, 0, 0, 0,0x6A73,0x4441, - 0,0x4E6F, 0, 0, 0, 0,0x6A70,0x6A74, - 0, 0,0x497C, 0, 0,0x4723, 0, 0, - 0,0x4C58,0x4E7E, 0, 0, 0,0x6A75,0x6A76, -0x4F2C,0x4067, 0, 0,0x6A77, 0, 0, 0, - 0, 0,0x363F,0x6A78, 0,0x6A79, 0,0x6A7A, - 0, 0,0x6A7B, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x6A71, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x482E,0x616B, 0,0x3738, -0x616C, 0, 0, 0,0x616D, 0,0x5734,0x616E, -0x616F,0x534C, 0, 0, 0, 0, 0, 0, - 0,0x6171,0x3F71,0x6170,0x3552, 0, 0, 0, -0x3137, 0, 0, 0, 0,0x6173,0x6172, 0, -0x3A7C, 0,0x6174, 0, 0, 0, 0,0x3937, - 0,0x3E51, 0, 0, 0, 0,0x447C, 0, -0x3A5D,0x3D46, 0, 0, 0, 0, 0, 0, -0x6175,0x6177, 0, 0,0x3640,0x4F41,0x4A28,0x6176, -0x5578,0x537C,0x6178,0x617C,0x6179, 0, 0,0x617A, -0x406A, 0,0x617E,0x6221,0x4047, 0, 0, 0, - 0,0x617B, 0,0x617D, 0, 0, 0, 0, - 0, 0,0x6225, 0, 0, 0,0x4154, 0, - 0, 0, 0,0x6223, 0,0x6228,0x327E,0x6222, - 0, 0, 0,0x434D,0x3242,0x6227,0x6226, 0, - 0,0x6224,0x6229, 0, 0,0x622B, 0, 0, - 0,0x5049,0x566D,0x4328,0x622C, 0,0x4F57, 0, - 0,0x622E, 0, 0,0x3A6F, 0, 0,0x6960, -0x622D,0x622A, 0, 0, 0, 0,0x3B2B,0x5433, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x6230, 0, 0, -0x622F, 0,0x6961, 0, 0, 0, 0,0x6231, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6232, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x6233,0x4C21, 0,0x6234, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x6235, 0, - 0, 0, 0, 0,0x507E, 0, 0,0x424A, - 0,0x5371, 0,0x4D75, 0, 0,0x6760, 0, - 0,0x6761, 0, 0, 0, 0,0x3E41, 0, - 0, 0, 0,0x426A, 0, 0, 0,0x6764, - 0, 0,0x6763, 0, 0, 0, 0, 0, - 0,0x4D66, 0,0x4335, 0, 0,0x6762,0x3B37, -0x4F56, 0,0x4161,0x6769, 0, 0, 0,0x6768, - 0, 0,0x6774,0x3223, 0, 0, 0, 0, -0x676A, 0,0x6766, 0, 0, 0, 0, 0, -0x676C,0x676B,0x493A, 0, 0,0x5564, 0,0x6765, -0x3729,0x6767, 0, 0, 0, 0, 0, 0, - 0,0x676E, 0, 0, 0, 0,0x6773, 0, -0x5669, 0, 0, 0, 0,0x676D, 0,0x6772, - 0,0x6771, 0, 0, 0,0x3060, 0, 0, - 0, 0,0x6775, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x4772, 0,0x4045,0x406D, 0, - 0,0x4170,0x6770, 0, 0, 0, 0,0x6776, -0x4B76, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x6822,0x6821, 0, 0, 0, 0, - 0, 0,0x5741, 0, 0,0x677A,0x6779, 0, -0x677B, 0,0x6777, 0,0x677E, 0,0x677D, 0, -0x677C, 0, 0,0x4155,0x4759,0x457D,0x4543, 0, - 0, 0, 0, 0,0x476D, 0, 0, 0, - 0,0x6823, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x6826, 0,0x6825, - 0,0x6827,0x3A77,0x6778,0x6824, 0,0x4870,0x492A, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x6829, 0, 0, -0x3965, 0, 0, 0, 0, 0,0x517E,0x6828, - 0, 0, 0, 0, 0, 0,0x682A, 0, -0x682D,0x682E, 0,0x4127, 0, 0, 0,0x682F, - 0, 0, 0,0x6830, 0, 0,0x682C, 0, -0x6834, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x682B, 0,0x6831, 0, - 0, 0, 0, 0, 0, 0, 0,0x6835, -0x6832,0x6833, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x6837, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x6836, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x394F, 0,0x702C, 0, -0x702D, 0,0x4630,0x306A,0x483F, 0,0x4D5F, 0, - 0, 0, 0, 0, 0, 0,0x4E4D,0x6A31, - 0, 0, 0, 0,0x6A32, 0,0x463F,0x3449, - 0, 0, 0, 0, 0, 0, 0,0x6A33, - 0, 0, 0, 0,0x5567, 0, 0, 0, - 0, 0, 0, 0, 0,0x5D79, 0,0x6A34, - 0,0x6A35, 0,0x6A36, 0, 0, 0, 0, -0x384A,0x5F30,0x4975, 0,0x4C70, 0, 0,0x497A, - 0, 0, 0, 0, 0,0x497B, 0, 0, -0x5343,0x4B26, 0,0x3826,0x702E,0x3142, 0,0x6538, -0x4C6F,0x5349,0x3C57,0x496A, 0,0x3567, 0,0x4450, -0x3569, 0,0x6E2E,0x3B2D, 0, 0,0x675E, 0, -0x6E2F, 0, 0, 0, 0,0x3329, 0, 0, -0x6E32, 0, 0,0x6E31,0x3D67, 0,0x6E30,0x4E37, - 0, 0, 0, 0,0x454F, 0, 0, 0, - 0,0x4174,0x5B4E,0x6E33,0x5073, 0, 0, 0, - 0, 0, 0, 0, 0,0x4254,0x4668, 0, - 0, 0,0x372C, 0, 0, 0, 0, 0, - 0, 0,0x6E34, 0,0x336B, 0, 0, 0, -0x3B7B,0x6E35, 0, 0, 0, 0, 0,0x675C, - 0, 0, 0,0x6E36, 0, 0,0x3D2E, 0, - 0, 0, 0,0x7162, 0, 0, 0,0x4A68, - 0,0x5249,0x705A, 0,0x705B, 0,0x705C,0x4146, - 0,0x386D,0x3E4E, 0, 0,0x705E, 0,0x4531, -0x705D,0x5171, 0,0x7060,0x304C,0x3D6A, 0, 0, - 0, 0, 0,0x525F,0x705F, 0,0x342F,0x3768, -0x7066,0x7065,0x4623,0x7061,0x7062,0x3443, 0, 0, -0x7063,0x556E, 0, 0,0x4C5B,0x3E52,0x3C32, 0, - 0, 0,0x7068,0x7067,0x7064,0x3221, 0,0x5622, -0x5338,0x3E37,0x482C, 0, 0,0x706A, 0, 0, - 0, 0,0x5177, 0,0x564C,0x3A5B,0x7069, 0, -0x363B, 0, 0,0x4D34, 0, 0,0x4626, 0, - 0, 0,0x4121,0x706B,0x706E, 0,0x706D,0x7070, -0x706C, 0,0x3B3E,0x706F, 0, 0, 0, 0, -0x4C35,0x7072, 0, 0,0x3355, 0, 0, 0, - 0,0x3154, 0, 0,0x7073, 0, 0,0x7074, -0x7076,0x3461, 0,0x7071, 0,0x7077, 0, 0, - 0, 0,0x707A, 0,0x7078, 0, 0, 0, -0x7075, 0, 0, 0, 0,0x707D, 0,0x7079, -0x707C,0x707E, 0,0x7121, 0, 0, 0,0x4E41, -0x7124, 0,0x7123, 0,0x4176,0x707B,0x4A5D, 0, - 0,0x3471,0x3171,0x4C31, 0,0x7126, 0, 0, -0x7127, 0, 0,0x712C,0x554E,0x7129, 0, 0, -0x4833, 0, 0, 0,0x7122, 0,0x712B,0x7128, -0x7125, 0, 0,0x712A, 0, 0, 0, 0, - 0, 0, 0, 0,0x3029,0x712D, 0, 0, - 0, 0, 0, 0,0x712F, 0,0x7131, 0, - 0, 0, 0, 0,0x7130, 0,0x712E, 0, - 0, 0, 0,0x5122, 0, 0, 0, 0, - 0, 0, 0,0x7132, 0, 0, 0,0x7133, - 0, 0, 0, 0, 0, 0, 0, 0, -0x396F, 0, 0,0x3547, 0,0x3057,0x3059, 0, - 0, 0,0x546D, 0,0x3544, 0,0x3D54,0x3B4A, -0x7027, 0, 0,0x385E, 0, 0,0x7028, 0, - 0,0x3028, 0,0x7029, 0, 0,0x4D6E, 0, - 0,0x702A, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x702B, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x4624, 0, - 0,0x5665,0x7164, 0,0x7165, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x4373, - 0, 0,0x535B, 0, 0,0x5651,0x4568, 0, -0x532F, 0,0x5266, 0, 0,0x6E41,0x303B,0x5535, -0x514E,0x3C60,0x3A50, 0,0x3F78, 0,0x3847,0x3541, -0x454C, 0, 0,0x4A22, 0, 0, 0,0x434B, - 0, 0, 0, 0, 0,0x6E42, 0, 0, - 0, 0, 0, 0, 0, 0,0x443F,0x3622, - 0,0x6D6C,0x4324, 0,0x5631, 0, 0, 0, -0x4F60,0x6D6F, 0, 0,0x454E, 0,0x365C, 0, - 0,0x4A21, 0, 0,0x6D6D, 0, 0,0x6D70, -0x6D71,0x433C, 0,0x3F34, 0,0x6D6E, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x6D74,0x6D72, 0, 0, 0, 0,0x5566, -0x435F, 0,0x6D73, 0, 0, 0,0x6D76, 0, -0x5523,0x5123, 0, 0, 0,0x6D75, 0,0x4350, - 0, 0, 0, 0, 0,0x6D77,0x3F74,0x3E6C, -0x6D78, 0,0x4C77, 0,0x515B, 0, 0, 0, -0x5745,0x5576, 0,0x6D7C, 0, 0, 0,0x6D7B, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6D79,0x6D7A, 0, 0, 0, 0, 0, 0, - 0, 0,0x6D7D,0x3E26, 0, 0, 0, 0, - 0,0x4B2F,0x6E21,0x363D, 0,0x6E22,0x4440, 0, -0x6D7E, 0, 0,0x3D5E,0x3247, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x3643, 0, 0, 0,0x6E25,0x583A,0x6E23, -0x6E26, 0, 0, 0,0x4369,0x3372, 0, 0, - 0, 0, 0, 0,0x6E27,0x6E24,0x4F39, 0, - 0,0x6E28,0x4277, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x6E29, -0x6E2A, 0,0x5E2B, 0, 0,0x4633, 0,0x4746, - 0,0x5675,0x3549, 0,0x4B32, 0, 0, 0, -0x6E2B, 0, 0,0x4D2B, 0,0x6E2C, 0, 0, - 0, 0, 0,0x5530, 0,0x6E2D, 0,0x7644, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x5B47, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x3423, - 0, 0, 0,0x432C,0x7166, 0, 0, 0, - 0, 0,0x4A38,0x5253, 0,0x562A, 0,0x6F72, - 0,0x3E58, 0,0x3D43,0x6F73,0x364C,0x302B, 0, - 0, 0, 0,0x4A2F, 0, 0,0x6D36, 0, -0x6D37, 0, 0, 0, 0,0x4E79,0x372F,0x3F73, -0x6D38,0x426B,0x4930, 0, 0, 0, 0, 0, - 0,0x6D39, 0, 0,0x4676,0x3F33, 0, 0, - 0,0x6D3C,0x4578, 0,0x5150, 0,0x5729,0x6D3A, -0x6D3B, 0,0x5162, 0,0x6D3F,0x6D40, 0,0x6D44, - 0, 0, 0,0x6D48, 0,0x6D46,0x6D4E,0x5568, - 0,0x6D49, 0, 0,0x6D47,0x6D3E, 0, 0, -0x4569, 0, 0, 0,0x4646, 0, 0,0x4969, -0x5452,0x6D41,0x6D42,0x6D43,0x6D45, 0,0x4079, 0, -0x3421, 0, 0, 0, 0,0x3968, 0,0x6D50, - 0, 0, 0, 0,0x6D51, 0,0x6D4A, 0, -0x6D4F, 0,0x4E78, 0, 0,0x4B36,0x6D4C,0x6D4D, - 0, 0, 0, 0, 0,0x4F75, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x6D52,0x4172,0x5332,0x6D4B,0x4837, 0, - 0, 0, 0, 0, 0, 0, 0,0x3C6F, - 0, 0, 0, 0,0x4570, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x6D56, - 0,0x356F, 0, 0,0x4235,0x302D,0x4B69, 0, - 0,0x312E, 0,0x6D54, 0, 0, 0,0x4D6B, -0x3562, 0,0x6D55,0x6D53,0x6D57, 0, 0,0x357A, - 0,0x6D58, 0,0x6D59, 0,0x6D5C, 0,0x314C, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4576,0x3C6E,0x6D5A,0x4C3C,0x326A, 0, 0, 0, - 0,0x6D5B, 0, 0, 0, 0,0x446B, 0, - 0,0x3445, 0, 0, 0,0x3075, 0, 0, - 0,0x6D5F,0x405A,0x3468, 0, 0, 0, 0, -0x454D, 0, 0, 0,0x6D5D,0x3F44, 0, 0, - 0,0x6D5E, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4425, 0, 0, 0,0x6D60, 0, 0, 0, - 0, 0,0x6D61, 0,0x6D63, 0, 0,0x4157, - 0, 0,0x3B47, 0, 0, 0, 0, 0, - 0,0x3D38, 0, 0, 0,0x6D62, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x6D64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x6D66, 0, - 0, 0, 0, 0,0x6D65, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x6D67, 0, 0, 0, - 0, 0,0x4A3E,0x6C6A,0x4071, 0,0x4967, 0, -0x6C6B,0x466E, 0, 0, 0, 0,0x6C6C, 0, -0x466D,0x6C6D, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x6C70, 0, 0,0x5766,0x6C73, - 0, 0,0x6C71,0x6C6E,0x6C6F,0x5723,0x4971,0x4B6E, -0x6C74, 0,0x6C72, 0, 0,0x4F69, 0,0x6C76, -0x4631, 0, 0, 0, 0,0x3C40, 0,0x6C75, - 0, 0, 0, 0, 0, 0, 0,0x353B, -0x3B76, 0,0x6C77, 0, 0, 0, 0, 0, -0x5977,0x3D7B, 0, 0,0x423B,0x6C78, 0, 0, - 0, 0,0x6C79, 0, 0, 0, 0,0x3823, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x6C7A, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x6C7B, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x6C7C, 0, 0, 0, 0, - 0,0x536D,0x582E,0x406B, 0,0x475D,0x3A4C, 0, -0x5063,0x4B3D, 0,0x4D3A, 0, 0,0x3851, 0, - 0,0x317C, 0,0x476F, 0,0x5656, 0, 0, - 0,0x3F46,0x436B, 0, 0,0x6F75, 0, 0, -0x4358, 0, 0, 0, 0, 0, 0,0x5762, - 0, 0, 0,0x6F77,0x3353, 0,0x4758,0x516D, - 0,0x5648, 0,0x6F78, 0,0x6F76, 0,0x3B7D, -0x3346, 0, 0, 0, 0, 0, 0, 0, -0x3D55, 0, 0,0x5246, 0,0x3B60, 0, 0, -0x4F21, 0,0x6F7C,0x6F7B, 0, 0,0x6F79, 0, - 0, 0, 0,0x334C, 0,0x4954,0x4B30, 0, - 0, 0, 0, 0,0x6F7E, 0, 0,0x305E, - 0, 0,0x5649, 0, 0, 0,0x6F7D, 0, -0x336D, 0, 0,0x7655, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x4E48, 0, 0, 0,0x7022, - 0,0x7021, 0,0x353E,0x3C5A,0x3B7C, 0,0x3865, - 0, 0, 0, 0, 0, 0,0x4442, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7023, 0, 0, 0, 0, 0,0x4B6B, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7026, 0, 0, 0,0x5128, 0,0x3E3F,0x476E, -0x7136,0x7137,0x3F55, 0, 0, 0, 0,0x3429, -0x7138,0x4D3B, 0,0x4754,0x552D, 0,0x7139, 0, -0x713A, 0, 0, 0, 0,0x474F, 0, 0, - 0,0x5224,0x564F, 0, 0,0x713B,0x3D51,0x3430, -0x3E3D, 0, 0, 0,0x345C,0x4E51, 0,0x3F5F, -0x713D, 0, 0, 0, 0,0x3F7A,0x713C, 0, -0x713F, 0, 0, 0,0x713E,0x7140, 0, 0, - 0, 0, 0,0x7141, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x417E, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x4122, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x4A7A, 0, - 0,0x553E, 0, 0, 0, 0,0x3E3A,0x3E39, -0x5542, 0, 0,0x3F22, 0,0x4D2F,0x7135, 0, - 0, 0, 0, 0, 0,0x3D5F, 0,0x364B, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x5671,0x7343, 0, 0,0x7344, 0,0x384D, - 0, 0, 0,0x7346,0x7347, 0,0x304A, 0, -0x7345, 0,0x7349,0x4B71, 0, 0, 0,0x734B, - 0,0x5026, 0, 0,0x314A,0x7348, 0, 0, - 0,0x734F, 0,0x3551, 0, 0,0x7357, 0, -0x7352, 0, 0, 0,0x7354,0x7353,0x377B, 0, -0x313F, 0,0x734E,0x734A,0x355A, 0,0x7350, 0, - 0,0x7351, 0,0x7355, 0, 0, 0, 0, -0x734D, 0,0x3C63, 0,0x417D, 0,0x7356, 0, - 0, 0, 0, 0, 0,0x735A, 0,0x734C, - 0,0x3548, 0,0x3D6E,0x735C, 0, 0,0x3724, -0x3F70,0x567E,0x4D32, 0,0x3470, 0,0x325F, 0, -0x7358, 0,0x7359,0x4938, 0,0x735D, 0, 0, -0x735E, 0,0x7361, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x735F, 0, - 0,0x7363,0x7362, 0, 0,0x735B, 0,0x3F6A, - 0,0x336F, 0,0x7360, 0, 0,0x4729, 0, -0x3C72, 0, 0, 0, 0,0x736B, 0, 0, - 0, 0, 0, 0, 0,0x393F, 0, 0, -0x7364, 0, 0, 0,0x322D,0x3B7E, 0,0x4B63, - 0, 0, 0, 0,0x736D,0x7369, 0, 0, - 0,0x395C,0x736E, 0, 0, 0,0x7365,0x7366, -0x736A,0x4261,0x736C,0x736F,0x7368,0x3C7D, 0, 0, - 0,0x4F64, 0, 0,0x7370, 0, 0, 0, -0x7367, 0, 0, 0, 0, 0, 0, 0, - 0,0x7372, 0, 0, 0, 0,0x572D,0x462A, - 0, 0, 0, 0,0x7373, 0, 0, 0, - 0,0x7371, 0,0x4228, 0, 0, 0, 0, - 0,0x385D,0x7375, 0, 0,0x7374, 0, 0, - 0,0x345B, 0, 0, 0,0x7376,0x7377, 0, - 0, 0,0x7378, 0, 0, 0,0x403A, 0, - 0,0x4069, 0, 0, 0, 0, 0,0x4571, - 0, 0, 0, 0,0x737B, 0,0x737A, 0, - 0, 0, 0, 0, 0, 0, 0,0x3458, - 0, 0, 0,0x737E,0x7379, 0, 0,0x737C, - 0, 0, 0, 0, 0, 0,0x737D, 0, - 0, 0, 0, 0, 0, 0, 0,0x7421, - 0, 0, 0, 0, 0, 0,0x7423,0x3B49, - 0, 0,0x7422, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7424, 0, 0, 0, 0, 0, 0,0x323E, -0x7426,0x7425, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x3C2E, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x4357,0x5961, 0, 0, 0, - 0, 0, 0,0x4060,0x744C,0x5751, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x375B, 0, 0, 0, 0, 0, 0, - 0,0x744E,0x4123, 0, 0,0x4649, 0,0x3456, -0x5533, 0, 0, 0,0x7450,0x744F,0x7451,0x4B5A, - 0, 0,0x7452, 0,0x5441,0x5660, 0, 0, - 0, 0,0x3760, 0, 0, 0,0x4138, 0, - 0,0x413B,0x7453,0x3E2C, 0, 0, 0, 0, - 0,0x3462, 0, 0,0x7454,0x7455,0x3E2B, 0, - 0,0x7456, 0, 0, 0,0x745B, 0,0x7457, -0x745A, 0,0x3A7D, 0,0x7458,0x7459, 0, 0, - 0, 0, 0, 0, 0,0x3862,0x4C47,0x745C, - 0,0x325A, 0, 0,0x4353, 0, 0,0x5463, -0x3F37, 0, 0, 0, 0, 0, 0, 0, -0x745D, 0, 0, 0, 0, 0, 0,0x4534, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7469, 0, 0,0x4F35, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x4E49, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4B58, 0,0x4B77, 0, 0, 0, 0,0x3D74, - 0, 0, 0,0x574F, 0, 0, 0,0x405B, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x5075, 0, - 0, 0, 0, 0, 0, 0, 0,0x746A, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x746B, 0, - 0, 0, 0, 0, 0, 0,0x746C, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x7763, 0, 0, 0, 0, - 0,0x3731, 0, 0, 0, 0, 0,0x746D, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x576B, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x746E, 0, 0, 0,0x6679, -0x3E40,0x667A,0x3A6C,0x667B,0x4F4B,0x667C,0x543C,0x3C36, -0x667D,0x667E,0x3C4D,0x4852,0x4E33,0x6721, 0,0x343F, -0x6722,0x4934,0x3859,0x4449, 0,0x575D,0x425A,0x3757, -0x563D,0x4E46,0x3744, 0, 0,0x4526,0x6723,0x4F5F, -0x6724,0x6725,0x6726,0x4137,0x5769,0x4970,0x4F38,0x562F, -0x5655,0x6727,0x306D,0x6728,0x6729,0x495C,0x526F,0x3E2D, -0x672A,0x3073,0x485E,0x3D61,0x672B,0x4846, 0,0x672C, -0x3B66,0x3878,0x5124,0x672D,0x4267,0x3E78,0x3D4A,0x4D33, -0x672E,0x672F,0x3E6E,0x5065, 0,0x4B67,0x4C50,0x3C4C, -0x6730,0x3C28,0x5077,0x6731, 0,0x5078,0x6732,0x6733, -0x3442,0x6734,0x6735,0x497E,0x4E2C,0x4360,0x6737,0x3141, -0x3371, 0,0x6738,0x6739,0x575B,0x5540,0x673A,0x424C, -0x573A,0x673B,0x673C,0x673D,0x3C6A,0x4365,0x4042,0x673E, -0x673F,0x3C29, 0,0x6740,0x6741,0x6736,0x3650,0x6742, - 0,0x6743,0x6744,0x3B3A,0x355E,0x4246,0x3160,0x6745, -0x5435,0x6746,0x383F,0x6748,0x6747,0x376C, 0,0x6749, -0x3278,0x674A,0x674B,0x674C,0x674D,0x674E,0x674F,0x6750, -0x5327,0x4B75,0x6751,0x6752,0x6753,0x6754,0x4949,0x6755, -0x6756,0x6757,0x6758,0x6759,0x3D49,0x675A,0x733E, 0, -0x3857, 0,0x4831, 0, 0, 0, 0, 0, - 0, 0,0x733F, 0,0x7340,0x7341, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x395E,0x4D78, 0, 0,0x5868,0x3A31, 0,0x425E, -0x6E37, 0,0x3723, 0, 0, 0, 0,0x6E39, - 0,0x6E38,0x3055, 0, 0, 0, 0, 0, -0x6E3B,0x5556,0x576F, 0, 0, 0,0x5643, 0, - 0,0x6E3D,0x4A70, 0,0x6E3C, 0, 0, 0, - 0,0x6E3E, 0, 0, 0, 0,0x6E40, 0, - 0,0x6E3F, 0, 0, 0, 0, 0, 0, - 0, 0,0x5172, 0,0x473C, 0,0x4340, 0, - 0, 0, 0, 0,0x3861, 0, 0, 0, - 0, 0,0x4167, 0, 0,0x7446,0x505F,0x7447, - 0,0x4F5B, 0, 0,0x483A, 0, 0,0x7448, - 0, 0, 0, 0, 0, 0, 0,0x7449, -0x744A, 0,0x744B, 0, 0, 0, 0, 0, -0x597A,0x387E, 0, 0,0x6571,0x5370, 0,0x7460, - 0,0x4E4C, 0, 0, 0,0x3361, 0, 0, - 0, 0,0x7134, 0,0x526E, 0,0x7461, 0, - 0, 0, 0, 0,0x4F68,0x7462, 0, 0, -0x474C, 0, 0, 0, 0, 0, 0,0x3554, -0x3464,0x7464, 0, 0, 0,0x7463,0x7465, 0, - 0,0x7466, 0, 0, 0, 0,0x7467, 0, -0x3A32,0x303F, 0,0x7468, 0, 0, 0, 0, - 0, 0, 0,0x372D,0x526D, 0, 0, 0, -0x522B,0x404F, 0,0x3F3C,0x6B23,0x555F,0x6A48, 0, - 0, 0, 0,0x7173,0x3678,0x4B23, 0, 0, -0x444D, 0,0x7167, 0,0x7168,0x387B,0x7169,0x3A44, -0x5445,0x3052, 0, 0,0x716A, 0, 0, 0, -0x716B, 0,0x716C, 0, 0,0x716D,0x716E,0x716F, -0x7171,0x7170,0x4555, 0, 0, 0, 0, 0, - 0,0x7172, 0,0x367A, 0,0x7174,0x522E,0x5E47, -0x4B4A, 0, 0,0x335C, 0,0x3522, 0,0x3922, - 0, 0,0x4474,0x7175, 0, 0,0x7176, 0, - 0, 0,0x4144,0x417B,0x5630,0x7177, 0, 0, - 0, 0,0x7178, 0,0x412A, 0, 0, 0, -0x4638, 0,0x3E5B, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7179,0x344F, 0, 0, 0, 0, 0, - 0,0x717A, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x6D32, -0x6D31, 0, 0,0x4B60,0x525E, 0,0x4B41,0x5558, - 0,0x4862, 0,0x405F,0x3C21, 0, 0, 0, - 0, 0, 0,0x6B41, 0, 0,0x5024, 0, -0x5662, 0,0x3647,0x3858,0x6B40,0x384E, 0,0x6B3F, -0x3326,0x3949,0x562B, 0,0x3774,0x374A, 0, 0, - 0,0x3C67,0x373E,0x6B46, 0,0x6B47,0x3039,0x3F4F, - 0,0x6B45,0x537D, 0,0x6B48, 0, 0,0x6B49, - 0, 0,0x374E, 0,0x6B42,0x6B44,0x4976,0x5657, -0x554D,0x5032,0x6B4F,0x4E38,0x6B50, 0,0x3528, 0, - 0, 0, 0, 0,0x3133,0x6B52,0x4C25, 0, - 0, 0, 0, 0, 0, 0,0x4556,0x6B53, - 0,0x6B51,0x455F,0x6B4E,0x4A24,0x6B55,0x307B, 0, - 0,0x3A7A, 0, 0,0x5837,0x7163, 0,0x6B4A, -0x6B4B,0x6B4C,0x6B4D,0x6B56,0x6640,0x6B59, 0,0x3F68, -0x5248,0x6B57,0x6B5C,0x386C,0x6B58, 0,0x3D3A, 0, -0x5058, 0,0x3037, 0,0x6B5D,0x445C, 0, 0, - 0, 0,0x562C, 0, 0, 0,0x3460, 0, - 0,0x4276,0x3C39, 0, 0,0x6B5A,0x6B5B,0x5460, -0x466A,0x4454,0x6B5F,0x4527,0x5975, 0,0x3231, 0, -0x6B64, 0,0x3D45, 0, 0, 0,0x6B62, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x6B63, 0, 0,0x382C, - 0,0x4D51,0x6B65, 0, 0, 0,0x6B61, 0, -0x4133, 0, 0, 0, 0, 0,0x4622, 0, - 0, 0, 0, 0, 0, 0,0x4C73, 0, -0x6B66, 0,0x4030,0x5238,0x6B67, 0, 0, 0, -0x382F,0x382D, 0,0x6B68,0x473B,0x4D73, 0, 0, - 0,0x6B6A,0x6B6B, 0, 0, 0, 0, 0, -0x6B6D, 0, 0, 0, 0,0x5048, 0,0x6B72, - 0,0x6B6E, 0, 0, 0,0x6B71,0x4879, 0, -0x517C,0x6B6C, 0, 0,0x6B69, 0, 0, 0, - 0,0x3839,0x4F59,0x4465,0x6B6F,0x6B70,0x4C5A,0x4D48, -0x3072, 0,0x6B76, 0, 0, 0, 0, 0, -0x6B75, 0,0x3232, 0, 0, 0, 0,0x3860, - 0,0x6B77, 0, 0, 0, 0, 0, 0, -0x316C, 0, 0,0x4C45,0x4424,0x4F25, 0, 0, - 0, 0, 0,0x6B79, 0, 0,0x6C22, 0, -0x4572, 0,0x6B7A, 0, 0, 0, 0, 0, - 0, 0, 0,0x4945, 0, 0, 0, 0, - 0, 0,0x625F,0x6B7E, 0, 0, 0, 0, -0x4D4E,0x6C21,0x315B,0x5337, 0, 0,0x525C, 0, - 0, 0,0x6B7D, 0,0x6B7B, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x333C, 0, 0, 0,0x6A30, - 0, 0,0x5754, 0,0x742B,0x3374, 0, 0, - 0, 0, 0,0x5641,0x5642, 0, 0, 0, - 0, 0, 0,0x5569,0x3E4A, 0,0x7427, 0, -0x5228,0x7428,0x7429, 0,0x742A,0x3E4B,0x535F, 0, - 0, 0, 0, 0,0x4960,0x4961, 0, 0, -0x7342, 0,0x4A66, 0,0x4C72, 0, 0, 0, - 0, 0, 0,0x6236,0x4B34, 0,0x4E68,0x565B, - 0,0x742D,0x742E,0x742F, 0, 0, 0, 0, -0x7432, 0,0x3A3D,0x7433,0x3063,0x7430, 0,0x7431, -0x3D22,0x3255, 0,0x7436,0x7437,0x3666,0x3230,0x4F4F, -0x7434,0x342C, 0,0x7435, 0, 0,0x7438, 0, - 0, 0, 0, 0,0x7439, 0, 0,0x4D27, - 0,0x743A, 0,0x743B, 0, 0, 0,0x743C, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4B52, 0,0x743D, 0, 0, 0, 0,0x743E, - 0, 0, 0, 0, 0, 0, 0, 0, -0x743F, 0, 0, 0, 0, 0,0x745E,0x413C, -0x3C68, 0,0x492B,0x515E,0x6575, 0, 0, 0, - 0,0x5C33,0x5255, 0, 0,0x5C34,0x302C,0x5C35, - 0, 0,0x3D5A, 0,0x5C39, 0, 0, 0, -0x5842, 0,0x5C37,0x5373, 0,0x4956,0x5C3A,0x5C36, - 0,0x5C3B,0x4322, 0, 0, 0, 0,0x5C3C, -0x5C45,0x5C3D, 0, 0,0x4E5F,0x5625, 0,0x5C4F, - 0,0x5C4D, 0, 0,0x5C52,0x3D66,0x422B, 0, -0x5C38,0x5C4B,0x5C4E,0x5C3E,0x3752,0x3045,0x5C47,0x503E, -0x5C41,0x3B28, 0,0x373C,0x5C4C, 0, 0,0x5C46, -0x5C3F,0x475B, 0, 0, 0,0x513F,0x5C40, 0, - 0,0x5C4A, 0, 0,0x5C50, 0, 0,0x4E2D, -0x5C42, 0,0x5C43,0x5C48,0x5C49,0x3254,0x5C51,0x4B55, - 0,0x5437,0x5C5B,0x5C5F,0x4C26,0x5C66, 0,0x4367, -0x5C5C, 0, 0,0x3F41,0x5C59, 0,0x307A,0x3936, -0x5C65,0x5C53, 0,0x5C44,0x5C56,0x4874,0x3F60, 0, - 0, 0, 0,0x493B, 0, 0, 0,0x313D, - 0,0x5322, 0, 0,0x5C5A, 0, 0,0x5C55, - 0,0x463B, 0,0x5C5E, 0, 0, 0, 0, - 0,0x5742,0x432F,0x3736,0x4751,0x4329,0x5C62,0x5C58, -0x5C6B,0x5C54, 0, 0,0x5C5D, 0,0x3E25,0x5C57, - 0,0x5C60, 0, 0,0x5C63,0x5C64, 0,0x5C78, - 0, 0,0x5C61,0x5D22,0x5C67, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x3C6B, -0x3444, 0, 0,0x4323,0x3267,0x5C7A, 0,0x5C72, - 0,0x5C6F, 0,0x5C7C,0x5C6E,0x5270,0x3268, 0, -0x4857,0x4863,0x5C7B, 0,0x5C6D, 0, 0, 0, -0x5C77, 0, 0,0x5C75, 0, 0,0x3E23,0x5C74, - 0,0x325D, 0, 0, 0, 0, 0,0x5C73, -0x3C76,0x5C68,0x3B44, 0,0x4073, 0, 0, 0, - 0, 0,0x3C54,0x5C69,0x5C6A, 0,0x5C71,0x5C76, -0x5C79,0x3534, 0,0x4859,0x3B67,0x5C7E,0x5C7D,0x532B, -0x5D21,0x5D23,0x5D25,0x5271,0x5D24,0x5D26,0x5D27,0x5229, - 0, 0, 0, 0, 0, 0, 0,0x3A49, -0x5D29, 0, 0,0x5D36,0x5D31,0x5D34, 0, 0, - 0, 0, 0, 0, 0,0x5D30,0x464E, 0, - 0,0x4072, 0, 0, 0, 0,0x492F, 0, - 0, 0,0x5C6C,0x5D2E, 0, 0, 0, 0, -0x5D37, 0, 0,0x5C70,0x5D2F, 0,0x5D38, 0, -0x5D2C, 0, 0, 0, 0, 0, 0, 0, -0x5D39,0x5D33,0x5D2D,0x442A, 0, 0, 0, 0, -0x5D28,0x4033,0x412B,0x5D2A,0x5D2B, 0,0x5D32,0x3B71, -0x5D35,0x5328,0x5D3A, 0,0x5D3B,0x4327, 0, 0, -0x5D52,0x5D3C, 0, 0, 0,0x5D51, 0,0x393D, - 0, 0,0x3E55, 0,0x3E7A, 0, 0,0x3A4A, - 0, 0, 0, 0,0x5D4A, 0,0x5D45, 0, -0x5D3F, 0, 0, 0,0x324B,0x5D43, 0,0x5D4B, -0x3224,0x5D55, 0, 0, 0,0x5D3E, 0, 0, - 0,0x4650,0x5D50, 0, 0, 0, 0, 0, -0x5D54,0x4162,0x3746, 0, 0, 0, 0, 0, -0x5D4E,0x5D4F, 0, 0, 0,0x5D44, 0, 0, - 0,0x5D3D, 0,0x5D4D,0x4C51, 0,0x5D49, 0, - 0, 0, 0,0x5D42,0x4348,0x463C,0x4E2E,0x5D4C, - 0,0x5D48, 0, 0, 0, 0, 0, 0, -0x5D41, 0, 0, 0,0x5D46,0x425C, 0, 0, - 0, 0, 0, 0,0x5329,0x532A,0x5D53,0x4F74, -0x4878, 0, 0, 0, 0, 0, 0, 0, - 0,0x5D66, 0, 0, 0, 0, 0, 0, -0x5D47, 0, 0, 0,0x5D60,0x4264, 0, 0, - 0, 0, 0, 0, 0, 0,0x5D61, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x5D57, 0, 0, 0, 0, 0,0x5678, - 0,0x5D59,0x5D58,0x3870,0x5D56, 0, 0, 0, - 0,0x464F, 0,0x362D, 0, 0, 0, 0, - 0,0x5D62, 0,0x3A79,0x5461,0x5D67, 0, 0, - 0,0x3450, 0,0x5D5A, 0,0x3F7B,0x5D63, 0, -0x5D5F, 0,0x5D5D, 0, 0, 0, 0, 0, - 0, 0,0x3559, 0, 0, 0, 0,0x5D5B, -0x5D5C,0x5D5E, 0,0x3D2F,0x5D64, 0,0x5D65, 0, - 0, 0, 0, 0, 0, 0, 0,0x5D75, - 0,0x4349, 0, 0,0x4B62, 0, 0, 0, - 0,0x5D72, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x5861, - 0, 0,0x4651, 0,0x5D74, 0, 0, 0, -0x5574,0x5D73,0x5D70, 0, 0,0x5D6C, 0,0x5D6F, - 0,0x5D68, 0, 0,0x506E, 0, 0, 0, - 0,0x4858,0x5D6E, 0, 0,0x5D69, 0, 0, -0x5D6A,0x4B72, 0,0x5D6D, 0, 0,0x314D, 0, - 0, 0, 0, 0, 0,0x4036, 0,0x3C3B, -0x5D71, 0, 0,0x5D77, 0,0x5D76,0x5D6B, 0, - 0, 0, 0, 0,0x456E, 0, 0, 0, -0x5D7B, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x5E24, 0, 0,0x5E23, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x5D78, 0, 0, 0, - 0,0x436F, 0,0x427B, 0, 0, 0,0x5561, - 0, 0,0x4E35, 0, 0, 0, 0,0x5D7D, - 0,0x324C, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x4468,0x4A5F, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x473E, -0x5D7A,0x5D7C,0x5D7E,0x5E22,0x302A,0x314E, 0, 0, - 0, 0, 0,0x5E2C, 0, 0, 0, 0, -0x5E26,0x3D36,0x486F, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x5E21, 0, - 0,0x5E25, 0, 0, 0, 0,0x5E29, 0, - 0, 0, 0, 0,0x5E28, 0, 0, 0, -0x5E27, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x5E2D, 0,0x544C, 0, 0, 0, - 0,0x5E33,0x5E2A,0x5E2E, 0, 0,0x4059, 0, - 0, 0, 0, 0,0x3121,0x5E36, 0,0x5E31, - 0, 0, 0, 0, 0, 0, 0,0x5E32, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x5126,0x5E35, 0, 0, 0, - 0, 0, 0, 0,0x5E2F, 0, 0, 0, -0x5E30, 0,0x503D, 0, 0, 0,0x5E34,0x4A6D, -0x5E39, 0, 0, 0, 0, 0, 0,0x5E38, - 0,0x5E37, 0, 0, 0, 0, 0, 0, - 0,0x5E3B, 0, 0, 0, 0, 0, 0, - 0,0x3D65, 0, 0, 0, 0, 0,0x3258, -0x436A, 0, 0,0x5E3A, 0,0x453A, 0, 0, - 0, 0, 0, 0,0x5E3C, 0, 0, 0, - 0, 0, 0, 0,0x4C59, 0, 0, 0, - 0,0x372A, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x5465, 0, 0, 0,0x5E3D, - 0, 0, 0, 0, 0,0x5E3F, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x4422, 0, 0, 0, 0,0x5E41, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x5E3E, - 0,0x5E40, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x553A, 0, 0, 0,0x5E42, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x722E,0x3B22,0x4232, -0x4530,0x4247, 0, 0,0x722F, 0, 0, 0, - 0, 0,0x5069, 0, 0, 0,0x535D, 0, - 0, 0,0x6B3D, 0, 0, 0, 0, 0, - 0, 0, 0,0x3366,0x7230, 0,0x7231, 0, - 0,0x4A2D, 0, 0, 0, 0, 0, 0, - 0,0x3A67,0x7233,0x7235,0x7234,0x4B64,0x4F3A,0x7232, -0x4A34,0x524F,0x426C, 0, 0, 0, 0, 0, - 0, 0,0x4E43,0x7238,0x3076,0x7237, 0, 0, - 0, 0, 0,0x723E, 0,0x324F, 0, 0, - 0, 0, 0, 0,0x5141,0x723A, 0, 0, - 0, 0, 0,0x723C,0x5469, 0, 0,0x723B, -0x7236,0x723F,0x723D, 0,0x7239, 0, 0,0x7247, -0x7244,0x7246, 0, 0,0x724A,0x7242,0x7240, 0, - 0, 0,0x7245, 0, 0, 0, 0, 0, -0x567B, 0, 0, 0,0x7241, 0,0x4779,0x495F, - 0,0x7248,0x3946,0x3530, 0, 0,0x7243,0x7249, -0x7250,0x7256, 0, 0,0x3B57, 0, 0, 0, -0x7255,0x4D5C, 0,0x566B, 0, 0,0x7252,0x7254, - 0, 0, 0, 0,0x3872, 0, 0, 0, - 0,0x724B, 0, 0, 0,0x724E,0x4279, 0, -0x555D,0x724C,0x724D,0x724F,0x7253, 0, 0, 0, -0x7259,0x533C, 0, 0, 0, 0,0x366A, 0, -0x4A71, 0,0x3764,0x7257, 0, 0, 0,0x7258, -0x725A,0x725D,0x725B, 0, 0,0x725C, 0, 0, - 0, 0,0x5151,0x7251, 0,0x4D49, 0,0x4E4F, -0x5629, 0,0x7263, 0,0x435B, 0,0x7260, 0, - 0,0x402F,0x726C,0x725E, 0,0x7261, 0, 0, - 0,0x7268, 0, 0, 0, 0,0x7262, 0, - 0,0x7267, 0, 0,0x7266, 0, 0,0x7269, - 0, 0, 0,0x725F, 0, 0,0x7264,0x726A, - 0, 0, 0, 0, 0, 0, 0,0x532C, -0x7265,0x3275, 0, 0,0x7272, 0,0x502B, 0, - 0, 0, 0,0x7275, 0, 0, 0,0x3B48, - 0,0x7279, 0, 0, 0, 0, 0, 0, -0x7270, 0, 0,0x7276,0x7278,0x727A, 0, 0, - 0, 0, 0, 0, 0, 0,0x7273, 0, -0x7271, 0, 0, 0,0x3A7B, 0,0x357B, 0, - 0, 0, 0,0x726F,0x7277,0x726D,0x726E, 0, - 0, 0,0x726B,0x7326, 0,0x7323, 0, 0, -0x7322, 0, 0,0x7274, 0,0x485A, 0, 0, - 0, 0, 0,0x727B, 0, 0, 0,0x7325, - 0, 0, 0, 0, 0, 0, 0,0x4378, - 0, 0, 0, 0, 0, 0, 0, 0, -0x727D, 0, 0,0x7327,0x7329,0x7324, 0,0x727C, - 0, 0, 0,0x732B, 0,0x732A, 0, 0, - 0, 0,0x425D, 0, 0,0x732E, 0, 0, -0x7330, 0, 0, 0, 0, 0,0x7321, 0, - 0, 0,0x7331,0x732C, 0, 0, 0, 0, - 0,0x732F,0x727E,0x732D, 0, 0, 0, 0, - 0, 0, 0,0x7332, 0, 0, 0, 0, -0x7334, 0, 0, 0, 0,0x7328, 0, 0, - 0, 0,0x7333, 0, 0, 0,0x7335, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x5037, 0, 0, 0, 0,0x7338, 0, - 0, 0, 0,0x5979, 0, 0, 0, 0, - 0, 0,0x7339, 0, 0, 0, 0, 0, - 0, 0, 0,0x7337, 0,0x4864,0x7336, 0, - 0, 0, 0,0x733A, 0, 0, 0, 0, - 0,0x733B,0x3440, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x6E43, 0, 0, 0, 0, 0, - 0,0x733C, 0, 0,0x733D, 0, 0, 0, -0x512A, 0, 0, 0,0x742C,0x5046, 0, 0, - 0, 0, 0, 0,0x5050,0x515C, 0, 0, - 0, 0, 0, 0,0x4F4E, 0, 0,0x3D56, - 0,0x5143, 0, 0, 0, 0, 0, 0, - 0,0x3A62,0x6169,0x5242,0x7142,0x3239, 0, 0, -0x316D,0x7143, 0,0x4940,0x3344, 0,0x5972, 0, -0x4B25, 0,0x7144, 0, 0, 0, 0,0x5654, - 0, 0, 0, 0, 0,0x7145,0x7440,0x7146, - 0,0x542C,0x7147, 0,0x3040,0x7441, 0, 0, -0x7442, 0, 0,0x347C, 0,0x455B, 0, 0, - 0, 0,0x4C3B, 0, 0, 0,0x5064, 0, - 0, 0, 0, 0,0x4D60, 0, 0, 0, - 0, 0,0x7148, 0,0x5973, 0, 0, 0, - 0, 0, 0,0x313B, 0,0x4F2E, 0, 0, - 0,0x3824, 0, 0, 0, 0, 0,0x714A, - 0, 0, 0, 0,0x714B, 0, 0, 0, - 0,0x3243,0x4151, 0, 0,0x5730,0x7149, 0, - 0,0x714C, 0, 0, 0, 0,0x714E, 0, - 0, 0,0x5976, 0,0x5261,0x5423, 0, 0, -0x7443,0x4839, 0, 0, 0, 0, 0,0x7444, - 0, 0,0x714D,0x714F,0x3F63,0x7150, 0, 0, -0x7154, 0, 0, 0, 0, 0, 0, 0, -0x7156,0x7151, 0,0x4951,0x4561, 0, 0, 0, -0x4263,0x397C, 0, 0,0x7153, 0,0x7155, 0, - 0, 0,0x3953, 0, 0, 0, 0, 0, - 0, 0,0x715B, 0, 0, 0, 0, 0, -0x3A56, 0,0x307D,0x7159, 0, 0, 0, 0, - 0,0x7158,0x7152,0x715A, 0, 0, 0, 0, - 0,0x7157, 0, 0, 0,0x486C, 0, 0, - 0, 0,0x4D4A,0x715D, 0, 0, 0, 0, -0x653D, 0, 0, 0,0x715C, 0,0x715E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x715F, 0, 0,0x4F65, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x7445,0x3D73, - 0, 0, 0, 0, 0, 0,0x7160, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x7161, 0, 0, 0,0x4E77, - 0,0x522A, 0,0x717B, 0, 0,0x3832, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x3C7B,0x395B, 0,0x3966,0x4359,0x4A53,0x6A68, -0x4040,0x3E75,0x6A69,0x6A6A,0x6A6B, 0,0x6A6C,0x6A6D, -0x6A6E,0x6A6F,0x3D47, 0, 0, 0,0x757B, 0, - 0, 0,0x757D, 0,0x757E, 0,0x757C, 0, - 0, 0, 0,0x3D62, 0,0x7621,0x3425, 0, - 0, 0, 0,0x7622, 0, 0, 0,0x7623, - 0, 0, 0,0x6C32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5154, 0, 0, 0, 0, 0, 0,0x596A, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x7624, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6E3A, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x5532, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x537E,0x4C5C, 0, 0, 0, 0, 0, - 0, 0, 0,0x4A44, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x6540, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x7625, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x3E2F, 0, - 0, 0, 0, 0,0x4629, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5A25,0x3C46,0x3629,0x383C,0x484F,0x3C25,0x5A26,0x5A27, -0x4C56,0x4843,0x5A28,0x467D, 0,0x5135,0x5269,0x5136, -0x3C47, 0,0x3D32,0x3B64,0x5A29,0x5A2A,0x5148,0x5A2B, -0x506D,0x366F,0x425B, 0,0x4B4F,0x376D,0x4968,0x3743, -0x3E77,0x5624,0x5A2C,0x5A2D,0x4640,0x5767,0x4A36, 0, -0x5529,0x4B5F,0x556F,0x5A2E,0x565F,0x344A,0x5A30,0x5A2F, - 0,0x526B,0x5A31,0x5A32,0x5A33,0x4A54,0x5A34,0x4A2B, -0x5A35,0x5A36,0x334F,0x566F,0x5A37,0x3B30,0x352E,0x5A38, -0x5A39,0x396E,0x512F,0x5268,0x5A3A,0x3843,0x4F6A,0x326F, -0x5A3B,0x5A3C, 0,0x3D6B,0x4E5C,0x536F,0x5A3D,0x4E73, -0x5A3E,0x5355,0x3B65,0x5A3F,0x4B35,0x4B50,0x5A40,0x476B, -0x566E,0x5A41,0x4535,0x3641,0x5A42,0x374C,0x3F4E,0x5A43, -0x5A44,0x4B2D,0x5A45,0x3577,0x5A46,0x4142,0x573B,0x5A47, -0x4C38, 0,0x526A,0x4431,0x5A48,0x357D,0x3B51,0x5A49, -0x5033,0x5A4A,0x5A4B,0x4E3D,0x5A4C,0x5A4D,0x5A4E,0x3277, -0x5A51,0x5A4F,0x5168,0x5A50,0x4355,0x5A52, 0,0x5A53, -0x5A54,0x5A55,0x503B,0x5225,0x3079,0x5A56,0x472B,0x5A57, -0x3D77,0x4321,0x5A58,0x5A59,0x437D,0x4C37,0x5A5A,0x5A5B, -0x403E,0x4657,0x5A5C,0x5A5D,0x4734,0x5A5E,0x5A5F,0x3948, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x3B6D, 0, 0, 0, 0,0x3639,0x7478, - 0,0x7479, 0, 0,0x4D63, 0, 0, 0, - 0, 0, 0, 0, 0,0x7539, 0, 0, - 0, 0,0x6B60, 0, 0, 0, 0, 0, - 0,0x4F73,0x3B3F, 0, 0, 0, 0, 0, - 0, 0,0x3A40,0x5425, 0, 0, 0, 0, - 0, 0, 0,0x6159, 0, 0, 0, 0, -0x7574,0x312A,0x3272, 0, 0, 0, 0, 0, - 0, 0,0x7575, 0, 0,0x7577, 0, 0, - 0,0x3A51,0x7576, 0,0x4332, 0, 0, 0, - 0, 0, 0, 0,0x7579, 0, 0, 0, -0x7578, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x3134,0x556A,0x383A, - 0,0x3931,0x3246,0x5470,0x4F4D,0x305C,0x554B,0x3B75, -0x564A,0x3737,0x4C30,0x4636,0x3161,0x393A,0x567C,0x3961, -0x3721,0x3C7A,0x6A5A,0x6A5B,0x4C79,0x3973,0x6A5C,0x347B, -0x4333,0x3751,0x3A58,0x6A5D,0x5474,0x6A5E,0x3C56,0x3B5F, -0x6A5F,0x415E,0x4238,0x545F,0x574A,0x6A60,0x6A61,0x6A64, -0x6A62,0x6A63,0x495E,0x3833,0x3644,0x6A65,0x4A6A,0x494D, -0x344D, 0, 0,0x6259,0x4562,0x6A66,0x4035, 0, -0x5738,0x6A67,0x572C,0x487C,0x5853,0x584D,0x545E, 0, -0x5479,0x4944,0x532E,0x3853,0x3360, 0,0x4962,0x7476, - 0, 0, 0,0x3A55, 0,0x7477, 0, 0, -0x575F, 0, 0,0x7471,0x3830,0x5554,0x384F,0x4670, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x3343, 0, 0,0x7472,0x332C, 0, 0, - 0, 0,0x543D,0x4777, 0, 0, 0, 0, - 0,0x7474, 0, 0,0x7473, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x4C4B, - 0, 0, 0,0x4824, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x7475, 0,0x5763,0x453F,0x7540, 0, 0, -0x753B, 0,0x7543, 0,0x7542, 0,0x563A,0x7541, - 0, 0, 0,0x543E,0x7544, 0,0x754C, 0, - 0, 0, 0,0x304F,0x3578, 0,0x7549,0x754A, - 0,0x455C, 0, 0, 0, 0,0x7545,0x7546, - 0, 0,0x7547,0x754B, 0,0x3E60,0x7548,0x387A, - 0, 0, 0,0x7550,0x7553, 0, 0, 0, -0x3F67, 0,0x3972,0x753C,0x754D, 0, 0,0x4237, - 0, 0, 0,0x4C78, 0,0x3C79, 0,0x754E, -0x754F,0x7551,0x3665,0x7552, 0,0x7555, 0, 0, - 0, 0, 0, 0, 0,0x753D, 0, 0, - 0,0x7554,0x533B, 0,0x336C, 0, 0,0x4C24, - 0, 0, 0, 0,0x7556, 0, 0, 0, - 0, 0, 0, 0, 0,0x7557,0x3E61,0x7558, - 0, 0,0x4C5F,0x755B, 0, 0, 0, 0, - 0,0x3248,0x5759, 0,0x7559, 0,0x755A,0x755C, - 0,0x7562, 0, 0, 0,0x7560, 0, 0, - 0,0x755F,0x755D, 0, 0,0x7561, 0, 0, -0x755E,0x7564,0x7565, 0,0x4C63, 0, 0,0x653F, -0x3538,0x7563,0x7568,0x4C23, 0, 0, 0, 0, - 0,0x7566,0x7567, 0, 0, 0, 0, 0, - 0,0x753E, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x3144, 0, - 0,0x753F, 0, 0,0x3545,0x3264, 0,0x756C, -0x7569, 0,0x3657, 0,0x756D, 0,0x756A, 0, - 0, 0, 0, 0,0x756B, 0, 0,0x345A, - 0,0x546A, 0, 0, 0,0x756E, 0,0x3379, - 0, 0, 0, 0, 0, 0, 0,0x756F, -0x7571, 0, 0, 0,0x7570, 0, 0, 0, - 0, 0, 0, 0,0x7572, 0,0x7573, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x496D,0x392A, 0, 0,0x477B, - 0, 0,0x3663, 0, 0, 0, 0, 0, - 0, 0,0x4C49, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x6A26, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x3335,0x547E, -0x396C,0x5079, 0,0x696D,0x572A,0x696E,0x4256,0x486D, -0x3A64,0x696F,0x6970,0x6971,0x5661,0x6972,0x6973,0x6975, -0x6974,0x6976,0x6977,0x4761,0x6978,0x5458,0x6979,0x3D4E, - 0,0x697A,0x697B,0x3D4F,0x697C,0x3828,0x413E,0x697D, -0x3132,0x3B54,0x3975,0x697E, 0,0x6A21,0x6A22,0x6A23, -0x3778,0x3C2D, 0,0x4A64,0x604E,0x542F,0x4F3D,0x5537, -0x6A24,0x555E,0x6A25,0x5041,0x393C, 0,0x3447,0x3159, - 0, 0, 0,0x4031, 0, 0, 0, 0, -0x3166,0x3167, 0,0x3168, 0, 0, 0, 0, -0x333D,0x4868, 0, 0, 0, 0,0x6541, 0, - 0,0x315F, 0, 0, 0,0x4149,0x346F, 0, - 0,0x4728,0x5358, 0,0x4679,0x5138, 0,0x397D, -0x4275, 0, 0, 0, 0, 0,0x532D, 0, -0x544B,0x3D7C, 0,0x6542,0x3735,0x6543, 0, 0, -0x3B39,0x5562, 0,0x3D78,0x5436,0x4E25,0x412C,0x3359, - 0, 0,0x4C76, 0,0x6546,0x6544,0x6548, 0, -0x654A,0x6547,0x354F,0x4648, 0,0x357C,0x6545, 0, -0x4A76, 0, 0,0x6549, 0, 0, 0,0x4354, -0x3145,0x3C23, 0, 0, 0,0x5737, 0, 0, -0x4D4B,0x4B4D,0x4A4A,0x4C53,0x654C,0x654B,0x4466, 0, - 0,0x5121,0x5137,0x654D, 0,0x6550, 0,0x4D38, -0x5670,0x654F,0x355D, 0,0x4D3E, 0,0x6551,0x363A, - 0, 0,0x4D28,0x3964, 0,0x4A45,0x3351,0x4B59, -0x546C,0x6552,0x376A, 0, 0, 0,0x654E, 0, - 0, 0, 0, 0, 0,0x6555,0x347E,0x6556, - 0, 0, 0, 0, 0,0x6553,0x6554, 0, -0x525D, 0, 0,0x425F,0x3146, 0,0x5362, 0, - 0,0x365D,0x4B6C, 0,0x6557, 0, 0,0x5376, - 0, 0, 0, 0, 0,0x3169, 0,0x3674, -0x655A,0x6558,0x6559,0x3540, 0, 0, 0,0x5245, -0x655C, 0, 0,0x655E, 0, 0, 0, 0, - 0, 0,0x655D,0x4732, 0,0x5223, 0, 0, -0x655B, 0, 0, 0, 0,0x5462,0x555A, 0, - 0, 0, 0, 0,0x6560,0x5771, 0, 0, - 0, 0, 0, 0, 0,0x6561, 0,0x315C, -0x517B, 0,0x6562,0x6564, 0, 0, 0, 0, -0x6563, 0, 0,0x6565, 0, 0, 0, 0, - 0,0x5258, 0,0x354B, 0,0x675F, 0,0x5A75, - 0,0x5A78, 0,0x5A76, 0,0x5A77, 0, 0, - 0,0x5A7A,0x504F,0x4447, 0, 0,0x306E, 0, - 0, 0,0x5030, 0,0x5A79, 0,0x534A,0x3A2A, -0x5B22,0x4771, 0,0x5A7C,0x5A7B,0x495B,0x5A7D, 0, -0x5B21,0x575E,0x5A7E,0x415A, 0, 0,0x5B25, 0, - 0,0x5374, 0, 0,0x5B27,0x5B24, 0,0x5B28, - 0, 0,0x3D3C, 0, 0, 0,0x4049,0x5B23, -0x5B26,0x5623, 0,0x5B29, 0, 0, 0,0x5B2D, - 0, 0, 0,0x5B2E,0x5B2C,0x3A42, 0, 0, - 0,0x3F24,0x5B2B, 0, 0, 0,0x5B2A,0x5447, -0x323F, 0, 0,0x5B2F, 0,0x3979, 0,0x5B30, - 0, 0, 0, 0,0x333B, 0, 0, 0, -0x3526, 0, 0, 0, 0,0x363C,0x5B31, 0, - 0, 0,0x3675, 0,0x5B32, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x3149, 0, 0, 0, 0,0x5B34, 0, - 0, 0,0x5B33,0x5B35, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x5B37, - 0,0x5B36, 0, 0, 0, 0, 0, 0, - 0,0x5B38, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x5B39, 0, 0,0x5B3A, 0, - 0,0x534F,0x747A,0x4775,0x5743,0x4564,0x747C,0x747D, -0x747B, 0,0x3E46, 0, 0, 0, 0,0x506F, - 0, 0,0x3753, 0, 0,0x544D,0x4C2A, 0, - 0,0x7522,0x7521,0x3A28,0x747E,0x4B56, 0, 0, - 0,0x7524,0x4052, 0,0x336A, 0,0x4D2A,0x7525, -0x7523,0x3D34,0x7528, 0,0x7529,0x3D4D,0x4338,0x3F61, -0x4B61,0x752A, 0, 0, 0,0x7526,0x7527,0x4470, - 0, 0, 0, 0, 0,0x752C, 0,0x343C, - 0,0x576D, 0,0x3457,0x752B,0x752E, 0, 0, -0x752D,0x752F,0x5051, 0, 0, 0, 0, 0, - 0, 0,0x4351,0x4829, 0, 0, 0, 0, - 0, 0,0x7530,0x7531, 0, 0, 0, 0, - 0, 0,0x7532, 0, 0,0x7533,0x7534,0x7535, - 0, 0, 0, 0,0x7537,0x7536, 0, 0, - 0, 0,0x7538, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x3249, - 0,0x5354,0x4A4D, 0,0x406F,0x5658,0x5230,0x413F, - 0,0x3D70, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x382A, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x3C78, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x7646, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x7647, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7648, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x7649, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x764A, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x764C, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x764B, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x7769, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x764D, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x764E, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x6E44,0x6E45,0x6E46, -0x556B,0x3624,0x6E48,0x6E47,0x6E49,0x6E4A,0x4725,0x6E4B, -0x6E4C, 0,0x3730,0x3576,0x6E4D,0x6E4F, 0,0x6E4E, - 0,0x3846,0x6E50,0x6E51,0x6E52,0x365B,0x332E,0x5653, -0x4446,0x3135,0x3856,0x6E53,0x6E54,0x543F,0x4755,0x3E7B, -0x4E59,0x3933,0x6E56,0x6E55,0x6E58,0x6E57,0x4525,0x6E59, -0x6E5A,0x472E,0x6E5B,0x472F,0x6E5C,0x3227,0x6E5D,0x6E5E, -0x6E5F,0x6E60,0x6E61,0x576A,0x6E62,0x6E63,0x3C58,0x6E64, -0x534B,0x4C7A,0x322C,0x4165,0x6E65,0x4726,0x432D, 0, -0x6E66,0x6E67,0x6E68,0x6E69,0x6E6A,0x6E6B,0x6E6C, 0, -0x6E6D,0x6E6E,0x6E6F, 0, 0,0x6E70,0x6E71,0x6E72, -0x6E74,0x6E73, 0,0x6E75,0x4D2D,0x4241,0x6E76,0x6E77, -0x6E78,0x5521,0x6E79,0x4F33,0x6E7A,0x6E7B, 0,0x6E7C, -0x6E7D,0x6F21,0x6E7E,0x6F22,0x3875,0x437A,0x6F23,0x6F24, -0x3D42,0x523F,0x3279,0x6F25,0x6F26,0x6F27,0x5278,0x6F28, -0x567D,0x6F29,0x464C, 0,0x6F2A,0x6F2B,0x4134,0x6F2C, -0x4F7A,0x4B78,0x6F2E,0x6F2D,0x337A,0x3978,0x6F2F,0x6F30, -0x5062,0x6F31,0x6F32,0x3766,0x503F,0x6F33,0x6F34,0x6F35, -0x4871,0x4C60,0x6F36,0x6F37,0x6F38,0x6F39,0x6F3A,0x5560, -0x6F3B,0x346D,0x432A,0x6F3C, 0,0x6F3D,0x6F3E,0x6F3F, - 0,0x4E7D,0x6F40,0x4260,0x3438,0x5736,0x3D75, 0, -0x4F47,0x6F43,0x6F41,0x6F42,0x6F44,0x3627,0x3C7C,0x3E62, -0x434C,0x6F45,0x6F46, 0,0x6F47,0x6F4F,0x6F48,0x6F49, -0x6F4A,0x4742,0x6F71,0x364D,0x6F4B, 0,0x6F4C,0x6F4D, -0x3646,0x433E,0x6F4E, 0,0x6F50,0x6F51,0x6F52,0x5572, - 0,0x6F53,0x4477, 0,0x6F54,0x4478,0x6F55,0x6F56, -0x3864,0x3077,0x6F57,0x6F58,0x6F59, 0,0x6F5A,0x6F5B, -0x6F5C,0x6F5D, 0,0x6F5E,0x3E35,0x6F61,0x6F5F,0x6F60, - 0,0x6F62,0x6F63,0x414D,0x6F64,0x6F65,0x6F66,0x6F67, -0x6F68,0x6F69,0x6F6A,0x6F6B,0x6F6C,0x4058, 0,0x6F6D, -0x412D,0x6F6E,0x6F6F,0x6F70, 0, 0,0x4F62, 0, - 0, 0, 0, 0, 0, 0, 0,0x3324, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4345,0x6345,0x4941,0x6346, 0,0x3155,0x4E4A,0x3433, -0x4872,0x6347,0x4F50,0x6348,0x3C64,0x6349,0x634A,0x4346, -0x5522,0x4456,0x396B,0x4E45,0x634B,0x4376,0x634C, 0, -0x3727,0x3873,0x3A52,0x634D,0x634E,0x5444,0x634F, 0, -0x6350,0x514B,0x6351,0x6352,0x6353,0x6354,0x5156,0x6355, -0x327B,0x403B,0x6356, 0,0x402B,0x6357,0x6358,0x6359, - 0,0x635A,0x635B, 0,0x3837,0x5A62, 0,0x3653, - 0,0x5A64,0x5A63, 0, 0, 0, 0, 0, - 0, 0,0x5A66, 0, 0, 0,0x486E, 0, - 0,0x5A65,0x3740,0x5174,0x5275,0x5573,0x3D57, 0, - 0, 0, 0,0x5768,0x5A68,0x5A67, 0,0x3022, -0x4D53, 0,0x5A69, 0,0x383D,0x3C4A,0x423D,0x4224, -0x3342,0x5A6A, 0,0x422A,0x4430,0x3D35, 0, 0, -0x4F5E, 0, 0, 0,0x5A6B,0x4942, 0, 0, - 0, 0, 0,0x315D, 0, 0, 0,0x5A6C, - 0,0x3638,0x543A, 0,0x337D, 0, 0,0x5A6D, -0x5449,0x4F55,0x4563, 0,0x5A6E, 0, 0, 0, - 0, 0,0x5A6F, 0,0x5A70,0x416A,0x4C55,0x4F5D, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x5367,0x4221, 0, -0x5A71, 0, 0,0x4B65, 0,0x5A72, 0,0x4B66, -0x527E, 0, 0, 0,0x3874, 0, 0,0x5A73, -0x302F,0x4F36, 0, 0,0x554F, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x4B6D, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5A74, 0, 0,0x6344, 0, 0,0x4125, 0, - 0,0x763F, 0, 0,0x7640,0x7641,0x4451, 0, -0x4838,0x5163, 0, 0,0x505B,0x5145,0x3C2F,0x394D, - 0,0x6F74, 0, 0,0x3446,0x533A,0x7642,0x337B, - 0, 0,0x7643, 0, 0,0x3571, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7645, 0, 0, 0, 0, 0, 0, 0, -0x536A,0x7627,0x5129, 0, 0, 0, 0,0x7629, - 0, 0, 0,0x7628, 0, 0,0x4163,0x4057, - 0,0x3122, 0, 0, 0, 0,0x4E6D, 0, -0x5068,0x762B, 0, 0,0x4F76, 0,0x762A,0x5570, -0x762C,0x4339, 0, 0, 0,0x3B74,0x762E,0x762D, - 0, 0, 0,0x445E, 0, 0,0x4158, 0, - 0, 0, 0, 0,0x4B2A, 0,0x4F3C, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x762F, 0, 0,0x7630, 0, 0, -0x7631, 0,0x4236, 0, 0, 0, 0, 0, -0x3054,0x4579, 0, 0, 0, 0,0x7632, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x4760,0x7626, 0, 0,0x3E38, 0, - 0,0x3E32, 0,0x3565, 0, 0,0x3747, 0, -0x3F3F,0x4352,0x4366, 0, 0,0x584C, 0, 0, - 0,0x386F, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x3D79,0x5125, 0,0x3050, 0, - 0, 0, 0, 0,0x7730, 0, 0, 0, - 0, 0, 0, 0, 0,0x7731, 0, 0, - 0, 0, 0,0x502C, 0,0x3030, 0, 0, - 0,0x7732,0x7733, 0,0x7734, 0, 0, 0, -0x474A, 0, 0, 0, 0, 0, 0, 0, -0x3E4F, 0, 0,0x7737, 0, 0, 0, 0, - 0, 0, 0,0x7736, 0,0x315E, 0,0x7735, - 0, 0,0x7738, 0,0x7739, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x4E24,0x484D, - 0,0x3A2B,0x6838,0x6839,0x683A,0x3E42, 0, 0, - 0, 0, 0,0x5274, 0,0x544F,0x4958, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x5233,0x3625,0x476A, -0x717C,0x4F6E,0x4B33,0x506B,0x676F,0x4D67,0x394B,0x3659, -0x717D,0x3064,0x4B4C,0x717E,0x5424,0x422D,0x416C,0x4644, -0x3E31,0x7221,0x3C55, 0,0x7222,0x7223, 0,0x7224, -0x5243,0x4635, 0,0x4D47,0x7225, 0,0x5331,0x3F45, -0x4C62, 0,0x7226,0x7227,0x5155,0x366E,0x7228,0x7229, -0x355F,0x722A,0x722B, 0,0x327C,0x722C,0x722D,0x4827, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x3767, 0, - 0,0x6C29,0x6C2A,0x6C2B, 0,0x6C2C, 0, 0, -0x462E,0x6C2D,0x6C2E, 0, 0, 0,0x3749,0x4A33, - 0, 0, 0, 0, 0, 0, 0,0x6238, -0x774F, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x7750, 0, 0, -0x324D, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x7751, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x7753,0x7752, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0x623B, 0,0x3C22, 0,0x623C, -0x623D,0x623E,0x623F,0x6240,0x6241,0x3739,0x527B,0x3D24, -0x4A4E,0x3125,0x4B47, 0,0x6242,0x367C,0x4844,0x6243, - 0, 0,0x3D48, 0,0x317D,0x6244, 0,0x3676, -0x6245,0x4459, 0, 0,0x6246,0x4F5A,0x395D,0x6247, -0x4021, 0,0x6248,0x3276, 0,0x6249, 0,0x4173, -0x624A,0x624B,0x4278,0x624C,0x624D,0x624E,0x4A57,0x5838, -0x5965,0x4F63, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x7025, 0, 0, -0x5C30, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x426D,0x5426,0x4D54,0x5131, -0x335B,0x477D, 0,0x3235,0x423F,0x6660,0x4A3B,0x6661, -0x6662,0x3E54,0x6663,0x5724,0x4D55,0x6665,0x3C5D,0x6664, -0x6666,0x6667,0x426E, 0,0x3D3E,0x6668,0x4266,0x3A27, -0x6669, 0,0x666A,0x3352,0x5169, 0, 0,0x3F25, -0x666B,0x466F,0x666C,0x666D, 0, 0,0x666E,0x462D, -0x666F, 0,0x4927,0x6670,0x6671,0x6672,0x6539,0x6673, -0x6674,0x4262,0x6675,0x6676,0x5668,0x6677, 0,0x6678, -0x3947, 0, 0, 0, 0, 0, 0, 0, -0x773B,0x773A, 0, 0, 0, 0,0x773E,0x773C, -0x3A21, 0,0x773F, 0,0x7740, 0, 0, 0, -0x7742,0x7741,0x7744, 0, 0,0x7743, 0, 0, - 0, 0, 0,0x7745,0x7746, 0, 0, 0, - 0,0x7747, 0,0x4B68, 0, 0, 0, 0, -0x385F, 0, 0, 0, 0, 0, 0,0x7754, - 0,0x7755, 0, 0, 0, 0,0x7756, 0, - 0, 0, 0,0x7758, 0,0x775A, 0,0x7757, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x775B, 0,0x7759, 0, 0, 0, 0, - 0, 0, 0,0x5757, 0, 0, 0, 0, -0x775C, 0, 0, 0, 0, 0, 0,0x775D, - 0, 0, 0,0x775E, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x775F, - 0, 0, 0,0x7760, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x5B4B, - 0, 0,0x582A, 0, 0, 0, 0, 0, - 0, 0, 0,0x6577,0x396D, 0, 0, 0, - 0,0x3F7D,0x3B6A,0x7749,0x4647,0x7748, 0,0x774A, -0x774C,0x774B, 0, 0, 0,0x774D, 0,0x4E3A, - 0,0x774E, 0, 0,0x4427}; - -/* page 7 0x9C7C-0x9CE2 */ -static uint16 tab_uni_gb23127[]={ -0x5363, 0, 0,0x764F, 0,0x4233,0x7650, 0, - 0,0x7651,0x7652,0x7653,0x7654, 0, 0,0x7656, - 0,0x312B,0x7657, 0,0x7658,0x7659,0x765A, 0, -0x765B,0x765C, 0, 0, 0, 0,0x765D,0x765E, -0x4F4A, 0,0x765F,0x7660,0x7661,0x7662,0x7663,0x7664, -0x4070,0x7665,0x7666,0x7667,0x7668,0x7669, 0,0x766A, - 0,0x766B,0x766C, 0,0x766D,0x766E,0x766F,0x7670, -0x7671,0x7672,0x7673,0x7674,0x3E28, 0,0x7675,0x7676, -0x7677,0x7678, 0, 0, 0, 0, 0,0x487A, -0x7679,0x767A,0x767B,0x767C, 0, 0,0x767D,0x767E, -0x7721,0x7722,0x7723,0x7724,0x7725, 0, 0,0x7726, -0x7727,0x7728,0x316E,0x7729,0x772A,0x772B, 0, 0, -0x772C,0x772D,0x415B,0x772E, 0, 0,0x772F}; - -/* page 8 0x9E1F-0x9FA0 */ -static uint16 tab_uni_gb23128[]={ -0x4471,0x702F,0x3C26,0x7030,0x4379, 0,0x4538,0x513B, - 0,0x7031,0x7032,0x7033,0x7034,0x7035,0x513C, 0, -0x516C, 0,0x7037,0x7036,0x5427, 0,0x4D52,0x7038, -0x703A,0x7039,0x703B,0x703C, 0, 0,0x386B,0x703D, -0x3A68, 0,0x703E,0x703F,0x3E69,0x7040,0x366C,0x7041, -0x7042,0x7043,0x7044,0x4835,0x7045,0x7046, 0,0x7047, -0x4574, 0,0x7048, 0, 0, 0,0x7049, 0, -0x704A,0x773D, 0,0x704B,0x704C,0x704D, 0,0x704E, - 0, 0, 0, 0,0x704F,0x3A57, 0,0x7050, -0x7051,0x7052,0x7053,0x7054,0x7055,0x7056,0x7058, 0, - 0,0x5325,0x7057, 0,0x7059, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x753A, -0x4239, 0, 0,0x7764, 0, 0, 0, 0, -0x7765,0x7766, 0, 0,0x7767, 0, 0, 0, - 0, 0, 0,0x7768,0x4234, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x776A, 0, -0x776B, 0, 0, 0, 0, 0, 0,0x4273, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x7470, 0, 0, - 0,0x746F, 0, 0,0x4269, 0,0x7761,0x7762, - 0, 0, 0, 0, 0,0x3B46, 0, 0, - 0, 0,0x5964, 0, 0, 0,0x4A72,0x4068, -0x7024, 0,0x3A5A, 0, 0,0x472D, 0, 0, - 0,0x442C, 0, 0,0x776C,0x776D,0x776E, 0, -0x7770,0x776F, 0,0x7771, 0, 0,0x7774, 0, -0x7773, 0,0x7772,0x7775, 0, 0, 0, 0, -0x7776, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x6D69, 0,0x6D6A,0x6D6B, 0,0x763C, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x763D, 0,0x763E,0x3626, - 0,0x583E, 0, 0,0x3944, 0, 0, 0, -0x583B, 0,0x5C31, 0, 0, 0, 0, 0, - 0,0x4A73, 0,0x7777, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0x7778, 0, 0, -0x7779, 0, 0, 0, 0, 0, 0, 0, -0x777B, 0,0x777A, 0,0x3147, 0,0x777C,0x777D, - 0, 0, 0, 0, 0,0x777E, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x466B,0x6C34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x335D,0x7633, 0, 0,0x7634,0x4164,0x7635,0x7636, -0x7637,0x7638,0x7639,0x763A,0x4823,0x763B, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0x417A,0x3928,0x6D68, 0, 0, 0, -0x396A,0x595F}; - -/* page 9 0xFF01-0xFFE5 */ -static uint16 tab_uni_gb23129[]={ -0x2321,0x2322,0x2323,0x2167,0x2325,0x2326,0x2327,0x2328, -0x2329,0x232A,0x232B,0x232C,0x232D,0x232E,0x232F,0x2330, -0x2331,0x2332,0x2333,0x2334,0x2335,0x2336,0x2337,0x2338, -0x2339,0x233A,0x233B,0x233C,0x233D,0x233E,0x233F,0x2340, -0x2341,0x2342,0x2343,0x2344,0x2345,0x2346,0x2347,0x2348, -0x2349,0x234A,0x234B,0x234C,0x234D,0x234E,0x234F,0x2350, -0x2351,0x2352,0x2353,0x2354,0x2355,0x2356,0x2357,0x2358, -0x2359,0x235A,0x235B,0x235C,0x235D,0x235E,0x235F,0x2360, -0x2361,0x2362,0x2363,0x2364,0x2365,0x2366,0x2367,0x2368, -0x2369,0x236A,0x236B,0x236C,0x236D,0x236E,0x236F,0x2370, -0x2371,0x2372,0x2373,0x2374,0x2375,0x2376,0x2377,0x2378, -0x2379,0x237A,0x237B,0x237C,0x237D,0x212B, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0x2169, -0x216A, 0,0x237E, 0,0x2324}; - -static int func_uni_gb2312_onechar(int code){ - if ((code>=0x00A4)&&(code<=0x01DC)) - return(tab_uni_gb23120[code-0x00A4]); - if ((code>=0x02C7)&&(code<=0x0451)) - return(tab_uni_gb23121[code-0x02C7]); - if ((code>=0x2015)&&(code<=0x2312)) - return(tab_uni_gb23122[code-0x2015]); - if ((code>=0x2460)&&(code<=0x2642)) - return(tab_uni_gb23123[code-0x2460]); - if ((code>=0x3000)&&(code<=0x3129)) - return(tab_uni_gb23124[code-0x3000]); - if ((code>=0x3220)&&(code<=0x3229)) - return(tab_uni_gb23125[code-0x3220]); - if ((code>=0x4E00)&&(code<=0x9B54)) - return(tab_uni_gb23126[code-0x4E00]); - if ((code>=0x9C7C)&&(code<=0x9CE2)) - return(tab_uni_gb23127[code-0x9C7C]); - if ((code>=0x9E1F)&&(code<=0x9FA0)) - return(tab_uni_gb23128[code-0x9E1F]); - if ((code>=0xFF01)&&(code<=0xFFE5)) - return(tab_uni_gb23129[code-0xFF01]); - return(0); -} - - -static int -my_wc_mb_gb2312(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, uchar *s, uchar *e) -{ - int code; - - if (s >= e) - return MY_CS_TOOSMALL; - - if ((uint) wc < 0x80) - { - s[0]= (uchar) wc; - return 1; - } - - if (!(code=func_uni_gb2312_onechar(wc))) - return MY_CS_ILUNI; - - if (s+2>e) - return MY_CS_TOOSMALL2; - - code|=0x8080; - s[0]=code>>8; - s[1]=code&0xFF; - return 2; -} - - -static int -my_mb_wc_gb2312(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t *pwc, const uchar *s, const uchar *e){ - int hi; - - if (s >= e) - return MY_CS_TOOSMALL; - - if ((hi= s[0]) < 0x80) - { - pwc[0]=hi; - return 1; - } - - if (s+2>e) - return MY_CS_TOOSMALL2; - - if (!(pwc[0]=func_gb2312_uni_onechar(((hi<<8)+s[1])&0x7F7F))) - return -2; - - return 2; -} - - -/* - Returns well formed length of a EUC-KR string. -*/ -static size_t -my_well_formed_len_gb2312(CHARSET_INFO *cs __attribute__((unused)), - const char *b, const char *e, - size_t pos, int *error) -{ - const char *b0= b; - const char *emb= e - 1; /* Last possible end of an MB character */ - - *error= 0; - while (pos-- && b < e) - { - if ((uchar) b[0] < 128) - { - /* Single byte ascii character */ - b++; - } - else if (b < emb && isgb2312head(*b) && isgb2312tail(b[1])) - { - /* Double byte character */ - b+= 2; - } - else - { - /* Wrong byte sequence */ - *error= 1; - break; - } - } - return (size_t) (b - b0); -} - - -static MY_COLLATION_HANDLER my_collation_ci_handler = -{ - NULL, /* init */ - my_strnncoll_simple, /* strnncoll */ - my_strnncollsp_simple, - my_strnxfrm_simple, /* strnxfrm */ - my_strnxfrmlen_simple, - my_like_range_mb, /* like_range */ - my_wildcmp_mb, /* wildcmp */ - my_strcasecmp_mb, /* instr */ - my_instr_mb, - my_hash_sort_simple, - my_propagate_simple -}; - -static MY_CHARSET_HANDLER my_charset_handler= -{ - NULL, /* init */ - ismbchar_gb2312, - mbcharlen_gb2312, - my_numchars_mb, - my_charpos_mb, - my_well_formed_len_gb2312, - my_lengthsp_8bit, - my_numcells_8bit, - my_mb_wc_gb2312, /* mb_wc */ - my_wc_mb_gb2312, /* wc_mb */ - my_mb_ctype_mb, - my_caseup_str_mb, - my_casedn_str_mb, - my_caseup_mb, - my_casedn_mb, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_strtoll10_8bit, - my_strntoull10rnd_8bit, - my_scan_8bit -}; - - -CHARSET_INFO my_charset_gb2312_chinese_ci= -{ - 24,0,0, /* number */ - MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ - "gb2312", /* cs name */ - "gb2312_chinese_ci",/* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_gb2312, - to_lower_gb2312, - to_upper_gb2312, - sort_order_gb2312, - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_caseinfo_gb2312, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 2, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xF7FE, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_handler, - &my_collation_ci_handler -}; - -CHARSET_INFO my_charset_gb2312_bin= -{ - 86,0,0, /* number */ - MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "gb2312", /* cs name */ - "gb2312_bin", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_gb2312, - to_lower_gb2312, - to_upper_gb2312, - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_caseinfo_gb2312, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 2, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xF7FE, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_handler, - &my_collation_mb_bin_handler -}; - -#endif diff --git a/deps/mysqllite/strings/ctype-gbk.c b/deps/mysqllite/strings/ctype-gbk.c deleted file mode 100644 index 547c8821229919..00000000000000 --- a/deps/mysqllite/strings/ctype-gbk.c +++ /dev/null @@ -1,10869 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* This file is for Chinese character sets GBK, created by Wei He - (hewei@mail.ied.ac.cn) -*/ - -/* - * This comment is parsed by configure to create ctype.c, - * so don't change it unless you know what you are doing. - * - * .configure. strxfrm_multiply_gbk=1 - * .configure. mbmaxlen_gbk=2 - */ - - -#include -#include "m_string.h" -#include "m_ctype.h" - -#ifdef HAVE_CHARSET_gbk - - -/* Support for Chinese(GBK) characters, by hewei@mail.ied.ac.cn */ - -#define isgbkhead(c) (0x81<=(uchar)(c) && (uchar)(c)<=0xfe) -#define isgbktail(c) ((0x40<=(uchar)(c) && (uchar)(c)<=0x7e) || \ - (0x80<=(uchar)(c) && (uchar)(c)<=0xfe)) - -#define isgbkcode(c,d) (isgbkhead(c) && isgbktail(d)) -#define gbkcode(c,d) ((((uint) (uchar) (c)) <<8) | (uchar)(d)) -#define gbkhead(e) ((uchar)(e>>8)) -#define gbktail(e) ((uchar)(e&0xff)) - -static uchar ctype_gbk[257] = -{ - 0, /* For standard library */ - 32,32,32,32,32,32,32,32,32,40,40,40,40,40,32,32, - 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, - 72,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, - 132,132,132,132,132,132,132,132,132,132,16,16,16,16,16,16, - 16,129,129,129,129,129,129,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,16,16,16,16,16, - 16,130,130,130,130,130,130,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,16,16,16,16,32, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0, -}; - -static uchar to_lower_gbk[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '[', '\\', ']', '^', '_', - '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '{', '|', '}', '~', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - -static uchar to_upper_gbk[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', - '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '{', '|', '}', '~', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - - -static MY_UNICASE_INFO cA2[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xA240,0xA240,0x003F}, /* A240 */ - {0xA241,0xA241,0x003F}, - {0xA242,0xA242,0x003F}, - {0xA243,0xA243,0x003F}, - {0xA244,0xA244,0x003F}, - {0xA245,0xA245,0x003F}, - {0xA246,0xA246,0x003F}, - {0xA247,0xA247,0x003F}, - {0xA248,0xA248,0x003F}, - {0xA249,0xA249,0x003F}, - {0xA24A,0xA24A,0x003F}, - {0xA24B,0xA24B,0x003F}, - {0xA24C,0xA24C,0x003F}, - {0xA24D,0xA24D,0x003F}, - {0xA24E,0xA24E,0x003F}, - {0xA24F,0xA24F,0x003F}, - {0xA250,0xA250,0x003F}, /* A250 */ - {0xA251,0xA251,0x003F}, - {0xA252,0xA252,0x003F}, - {0xA253,0xA253,0x003F}, - {0xA254,0xA254,0x003F}, - {0xA255,0xA255,0x003F}, - {0xA256,0xA256,0x003F}, - {0xA257,0xA257,0x003F}, - {0xA258,0xA258,0x003F}, - {0xA259,0xA259,0x003F}, - {0xA25A,0xA25A,0x003F}, - {0xA25B,0xA25B,0x003F}, - {0xA25C,0xA25C,0x003F}, - {0xA25D,0xA25D,0x003F}, - {0xA25E,0xA25E,0x003F}, - {0xA25F,0xA25F,0x003F}, - {0xA260,0xA260,0x003F}, /* A260 */ - {0xA261,0xA261,0x003F}, - {0xA262,0xA262,0x003F}, - {0xA263,0xA263,0x003F}, - {0xA264,0xA264,0x003F}, - {0xA265,0xA265,0x003F}, - {0xA266,0xA266,0x003F}, - {0xA267,0xA267,0x003F}, - {0xA268,0xA268,0x003F}, - {0xA269,0xA269,0x003F}, - {0xA26A,0xA26A,0x003F}, - {0xA26B,0xA26B,0x003F}, - {0xA26C,0xA26C,0x003F}, - {0xA26D,0xA26D,0x003F}, - {0xA26E,0xA26E,0x003F}, - {0xA26F,0xA26F,0x003F}, - {0xA270,0xA270,0x003F}, /* A270 */ - {0xA271,0xA271,0x003F}, - {0xA272,0xA272,0x003F}, - {0xA273,0xA273,0x003F}, - {0xA274,0xA274,0x003F}, - {0xA275,0xA275,0x003F}, - {0xA276,0xA276,0x003F}, - {0xA277,0xA277,0x003F}, - {0xA278,0xA278,0x003F}, - {0xA279,0xA279,0x003F}, - {0xA27A,0xA27A,0x003F}, - {0xA27B,0xA27B,0x003F}, - {0xA27C,0xA27C,0x003F}, - {0xA27D,0xA27D,0x003F}, - {0xA27E,0xA27E,0x003F}, - {0xA27F,0xA27F,0xA27F}, - {0xA280,0xA280,0x003F}, /* A280 */ - {0xA281,0xA281,0x003F}, - {0xA282,0xA282,0x003F}, - {0xA283,0xA283,0x003F}, - {0xA284,0xA284,0x003F}, - {0xA285,0xA285,0x003F}, - {0xA286,0xA286,0x003F}, - {0xA287,0xA287,0x003F}, - {0xA288,0xA288,0x003F}, - {0xA289,0xA289,0x003F}, - {0xA28A,0xA28A,0x003F}, - {0xA28B,0xA28B,0x003F}, - {0xA28C,0xA28C,0x003F}, - {0xA28D,0xA28D,0x003F}, - {0xA28E,0xA28E,0x003F}, - {0xA28F,0xA28F,0x003F}, - {0xA290,0xA290,0x003F}, /* A290 */ - {0xA291,0xA291,0x003F}, - {0xA292,0xA292,0x003F}, - {0xA293,0xA293,0x003F}, - {0xA294,0xA294,0x003F}, - {0xA295,0xA295,0x003F}, - {0xA296,0xA296,0x003F}, - {0xA297,0xA297,0x003F}, - {0xA298,0xA298,0x003F}, - {0xA299,0xA299,0x003F}, - {0xA29A,0xA29A,0x003F}, - {0xA29B,0xA29B,0x003F}, - {0xA29C,0xA29C,0x003F}, - {0xA29D,0xA29D,0x003F}, - {0xA29E,0xA29E,0x003F}, - {0xA29F,0xA29F,0x003F}, - {0xA2A0,0xA2A0,0x003F}, /* A2A0 */ - {0xA2F1,0xA2A1,0x2170}, - {0xA2F2,0xA2A2,0x2171}, - {0xA2F3,0xA2A3,0x2172}, - {0xA2F4,0xA2A4,0x2173}, - {0xA2F5,0xA2A5,0x2174}, - {0xA2F6,0xA2A6,0x2175}, - {0xA2F7,0xA2A7,0x2176}, - {0xA2F8,0xA2A8,0x2177}, - {0xA2F9,0xA2A9,0x2178}, - {0xA2FA,0xA2AA,0x2179}, - {0xA2AB,0xA2AB,0x003F}, - {0xA2AC,0xA2AC,0x003F}, - {0xA2AD,0xA2AD,0x003F}, - {0xA2AE,0xA2AE,0x003F}, - {0xA2AF,0xA2AF,0x003F}, - {0xA2B0,0xA2B0,0x003F}, /* A2B0 */ - {0xA2B1,0xA2B1,0x2488}, - {0xA2B2,0xA2B2,0x2489}, - {0xA2B3,0xA2B3,0x248A}, - {0xA2B4,0xA2B4,0x248B}, - {0xA2B5,0xA2B5,0x248C}, - {0xA2B6,0xA2B6,0x248D}, - {0xA2B7,0xA2B7,0x248E}, - {0xA2B8,0xA2B8,0x248F}, - {0xA2B9,0xA2B9,0x2490}, - {0xA2BA,0xA2BA,0x2491}, - {0xA2BB,0xA2BB,0x2492}, - {0xA2BC,0xA2BC,0x2493}, - {0xA2BD,0xA2BD,0x2494}, - {0xA2BE,0xA2BE,0x2495}, - {0xA2BF,0xA2BF,0x2496}, - {0xA2C0,0xA2C0,0x2497}, /* A2C0 */ - {0xA2C1,0xA2C1,0x2498}, - {0xA2C2,0xA2C2,0x2499}, - {0xA2C3,0xA2C3,0x249A}, - {0xA2C4,0xA2C4,0x249B}, - {0xA2C5,0xA2C5,0x2474}, - {0xA2C6,0xA2C6,0x2475}, - {0xA2C7,0xA2C7,0x2476}, - {0xA2C8,0xA2C8,0x2477}, - {0xA2C9,0xA2C9,0x2478}, - {0xA2CA,0xA2CA,0x2479}, - {0xA2CB,0xA2CB,0x247A}, - {0xA2CC,0xA2CC,0x247B}, - {0xA2CD,0xA2CD,0x247C}, - {0xA2CE,0xA2CE,0x247D}, - {0xA2CF,0xA2CF,0x247E}, - {0xA2D0,0xA2D0,0x247F}, /* A2D0 */ - {0xA2D1,0xA2D1,0x2480}, - {0xA2D2,0xA2D2,0x2481}, - {0xA2D3,0xA2D3,0x2482}, - {0xA2D4,0xA2D4,0x2483}, - {0xA2D5,0xA2D5,0x2484}, - {0xA2D6,0xA2D6,0x2485}, - {0xA2D7,0xA2D7,0x2486}, - {0xA2D8,0xA2D8,0x2487}, - {0xA2D9,0xA2D9,0x2460}, - {0xA2DA,0xA2DA,0x2461}, - {0xA2DB,0xA2DB,0x2462}, - {0xA2DC,0xA2DC,0x2463}, - {0xA2DD,0xA2DD,0x2464}, - {0xA2DE,0xA2DE,0x2465}, - {0xA2DF,0xA2DF,0x2466}, - {0xA2E0,0xA2E0,0x2467}, /* A2E0 */ - {0xA2E1,0xA2E1,0x2468}, - {0xA2E2,0xA2E2,0x2469}, - {0xA2E3,0xA2E3,0x003F}, - {0xA2E4,0xA2E4,0x003F}, - {0xA2E5,0xA2E5,0x3220}, - {0xA2E6,0xA2E6,0x3221}, - {0xA2E7,0xA2E7,0x3222}, - {0xA2E8,0xA2E8,0x3223}, - {0xA2E9,0xA2E9,0x3224}, - {0xA2EA,0xA2EA,0x3225}, - {0xA2EB,0xA2EB,0x3226}, - {0xA2EC,0xA2EC,0x3227}, - {0xA2ED,0xA2ED,0x3228}, - {0xA2EE,0xA2EE,0x3229}, - {0xA2EF,0xA2EF,0x003F}, - {0xA2F0,0xA2F0,0x003F}, /* A2F0 */ - {0xA2F1,0xA2A1,0x2160}, - {0xA2F2,0xA2A2,0x2161}, - {0xA2F3,0xA2A3,0x2162}, - {0xA2F4,0xA2A4,0x2163}, - {0xA2F5,0xA2A5,0x2164}, - {0xA2F6,0xA2A6,0x2165}, - {0xA2F7,0xA2A7,0x2166}, - {0xA2F8,0xA2A8,0x2167}, - {0xA2F9,0xA2A9,0x2168}, - {0xA2FA,0xA2AA,0x2169}, - {0xA2FB,0xA2FB,0x216A}, - {0xA2FC,0xA2FC,0x216B}, - {0xA2FD,0xA2FD,0x003F}, - {0xA2FE,0xA2FE,0x003F}, - {0xA2FF,0xA2FF,0xA2FF} -}; - -static MY_UNICASE_INFO cA3[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xA340,0xA340,0x003F}, /* A340 */ - {0xA341,0xA341,0x003F}, - {0xA342,0xA342,0x003F}, - {0xA343,0xA343,0x003F}, - {0xA344,0xA344,0x003F}, - {0xA345,0xA345,0x003F}, - {0xA346,0xA346,0x003F}, - {0xA347,0xA347,0x003F}, - {0xA348,0xA348,0x003F}, - {0xA349,0xA349,0x003F}, - {0xA34A,0xA34A,0x003F}, - {0xA34B,0xA34B,0x003F}, - {0xA34C,0xA34C,0x003F}, - {0xA34D,0xA34D,0x003F}, - {0xA34E,0xA34E,0x003F}, - {0xA34F,0xA34F,0x003F}, - {0xA350,0xA350,0x003F}, /* A350 */ - {0xA351,0xA351,0x003F}, - {0xA352,0xA352,0x003F}, - {0xA353,0xA353,0x003F}, - {0xA354,0xA354,0x003F}, - {0xA355,0xA355,0x003F}, - {0xA356,0xA356,0x003F}, - {0xA357,0xA357,0x003F}, - {0xA358,0xA358,0x003F}, - {0xA359,0xA359,0x003F}, - {0xA35A,0xA35A,0x003F}, - {0xA35B,0xA35B,0x003F}, - {0xA35C,0xA35C,0x003F}, - {0xA35D,0xA35D,0x003F}, - {0xA35E,0xA35E,0x003F}, - {0xA35F,0xA35F,0x003F}, - {0xA360,0xA360,0x003F}, /* A360 */ - {0xA361,0xA361,0x003F}, - {0xA362,0xA362,0x003F}, - {0xA363,0xA363,0x003F}, - {0xA364,0xA364,0x003F}, - {0xA365,0xA365,0x003F}, - {0xA366,0xA366,0x003F}, - {0xA367,0xA367,0x003F}, - {0xA368,0xA368,0x003F}, - {0xA369,0xA369,0x003F}, - {0xA36A,0xA36A,0x003F}, - {0xA36B,0xA36B,0x003F}, - {0xA36C,0xA36C,0x003F}, - {0xA36D,0xA36D,0x003F}, - {0xA36E,0xA36E,0x003F}, - {0xA36F,0xA36F,0x003F}, - {0xA370,0xA370,0x003F}, /* A370 */ - {0xA371,0xA371,0x003F}, - {0xA372,0xA372,0x003F}, - {0xA373,0xA373,0x003F}, - {0xA374,0xA374,0x003F}, - {0xA375,0xA375,0x003F}, - {0xA376,0xA376,0x003F}, - {0xA377,0xA377,0x003F}, - {0xA378,0xA378,0x003F}, - {0xA379,0xA379,0x003F}, - {0xA37A,0xA37A,0x003F}, - {0xA37B,0xA37B,0x003F}, - {0xA37C,0xA37C,0x003F}, - {0xA37D,0xA37D,0x003F}, - {0xA37E,0xA37E,0x003F}, - {0xA37F,0xA37F,0xA37F}, - {0xA380,0xA380,0x003F}, /* A380 */ - {0xA381,0xA381,0x003F}, - {0xA382,0xA382,0x003F}, - {0xA383,0xA383,0x003F}, - {0xA384,0xA384,0x003F}, - {0xA385,0xA385,0x003F}, - {0xA386,0xA386,0x003F}, - {0xA387,0xA387,0x003F}, - {0xA388,0xA388,0x003F}, - {0xA389,0xA389,0x003F}, - {0xA38A,0xA38A,0x003F}, - {0xA38B,0xA38B,0x003F}, - {0xA38C,0xA38C,0x003F}, - {0xA38D,0xA38D,0x003F}, - {0xA38E,0xA38E,0x003F}, - {0xA38F,0xA38F,0x003F}, - {0xA390,0xA390,0x003F}, /* A390 */ - {0xA391,0xA391,0x003F}, - {0xA392,0xA392,0x003F}, - {0xA393,0xA393,0x003F}, - {0xA394,0xA394,0x003F}, - {0xA395,0xA395,0x003F}, - {0xA396,0xA396,0x003F}, - {0xA397,0xA397,0x003F}, - {0xA398,0xA398,0x003F}, - {0xA399,0xA399,0x003F}, - {0xA39A,0xA39A,0x003F}, - {0xA39B,0xA39B,0x003F}, - {0xA39C,0xA39C,0x003F}, - {0xA39D,0xA39D,0x003F}, - {0xA39E,0xA39E,0x003F}, - {0xA39F,0xA39F,0x003F}, - {0xA3A0,0xA3A0,0x003F}, /* A3A0 */ - {0xA3A1,0xA3A1,0xFF01}, - {0xA3A2,0xA3A2,0xFF02}, - {0xA3A3,0xA3A3,0xFF03}, - {0xA3A4,0xA3A4,0xFFE5}, - {0xA3A5,0xA3A5,0xFF05}, - {0xA3A6,0xA3A6,0xFF06}, - {0xA3A7,0xA3A7,0xFF07}, - {0xA3A8,0xA3A8,0xFF08}, - {0xA3A9,0xA3A9,0xFF09}, - {0xA3AA,0xA3AA,0xFF0A}, - {0xA3AB,0xA3AB,0xFF0B}, - {0xA3AC,0xA3AC,0xFF0C}, - {0xA3AD,0xA3AD,0xFF0D}, - {0xA3AE,0xA3AE,0xFF0E}, - {0xA3AF,0xA3AF,0xFF0F}, - {0xA3B0,0xA3B0,0xFF10}, /* A3B0 */ - {0xA3B1,0xA3B1,0xFF11}, - {0xA3B2,0xA3B2,0xFF12}, - {0xA3B3,0xA3B3,0xFF13}, - {0xA3B4,0xA3B4,0xFF14}, - {0xA3B5,0xA3B5,0xFF15}, - {0xA3B6,0xA3B6,0xFF16}, - {0xA3B7,0xA3B7,0xFF17}, - {0xA3B8,0xA3B8,0xFF18}, - {0xA3B9,0xA3B9,0xFF19}, - {0xA3BA,0xA3BA,0xFF1A}, - {0xA3BB,0xA3BB,0xFF1B}, - {0xA3BC,0xA3BC,0xFF1C}, - {0xA3BD,0xA3BD,0xFF1D}, - {0xA3BE,0xA3BE,0xFF1E}, - {0xA3BF,0xA3BF,0xFF1F}, - {0xA3C0,0xA3C0,0xFF20}, /* A3C0 */ - {0xA3C1,0xA3E1,0xFF21}, - {0xA3C2,0xA3E2,0xFF22}, - {0xA3C3,0xA3E3,0xFF23}, - {0xA3C4,0xA3E4,0xFF24}, - {0xA3C5,0xA3E5,0xFF25}, - {0xA3C6,0xA3E6,0xFF26}, - {0xA3C7,0xA3E7,0xFF27}, - {0xA3C8,0xA3E8,0xFF28}, - {0xA3C9,0xA3E9,0xFF29}, - {0xA3CA,0xA3EA,0xFF2A}, - {0xA3CB,0xA3EB,0xFF2B}, - {0xA3CC,0xA3EC,0xFF2C}, - {0xA3CD,0xA3ED,0xFF2D}, - {0xA3CE,0xA3EE,0xFF2E}, - {0xA3CF,0xA3EF,0xFF2F}, - {0xA3D0,0xA3F0,0xFF30}, /* A3D0 */ - {0xA3D1,0xA3F1,0xFF31}, - {0xA3D2,0xA3F2,0xFF32}, - {0xA3D3,0xA3F3,0xFF33}, - {0xA3D4,0xA3F4,0xFF34}, - {0xA3D5,0xA3F5,0xFF35}, - {0xA3D6,0xA3F6,0xFF36}, - {0xA3D7,0xA3F7,0xFF37}, - {0xA3D8,0xA3F8,0xFF38}, - {0xA3D9,0xA3F9,0xFF39}, - {0xA3DA,0xA3FA,0xFF3A}, - {0xA3DB,0xA3DB,0xFF3B}, - {0xA3DC,0xA3DC,0xFF3C}, - {0xA3DD,0xA3DD,0xFF3D}, - {0xA3DE,0xA3DE,0xFF3E}, - {0xA3DF,0xA3DF,0xFF3F}, - {0xA3E0,0xA3E0,0xFF40}, /* A3E0 */ - {0xA3C1,0xA3E1,0xFF41}, - {0xA3C2,0xA3E2,0xFF42}, - {0xA3C3,0xA3E3,0xFF43}, - {0xA3C4,0xA3E4,0xFF44}, - {0xA3C5,0xA3E5,0xFF45}, - {0xA3C6,0xA3E6,0xFF46}, - {0xA3C7,0xA3E7,0xFF47}, - {0xA3C8,0xA3E8,0xFF48}, - {0xA3C9,0xA3E9,0xFF49}, - {0xA3CA,0xA3EA,0xFF4A}, - {0xA3CB,0xA3EB,0xFF4B}, - {0xA3CC,0xA3EC,0xFF4C}, - {0xA3CD,0xA3ED,0xFF4D}, - {0xA3CE,0xA3EE,0xFF4E}, - {0xA3CF,0xA3EF,0xFF4F}, - {0xA3D0,0xA3F0,0xFF50}, /* A3F0 */ - {0xA3D1,0xA3F1,0xFF51}, - {0xA3D2,0xA3F2,0xFF52}, - {0xA3D3,0xA3F3,0xFF53}, - {0xA3D4,0xA3F4,0xFF54}, - {0xA3D5,0xA3F5,0xFF55}, - {0xA3D6,0xA3F6,0xFF56}, - {0xA3D7,0xA3F7,0xFF57}, - {0xA3D8,0xA3F8,0xFF58}, - {0xA3D9,0xA3F9,0xFF59}, - {0xA3DA,0xA3FA,0xFF5A}, - {0xA3FB,0xA3FB,0xFF5B}, - {0xA3FC,0xA3FC,0xFF5C}, - {0xA3FD,0xA3FD,0xFF5D}, - {0xA3FE,0xA3FE,0xFFE3}, - {0xA3FF,0xA3FF,0xA3FF} -}; - - -static MY_UNICASE_INFO cA6[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xA640,0xA640,0x003F}, /* A640 */ - {0xA641,0xA641,0x003F}, - {0xA642,0xA642,0x003F}, - {0xA643,0xA643,0x003F}, - {0xA644,0xA644,0x003F}, - {0xA645,0xA645,0x003F}, - {0xA646,0xA646,0x003F}, - {0xA647,0xA647,0x003F}, - {0xA648,0xA648,0x003F}, - {0xA649,0xA649,0x003F}, - {0xA64A,0xA64A,0x003F}, - {0xA64B,0xA64B,0x003F}, - {0xA64C,0xA64C,0x003F}, - {0xA64D,0xA64D,0x003F}, - {0xA64E,0xA64E,0x003F}, - {0xA64F,0xA64F,0x003F}, - {0xA650,0xA650,0x003F}, /* A650 */ - {0xA651,0xA651,0x003F}, - {0xA652,0xA652,0x003F}, - {0xA653,0xA653,0x003F}, - {0xA654,0xA654,0x003F}, - {0xA655,0xA655,0x003F}, - {0xA656,0xA656,0x003F}, - {0xA657,0xA657,0x003F}, - {0xA658,0xA658,0x003F}, - {0xA659,0xA659,0x003F}, - {0xA65A,0xA65A,0x003F}, - {0xA65B,0xA65B,0x003F}, - {0xA65C,0xA65C,0x003F}, - {0xA65D,0xA65D,0x003F}, - {0xA65E,0xA65E,0x003F}, - {0xA65F,0xA65F,0x003F}, - {0xA660,0xA660,0x003F}, /* A660 */ - {0xA661,0xA661,0x003F}, - {0xA662,0xA662,0x003F}, - {0xA663,0xA663,0x003F}, - {0xA664,0xA664,0x003F}, - {0xA665,0xA665,0x003F}, - {0xA666,0xA666,0x003F}, - {0xA667,0xA667,0x003F}, - {0xA668,0xA668,0x003F}, - {0xA669,0xA669,0x003F}, - {0xA66A,0xA66A,0x003F}, - {0xA66B,0xA66B,0x003F}, - {0xA66C,0xA66C,0x003F}, - {0xA66D,0xA66D,0x003F}, - {0xA66E,0xA66E,0x003F}, - {0xA66F,0xA66F,0x003F}, - {0xA670,0xA670,0x003F}, /* A670 */ - {0xA671,0xA671,0x003F}, - {0xA672,0xA672,0x003F}, - {0xA673,0xA673,0x003F}, - {0xA674,0xA674,0x003F}, - {0xA675,0xA675,0x003F}, - {0xA676,0xA676,0x003F}, - {0xA677,0xA677,0x003F}, - {0xA678,0xA678,0x003F}, - {0xA679,0xA679,0x003F}, - {0xA67A,0xA67A,0x003F}, - {0xA67B,0xA67B,0x003F}, - {0xA67C,0xA67C,0x003F}, - {0xA67D,0xA67D,0x003F}, - {0xA67E,0xA67E,0x003F}, - {0xA67F,0xA67F,0xA67F}, - {0xA680,0xA680,0x003F}, /* A680 */ - {0xA681,0xA681,0x003F}, - {0xA682,0xA682,0x003F}, - {0xA683,0xA683,0x003F}, - {0xA684,0xA684,0x003F}, - {0xA685,0xA685,0x003F}, - {0xA686,0xA686,0x003F}, - {0xA687,0xA687,0x003F}, - {0xA688,0xA688,0x003F}, - {0xA689,0xA689,0x003F}, - {0xA68A,0xA68A,0x003F}, - {0xA68B,0xA68B,0x003F}, - {0xA68C,0xA68C,0x003F}, - {0xA68D,0xA68D,0x003F}, - {0xA68E,0xA68E,0x003F}, - {0xA68F,0xA68F,0x003F}, - {0xA690,0xA690,0x003F}, /* A690 */ - {0xA691,0xA691,0x003F}, - {0xA692,0xA692,0x003F}, - {0xA693,0xA693,0x003F}, - {0xA694,0xA694,0x003F}, - {0xA695,0xA695,0x003F}, - {0xA696,0xA696,0x003F}, - {0xA697,0xA697,0x003F}, - {0xA698,0xA698,0x003F}, - {0xA699,0xA699,0x003F}, - {0xA69A,0xA69A,0x003F}, - {0xA69B,0xA69B,0x003F}, - {0xA69C,0xA69C,0x003F}, - {0xA69D,0xA69D,0x003F}, - {0xA69E,0xA69E,0x003F}, - {0xA69F,0xA69F,0x003F}, - {0xA6A0,0xA6A0,0x003F}, /* A6A0 */ - {0xA6A1,0xA6C1,0x0391}, - {0xA6A2,0xA6C2,0x0392}, - {0xA6A3,0xA6C3,0x0393}, - {0xA6A4,0xA6C4,0x0394}, - {0xA6A5,0xA6C5,0x0395}, - {0xA6A6,0xA6C6,0x0396}, - {0xA6A7,0xA6C7,0x0397}, - {0xA6A8,0xA6C8,0x0398}, - {0xA6A9,0xA6C9,0x0399}, - {0xA6AA,0xA6CA,0x039A}, - {0xA6AB,0xA6CB,0x039B}, - {0xA6AC,0xA6CC,0x039C}, - {0xA6AD,0xA6CD,0x039D}, - {0xA6AE,0xA6CE,0x039E}, - {0xA6AF,0xA6CF,0x039F}, - {0xA6B0,0xA6D0,0x03A0}, /* A6B0 */ - {0xA6B1,0xA6D1,0x03A1}, - {0xA6B2,0xA6D2,0x03A3}, - {0xA6B3,0xA6D3,0x03A4}, - {0xA6B4,0xA6D4,0x03A5}, - {0xA6B5,0xA6D5,0x03A6}, - {0xA6B6,0xA6D6,0x03A7}, - {0xA6B7,0xA6D7,0x03A8}, - {0xA6B8,0xA6D8,0x03A9}, - {0xA6B9,0xA6B9,0x003F}, - {0xA6BA,0xA6BA,0x003F}, - {0xA6BB,0xA6BB,0x003F}, - {0xA6BC,0xA6BC,0x003F}, - {0xA6BD,0xA6BD,0x003F}, - {0xA6BE,0xA6BE,0x003F}, - {0xA6BF,0xA6BF,0x003F}, - {0xA6C0,0xA6C0,0x003F}, /* A6C0 */ - {0xA6A1,0xA6C1,0x03B1}, - {0xA6A2,0xA6C2,0x03B2}, - {0xA6A3,0xA6C3,0x03B3}, - {0xA6A4,0xA6C4,0x03B4}, - {0xA6A5,0xA6C5,0x03B5}, - {0xA6A6,0xA6C6,0x03B6}, - {0xA6A7,0xA6C7,0x03B7}, - {0xA6A8,0xA6C8,0x03B8}, - {0xA6A9,0xA6C9,0x03B9}, - {0xA6AA,0xA6CA,0x03BA}, - {0xA6AB,0xA6CB,0x03BB}, - {0xA6AC,0xA6CC,0x03BC}, - {0xA6AD,0xA6CD,0x03BD}, - {0xA6AE,0xA6CE,0x03BE}, - {0xA6AF,0xA6CF,0x03BF}, - {0xA6B0,0xA6D0,0x03C0}, /* A6D0 */ - {0xA6B1,0xA6D1,0x03C1}, - {0xA6B2,0xA6D2,0x03C3}, - {0xA6B3,0xA6D3,0x03C4}, - {0xA6B4,0xA6D4,0x03C5}, - {0xA6B5,0xA6D5,0x03C6}, - {0xA6B6,0xA6D6,0x03C7}, - {0xA6B7,0xA6D7,0x03C8}, - {0xA6B8,0xA6D8,0x03C9}, - {0xA6D9,0xA6D9,0x003F}, - {0xA6DA,0xA6DA,0x003F}, - {0xA6DB,0xA6DB,0x003F}, - {0xA6DC,0xA6DC,0x003F}, - {0xA6DD,0xA6DD,0x003F}, - {0xA6DE,0xA6DE,0x003F}, - {0xA6DF,0xA6DF,0x003F}, - {0xA6E0,0xA6E0,0xFE35}, /* A6E0 */ - {0xA6E1,0xA6E1,0xFE36}, - {0xA6E2,0xA6E2,0xFE39}, - {0xA6E3,0xA6E3,0xFE3A}, - {0xA6E4,0xA6E4,0xFE3F}, - {0xA6E5,0xA6E5,0xFE40}, - {0xA6E6,0xA6E6,0xFE3D}, - {0xA6E7,0xA6E7,0xFE3E}, - {0xA6E8,0xA6E8,0xFE41}, - {0xA6E9,0xA6E9,0xFE42}, - {0xA6EA,0xA6EA,0xFE43}, - {0xA6EB,0xA6EB,0xFE44}, - {0xA6EC,0xA6EC,0x003F}, - {0xA6ED,0xA6ED,0x003F}, - {0xA6EE,0xA6EE,0xFE3B}, - {0xA6EF,0xA6EF,0xFE3C}, - {0xA6F0,0xA6F0,0xFE37}, /* A6F0 */ - {0xA6F1,0xA6F1,0xFE38}, - {0xA6F2,0xA6F2,0xFE31}, - {0xA6F3,0xA6F3,0x003F}, - {0xA6F4,0xA6F4,0xFE33}, - {0xA6F5,0xA6F5,0xFE34}, - {0xA6F6,0xA6F6,0x003F}, - {0xA6F7,0xA6F7,0x003F}, - {0xA6F8,0xA6F8,0x003F}, - {0xA6F9,0xA6F9,0x003F}, - {0xA6FA,0xA6FA,0x003F}, - {0xA6FB,0xA6FB,0x003F}, - {0xA6FC,0xA6FC,0x003F}, - {0xA6FD,0xA6FD,0x003F}, - {0xA6FE,0xA6FE,0x003F}, - {0xA6FF,0xA6FF,0xA6FF} -}; - - -static MY_UNICASE_INFO cA7[256]= -{ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ - {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, - {0xA740,0xA740,0x003F}, /* A740 */ - {0xA741,0xA741,0x003F}, - {0xA742,0xA742,0x003F}, - {0xA743,0xA743,0x003F}, - {0xA744,0xA744,0x003F}, - {0xA745,0xA745,0x003F}, - {0xA746,0xA746,0x003F}, - {0xA747,0xA747,0x003F}, - {0xA748,0xA748,0x003F}, - {0xA749,0xA749,0x003F}, - {0xA74A,0xA74A,0x003F}, - {0xA74B,0xA74B,0x003F}, - {0xA74C,0xA74C,0x003F}, - {0xA74D,0xA74D,0x003F}, - {0xA74E,0xA74E,0x003F}, - {0xA74F,0xA74F,0x003F}, - {0xA750,0xA750,0x003F}, /* A750 */ - {0xA751,0xA751,0x003F}, - {0xA752,0xA752,0x003F}, - {0xA753,0xA753,0x003F}, - {0xA754,0xA754,0x003F}, - {0xA755,0xA755,0x003F}, - {0xA756,0xA756,0x003F}, - {0xA757,0xA757,0x003F}, - {0xA758,0xA758,0x003F}, - {0xA759,0xA759,0x003F}, - {0xA75A,0xA75A,0x003F}, - {0xA75B,0xA75B,0x003F}, - {0xA75C,0xA75C,0x003F}, - {0xA75D,0xA75D,0x003F}, - {0xA75E,0xA75E,0x003F}, - {0xA75F,0xA75F,0x003F}, - {0xA760,0xA760,0x003F}, /* A760 */ - {0xA761,0xA761,0x003F}, - {0xA762,0xA762,0x003F}, - {0xA763,0xA763,0x003F}, - {0xA764,0xA764,0x003F}, - {0xA765,0xA765,0x003F}, - {0xA766,0xA766,0x003F}, - {0xA767,0xA767,0x003F}, - {0xA768,0xA768,0x003F}, - {0xA769,0xA769,0x003F}, - {0xA76A,0xA76A,0x003F}, - {0xA76B,0xA76B,0x003F}, - {0xA76C,0xA76C,0x003F}, - {0xA76D,0xA76D,0x003F}, - {0xA76E,0xA76E,0x003F}, - {0xA76F,0xA76F,0x003F}, - {0xA770,0xA770,0x003F}, /* A770 */ - {0xA771,0xA771,0x003F}, - {0xA772,0xA772,0x003F}, - {0xA773,0xA773,0x003F}, - {0xA774,0xA774,0x003F}, - {0xA775,0xA775,0x003F}, - {0xA776,0xA776,0x003F}, - {0xA777,0xA777,0x003F}, - {0xA778,0xA778,0x003F}, - {0xA779,0xA779,0x003F}, - {0xA77A,0xA77A,0x003F}, - {0xA77B,0xA77B,0x003F}, - {0xA77C,0xA77C,0x003F}, - {0xA77D,0xA77D,0x003F}, - {0xA77E,0xA77E,0x003F}, - {0xA77F,0xA77F,0xA77F}, - {0xA780,0xA780,0x003F}, /* A780 */ - {0xA781,0xA781,0x003F}, - {0xA782,0xA782,0x003F}, - {0xA783,0xA783,0x003F}, - {0xA784,0xA784,0x003F}, - {0xA785,0xA785,0x003F}, - {0xA786,0xA786,0x003F}, - {0xA787,0xA787,0x003F}, - {0xA788,0xA788,0x003F}, - {0xA789,0xA789,0x003F}, - {0xA78A,0xA78A,0x003F}, - {0xA78B,0xA78B,0x003F}, - {0xA78C,0xA78C,0x003F}, - {0xA78D,0xA78D,0x003F}, - {0xA78E,0xA78E,0x003F}, - {0xA78F,0xA78F,0x003F}, - {0xA790,0xA790,0x003F}, /* A790 */ - {0xA791,0xA791,0x003F}, - {0xA792,0xA792,0x003F}, - {0xA793,0xA793,0x003F}, - {0xA794,0xA794,0x003F}, - {0xA795,0xA795,0x003F}, - {0xA796,0xA796,0x003F}, - {0xA797,0xA797,0x003F}, - {0xA798,0xA798,0x003F}, - {0xA799,0xA799,0x003F}, - {0xA79A,0xA79A,0x003F}, - {0xA79B,0xA79B,0x003F}, - {0xA79C,0xA79C,0x003F}, - {0xA79D,0xA79D,0x003F}, - {0xA79E,0xA79E,0x003F}, - {0xA79F,0xA79F,0x003F}, - {0xA7A0,0xA7A0,0x003F}, /* A7A0 */ - {0xA7A1,0xA7D1,0x0410}, - {0xA7A2,0xA7D2,0x0411}, - {0xA7A3,0xA7D3,0x0412}, - {0xA7A4,0xA7D4,0x0413}, - {0xA7A5,0xA7D5,0x0414}, - {0xA7A6,0xA7D6,0x0415}, - {0xA7A7,0xA7D7,0x0401}, - {0xA7A8,0xA7D8,0x0416}, - {0xA7A9,0xA7D9,0x0417}, - {0xA7AA,0xA7DA,0x0418}, - {0xA7AB,0xA7DB,0x0419}, - {0xA7AC,0xA7DC,0x041A}, - {0xA7AD,0xA7DD,0x041B}, - {0xA7AE,0xA7DE,0x041C}, - {0xA7AF,0xA7DF,0x041D}, - {0xA7B0,0xA7E0,0x041E}, /* A7B0 */ - {0xA7B1,0xA7E1,0x041F}, - {0xA7B2,0xA7E2,0x0420}, - {0xA7B3,0xA7E3,0x0421}, - {0xA7B4,0xA7E4,0x0422}, - {0xA7B5,0xA7E5,0x0423}, - {0xA7B6,0xA7E6,0x0424}, - {0xA7B7,0xA7E7,0x0425}, - {0xA7B8,0xA7E8,0x0426}, - {0xA7B9,0xA7E9,0x0427}, - {0xA7BA,0xA7EA,0x0428}, - {0xA7BB,0xA7EB,0x0429}, - {0xA7BC,0xA7EC,0x042A}, - {0xA7BD,0xA7ED,0x042B}, - {0xA7BE,0xA7EE,0x042C}, - {0xA7BF,0xA7EF,0x042D}, - {0xA7C0,0xA7F0,0x042E}, /* A7C0 */ - {0xA7C1,0xA7F1,0x042F}, - {0xA7C2,0xA7C2,0x003F}, - {0xA7C3,0xA7C3,0x003F}, - {0xA7C4,0xA7C4,0x003F}, - {0xA7C5,0xA7C5,0x003F}, - {0xA7C6,0xA7C6,0x003F}, - {0xA7C7,0xA7C7,0x003F}, - {0xA7C8,0xA7C8,0x003F}, - {0xA7C9,0xA7C9,0x003F}, - {0xA7CA,0xA7CA,0x003F}, - {0xA7CB,0xA7CB,0x003F}, - {0xA7CC,0xA7CC,0x003F}, - {0xA7CD,0xA7CD,0x003F}, - {0xA7CE,0xA7CE,0x003F}, - {0xA7CF,0xA7CF,0x003F}, - {0xA7D0,0xA7D0,0x003F}, /* A7D0 */ - {0xA7A1,0xA7D1,0x0430}, - {0xA7A2,0xA7D2,0x0431}, - {0xA7A3,0xA7D3,0x0432}, - {0xA7A4,0xA7D4,0x0433}, - {0xA7A5,0xA7D5,0x0434}, - {0xA7A6,0xA7D6,0x0435}, - {0xA7A7,0xA7D7,0x0451}, - {0xA7A8,0xA7D8,0x0436}, - {0xA7A9,0xA7D9,0x0437}, - {0xA7AA,0xA7DA,0x0438}, - {0xA7AB,0xA7DB,0x0439}, - {0xA7AC,0xA7DC,0x043A}, - {0xA7AD,0xA7DD,0x043B}, - {0xA7AE,0xA7DE,0x043C}, - {0xA7AF,0xA7DF,0x043D}, - {0xA7B0,0xA7E0,0x043E}, /* A7E0 */ - {0xA7B1,0xA7E1,0x043F}, - {0xA7B2,0xA7E2,0x0440}, - {0xA7B3,0xA7E3,0x0441}, - {0xA7B4,0xA7E4,0x0442}, - {0xA7B5,0xA7E5,0x0443}, - {0xA7B6,0xA7E6,0x0444}, - {0xA7B7,0xA7E7,0x0445}, - {0xA7B8,0xA7E8,0x0446}, - {0xA7B9,0xA7E9,0x0447}, - {0xA7BA,0xA7EA,0x0448}, - {0xA7BB,0xA7EB,0x0449}, - {0xA7BC,0xA7EC,0x044A}, - {0xA7BD,0xA7ED,0x044B}, - {0xA7BE,0xA7EE,0x044C}, - {0xA7BF,0xA7EF,0x044D}, - {0xA7C0,0xA7F0,0x044E}, /* A7F0 */ - {0xA7C1,0xA7F1,0x044F}, - {0xA7F2,0xA7F2,0x003F}, - {0xA7F3,0xA7F3,0x003F}, - {0xA7F4,0xA7F4,0x003F}, - {0xA7F5,0xA7F5,0x003F}, - {0xA7F6,0xA7F6,0x003F}, - {0xA7F7,0xA7F7,0x003F}, - {0xA7F8,0xA7F8,0x003F}, - {0xA7F9,0xA7F9,0x003F}, - {0xA7FA,0xA7FA,0x003F}, - {0xA7FB,0xA7FB,0x003F}, - {0xA7FC,0xA7FC,0x003F}, - {0xA7FD,0xA7FD,0x003F}, - {0xA7FE,0xA7FE,0x003F}, - {0xA7FF,0xA7FF,0xA7FF} -}; - - -static MY_UNICASE_INFO *my_caseinfo_gbk[256]= -{ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 8 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, cA2, cA3, NULL, NULL, cA6, cA7, /* A */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* C */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* F */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - - - -static uchar sort_order_gbk[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '\\', ']', '[', '^', '_', - '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '{', '|', '}', 'Y', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - -static uint16 gbk_order[]= -{ -8653,14277,17116,11482,11160,2751,14613,3913,13337,9827, -19496,1759,8105,7103,7836,5638,2223,21433,5878,8006, -4851,18766,18879,16728,8129,6200,19133,6389,2500,19084, -16228,5074,8130,5900,6201,3985,14597,11566,8588,8769, -15885,11411,11965,1961,18012,18303,12242,14118,11490,12911, -15015,4367,3184,2093,20937,5710,5108,10560,9993,18982, -8393,10697,14620,19558,14970,15193,5359,18189,12666,18192, -3310,18659,17358,7973,18673,19537,3404,9723,4221,16486, -7023,13648,16310,1049,1726,4799,15534,4366,17133,4192, -6219,5118,1804,2360,2279,14279,13740,4511,2361,12906, -16650,18590,4723,2001,16313,3594,21026,12146,19561,3800, -4161,16774,18892,17657,7025,892,7917,12245,3394,4813, -11902,3189,20002,2365,12964,18115,17660,20227,17182,11907, -11671,17562,17864,21131,13423,1361,12246,18897,14978,18848, -20727,5902,10726,21241,1906,13424,1408,20519,3038,18495, -20446,1431,17138,13464,14558,1221,6720,6137,17348,5268, -4448,11313,1760,6172,6870,5744,13541,3044,17701,14368, -16114,5051,9142,18776,5669,19089,11088,17867,925,10395, -4372,10578,2138,2554,18118,21087,13862,7461,14983,3322, -15305,11844,7924,8087,2542,20701,21772,2754,10490,8218, -14800,15869,14436,16119,1814,11543,17398,16069,19659,17020, -17844,5694,8833,16744,18925,4957,9812,6852,8036,12966, -14038,12145,16833,11165,17076,17756,3673,2367,20916,9143, -14927,6885,17486,7469,1661,2827,4627,18198,1307,19711, -17637,2595,2262,20807,1764,8150,18547,3192,9711,16262, -9144,2006,21629,5311,15743,14733,10991,15402,2916,17724, -12195,12622,5141,8039,15169,7780,4568,20835,21575,10580, -15022,9470,6853,3926,21563,1342,16745,8181,11526,1947, -7402,18641,14145,13149,19222,2468,12920,13916,21077,2968, -16438,19667,1768,15632,18374,4738,15517,16655,4309,2374, -14492,8602,3679,2103,1312,18681,6613,18604,20451,2755, -18218,19473,17854,20316,3003,4998,1391,20938,11169,7049, -18861,17577,18091,1937,4085,2059,20633,15948,1313,20138, -7785,16439,15081,20955,15117,17065,19924,13831,11913,20062, -7568,10703,3717,15480,6047,7790,16867,14223,12971,8429, -2008,2833,14026,1317,17493,19411,18551,15452,15257,18504, -4441,1769,7249,20128,5509,1970,9420,19365,20190,21617, -12202,15041,2871,19676,20388,21674,14258,2901,8058,5970, -20472,13257,18226,3694,17591,10279,1318,12409,7901,9794, -10416,10769,12876,17154,15455,19298,3970,21327,14228,13095, -8096,16072,21748,12581,9326,2311,5683,12641,3583,2184, -16464,6969,1795,6778,2880,15819,3433,7674,4713,17297, -8231,4333,9995,1841,5558,17155,17298,11283,18694,7946, -7311,13129,4753,21149,905,14010,18821,8532,11873,2190, -19006,3456,8874,7433,2841,7680,14143,20130,1993,1699, -976,15361,2736,2154,9202,11685,7951,12982,11008,16763, -11829,13327,11686,2299,9940,10507,8917,1277,19790,1636, -20143,21002,15011,19443,6026,13299,2455,9667,15612,16477, -10261,2811,2202,13674,14760,6818,9691,10624,20145,11940, -15524,18349,9437,11578,20132,17736,4121,4122,16023,2280, -4371,4373,7873,18307,14602,14695,13054,5410,6065,14389, -3979,1137,5411,6672,16311,11632,9829,19575,5901,15708, -12553,7165,18983,10860,13664,18242,10848,2049,8075,5579, -8083,10863,21136,5445,17851,19132,8597,18771,11054,14631, -10997,8292,8803,11246,4999,17559,11134,15369,5155,6407, -12054,4857,11265,12834,7322,15057,10937,15984,5544,8040, -13291,3961,5142,19101,869,9631,2009,11315,21404,3172, -14941,4204,7947,9997,16906,4035,4476,4477,8171,2818, -20725,4724,11453,20868,4725,4729,8565,5109,12490,8862, -5920,13737,2888,6930,12963,3223,6934,3395,16243,8397, -9475,4858,13515,3777,11266,10029,21028,1671,7765,7766, -14169,2221,5328,2907,8951,4225,4416,7770,3046,8014, -3975,10636,20236,19825,3248,8717,2140,2908,3249,9477, -4628,2225,12676,2909,21564,5167,1225,4186,13266,4017, -7471,7146,18214,6890,4195,16037,16688,5583,14497,7476, -3286,8566,2910,2862,2232,16038,10417,9492,12234,14190, -8793,5573,6486,20322,21455,9734,8317,10143,5781,7681, -5782,7500,7501,15466,7188,7511,7512,21003,2203,21693, -11350,9540,21212,18183,7918,8754,17511,20869,18899,21160, -11356,9315,8364,8798,18460,16189,17483,11415,8897,7771, -9917,8718,7926,5228,11270,2644,9269,19404,8719,8367, -13267,10400,1914,2157,8584,11171,3964,17881,16785,18951, -18052,16616,14500,9323,10418,12410,14661,6963,7570,7668, -13601,17386,18995,8437,4460,8346,15920,8318,3387,10734, -18057,18058,10525,9654,2390,13675,13603,20000,8106,1260, -10824,1426,5075,5076,18887,12175,8174,15558,5269,4304, -5380,3287,8156,5386,11605,8142,18768,7580,8641,6319, -13425,4478,13147,2019,8900,6331,19668,5756,6769,3381, -9009,9730,9735,15160,4036,8167,13489,17009,8667,18308, -13439,18112,11735,21667,14617,17010,16290,16291,17515,3368, -7050,14841,5636,16826,17573,7760,18493,13306,14312,2619, -17868,13609,8991,7038,4310,16881,14020,16422,20565,5941, -18174,3642,20346,12080,856,13144,18158,20908,10800,15630, -14340,15837,21707,4629,2060,19870,9632,3718,7902,994, -5762,18391,9647,2312,9199,9648,18281,18342,19911,5367, -9950,13834,13513,8771,9414,4057,21302,1963,1964,1967, -902,3349,14697,5602,1071,13959,14621,21428,7288,15079, -7039,16495,13949,3111,5580,13365,2615,4109,6202,11213, -10792,17918,21538,3226,18658,11985,6862,18734,2752,13232, -7838,1907,4252,6223,16703,11495,18037,3974,6301,5226, -8514,10487,5267,10892,12763,16706,7702,20003,2616,14457, -16083,16587,4296,14513,8355,12171,16590,10670,13651,3646, -14626,21132,15826,17015,18911,12792,12461,21545,17848,18912, -17396,3277,13516,5918,16115,12548,1673,4864,18438,6078, -5880,3263,16211,21784,1909,15296,17183,6884,12796,4417, -4299,17021,21137,14801,17484,8852,6512,15560,4300,17921, -5819,9342,15900,17742,19525,3869,11715,17703,12554,6040, -19865,10267,12549,10804,21670,6091,17277,9319,12531,9840, -1060,11215,10514,15170,4892,5904,14898,19534,5469,5470, -1128,5922,18937,7270,15971,17189,16263,9474,13382,2369, -20210,18177,3976,12767,3618,13236,10885,5397,15621,8770, -9830,9310,14121,21573,16634,19148,12803,4381,13051,956, -20237,3755,19551,15744,9169,16852,866,11893,21439,3680, -6197,17412,17324,16086,16747,16602,3834,5510,12770,12771, -3420,16198,21552,1421,3198,6097,18178,12772,20576,9831, -17200,19226,5584,20226,5822,10609,11641,3599,13550,15387, -5361,15481,952,3426,19731,20581,21103,2153,16223,19719, -20139,18533,11172,6356,20044,6584,6585,6954,21058,16397, -14150,17888,6618,4199,11775,9843,19732,14051,2564,13093, -18379,3377,12174,1968,19359,16350,19294,12243,1294,5362, -20214,6898,15645,18557,6146,13005,14084,19366,6272,17534, -10713,2104,5894,13900,16200,6964,12093,16692,12975,21496, -9358,16216,7314,15280,3056,14008,5363,11510,13001,1474, -997,9724,21709,20612,11383,15441,7715,2684,7622,8585, -15456,14192,872,17497,10281,17428,6338,6779,5831,11989, -17156,20245,2293,12512,3560,10705,6367,5040,15465,18663, -14003,7716,17498,6462,10721,13660,9327,17501,6973,9010, -17433,6024,10669,13098,2842,15393,3436,18133,4283,21749, -4461,2571,6707,1986,2900,3138,3434,19771,9090,16900, -12816,6022,9736,17830,6708,19167,18099,11781,14950,18337, -19249,3270,20404,21152,11875,6791,17596,7723,19933,884, -19376,8877,19687,12164,3544,17647,4150,3457,17648,12338, -19127,21715,11831,3635,9259,15329,6901,17127,18710,4191, -12352,21112,7195,7956,2300,18061,10887,15701,10319,6808, -1859,19445,11794,19170,6436,10969,6216,20594,9522,10157, -5898,11567,11326,18410,9674,10340,10229,11345,3447,2456, -12439,12340,17368,10889,17057,4224,8845,18285,2207,19263, -3872,9117,15331,17456,2995,6523,6919,21337,11803,17457, -1936,9533,2248,2161,9697,19072,10607,20163,15100,6199, -20287,7392,20107,21238,9225,11809,13650,10203,6717,19085, -11816,16035,8643,19823,8084,12359,20004,3059,6719,4253, -5838,15886,15982,5839,13638,13780,5840,15341,5842,19140, -6854,5923,10582,5843,2868,16398,19872,13534,8824,12598, -19879,19880,18208,16051,16004,16005,16039,10567,6783,19020, -10539,10550,18184,16018,15868,12573,10392,8863,8172,19697, -12845,12846,21424,3476,12833,17119,14167,11764,11357,7264, -20873,18048,18901,13220,4667,8756,16106,4705,1432,8009, -3665,7966,7128,2587,7967,12053,15477,13430,20832,5587, -15350,8076,18496,4801,10396,13339,5438,18013,1074,10032, -21247,4985,6322,20909,989,3323,12104,11235,7138,6138, -10512,3008,2621,19090,6306,4110,20541,4877,5674,18543, -4231,5748,2116,18465,17517,14702,1762,6233,3281,8548, -3479,6000,954,17677,17278,1186,4803,1097,18938,19207, -5954,17874,2917,13191,1374,4557,13610,19406,8518,7240, -3675,9306,8357,7882,20573,9913,6446,1915,8078,18661, -3600,18200,13551,15199,13252,16268,8298,10602,20739,8775, -2704,3928,15450,1948,2829,1375,8603,4214,18952,20841, -21403,12685,8299,11653,8726,9031,11701,7331,5169,19721, -4311,5546,9471,4548,18163,9032,972,14386,11607,15974, -2517,6540,1462,9789,5823,21324,1244,19595,10838,7744, -13909,18685,5360,21578,19596,6619,4318,18552,1268,3013, -10906,2309,16148,12551,4773,21079,7858,7887,6198,5174, -2935,8605,12479,9418,17729,6610,4093,16233,17928,17030, -7062,8871,19299,19417,8569,15122,14579,11123,16618,2526, -15997,13618,21060,9639,12203,1209,20185,4112,15728,16751, -20767,18053,20711,898,5381,18272,8607,16540,17592,10190, -5887,9300,2294,12204,1384,2426,10427,10374,11972,12978, -10920,11384,16040,14865,10301,1622,2072,20975,20512,8617, -3765,2439,20849,7172,5829,13045,7943,3700,3174,18392, -15307,20290,12928,16506,21383,13068,14230,14231,1088,12583, -8875,3942,4462,13626,4146,3217,3701,14505,4242,4245, -15413,3587,11432,4684,6631,15414,3271,18690,21282,7502, -1039,13032,13072,8748,19021,12316,3766,7551,18665,1852, -15419,9243,8322,6513,3492,13684,12987,18062,9260,16999, -906,18151,3529,13911,7957,9427,8940,10341,18286,15427, -16481,6514,10263,10264,13950,9675,9985,2208,18070,18291, -9406,1106,16240,14024,21355,18735,10727,21254,21358,6353, -9064,6357,17889,9070,14715,10820,4147,14718,18755,5496, -7582,4769,20373,1592,15166,13637,10033,3251,17753,17613, -11596,17130,19916,10850,4182,13264,11964,5447,12805,11003, -11047,2440,20269,5601,5209,15535,15370,18300,1406,6926, -20037,7229,1056,4359,3596,12118,8363,17518,3735,18497, -6573,8553,20360,1351,6662,4610,3780,18127,1363,1032, -16617,12536,16800,1037,7571,9731,4203,19993,7572,14677, -4715,6902,1527,10540,2376,3886,12847,8131,11926,2135, -17136,4517,7104,6221,3365,4816,8031,5875,16599,21029, -11997,5995,21069,20005,4807,2552,8400,21341,18361,11496, -17629,4669,4726,16292,4072,1075,21429,20521,11523,19918, -15958,17185,18913,4247,11358,1436,14370,4248,6080,17849, -4434,20728,11236,1173,4817,10034,21539,13666,14173,18439, -10741,21482,8275,13754,3952,7040,5056,17377,6456,8339, -5443,7327,7328,11738,20834,20673,17273,6182,5675,8491, -8847,18364,11314,9918,12150,4302,19527,18255,14375,14566, -5749,13543,15020,6234,17279,14316,2502,17574,10805,4827, -11443,8723,2979,2980,15870,17708,11546,19581,12503,11626, -20926,5924,21344,12472,16076,17280,16710,18256,16748,16841, -18260,19582,14989,9609,8190,21375,12628,17194,21440,3929, -10404,879,4249,10275,11146,3095,12550,8191,1949,10054, -17413,14766,12773,6692,5001,16647,16648,15405,4581,4582, -15709,11654,13552,8046,7979,12868,3756,17726,6421,16231, -9150,19109,21097,11614,5002,10583,973,9033,19149,18201, -8192,9622,3737,17195,6447,6480,3483,18605,11564,13964, -7294,15949,19734,16351,3689,13838,10941,3378,13918,13178, -6693,16657,12924,2936,11189,5005,7831,4086,18806,21080, -6620,11148,932,19228,17929,7745,16352,20747,13345,15635, -17584,16171,9790,10871,13670,14932,12361,16502,16199,3132, -6358,7791,1245,17817,15950,5715,21662,18558,19882,13796, -13901,10132,10944,12039,1026,10672,9002,13206,20689,19883, -7746,13800,11302,19235,15124,11752,15542,12085,9276,11609, -1235,12346,18996,19759,17966,10773,18749,8627,19370,11703, -5719,7905,21307,20246,5908,9361,20563,6426,6427,1034, -13922,10677,12423,5487,16758,13099,16174,20438,11193,17210, -17211,11392,9864,9712,6490,5723,3572,20852,17832,18753, -6482,16901,9011,13705,18396,2181,7625,10946,4534,4463, -17161,19022,6168,7724,4536,14680,15209,13033,9774,17945, -17649,11755,3943,19023,1971,907,11742,11832,10673,15800, -2738,7958,3028,19632,12437,13822,13876,11528,18236,15363, -19255,12988,19972,11154,1403,14431,17732,11711,4037,10186, -19849,9247,18411,10100,7696,11743,9249,17172,19264,14855, -6822,13579,11104,9538,10541,18292,21213,9251,8394,21477, -17662,14984,15342,19522,21318,15232,11216,3096,12869,18145, -11682,21506,9501,18022,1877,11517,11798,19265,10542,13830, -13303,7230,13858,18591,18772,8010,21395,21223,6229,14563, -18794,15793,14603,2503,13642,5375,17403,20364,3516,14419, -6659,11115,8804,1950,20141,19831,13343,6142,20637,7482, -11825,1770,6541,13226,14576,11826,7938,11847,20963,19677, -1247,8885,11827,8312,13229,6339,14584,11828,14425,16469, -17560,8886,6784,8533,19039,18830,1257,13187,2705,1258, -4762,10511,4124,12519,21303,4828,8724,7588,21305,18092, -14812,4131,3527,7762,4393,4394,14764,14280,11327,9907, -17242,17243,9046,16304,9904,10796,16305,16306,16307,18541, -4232,8998,21059,5110,5515,16061,5115,5116,17012,1390, -7844,15716,3798,14519,20669,17576,11649,16842,16843,10758, -10309,12474,15684,4631,17585,10500,2084,17597,8329,8391, -9883,8392,21237,17624,11692,16188,17134,9579,4288,3503, -6742,10206,13743,16775,5949,14364,2765,18725,19947,1157, -18592,981,16777,7768,4290,4670,16248,12907,12663,7839, -21769,21770,18498,8276,5161,18015,12501,9591,15773,13432, -4865,16137,12288,1030,8924,13433,12525,15774,10036,2589, -12463,2091,1185,15898,18016,1588,6083,8721,10649,4303, -4990,3826,10399,4363,4375,5057,13530,18786,11438,14567, -926,16386,6533,11113,9552,7139,3954,16387,19529,5502, -9919,18545,7610,4258,17519,1884,13639,4736,11585,9555, -19464,17281,13793,3517,14382,2504,15985,5349,5231,17082, -19141,19665,9307,8616,17234,13611,2695,15316,9955,6478, -8193,9151,11248,9034,9035,21671,5547,18164,5179,10584, -10585,10055,4187,20740,19151,3965,5926,20741,16440,12301, -7787,21672,8823,3930,19152,21490,20275,6621,19597,18474, -4742,13395,18475,15636,18862,20956,14654,4319,21271,8594, -10518,18318,10942,5932,6955,6586,15855,16795,19598,21579, -9193,8712,18267,18268,16447,21580,2121,15200,8679,13179, -12699,15998,4113,16882,16619,2010,15485,13801,7795,870, -10133,16801,13060,1368,3719,12950,19418,11778,3238,14580, -13968,15043,21588,7596,9858,8628,2233,3853,2076,3890, -15978,10302,20433,20434,998,2031,13447,13009,3175,21713, -3524,3525,16958,19760,12160,10221,17387,2085,1796,13182, -7626,18232,9328,20458,9866,9867,7890,4243,21738,7721, -8441,18574,7627,18575,8442,20405,19024,18023,11593,18705, -18706,18824,11788,17251,7074,17601,8707,5724,3710,1040, -21730,16369,13823,3530,10114,7818,19688,19975,19196,13859, -7823,9660,5732,10230,10231,19319,16937,8244,2209,19345, -8961,18287,11599,13580,2359,3159,10543,3729,3730,11805, -18293,18294,18354,8989,18295,8861,6605,7968,2341,9938, -8768,12561,12562,13406,20792,20522,18795,7897,15252,13598, -12240,4852,20087,3876,11763,4648,12010,20874,6409,3412, -3325,11359,4866,11367,18927,18928,12467,12835,8356,13863, -14839,14878,13123,20625,14523,13643,3336,5707,12475,20508, -7408,16232,3339,14148,12687,4061,6287,20780,17818,16400, -18969,1192,12480,3839,5382,12040,15543,11124,7309,15602, -6704,21044,14193,1623,5847,20247,11469,1193,8019,2236, -20985,6342,1492,1504,20496,11136,13073,2171,4685,11015, -1195,2739,11224,2793,7816,17258,9214,7318,1761,5147, -7112,15831,20270,5689,10886,13188,4163,18175,1124,7840, -21342,18140,3047,15899,18853,20918,15766,20919,17405,15986, -5754,8835,10998,19501,1885,1763,2547,9152,7051,15026, -14808,13284,19736,11210,15061,2064,17327,4633,8155,4327, -16448,10191,17124,15062,20964,1923,13258,8159,8160,10282, -19210,3348,10428,18997,2788,16006,14951,17645,11211,2313, -16759,4637,5691,8789,8878,1513,13034,9999,9884,10342, -7208,19346,17173,15845,19387,9539,15847,18074,3612,12524, -6721,11524,6722,4706,8251,18309,20183,18728,4413,14016, -4414,14663,3799,6402,16674,3664,7583,1095,14412,20469, -15536,4954,3649,2329,20674,18787,8365,14285,19827,8041, -3781,20470,7589,13024,12198,1463,14347,15407,7422,5256, -4428,1475,8794,7429,1682,17439,3437,5832,7552,6264, -11065,5836,16239,8476,7122,10397,6770,6771,18825,18826, -18836,19941,19942,16558,18365,19706,2556,3782,19419,12386, -2582,21425,16167,7028,21030,16314,3597,10037,4867,16320, -16834,16192,2543,20927,8042,3094,20798,3097,16984,7154, -20939,3065,21098,9153,17578,7857,7477,14656,7295,1595, -5007,16449,1210,16883,20750,12413,15649,3561,20754,1676, -2686,2387,18576,6792,10927,10271,17338,1280,13490,9371, -13717,3895,5069,13719,5093,18895,14619,16819,4457,19220, -11238,16588,16780,7029,17016,7841,16249,3061,19702,12664, -3190,15371,16092,12908,6842,17740,16318,17139,8623,8277, -18915,1238,11239,12128,8801,1174,11583,15810,5542,8283, -19457,3670,15969,19460,4821,17017,1437,19436,17979,3064, -1738,6656,18038,12251,14802,16835,15386,19400,11360,8772, -14633,17022,9344,6183,8902,11416,20884,17520,15767,3827, -6041,5750,12620,17485,14929,6328,13340,6723,2645,18788, -17743,5604,10010,2624,14282,13531,19953,12179,3554,6754, -17406,10801,19407,19828,12258,19955,19722,15988,7855,20577, -10011,6042,13150,15685,1916,12969,16845,10742,18954,6179, -2544,16786,9484,9295,3066,18955,9610,11603,4312,16788, -3098,3557,2322,10985,9623,5646,5641,12629,8777,15745, -10586,16868,8604,5796,11702,4142,5857,20398,19836,7885, -7161,9956,19723,6106,13553,15406,15689,11772,2981,6832, -17639,4282,15278,21613,7332,19412,3558,11608,20063,3840, -2970,13315,2065,1573,6835,21581,15637,1324,17930,16353, -5277,16450,1465,17931,6587,11173,19413,12806,14256,19110, -2421,10875,12840,8731,900,13156,18319,13919,21614,13998, -19229,13624,5383,20021,15132,12707,18560,15042,6665,7064, -5516,8313,2911,11704,17535,8570,20769,19420,2042,18131, -14446,1834,8586,17035,6859,19422,18507,9640,14053,15544, -19118,17896,15382,20067,11316,5407,3101,12414,11470,5848, -2665,1985,1980,1978,3176,11284,20476,15945,1035,14866, -5648,13627,20215,8161,9726,11995,15044,7944,19212,10523, -14260,16041,10744,12882,14352,13297,3707,20853,10283,8383, -12648,12643,19772,12491,9860,3115,19442,2687,20986,15946, -2474,12817,13449,12214,1335,13328,7628,2661,9737,12494, -9012,6786,2533,19214,19215,16992,16993,3438,15415,4244, -4177,15139,8454,2074,17434,4465,4714,9329,9362,17212, -11285,9868,16760,1987,8443,3139,17304,15442,14485,12280, -19025,17162,11876,3439,15443,8022,15032,6985,16515,6520, -13218,13213,8323,2043,8750,19256,19026,10001,14089,8534, -6504,908,18238,9098,17128,2669,19633,19217,3316,11048, -910,11016,4136,12731,11353,9205,10989,2740,21004,11955, -2792,18512,1860,21010,8942,8918,19446,4850,10158,11225, -2540,6809,2254,9248,6506,17972,13691,2256,7209,8336, -6524,14358,9808,11563,11076,15525,8477,21363,5186,19944, -5244,7323,3962,3835,1943,7276,20814,8973,20456,13010, -5259,7430,19761,18334,17044,20461,17050,17052,13492,6403, -6405,4289,14622,15676,10851,3752,14272,18796,18858,18320, -13367,9372,4512,13896,20126,20502,3797,19543,8815,5950, -14365,2095,16110,5497,16776,3566,13744,2096,12909,7265, -19564,1029,16825,20875,20905,3567,18301,8908,1583,8173, -16589,6347,19948,13234,14413,20763,20038,16250,11622,12542, -12543,1073,1020,20229,20006,1739,20880,11540,12559,18593, -20671,20312,18440,6068,11675,18672,2642,12253,7231,10952, -13434,2822,7233,20423,12100,11484,12910,16116,1125,3651, -8284,9079,12829,12861,6169,11818,5398,3221,2622,17521, -2054,6683,1109,20920,9081,4212,4213,11887,20702,5270, -7704,3956,11486,9920,20313,10367,3828,8407,9912,8256, -18196,17190,19661,16120,1820,5350,15671,2509,14122,8758, -10939,11888,8182,12193,7403,14178,13957,17523,2101,4770, -7655,8183,6886,15989,12544,20274,15038,18649,8414,16254, -1917,21752,18677,20375,10368,15058,16121,1188,16434,16294, -13198,14335,11249,10977,4962,3511,16649,8358,19962,21612, -15746,15973,1355,13958,21757,16656,12631,2512,14067,10572, -13292,5170,3655,6855,12688,14737,12872,10056,18202,20742, -9832,5590,11679,6891,18375,20766,1952,1731,15687,21643, -8751,12006,7737,11319,5333,10992,14052,12235,11944,7413, -20748,8118,7414,18273,11558,6209,12344,16354,13999,11761, -14657,21615,20712,18094,6624,1596,18476,6588,18321,21705, -17819,8705,7046,15690,9113,9121,2422,8120,15995,6694, -5325,2707,17426,17586,12922,2106,1289,18553,16355,3565, -16605,21616,5326,5451,13240,13802,13619,2711,15246,15234, -13803,12205,8685,18561,3522,20817,11914,9109,13419,17244, -7939,11219,4328,2922,14191,15318,20350,12042,9641,15545, -6359,20965,16202,17095,16606,13043,15730,20641,4329,11939, -13563,20368,16752,14349,8638,13804,13990,2234,15265,8122, -2685,2894,5849,4775,3702,12812,15070,9770,2475,2568, -5649,10429,10303,21619,5080,6428,20369,13046,15531,6487, -11516,7546,5720,19339,1004,20987,11782,10745,2253,8795, -2767,14353,16042,7675,2169,12884,1662,7594,18566,5458, -12885,6974,12417,9313,4151,17301,13910,5783,20142,19007, -17213,2477,11592,6276,5697,3272,11727,9998,20770,6709, -7682,7117,2025,15459,3406,1797,2375,8390,17435,1358, -4973,21451,16175,12569,13241,4148,6463,7683,15325,13131, -16643,7435,19378,11574,10380,21452,20254,12571,2992,6993, -3467,14090,13276,7756,8860,3388,17543,18699,1043,8324, -18700,4343,10993,11066,7118,15364,3531,9246,8267,18656, -13908,18715,18711,11688,6903,7819,1717,11833,5263,21005, -7817,9093,11343,7524,17550,9943,15396,1121,15086,10320, -10570,13706,21006,18513,9453,1932,14761,3157,11732,17259, -8542,9676,9130,6569,19320,10343,10265,12893,12894,12899, -9215,17174,19266,10930,2173,19321,3154,17554,14359,10645, -10933,11077,2580,20146,10544,15397,9698,3731,16207,3470, -7698,9252,9704,5767,5771,6957,18101,8654,18849,5096, -1140,12527,3715,8802,11271,16783,6092,2057,2828,5274, -17882,7710,2416,20634,4197,19671,1129,17883,4198,11776, -3738,4188,18970,8713,18381,6958,15960,17494,4200,18478, -17067,11280,873,874,3633,20715,14821,9870,13450,17754, -18870,7685,14235,7686,21462,19040,9775,1521,9528,17504, -17505,18011,12669,12677,8419,20377,20378,1147,19690,9221, -16487,14459,7291,7296,19678,7717,15962,4011,19137,12994, -13466,20429,21443,21447,21453,13211,9972,21463,2846,4106, -21215,7846,5998,12151,19461,11481,12678,12263,10127,4830, -4569,7982,20546,18863,14293,7483,4368,20996,4466,12391, -4467,20414,8881,15223,19646,7123,7156,6895,17513,15764, -15348,3667,17805,2222,18456,14564,11240,11241,16084,2931, -16740,1302,1158,7769,14460,6416,4564,5768,17920,4651, -13221,6324,18251,20273,4565,14437,8285,18467,1742,17981, -12528,20675,10041,6038,11368,1593,17872,6829,21627,14637, -4625,3870,16539,3924,878,1743,983,10210,8927,15794, -14574,6661,17923,8964,8848,7656,7929,20929,15903,6271, -5059,17362,5957,8521,17282,9030,21142,16846,14496,20578, -20579,5961,6045,16271,15748,21444,21722,21126,14210,11681, -16870,12775,20768,18971,961,16277,9958,2268,16325,17473, -4602,17975,18813,20068,6698,17857,11253,18643,19350,14773, -16456,13275,10876,11552,7423,18479,2937,18567,15281,12600, -7676,8573,5236,16622,2324,12813,6052,18393,9649,7183, -10986,20150,17598,6053,11393,3076,11708,20482,6787,5977, -17968,2874,9874,15444,8023,12418,9973,16994,19027,7189, -6675,3350,18695,18696,9655,15420,15927,17477,4639,14429, -20556,6027,19041,17388,17691,14198,7688,1278,8067,18405, -911,18712,13881,11019,9668,2434,8943,3863,3864,18635, -6920,10483,13827,10236,10646,10545,14163,15526,18355,21216, -19936,18904,6325,14734,2028,14470,20288,1984,17891,6772, -19191,13158,4664,12324,1141,10042,4606,13468,11921,15795, -9298,21708,11298,6609,16087,12635,19232,21586,16342,15928, -9305,9330,10237,12445,14794,15622,13718,1053,4209,3505, -9582,13370,8108,1407,2494,3042,13898,12854,19565,16680, -18079,4479,21541,13747,16113,3668,10797,2553,18905,5077, -5370,18773,7584,14171,16293,8133,10798,16977,19860,4621, -3922,17141,2932,14727,6475,17634,11859,2753,15018,19951, -7925,6942,10831,1438,984,4672,18918,4818,11541,6417, -18159,3988,17654,18530,4279,20540,20056,21718,14461,3671, -10325,15019,11542,17145,14990,16978,5598,4878,11369,18930, -18674,18679,14638,11766,1414,18789,11678,9105,6085,12036, -4480,21036,3332,3009,18518,4822,14731,14306,15021,14376, -11545,19408,20921,20314,3416,5467,12563,990,4879,1816, -4233,1400,20361,14991,21256,12130,14627,5599,2118,18599, -8149,10174,10898,9600,13786,20199,13996,19405,18087,12800, -20626,18797,17351,20707,9612,14076,8590,1730,13728,1115, -13729,1765,21485,2719,18941,3049,7472,21719,4379,4400, -19713,4440,5399,20394,9613,19097,18942,14643,4893,13865, -18798,8821,13311,14040,18042,4234,2918,11418,20093,11959, -19223,7782,10175,20449,18088,13977,20635,1287,15839,9083, -8048,1826,1356,13929,16855,9278,10177,4739,12632,16593, -8497,5125,15113,13389,19504,10268,12182,21359,3681,17925, -15994,20213,19535,1457,3622,5928,20813,13761,1314,7409, -6581,16272,11937,7244,15777,7157,17414,10492,8890,2079, -4675,15024,14993,4001,13223,19335,8195,9065,21441,2164, -16441,8049,9485,1732,17122,4802,15566,20941,9154,9720, -21415,9489,12807,1750,10589,3067,12973,12700,1958,2177, -20582,4613,12019,1206,6836,2519,20201,9633,19738,19739, -5551,5813,3967,5172,16326,3257,4489,2466,20454,12776, -19839,18322,19740,13535,18972,13732,12637,21417,4914,9159, -21645,21646,4658,2395,13272,11658,16278,10412,6019,7748, -2723,8257,8226,2520,21758,13002,18147,12304,21445,21499, -1690,12201,3903,2804,2269,10970,6448,7415,5716,17031, -3539,5774,3739,20815,13600,11483,4965,5335,12236,14225, -18807,14390,4216,5014,16457,16361,7297,21587,7347,18814, -16955,18388,18328,7348,19679,6110,16663,12369,1476,18535, -5825,17823,13967,18480,9122,18274,1353,6699,8975,7859, -8976,14937,4748,16173,7052,11471,10877,8831,6364,15860, -19611,19481,3070,17992,18505,20643,12370,18691,7796,18692, -14887,19602,16362,10915,15692,7058,7797,13854,6628,9380, -13564,17332,14606,15409,16542,14408,2779,12309,7300,18998, -20435,4929,11948,11127,5527,7497,15300,18609,14133,19889, -21557,11307,15133,7310,18568,7806,6674,5148,12929,10706, -19890,13809,14585,20820,16547,15861,13805,15490,20380,14943, -14506,8690,16890,5522,12644,5215,15238,12043,15547,5289, -2939,20652,11894,7070,5455,13011,12953,10921,17901,5184, -21420,16154,13096,18523,3721,7301,20976,3526,10222,14042, -16962,6975,9771,6788,19373,12983,5864,5087,5088,16043, -6488,14108,3179,12211,19513,7574,6431,6596,5784,11783, -19008,5199,8631,5725,5726,10747,20588,21351,9382,9302, -2427,3077,9502,17769,13277,14867,15892,5652,20250,15140, -9392,10377,9824,11135,10286,2347,15141,8693,1628,10435, -8123,20614,20325,14755,10748,11476,18525,15782,12212,21285, -14134,13572,7358,3078,6976,18233,18030,4423,18102,20856, -21710,3109,12603,14824,6489,9018,20659,14236,16908,2943, -3767,4430,11338,16764,13698,10016,10150,13104,17305,13956, -4494,20440,9353,20031,14892,4152,2480,15500,11009,15148, -8456,15421,6793,6986,11941,16176,11841,13935,15929,20295, -4689,13329,13672,6191,12935,5489,10184,9364,5200,16995, -14508,21558,14031,7083,3981,7995,7513,2845,3312,14758, -7555,10004,11581,19193,6801,14199,21731,17970,2484,5149, -8239,21734,19042,12606,4757,6738,3493,7196,15214,12496, -2537,2812,21294,6802,7084,7835,7303,14686,7436,13036, -3547,18872,1660,15033,14328,9661,19171,15580,15366,11155, -12734,16046,1734,6907,7202,12892,11690,11836,18759,5223, -7525,19218,11897,13288,18340,12735,11140,20559,5788,2945, -7000,8981,12517,3592,2794,5299,11156,19448,21012,6670, -12895,9430,9397,13995,10385,9669,3158,10527,11228,6814, -11979,10481,21007,5204,4039,19906,9677,4643,21465,15088, -9750,7602,2798,13302,21190,10348,18289,9683,21191,2458, -7824,4352,15099,6508,11800,19802,10238,9134,7646,17260, -5738,8268,17458,10103,19270,7384,19200,19492,19326,17341, -11884,1869,2211,9222,8270,14857,14362,21736,3113,13582, -13493,2022,8170,19809,10630,9701,3160,10546,3472,8481, -18296,9253,9228,21217,9411,9575,1108,11572,19816,10106, -5687,6517,12857,17808,2331,2825,12804,8582,18943,8415, -17025,17875,6069,9000,9273,8891,14905,862,17820,2629, -13239,8606,8893,8608,2873,5568,19113,19613,17429,18697, -16694,15460,7948,11973,6343,15695,6518,17833,12166,16996, -17502,17837,16910,9776,2847,19043,4350,19637,2994,6526, -1911,1912,8286,12915,2596,14082,2630,14086,21061,15203, -15204,9650,20251,19624,9656,5733,4287,20567,11361,11362, -18595,14464,17876,8421,12838,13390,15114,13269,18973,15961, -18686,1977,6837,3849,20653,20047,16543,2763,15696,7949, -14264,19168,3788,8162,9019,3165,3389,4080,7556,9803, -1719,4040,7378,7385,21257,13293,18956,14123,8704,13125, -18554,18129,6773,13628,6970,11974,6737,4103,18760,17463, -5637,10935,877,7830,12293,2197,10829,10830,12290,9911, -7237,13997,11460,16169,18089,4401,13794,17235,8221,13391, -4002,11963,12138,8227,4189,1392,14019,10878,14001,14749, -16184,6111,15323,14021,10479,11433,9507,15930,13816,20410, -14071,20411,11022,10386,3868,8398,12785,18461,11633,1712, -14377,12801,16847,13253,18205,3934,18508,20026,20762,1727, -3474,14876,9373,11693,4515,5741,1683,20271,11161,3776, -19946,2881,16244,4518,3320,16111,10794,13371,12447,12849, -16675,16676,16020,8132,20793,20876,12855,8011,8012,13939, -8490,6225,13589,1584,5137,21027,12072,8402,6390,11853, -17866,17869,20007,18302,3413,19454,6411,6881,11856,10893, -11109,2678,12073,1411,20877,12056,21372,20089,10122,20230, -4728,10953,20092,16118,9594,11089,18779,4425,15717,14926, -8925,8085,8177,18919,7234,21033,6746,1340,20232,21196, -19437,5466,6326,12178,3039,2590,15105,2462,14981,8217, -18039,14462,8404,4871,7106,5640,3414,19139,21089,18675, -6685,20127,2505,16388,6308,7465,14994,4376,17705,4881, -14075,20887,19205,16712,8657,10654,967,15679,11417,9442, -18739,11091,13545,12529,17465,17570,15107,8903,13152,8279, -12469,17744,20923,5676,11294,16683,13435,18931,8037,14521, -12239,2224,7927,9925,13383,16435,5925,10806,19465,1821, -3996,6240,18944,19334,9236,5943,9556,5331,9787,2951, -4771,18945,15905,9322,7242,2680,8090,15171,2467,12153, -17283,14440,9076,12453,5958,7977,11723,15972,17490,15872, -4259,16085,9614,14879,14995,9444,14880,4024,20015,6180, -17728,14711,2982,20493,8778,16273,16125,3931,16635,8196, -14343,9816,6833,15317,13154,3556,8372,5511,5858,5962, -21099,12232,6046,2264,12633,4546,2598,10405,8222,9445, -20611,12476,15747,19725,11655,10406,11118,8050,10058,10587, -13473,19726,11725,1619,6334,19837,9155,13254,12949,20890, -19184,1827,1343,19832,16603,13965,4583,19833,8711,7158, -14344,14079,12690,12343,16858,19835,13840,6589,7416,11927, -13397,15856,4743,16636,15639,16356,13868,2066,6099,18323, -6248,11097,10835,19230,18324,6210,14493,10943,20116,6845, -11533,5758,2653,4321,9791,12808,12809,10910,15727,3118, -16401,1969,6764,1831,17856,7060,7411,4788,18974,19208, -14577,7749,20638,15453,19603,1467,11277,14526,15975,14474, -19414,8228,3968,16054,7670,13398,15464,10220,6896,19874, -11559,1178,19508,13557,21347,9845,2178,17201,2956,6144, -21500,10759,19295,9119,4744,10277,16402,17092,19296,12506, -7940,5777,15282,19885,9727,18607,11004,21405,2527,15381, -3290,16203,5419,14055,20320,14581,10603,10688,16363,20117, -16802,16544,13006,20243,14529,871,20023,19114,15127,15290, -14530,863,12065,2837,16620,2011,11220,5286,6049,6673, -17036,3626,20966,19240,7798,5258,15176,7713,6775,19158, -5194,14849,2958,17495,19750,17782,6429,1478,1624,20977, -7595,8809,14451,14261,11128,1000,10375,6397,19441,2235, -4533,19372,5803,10762,13286,19619,7174,18171,2345,16989, -7175,10304,10223,7907,5850,3102,20854,5089,13030,7718, -3071,2961,16044,11996,15605,18664,16959,11129,15491,14262, -5975,9728,16204,2609,5113,12206,21572,8630,12187,20495, -2697,17902,6879,7499,18230,2902,9861,3185,15650,7549, -3103,19341,6258,17658,14820,5650,3104,9047,17903,20978, -12349,8444,7722,12508,3487,6789,7811,16761,12009,7075, -16410,15146,12956,17045,17046,15253,4178,11286,13955,15142, -20657,3105,18999,20988,16237,15394,18100,9013,18645,16007, -13982,6167,1505,2192,14780,12602,9969,16411,14095,14088, -2534,8099,6491,7629,9363,3218,6277,5938,20028,10192, -6278,4935,6054,6122,17214,7503,14197,17047,1038,10378, -11848,19634,10003,14486,3458,6599,20255,17604,19780,14681, -18024,10085,10782,21520,19379,6794,1994,9801,3768,18707, -6550,20660,10783,3407,19029,15210,12351,8325,15326,13215, -21459,11877,5833,7953,12165,14091,7085,16516,2810,15332, -15034,15884,14092,21234,9744,11102,14544,14825,11137,11849, -19312,19313,11017,7959,12732,7197,21716,16667,15553,19197, -19128,4133,3029,6904,13300,9261,8537,885,16413,1701, -5533,12941,19314,1702,9094,4642,2014,10888,7526,16478, -10666,20155,10454,9662,19447,18514,10384,15013,20997,19355, -4038,16334,6715,17614,12048,14432,1638,2200,11226,10159, -7375,14097,2539,5536,1706,6914,17311,10344,13242,13826, -9678,8070,17452,19323,15190,16484,6507,18047,21188,10232, -9181,4137,4537,6383,9182,14762,10097,19324,11103,7217, -9806,7528,19267,9986,19065,7382,2210,3359,13676,7450, -9216,4504,14870,19851,21470,4763,14360,9433,9217,3112, -13491,19388,12943,4452,8473,18429,19327,13983,20164,10547, -18419,9534,11105,14250,15398,3471,7699,2249,19329,6064, -21214,9266,9226,11577,16241,10551,18111,17265,18432,5152, -18436,19820,5668,17394,17395,6679,6203,21322,20357,17563, -2639,20109,12794,21034,4673,11860,16561,12560,18920,12254, -8580,12058,8581,12097,11457,9905,5670,17663,5671,5672, -1567,3282,17079,20734,21198,8710,20525,4882,1078,17571, -17572,10118,21411,12108,15354,18500,15887,14207,16389,6658, -21091,7657,17877,6186,13592,6579,17760,17761,17236,19142, -16686,21093,18548,14644,16345,15906,18043,20114,8583,17083, -17974,20736,12532,6727,5679,2381,6689,2412,6757,9927, -4902,8091,2382,12596,15840,21435,15874,5886,9299,14182, -17884,2650,13795,6355,16860,14740,6143,18051,8837,8422, -17415,16861,21360,8525,3682,17580,7053,16793,10493,18376, -8223,10013,9039,6857,16088,16871,3203,16719,6211,8304, -4966,16661,3068,4789,12481,13316,13966,16872,13317,17669, -18975,7618,19741,5182,12305,5517,16327,14475,5569,14290, -14291,11634,5336,16357,2424,6147,8993,21062,17068,6700, -4790,9796,17681,7671,1479,19233,21230,16458,16032,14211, -16885,11929,11930,2182,18227,8092,8097,10963,16505,20340, -7936,13322,13855,6591,4490,13402,15205,18481,9934,7752, -20216,5570,19990,11554,14664,9847,5456,15492,2357,4362, -1842,6667,17539,17041,16805,19992,6118,6149,16892,20027, -11515,14213,13323,18623,11130,9732,19304,16753,5408,18394, -13052,1494,1629,3079,10436,7359,10287,12213,15178,19011, -15893,8445,21592,6432,18822,20989,16509,10181,5978,11975, -13712,8098,9051,3163,20296,7366,16912,16913,19012,17503, -2668,6635,2240,18698,18103,18400,18104,13075,8536,3573, -4179,14399,7632,4690,14958,19781,9974,8100,14299,4691, -18105,9258,10947,15533,19030,8101,10987,8024,8025,19309, -19044,18025,9206,15383,1996,16919,13631,21622,9751,6739, -21208,10093,16371,19045,17549,20557,6803,3299,11934,1757, -13882,6156,18066,7961,2742,3549,18631,6157,9262,1641, -13824,9670,11406,13972,10528,9131,992,18071,8944,14917, -9891,9684,10349,8463,9900,18415,16939,17617,10239,18716, -1999,13688,19981,9263,3114,2702,5658,8338,2392,11075, -15527,9264,21218,9254,10107,19822,20533,20731,12109,2465, -16403,5936,8446,18652,21685,4404,2899,8671,20171,3850, -13012,19374,13037,12060,2338,7339,2893,19614,20341,1553, -1200,1843,2895,19515,4041,2471,11852,8109,15294,13748, -10790,4544,5162,18363,5246,1303,14992,19530,5248,11439, -3653,13599,13548,21566,10808,8760,12870,9490,12552,5173, -15593,1345,13558,2957,7254,4749,8686,8229,2786,17042, -1329,10661,7863,10679,14022,16510,9508,4153,15931,13105, -16920,9671,4042,9945,12024,12395,1866,16940,2714,16419, -13701,2715,1072,7105,2148,21426,5242,8645,1807,6302, -18190,19135,4458,21357,8910,21070,11455,12255,8219,18780, -17675,16139,10039,12256,11676,18596,19523,18040,3396,1811, -23007,23008,23009,23010,23011,23012,23013,23014,23015,23016, -23017,23018,23019,23020,23021,23022,23023,23024,23025,23026, -23027,23028,23029,23030,23031,23032,23033,23034,23035,23036, -23037,23038,23039,23040,23041,23042,23043,23044,23045,23046, -23047,23048,23049,23050,23051,23052,23053,23054,23055,23056, -23057,23058,23059,23060,23061,23062,23063,23064,23065,23066, -23067,23068,23069,23070,23071,23072,23073,23074,23075,23076, -23077,23078,23079,23080,23081,23082,23083,23084,23085,23086, -23087,23088,23089,23090,23091,23092,23093,23094,23095,23096, -23097,23098,23099,23100,23101,23102,11,34,37,328, -70,72,68,118,23934,6,66,74,330,75, -76,77,78,109,112,88,90,92,94,96, -98,100,102,114,115,104,106,131,132,133, -151,143,144,136,135,146,145,134,152,137, -165,142,140,167,124,147,148,158,155,154, -153,138,157,163,164,159,160,431,150,149, -339,338,327,79,80,443,18,323,321,322, -331,325,491,335,336,176,178,177,175,174, -169,168,171,170,332,185,189,183,187,334, -23103,23104,23105,23106,23107,23108,23109,23110,23111,23112, -23113,23114,23115,23116,23117,23118,23119,23120,23121,23122, -23123,23124,23125,23126,23127,23128,23129,23130,23131,23132, -23133,23134,23135,23136,23137,23138,23139,23140,23141,23142, -23143,23144,23145,23146,23147,23148,23149,23150,23151,23152, -23153,23154,23155,23156,23157,23158,23159,23160,23161,23162, -23163,23164,23165,23166,23167,23168,23169,23170,23171,23172, -23173,23174,23175,23176,23177,23178,23179,23180,23181,23182, -23183,23184,23185,23186,23187,23188,23189,23190,23191,23192, -23193,23194,23195,23196,23197,23198,345,352,359,366, -373,380,387,394,401,407,23679,23680,23681,23682, -23683,23684,344,351,358,365,372,379,386,393, -400,406,410,413,416,418,420,422,424,426, -428,430,343,350,357,364,371,378,385,392, -399,405,409,412,415,417,419,421,423,425, -427,429,342,349,356,363,370,377,384,391, -398,404,23685,23686,18727,4412,14015,14972,16730,10188, -12616,1048,8127,14553,23687,23688,346,353,360,367, -374,381,388,395,402,408,411,414,23689,23690, -23199,23200,23201,23202,23203,23204,23205,23206,23207,23208, -23209,23210,23211,23212,23213,23214,23215,23216,23217,23218, -23219,23220,23221,23222,23223,23224,23225,23226,23227,23228, -23229,23230,23231,23232,23233,23234,23235,23236,23237,23238, -23239,23240,23241,23242,23243,23244,23245,23246,23247,23248, -23249,23250,23251,23252,23253,23254,23255,23256,23257,23258, -23259,23260,23261,23262,23263,23264,23265,23266,23267,23268, -23269,23270,23271,23272,23273,23274,23275,23276,23277,23278, -23279,23280,23281,23282,23283,23284,23285,23286,23287,23288, -23289,23290,23291,23292,23293,23294,13,14,16,324, -20,22,1,24,27,30,121,32,3,36, -38,340,341,348,355,362,369,376,383,390, -397,40,43,126,128,130,45,47,432,439, -441,447,449,456,459,462,464,470,472,477, -481,487,492,498,500,502,504,506,509,520, -522,524,526,528,48,50,51,52,53,57, -433,440,442,448,450,457,460,463,465,471, -473,478,482,488,493,499,501,503,505,507, -510,521,523,525,527,529,60,62,64,69, -23295,23296,23297,23298,23299,23300,23301,23302,23303,23304, -23305,23306,23307,23308,23309,23310,23311,23312,23313,23314, -23315,23316,23317,23318,23319,23320,23321,23322,23323,23324, -23325,23326,23327,23328,23329,23330,23331,23332,23333,23334, -23335,23336,23337,23338,23339,23340,23341,23342,23343,23344, -23345,23346,23347,23348,23349,23350,23351,23352,23353,23354, -23355,23356,23357,23358,23359,23360,23361,23362,23363,23364, -23365,23366,23367,23368,23369,23370,23371,23372,23373,23374, -23375,23376,23377,23378,23379,23380,23381,23382,23383,23384, -23385,23386,23387,23388,23389,23390,645,647,649,651, -653,655,658,660,662,664,667,669,671,673, -675,677,680,682,684,686,688,690,692,694, -696,698,700,702,704,706,708,710,712,714, -716,718,720,722,724,726,728,730,732,734, -736,738,740,742,744,746,748,750,752,754, -756,758,760,762,764,766,768,770,772,774, -776,778,780,782,784,786,788,790,792,794, -796,798,800,802,804,806,808,810,812,23691, -23692,23693,23694,23695,23696,23697,23698,23699,23700,23701, -23391,23392,23393,23394,23395,23396,23397,23398,23399,23400, -23401,23402,23403,23404,23405,23406,23407,23408,23409,23410, -23411,23412,23413,23414,23415,23416,23417,23418,23419,23420, -23421,23422,23423,23424,23425,23426,23427,23428,23429,23430, -23431,23432,23433,23434,23435,23436,23437,23438,23439,23440, -23441,23442,23443,23444,23445,23446,23447,23448,23449,23450, -23451,23452,23453,23454,23455,23456,23457,23458,23459,23460, -23461,23462,23463,23464,23465,23466,23467,23468,23469,23470, -23471,23472,23473,23474,23475,23476,23477,23478,23479,23480, -23481,23482,23483,23484,23485,23486,644,646,648,650, -652,654,657,659,661,663,666,668,670,672, -674,676,679,681,683,685,687,689,691,693, -695,697,699,701,703,705,707,709,711,713, -715,717,719,721,723,725,727,729,731,733, -735,737,739,741,743,745,747,749,751,753, -755,757,759,761,763,765,767,769,771,773, -775,777,779,781,783,785,787,789,791,793, -795,797,799,801,803,805,807,809,811,656, -665,678,23702,23703,23704,23705,23706,23707,23708,23709, -23487,23488,23489,23490,23491,23492,23493,23494,23495,23496, -23497,23498,23499,23500,23501,23502,23503,23504,23505,23506, -23507,23508,23509,23510,23511,23512,23513,23514,23515,23516, -23517,23518,23519,23520,23521,23522,23523,23524,23525,23526, -23527,23528,23529,23530,23531,23532,23533,23534,23535,23536, -23537,23538,23539,23540,23541,23542,23543,23544,23545,23546, -23547,23548,23549,23550,23551,23552,23553,23554,23555,23556, -23557,23558,23559,23560,23561,23562,23563,23564,23565,23566, -23567,23568,23569,23570,23571,23572,23573,23574,23575,23576, -23577,23578,23579,23580,23581,23582,530,532,534,536, -538,540,542,544,546,548,550,552,554,556, -558,560,562,564,566,568,570,572,574,576, -23710,23711,23712,23713,23714,23715,23716,23717,531,533, -535,537,539,541,543,545,547,549,551,553, -555,557,559,561,563,565,567,569,571,573, -575,577,23718,23719,23720,23721,23722,23723,23724,25, -28,110,113,89,91,93,95,97,99,101, -103,23725,23726,105,107,61,65,8,23727,82, -87,23728,23729,23730,23731,23732,23733,23734,23735,23736, -23583,23584,23585,23586,23587,23588,23589,23590,23591,23592, -23593,23594,23595,23596,23597,23598,23599,23600,23601,23602, -23603,23604,23605,23606,23607,23608,23609,23610,23611,23612, -23613,23614,23615,23616,23617,23618,23619,23620,23621,23622, -23623,23624,23625,23626,23627,23628,23629,23630,23631,23632, -23633,23634,23635,23636,23637,23638,23639,23640,23641,23642, -23643,23644,23645,23646,23647,23648,23649,23650,23651,23652, -23653,23654,23655,23656,23657,23658,23659,23660,23661,23662, -23663,23664,23665,23666,23667,23668,23669,23670,23671,23672, -23673,23674,23675,23676,23677,23678,578,580,582,584, -586,588,590,592,594,596,598,600,602,604, -606,608,610,612,614,616,618,620,622,624, -626,628,630,632,634,636,638,640,642,23737, -23738,23739,23740,23741,23742,23743,23744,23745,23746,23747, -23748,23749,23750,23751,579,581,583,585,587,589, -591,593,595,597,599,601,603,605,607,609, -611,613,615,617,619,621,623,625,627,629, -631,633,635,637,639,641,643,23752,23753,23754, -23755,23756,23757,23758,23759,23760,23761,23762,23763,23764, -71,58,73,5,7,329,81,446,458,190, -184,186,188,123,139,141,156,161,162,166, -197,204,209,210,211,217,218,219,225,226, -227,233,234,235,245,246,247,256,257,258, -267,268,269,278,279,280,297,298,299,212, -220,236,228,300,301,302,303,307,309,311, -313,315,317,319,318,316,314,312,310,308, -304,320,305,306,172,173,179,180,181,182, -337,122,333,116,117,23765,23766,23767,23768,23769, -23770,23771,23772,23773,23774,23775,437,434,436,435, -455,451,454,452,469,466,468,467,497,494, -496,495,515,511,514,512,519,516,518,517, -513,453,438,23776,489,490,23777,461,23778,23779, -23780,23781,813,814,815,816,817,818,819,820, -821,822,823,824,825,826,827,828,829,830, -831,832,833,834,835,836,837,838,839,840, -841,842,843,844,845,846,847,848,849,23782, -23783,23784,23785,23786,23787,23788,23789,23790,23791,23792, -23793,23794,23795,23796,23797,23798,23799,23800,23801,23802, -347,354,361,368,375,382,389,396,403,20773, -484,474,486,445,475,483,444,476,479,480, -485,41,326,67,23803,508,21167,23804,4,23805, -23806,23807,23935,9,10,23936,23937,119,23938,23939, -83,84,85,86,54,55,56,31,33,35, -42,39,44,12,23,26,59,63,108,111, -15,21,29,120,2,125,129,127,49,17, -19,46,23808,23809,23810,23811,23812,23813,23814,23815, -23816,23817,23818,23819,23820,0,23821,23822,23823,23824, -23825,23826,23827,23828,23829,23830,23831,23832,23833,191, -192,198,199,193,194,200,201,195,196,202, -203,205,206,207,208,213,214,215,216,221, -222,223,224,229,230,231,232,237,238,239, -240,241,242,243,244,248,249,250,251,252, -253,254,255,259,260,261,262,263,264,265, -266,270,271,272,273,274,275,276,277,281, -282,283,284,285,286,287,288,289,290,291, -292,293,294,295,296,23834,23835,23836,23837,23838, -23839,23840,23841,23842,23843,23844,23845,23846,23847,23848, -8829,17231,6535,6086,20542,7042,18120,14179,15314,15901, -9317,10807,16850,17084,1310,20931,18257,14124,5959,7983, -12018,4587,17416,1130,12691,1620,19209,9156,7333,12998, -9036,18384,21630,20942,20743,18167,9930,2092,21583,5037, -4745,16637,19875,2869,16031,18206,17531,7250,1549,19478, -18563,15235,1836,11304,15065,10689,19887,3315,19763,14531, -6021,13003,18986,20644,2012,6025,10777,7575,11431,2185, -1002,5217,3180,1359,1506,1495,6633,1901,9970,17909, -15926,18626,14914,17436,14719,4149,7725,5316,8386,4033, -6795,8879,17252,17253,11834,1558,21785,21786,21787,21788, -21789,21790,21791,21792,21793,21794,21795,21796,21797,21798, -21799,21800,21801,21802,21803,21804,21805,21806,21807,21808, -21809,21810,21811,21812,21813,21814,21815,21816,21817,21818, -21819,21820,21821,21822,21823,21824,21825,21826,21827,21828, -21829,21830,21831,21832,21833,21834,21835,21836,21837,21838, -21839,21840,21841,21842,21843,21844,21845,21846,21847,21848, -21849,21850,21851,21852,21853,21854,21855,21856,21857,21858, -21859,21860,21861,21862,21863,21864,21865,21866,21867,21868, -21869,21870,21871,21872,21873,21874,21875,21876,21877,21878, -6905,11896,11018,9944,11594,5692,14720,10345,15311,17313, -11073,13677,11600,10627,17262,12754,8479,11208,21486,10333, -15102,13369,5048,9375,1054,6226,3669,2883,5098,19567, -12765,19568,2317,6231,16742,4819,7847,18193,10973,1202, -19952,8405,20040,8406,7324,3397,12430,12996,18932,951, -12470,4883,17960,3000,5431,7289,14307,3007,13669,14466, -14378,15344,21686,10176,1444,20623,7883,7706,7474,9616, -5680,17147,21094,18216,17786,18471,17853,15109,13192,19144, -18090,1242,17380,17085,5708,2681,17878,12154,9347,3452, -19224,16567,4261,2513,15633,16750,21879,21880,21881,21882, -21883,21884,21885,21886,21887,21888,21889,21890,21891,21892, -21893,21894,21895,21896,21897,21898,21899,21900,21901,21902, -21903,21904,21905,21906,21907,21908,21909,21910,21911,21912, -21913,21914,21915,21916,21917,21918,21919,21920,21921,21922, -21923,21924,21925,21926,21927,21928,21929,21930,21931,21932, -21933,21934,21935,21936,21937,21938,21939,21940,21941,21942, -21943,21944,21945,21946,21947,21948,21949,21950,21951,21952, -21953,21954,21955,21956,21957,21958,21959,21960,21961,21962, -21963,21964,21965,21966,21967,21968,21969,21970,21971,21972, -16716,2510,8526,10903,1315,15875,17286,2830,5964,17964, -18262,17987,17789,4903,16862,10059,9624,7886,15277,4741, -16257,3760,12433,20430,14083,11250,19742,9160,11251,14501, -16404,15749,2834,1377,2472,4330,2270,1378,10413,5626, -3784,1321,12999,21418,13200,4454,7888,4062,7860,6701, -19680,10917,2940,17937,15646,17682,3347,13842,11254,7350, -16459,13920,6592,17537,2863,7424,21326,2323,9797,13565, -4098,18168,6630,10141,14536,13811,15283,18569,16545,16756, -20654,7945,19306,10691,15548,10144,9651,9282,15761,13013, -3229,8438,20536,1694,14752,2296,21973,21974,21975,21976, -21977,21978,21979,21980,21981,21982,21983,21984,21985,21986, -21987,21988,21989,21990,21991,21992,21993,21994,21995,21996, -21997,21998,21999,22000,22001,22002,22003,22004,22005,22006, -22007,22008,22009,22010,22011,22012,22013,22014,22015,22016, -22017,22018,22019,22020,22021,22022,22023,22024,22025,22026, -22027,22028,22029,22030,22031,22032,22033,22034,22035,22036, -22037,22038,22039,22040,22041,22042,22043,22044,22045,22046, -22047,22048,22049,22050,22051,22052,22053,22054,22055,22056, -22057,22058,22059,22060,22061,22062,22063,22064,22065,22066, -9052,21308,3080,18756,12724,8021,20202,13409,1006,9772, -10979,19169,6464,16517,16723,3574,17793,20297,18106,13480, -3494,9975,9876,13330,15149,5727,8026,4496,7891,10151, -6988,6796,8027,912,20204,3459,7689,5816,15446,6804, -6553,14096,15216,15737,2813,19638,7962,10346,1705,14771, -21717,9211,17004,7203,17971,13927,16668,5090,9398,4043, -9679,21013,13850,9709,20158,13332,15702,5736,15188,9135, -10240,10350,9685,9265,19271,11078,17342,13335,5659,3552, -20166,6564,1812,1822,20848,9705,14696,17347,13055,1161, -12167,4566,3398,4797,11233,16212,22067,22068,22069,22070, -22071,22072,22073,22074,22075,22076,22077,22078,22079,22080, -22081,22082,22083,22084,22085,22086,22087,22088,22089,22090, -22091,22092,22093,22094,22095,22096,22097,22098,22099,22100, -22101,22102,22103,22104,22105,22106,22107,22108,22109,22110, -22111,22112,22113,22114,22115,22116,22117,22118,22119,22120, -22121,22122,22123,22124,22125,22126,22127,22128,22129,22130, -22131,22132,22133,22134,22135,22136,22137,22138,22139,22140, -22141,22142,22143,22144,22145,22146,22147,22148,22149,22150, -22151,22152,22153,22154,22155,22156,22157,22158,22159,22160, -6350,18790,1138,8373,2289,2560,10201,3484,11035,21378, -12482,1554,21148,10202,3018,19241,12814,17208,10305,3708, -11976,21309,10017,16765,3445,16627,19259,18343,15724,5934, -2291,13265,14383,2227,2228,13930,15091,14397,10393,4786, -20334,4856,12451,3878,13590,10995,1440,8146,15241,10123, -11440,20011,4884,5330,7849,4885,15720,11441,15587,7543, -16196,4895,11547,11444,11445,2058,15723,5061,1451,3266, -20943,10563,12032,18741,6481,19604,19605,11447,8527,18957, -10129,3842,6483,3455,21380,7592,2530,2325,16105,9393, -2111,10152,3859,10020,7559,2744,22161,22162,22163,22164, -22165,22166,22167,22168,22169,22170,22171,22172,22173,22174, -22175,22176,22177,22178,22179,22180,22181,22182,22183,22184, -22185,22186,22187,22188,22189,22190,22191,22192,22193,22194, -22195,22196,22197,22198,22199,22200,22201,22202,22203,22204, -22205,22206,22207,22208,22209,22210,22211,22212,22213,22214, -22215,22216,22217,22218,22219,22220,22221,22222,22223,22224, -22225,22226,22227,22228,22229,22230,22231,22232,22233,22234, -22235,22236,22237,22238,22239,22240,22241,22242,22243,22244, -22245,22246,22247,22248,22249,22250,22251,22252,22253,22254, -12354,3866,3867,7773,3417,14744,20979,11522,1412,5163, -21124,17120,17806,2446,18041,12674,17062,3191,1445,21628, -18004,20808,4436,20891,4630,8185,14183,11699,15601,15889, -7738,16442,6730,15388,2651,10960,8055,17418,15976,10812, -17419,15158,12565,4201,14713,18987,1369,20510,5627,10676, -9961,7166,15752,935,2656,1481,11255,4114,8681,18181, -3134,14449,21064,20980,19764,4751,18483,2428,15999,5830, -16571,6595,8842,19119,8448,16903,5616,19013,2896,6780, -11925,3722,20516,14453,3142,19031,21634,15089,14093,3815, -10313,10314,13216,4943,9879,13106,22255,22256,22257,22258, -22259,22260,22261,22262,22263,22264,22265,22266,22267,22268, -22269,22270,22271,22272,22273,22274,22275,22276,22277,22278, -22279,22280,22281,22282,22283,22284,22285,22286,22287,22288, -22289,22290,22291,22292,22293,22294,22295,22296,22297,22298, -22299,22300,22301,22302,22303,22304,22305,22306,22307,22308, -22309,22310,22311,22312,22313,22314,22315,22316,22317,22318, -22319,22320,22321,22322,22323,22324,22325,22326,22327,22328, -22329,22330,22331,22332,22333,22334,22335,22336,22337,22338, -22339,22340,22341,22342,22343,22344,22345,22346,22347,22348, -10154,9331,17220,4640,3390,19213,6155,17221,5617,16373, -11889,19795,16417,19383,9428,9663,14784,3446,10006,10007, -1681,7210,2577,18515,7757,20761,10891,9692,6922,9185, -7009,17978,19348,19201,19392,15399,3732,10647,10554,10555, -1775,1778,1079,4426,4427,13140,1389,20208,10861,11998, -3040,10047,11370,7043,12233,5191,4263,5968,1468,2727, -12976,875,17476,6055,6676,6056,20256,3188,6057,17480, -18701,6059,7691,916,17694,6671,9686,12406,6134,7731, -5119,12121,13399,13620,20323,5528,8503,8504,21150,20327, -20328,20443,4044,12766,19283,1286,852,851,860,861, -857,859,858,868,876,882,881,891,901,893, -896,941,928,924,955,966,974,965,970,969, -979,982,985,987,993,1005,1009,1023,1031,1033, -1042,1041,1058,1061,1052,1051,1055,1062,1047,1059, -1050,1076,1084,1093,1090,12005,1094,1105,1098,1096, -1111,1114,1112,1120,1113,1126,1127,1131,1145,1142, -1146,1139,1143,1144,1159,1160,1172,1175,1171,1183, -1170,1169,1176,1184,1187,1189,1199,1201,1197,1205, -1214,1203,1215,1204,1208,1223,1224,1220,1230,1780, -20526,6087,6094,1781,16266,19553,4527,4967,13400,3540, -10420,20432,9504,7908,17904,7356,12044,942,10339,17862, -21113,3495,947,5537,9687,5138,16340,12795,19913,15721, -17636,17023,4733,11245,11295,14640,20012,12031,4567,10866, -17275,14645,18444,20737,18600,14384,6887,3311,20680,8930, -8186,14441,10957,11371,21261,20628,14646,3832,11700,21568, -2356,1747,11093,10214,15909,3871,3683,11623,11299,17988, -20709,18472,11377,21078,11372,10912,13094,5969,6565,2548, -3240,8376,4264,10760,17289,16874,9077,14212,15753,5814, -16235,9473,14665,13324,9935,20751,1853,1236,1240,1243, -1239,1237,1262,1261,1273,1263,1270,1279,1285,1290, -1288,1284,1295,1323,1305,1297,1306,1308,1298,1301, -1319,1320,1311,1339,1350,1349,1357,1364,1365,1373, -1380,1387,1381,1393,1402,1405,1423,1417,1413,1496, -1483,1501,1429,1449,1443,1427,1433,1480,1430,1456, -1493,1428,1488,1511,1523,1519,1448,1563,1546,1550, -1568,1569,1590,1591,1580,1605,1606,1608,1598,1615, -1614,1630,1654,1666,1665,1672,1680,1687,1689,1700, -1691,1686,1713,1729,1728,1744,1735,1740,1746,1745, -9494,9172,15206,8380,12347,6839,10421,5195,21127,19620, -6840,10704,17125,17716,6705,5815,20118,2971,7351,10964, -6291,17939,15762,17905,4443,16666,5780,11053,16623,8812, -3489,2399,13325,11395,4702,20257,20518,19032,3789,8796, -11396,14893,3085,10290,2572,10750,5728,6600,14894,16921, -12586,14430,9909,2391,7518,18702,17913,11423,5785,7519, -18713,917,6810,7442,20560,10929,2758,14072,11842,18068, -18634,6910,11023,11157,12440,11158,9431,8945,17951,11159, -6923,10352,11028,10241,5660,10767,17006,15528,8622,21239, -13193,19743,14907,20244,8482,14416,1766,1758,1779,1791, -1798,1776,1785,1777,1829,1815,1835,1825,1844,1805, -1809,1828,1790,1845,1830,1810,1808,1898,1894,1897, -1896,1920,1904,1905,1908,1929,1919,1910,1931,1938, -1944,1940,1939,1941,1953,1956,1946,1951,1957,1959, -1972,1962,1975,1974,1976,1983,1991,2004,2007,2000, -2003,2021,2026,2027,2034,2029,2041,2052,2067,2051, -2050,2055,2083,2088,2105,2094,2119,2120,2117,2128, -2122,2127,2137,2142,2139,2145,2150,2152,2166,2165, -2186,2180,2175,2183,2229,2220,2230,2255,2261,2265, -6285,19332,21100,7690,20298,19940,1104,3897,12790,21542, -16782,20568,8817,5164,3370,8409,9603,4823,16562,4280, -8624,20888,7851,1685,4297,20569,15195,16213,7878,11373, -8187,19715,10638,16144,4306,11446,21225,11910,12454,10048, -12122,9378,1782,12534,19430,8931,8759,13555,21171,5682, -4313,12839,10408,16443,895,17287,18263,12184,9348,6244, -13270,16498,13091,2089,8761,13614,2252,9283,6212,19606, -17421,17093,1207,10269,19415,2371,2385,18385,14130,9067, -5518,2090,6449,10371,2437,11932,15030,21448,8763,18329, -21381,8779,2528,12708,21631,13294,2306,2285,2287,2278, -2286,2281,2305,2310,2318,2321,2319,2335,2328,2332, -2342,2346,2348,2340,2354,2355,2364,2373,2388,2384, -2378,2389,2394,2404,2407,2403,2417,2405,2406,2408, -2449,2445,2478,2447,2501,2536,2493,2495,2507,2521, -2518,2535,2498,2496,2545,2546,2550,2551,2569,2592, -2597,2585,2588,2584,2586,2625,2620,2618,2614,2640, -2648,2638,2646,2675,2676,2693,2694,2703,2709,2733, -2724,2735,2728,2726,2729,2716,2721,2756,2750,2760, -2766,2764,2791,2774,2796,2778,2785,2775,2772,2808, -9962,8501,1793,11256,7352,6148,13621,9465,19159,16754, -12709,10591,11591,13923,18276,3907,16152,19236,8734,16465, -14913,20655,4100,17099,3488,15648,11612,15732,12815,4175, -4752,13629,13069,10692,5387,15143,4269,10146,14954,15497, -6465,12273,8996,15734,17102,12649,9738,16511,20050,4115, -9114,12030,18577,21312,2195,12820,1008,12190,10193,10382, -8620,2903,2441,19121,9424,12390,12821,12822,3181,21599, -2993,10596,6994,14238,9332,20299,7520,17053,3911,3770, -1800,20104,13077,3608,9664,7521,16922,20497,13108,7443, -19791,21391,6128,8738,20260,9454,2803,2805,2851,2836, -2838,2819,2854,2859,2861,2872,2864,2867,2879,2882, -2890,2892,21361,2898,2444,2905,2912,2913,2920,2926, -2915,2933,2938,2963,2950,2954,2948,2974,2976,2983, -3001,3012,3021,3022,3019,3017,3014,3006,3037,3045, -3053,3043,3084,3069,2889,3058,3057,3093,3117,3123, -3141,3143,3130,3153,3164,3162,3177,3170,3171,3196, -3204,3205,3200,3207,3215,3220,3225,3231,3232,3228, -3255,3252,3260,3267,3274,3291,3295,3308,3309,3313, -3317,3318,3354,3329,3333,3319,3335,3342,3330,3344, -7820,2814,18717,13633,3496,18873,12281,12282,19642,12426, -12824,919,8701,7379,19796,13928,12125,3032,1861,18516, -10710,17224,8946,9400,9432,21017,9680,9688,4505,13636, -12126,19272,9693,10242,10243,11408,14858,5661,9223,1934, -18297,13775,19949,15295,10699,17566,18531,12671,1362,4125, -21071,21072,18737,14570,19531,20924,15776,4991,11114,15161, -10955,2151,10494,19666,16717,21262,5755,17086,20809,5232, -5233,14881,7934,14443,5062,9066,3684,15570,5552,5647, -21724,10070,10414,3520,20845,1469,2807,6702,19510,19115, -21507,6897,20646,19928,16720,17245,3331,3372,3367,3364, -3366,3373,3403,3399,3410,3427,3411,3422,3423,3415, -3421,3425,3451,3464,3465,3480,3481,3500,3518,3532, -3515,3513,3519,3512,3534,3545,3535,3541,3537,3562, -3555,3564,3579,3568,3569,3580,3589,3584,3582,3603, -3595,3606,3617,3619,3623,3613,3620,20383,3628,3650, -3648,3663,3693,3685,3674,3666,3677,3692,3723,3716, -3720,3740,3736,3734,3769,3751,3745,3746,3747,3750, -3757,3759,3758,3761,3786,3775,3790,3779,3774,3806, -3801,3802,3805,3821,3820,3854,3858,3824,3836,3848, -18482,20818,18748,10918,14938,3695,1326,20656,19424,7176, -5237,15494,14944,10707,15324,5018,17941,12725,19792,6989, -15008,2196,3441,5786,15217,9568,11879,11071,3533,9672, -19982,20829,20167,9459,13835,17581,15967,13720,21543,2115, -18921,17143,11714,13342,4709,6039,20013,20801,7974,20802, -19709,8836,1177,12259,11650,9619,19466,12260,1823,10049, -11716,21755,20810,8288,6872,15910,20945,6873,6101,19102, -21492,20946,13731,4075,21265,11871,5008,5212,20276,14882, -9068,5127,7987,15640,15996,18209,10599,10423,5555,21760, -21408,1211,6966,20967,9071,9466,3873,3880,3875,3881, -3887,3889,3906,3898,3894,3914,3918,3919,3941,3944, -3948,3957,3950,3955,3949,3958,3978,3987,3984,3990, -3994,3998,4005,3977,4020,4023,4029,4058,4025,4060, -4064,4063,4070,4078,4071,4073,4076,4069,4087,4090, -4101,4091,4092,4094,4111,4123,4119,4120,4145,4141, -4155,4143,4170,4162,4169,4166,4171,4196,4184,4181, -4193,4211,4219,4208,4240,4236,4226,4237,4235,4268, -4257,4267,4255,4273,4251,4256,4305,4286,4293,4326, -4316,4308,4360,4370,4369,4396,4395,4399,4398,4411, -12208,9994,21675,19752,10565,10566,18751,17043,1575,7177, -4930,1497,11949,7753,21065,21589,17827,2452,3542,9799, -21513,19773,17910,20990,5218,5529,13812,15211,13833,7190, -8632,1988,10980,21008,7178,10445,15095,6990,19343,16596, -13353,9102,19033,6642,13165,7119,17444,12587,7635,21421, -15934,21735,10508,15219,11881,14098,6811,13673,11957,19797, -12427,7211,16066,16597,2486,6911,8947,10510,1645,14100, -21422,9542,3161,18186,19547,14379,8015,18615,9318,18601, -1234,1748,16197,21202,7707,3803,16689,5712,2891,18619, -17422,2514,8807,3431,21449,17824,4418,4424,4437,4442, -4433,4432,4439,4449,4453,4469,4456,4459,4468,4492, -4481,4483,4499,4475,4485,4510,4514,4521,4522,4516, -4520,4519,4541,4542,4539,4556,4555,4553,4554,4560, -4561,4563,4575,4585,4578,4580,4576,4600,4608,4609, -4619,4624,4620,4622,4626,4650,4661,4647,4652,4646, -4649,4668,4680,4671,4701,4707,4704,4708,4711,4712, -4721,4731,4730,4750,4737,4747,4722,4732,4740,4772, -4768,4777,4780,4785,4784,4800,4806,4812,4843,4820, -4841,4860,4869,4924,4913,4880,4904,4854,4876,4870, -15094,5614,21419,16641,16205,18210,13326,18578,18579,15799, -2349,15735,3816,8326,9877,16914,16809,8957,2897,20531, -8894,8895,2485,3210,9880,20221,3168,13134,13333,4013, -20225,10266,13170,2820,14560,4986,12858,2826,6236,12675, -6016,14467,4654,11209,13505,21263,10050,10216,1767,1117, -15001,6249,8056,3810,18988,14815,8052,13509,12456,9505, -21320,2086,3575,3219,16224,8072,8612,8073,9377,12194, -2593,10802,21199,16252,7658,15162,13222,18161,21374,19867, -6002,2081,12295,18859,3932,14186,17088,21204,11505,5473, -13155,11275,1226,2061,12156,10060,4894,4901,4919,4912, -4853,4952,4951,4964,4959,4960,4956,4963,4968,4953, -4971,4994,5000,5034,5013,4989,5004,4980,4987,4978, -5016,4982,5006,4979,4983,4981,5015,4984,5045,5044, -5052,5070,5085,5078,5079,5081,5091,5092,5097,5103, -5104,5099,5123,5128,5120,5124,5150,5153,5156,5166, -5165,5160,5159,5158,5180,5181,5201,5187,5190,5198, -5188,5202,5213,5220,5219,5227,5250,5257,5255,5240, -5253,5251,5247,5254,5273,5279,5275,5281,5272,5283, -5313,5308,5309,5317,5319,5320,5332,5327,5329,5344, -11905,4905,4487,5126,4528,14605,10857,14651,13312,11276, -10656,5775,13442,2602,19111,18620,1422,9084,7665,15245, -13869,6960,6007,21081,9161,3454,2069,4838,16000,9495, -9286,8258,5628,7425,5935,15941,17098,20969,2522,15163, -21278,21761,15857,2070,5235,5112,8905,20024,11962,17475, -12547,9163,21648,12021,1499,5314,15358,5600,19556,7357, -20552,6398,20755,14154,21128,10431,9963,8529,4931,20324, -5486,12886,8530,2927,2073,21676,1875,17942,1555,15248, -17248,12492,17686,6371,14539,19939,2941,10524,16696,3945, -14915,7077,7800,17687,10967,4535,5348,5352,5354,5364, -5369,5368,5376,5379,5371,5378,5366,5374,5365,5394, -5395,5396,5404,5403,5415,5412,5414,5429,5428,5442, -5439,5441,5446,5481,5474,5462,5485,5461,5465,5464, -5463,5524,5495,5513,5504,5500,5501,5543,5545,5541, -5553,5564,5563,5582,5585,5589,5594,5596,5597,5603, -5612,5605,5607,5608,5606,5629,5625,5663,5642,5657, -5639,5667,5688,5695,5717,5702,5699,5711,5698,5701, -5706,5742,5753,5746,5751,5773,5769,5779,5772,5765, -5799,5800,5812,5828,5821,5841,5856,5868,5872,5879, -2875,4754,21288,6262,13163,13350,11202,12984,5488,14588, -20032,6124,15501,19974,2713,13971,20758,11789,12986,17478, -5388,12086,4067,21460,2789,14159,21289,13016,10227,7367, -1927,6805,1515,3634,3086,18237,14110,3166,12318,12404, -19798,16045,20258,14160,5787,18832,6434,2241,8813,12497, -20219,6995,10307,2075,11731,15268,3167,3793,15269,9383, -9810,17445,1862,11141,14161,3497,9885,3392,4975,7444, -11287,9022,3357,7639,15249,9333,17453,10460,14689,20135, -12781,12023,12736,12321,5133,8333,10461,10455,18288,3461, -14012,21296,5424,12896,9758,14690,5883,5882,5884,5893, -5890,5892,5891,5906,5910,5916,5933,5915,5929,5931, -5917,5944,5942,5983,5982,5956,5953,5981,5955,5963, -5951,5948,5993,5999,6003,6029,6028,6023,6018,6035, -6034,6044,6036,6043,6067,6070,6096,6102,6093,6074, -6079,6076,6075,6100,6114,6089,6081,6098,6151,6150, -6152,6139,6166,6165,6170,6173,6174,6176,6178,6177, -6190,6192,6184,6204,6205,6207,6239,6247,6235,6224, -6220,6222,6286,6284,6288,6300,6305,6310,6303,6321, -6318,6323,6366,6352,6363,6351,6373,6349,6372,6360, -9218,9024,19647,19977,6031,20667,15367,15704,11801,2745, -18839,12746,15615,21338,21157,4472,14789,21156,12944,21473, -15617,10469,10353,7389,16187,19328,19812,9187,10246,13171, -9764,9227,12904,19984,21054,13495,9765,1566,4108,21702, -9543,14550,10632,19331,19986,21475,19821,4482,14371,20570, -14380,11917,6088,11647,3227,20507,12863,20374,1418,1163, -16789,14125,8625,13837,1419,15197,19145,20574,11094,15377, -6420,5107,8294,11378,21145,2563,15115,6250,15913,2062, -9960,21348,1118,9312,4384,13443,6107,17294,4920,9561, -19968,10432,8232,12716,1132,20479,6348,6391,6393,6410, -6401,6412,6404,6444,6455,6454,6461,6460,6476,6474, -6473,6477,6501,6499,6498,6500,6511,6516,6531,6537, -6530,6566,6576,6580,6575,6590,6593,6582,6578,6574, -6570,6607,6611,6617,6641,6639,6644,6612,6614,6623, -6629,6660,6664,6657,6663,6678,6684,6696,6713,6682, -6731,6718,6774,6735,6785,6741,6763,6760,6758,6761, -6744,6756,6743,6745,6752,6749,6830,6828,6831,6846, -6843,6856,6867,6871,6875,6874,6888,6882,6894,6906, -6883,6892,6929,6935,6952,6936,6965,6978,6949,6971, -5865,6450,14029,15498,1577,11182,21633,7505,9509,17606, -4847,11952,1336,5531,17783,7259,21352,15505,14032,4717, -7598,11340,14033,14034,11956,2670,9826,8882,1880,6558, -14787,7212,17314,16048,11806,9689,21783,3638,11807,15809, -9267,14923,8111,5372,20764,8113,19524,7143,2143,21139, -18085,19938,6237,19549,5249,16253,13755,16564,13384,11502, -21487,15959,11862,4804,7147,14736,2952,12261,20708,14126, -6241,20892,7045,4656,20016,13758,3402,7884,4570,3193, -8138,20094,1064,4831,20948,12639,2710,6245,20095,17027, -4906,17582,14388,1788,21266,13507,6938,6932,6944,6987, -6928,6941,6947,6953,6961,7026,7033,7057,7069,7092, -7061,7024,7041,7047,7030,7032,7063,7031,7108,7101, -7109,7102,7168,7131,7187,7136,7126,7159,7135,7155, -7142,7153,7152,7124,7125,7140,7130,7134,7129,7148, -7127,7257,7236,7228,7232,7241,7227,7268,7278,7292, -7287,7293,7307,7312,7304,7306,7305,7308,7320,7330, -7319,7317,7334,7321,7349,7329,7325,7326,7316,7341, -7401,7410,7400,7432,7418,7397,7404,7426,7399,7407, -7406,7467,7498,7494,7491,7468,7458,7495,7504,7459, -10061,21267,14318,5144,18503,4907,16147,20682,3340,2831, -14524,21042,17196,21688,8079,1179,13475,11379,14809,21720, -8933,7984,13763,6008,17588,7792,21174,2725,5592,1119, -8431,8934,6362,3051,6542,5337,15540,17532,8840,7666, -13560,5071,10657,17991,1366,17290,4915,5318,15914,13798, -15804,19112,9419,17589,8377,5063,3843,15940,14934,7591, -17353,6765,8432,7427,8381,2570,16607,20713,10498,2523, -13403,14750,1198,15942,17427,6544,13180,5355,17781,15647, -17792,17538,6255,17038,4921,15841,15186,4130,9072,4839, -7991,6424,20819,18270,8095,4776,7470,7475,7464,7463, -7478,7486,7473,7462,7548,7539,7540,7542,7538,7561, -7569,7567,7566,7565,7581,7593,7585,7631,7616,7634, -7617,7615,7606,7607,7611,7614,7609,8468,7663,7662, -7660,7650,7661,7652,7648,7654,7687,7653,7667,7711, -7719,7708,7709,7701,7712,7747,7736,7735,7739,7751, -7733,7805,7767,7763,8220,7772,7788,7799,7808,7777, -7778,7832,7829,7842,7867,7843,7848,7854,7837,7850, -7853,7845,7869,7889,7871,7874,7870,7876,7894,7898, -7904,7895,7903,7923,7942,7930,7941,7922,7932,7931, -7167,17898,13734,21590,2398,4220,9652,10521,9822,2734, -13594,14319,12717,21406,12719,16283,12980,17299,14717,16407, -15572,16284,5175,16330,1371,21384,1955,5866,3206,10592, -10180,12779,20457,1500,2988,10080,11150,12647,13160,15733, -21591,5804,21649,16894,21514,17730,9835,7909,4590,13931, -11258,19765,21620,4491,10522,17906,19242,14284,12720,17911, -17335,7360,8735,17302,13924,11151,6979,4102,2699,3709, -11259,10841,19892,17599,1253,14955,13351,1556,6568,5340, -3082,11178,16512,5021,16470,15956,5421,11203,17544,9800, -21593,1601,5807,19122,15651,5574,7919,7920,7975,7992, -7972,7989,7986,7996,7969,7980,7993,7990,7971,8005, -8030,8017,8016,8064,8060,8054,8068,8034,8043,8059, -8051,8044,8032,8088,8093,8119,8110,8107,8135,8137, -8128,8134,8126,8139,8152,8153,8143,8144,8157,8145, -8154,8147,8213,8176,8178,8184,8175,8180,8224,8216, -8250,8254,8253,8252,8315,8278,8301,8273,8282,8303, -8320,8311,8290,8272,8300,8287,8293,8341,8345,8340, -8366,8374,8354,8370,8389,8478,8401,8418,8413,8458, -8412,8396,8399,8410,8489,8499,8494,8487,8488,8519, -20998,20073,2479,2194,3351,17103,19893,21621,17834,14484, -16366,5341,14114,19310,7954,19034,21386,11709,1194,5530, -12046,21153,7368,3004,13574,14868,20076,17105,3182,7191, -13817,15551,5027,20033,20693,5221,13907,6376,20131,15608, -17306,15147,20694,21635,15552,6668,1960,1516,4779,3144, -9516,15270,18339,17000,21637,9395,21332,12989,10785,20858, -10509,11400,12392,9745,18000,21623,6996,14200,15220,10526, -1372,18758,14058,11323,13047,6848,17166,7198,14144,17799, -13663,18001,15224,13080,20301,21765,20826,14241,14035,9981, -19799,4501,9886,2337,21741,7527,8515,8528,8522,8516, -8524,8545,8544,8546,10204,8552,8554,8571,8559,8567, -8589,8593,8591,8598,8600,8614,8626,8629,8633,8637, -8644,8639,8647,8655,8656,8659,8664,8668,8669,8670, -8680,8695,8692,8673,8702,8703,8708,8714,8715,8716, -8720,8725,8741,8745,8743,8744,8757,8755,8773,8786, -8785,8787,8790,8797,8800,8805,8819,8820,8826,8830, -8843,8832,8841,8846,8853,8855,8857,8856,8864,8872, -8866,8865,8884,8892,8896,8904,8909,8929,8926,8932, -8923,8922,8950,8954,8952,8955,8971,8963,8977,8992, -13709,2243,13936,17800,6812,6495,21698,16928,13049,20034, -3300,14487,6815,7213,14099,7445,7562,6559,13081,3089, -7868,7694,1531,2204,19057,11885,15225,19058,14141,13884, -7218,1708,12959,9219,12590,18072,12747,12225,18637,11409, -9457,17555,21701,8948,19449,17915,9401,17176,2212,7697, -10354,2213,19276,1945,13689,17180,21712,21703,10667,17007, -9255,9412,9809,6227,13749,21244,20700,3829,17026,19231, -15568,20065,17291,3173,17568,4808,4809,12626,1789,12483, -17382,20548,5176,19250,5654,21742,15425,2017,12825,16628, -19268,9402,15432,10355,14973,5154,9008,9004,9005,9028, -9029,9062,9075,9080,9078,9089,9088,9103,9104,9115, -9124,9120,9127,9106,9148,9141,9173,9196,9192,9191, -9190,9204,9195,9188,9200,9198,9237,9235,9244,9238, -9256,9257,9279,9281,9274,9277,9270,9296,9308,9311, -9314,9316,9340,9341,9343,9360,9357,9356,9379,9369, -9388,9396,9425,9422,9446,9426,9417,9451,9440,9443, -9441,9463,9464,9469,9476,9478,9486,9514,9515,9479, -9480,9493,9558,9549,9550,9566,9547,9482,9605,9581, -9611,9583,9578,9585,9618,9577,9584,9630,9590,9598, -13649,14373,5471,21226,8188,10999,11247,5591,15642,8378, -4916,14394,5593,21450,19753,962,4444,14945,10708,10182, -1101,4446,2350,16518,1507,7199,2690,10185,8387,11142, -20561,10621,12322,7014,7020,10548,11086,3283,18469,19502, -19500,4676,1065,18521,5506,12997,20172,5189,18958,21268, -18808,13799,13645,13044,6545,17295,18990,18509,13014,12933, -19625,5342,19899,4502,14203,4694,14204,9780,11891,13053, -5405,2682,4657,6242,2647,3194,4908,17089,12172,9107, -12264,10189,20949,13476,16951,17533,16878,8706,6767,6695, -17423,14153,6256,7547,3543,14155,9634,9580,9626,9588, -9597,9576,9503,9553,9710,9721,9718,9714,9757,9725, -9716,9717,9715,9766,9768,9793,9786,9785,9783,9819, -9813,9815,9820,9811,9828,9842,9846,9844,9839,9841, -9869,9855,9856,9854,9875,9857,9853,9352,9902,9908, -9881,9859,9906,9914,9933,9926,9915,9929,9959,9952, -9979,9977,9953,9951,9988,9957,9996,10012,10009,10027, -10044,10067,10078,10079,10051,10028,10063,10046,10030,10052, -10035,10112,10116,10115,10119,10128,10140,10130,10138,10126, -10121,10145,10125,10173,10187,10205,10218,10207,10217,10226, -2662,17943,2667,21594,16297,6710,6295,6153,12393,9746, -13485,1012,9982,12173,13135,1014,6816,17952,3550,9339, -5432,5435,5433,3833,13915,4377,4084,15836,12265,2599, -13519,7246,8295,2780,10600,7071,20259,10291,7001,9365, -6915,19450,6509,18906,13195,20018,3371,6243,20837,20838, -20683,2383,20745,19505,16215,15770,4385,18207,15813,14106, -6050,14504,9936,7994,1424,3660,5851,16572,17907,12484, -3072,3908,3909,15864,8264,3083,8956,9739,9740,16624, -9016,9747,9752,3087,14478,15045,15843,9023,11795,20859, -3393,11837,13142,7531,15844,15846,10219,10258,10260,10257, -10280,10273,10300,10306,10310,10308,10323,10321,10335,10322, -10327,10369,10365,10366,10372,10466,10422,10316,10425,10401, -10411,10444,10415,10398,10394,10434,10474,10486,10496,10488, -10491,10505,10497,10499,10515,10519,10513,10516,10419,10517, -10531,10532,10530,10536,10557,10558,10561,10562,10571,10579, -10574,10573,10576,10577,10601,10612,10620,10608,10613,10616, -10617,10618,10640,10658,10650,10653,10651,10671,10675,10684, -10685,10686,10682,10701,10714,10712,10715,10718,10728,10729, -10725,10730,10749,10746,10743,10761,10780,10768,10775,10776, -10247,20545,14996,15128,20554,18888,13372,8740,2045,5245, -3614,6572,2617,13750,13891,19917,2099,5919,4674,12129, -12074,19459,13652,16591,12673,12291,16831,16832,8742,3830, -1446,1080,1817,13469,15722,21544,4607,20803,11696,12180, -21570,4824,17192,11442,13437,8674,2623,18443,12075,2557, -17745,4380,6188,21571,5709,2511,15796,3195,10900,17524, -17525,10731,17526,11815,16604,16594,17764,8053,19506,6181, -9931,14184,15876,10904,2955,14444,7274,15592,8343,7054, -17763,17666,16126,2515,16070,4003,11606,12332,5512,9461, -20509,15201,7750,9833,14872,1621,10770,10795,10803,10799, -10994,10793,10817,10825,10833,10840,10827,10828,10856,10849, -10864,10865,10872,10881,10867,10890,10896,10895,10902,10922, -10926,10916,10894,10899,10907,10945,10936,10938,10954,10959, -10951,10958,10971,10983,10990,11001,11036,11021,11005,11037, -11034,11046,11045,11096,11064,11072,11067,11057,11060,11055, -11085,11116,11112,11111,11132,11117,11121,11149,11145,11147, -11170,11162,11166,11168,11175,11181,11188,11190,11191,11204, -11198,11200,11207,11206,11221,11217,11234,11268,11264,11274, -11273,11272,11292,11311,11293,11300,11291,11318,11321,11325, -10590,12368,5874,13561,2924,3428,11628,11514,13764,14445, -2985,8199,3969,12308,5846,16664,10919,13921,4173,2657, -10615,11988,3696,936,11611,14847,20069,21063,13843,16001, -16461,7672,7255,4099,1482,2292,12954,16218,14714,15495, -15134,21382,19001,9862,7072,12312,17540,10502,11977,2297, -10437,5853,12078,2853,7577,4844,21310,10438,7630,19353, -10480,18031,2077,15932,11710,9878,3209,5729,17440,15598, -4497,20857,7633,6344,3208,18724,17336,15189,4716,21295, -3409,8880,11880,8459,2848,8361,9129,9777,16103,12737, -3213,1720,18067,11618,16669,20188,11331,11346,11332,11333, -11339,11336,11349,11352,11355,11376,11391,11401,11364,11386, -11385,11366,11420,11413,11428,11437,11435,11434,11436,11429, -11467,11475,11468,11464,11474,11450,11452,11472,11458,11479, -11485,11491,11621,11501,11494,11499,11497,11521,11518,11519, -11531,11529,11544,11539,11549,11568,11584,11604,11602,11613, -11615,11625,11627,11493,11635,11636,11642,11665,11648,11646, -11643,11674,11673,11698,11707,11697,11705,18231,11712,11713, -11729,11728,11724,11737,11741,11744,11747,11758,11760,11769, -11799,11771,11786,11787,11768,11817,11823,11822,11830,11819, -17312,1642,17733,9056,9132,18239,10351,6921,20098,10644, -13496,20189,10549,11670,20099,12859,16654,5696,9980,5693, -7647,7162,5193,2761,11152,11790,5278,7488,3845,20816, -17766,15359,17271,2100,13616,19682,17688,8265,8163,17671, -14339,8136,15389,14673,15458,12611,12612,5631,6496,15763, -17100,3507,4484,12000,15378,4486,2866,10331,10066,17090, -13319,12084,8849,4922,20217,4778,9497,19616,9287,15880, -1846,11740,8205,6638,21595,1602,11477,3857,3983,1216, -2110,19035,2015,10292,3355,18032,18632,3577,3462,13039, -10387,18874,7091,7532,6916,12748,11821,11845,11851,11855, -11861,11858,11870,11869,11866,11886,11901,11908,11912,11915, -11928,11924,11923,11936,11954,11958,11942,11961,11968,11971, -11969,11992,11986,11987,11994,12001,11999,12004,12011,12012, -12007,12014,12017,12020,12016,12027,12026,12034,12033,12037, -12045,12061,12062,12055,12059,12071,12081,12083,12094,12098, -12099,12103,12102,12107,12110,12117,12119,12127,12131,12137, -12141,12139,12135,12155,12148,12147,12163,12168,12181,12177, -12183,12215,12199,12209,12200,12207,12217,12218,12192,12210, -12231,12237,12250,12257,12284,12247,12252,12272,12306,12292, -10389,10356,2216,14861,7370,12455,18412,18428,2040,9374, -15833,15771,7605,12191,18896,2097,11144,5094,19700,6408, -21561,6750,15167,20902,16093,16427,12791,16560,13721,4862, -21245,6445,8403,7133,1021,2773,10862,13776,5996,19136, -19498,18907,13139,12331,3672,3616,9596,19429,1304,18852, -21250,11677,1813,1741,17779,18597,17144,6232,20347,3923, -3823,11765,6327,10897,14463,5565,1441,16492,4875,21479, -20882,7144,3063,11749,18017,5271,9604,13789,2155,2410, -19710,6011,21562,9922,16714,4185,5705,3048,5444,5677, -7613,19579,21484,4438,10819,21073,12299,12307,12294,12285, -12327,12333,12350,12341,12355,12363,12360,12358,12381,12389, -12387,12399,12408,12416,12419,12425,12435,12431,12443,12449, -12450,12462,12464,12477,12458,12460,12473,12459,12466,12500, -12502,12505,12511,12533,12539,12526,12535,12540,12558,12566, -12555,12575,12578,12576,12580,12594,12592,12593,12597,12595, -12601,12614,12613,12636,12638,12624,12630,12619,12615,12623, -12646,12621,12618,12667,12701,12668,12670,12692,12686,12680, -12660,12715,12672,12659,12698,12769,12760,12756,12758,12762, -12797,12798,12818,12783,12787,12788,12789,12793,12784,12827, -12856,21200,6536,4825,5058,3284,2878,7976,4378,968, -13088,2594,12471,7879,9345,14805,21343,3285,2056,19580, -4074,16436,9481,3997,4829,13730,19146,1918,20042,15173, -2506,2413,16715,1674,16851,5353,21264,11375,21346,21756, -16122,13385,15256,2414,12196,11000,17725,7978,2370,8495, -18259,3253,5960,3254,7272,16315,19468,11863,14289,17284, -16601,7783,11548,11461,16026,11637,10818,3050,3686,13470, -3933,21644,9108,10409,16499,11773,9037,12577,20115,5211, -5860,10588,2722,2921,20453,10978,9487,1266,13237,8359, -13196,3656,7740,7900,13092,15355,12836,12837,12862,12848, -12860,12867,12842,12851,12878,12843,12873,12919,12937,12917, -12918,12912,12932,12952,12947,12957,12970,12972,12962,12979, -12995,12990,13004,12991,13026,13028,13025,13041,13074,13067, -13065,13056,13090,13107,13086,13087,13115,13132,13130,13126, -13122,13119,13124,13138,13141,13143,13146,13148,13174,13173, -13172,13194,13199,13204,13190,13210,13201,13228,13235,13245, -13247,13246,13248,13249,13255,13278,13271,13273,13268,13282, -13283,13290,13318,13308,13341,13336,13338,13392,13373,13366, -13381,13375,13446,13421,13440,13422,13441,13431,13429,13474, -5334,6458,13177,930,16324,1376,21125,7336,9992,15438, -15726,3538,6394,6103,2934,2290,6538,4632,9157,14149, -18315,18805,14308,7160,5611,2063,20684,16182,8116,1459, -18961,11002,1282,12123,3902,13346,8682,17383,16296,19673, -19674,5009,9792,17934,11560,2068,16638,2969,17424,1551, -11465,933,19297,9085,9086,7545,11176,21759,21780,21665, -13841,16985,18688,934,13477,7342,4917,10520,7343,12170, -6251,6252,6289,18386,15977,21503,13274,11098,6626,14391, -5082,21146,7489,16452,1832,16358,7163,4095,18621,15175, -13562,20639,6838,14528,9194,21585,13504,13506,13511,13522, -13514,13533,13585,13540,13575,13544,13539,13554,13547,13588, -13597,13596,13605,13604,13607,13608,13623,13625,13615,13613, -13644,13646,13658,13662,13665,13668,13680,13686,13687,13685, -13690,13695,13702,13707,13710,13711,13716,13715,13713,13726, -13752,13742,13738,13736,13746,13745,13772,13773,13778,13784, -13790,13807,13791,13818,13810,13806,13792,13788,13829,13839, -13836,13857,13864,13885,13873,13877,13861,13893,13892,13890, -13895,13906,13914,13912,13933,13944,13943,13951,13952,13960, -13962,13978,13979,13988,14002,14005,14000,14009,14014,14017, -18534,19838,10913,19989,14810,21325,5613,13671,18005,9007, -16453,19509,15066,19116,14532,2959,14582,19991,20647,13870, -9643,13606,19888,9644,8261,16887,2776,17846,16002,10135, -6899,3741,12977,21666,12537,3242,19840,2781,19754,12041, -12579,11511,16956,4681,20025,13969,2013,11061,15236,11305, -15067,10136,16957,5477,9280,5086,3259,15488,10639,17938, -18608,5778,21618,5801,21781,15779,2071,12157,9197,14395, -9301,10074,3811,15780,10858,15891,21207,938,9729,3073, -12485,13348,7910,2962,7809,16408,16057,2033,19774,19002, -8233,1484,10376,1924,20480,9391,14025,14027,14041,14043, -14050,14054,14056,14066,14068,14085,14074,14077,14107,14111, -14127,14120,14115,14119,14116,14117,14142,14147,14152,14158, -14162,14180,14218,14170,14164,14168,14194,14175,14205,14206, -14234,14240,14237,14224,14216,14220,14232,14259,14253,14255, -14274,14273,14278,14281,14270,14287,14286,14292,14288,14304, -14303,14309,14310,14315,14313,14314,14321,14323,14332,14329, -14334,14346,14350,14341,14348,14342,14338,14337,14385,14363, -14369,14366,14367,14387,14381,14372,14407,14414,14415,14422, -14438,14435,14447,14442,14458,14455,14476,14465,14454,14483, -13031,10779,18277,10081,7164,1625,5805,5945,3629,10433, -14354,14263,3630,18056,1883,3704,3243,14398,17996,6368, -1007,11100,10284,21045,12513,7573,11131,3074,11754,6781, -8384,19162,14195,19117,5852,2425,6430,14131,8810,12981, -10678,2020,20249,9510,16471,7078,12934,14507,11011,11991, -2237,3742,13934,9423,19626,13101,2787,6466,7361,10722, -20029,1229,19487,10446,13697,4337,15652,4616,8449,4638, -13872,4686,9017,14891,18182,17835,5022,3490,16722,3946, -14956,17441,17048,10224,20074,14298,7362,15239,10086,19783, -17104,15010,11878,17946,20077,19775,14490,14498,14499,14468, -14494,14512,14511,14522,14520,14527,14516,14510,14514,14552, -14556,14568,14559,14555,14572,14571,14562,14561,14595,14596, -14599,14604,14601,14600,14618,14616,14609,14612,14639,14623, -14635,14675,14649,14625,14636,14662,14679,14642,14614,14624, -14660,14630,14610,14615,14634,14632,14628,14629,14698,14699, -14703,14701,14705,14710,14709,14706,14716,14708,14756,14728, -14738,14735,14724,14751,14726,14746,14739,14745,14722,14768, -14767,14770,14782,14774,14783,14776,14779,14775,14777,21229, -14795,14799,14803,14797,14796,14804,14818,14807,14814,14819, -16964,6058,909,6797,6798,7192,3030,17333,16299,11222, -9468,7554,1995,14400,13035,9748,8691,19900,3297,15698, -15469,20407,15240,17163,4498,3892,17607,5532,14781,7514, -6015,13994,18059,18628,1134,4134,12438,16476,11835,2741, -10716,12400,12823,20205,2432,20662,4408,11689,19315,3110, -17446,12733,4447,7437,17912,8982,1579,3818,11138,9207, -7960,13331,13166,17249,17222,15151,10482,19052,17914,17561, -19053,9116,9429,7726,3636,20898,1292,18633,11403,6601, -1639,15087,15426,16058,13334,13109,16528,10160,6806,11980, -5224,20082,1256,9681,14785,21189,14806,14831,14833,14836, -14835,14837,14838,14845,14843,14851,14848,14864,14871,14875, -14885,14883,14886,14895,14888,14889,14897,14906,14903,14902, -14933,14952,14949,14928,14924,14922,14921,14968,15004,14974, -15003,14971,14976,14977,14986,14969,15017,15039,15036,15051, -15050,15048,15047,15049,15063,15072,15084,14911,15090,15092, -15101,15110,15111,15118,15131,15123,15126,15112,15104,15106, -15159,15164,15165,15168,15183,15184,15182,15192,15207,15194, -15218,15202,15208,15196,15229,15242,15243,15264,15260,15254, -15266,15276,15275,15279,15273,15299,15292,15293,7828,15306, -887,10021,17953,13243,9184,16186,16814,13937,13938,12741, -10347,15097,16067,10816,20085,12498,19692,18069,7214,8082, -17954,13359,15098,8104,4796,1882,13678,19066,17261,19804, -8245,9781,9782,19199,13040,19269,10233,15964,6453,19979, -10101,18587,10931,5991,8962,9220,7219,3498,10789,9458, -9403,6497,4764,20827,16533,8987,6510,9535,7221,9435, -6515,10628,7015,8988,10471,7393,14013,15618,9409,13595, -17464,19080,10552,10982,1669,14930,17409,2832,6335,17814, -3236,4911,17821,10373,6396,6051,7623,8309,1275,18279, -20462,20463,8958,1703,17054,14830,15308,15313,15333,15328, -15345,15352,15351,15347,15376,15379,15368,15373,15372,15384, -15391,15385,15395,15392,15400,15423,15410,15416,15412,15403, -15435,15439,15436,15457,15451,15448,15449,15462,15484,15486, -15479,15482,15499,15478,15502,15516,15521,15518,15532,15530, -15539,15537,15546,15538,15569,15563,15562,15567,15564,15584, -15585,15590,15613,15603,15600,15604,15624,15623,15626,15625, -15638,15654,15656,15634,15670,15691,15699,15686,15682,15678, -15677,15707,15710,15729,15715,15725,15718,15754,15750,15768, -15772,15775,15801,15807,15811,15816,15827,15830,15834,15838, -3778,13376,2463,14515,8411,20571,14331,19550,5921,21548, -17360,4547,4307,1066,2626,12865,16565,19957,19958,8496, -12681,15908,12682,19868,8416,6728,13197,12683,21076,11462, -16316,4677,4678,6004,4995,13655,12112,11657,3341,12478, -2600,8296,9628,5003,20338,5436,12302,1873,17198,3783, -1675,1749,20396,15817,5514,19293,5280,3052,6732,10813, -5010,9932,18747,17203,9635,18976,12486,7793,14333,18809, -16328,11381,13157,5759,13321,9350,17684,7861,13404,7279, -16078,2372,1328,5971,17965,20714,4970,17246,9288,1485, -19841,19511,7801,3429,3762,6733,15832,15849,15853,15850, -15851,15871,15878,15888,15904,15917,15933,15895,15911,15897, -15912,15938,15937,15939,15936,15944,15947,15954,15953,15965, -15966,15968,15970,15983,15987,15992,15990,15993,16017,16019, -16025,16030,16034,16056,16059,16071,16079,16080,16075,16082, -16091,16102,16117,16109,16127,16146,16134,16132,16141,16172, -16168,16179,16181,16193,16190,16201,16194,16191,16208,16214, -16222,16226,16238,16229,16234,16251,16255,16242,16256,16247, -16282,16264,16265,16280,16270,16261,16269,16289,16295,16308, -16312,16309,16321,16317,16319,16339,16341,16337,16336,16344, -15031,8206,12721,19766,8531,14946,10593,9653,3855,15573, -9048,5937,5976,1213,4604,16466,4144,19845,15291,12955, -13945,11661,16467,9836,3935,4334,1166,3705,16331,1979, -11099,2187,9125,7067,15865,10883,17836,11153,7755,14586, -17944,18335,13845,16367,5023,19894,10968,16513,13925,17546, -17071,19245,14540,2700,15468,21180,21596,15653,19895,11012, -9128,4032,13352,16963,16644,19994,13510,19307,7550,1150, -14959,3054,16917,16613,9749,1151,13819,7086,16697,17798, -5984,18827,1395,6467,18871,4079,11536,6126,6377,6736, -10693,19037,16577,19311,15609,21047,16374,16360,16343,16379, -16384,16391,16381,16393,16395,16378,16406,16396,16428,16444, -16429,16423,16424,16425,16426,16489,16507,16491,16493,16494, -16501,16527,16490,16503,16500,16497,16508,16488,16548,16541, -16566,16557,16563,16559,16586,16595,16592,16598,16611,16610, -16625,16630,16642,16632,16640,16646,16665,16653,16659,16651, -16681,16679,16685,16672,16677,16684,16682,16701,16707,16711, -16705,16704,16702,16741,16729,16746,16731,16757,16733,16743, -16734,16772,16803,16791,16781,16770,16771,16787,16784,16827, -16893,16828,16821,16863,16829,16869,16899,16823,16888,16849, -2016,15014,12728,15788,14266,3713,10452,16524,21009,2430, -13482,12319,19639,7522,10293,13231,19198,7557,16580,17447, -10786,20593,20616,10681,5837,10155,3088,9519,10765,17448, -2301,11404,21711,14961,13356,15597,20860,12222,7692,13486, -1678,9887,5764,17002,7120,21314,4605,9334,8461,8462, -19172,2201,7640,11595,17454,11427,2701,18108,14962,2795, -2487,3463,9570,14243,18875,8029,3301,12826,3033,17369, -14355,13219,19325,2160,9673,20280,17955,21209,20264,17510, -10823,17619,12749,13828,7451,6032,21471,7826,1709,6073, -4508,9434,7825,9138,11289,9690,16875,16844,16824,16853, -16904,16817,16854,16891,16859,16884,16820,16873,16966,16952, -16950,16948,16954,16983,16982,16979,17013,17034,17011,17018, -17070,17063,17073,17110,17101,17096,17077,17074,17080,17117, -17123,17121,17118,17149,17153,17135,17132,17158,17137,17188, -17187,17199,17197,17184,17191,17186,17206,17232,17233,17269, -17293,17266,17296,17288,17292,17274,17285,17272,17270,17320, -17323,17343,17321,17334,17337,17328,17318,17354,17352,17349, -17364,17359,17357,17379,17378,17389,17385,17376,17381,17417, -17420,17438,17399,17487,17451,17425,17407,17404,17468,17472, -13417,11808,10357,4082,17461,21194,10248,9537,10249,12092, -18646,12326,11569,5540,19277,14790,16944,1981,13498,13584, -1982,10757,7827,21219,21423,6608,11919,12132,21082,10733, -4420,8555,11230,17060,8615,19923,13471,10069,17989,14811, -15915,10270,17207,6374,16514,3546,2689,16519,3548,21401, -5121,19572,18781,4826,4655,7774,21038,3400,18935,21074, -7852,20805,17527,13653,20806,8492,2158,6687,13654,16145, -10111,1267,18618,21778,1452,14317,8297,6140,18019,20681, -18801,12013,1783,3598,4996,5798,20934,20950,13656,18947, -16123,11503,5416,17985,20575,13438,17471,17481,17489,17482, -17492,17491,17488,17507,17506,17508,17509,17547,17512,17522, -17536,17514,17529,17516,17530,17558,17579,17569,17618,17603, -17564,17565,17590,17575,17650,17631,17642,17635,17632,17643, -17630,17627,17664,17667,17676,17683,17680,17679,17674,17696, -17704,17699,17698,17697,17717,17721,17719,17722,17720,17735, -17734,17746,17737,17741,17749,17750,17755,17757,17762,17780, -17895,17790,17784,17788,17787,17831,17804,17828,17815,17826, -17811,17845,17847,17899,17887,17870,17863,17865,17879,17871, -17893,17890,17885,17886,17919,17927,17922,17962,17963,17959, -19727,11058,1784,1792,2631,2627,8838,13762,7590,7479, -11380,7789,4382,13866,21172,5713,19103,8550,17710,14105, -9038,11753,14813,7252,9069,9562,8344,14392,5282,20685, -10131,7169,18993,1899,21350,14884,13647,9559,17794,2168, -9042,15571,19930,10075,2632,2271,2730,9834,12142,4589, -5802,18331,4030,20981,12777,12710,5863,8753,12640,15694, -14674,4932,2698,17595,3856,9049,4088,17795,17796,19931, -5019,19623,16055,18333,6706,12115,3383,20048,15303,5422, -6502,13814,19932,11535,8102,2129,1152,14046,11756,19251, -7865,6505,8844,9741,9511,14542,17973,17977,17984,17983, -18006,18007,18014,18010,18029,18036,18049,18054,18093,18077, -18080,18075,18078,18076,18123,18116,18113,18114,18122,18117, -18138,18141,18142,18144,18139,18137,18157,18154,18162,18165, -18170,18166,18180,18176,18185,18188,18221,18212,18223,18215, -18220,18261,18245,18258,18271,18250,18243,18248,18278,18266, -18253,18252,18305,18313,18314,18310,18332,18371,18380,18401, -18360,18367,18387,18368,18366,18382,18369,18377,18373,18442, -18437,18446,18445,18457,18452,18459,18462,18453,18468,18455, -18501,18494,18502,18499,18520,18524,18538,18536,18529,18570, -10506,19038,3822,17611,17167,16525,1658,2035,7193,14109, -1232,1508,4944,7438,21333,7439,3211,7088,3391,20105, -4500,1857,17390,18107,1677,13699,10764,9208,1027,20261, -5789,2047,15221,11882,2172,9779,3460,14786,15447,1533, -9212,4947,20899,15340,14788,16219,14691,1122,17552,1870, -2459,9186,10244,16974,17178,9224,20600,3361,8271,20168, -14549,7456,19077,9231,18187,16822,4781,5011,4798,1103, -6132,7017,7022,7460,5609,1594,18372,5714,8423,12377, -10870,11119,11120,11218,14652,15002,2167,20686,8433,11125, -15805,9733,18624,20982,8505,16960,18562,18540,18565,18550, -18555,18544,18598,18603,18616,18617,18636,18642,18644,18648, -18647,18662,18660,18657,18669,18682,18666,18667,18668,18687, -18671,18683,18726,18744,18733,18745,18743,18736,18731,18732, -18818,18770,18812,18804,18767,18800,18820,18774,18777,18785, -18835,18864,18855,18857,18844,18843,18850,18845,18885,18903, -18917,18909,18893,18881,18902,19048,18966,18991,18933,18891, -18992,18984,19009,18884,18880,18946,18985,18923,18889,18948, -18908,18894,19047,18960,18922,19093,19094,19086,19098,19095, -19088,19091,19134,19155,19153,19150,19181,19178,19179,19183, -14214,16368,17049,15756,19635,9245,4344,4065,13183,12095, -7200,11312,19316,5459,13526,20464,7963,5618,3578,7529, -10622,13527,7380,16418,8470,13529,10625,9250,14433,3639, -5623,18362,15751,13378,7881,3124,20951,2363,7048,3430, -3657,6484,13566,5287,14667,5760,7833,6860,13407,17685, -11662,6980,10439,20326,1518,17692,14267,5390,21014,18026, -2850,16932,18840,10470,8475,16942,18422,16946,18249,3899, -4992,13379,13380,7705,7145,4524,18124,3804,6274,2102, -15586,17812,7784,3418,13759,18125,19147,14221,12802,16124, -7150,18126,19163,4262,4659,18203,19203,19221,19247,19227, -19261,19219,19243,19289,19290,19291,19288,19305,19284,19318, -19286,19340,19338,19351,19349,19357,19361,19360,19382,19362, -19364,19368,19423,19421,19399,19401,19409,19397,19410,19403, -19428,19438,19432,19439,19433,19452,19453,19456,19472,19455, -19458,19477,19499,19495,19494,19518,19520,19539,19532,19517, -19519,19545,19552,19557,19570,19612,19617,19610,19622,19562, -19574,19608,19573,19600,19554,19588,19592,19559,19583,19658, -19653,19656,19662,19655,19663,19657,19694,19720,19699,19705, -19696,19745,19733,19712,19737,19749,19724,19708,19704,19756, -18532,15052,14424,19154,17640,8425,17469,11624,2418,19475, -20893,17747,4572,17668,2333,14345,18264,13980,21407,17855, -18962,18963,15119,2565,6071,14393,6108,17894,20687,21273, -20781,5448,21556,20399,5519,5012,7420,3846,10071,3658, -18522,11590,12064,21147,5145,18977,8302,18622,20367,16149, -18810,13508,20549,12487,1471,17752,13445,1083,3292,21689, -15541,21232,3015,20584,19416,17858,18095,18994,6666,6112, -14668,2126,17496,14534,6175,2144,5452,5761,13567,6776, -7802,6485,5065,17355,16365,14396,2731,3971,11062,11320, -4332,6703,18275,17748,5595,4422,19714,19735,19744,19717, -19776,19695,19830,19834,19826,19854,19861,19869,19864,19873, -19891,19858,19857,19866,19886,19884,19876,19912,19919,19929, -19920,19921,19935,19937,19966,19964,19954,19950,19965,19943, -19956,19961,20017,19999,20014,20001,20041,20035,20055,20075, -20061,20059,20071,20054,20088,20101,20100,20113,20112,20110, -20120,20121,20124,20125,20137,20144,20149,20152,20173,20184, -20186,20191,20192,20195,20206,20198,20197,20203,20200,20224, -20218,20212,20209,20207,20220,20234,20231,20228,20233,20277, -20283,20292,20293,20289,20307,20332,20317,20319,20333,20335, -1772,15798,18815,9421,21176,8906,8850,16693,7179,20983, -13770,3136,9303,4270,8914,16896,15881,3432,1331,2188, -19541,8764,13127,13181,14834,939,19683,17499,2529,7864, -17300,16695,16806,5238,15054,1890,6782,8062,14899,20716, -14900,4031,6451,2326,14873,7813,8736,13451,3106,17470, -15212,16332,17215,4617,2573,15327,19014,11487,19164,3814, -12335,21456,2238,2400,21400,7185,12650,15417,21387,16472, -8207,13287,3947,20783,20252,21650,12887,21457,9849,7506, -2843,17126,10604,14426,1657,6492,12372,19628,3860,17838, -12380,14682,17947,14683,6861,6493,20339,20337,20348,20362, -20370,20311,20356,20363,20358,20379,20376,20382,20384,20386, -20389,20412,20392,20401,20395,20391,20427,20424,20436,20428, -20426,20466,20448,20445,20447,20450,20455,20452,20483,20471, -20475,20477,20468,20494,20492,20504,20500,20503,20506,20501, -20505,20517,20511,20523,20524,20534,20535,20543,20550,20551, -20538,20553,20537,20564,20566,20572,20583,20592,20602,20603, -20613,20607,20609,20622,20642,20629,20645,20630,20661,20618, -20619,20620,20672,20679,20670,20720,20705,20719,20699,20752, -20733,20744,20729,20735,20726,20730,20771,20765,20772,20778, -4345,21083,3711,17548,4939,12605,15866,7515,12780,19784, -21521,21313,16998,6799,19124,943,17217,11555,2431,4783, -21183,18484,18402,6643,17948,5296,11950,12652,11422,18708, -16520,17689,15611,21114,14239,12516,9020,6669,6908,5264, -19317,11063,17479,11139,17001,13038,2402,18046,15658,15152, -1217,2613,12890,14688,7578,19902,17612,17449,15554,18582, -18583,20824,19643,1640,3116,9520,11341,11342,14268,20595, -11324,7446,20262,21692,9755,10294,1998,11981,5817,16967, -21466,1013,1044,7915,20596,18837,6345,7603,10787,2353, -5988,6469,2245,17839,20302,14103,20777,20779,20776,20774, -20790,20794,20787,20791,20821,20795,20797,20811,20789,20786, -20796,20842,20833,20843,20844,20830,20836,20831,20872,20885, -20866,20894,20867,20870,20878,20903,20928,20940,20901,20933, -20970,20911,20917,20907,20958,20932,20968,20914,20913,20944, -20959,20912,20947,21025,21037,21032,21039,21041,21035,21056, -21055,21075,21067,21068,21085,21088,21084,21090,21086,21104, -21119,21122,21123,21133,21143,21134,21138,21154,21168,21166, -21175,21159,21170,21169,21162,21203,21195,21201,21231,21224, -21236,21233,21222,21269,21255,21243,21270,21251,21277,21272, -16933,20329,4138,20785,11597,9213,4278,19356,8464,7003, -21751,7695,1881,6817,21335,11347,20285,20345,14592,13110, -15428,20286,12608,14488,17956,20222,15431,3468,15227,17175, -7006,7730,9760,11892,18763,888,20415,6740,6819,19067, -19068,14244,13692,11900,12960,4140,15338,6438,21117,6033, -920,19273,7386,19805,7455,6826,4047,20599,17958,20165, -9436,14434,16535,2250,9702,18841,1611,20601,18423,4355, -2748,16537,2749,18639,2217,13693,19202,9229,2460,17556, -11810,6528,20169,19082,3473,20422,18433,4056,16108,13741, -17739,17751,1434,21092,14421,17816,21242,21249,21259,21253, -21293,21298,21299,21301,21304,21317,21329,21328,21330,21345, -21340,21349,21339,21362,21354,21356,21367,21368,21365,21385, -21373,21376,21399,21402,21413,21410,21409,21414,21446,21430, -21437,21438,21442,21427,21432,21480,21481,21489,21483,21501, -21491,21478,21553,21476,21536,21554,21537,21560,21567,21559, -21603,21582,21598,21574,21576,21610,21626,21638,21658,21660, -21661,21663,21668,21669,21673,21687,21681,21682,21683,21704, -21700,21714,21729,21723,21725,21737,21739,21754,21763,21764, -21773,21779,21766,21767,21777,23849,23850,23851,23852,23853, -12866,6246,17064,7055,6257,5909,6213,16924,16925,9888, -5946,4048,10251,12768,9563,3570,1394,14823,17309,4758, -21018,21024,18434,18435,2824,6691,16095,18964,18965,7337, -1068,6313,4323,2777,7355,8746,5066,8310,4842,16897, -1695,21184,7260,4692,16926,1858,16549,6554,3637,21600, -4696,19059,971,12303,11506,12266,5437,11508,19538,11382, -15005,6546,8747,6113,975,9506,11663,1425,19689,7261, -16033,10826,16927,19049,8332,2769,15429,6527,8484,1299, -20624,19863,4993,1942,5406,15591,18949,6006,16258,12432, -6893,4529,15390,5645,20242,20952,2817,6927,16768,5073, -11736,13984,12244,5322,2492,5276,11580,4342,5794,19576, -12420,1404,16107,18527,18539,20788,3641,17661,19206,8968, -19762,5197,15583,21221,7034,11534,11212,6933,12658,11087, -1806,14078,5526,20268,14336,3250,18312,8430,14942,18704, -18403,4538,12518,5745,8999,1571,20253,5586,19497,3501, -18883,16585,8008,8816,5766,8560,9118,6945,14219,16230, -8859,12385,8436,13064,6865,19019,8074,16322,13714,3874, -20491,9367,13976,18886,11451,13739,19654,12329,18155,16209, -16732,2260,2002,8640,21240,11843,8547,19434,18898,5413, -4419,21274,14659,1472,21509,4421,5776,12379,1572,10720, -3345,14502,8935,4634,15814,18811,2603,10873,6145,1346, -10424,10014,6777,5067,12371,21510,7298,17900,20278,7673, -5068,20174,7493,19246,18132,20717,14326,1696,1697,13408, -14327,2886,20176,21108,9174,20151,3055,2401,14275,15757, -12143,5343,17216,10735,7507,15213,5025,15461,3107,3108, -20993,6981,20515,4066,7955,11260,2972,20078,1255,20119, -9176,4795,2024,6998,14509,913,21334,5030,5460,14011, -20263,9889,19054,1135,2443,16301,21011,21392,1643,19998, -20308,3448,20159,18413,12589,14245,15896,16133,11672,5039, -7035,4415,19521,8851,8599,21161,18910,15765,2149,7649, -11867,11414,2717,18306,9599,13377,9551,19660,12452,19402, -14988,4787,12968,13961,12015,21412,14732,10637,16631,1416, -15680,5610,8774,8291,4710,18311,17528,7151,16346,21611, -10274,15519,1688,11938,2655,16889,8018,7496,7621,8158, -15919,17940,3386,15894,16104,14330,12852,21684,19976,3150, -3615,16818,18128,6267,5855,2242,8986,1219,12574,6206, -4899,4855,15103,14979,15952,18304,1819,5795,10869,17583, -10535,12546,1751,19308,10643,9399,1725,6406,9916,17230, -16303,19330,7964,5409,17225,20177,1540,4049,14772,18420, -18421,18003,10272,5151,20179,19855,1473,21105,4791,19995, -16865,15916,17039,2473,2482,17106,15507,21657,9606,14222, -13314,13224,17240,21495,8426,13225,2601,3002,2450,3847, -3604,17033,20400,8434,7068,2605,2783,5572,18045,15806, -4217,5130,15267,3137,16961,20555,15137,19192,8235,7508, -13630,2989,3187,10440,3491,13354,21522,15655,13456,2671, -6649,13111,13082,7727,20223,15706,4410,20148,16687,8677, -8427,2436,4549,19963,1099,12694,16183,18978,7490,10072, -10961,8825,3041,12830,21275,8201,15023,11106,21057,11297, -18241,7764,6273,14215,11967,8274,11620,5499,6066,3643, -20539,13427,18775,8898,9416,5588,7775,6680,14374,5440, -13542,20775,6851,17850,13120,5229,8911,16836,21640,21436, -16437,19585,14420,2226,15198,2419,7480,18044,18684,4314, -19728,17926,931,3687,21494,12378,11328,3466,15120,14658, -11122,20585,7428,20284,13097,8439,18397,20403,2457,7759, -7896,4977,16773,12844,8007,1155,3748,21768,1283,17700, -5054,20925,11767,21642,2919,12298,16349,6615,16445,16965, -5914,13307,8919,10791,16678,4540,1736,12249,1300,18670, -15815,12038,8306,11659,18816,7170,4238,4239,21177,13568, -21300,17356,2658,1383,20971,7280,1954,3294,8234,14753, -16008,2839,8063,11780,17432,1925,3222,11449,14754,7677, -13066,11051,7509,12727,16645,16473,7814,7080,11784,8208, -11785,10594,10441,9467,16286,13573,21677,13164,12651,3140, -21597,12238,20757,19636,4180,2973,19426,3712,20353,2442, -16156,15504,4940,21678,11951,2132,16073,13018,20441,3724, -15659,7089,10195,20156,1524,2692,10456,9890,15471,3358, -15153,17003,8997,7204,20861,13020,20862,12050,21601,9754, -20193,11733,16068,8242,17171,21052,3644,15349,7267,20915, -21163,8867,17019,6532,20057,9608,19333,5230,16837,4889, -12297,15404,18316,8375,18228,19160,20473,12514,14229,21651, -10098,4761,2771,6571,10724,13465,14311,6077,5306,11033, -17880,17541,15080,17610,8469,19177,12946,3475,2320,14919, -1581,1352,13396,1354,4301,4435,14769,6984,19377,6154, -16380,16673,5241,20698,8920,12330,18769,9587,12661,1156, -5100,10259,3749,10324,2379,3647,16136,11644,11456,988, -18194,3825,3951,8561,14177,14271,11601,5055,19138,2508, -14573,5820,18050,9924,19922,20840,957,18953,12300,11739, -1801,3148,8466,10022,15304,13083,13084,9852,4156,5634, -3303,1537,1538,8334,13137,4160,2746,7010,16767,19983, -11734,20864,9699,21021,2801,4107,16536,10252,10024,17179, -16538,9230,13682,17623,11811,15339,13500,7098,3155,21696, -17008,8990,8485,10025,3375,4660,15672,4218,5385,9291, -13735,10641,883,6982,8236,8781,8782,18338,10948,8634, -13458,10295,9366,4222,20863,18414,15674,3551,19279,19817, -2366,20336,5752,8493,19959,17665,3337,17924,4525,13760, -14185,8912,14742,16097,2420,3343,4315,11507,12695,10836, -13917,8913,12923,21319,6208,6336,12197,16027,14069,3338, -8822,3838,19108,9462,6312,5285,19881,10772,19369,9821, -2608,17651,12325,19076,2039,7604,11520,4068,12850,6939, -16246,17738,12761,17319,4861,18247,20009,4863,7132,9589, -4294,8280,12287,20879,13940,17268,2282,3060,13189,16779, -12965,12665,14172,1586,21246,8791,18851,11365,5102,12421, -10209,1077,11459,8179,13667,13281,2591,4874,10040,11748, -19204,10854,19285,13310,11243,14305,12967,18791,13694,1447, -3011,8255,15902,6725,21165,15852,13089,4888,13727,17723, -13546,6751,18086,11296,12799,7612,2679,7541,10652,19287, -13478,8936,3659,10073,3346,991,20688,4530,8907,18506, -12185,1322,5479,5480,12113,21276,13832,4324,1085,21120, -20895,18556,8683,18979,13256,14669,12488,4386,5401,8230, -7714,5684,10426,8572,13569,21106,20123,20972,14325,9848, -19768,14297,19485,6567,13641,20587,16285,4972,13260,21109, -11664,10082,20590,20459,9850,21518,6711,16333,2990,5869, -8609,18869,12216,12985,5808,11730,12493,5630,1333,10595, -12022,9825,13926,13847,7087,18485,17218,2876,3122,2944, -5297,19490,6215,14757,5028,21523,4941,16550,1360,20442, -19640,16551,8610,5492,20664,17108,12913,5324,7928,10719, -15231,6238,21141,8601,1401,14575,16633,19503,4260,10901, -19467,9620,15991,17148,4897,15172,19469,3621,17638,16267, -9275,19225,2953,7985,12693,16864,15028,7899,11532,12634, -1082,14741,2266,15812,19589,6539,1458,4910,16028,3424, -3201,18222,21664,3482,7335,16276,19292,5475,5965,12828, -4746,13765,17330,16359,2231,8568,12810,9006,16986,4322, -1246,12002,15858,10278,12028,17933,7251,20648,14533,13904, -11387,4361,1327,16621,6012,7066,9498,1212,7354,14910, -9309,19302,19755,15135,11007,3980,16990,9773,3135,10015, -19903,10457,7641,2351,21321,16529,6849,18033,20598,7728, -20465,1892,9355,4697,4470,9984,5302,14101,8613,6560, -18877,7093,21393,4392,19806,7533,6218,9405,12162,9700, -9703,10358,10026,3321,21095,9818,16546,3016,21726,1600, -9126,3025,18008,1182,1604,1607,1154,3034,1609,1610, -11872,11874,20695,2978,18729,13774,4513,14557,13897,2162, -5095,19546,18846,12617,20310,16338,16024,21396,3275,5997, -3276,4254,21031,2380,11694,2643,2409,21252,15559,16140, -13517,6726,3960,19533,11525,18793,7779,9923,18121,4168, -8089,19470,13386,3678,8045,18860,13479,8811,17917,9899, -6790,18134,8450,13932,21728,7079,11010,4493,12726,6265, -17608,6214,16370,19036,16626,15085,1517,6014,15365,13879, -18064,17254,5222,9523,6917,13488,6195,4506,11802,11079, -5393,18929,8916,9713,3265,18926,16840,20182,12111,19451, -9903,5049,5111,14700,10972,16036,2393,4955,1589,1022, -7776,7651,20091,18940,10605,8520,15760,18650,867,11504, -7110,5845,1116,8194,12545,9928,12921,5643,3841,20318, -18204,13238,19601,960,17932,1771,8970,19926,14747,4364, -2852,7346,14909,20431,11946,14044,10659,19239,20850,5974, -20610,16790,9719,15289,6729,5507,9158,1344,3256,8428, -1382,19476,21101,7935,19729,2984,15688,3289,19914,11945, -3485,15185,18326,2604,15643,14578,20640,19479,20066,4325, -5873,3293,16405,11551,18564,2762,18130,15319,3697,2606, -19915,15129,10690,5651,20481,14676,1935,2663,15138,4176, -3706,10285,2611,3230,13708,12888,17976,19777,18823,4338, -9873,14684,10736,6552,20408,15607,4409,1559,1562,9524, -19907,19493,10629,9573,15848,12757,14166,19560,13860,16260, -4814,8642,1684,17628,14411,19856,3214,6876,1191,8281, -1435,16210,8899,5703,14517,8818,20586,17542,10318,21750, -3151,5132,6598,12337,17718,21461,6868,21706,11576,18882, -15589,3326,14655,1895,2637,6931,8799,3502,9370,20309, -850,18528,4815,4950,18900,3314,9586,4292,1409,1123, -5818,13233,19180,20090,8543,17061,5581,10117,3920,11820, -4183,11582,19435,14925,8901,6943,14417,6681,3264,9910, -18784,17400,1442,2999,5673,6747,17758,18738,12025,8868, -4210,7137,11214,11052,20359,11868,5321,11412,10702,2555, -9320,5347,16709,20315,15274,20211,16839,21776,6946,4782, -20238,11943,11187,9954,21323,20528,15565,6332,3197,14146, -5053,6082,7036,6304,17702,16949,5718,11935,9289,18254, -2499,3995,10489,4958,16708,9272,7269,5346,1818,17024, -13518,17466,12627,13250,21096,21641,12465,9149,11651,19471, -1926,17322,8225,19380,13058,18742,10905,13963,1316,14743, -19672,20060,6311,8966,17325,17326,15059,15483,11301,16880, -13894,2835,21505,21647,18689,16691,17331,20019,13059,19367, -10874,2343,4840,9898,21306,6425,13062,10771,13063,17859, -3585,1529,18097,1502,20291,16409,20782,10882,9965,3384, -11013,18703,2046,8876,4755,11014,8939,9778,20154,2198, -19444,6999,18407,2206,20157,6522,19358,3419,1787,3901, -9268,9621,14832,2855,3837,3268,11550,9488,8969,7742, -19393,9001,8117,15060,19107,2652,7743,10276,8839,16639, -6762,13205,996,15121,4019,8730,11777,6072,2397,15262, -5284,855,11638,6020,3714,880,897,14908,5881,15890, -2566,12158,9460,2030,12411,12642,19238,1370,15082,3605, -11126,12188,8388,9863,12568,2856,7720,11960,13209,10317, -2082,3571,6013,7952,8453,18754,14004,12276,13875,1930, -6913,11565,16377,7396,11538,10575,6346,10031,19526,19664, -13251,19669,19897,16382,20910,12149,15515,2718,20239,5844, -16941,20162,9694,19586,18317,21721,10837,3376,4004,20636, -19871,4833,15711,12831,12507,2732,20129,2987,19540,19211, -12582,21727,5888,16412,10443,9242,18234,15575,20439,15418, -21388,17219,4021,15445,13412,2964,20079,4431,8698,15074, -2757,3234,20080,19431,986,20372,7599,12405,2244,19800, -9521,20194,18761,7601,15430,12509,11883,19069,18416,19070, -11745,13887,2747,18424,10104,11081,11082,11746,17673,7732, -14551,11084,18430,1587,14653,14692,9525,7875,5043,18856, -9897,3508,20527,3884,12504,13388,1081,20632,20839,1067, -10559,4961,11527,3807,14187,13116,16394,16658,10774,20514, -4934,4464,7027,12759,12853,12662,13426,18156,17267,1028, -2078,9189,1057,6413,8709,3921,7266,17785,3324,5427, -10852,11237,18914,3953,7703,18081,20732,9321,9145,15025, -18219,5548,17467,5824,8776,8417,13797,18606,16225,20122, -16399,19599,3237,10299,21498,10908,14503,15029,7114,20513, -9968,3588,1704,18831,3725,2636,4562,3128,18119,18466, -6307,9146,16981,2288,6622,18559,20756,7684,13499,14165, -13587,13368,964,5690,10683,11857,20039,17075,12106,4623, -13787,8869,14707,15230,1450,8369,9615,19584,17237,19143, -8806,2885,21551,4488,19590,16690,5966,5171,12696,10810, -13781,3688,15000,17028,18967,2147,14525,16022,16866,11918, -12871,13394,7481,12267,18653,19185,1092,4550,2423,17712, -3993,19967,12874,4837,1922,11509,17641,4265,8435,4172, -5418,19186,12925,1165,13989,13722,2336,11864,4662,20045, -18865,13202,12268,5827,6253,19156,8500,3809,18980,21043, -16987,5083,13782,6878,15380,8649,19877,10336,11639,16569, -4202,21515,11660,16003,14670,11257,5484,8689,10076,1752, -3020,5523,1837,12269,19757,15006,21762,1889,19483,3763, -7299,20649,14607,14671,15818,8307,15157,18740,5859,10610, -11656,14322,3131,11059,6361,2123,16451,16504,10911,11588, -20478,8061,8447,9871,17605,18063,6525,2877,6880,15233, -19161,20865,14554,15476,16094,17014,13753,19703,2641,18783, -17361,1786,19587,6844,2107,15068,11330,17768,7911,14030, -21331,11571,12328,16736,5743,12105,17759,17350,16170,929, -19670,1455,5338,999,7906,2191,17602,10000,19257,17626, -3504,3224,2251,16738,20904,11993,2677,16737,8579,2316, -2906,15016,1582,11854,6414,2821,12176,3279,18517,21771, -11645,4868,2330,18916,18778,15943,18213,2053,8562,18082, -12926,14535,15302,17994,20529,1269,6115,1489,14477,2784, -14583,1838,21279,2659,20096,12522,15918,12927,4925,20385, -10859,12879,4926,9645,19969,12270,18447,1180,1794,7803, -5420,14817,20753,11448,11683,11779,3698,7256,11473,15440, -14409,18866,14939,8937,8551,1296,15921,17713,6259,7678, -2633,4405,5315,1753,14587,11421,5877,19165,8506,21107, -2708,17365,15922,11389,9448,6972,19769,17908,13724,21753, -20984,14226,2664,16991,17714,13571,12271,15820,21181,6292, -11308,8854,18571,17157,17209,17770,8507,2108,9351,7073, -12334,13871,11101,18752,19120,5685,8722,20058,1309,15037, -12864,8953,9061,18939,15681,13532,13153,17727,4611,2308, -16323,2720,6333,3199,20064,9003,4320,9472,21377,13117, -1466,15125,12951,19371,8020,13100,2688,2844,10002,11041, -15741,6714,14842,18244,16385,6228,11267,8646,15315,10475, -9063,8115,9297,19730,2267,17029,16568,6834,4317,13520, -13617,6116,15731,13622,8618,21353,12035,12992,14874,12786, -14975,2136,4727,19859,11454,11163,4164,11108,5498,1585, -16600,6010,16383,9376,5101,14798,10208,10326,18441,14985, -4227,10038,10853,10648,17980,12057,16138,6230,11269,7970, -963,3917,19512,14087,8662,12931,14947,11640,3812,5979, -13947,14678,8765,13411,17437,20591,17797,20187,15627,3261, -5575,6279,19375,4009,10504,10925,9292,16298,17646,20030, -1334,15144,19778,2189,15882,1850,5980,7282,6263,8347, -4756,2170,16287,20995,14957,8348,6468,19685,15784,8938, -21458,10568,17715,13230,14452,5939,10569,18654,2790,20305, -8209,17303,4271,10814,12570,9512,12067,13948,2532,5239, -9565,15596,1733,21286,20718,15979,10183,21732,8328,2315, -19847,7369,5177,3817,15577,2298,10597,8737,10087,12277, -10447,9518,13017,12144,8362,11261,6534,16432,9921,7238, -20621,19092,6724,21164,7141,17873,6748,15561,18083,7586, -10124,6392,18084,13899,15108,16713,9147,16392,21434,8342, -2080,1190,16848,10940,6577,21228,12689,16857,15027,4026, -21416,12342,14482,5143,4601,3099,14423,5644,10407,14846, -17587,18224,11174,7664,15064,6625,17892,12169,7338,17990, -16660,10909,18389,13207,8732,14351,10821,19301,12599,9642, -13902,15301,6858,1477,17791,4969,15487,12077,11303,6632, -19303,17430,9240,2032,6340,10660,6594,9798,21179,18750, -10430,17967,5129,14822,14953,14196,14320,15925,2193,9175, -21733,12219,977,12278,17307,18149,21369,9452,854,8783, -15330,9054,4034,16521,2928,21524,20759,1348,11791,21636, -2965,15422,3910,12729,12936,21389,6991,19785,7914,5632, -10845,2273,15758,16918,9802,15578,5559,3262,14826,20663, -10448,11040,10449,6452,1659,5046,9164,8749,4551,16762, -11537,16300,6399,3563,17164,17165,6866,9851,4451,10981, -8575,18450,3609,9804,5835,17255,4081,16011,16414,16288, -5031,13848,7090,4348,8510,20665,15660,20344,6435,18486, -4105,17109,19641,8766,14479,6646,16479,5032,20532,2112, -13167,14545,6217,8983,11953,13078,15179,9567,3440,20406, -9743,13878,12585,1522,6030,21464,5990,17616,19322,19978, -4719,6061,1107,11143,5740,3477,11110,19528,2411,11846, -12880,12883,16804,9865,12889,6549,7441,7440,2977,18191, -16739,8086,20235,18782,4397,7235,8035,3328,6309,12082, -1886,9557,13387,17410,15683,13640,8965,16347,6583,10410, -2870,6627,13401,17094,1003,5453,15320,10137,17159,9971, -8327,17609,11205,15222,9110,7121,6759,16053,20957,8651, -20883,6948,4250,2176,16988,8319,2257,8033,11909,11090, -4909,1464,19811,2377,14901,4577,18246,16735,19701,1410, -13079,6297,15951,21624,6555,18714,11263,7523,4089,7516, -14960,8984,6381,17949,20606,7821,20666,1560,21050,21527, -17773,18655,10949,12029,865,5072,12938,10928,2113,3302, -1218,17111,9756,15284,8587,18584,18718,11898,16614,13825, -15510,15285,13021,5300,14916,2929,1863,12051,3273,1397, -14048,5178,21528,16699,19260,6677,15790,10162,8576,15250, -14138,15075,16302,5225,20722,20723,9293,19055,19905,15523, -11796,16968,7262,5266,10694,8350,15056,21691,15286,15287, -4759,16553,11489,10388,15288,11982,21680,16047,17777,5656, -18002,9805,14721,10766,11405,10623,7921,21540,5700,11850, -19563,14980,3278,21118,14174,13145,18195,13703,14730,9784, -7608,12424,2141,9554,12448,16195,17193,15255,3676,16433, -4281,8047,1655,7786,2263,1454,2174,11911,1024,19925, -15854,16794,5449,11329,12345,899,12434,2567,9500,18229, -13027,12412,2295,9389,20474,16902,14233,1512,11757,10674, -14853,5047,5042,4859,11903,21497,7761,8395,1222,20180, -14987,4988,21639,18924,11904,15343,17402,6457,12366,9483, -12697,8728,21366,1966,20962,16799,1036,10139,14227,1627, -3075,20460,7215,17339,14920,19544,21130,5243,16245,8921, -1534,16530,10165,3611,14036,21625,18838,10462,8767,13022, -3183,12656,2303,15472,10788,19385,2246,4760,8071,1644, -14827,10315,17801,3090,10234,20160,7530,2038,9529,17131, -16935,8635,14869,1388,20487,12897,2488,10467,6470,7094, -12591,6820,13023,12510,9987,14102,17802,17315,2489,9025, -14965,10167,11598,6651,12422,15226,4507,13112,13538,18489, -15473,17392,8471,7642,21744,9892,13169,9336,4139,17656, -20136,7007,7452,21053,3593,18153,19347,4118,8472,11899, -15705,12610,15822,15823,20499,3893,14246,8558,7453,4644, -15228,10390,8352,6823,19807,9762,20008,12248,14725,5140, -17567,4872,21135,4873,2823,3327,8834,6001,7587,5351, -17408,15631,10062,12774,4584,14283,5797,4215,14712,10178, -13593,16274,21493,8729,17329,15641,11201,6766,14935,1597, -5417,21379,11252,7937,20690,13903,5214,9496,18989,7353, -1692,12388,10778,9390,11322,14057,17545,9872,20294,7553, -12958,13076,6551,21699,18526,6977,2858,20111,19363,3877, -6937,16431,4653,11242,8408,8672,10212,3753,3334,12530, -11244,7239,4402,5400,17813,18160,6187,18549,10655,16980, -6690,9767,12703,19234,12702,6395,9040,18325,3100,16279, -21468,13085,12901,21472,9404,1541,15824,6562,17553,4207, -5871,2491,8337,4698,3304,19073,921,21609,18136,3819, -21292,6196,21394,7016,11691,6135,6924,13263,1710,19275, -9027,11838,17842,7534,7535,12961,2134,21023,11231,9541, -9407,7018,21695,8949,14276,12230,9139,4052,14918,2997, -10529,1652,1281,10391,17226,8888,10253,4356,10359,7536, -9232,1872,7394,18640,2218,17345,7537,16947,5664,2023, -11812,9438,3156,13502,12070,10633,21697,10553,20196,11814, -8486,15529,21220,9233,13985,18463,17706,1265,17711,10811, -18146,20953,17150,19675,12711,2272,2396,8198,10879,19615, -19927,17097,11610,904,15493,7913,6636,19248,3186,3081, -17969,20484,12584,1997,13484,10450,1528,20161,16609,16463, -20070,15549,16778,1613,12764,2098,10698,9593,12289,11196, -18594,13941,7398,2802,2497,3062,17397,4543,12003,21248, -11530,20922,20608,10211,8148,12468,10328,17078,17401,19462, -20886,16180,20799,10043,5430,3652,9601,16142,2464,8658, -9346,18143,13696,20930,20627,5678,12625,15873,9082,8151, -6479,6185,6755,7781,10533,8368,927,17852,4526,5549, -4900,8420,21550,15259,10057,2806,4679,4027,12974,20547, -20973,19237,6634,21516,1851,15522,13815,1386,10153,6556, -9136,2215,2283,2284,8140,1025,3852,8457,9901,11080, -10975,10700,14844,14209,6889,10976,18265,1460,5967,1461, -14188,8557,8650,1367,6254,13953,14039,17204,7492,7344, -11278,17066,14877,4006,20342,11616,20402,12186,17115,10077, -1599,1490,13954,6119,5615,5291,5260,4445,2840,6275, -5721,11282,14113,9073,9304,10477,15862,14156,8237,19970, -19971,2239,13523,10019,2274,14137,9074,18235,16578,18280, -4346,6841,19786,16579,6280,1231,6281,13525,18611,16581, -1168,944,16415,19129,9095,13632,10614,2923,9817,5862, -7484,3690,8197,3119,14448,11553,20321,9795,9239,7065, -12444,8260,13347,4096,2925,2451,10476,2125,8259,17993, -10914,19300,20651,4614,15322,15247,17594,5196,3178,5216, -14912,1693,13808,21178,17593,7912,13029,12645,2768,15496, -21182,6370,5131,19973,13279,16159,8455,13103,13214,10381, -21740,16907,8238,19898,9394,18282,10005,1879,2130,19482, -1001,11363,3129,14254,15742,20043,9788,12402,3379,7059, -1714,19028,13751,4298,5468,8675,10330,20889,18936,20677, -6330,9607,18546,14648,20936,13549,10402,20580,11726,16329, -9210,4022,13576,12241,15738,11797,15335,8577,6129,13634, -2904,5619,4012,12782,8959,15512,5621,12401,8621,17058, -6821,2247,12283,3499,6561,15337,16583,16584,5952,8563, -4018,6768,15321,6548,9368,17659,18890,20900,19087,18454, -3986,4291,14456,12134,5157,20036,20871,12286,2461,4295, -13428,3645,10110,16135,1737,4228,14729,4229,4374,5747, -19548,8517,13121,17707,2949,4997,17081,14208,14469,12564, -20703,17276,3514,12136,18950,4127,10581,19100,8189,2415, -10403,14471,17239,19105,21227,18473,13777,17091,2696,18378, -19106,19591,3602,16348,11774,4128,2986,21504,3121,10442, -9976,16496,7315,12993,7273,7113,7056,8595,3581,5084, -7431,20175,11970,10045,1921,1385,20306,12353,12556,5038, -9111,5136,6037,15401,5210,20272,17633,20010,5770,6084, -20140,10855,19707,2307,11695,12679,14495,18678,2339,18370, -6688,1888,5927,5757,17935,8974,903,11306,16089,18065, -18630,16938,11575,1341,14641,8928,18792,20935,21488,5060, -7933,20710,9170,13393,6962,15454,5020,2163,7149,16953, -3624,19618,5457,7950,13521,7466,7597,12446,10832,5503, -16749,5550,6959,8305,7340,12362,8661,13151,15258,1110, -959,7741,5064,18327,6697,20046,16797,15489,7171,3523, -995,17040,19188,13991,13704,9966,16060,3586,12314,15187, -19770,17250,4683,11687,4388,6992,3528,19195,20999,10262, -16936,9658,9665,6141,20812,18968,13203,12875,6543,5454, -8379,6341,20103,19629,2737,15181,5989,6909,14852,5655, -2797,20106,19384,7002,16929,10197,9526,11556,18027,20108, -7099,7100,11492,4810,14081,11466,4663,12076,20020,2660, -18448,953,11006,3764,3486,6337,3813,11478,2429,20343, -10083,12653,21110,6266,20409,19125,21290,16101,10088,3973, -19252,16810,10094,10095,6268,19130,5288,1878,10868,11430, -3202,7485,14018,14748,2314,10473,12604,13494,12415,3506, -17140,2860,3925,18199,19099,8727,20022,12557,2649,7669, -4028,3851,19514,19862,5854,19945,16652,13785,6606,8013, -13913,15374,5373,21397,11498,18542,12948,10213,3959,8549, -10329,7290,14439,21140,21775,5566,20676,13467,20804,8038, -5681,3963,18217,8870,13987,5885,12367,20706,11095,16096, -10611,3247,12101,16275,11759,7988,18225,4603,19607,21584, -3904,7487,3120,11561,11177,16217,4331,14816,2525,19352, -5290,10501,1715,15606,20991,20371,5534,11020,14059,14201, -10737,10738,20051,10196,11049,1707,16812,16531,9099,16969, -19060,3449,15620,19808,10235,3360,7095,12079,18491,16420, -16421,17059,7222,11050,11029,9408,9706,6925,890,4645, -3363,10254,10105,923,4765,9708,1259,6160,6161,6163, -1774,13244,15712,20650,2476,13296,8066,8069,15714,4588, -11180,1271,15759,6824,18721,3885,2124,7345,13766,3625, -4077,16798,13767,13208,11865,19189,13981,11512,11390,21690, -1181,19004,18625,15574,1133,7754,6260,12114,1754,19123, -5293,15576,7081,940,6171,5402,12832,15842,19354,15180, -15785,17998,8788,1379,15334,20498,9753,10018,19566,16856, -18746,14151,17644,16909,1616,13986,8308,15069,1634,1635, -14723,5450,5483,6380,4612,6983,9203,19569,12152,10834, -20393,7981,11680,10134,18868,18458,16430,4165,13050,14569, -6329,21258,17982,15353,18680,18470,16792,5930,10984,2334, -18383,6365,19751,16364,4097,1227,17936,1552,16077,10120, -10781,14265,20072,19010,19782,4495,15215,17256,8474,3169, -1612,3536,17897,16911,9592,6415,8077,6422,4586,14611, -14982,17142,20881,13436,6418,4886,21774,11056,20800,3010, -20631,15769,12704,2179,17037,21454,16997,13679,15588,15434, -1525,9096,9140,17615,1196,4365,13357,13358,6130,13136, -11480,7371,3610,11966,15555,15336,17551,12052,5303,1535, -9100,15474,10297,5791,13113,18009,7011,7390,7563,2258, -3305,6440,17263,12905,4053,16220,7395,9234,16390,13768, -4933,10965,13602,5294,16474,13133,5940,2327,9097,13856, -20083,14356,16482,5301,1136,15556,5426,20084,5205,1536, -16485,6825,4050,16221,4054,4890,8141,17160,17600,17168, -7004,20102,9381,12220,6650,19258,20086,12226,949,19131, -17372,6441,18676,3888,13285,8967,17384,14890,5907,17822, -18817,17825,5557,15053,8995,12712,4126,7271,6753,11920, -13757,18519,21565,13612,12877,11279,15595,12819,4132,10884, -10988,5185,11762,19698,3280,18018,11199,6940,5139,3478, -17809,2368,4167,18197,21431,1547,4734,4450,894,9617, -10215,20349,15907,3654,9112,16143,4896,17709,10809,17087, -13057,20387,3966,11586,5312,16662,12811,4129,1325,3905, -2438,21121,7807,3703,17995,1574,20589,5806,14045,13298, -13481,4154,3590,7560,1933,11024,1871,8592,20896,4946, -4976,17807,11167,8792,4158,11197,3369,14491,19829,18799, -15174,21569,2561,11419,9171,7417,3691,15261,18169,11706, -6009,19758,16259,1148,4174,3631,3385,12066,12538,10113, -2386,8065,9449,6123,13070,4339,4272,16475,7815,9091, -14427,18828,18829,8697,4116,1603,12457,9450,15808,7283, -15957,6800,8980,7284,10606,15883,2483,19344,19996,6379, -5985,8028,16062,16063,12436,9177,16064,21529,21530,2930, -3912,9178,15424,5986,12891,8699,3212,8103,13184,18833, -14006,15663,4275,4351,18283,16608,8611,19395,21315,18284, -17257,17672,18876,19934,14049,3726,3727,7579,8960,9456, -9337,12407,16227,10740,3149,18588,6062,13114,5562,18135, -18352,6827,2259,13888,11031,1711,15177,12348,13946,15083, -8978,10880,8694,11310,12403,2481,8619,9978,5538,15835, -1439,13591,15719,4523,20678,14324,16281,16052,4887,5168, -5505,9636,18330,12311,9241,9517,6997,20300,6095,5653, -8353,7872,5041,18847,12499,20520,9896,16021,2884,14176, -10974,2146,11916,1913,15375,8289,1162,12914,4545,8648, -3989,6877,1091,19716,20738,5508,8678,12520,1887,1824, -19960,11463,15437,3754,14904,14650,17986,15298,1453,11652, -12262,4194,8660,9349,4403,19507,2516,7275,11587,18651, -2470,3808,19104,8564,21173,15877,3915,6459,13556,5876, -17264,12442,10360,10008,11813,13586,15879,8094,12541,19337, -19394,9455,4735,3916,5571,4927,17069,20437,1626,13993, -1086,15360,9939,5576,17999,14300,8330,1637,14963,16483, -18488,18586,15077,8578,14061,4471,10166,16971,10198,12396, -12397,10169,1647,1648,1649,9894,1650,14104,4766,17778, -18464,20425,14940,18572,10142,4579,4473,4599,14565,1965, -6951,3900,14997,16128,20397,16098,13769,19746,8382,2654, -19190,4531,4532,15237,19187,21280,18819,21782,1491,7834, -15550,1248,3026,15828,15007,1249,14672,4241,5895,13771, -15755,7679,7281,1755,18573,15923,14128,15803,20746,14080, -2706,15463,958,13867,9325,9162,15594,8762,20304,9560, -5234,4266,3258,10564,10179,8556,7421,9285,13227,8202, -853,13008,11947,1347,3559,8733,9043,5556,6864,12140, -8360,15411,21512,13161,8574,14948,4335,2109,15071,6547, -864,10312,13015,4636,10923,11397,5292,8349,11488,10147, -19015,7258,1698,1633,15470,10784,10619,19381,21679,17997, -3607,2199,8460,12588,10383,4135,9209,12607,3152,13019, -3591,6912,21467,19056,2133,1646,21046,14418,3241,20974, -1415,21546,11374,14765,10495,6956,4835,9284,8687,13733, -3027,17366,18510,8385,4406,9387,16898,1799,11629,4341, -1891,8535,4010,15145,19630,16905,18580,6847,5870,14685, -7517,21390,1756,17308,1928,18709,3442,4594,20485,16522, -5633,4347,11931,20081,6382,6647,6807,7372,6298,914, -15509,4665,16526,5535,2114,15055,15511,1864,5203,17055, -9021,10163,15076,15581,18719,16554,11344,15513,10752,1530, -19803,17776,7916,14037,9026,21336,14247,2672,3450,19071, -7008,13700,2490,16534,17373,20416,4666,5899,11030,18425, -11351,2219,17374,10634,20170,11573,3896,16112,4230,6090, -9386,16838,3999,8523,5861,5520,20691,7184,14094,11721, -5035,13681,5704,7659,6048,16886,12515,3831,6423,19398, -8112,19824,1241,20704,5472,3927,10332,13472,2559,14931, -4383,20954,5567,17765,10534,1833,9491,5521,19748,17205, -15644,16755,11192,937,1291,2960,6369,4336,3023,10924, -16807,18627,7365,19254,20615,10194,9882,7638,8164,19794, -6437,10459,5662,11619,3879,7734,9595,14217,9602,19463, -5105,8676,3401,20365,12120,21260,17961,7243,18179,18803, -20960,9324,16796,3239,17202,14129,21206,4635,5554,16460, -19681,19555,3380,9123,19000,6290,2159,10311,7302,14070, -18693,1839,4682,1847,11684,1503,1854,16010,5911,4595, -7373,945,918,17170,19997,4699,12428,17653,10687,19747, -4774,5973,3699,16153,16129,2607,18096,21281,20822,12159, -17670,13783,13992,20049,16573,20851,3405,10478,19486,1848, -1251,8440,16155,19005,13448,12567,13452,8080,12523,20530, -19846,12189,21151,8316,21287,11906,8210,12274,20181,7313, -10084,20692,15346,5026,18511,14608,1509,16157,16158,15009, -10148,10709,12375,15579,21000,13820,15610,3972,18060,13536, -14401,8081,4407,5896,1855,21185,19126,10663,21111,3443, -5897,10156,8240,15046,13185,10815,2666,11394,1149,7076, -6640,1632,10642,19342,20390,10225,19194,2712,1153,9179, -19051,3771,12339,3728,13497,18959,15040,16830,13309,21398, -1570,18602,15797,4007,8688,19621,18055,8314,19684,18730, -2131,11500,13756,7880,10956,12063,3453,7248,5252,8752, -9722,2524,9769,7419,1656,2809,15693,1486,8203,4190, -3269,1330,1250,10503,1576,9201,2634,20605,13048,13883, -12069,18173,17810,8498,3216,7877,9415,21547,2362,14999, -6863,9359,15520,11990,10288,7576,11895,11410,3844,3882, -3374,10065,11824,5826,9015,1010,15408,5903,12684,6005, -9294,5987,16012,17950,16081,8538,4284,2549,17693,15012, -10458,21370,21116,14357,12376,9057,15582,9165,21602,8739, -12738,12739,18408,4596,14062,18409,5304,18612,16815,12383, -3091,12384,12942,4597,6652,12940,6869,19648,15666,13537, -17113,21604,8985,13851,14964,5578,16163,5735,15078,12900, -2541,21015,10168,12228,15614,16972,2044,4045,18417,19908, -21655,14063,14248,12751,21019,14856,10468,16973,10626,20488, -11407,1046,1973,1651,3092,13461,1542,21020,19810,17841, -6471,1802,15154,17462,9989,20467,4157,10172,16165,2087, -3773,7643,15825,18426,10635,20418,7794,6109,19336,8684, -5972,4340,21311,11792,10739,14047,6060,13886,12441,6320, -12916,13374,7107,2156,6686,5310,10996,4898,12296,13942, -17238,6017,7856,5377,3991,19182,2558,5905,5476,6104, -9629,19474,13657,20366,13344,10068,2469,19536,13320,7277, -11589,20961,14936,13444,15859,9087,12705,7619,18477,10839, -14450,20562,14296,16721,9499,2782,4923,13007,13259,12722, -16895,19767,4591,5867,5834,19003,12313,15783,13570,16236, -9290,11039,2942,13813,11562,4936,8979,8696,5024,15073, -19627,19488,10289,13410,1557,10843,13217,1011,10763,10822, -8003,19078,18722,16131,12429,21158,18431,10255,10485,15619, -17346,7226,14862,8249,16976,6529,9544,1653,13779,19096, -1617,17678,13176,21577,15116,8972,14854,16446,16454,16455, -19609,5146,18981,980,1272,1332,3005,15673,13071,8858, -16074,5357,12373,19644,15191,1867,17455,12096,1868,3235, -11348,9893,10298,17459,20178,15675,1723,8889,10361,5192, -13128,8652,13118,9338,14073,9041,3627,4573,17771,13659, -3435,9050,1716,4429,12275,4455,15697,1274,1510,10844, -4937,4389,13821,13454,5389,9092,12221,21297,14301,15271, -15700,9666,1718,15703,12224,15035,10680,19901,16916,2574, -15503,12087,14687,6645,2037,12394,15506,16923,17391,21049, -20486,14840,10846,12223,6813,12049,14242,6918,11042,2205, -9759,11229,9536,4083,13501,4805,19244,13301,17129,14647, -21197,19577,7044,4059,6950,7405,20544,21549,6419,13313, -12521,3288,14472,20240,5434,9625,14998,15778,7245,1548, -2562,8808,1470,17241,18269,13559,20749,8502,14666,5183, -12008,14294,17474,13295,20248,13159,21283,13970,12930,16185, -1498,3382,8780,19843,17431,20658,9014,6637,6293,5423, -4618,9657,1514,2612,15150,11227,3982,10451,4104,5763, -20760,21605,14896,7447,4223,6384,9133,12750,9761,20696, -12229,10711,14023,10754,10755,14112,17843,9947,12902,12903, -11570,9101,11839,1724,13683,4000,4008,11617,6282,17056, -4014,5947,4015,4016,8125,19818,19819,18404,4974,17655, -5734,21606,10199,5737,14269,10962,12713,12714,5050,17829, -19793,16065,12655,9838,5117,12398,1539,12752,17840,2759, -18356,20419,19594,3510,13723,7804,1070,6261,16130,3632, -7116,19631,4274,13162,14135,5994,16100,11398,7866,14428, -1167,19896,12315,10379,16574,6375,10338,20097,4559,4687, -11513,19489,12382,11337,6127,17107,3772,20134,3576,1876, -9183,21155,19571,19578,2683,17032,11770,11922,2865,14181, -18854,1420,21040,1164,4571,5307,10334,21205,20241,16879, -14295,16462,11038,14704,2036,2691,11026,13175,11750,7247, -13405,14132,1532,3601,13042,15263,7812,15467,16915,17146, -11092,1063,9627,15802,16876,21502,1992,9964,21632,14028, -6294,20133,3024,17860,13844,13420,7600,5323,7173,18934, -10064,16877,21284,4615,7434,12364,6125,19046,11107,20846, -12718,12778,18581,3553,4834,13459,8114,8200,9937,21511, -20147,11557,20604,7544,2628,3883,5106,21144,18802,5482, -13455,5912,12279,10089,16160,1102,13413,12495,4942,1520, -7201,16523,8211,3791,1856,19491,5810,12317,11718,17690, -15362,1276,5029,20354,8321,5490,14590,3936,3352,15309, -7822,14759,6316,17370,4390,946,16416,20558,21186,19216, -9941,10664,15935,18834,19050,1773,16480,7636,8828,5730, -17169,5298,6734,9354,4945,8665,17774,4206,8511,15664, -11179,14302,20355,15272,13186,19645,11630,20597,5811,5358, -15096,16725,13415,14202,12572,6602,15789,9569,14139,14140, -8666,11025,2538,9527,21659,16930,19427,14403,21531,12742, -13262,17371,11631,2966,7216,3795,3133,16151,17152,11317, -20897,18395,14537,2531,16009,9447,9053,12133,6378,15657, -17861,5889,15508,9335,1893,7729,16934,8335,9571,18073, -14598,3244,4159,13304,18021,3145,1679,1264,15297,7412, -4832,13000,20847,4836,14189,9637,16150,7253,1874,15356, -8994,13061,1487,17247,17151,6967,7620,9823,7180,2975, -6503,2610,20994,3743,1849,20855,7510,3861,2857,21066, -8266,4205,3233,12374,13846,11793,12047,12654,2799,8465, -12609,4503,3147,21210,10023,2214,9946,21694,17625,20906, -3785,11388,17767,11402,12320,6354,8424,14257,5478,21508, -13168,5561,21129,3938,9166,4598,11667,19061,9058,10463, -8165,2276,7998,10598,10099,21653,9530,11043,21607,21016, -11722,6400,19649,3662,14546,14405,6603,15667,6299,17695, -21193,9137,21608,7205,1564,1565,6604,13581,20281,16375, -16376,19650,2946,13852,3865,6653,9807,18344,13360,13361, -7448,1399,4353,18490,5036,14007,7383,17072,16178,6385, -14693,13973,17957,16555,7387,6063,16700,12091,14064,10170, -10696,14594,14547,5622,21534,15616,15312,18589,5305,19396, -12945,12753,16556,13974,14410,9763,1017,9385,6716,11290, -7223,15792,13462,7391,14406,10756,5384,15136,20992,21555, -13289,8057,19593,9638,16570,15863,7181,12161,4592,14157, -19173,889,17316,10717,2448,8262,1228,15781,21517,19166, -19686,2991,16670,11164,19878,16164,21364,15244,8371,8204, -10662,8331,2743,13305,10537,16808,20153,11424,1045,10161, -1338,17652,19480,4558,1100,12489,11717,10337,15093,5017, -6314,15357,5722,7810,16468,4387,7182,7624,17367,18098, -5356,9513,9742,7363,14589,15787,5809,14136,6597,7186, -13261,10090,21652,4593,9055,2275,5560,11666,11719,3792, -14543,21526,4718,3862,4349,13355,5033,6648,1561,14060, -16975,13418,1664,7224,7220,21211,7564,13363,21316,19390, -20489,8636,18035,1667,19813,13463,17393,1803,7700,18109, -15155,6654,21746,14251,14252,4474,5792,9991,18110,11195, -17005,20303,17344,4720,5624,6317,8883,20282,14065,20420, -5135,5793,14489,9574,2304,9410,14791,922,13889,7225, -17916,6442,14793,9707,9949,10668,11232,20668,17375,4358, -10362,5666,9545,17181,3509,7111,16099,1069,6117,19484, -20351,1840,12310,8663,15924,20279,6315,8873,20352,8508, -19425,12730,14402,1396,2302,15661,16552,16372,13577,7558, -12088,7377,16532,16970,6439,5134,1015,12740,15310,5620, -18585,9384,1663,18034,10753,11288,19386,5790,14249,21745, -9572,3296,18449,3298,13102,10751,7376,8214,13849,5425, -1337,7862,15955,8827,5493,3661,6296,5295,8700,1526, -10296,12841,8887,1721,4051,10966,1087,18336,9837,17442, -16335,2578,17363,18398,15829,15557,19389,1618,9044,10842, -13661,15786,7194,21525,17772,13578,8124,1722,6563,9948, -11335,6712,11068,7115,8509,21235,11070,12745,1016,14361, -9990,3356,2849,19516,17112,18762,13460,4046,9532,13280, -1989,978,4693,19542,16726,18357,16943,13414,5913,20330, -20417,5635,11751,18867,4928,9646,8121,1900,18390,4891, -3787,6968,4792,13905,5114,14538,4793,11309,1252,19844, -20823,6433,13212,4845,4688,16575,7364,14541,19779,4811, -18537,8451,8452,12336,6519,20721,1254,18399,18148,20784, -4552,4794,16576,11978,3353,5261,13874,10091,11223,4938, -16161,11262,9659,1578,21001,5262,19848,3031,13483,17443, -2575,3444,8212,18610,5491,21048,19787,18451,19788,18150, -15821,19789,15736,19253,4117,16698,4391,5577,915,20825, -18406,6193,17450,7285,9942,21187,18487,15662,6269,10453, -13880,11425,5265,13725,7637,17775,22349,22350,22351,22352, -22353,22354,22355,22356,22357,22358,22359,22360,22361,22362, -22363,22364,22365,22366,22367,22368,22369,22370,22371,22372, -22373,22374,22375,22376,22377,22378,22379,22380,22381,22382, -22383,22384,22385,22386,22387,22388,22389,22390,22391,22392, -22393,22394,22395,22396,22397,22398,22399,22400,22401,22402, -22403,22404,22405,22406,22407,22408,22409,22410,22411,22412, -22413,22414,22415,22416,22417,22418,22419,22420,22421,22422, -22423,22424,22425,22426,22427,22428,22429,22430,22431,22432, -22433,22434,22435,22436,22437,22438,22439,22440,22441,22442, -21115,2576,10665,6194,11720,4285,10538,7286,7206,16013, -6521,16177,1902,16724,8351,19801,1865,8539,8540,1398, -16931,8541,8241,15980,7997,15665,4276,4277,8915,5539, -16766,14404,9180,7693,12068,10464,12323,14763,4948,948, -21469,12227,13416,12898,1293,3796,10465,13635,7381,8243, -16029,18152,19850,12743,9531,18720,21371,8784,4246,9059, -14481,12744,7999,19062,19063,8000,21532,9167,3939,12657, -2967,5345,8215,8467,19064,21743,7005,14828,14829,2673, -11194,13853,950,13362,15668,6386,15669,4354,7758,10847, -4949,2947,16014,18345,6133,19909,22443,22444,22445,22446, -22447,22448,22449,22450,22451,22452,22453,22454,22455,22456, -22457,22458,22459,22460,22461,22462,22463,22464,22465,22466, -22467,22468,22469,22470,22471,22472,22473,22474,22475,22476, -22477,22478,22479,22480,22481,22482,22483,22484,22485,22486, -22487,22488,22489,22490,22491,22492,22493,22494,22495,22496, -22497,22498,22499,22500,22501,22502,22503,22504,22505,22506, -22507,22508,22509,22510,22511,22512,22513,22514,22515,22516, -22517,22518,22519,22520,22521,22522,22523,22524,22525,22526, -22527,22528,22529,22530,22531,22532,22533,22534,22535,22536, -12365,9060,10932,6387,19262,2887,16816,8246,3940,2018, -4574,6388,19274,19910,17177,16615,14548,6158,2800,15514, -17114,13975,10171,7096,5494,7388,15251,5992,3035,3036, -19074,18638,18418,7012,9695,15739,8814,15628,15629,19075, -16015,10695,17460,5206,15740,2435,7097,16049,20617,1018, -18614,18764,11983,2674,21022,10200,19391,10484,1543,14859, -21474,19651,16727,8480,19176,15433,14966,7644,19079,6472, -1544,19278,15156,6655,4509,7645,9895,18427,5208,8169, -17227,17228,16016,10723,21747,19814,19280,10472,16050,17229, -18028,19081,12356,14792,10631,16945,22537,22538,22539,22540, -22541,22542,22543,22544,22545,22546,22547,22548,22549,22550, -22551,22552,22553,22554,22555,22556,22557,22558,22559,22560, -22561,22562,22563,22564,22565,22566,22567,22568,22569,22570, -22571,22572,22573,22574,22575,22576,22577,22578,22579,22580, -22581,22582,22583,22584,22585,22586,22587,22588,22589,22590, -22591,22592,22593,22594,22595,22596,22597,22598,22599,22600, -22601,22602,22603,22604,22605,22606,22607,22608,22609,22610, -22611,22612,22613,22614,22615,22616,22617,22618,22619,22620, -22621,22622,22623,22624,22625,22626,22627,22628,22629,22630, -18842,7021,20267,19652,20421,18723,18492,12357,11840,6443, -11083,19281,11032,3640,19985,19815,9439,1903,10363,6162, -10256,14863,19988,19282,5665,13503,9546,10556,14518,2005, -17411,10053,18020,6189,21102,16718,9045,12881,5339,19842, -15130,6120,13349,19016,16612,10149,7082,19017,18757,6557, -20413,11027,14860,10370,7892,10092,7449,17223,3245,7454, -7457,18298,19440,3125,1631,3126,12116,21291,7374,11069, -19691,10164,2433,8512,9983,11668,8166,8513,8001,9682, -17340,18290,7263,11074,9696,20490,8004,12755,10108,18299, -3127,10732,6121,2358,4846,11183,22631,22632,22633,22634, -22635,22636,22637,22638,22639,22640,22641,22642,22643,22644, -22645,22646,22647,22648,22649,22650,22651,22652,22653,22654, -22655,22656,22657,22658,22659,22660,22661,22662,22663,22664, -22665,22666,22667,22668,22669,22670,22671,22672,22673,22674, -22675,22676,22677,22678,22679,22680,22681,22682,22683,22684, -22685,22686,22687,22688,22689,22690,22691,22692,22693,22694, -22695,22696,22697,22698,22699,22700,22701,22702,22703,22704, -22705,22706,22707,22708,22709,22710,22711,22712,22713,22714, -22715,22716,22717,22718,22719,22720,22721,22722,22723,22724, -11184,4848,12124,13524,13457,11426,4849,17310,9168,11186, -2581,4767,13453,11185,11334,11354,21654,11933,4700,6616, -7893,5686,15713,15963,6494,8941,6270,2583,6164,19018, -3408,17051,16090,11399,12939,3744,18341,10950,18346,19980, -3469,18240,18350,18351,20724,20697,3362,1990,18765,10934, -20444,18359,4055,10364,4703,11281,19904,3146,13528,2352, -16206,21192,20828,11044,1019,1668,16166,1545,2344,11133, -3891,21519,5525,3937,4695,19852,2277,5207,2048,19853, -15475,15599,14778,4641,16582,1089,3794,16162,21051,13487, -14480,14591,14593,15867,8247,8002,22725,22726,22727,22728, -22729,22730,22731,22732,22733,22734,22735,22736,22737,22738, -22739,22740,22741,22742,22743,22744,22745,22746,22747,22748, -22749,22750,22751,22752,22753,22754,22755,22756,22757,22758, -22759,22760,22761,22762,22763,22764,22765,22766,22767,22768, -22769,22770,22771,22772,22773,22774,22775,22776,22777,22778, -22779,22780,22781,22782,22783,22784,22785,22786,22787,22788, -22789,22790,22791,22792,22793,22794,22795,22796,22797,22798, -22799,22800,22801,22802,22803,22804,22805,22806,22807,22808, -22809,22810,22811,22812,22813,22814,22815,22816,22817,22818, -6850,8248,18353,15981,14967,17317,9413,18629,16811,16813, -6283,17622,6159,17803,16629,20331,11890,11579,12723,20381, -7207,21533,7013,7019,2635,2453,2454,6131,18172,19174, -17620,1233,20265,14694,21535,2579,18347,8269,15791,10102, -10096,2770,13583,17621,19175,11804,8168,18613,2996,20052, -19693,2815,18878,11669,20266,2998,13512,20053,18358,11984, -4357,16671,19083,3246,21656,3733,2816,7965,18211,6105, -19157,10228,12089,5391,12090,18348,10245,10250,5392,8596, -3306,10109,3307,5731,13364,1670,2914,6136,8483,17557, -19987,9271,9814,5122,9564,9967,22819,22820,22821,22822, -22823,22824,22825,22826,22827,22828,22829,22830,22831,22832, -22833,22834,22835,22836,22837,22838,22839,22840,22841,22842, -22843,22844,22845,22846,22847,22848,22849,22850,22851,22852, -22853,22854,22855,22856,22857,22858,22859,22860,22861,22862, -22863,22864,22865,22866,22867,22868,22869,22870,22871,22872, -22873,22874,22875,22876,22877,22878,22879,22880,22881,22882, -22883,22884,22885,22886,22887,22888,22889,22890,22891,22892, -22893,22894,22895,22896,22897,22898,22899,22900,22901,22902, -22903,22904,22905,22906,22907,22908,22909,22910,22911,22912, -16769,6900,14850,19718,12706,4918,8263,9548,886,5739, -14473,3992,7037,17500,17731,3521,23854,23855,23856,23857, -23858,23859,23860,23861,23862,23863,23864,23865,23866,23867, -23868,23869,23870,23871,23872,23873,23874,23875,23876,23877, -23878,23879,23880,23881,23882,23883,23884,23885,23886,23887, -23888,23889,23890,23891,23892,23893,23894,23895,23896,23897, -23898,23899,23900,23901,23902,23903,23904,23905,23906,23907, -23908,23909,23910,23911,23912,23913,23914,23915,23916,23917, -23918,23919,23920,23921,23922,23923,23924,23925,23926,23927, -23928,23929,23930,23931,23932,23933,22913,22914,22915,22916, -22917,22918,22919,22920,22921,22922,22923,22924,22925,22926, -22927,22928,22929,22930,22931,22932,22933,22934,22935,22936, -22937,22938,22939,22940,22941,22942,22943,22944,22945,22946, -22947,22948,22949,22950,22951,22952,22953,22954,22955,22956, -22957,22958,22959,22960,22961,22962,22963,22964,22965,22966, -22967,22968,22969,22970,22971,22972,22973,22974,22975,22976, -22977,22978,22979,22980,22981,22982,22983,22984,22985,22986, -22987,22988,22989,22990,22991,22992,22993,22994,22995,22996, -22997,22998,22999,23000,23001,23002,23003,23004,23005,23006 -}; - -static uint16 gbksortorder(uint16 i) -{ - uint idx=gbktail(i); - if (idx>0x7f) idx-=0x41; - else idx-=0x40; - idx+=(gbkhead(i)-0x81)*0xbe; - return 0x8100+gbk_order[idx]; -} - - -int my_strnncoll_gbk_internal(const uchar **a_res, const uchar **b_res, - size_t length) -{ - const uchar *a= *a_res, *b= *b_res; - uint a_char,b_char; - - while (length--) - { - if ((length > 0) && isgbkcode(*a,*(a+1)) && isgbkcode(*b, *(b+1))) - { - a_char= gbkcode(*a,*(a+1)); - b_char= gbkcode(*b,*(b+1)); - if (a_char != b_char) - return ((int) gbksortorder((uint16) a_char) - - (int) gbksortorder((uint16) b_char)); - a+= 2; - b+= 2; - length--; - } - else if (sort_order_gbk[*a++] != sort_order_gbk[*b++]) - return ((int) sort_order_gbk[a[-1]] - - (int) sort_order_gbk[b[-1]]); - } - *a_res= a; - *b_res= b; - return 0; -} - - - -int my_strnncoll_gbk(CHARSET_INFO *cs __attribute__((unused)), - const uchar *a, size_t a_length, - const uchar *b, size_t b_length, - my_bool b_is_prefix) -{ - size_t length= min(a_length, b_length); - int res= my_strnncoll_gbk_internal(&a, &b, length); - return res ? res : (int) ((b_is_prefix ? length : a_length) - b_length); -} - - -static int my_strnncollsp_gbk(CHARSET_INFO * cs __attribute__((unused)), - const uchar *a, size_t a_length, - const uchar *b, size_t b_length, - my_bool diff_if_only_endspace_difference) -{ - size_t length= min(a_length, b_length); - int res= my_strnncoll_gbk_internal(&a, &b, length); - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= 0; -#endif - - if (!res && a_length != b_length) - { - const uchar *end; - int swap= 1; - if (diff_if_only_endspace_difference) - res= 1; /* Assume 'a' is bigger */ - /* - Check the next not space character of the longer key. If it's < ' ', - then it's smaller than the other key. - */ - if (a_length < b_length) - { - /* put shorter key in a */ - a_length= b_length; - a= b; - swap= -1; /* swap sign of result */ - res= -res; - } - for (end= a + a_length-length; a < end ; a++) - { - if (*a != ' ') - return (*a < ' ') ? -swap : swap; - } - } - return res; -} - - -static size_t my_strnxfrm_gbk(CHARSET_INFO *cs __attribute__((unused)), - uchar *dest, size_t len, - const uchar *src, size_t srclen) -{ - uint16 e; - size_t dstlen= len; - uchar *dest_end= dest + dstlen; - - len = srclen; - while (len-- && dest < dest_end) - { - if ((len > 0) && isgbkcode(*src, *(src+1))) - { - e = gbksortorder((uint16) gbkcode(*src, *(src+1))); - *dest++ = gbkhead(e); - if (dest < dest_end) - *dest++ = gbktail(e); - src+=2; - len--; - } else - *dest++ = sort_order_gbk[(uchar) *src++]; - } - if (dstlen > srclen) - bfill(dest, dstlen - srclen, ' '); - return dstlen; -} - - -static uint ismbchar_gbk(CHARSET_INFO *cs __attribute__((unused)), - const char* p, const char *e) -{ - return (isgbkhead(*(p)) && (e)-(p)>1 && isgbktail(*((p)+1))? 2: 0); -} - -static uint mbcharlen_gbk(CHARSET_INFO *cs __attribute__((unused)),uint c) -{ - return (isgbkhead(c)? 2 : 1); -} - -/* page 0 0x8140-0xFE4F */ -static uint16 tab_gbk_uni0[]={ -0x4E02,0x4E04,0x4E05,0x4E06,0x4E0F,0x4E12,0x4E17,0x4E1F, -0x4E20,0x4E21,0x4E23,0x4E26,0x4E29,0x4E2E,0x4E2F,0x4E31, -0x4E33,0x4E35,0x4E37,0x4E3C,0x4E40,0x4E41,0x4E42,0x4E44, -0x4E46,0x4E4A,0x4E51,0x4E55,0x4E57,0x4E5A,0x4E5B,0x4E62, -0x4E63,0x4E64,0x4E65,0x4E67,0x4E68,0x4E6A,0x4E6B,0x4E6C, -0x4E6D,0x4E6E,0x4E6F,0x4E72,0x4E74,0x4E75,0x4E76,0x4E77, -0x4E78,0x4E79,0x4E7A,0x4E7B,0x4E7C,0x4E7D,0x4E7F,0x4E80, -0x4E81,0x4E82,0x4E83,0x4E84,0x4E85,0x4E87,0x4E8A, 0, -0x4E90,0x4E96,0x4E97,0x4E99,0x4E9C,0x4E9D,0x4E9E,0x4EA3, -0x4EAA,0x4EAF,0x4EB0,0x4EB1,0x4EB4,0x4EB6,0x4EB7,0x4EB8, -0x4EB9,0x4EBC,0x4EBD,0x4EBE,0x4EC8,0x4ECC,0x4ECF,0x4ED0, -0x4ED2,0x4EDA,0x4EDB,0x4EDC,0x4EE0,0x4EE2,0x4EE6,0x4EE7, -0x4EE9,0x4EED,0x4EEE,0x4EEF,0x4EF1,0x4EF4,0x4EF8,0x4EF9, -0x4EFA,0x4EFC,0x4EFE,0x4F00,0x4F02,0x4F03,0x4F04,0x4F05, -0x4F06,0x4F07,0x4F08,0x4F0B,0x4F0C,0x4F12,0x4F13,0x4F14, -0x4F15,0x4F16,0x4F1C,0x4F1D,0x4F21,0x4F23,0x4F28,0x4F29, -0x4F2C,0x4F2D,0x4F2E,0x4F31,0x4F33,0x4F35,0x4F37,0x4F39, -0x4F3B,0x4F3E,0x4F3F,0x4F40,0x4F41,0x4F42,0x4F44,0x4F45, -0x4F47,0x4F48,0x4F49,0x4F4A,0x4F4B,0x4F4C,0x4F52,0x4F54, -0x4F56,0x4F61,0x4F62,0x4F66,0x4F68,0x4F6A,0x4F6B,0x4F6D, -0x4F6E,0x4F71,0x4F72,0x4F75,0x4F77,0x4F78,0x4F79,0x4F7A, -0x4F7D,0x4F80,0x4F81,0x4F82,0x4F85,0x4F86,0x4F87,0x4F8A, -0x4F8C,0x4F8E,0x4F90,0x4F92,0x4F93,0x4F95,0x4F96,0x4F98, -0x4F99,0x4F9A,0x4F9C,0x4F9E,0x4F9F,0x4FA1,0x4FA2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x4FA4,0x4FAB,0x4FAD,0x4FB0,0x4FB1,0x4FB2,0x4FB3,0x4FB4, -0x4FB6,0x4FB7,0x4FB8,0x4FB9,0x4FBA,0x4FBB,0x4FBC,0x4FBD, -0x4FBE,0x4FC0,0x4FC1,0x4FC2,0x4FC6,0x4FC7,0x4FC8,0x4FC9, -0x4FCB,0x4FCC,0x4FCD,0x4FD2,0x4FD3,0x4FD4,0x4FD5,0x4FD6, -0x4FD9,0x4FDB,0x4FE0,0x4FE2,0x4FE4,0x4FE5,0x4FE7,0x4FEB, -0x4FEC,0x4FF0,0x4FF2,0x4FF4,0x4FF5,0x4FF6,0x4FF7,0x4FF9, -0x4FFB,0x4FFC,0x4FFD,0x4FFF,0x5000,0x5001,0x5002,0x5003, -0x5004,0x5005,0x5006,0x5007,0x5008,0x5009,0x500A, 0, -0x500B,0x500E,0x5010,0x5011,0x5013,0x5015,0x5016,0x5017, -0x501B,0x501D,0x501E,0x5020,0x5022,0x5023,0x5024,0x5027, -0x502B,0x502F,0x5030,0x5031,0x5032,0x5033,0x5034,0x5035, -0x5036,0x5037,0x5038,0x5039,0x503B,0x503D,0x503F,0x5040, -0x5041,0x5042,0x5044,0x5045,0x5046,0x5049,0x504A,0x504B, -0x504D,0x5050,0x5051,0x5052,0x5053,0x5054,0x5056,0x5057, -0x5058,0x5059,0x505B,0x505D,0x505E,0x505F,0x5060,0x5061, -0x5062,0x5063,0x5064,0x5066,0x5067,0x5068,0x5069,0x506A, -0x506B,0x506D,0x506E,0x506F,0x5070,0x5071,0x5072,0x5073, -0x5074,0x5075,0x5078,0x5079,0x507A,0x507C,0x507D,0x5081, -0x5082,0x5083,0x5084,0x5086,0x5087,0x5089,0x508A,0x508B, -0x508C,0x508E,0x508F,0x5090,0x5091,0x5092,0x5093,0x5094, -0x5095,0x5096,0x5097,0x5098,0x5099,0x509A,0x509B,0x509C, -0x509D,0x509E,0x509F,0x50A0,0x50A1,0x50A2,0x50A4,0x50A6, -0x50AA,0x50AB,0x50AD,0x50AE,0x50AF,0x50B0,0x50B1,0x50B3, -0x50B4,0x50B5,0x50B6,0x50B7,0x50B8,0x50B9,0x50BC, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x50BD,0x50BE,0x50BF,0x50C0,0x50C1,0x50C2,0x50C3,0x50C4, -0x50C5,0x50C6,0x50C7,0x50C8,0x50C9,0x50CA,0x50CB,0x50CC, -0x50CD,0x50CE,0x50D0,0x50D1,0x50D2,0x50D3,0x50D4,0x50D5, -0x50D7,0x50D8,0x50D9,0x50DB,0x50DC,0x50DD,0x50DE,0x50DF, -0x50E0,0x50E1,0x50E2,0x50E3,0x50E4,0x50E5,0x50E8,0x50E9, -0x50EA,0x50EB,0x50EF,0x50F0,0x50F1,0x50F2,0x50F4,0x50F6, -0x50F7,0x50F8,0x50F9,0x50FA,0x50FC,0x50FD,0x50FE,0x50FF, -0x5100,0x5101,0x5102,0x5103,0x5104,0x5105,0x5108, 0, -0x5109,0x510A,0x510C,0x510D,0x510E,0x510F,0x5110,0x5111, -0x5113,0x5114,0x5115,0x5116,0x5117,0x5118,0x5119,0x511A, -0x511B,0x511C,0x511D,0x511E,0x511F,0x5120,0x5122,0x5123, -0x5124,0x5125,0x5126,0x5127,0x5128,0x5129,0x512A,0x512B, -0x512C,0x512D,0x512E,0x512F,0x5130,0x5131,0x5132,0x5133, -0x5134,0x5135,0x5136,0x5137,0x5138,0x5139,0x513A,0x513B, -0x513C,0x513D,0x513E,0x5142,0x5147,0x514A,0x514C,0x514E, -0x514F,0x5150,0x5152,0x5153,0x5157,0x5158,0x5159,0x515B, -0x515D,0x515E,0x515F,0x5160,0x5161,0x5163,0x5164,0x5166, -0x5167,0x5169,0x516A,0x516F,0x5172,0x517A,0x517E,0x517F, -0x5183,0x5184,0x5186,0x5187,0x518A,0x518B,0x518E,0x518F, -0x5190,0x5191,0x5193,0x5194,0x5198,0x519A,0x519D,0x519E, -0x519F,0x51A1,0x51A3,0x51A6,0x51A7,0x51A8,0x51A9,0x51AA, -0x51AD,0x51AE,0x51B4,0x51B8,0x51B9,0x51BA,0x51BE,0x51BF, -0x51C1,0x51C2,0x51C3,0x51C5,0x51C8,0x51CA,0x51CD,0x51CE, -0x51D0,0x51D2,0x51D3,0x51D4,0x51D5,0x51D6,0x51D7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x51D8,0x51D9,0x51DA,0x51DC,0x51DE,0x51DF,0x51E2,0x51E3, -0x51E5,0x51E6,0x51E7,0x51E8,0x51E9,0x51EA,0x51EC,0x51EE, -0x51F1,0x51F2,0x51F4,0x51F7,0x51FE,0x5204,0x5205,0x5209, -0x520B,0x520C,0x520F,0x5210,0x5213,0x5214,0x5215,0x521C, -0x521E,0x521F,0x5221,0x5222,0x5223,0x5225,0x5226,0x5227, -0x522A,0x522C,0x522F,0x5231,0x5232,0x5234,0x5235,0x523C, -0x523E,0x5244,0x5245,0x5246,0x5247,0x5248,0x5249,0x524B, -0x524E,0x524F,0x5252,0x5253,0x5255,0x5257,0x5258, 0, -0x5259,0x525A,0x525B,0x525D,0x525F,0x5260,0x5262,0x5263, -0x5264,0x5266,0x5268,0x526B,0x526C,0x526D,0x526E,0x5270, -0x5271,0x5273,0x5274,0x5275,0x5276,0x5277,0x5278,0x5279, -0x527A,0x527B,0x527C,0x527E,0x5280,0x5283,0x5284,0x5285, -0x5286,0x5287,0x5289,0x528A,0x528B,0x528C,0x528D,0x528E, -0x528F,0x5291,0x5292,0x5294,0x5295,0x5296,0x5297,0x5298, -0x5299,0x529A,0x529C,0x52A4,0x52A5,0x52A6,0x52A7,0x52AE, -0x52AF,0x52B0,0x52B4,0x52B5,0x52B6,0x52B7,0x52B8,0x52B9, -0x52BA,0x52BB,0x52BC,0x52BD,0x52C0,0x52C1,0x52C2,0x52C4, -0x52C5,0x52C6,0x52C8,0x52CA,0x52CC,0x52CD,0x52CE,0x52CF, -0x52D1,0x52D3,0x52D4,0x52D5,0x52D7,0x52D9,0x52DA,0x52DB, -0x52DC,0x52DD,0x52DE,0x52E0,0x52E1,0x52E2,0x52E3,0x52E5, -0x52E6,0x52E7,0x52E8,0x52E9,0x52EA,0x52EB,0x52EC,0x52ED, -0x52EE,0x52EF,0x52F1,0x52F2,0x52F3,0x52F4,0x52F5,0x52F6, -0x52F7,0x52F8,0x52FB,0x52FC,0x52FD,0x5301,0x5302,0x5303, -0x5304,0x5307,0x5309,0x530A,0x530B,0x530C,0x530E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5311,0x5312,0x5313,0x5314,0x5318,0x531B,0x531C,0x531E, -0x531F,0x5322,0x5324,0x5325,0x5327,0x5328,0x5329,0x532B, -0x532C,0x532D,0x532F,0x5330,0x5331,0x5332,0x5333,0x5334, -0x5335,0x5336,0x5337,0x5338,0x533C,0x533D,0x5340,0x5342, -0x5344,0x5346,0x534B,0x534C,0x534D,0x5350,0x5354,0x5358, -0x5359,0x535B,0x535D,0x5365,0x5368,0x536A,0x536C,0x536D, -0x5372,0x5376,0x5379,0x537B,0x537C,0x537D,0x537E,0x5380, -0x5381,0x5383,0x5387,0x5388,0x538A,0x538E,0x538F, 0, -0x5390,0x5391,0x5392,0x5393,0x5394,0x5396,0x5397,0x5399, -0x539B,0x539C,0x539E,0x53A0,0x53A1,0x53A4,0x53A7,0x53AA, -0x53AB,0x53AC,0x53AD,0x53AF,0x53B0,0x53B1,0x53B2,0x53B3, -0x53B4,0x53B5,0x53B7,0x53B8,0x53B9,0x53BA,0x53BC,0x53BD, -0x53BE,0x53C0,0x53C3,0x53C4,0x53C5,0x53C6,0x53C7,0x53CE, -0x53CF,0x53D0,0x53D2,0x53D3,0x53D5,0x53DA,0x53DC,0x53DD, -0x53DE,0x53E1,0x53E2,0x53E7,0x53F4,0x53FA,0x53FE,0x53FF, -0x5400,0x5402,0x5405,0x5407,0x540B,0x5414,0x5418,0x5419, -0x541A,0x541C,0x5422,0x5424,0x5425,0x542A,0x5430,0x5433, -0x5436,0x5437,0x543A,0x543D,0x543F,0x5441,0x5442,0x5444, -0x5445,0x5447,0x5449,0x544C,0x544D,0x544E,0x544F,0x5451, -0x545A,0x545D,0x545E,0x545F,0x5460,0x5461,0x5463,0x5465, -0x5467,0x5469,0x546A,0x546B,0x546C,0x546D,0x546E,0x546F, -0x5470,0x5474,0x5479,0x547A,0x547E,0x547F,0x5481,0x5483, -0x5485,0x5487,0x5488,0x5489,0x548A,0x548D,0x5491,0x5493, -0x5497,0x5498,0x549C,0x549E,0x549F,0x54A0,0x54A1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x54A2,0x54A5,0x54AE,0x54B0,0x54B2,0x54B5,0x54B6,0x54B7, -0x54B9,0x54BA,0x54BC,0x54BE,0x54C3,0x54C5,0x54CA,0x54CB, -0x54D6,0x54D8,0x54DB,0x54E0,0x54E1,0x54E2,0x54E3,0x54E4, -0x54EB,0x54EC,0x54EF,0x54F0,0x54F1,0x54F4,0x54F5,0x54F6, -0x54F7,0x54F8,0x54F9,0x54FB,0x54FE,0x5500,0x5502,0x5503, -0x5504,0x5505,0x5508,0x550A,0x550B,0x550C,0x550D,0x550E, -0x5512,0x5513,0x5515,0x5516,0x5517,0x5518,0x5519,0x551A, -0x551C,0x551D,0x551E,0x551F,0x5521,0x5525,0x5526, 0, -0x5528,0x5529,0x552B,0x552D,0x5532,0x5534,0x5535,0x5536, -0x5538,0x5539,0x553A,0x553B,0x553D,0x5540,0x5542,0x5545, -0x5547,0x5548,0x554B,0x554C,0x554D,0x554E,0x554F,0x5551, -0x5552,0x5553,0x5554,0x5557,0x5558,0x5559,0x555A,0x555B, -0x555D,0x555E,0x555F,0x5560,0x5562,0x5563,0x5568,0x5569, -0x556B,0x556F,0x5570,0x5571,0x5572,0x5573,0x5574,0x5579, -0x557A,0x557D,0x557F,0x5585,0x5586,0x558C,0x558D,0x558E, -0x5590,0x5592,0x5593,0x5595,0x5596,0x5597,0x559A,0x559B, -0x559E,0x55A0,0x55A1,0x55A2,0x55A3,0x55A4,0x55A5,0x55A6, -0x55A8,0x55A9,0x55AA,0x55AB,0x55AC,0x55AD,0x55AE,0x55AF, -0x55B0,0x55B2,0x55B4,0x55B6,0x55B8,0x55BA,0x55BC,0x55BF, -0x55C0,0x55C1,0x55C2,0x55C3,0x55C6,0x55C7,0x55C8,0x55CA, -0x55CB,0x55CE,0x55CF,0x55D0,0x55D5,0x55D7,0x55D8,0x55D9, -0x55DA,0x55DB,0x55DE,0x55E0,0x55E2,0x55E7,0x55E9,0x55ED, -0x55EE,0x55F0,0x55F1,0x55F4,0x55F6,0x55F8,0x55F9,0x55FA, -0x55FB,0x55FC,0x55FF,0x5602,0x5603,0x5604,0x5605, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5606,0x5607,0x560A,0x560B,0x560D,0x5610,0x5611,0x5612, -0x5613,0x5614,0x5615,0x5616,0x5617,0x5619,0x561A,0x561C, -0x561D,0x5620,0x5621,0x5622,0x5625,0x5626,0x5628,0x5629, -0x562A,0x562B,0x562E,0x562F,0x5630,0x5633,0x5635,0x5637, -0x5638,0x563A,0x563C,0x563D,0x563E,0x5640,0x5641,0x5642, -0x5643,0x5644,0x5645,0x5646,0x5647,0x5648,0x5649,0x564A, -0x564B,0x564F,0x5650,0x5651,0x5652,0x5653,0x5655,0x5656, -0x565A,0x565B,0x565D,0x565E,0x565F,0x5660,0x5661, 0, -0x5663,0x5665,0x5666,0x5667,0x566D,0x566E,0x566F,0x5670, -0x5672,0x5673,0x5674,0x5675,0x5677,0x5678,0x5679,0x567A, -0x567D,0x567E,0x567F,0x5680,0x5681,0x5682,0x5683,0x5684, -0x5687,0x5688,0x5689,0x568A,0x568B,0x568C,0x568D,0x5690, -0x5691,0x5692,0x5694,0x5695,0x5696,0x5697,0x5698,0x5699, -0x569A,0x569B,0x569C,0x569D,0x569E,0x569F,0x56A0,0x56A1, -0x56A2,0x56A4,0x56A5,0x56A6,0x56A7,0x56A8,0x56A9,0x56AA, -0x56AB,0x56AC,0x56AD,0x56AE,0x56B0,0x56B1,0x56B2,0x56B3, -0x56B4,0x56B5,0x56B6,0x56B8,0x56B9,0x56BA,0x56BB,0x56BD, -0x56BE,0x56BF,0x56C0,0x56C1,0x56C2,0x56C3,0x56C4,0x56C5, -0x56C6,0x56C7,0x56C8,0x56C9,0x56CB,0x56CC,0x56CD,0x56CE, -0x56CF,0x56D0,0x56D1,0x56D2,0x56D3,0x56D5,0x56D6,0x56D8, -0x56D9,0x56DC,0x56E3,0x56E5,0x56E6,0x56E7,0x56E8,0x56E9, -0x56EA,0x56EC,0x56EE,0x56EF,0x56F2,0x56F3,0x56F6,0x56F7, -0x56F8,0x56FB,0x56FC,0x5700,0x5701,0x5702,0x5705,0x5707, -0x570B,0x570C,0x570D,0x570E,0x570F,0x5710,0x5711, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5712,0x5713,0x5714,0x5715,0x5716,0x5717,0x5718,0x5719, -0x571A,0x571B,0x571D,0x571E,0x5720,0x5721,0x5722,0x5724, -0x5725,0x5726,0x5727,0x572B,0x5731,0x5732,0x5734,0x5735, -0x5736,0x5737,0x5738,0x573C,0x573D,0x573F,0x5741,0x5743, -0x5744,0x5745,0x5746,0x5748,0x5749,0x574B,0x5752,0x5753, -0x5754,0x5755,0x5756,0x5758,0x5759,0x5762,0x5763,0x5765, -0x5767,0x576C,0x576E,0x5770,0x5771,0x5772,0x5774,0x5775, -0x5778,0x5779,0x577A,0x577D,0x577E,0x577F,0x5780, 0, -0x5781,0x5787,0x5788,0x5789,0x578A,0x578D,0x578E,0x578F, -0x5790,0x5791,0x5794,0x5795,0x5796,0x5797,0x5798,0x5799, -0x579A,0x579C,0x579D,0x579E,0x579F,0x57A5,0x57A8,0x57AA, -0x57AC,0x57AF,0x57B0,0x57B1,0x57B3,0x57B5,0x57B6,0x57B7, -0x57B9,0x57BA,0x57BB,0x57BC,0x57BD,0x57BE,0x57BF,0x57C0, -0x57C1,0x57C4,0x57C5,0x57C6,0x57C7,0x57C8,0x57C9,0x57CA, -0x57CC,0x57CD,0x57D0,0x57D1,0x57D3,0x57D6,0x57D7,0x57DB, -0x57DC,0x57DE,0x57E1,0x57E2,0x57E3,0x57E5,0x57E6,0x57E7, -0x57E8,0x57E9,0x57EA,0x57EB,0x57EC,0x57EE,0x57F0,0x57F1, -0x57F2,0x57F3,0x57F5,0x57F6,0x57F7,0x57FB,0x57FC,0x57FE, -0x57FF,0x5801,0x5803,0x5804,0x5805,0x5808,0x5809,0x580A, -0x580C,0x580E,0x580F,0x5810,0x5812,0x5813,0x5814,0x5816, -0x5817,0x5818,0x581A,0x581B,0x581C,0x581D,0x581F,0x5822, -0x5823,0x5825,0x5826,0x5827,0x5828,0x5829,0x582B,0x582C, -0x582D,0x582E,0x582F,0x5831,0x5832,0x5833,0x5834,0x5836, -0x5837,0x5838,0x5839,0x583A,0x583B,0x583C,0x583D, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x583E,0x583F,0x5840,0x5841,0x5842,0x5843,0x5845,0x5846, -0x5847,0x5848,0x5849,0x584A,0x584B,0x584E,0x584F,0x5850, -0x5852,0x5853,0x5855,0x5856,0x5857,0x5859,0x585A,0x585B, -0x585C,0x585D,0x585F,0x5860,0x5861,0x5862,0x5863,0x5864, -0x5866,0x5867,0x5868,0x5869,0x586A,0x586D,0x586E,0x586F, -0x5870,0x5871,0x5872,0x5873,0x5874,0x5875,0x5876,0x5877, -0x5878,0x5879,0x587A,0x587B,0x587C,0x587D,0x587F,0x5882, -0x5884,0x5886,0x5887,0x5888,0x588A,0x588B,0x588C, 0, -0x588D,0x588E,0x588F,0x5890,0x5891,0x5894,0x5895,0x5896, -0x5897,0x5898,0x589B,0x589C,0x589D,0x58A0,0x58A1,0x58A2, -0x58A3,0x58A4,0x58A5,0x58A6,0x58A7,0x58AA,0x58AB,0x58AC, -0x58AD,0x58AE,0x58AF,0x58B0,0x58B1,0x58B2,0x58B3,0x58B4, -0x58B5,0x58B6,0x58B7,0x58B8,0x58B9,0x58BA,0x58BB,0x58BD, -0x58BE,0x58BF,0x58C0,0x58C2,0x58C3,0x58C4,0x58C6,0x58C7, -0x58C8,0x58C9,0x58CA,0x58CB,0x58CC,0x58CD,0x58CE,0x58CF, -0x58D0,0x58D2,0x58D3,0x58D4,0x58D6,0x58D7,0x58D8,0x58D9, -0x58DA,0x58DB,0x58DC,0x58DD,0x58DE,0x58DF,0x58E0,0x58E1, -0x58E2,0x58E3,0x58E5,0x58E6,0x58E7,0x58E8,0x58E9,0x58EA, -0x58ED,0x58EF,0x58F1,0x58F2,0x58F4,0x58F5,0x58F7,0x58F8, -0x58FA,0x58FB,0x58FC,0x58FD,0x58FE,0x58FF,0x5900,0x5901, -0x5903,0x5905,0x5906,0x5908,0x5909,0x590A,0x590B,0x590C, -0x590E,0x5910,0x5911,0x5912,0x5913,0x5917,0x5918,0x591B, -0x591D,0x591E,0x5920,0x5921,0x5922,0x5923,0x5926,0x5928, -0x592C,0x5930,0x5932,0x5933,0x5935,0x5936,0x593B, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x593D,0x593E,0x593F,0x5940,0x5943,0x5945,0x5946,0x594A, -0x594C,0x594D,0x5950,0x5952,0x5953,0x5959,0x595B,0x595C, -0x595D,0x595E,0x595F,0x5961,0x5963,0x5964,0x5966,0x5967, -0x5968,0x5969,0x596A,0x596B,0x596C,0x596D,0x596E,0x596F, -0x5970,0x5971,0x5972,0x5975,0x5977,0x597A,0x597B,0x597C, -0x597E,0x597F,0x5980,0x5985,0x5989,0x598B,0x598C,0x598E, -0x598F,0x5990,0x5991,0x5994,0x5995,0x5998,0x599A,0x599B, -0x599C,0x599D,0x599F,0x59A0,0x59A1,0x59A2,0x59A6, 0, -0x59A7,0x59AC,0x59AD,0x59B0,0x59B1,0x59B3,0x59B4,0x59B5, -0x59B6,0x59B7,0x59B8,0x59BA,0x59BC,0x59BD,0x59BF,0x59C0, -0x59C1,0x59C2,0x59C3,0x59C4,0x59C5,0x59C7,0x59C8,0x59C9, -0x59CC,0x59CD,0x59CE,0x59CF,0x59D5,0x59D6,0x59D9,0x59DB, -0x59DE,0x59DF,0x59E0,0x59E1,0x59E2,0x59E4,0x59E6,0x59E7, -0x59E9,0x59EA,0x59EB,0x59ED,0x59EE,0x59EF,0x59F0,0x59F1, -0x59F2,0x59F3,0x59F4,0x59F5,0x59F6,0x59F7,0x59F8,0x59FA, -0x59FC,0x59FD,0x59FE,0x5A00,0x5A02,0x5A0A,0x5A0B,0x5A0D, -0x5A0E,0x5A0F,0x5A10,0x5A12,0x5A14,0x5A15,0x5A16,0x5A17, -0x5A19,0x5A1A,0x5A1B,0x5A1D,0x5A1E,0x5A21,0x5A22,0x5A24, -0x5A26,0x5A27,0x5A28,0x5A2A,0x5A2B,0x5A2C,0x5A2D,0x5A2E, -0x5A2F,0x5A30,0x5A33,0x5A35,0x5A37,0x5A38,0x5A39,0x5A3A, -0x5A3B,0x5A3D,0x5A3E,0x5A3F,0x5A41,0x5A42,0x5A43,0x5A44, -0x5A45,0x5A47,0x5A48,0x5A4B,0x5A4C,0x5A4D,0x5A4E,0x5A4F, -0x5A50,0x5A51,0x5A52,0x5A53,0x5A54,0x5A56,0x5A57,0x5A58, -0x5A59,0x5A5B,0x5A5C,0x5A5D,0x5A5E,0x5A5F,0x5A60, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5A61,0x5A63,0x5A64,0x5A65,0x5A66,0x5A68,0x5A69,0x5A6B, -0x5A6C,0x5A6D,0x5A6E,0x5A6F,0x5A70,0x5A71,0x5A72,0x5A73, -0x5A78,0x5A79,0x5A7B,0x5A7C,0x5A7D,0x5A7E,0x5A80,0x5A81, -0x5A82,0x5A83,0x5A84,0x5A85,0x5A86,0x5A87,0x5A88,0x5A89, -0x5A8A,0x5A8B,0x5A8C,0x5A8D,0x5A8E,0x5A8F,0x5A90,0x5A91, -0x5A93,0x5A94,0x5A95,0x5A96,0x5A97,0x5A98,0x5A99,0x5A9C, -0x5A9D,0x5A9E,0x5A9F,0x5AA0,0x5AA1,0x5AA2,0x5AA3,0x5AA4, -0x5AA5,0x5AA6,0x5AA7,0x5AA8,0x5AA9,0x5AAB,0x5AAC, 0, -0x5AAD,0x5AAE,0x5AAF,0x5AB0,0x5AB1,0x5AB4,0x5AB6,0x5AB7, -0x5AB9,0x5ABA,0x5ABB,0x5ABC,0x5ABD,0x5ABF,0x5AC0,0x5AC3, -0x5AC4,0x5AC5,0x5AC6,0x5AC7,0x5AC8,0x5ACA,0x5ACB,0x5ACD, -0x5ACE,0x5ACF,0x5AD0,0x5AD1,0x5AD3,0x5AD5,0x5AD7,0x5AD9, -0x5ADA,0x5ADB,0x5ADD,0x5ADE,0x5ADF,0x5AE2,0x5AE4,0x5AE5, -0x5AE7,0x5AE8,0x5AEA,0x5AEC,0x5AED,0x5AEE,0x5AEF,0x5AF0, -0x5AF2,0x5AF3,0x5AF4,0x5AF5,0x5AF6,0x5AF7,0x5AF8,0x5AF9, -0x5AFA,0x5AFB,0x5AFC,0x5AFD,0x5AFE,0x5AFF,0x5B00,0x5B01, -0x5B02,0x5B03,0x5B04,0x5B05,0x5B06,0x5B07,0x5B08,0x5B0A, -0x5B0B,0x5B0C,0x5B0D,0x5B0E,0x5B0F,0x5B10,0x5B11,0x5B12, -0x5B13,0x5B14,0x5B15,0x5B18,0x5B19,0x5B1A,0x5B1B,0x5B1C, -0x5B1D,0x5B1E,0x5B1F,0x5B20,0x5B21,0x5B22,0x5B23,0x5B24, -0x5B25,0x5B26,0x5B27,0x5B28,0x5B29,0x5B2A,0x5B2B,0x5B2C, -0x5B2D,0x5B2E,0x5B2F,0x5B30,0x5B31,0x5B33,0x5B35,0x5B36, -0x5B38,0x5B39,0x5B3A,0x5B3B,0x5B3C,0x5B3D,0x5B3E,0x5B3F, -0x5B41,0x5B42,0x5B43,0x5B44,0x5B45,0x5B46,0x5B47, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5B48,0x5B49,0x5B4A,0x5B4B,0x5B4C,0x5B4D,0x5B4E,0x5B4F, -0x5B52,0x5B56,0x5B5E,0x5B60,0x5B61,0x5B67,0x5B68,0x5B6B, -0x5B6D,0x5B6E,0x5B6F,0x5B72,0x5B74,0x5B76,0x5B77,0x5B78, -0x5B79,0x5B7B,0x5B7C,0x5B7E,0x5B7F,0x5B82,0x5B86,0x5B8A, -0x5B8D,0x5B8E,0x5B90,0x5B91,0x5B92,0x5B94,0x5B96,0x5B9F, -0x5BA7,0x5BA8,0x5BA9,0x5BAC,0x5BAD,0x5BAE,0x5BAF,0x5BB1, -0x5BB2,0x5BB7,0x5BBA,0x5BBB,0x5BBC,0x5BC0,0x5BC1,0x5BC3, -0x5BC8,0x5BC9,0x5BCA,0x5BCB,0x5BCD,0x5BCE,0x5BCF, 0, -0x5BD1,0x5BD4,0x5BD5,0x5BD6,0x5BD7,0x5BD8,0x5BD9,0x5BDA, -0x5BDB,0x5BDC,0x5BE0,0x5BE2,0x5BE3,0x5BE6,0x5BE7,0x5BE9, -0x5BEA,0x5BEB,0x5BEC,0x5BED,0x5BEF,0x5BF1,0x5BF2,0x5BF3, -0x5BF4,0x5BF5,0x5BF6,0x5BF7,0x5BFD,0x5BFE,0x5C00,0x5C02, -0x5C03,0x5C05,0x5C07,0x5C08,0x5C0B,0x5C0C,0x5C0D,0x5C0E, -0x5C10,0x5C12,0x5C13,0x5C17,0x5C19,0x5C1B,0x5C1E,0x5C1F, -0x5C20,0x5C21,0x5C23,0x5C26,0x5C28,0x5C29,0x5C2A,0x5C2B, -0x5C2D,0x5C2E,0x5C2F,0x5C30,0x5C32,0x5C33,0x5C35,0x5C36, -0x5C37,0x5C43,0x5C44,0x5C46,0x5C47,0x5C4C,0x5C4D,0x5C52, -0x5C53,0x5C54,0x5C56,0x5C57,0x5C58,0x5C5A,0x5C5B,0x5C5C, -0x5C5D,0x5C5F,0x5C62,0x5C64,0x5C67,0x5C68,0x5C69,0x5C6A, -0x5C6B,0x5C6C,0x5C6D,0x5C70,0x5C72,0x5C73,0x5C74,0x5C75, -0x5C76,0x5C77,0x5C78,0x5C7B,0x5C7C,0x5C7D,0x5C7E,0x5C80, -0x5C83,0x5C84,0x5C85,0x5C86,0x5C87,0x5C89,0x5C8A,0x5C8B, -0x5C8E,0x5C8F,0x5C92,0x5C93,0x5C95,0x5C9D,0x5C9E,0x5C9F, -0x5CA0,0x5CA1,0x5CA4,0x5CA5,0x5CA6,0x5CA7,0x5CA8, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5CAA,0x5CAE,0x5CAF,0x5CB0,0x5CB2,0x5CB4,0x5CB6,0x5CB9, -0x5CBA,0x5CBB,0x5CBC,0x5CBE,0x5CC0,0x5CC2,0x5CC3,0x5CC5, -0x5CC6,0x5CC7,0x5CC8,0x5CC9,0x5CCA,0x5CCC,0x5CCD,0x5CCE, -0x5CCF,0x5CD0,0x5CD1,0x5CD3,0x5CD4,0x5CD5,0x5CD6,0x5CD7, -0x5CD8,0x5CDA,0x5CDB,0x5CDC,0x5CDD,0x5CDE,0x5CDF,0x5CE0, -0x5CE2,0x5CE3,0x5CE7,0x5CE9,0x5CEB,0x5CEC,0x5CEE,0x5CEF, -0x5CF1,0x5CF2,0x5CF3,0x5CF4,0x5CF5,0x5CF6,0x5CF7,0x5CF8, -0x5CF9,0x5CFA,0x5CFC,0x5CFD,0x5CFE,0x5CFF,0x5D00, 0, -0x5D01,0x5D04,0x5D05,0x5D08,0x5D09,0x5D0A,0x5D0B,0x5D0C, -0x5D0D,0x5D0F,0x5D10,0x5D11,0x5D12,0x5D13,0x5D15,0x5D17, -0x5D18,0x5D19,0x5D1A,0x5D1C,0x5D1D,0x5D1F,0x5D20,0x5D21, -0x5D22,0x5D23,0x5D25,0x5D28,0x5D2A,0x5D2B,0x5D2C,0x5D2F, -0x5D30,0x5D31,0x5D32,0x5D33,0x5D35,0x5D36,0x5D37,0x5D38, -0x5D39,0x5D3A,0x5D3B,0x5D3C,0x5D3F,0x5D40,0x5D41,0x5D42, -0x5D43,0x5D44,0x5D45,0x5D46,0x5D48,0x5D49,0x5D4D,0x5D4E, -0x5D4F,0x5D50,0x5D51,0x5D52,0x5D53,0x5D54,0x5D55,0x5D56, -0x5D57,0x5D59,0x5D5A,0x5D5C,0x5D5E,0x5D5F,0x5D60,0x5D61, -0x5D62,0x5D63,0x5D64,0x5D65,0x5D66,0x5D67,0x5D68,0x5D6A, -0x5D6D,0x5D6E,0x5D70,0x5D71,0x5D72,0x5D73,0x5D75,0x5D76, -0x5D77,0x5D78,0x5D79,0x5D7A,0x5D7B,0x5D7C,0x5D7D,0x5D7E, -0x5D7F,0x5D80,0x5D81,0x5D83,0x5D84,0x5D85,0x5D86,0x5D87, -0x5D88,0x5D89,0x5D8A,0x5D8B,0x5D8C,0x5D8D,0x5D8E,0x5D8F, -0x5D90,0x5D91,0x5D92,0x5D93,0x5D94,0x5D95,0x5D96,0x5D97, -0x5D98,0x5D9A,0x5D9B,0x5D9C,0x5D9E,0x5D9F,0x5DA0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5DA1,0x5DA2,0x5DA3,0x5DA4,0x5DA5,0x5DA6,0x5DA7,0x5DA8, -0x5DA9,0x5DAA,0x5DAB,0x5DAC,0x5DAD,0x5DAE,0x5DAF,0x5DB0, -0x5DB1,0x5DB2,0x5DB3,0x5DB4,0x5DB5,0x5DB6,0x5DB8,0x5DB9, -0x5DBA,0x5DBB,0x5DBC,0x5DBD,0x5DBE,0x5DBF,0x5DC0,0x5DC1, -0x5DC2,0x5DC3,0x5DC4,0x5DC6,0x5DC7,0x5DC8,0x5DC9,0x5DCA, -0x5DCB,0x5DCC,0x5DCE,0x5DCF,0x5DD0,0x5DD1,0x5DD2,0x5DD3, -0x5DD4,0x5DD5,0x5DD6,0x5DD7,0x5DD8,0x5DD9,0x5DDA,0x5DDC, -0x5DDF,0x5DE0,0x5DE3,0x5DE4,0x5DEA,0x5DEC,0x5DED, 0, -0x5DF0,0x5DF5,0x5DF6,0x5DF8,0x5DF9,0x5DFA,0x5DFB,0x5DFC, -0x5DFF,0x5E00,0x5E04,0x5E07,0x5E09,0x5E0A,0x5E0B,0x5E0D, -0x5E0E,0x5E12,0x5E13,0x5E17,0x5E1E,0x5E1F,0x5E20,0x5E21, -0x5E22,0x5E23,0x5E24,0x5E25,0x5E28,0x5E29,0x5E2A,0x5E2B, -0x5E2C,0x5E2F,0x5E30,0x5E32,0x5E33,0x5E34,0x5E35,0x5E36, -0x5E39,0x5E3A,0x5E3E,0x5E3F,0x5E40,0x5E41,0x5E43,0x5E46, -0x5E47,0x5E48,0x5E49,0x5E4A,0x5E4B,0x5E4D,0x5E4E,0x5E4F, -0x5E50,0x5E51,0x5E52,0x5E53,0x5E56,0x5E57,0x5E58,0x5E59, -0x5E5A,0x5E5C,0x5E5D,0x5E5F,0x5E60,0x5E63,0x5E64,0x5E65, -0x5E66,0x5E67,0x5E68,0x5E69,0x5E6A,0x5E6B,0x5E6C,0x5E6D, -0x5E6E,0x5E6F,0x5E70,0x5E71,0x5E75,0x5E77,0x5E79,0x5E7E, -0x5E81,0x5E82,0x5E83,0x5E85,0x5E88,0x5E89,0x5E8C,0x5E8D, -0x5E8E,0x5E92,0x5E98,0x5E9B,0x5E9D,0x5EA1,0x5EA2,0x5EA3, -0x5EA4,0x5EA8,0x5EA9,0x5EAA,0x5EAB,0x5EAC,0x5EAE,0x5EAF, -0x5EB0,0x5EB1,0x5EB2,0x5EB4,0x5EBA,0x5EBB,0x5EBC,0x5EBD, -0x5EBF,0x5EC0,0x5EC1,0x5EC2,0x5EC3,0x5EC4,0x5EC5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x5EC6,0x5EC7,0x5EC8,0x5ECB,0x5ECC,0x5ECD,0x5ECE,0x5ECF, -0x5ED0,0x5ED4,0x5ED5,0x5ED7,0x5ED8,0x5ED9,0x5EDA,0x5EDC, -0x5EDD,0x5EDE,0x5EDF,0x5EE0,0x5EE1,0x5EE2,0x5EE3,0x5EE4, -0x5EE5,0x5EE6,0x5EE7,0x5EE9,0x5EEB,0x5EEC,0x5EED,0x5EEE, -0x5EEF,0x5EF0,0x5EF1,0x5EF2,0x5EF3,0x5EF5,0x5EF8,0x5EF9, -0x5EFB,0x5EFC,0x5EFD,0x5F05,0x5F06,0x5F07,0x5F09,0x5F0C, -0x5F0D,0x5F0E,0x5F10,0x5F12,0x5F14,0x5F16,0x5F19,0x5F1A, -0x5F1C,0x5F1D,0x5F1E,0x5F21,0x5F22,0x5F23,0x5F24, 0, -0x5F28,0x5F2B,0x5F2C,0x5F2E,0x5F30,0x5F32,0x5F33,0x5F34, -0x5F35,0x5F36,0x5F37,0x5F38,0x5F3B,0x5F3D,0x5F3E,0x5F3F, -0x5F41,0x5F42,0x5F43,0x5F44,0x5F45,0x5F46,0x5F47,0x5F48, -0x5F49,0x5F4A,0x5F4B,0x5F4C,0x5F4D,0x5F4E,0x5F4F,0x5F51, -0x5F54,0x5F59,0x5F5A,0x5F5B,0x5F5C,0x5F5E,0x5F5F,0x5F60, -0x5F63,0x5F65,0x5F67,0x5F68,0x5F6B,0x5F6E,0x5F6F,0x5F72, -0x5F74,0x5F75,0x5F76,0x5F78,0x5F7A,0x5F7D,0x5F7E,0x5F7F, -0x5F83,0x5F86,0x5F8D,0x5F8E,0x5F8F,0x5F91,0x5F93,0x5F94, -0x5F96,0x5F9A,0x5F9B,0x5F9D,0x5F9E,0x5F9F,0x5FA0,0x5FA2, -0x5FA3,0x5FA4,0x5FA5,0x5FA6,0x5FA7,0x5FA9,0x5FAB,0x5FAC, -0x5FAF,0x5FB0,0x5FB1,0x5FB2,0x5FB3,0x5FB4,0x5FB6,0x5FB8, -0x5FB9,0x5FBA,0x5FBB,0x5FBE,0x5FBF,0x5FC0,0x5FC1,0x5FC2, -0x5FC7,0x5FC8,0x5FCA,0x5FCB,0x5FCE,0x5FD3,0x5FD4,0x5FD5, -0x5FDA,0x5FDB,0x5FDC,0x5FDE,0x5FDF,0x5FE2,0x5FE3,0x5FE5, -0x5FE6,0x5FE8,0x5FE9,0x5FEC,0x5FEF,0x5FF0,0x5FF2,0x5FF3, -0x5FF4,0x5FF6,0x5FF7,0x5FF9,0x5FFA,0x5FFC,0x6007, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6008,0x6009,0x600B,0x600C,0x6010,0x6011,0x6013,0x6017, -0x6018,0x601A,0x601E,0x601F,0x6022,0x6023,0x6024,0x602C, -0x602D,0x602E,0x6030,0x6031,0x6032,0x6033,0x6034,0x6036, -0x6037,0x6038,0x6039,0x603A,0x603D,0x603E,0x6040,0x6044, -0x6045,0x6046,0x6047,0x6048,0x6049,0x604A,0x604C,0x604E, -0x604F,0x6051,0x6053,0x6054,0x6056,0x6057,0x6058,0x605B, -0x605C,0x605E,0x605F,0x6060,0x6061,0x6065,0x6066,0x606E, -0x6071,0x6072,0x6074,0x6075,0x6077,0x607E,0x6080, 0, -0x6081,0x6082,0x6085,0x6086,0x6087,0x6088,0x608A,0x608B, -0x608E,0x608F,0x6090,0x6091,0x6093,0x6095,0x6097,0x6098, -0x6099,0x609C,0x609E,0x60A1,0x60A2,0x60A4,0x60A5,0x60A7, -0x60A9,0x60AA,0x60AE,0x60B0,0x60B3,0x60B5,0x60B6,0x60B7, -0x60B9,0x60BA,0x60BD,0x60BE,0x60BF,0x60C0,0x60C1,0x60C2, -0x60C3,0x60C4,0x60C7,0x60C8,0x60C9,0x60CC,0x60CD,0x60CE, -0x60CF,0x60D0,0x60D2,0x60D3,0x60D4,0x60D6,0x60D7,0x60D9, -0x60DB,0x60DE,0x60E1,0x60E2,0x60E3,0x60E4,0x60E5,0x60EA, -0x60F1,0x60F2,0x60F5,0x60F7,0x60F8,0x60FB,0x60FC,0x60FD, -0x60FE,0x60FF,0x6102,0x6103,0x6104,0x6105,0x6107,0x610A, -0x610B,0x610C,0x6110,0x6111,0x6112,0x6113,0x6114,0x6116, -0x6117,0x6118,0x6119,0x611B,0x611C,0x611D,0x611E,0x6121, -0x6122,0x6125,0x6128,0x6129,0x612A,0x612C,0x612D,0x612E, -0x612F,0x6130,0x6131,0x6132,0x6133,0x6134,0x6135,0x6136, -0x6137,0x6138,0x6139,0x613A,0x613B,0x613C,0x613D,0x613E, -0x6140,0x6141,0x6142,0x6143,0x6144,0x6145,0x6146, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6147,0x6149,0x614B,0x614D,0x614F,0x6150,0x6152,0x6153, -0x6154,0x6156,0x6157,0x6158,0x6159,0x615A,0x615B,0x615C, -0x615E,0x615F,0x6160,0x6161,0x6163,0x6164,0x6165,0x6166, -0x6169,0x616A,0x616B,0x616C,0x616D,0x616E,0x616F,0x6171, -0x6172,0x6173,0x6174,0x6176,0x6178,0x6179,0x617A,0x617B, -0x617C,0x617D,0x617E,0x617F,0x6180,0x6181,0x6182,0x6183, -0x6184,0x6185,0x6186,0x6187,0x6188,0x6189,0x618A,0x618C, -0x618D,0x618F,0x6190,0x6191,0x6192,0x6193,0x6195, 0, -0x6196,0x6197,0x6198,0x6199,0x619A,0x619B,0x619C,0x619E, -0x619F,0x61A0,0x61A1,0x61A2,0x61A3,0x61A4,0x61A5,0x61A6, -0x61AA,0x61AB,0x61AD,0x61AE,0x61AF,0x61B0,0x61B1,0x61B2, -0x61B3,0x61B4,0x61B5,0x61B6,0x61B8,0x61B9,0x61BA,0x61BB, -0x61BC,0x61BD,0x61BF,0x61C0,0x61C1,0x61C3,0x61C4,0x61C5, -0x61C6,0x61C7,0x61C9,0x61CC,0x61CD,0x61CE,0x61CF,0x61D0, -0x61D3,0x61D5,0x61D6,0x61D7,0x61D8,0x61D9,0x61DA,0x61DB, -0x61DC,0x61DD,0x61DE,0x61DF,0x61E0,0x61E1,0x61E2,0x61E3, -0x61E4,0x61E5,0x61E7,0x61E8,0x61E9,0x61EA,0x61EB,0x61EC, -0x61ED,0x61EE,0x61EF,0x61F0,0x61F1,0x61F2,0x61F3,0x61F4, -0x61F6,0x61F7,0x61F8,0x61F9,0x61FA,0x61FB,0x61FC,0x61FD, -0x61FE,0x6200,0x6201,0x6202,0x6203,0x6204,0x6205,0x6207, -0x6209,0x6213,0x6214,0x6219,0x621C,0x621D,0x621E,0x6220, -0x6223,0x6226,0x6227,0x6228,0x6229,0x622B,0x622D,0x622F, -0x6230,0x6231,0x6232,0x6235,0x6236,0x6238,0x6239,0x623A, -0x623B,0x623C,0x6242,0x6244,0x6245,0x6246,0x624A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x624F,0x6250,0x6255,0x6256,0x6257,0x6259,0x625A,0x625C, -0x625D,0x625E,0x625F,0x6260,0x6261,0x6262,0x6264,0x6265, -0x6268,0x6271,0x6272,0x6274,0x6275,0x6277,0x6278,0x627A, -0x627B,0x627D,0x6281,0x6282,0x6283,0x6285,0x6286,0x6287, -0x6288,0x628B,0x628C,0x628D,0x628E,0x628F,0x6290,0x6294, -0x6299,0x629C,0x629D,0x629E,0x62A3,0x62A6,0x62A7,0x62A9, -0x62AA,0x62AD,0x62AE,0x62AF,0x62B0,0x62B2,0x62B3,0x62B4, -0x62B6,0x62B7,0x62B8,0x62BA,0x62BE,0x62C0,0x62C1, 0, -0x62C3,0x62CB,0x62CF,0x62D1,0x62D5,0x62DD,0x62DE,0x62E0, -0x62E1,0x62E4,0x62EA,0x62EB,0x62F0,0x62F2,0x62F5,0x62F8, -0x62F9,0x62FA,0x62FB,0x6300,0x6303,0x6304,0x6305,0x6306, -0x630A,0x630B,0x630C,0x630D,0x630F,0x6310,0x6312,0x6313, -0x6314,0x6315,0x6317,0x6318,0x6319,0x631C,0x6326,0x6327, -0x6329,0x632C,0x632D,0x632E,0x6330,0x6331,0x6333,0x6334, -0x6335,0x6336,0x6337,0x6338,0x633B,0x633C,0x633E,0x633F, -0x6340,0x6341,0x6344,0x6347,0x6348,0x634A,0x6351,0x6352, -0x6353,0x6354,0x6356,0x6357,0x6358,0x6359,0x635A,0x635B, -0x635C,0x635D,0x6360,0x6364,0x6365,0x6366,0x6368,0x636A, -0x636B,0x636C,0x636F,0x6370,0x6372,0x6373,0x6374,0x6375, -0x6378,0x6379,0x637C,0x637D,0x637E,0x637F,0x6381,0x6383, -0x6384,0x6385,0x6386,0x638B,0x638D,0x6391,0x6393,0x6394, -0x6395,0x6397,0x6399,0x639A,0x639B,0x639C,0x639D,0x639E, -0x639F,0x63A1,0x63A4,0x63A6,0x63AB,0x63AF,0x63B1,0x63B2, -0x63B5,0x63B6,0x63B9,0x63BB,0x63BD,0x63BF,0x63C0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x63C1,0x63C2,0x63C3,0x63C5,0x63C7,0x63C8,0x63CA,0x63CB, -0x63CC,0x63D1,0x63D3,0x63D4,0x63D5,0x63D7,0x63D8,0x63D9, -0x63DA,0x63DB,0x63DC,0x63DD,0x63DF,0x63E2,0x63E4,0x63E5, -0x63E6,0x63E7,0x63E8,0x63EB,0x63EC,0x63EE,0x63EF,0x63F0, -0x63F1,0x63F3,0x63F5,0x63F7,0x63F9,0x63FA,0x63FB,0x63FC, -0x63FE,0x6403,0x6404,0x6406,0x6407,0x6408,0x6409,0x640A, -0x640D,0x640E,0x6411,0x6412,0x6415,0x6416,0x6417,0x6418, -0x6419,0x641A,0x641D,0x641F,0x6422,0x6423,0x6424, 0, -0x6425,0x6427,0x6428,0x6429,0x642B,0x642E,0x642F,0x6430, -0x6431,0x6432,0x6433,0x6435,0x6436,0x6437,0x6438,0x6439, -0x643B,0x643C,0x643E,0x6440,0x6442,0x6443,0x6449,0x644B, -0x644C,0x644D,0x644E,0x644F,0x6450,0x6451,0x6453,0x6455, -0x6456,0x6457,0x6459,0x645A,0x645B,0x645C,0x645D,0x645F, -0x6460,0x6461,0x6462,0x6463,0x6464,0x6465,0x6466,0x6468, -0x646A,0x646B,0x646C,0x646E,0x646F,0x6470,0x6471,0x6472, -0x6473,0x6474,0x6475,0x6476,0x6477,0x647B,0x647C,0x647D, -0x647E,0x647F,0x6480,0x6481,0x6483,0x6486,0x6488,0x6489, -0x648A,0x648B,0x648C,0x648D,0x648E,0x648F,0x6490,0x6493, -0x6494,0x6497,0x6498,0x649A,0x649B,0x649C,0x649D,0x649F, -0x64A0,0x64A1,0x64A2,0x64A3,0x64A5,0x64A6,0x64A7,0x64A8, -0x64AA,0x64AB,0x64AF,0x64B1,0x64B2,0x64B3,0x64B4,0x64B6, -0x64B9,0x64BB,0x64BD,0x64BE,0x64BF,0x64C1,0x64C3,0x64C4, -0x64C6,0x64C7,0x64C8,0x64C9,0x64CA,0x64CB,0x64CC,0x64CF, -0x64D1,0x64D3,0x64D4,0x64D5,0x64D6,0x64D9,0x64DA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x64DB,0x64DC,0x64DD,0x64DF,0x64E0,0x64E1,0x64E3,0x64E5, -0x64E7,0x64E8,0x64E9,0x64EA,0x64EB,0x64EC,0x64ED,0x64EE, -0x64EF,0x64F0,0x64F1,0x64F2,0x64F3,0x64F4,0x64F5,0x64F6, -0x64F7,0x64F8,0x64F9,0x64FA,0x64FB,0x64FC,0x64FD,0x64FE, -0x64FF,0x6501,0x6502,0x6503,0x6504,0x6505,0x6506,0x6507, -0x6508,0x650A,0x650B,0x650C,0x650D,0x650E,0x650F,0x6510, -0x6511,0x6513,0x6514,0x6515,0x6516,0x6517,0x6519,0x651A, -0x651B,0x651C,0x651D,0x651E,0x651F,0x6520,0x6521, 0, -0x6522,0x6523,0x6524,0x6526,0x6527,0x6528,0x6529,0x652A, -0x652C,0x652D,0x6530,0x6531,0x6532,0x6533,0x6537,0x653A, -0x653C,0x653D,0x6540,0x6541,0x6542,0x6543,0x6544,0x6546, -0x6547,0x654A,0x654B,0x654D,0x654E,0x6550,0x6552,0x6553, -0x6554,0x6557,0x6558,0x655A,0x655C,0x655F,0x6560,0x6561, -0x6564,0x6565,0x6567,0x6568,0x6569,0x656A,0x656D,0x656E, -0x656F,0x6571,0x6573,0x6575,0x6576,0x6578,0x6579,0x657A, -0x657B,0x657C,0x657D,0x657E,0x657F,0x6580,0x6581,0x6582, -0x6583,0x6584,0x6585,0x6586,0x6588,0x6589,0x658A,0x658D, -0x658E,0x658F,0x6592,0x6594,0x6595,0x6596,0x6598,0x659A, -0x659D,0x659E,0x65A0,0x65A2,0x65A3,0x65A6,0x65A8,0x65AA, -0x65AC,0x65AE,0x65B1,0x65B2,0x65B3,0x65B4,0x65B5,0x65B6, -0x65B7,0x65B8,0x65BA,0x65BB,0x65BE,0x65BF,0x65C0,0x65C2, -0x65C7,0x65C8,0x65C9,0x65CA,0x65CD,0x65D0,0x65D1,0x65D3, -0x65D4,0x65D5,0x65D8,0x65D9,0x65DA,0x65DB,0x65DC,0x65DD, -0x65DE,0x65DF,0x65E1,0x65E3,0x65E4,0x65EA,0x65EB, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x65F2,0x65F3,0x65F4,0x65F5,0x65F8,0x65F9,0x65FB,0x65FC, -0x65FD,0x65FE,0x65FF,0x6601,0x6604,0x6605,0x6607,0x6608, -0x6609,0x660B,0x660D,0x6610,0x6611,0x6612,0x6616,0x6617, -0x6618,0x661A,0x661B,0x661C,0x661E,0x6621,0x6622,0x6623, -0x6624,0x6626,0x6629,0x662A,0x662B,0x662C,0x662E,0x6630, -0x6632,0x6633,0x6637,0x6638,0x6639,0x663A,0x663B,0x663D, -0x663F,0x6640,0x6642,0x6644,0x6645,0x6646,0x6647,0x6648, -0x6649,0x664A,0x664D,0x664E,0x6650,0x6651,0x6658, 0, -0x6659,0x665B,0x665C,0x665D,0x665E,0x6660,0x6662,0x6663, -0x6665,0x6667,0x6669,0x666A,0x666B,0x666C,0x666D,0x6671, -0x6672,0x6673,0x6675,0x6678,0x6679,0x667B,0x667C,0x667D, -0x667F,0x6680,0x6681,0x6683,0x6685,0x6686,0x6688,0x6689, -0x668A,0x668B,0x668D,0x668E,0x668F,0x6690,0x6692,0x6693, -0x6694,0x6695,0x6698,0x6699,0x669A,0x669B,0x669C,0x669E, -0x669F,0x66A0,0x66A1,0x66A2,0x66A3,0x66A4,0x66A5,0x66A6, -0x66A9,0x66AA,0x66AB,0x66AC,0x66AD,0x66AF,0x66B0,0x66B1, -0x66B2,0x66B3,0x66B5,0x66B6,0x66B7,0x66B8,0x66BA,0x66BB, -0x66BC,0x66BD,0x66BF,0x66C0,0x66C1,0x66C2,0x66C3,0x66C4, -0x66C5,0x66C6,0x66C7,0x66C8,0x66C9,0x66CA,0x66CB,0x66CC, -0x66CD,0x66CE,0x66CF,0x66D0,0x66D1,0x66D2,0x66D3,0x66D4, -0x66D5,0x66D6,0x66D7,0x66D8,0x66DA,0x66DE,0x66DF,0x66E0, -0x66E1,0x66E2,0x66E3,0x66E4,0x66E5,0x66E7,0x66E8,0x66EA, -0x66EB,0x66EC,0x66ED,0x66EE,0x66EF,0x66F1,0x66F5,0x66F6, -0x66F8,0x66FA,0x66FB,0x66FD,0x6701,0x6702,0x6703, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6704,0x6705,0x6706,0x6707,0x670C,0x670E,0x670F,0x6711, -0x6712,0x6713,0x6716,0x6718,0x6719,0x671A,0x671C,0x671E, -0x6720,0x6721,0x6722,0x6723,0x6724,0x6725,0x6727,0x6729, -0x672E,0x6730,0x6732,0x6733,0x6736,0x6737,0x6738,0x6739, -0x673B,0x673C,0x673E,0x673F,0x6741,0x6744,0x6745,0x6747, -0x674A,0x674B,0x674D,0x6752,0x6754,0x6755,0x6757,0x6758, -0x6759,0x675A,0x675B,0x675D,0x6762,0x6763,0x6764,0x6766, -0x6767,0x676B,0x676C,0x676E,0x6771,0x6774,0x6776, 0, -0x6778,0x6779,0x677A,0x677B,0x677D,0x6780,0x6782,0x6783, -0x6785,0x6786,0x6788,0x678A,0x678C,0x678D,0x678E,0x678F, -0x6791,0x6792,0x6793,0x6794,0x6796,0x6799,0x679B,0x679F, -0x67A0,0x67A1,0x67A4,0x67A6,0x67A9,0x67AC,0x67AE,0x67B1, -0x67B2,0x67B4,0x67B9,0x67BA,0x67BB,0x67BC,0x67BD,0x67BE, -0x67BF,0x67C0,0x67C2,0x67C5,0x67C6,0x67C7,0x67C8,0x67C9, -0x67CA,0x67CB,0x67CC,0x67CD,0x67CE,0x67D5,0x67D6,0x67D7, -0x67DB,0x67DF,0x67E1,0x67E3,0x67E4,0x67E6,0x67E7,0x67E8, -0x67EA,0x67EB,0x67ED,0x67EE,0x67F2,0x67F5,0x67F6,0x67F7, -0x67F8,0x67F9,0x67FA,0x67FB,0x67FC,0x67FE,0x6801,0x6802, -0x6803,0x6804,0x6806,0x680D,0x6810,0x6812,0x6814,0x6815, -0x6818,0x6819,0x681A,0x681B,0x681C,0x681E,0x681F,0x6820, -0x6822,0x6823,0x6824,0x6825,0x6826,0x6827,0x6828,0x682B, -0x682C,0x682D,0x682E,0x682F,0x6830,0x6831,0x6834,0x6835, -0x6836,0x683A,0x683B,0x683F,0x6847,0x684B,0x684D,0x684F, -0x6852,0x6856,0x6857,0x6858,0x6859,0x685A,0x685B, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x685C,0x685D,0x685E,0x685F,0x686A,0x686C,0x686D,0x686E, -0x686F,0x6870,0x6871,0x6872,0x6873,0x6875,0x6878,0x6879, -0x687A,0x687B,0x687C,0x687D,0x687E,0x687F,0x6880,0x6882, -0x6884,0x6887,0x6888,0x6889,0x688A,0x688B,0x688C,0x688D, -0x688E,0x6890,0x6891,0x6892,0x6894,0x6895,0x6896,0x6898, -0x6899,0x689A,0x689B,0x689C,0x689D,0x689E,0x689F,0x68A0, -0x68A1,0x68A3,0x68A4,0x68A5,0x68A9,0x68AA,0x68AB,0x68AC, -0x68AE,0x68B1,0x68B2,0x68B4,0x68B6,0x68B7,0x68B8, 0, -0x68B9,0x68BA,0x68BB,0x68BC,0x68BD,0x68BE,0x68BF,0x68C1, -0x68C3,0x68C4,0x68C5,0x68C6,0x68C7,0x68C8,0x68CA,0x68CC, -0x68CE,0x68CF,0x68D0,0x68D1,0x68D3,0x68D4,0x68D6,0x68D7, -0x68D9,0x68DB,0x68DC,0x68DD,0x68DE,0x68DF,0x68E1,0x68E2, -0x68E4,0x68E5,0x68E6,0x68E7,0x68E8,0x68E9,0x68EA,0x68EB, -0x68EC,0x68ED,0x68EF,0x68F2,0x68F3,0x68F4,0x68F6,0x68F7, -0x68F8,0x68FB,0x68FD,0x68FE,0x68FF,0x6900,0x6902,0x6903, -0x6904,0x6906,0x6907,0x6908,0x6909,0x690A,0x690C,0x690F, -0x6911,0x6913,0x6914,0x6915,0x6916,0x6917,0x6918,0x6919, -0x691A,0x691B,0x691C,0x691D,0x691E,0x6921,0x6922,0x6923, -0x6925,0x6926,0x6927,0x6928,0x6929,0x692A,0x692B,0x692C, -0x692E,0x692F,0x6931,0x6932,0x6933,0x6935,0x6936,0x6937, -0x6938,0x693A,0x693B,0x693C,0x693E,0x6940,0x6941,0x6943, -0x6944,0x6945,0x6946,0x6947,0x6948,0x6949,0x694A,0x694B, -0x694C,0x694D,0x694E,0x694F,0x6950,0x6951,0x6952,0x6953, -0x6955,0x6956,0x6958,0x6959,0x695B,0x695C,0x695F, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6961,0x6962,0x6964,0x6965,0x6967,0x6968,0x6969,0x696A, -0x696C,0x696D,0x696F,0x6970,0x6972,0x6973,0x6974,0x6975, -0x6976,0x697A,0x697B,0x697D,0x697E,0x697F,0x6981,0x6983, -0x6985,0x698A,0x698B,0x698C,0x698E,0x698F,0x6990,0x6991, -0x6992,0x6993,0x6996,0x6997,0x6999,0x699A,0x699D,0x699E, -0x699F,0x69A0,0x69A1,0x69A2,0x69A3,0x69A4,0x69A5,0x69A6, -0x69A9,0x69AA,0x69AC,0x69AE,0x69AF,0x69B0,0x69B2,0x69B3, -0x69B5,0x69B6,0x69B8,0x69B9,0x69BA,0x69BC,0x69BD, 0, -0x69BE,0x69BF,0x69C0,0x69C2,0x69C3,0x69C4,0x69C5,0x69C6, -0x69C7,0x69C8,0x69C9,0x69CB,0x69CD,0x69CF,0x69D1,0x69D2, -0x69D3,0x69D5,0x69D6,0x69D7,0x69D8,0x69D9,0x69DA,0x69DC, -0x69DD,0x69DE,0x69E1,0x69E2,0x69E3,0x69E4,0x69E5,0x69E6, -0x69E7,0x69E8,0x69E9,0x69EA,0x69EB,0x69EC,0x69EE,0x69EF, -0x69F0,0x69F1,0x69F3,0x69F4,0x69F5,0x69F6,0x69F7,0x69F8, -0x69F9,0x69FA,0x69FB,0x69FC,0x69FE,0x6A00,0x6A01,0x6A02, -0x6A03,0x6A04,0x6A05,0x6A06,0x6A07,0x6A08,0x6A09,0x6A0B, -0x6A0C,0x6A0D,0x6A0E,0x6A0F,0x6A10,0x6A11,0x6A12,0x6A13, -0x6A14,0x6A15,0x6A16,0x6A19,0x6A1A,0x6A1B,0x6A1C,0x6A1D, -0x6A1E,0x6A20,0x6A22,0x6A23,0x6A24,0x6A25,0x6A26,0x6A27, -0x6A29,0x6A2B,0x6A2C,0x6A2D,0x6A2E,0x6A30,0x6A32,0x6A33, -0x6A34,0x6A36,0x6A37,0x6A38,0x6A39,0x6A3A,0x6A3B,0x6A3C, -0x6A3F,0x6A40,0x6A41,0x6A42,0x6A43,0x6A45,0x6A46,0x6A48, -0x6A49,0x6A4A,0x6A4B,0x6A4C,0x6A4D,0x6A4E,0x6A4F,0x6A51, -0x6A52,0x6A53,0x6A54,0x6A55,0x6A56,0x6A57,0x6A5A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6A5C,0x6A5D,0x6A5E,0x6A5F,0x6A60,0x6A62,0x6A63,0x6A64, -0x6A66,0x6A67,0x6A68,0x6A69,0x6A6A,0x6A6B,0x6A6C,0x6A6D, -0x6A6E,0x6A6F,0x6A70,0x6A72,0x6A73,0x6A74,0x6A75,0x6A76, -0x6A77,0x6A78,0x6A7A,0x6A7B,0x6A7D,0x6A7E,0x6A7F,0x6A81, -0x6A82,0x6A83,0x6A85,0x6A86,0x6A87,0x6A88,0x6A89,0x6A8A, -0x6A8B,0x6A8C,0x6A8D,0x6A8F,0x6A92,0x6A93,0x6A94,0x6A95, -0x6A96,0x6A98,0x6A99,0x6A9A,0x6A9B,0x6A9C,0x6A9D,0x6A9E, -0x6A9F,0x6AA1,0x6AA2,0x6AA3,0x6AA4,0x6AA5,0x6AA6, 0, -0x6AA7,0x6AA8,0x6AAA,0x6AAD,0x6AAE,0x6AAF,0x6AB0,0x6AB1, -0x6AB2,0x6AB3,0x6AB4,0x6AB5,0x6AB6,0x6AB7,0x6AB8,0x6AB9, -0x6ABA,0x6ABB,0x6ABC,0x6ABD,0x6ABE,0x6ABF,0x6AC0,0x6AC1, -0x6AC2,0x6AC3,0x6AC4,0x6AC5,0x6AC6,0x6AC7,0x6AC8,0x6AC9, -0x6ACA,0x6ACB,0x6ACC,0x6ACD,0x6ACE,0x6ACF,0x6AD0,0x6AD1, -0x6AD2,0x6AD3,0x6AD4,0x6AD5,0x6AD6,0x6AD7,0x6AD8,0x6AD9, -0x6ADA,0x6ADB,0x6ADC,0x6ADD,0x6ADE,0x6ADF,0x6AE0,0x6AE1, -0x6AE2,0x6AE3,0x6AE4,0x6AE5,0x6AE6,0x6AE7,0x6AE8,0x6AE9, -0x6AEA,0x6AEB,0x6AEC,0x6AED,0x6AEE,0x6AEF,0x6AF0,0x6AF1, -0x6AF2,0x6AF3,0x6AF4,0x6AF5,0x6AF6,0x6AF7,0x6AF8,0x6AF9, -0x6AFA,0x6AFB,0x6AFC,0x6AFD,0x6AFE,0x6AFF,0x6B00,0x6B01, -0x6B02,0x6B03,0x6B04,0x6B05,0x6B06,0x6B07,0x6B08,0x6B09, -0x6B0A,0x6B0B,0x6B0C,0x6B0D,0x6B0E,0x6B0F,0x6B10,0x6B11, -0x6B12,0x6B13,0x6B14,0x6B15,0x6B16,0x6B17,0x6B18,0x6B19, -0x6B1A,0x6B1B,0x6B1C,0x6B1D,0x6B1E,0x6B1F,0x6B25,0x6B26, -0x6B28,0x6B29,0x6B2A,0x6B2B,0x6B2C,0x6B2D,0x6B2E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6B2F,0x6B30,0x6B31,0x6B33,0x6B34,0x6B35,0x6B36,0x6B38, -0x6B3B,0x6B3C,0x6B3D,0x6B3F,0x6B40,0x6B41,0x6B42,0x6B44, -0x6B45,0x6B48,0x6B4A,0x6B4B,0x6B4D,0x6B4E,0x6B4F,0x6B50, -0x6B51,0x6B52,0x6B53,0x6B54,0x6B55,0x6B56,0x6B57,0x6B58, -0x6B5A,0x6B5B,0x6B5C,0x6B5D,0x6B5E,0x6B5F,0x6B60,0x6B61, -0x6B68,0x6B69,0x6B6B,0x6B6C,0x6B6D,0x6B6E,0x6B6F,0x6B70, -0x6B71,0x6B72,0x6B73,0x6B74,0x6B75,0x6B76,0x6B77,0x6B78, -0x6B7A,0x6B7D,0x6B7E,0x6B7F,0x6B80,0x6B85,0x6B88, 0, -0x6B8C,0x6B8E,0x6B8F,0x6B90,0x6B91,0x6B94,0x6B95,0x6B97, -0x6B98,0x6B99,0x6B9C,0x6B9D,0x6B9E,0x6B9F,0x6BA0,0x6BA2, -0x6BA3,0x6BA4,0x6BA5,0x6BA6,0x6BA7,0x6BA8,0x6BA9,0x6BAB, -0x6BAC,0x6BAD,0x6BAE,0x6BAF,0x6BB0,0x6BB1,0x6BB2,0x6BB6, -0x6BB8,0x6BB9,0x6BBA,0x6BBB,0x6BBC,0x6BBD,0x6BBE,0x6BC0, -0x6BC3,0x6BC4,0x6BC6,0x6BC7,0x6BC8,0x6BC9,0x6BCA,0x6BCC, -0x6BCE,0x6BD0,0x6BD1,0x6BD8,0x6BDA,0x6BDC,0x6BDD,0x6BDE, -0x6BDF,0x6BE0,0x6BE2,0x6BE3,0x6BE4,0x6BE5,0x6BE6,0x6BE7, -0x6BE8,0x6BE9,0x6BEC,0x6BED,0x6BEE,0x6BF0,0x6BF1,0x6BF2, -0x6BF4,0x6BF6,0x6BF7,0x6BF8,0x6BFA,0x6BFB,0x6BFC,0x6BFE, -0x6BFF,0x6C00,0x6C01,0x6C02,0x6C03,0x6C04,0x6C08,0x6C09, -0x6C0A,0x6C0B,0x6C0C,0x6C0E,0x6C12,0x6C17,0x6C1C,0x6C1D, -0x6C1E,0x6C20,0x6C23,0x6C25,0x6C2B,0x6C2C,0x6C2D,0x6C31, -0x6C33,0x6C36,0x6C37,0x6C39,0x6C3A,0x6C3B,0x6C3C,0x6C3E, -0x6C3F,0x6C43,0x6C44,0x6C45,0x6C48,0x6C4B,0x6C4C,0x6C4D, -0x6C4E,0x6C4F,0x6C51,0x6C52,0x6C53,0x6C56,0x6C58, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6C59,0x6C5A,0x6C62,0x6C63,0x6C65,0x6C66,0x6C67,0x6C6B, -0x6C6C,0x6C6D,0x6C6E,0x6C6F,0x6C71,0x6C73,0x6C75,0x6C77, -0x6C78,0x6C7A,0x6C7B,0x6C7C,0x6C7F,0x6C80,0x6C84,0x6C87, -0x6C8A,0x6C8B,0x6C8D,0x6C8E,0x6C91,0x6C92,0x6C95,0x6C96, -0x6C97,0x6C98,0x6C9A,0x6C9C,0x6C9D,0x6C9E,0x6CA0,0x6CA2, -0x6CA8,0x6CAC,0x6CAF,0x6CB0,0x6CB4,0x6CB5,0x6CB6,0x6CB7, -0x6CBA,0x6CC0,0x6CC1,0x6CC2,0x6CC3,0x6CC6,0x6CC7,0x6CC8, -0x6CCB,0x6CCD,0x6CCE,0x6CCF,0x6CD1,0x6CD2,0x6CD8, 0, -0x6CD9,0x6CDA,0x6CDC,0x6CDD,0x6CDF,0x6CE4,0x6CE6,0x6CE7, -0x6CE9,0x6CEC,0x6CED,0x6CF2,0x6CF4,0x6CF9,0x6CFF,0x6D00, -0x6D02,0x6D03,0x6D05,0x6D06,0x6D08,0x6D09,0x6D0A,0x6D0D, -0x6D0F,0x6D10,0x6D11,0x6D13,0x6D14,0x6D15,0x6D16,0x6D18, -0x6D1C,0x6D1D,0x6D1F,0x6D20,0x6D21,0x6D22,0x6D23,0x6D24, -0x6D26,0x6D28,0x6D29,0x6D2C,0x6D2D,0x6D2F,0x6D30,0x6D34, -0x6D36,0x6D37,0x6D38,0x6D3A,0x6D3F,0x6D40,0x6D42,0x6D44, -0x6D49,0x6D4C,0x6D50,0x6D55,0x6D56,0x6D57,0x6D58,0x6D5B, -0x6D5D,0x6D5F,0x6D61,0x6D62,0x6D64,0x6D65,0x6D67,0x6D68, -0x6D6B,0x6D6C,0x6D6D,0x6D70,0x6D71,0x6D72,0x6D73,0x6D75, -0x6D76,0x6D79,0x6D7A,0x6D7B,0x6D7D,0x6D7E,0x6D7F,0x6D80, -0x6D81,0x6D83,0x6D84,0x6D86,0x6D87,0x6D8A,0x6D8B,0x6D8D, -0x6D8F,0x6D90,0x6D92,0x6D96,0x6D97,0x6D98,0x6D99,0x6D9A, -0x6D9C,0x6DA2,0x6DA5,0x6DAC,0x6DAD,0x6DB0,0x6DB1,0x6DB3, -0x6DB4,0x6DB6,0x6DB7,0x6DB9,0x6DBA,0x6DBB,0x6DBC,0x6DBD, -0x6DBE,0x6DC1,0x6DC2,0x6DC3,0x6DC8,0x6DC9,0x6DCA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6DCD,0x6DCE,0x6DCF,0x6DD0,0x6DD2,0x6DD3,0x6DD4,0x6DD5, -0x6DD7,0x6DDA,0x6DDB,0x6DDC,0x6DDF,0x6DE2,0x6DE3,0x6DE5, -0x6DE7,0x6DE8,0x6DE9,0x6DEA,0x6DED,0x6DEF,0x6DF0,0x6DF2, -0x6DF4,0x6DF5,0x6DF6,0x6DF8,0x6DFA,0x6DFD,0x6DFE,0x6DFF, -0x6E00,0x6E01,0x6E02,0x6E03,0x6E04,0x6E06,0x6E07,0x6E08, -0x6E09,0x6E0B,0x6E0F,0x6E12,0x6E13,0x6E15,0x6E18,0x6E19, -0x6E1B,0x6E1C,0x6E1E,0x6E1F,0x6E22,0x6E26,0x6E27,0x6E28, -0x6E2A,0x6E2C,0x6E2E,0x6E30,0x6E31,0x6E33,0x6E35, 0, -0x6E36,0x6E37,0x6E39,0x6E3B,0x6E3C,0x6E3D,0x6E3E,0x6E3F, -0x6E40,0x6E41,0x6E42,0x6E45,0x6E46,0x6E47,0x6E48,0x6E49, -0x6E4A,0x6E4B,0x6E4C,0x6E4F,0x6E50,0x6E51,0x6E52,0x6E55, -0x6E57,0x6E59,0x6E5A,0x6E5C,0x6E5D,0x6E5E,0x6E60,0x6E61, -0x6E62,0x6E63,0x6E64,0x6E65,0x6E66,0x6E67,0x6E68,0x6E69, -0x6E6A,0x6E6C,0x6E6D,0x6E6F,0x6E70,0x6E71,0x6E72,0x6E73, -0x6E74,0x6E75,0x6E76,0x6E77,0x6E78,0x6E79,0x6E7A,0x6E7B, -0x6E7C,0x6E7D,0x6E80,0x6E81,0x6E82,0x6E84,0x6E87,0x6E88, -0x6E8A,0x6E8B,0x6E8C,0x6E8D,0x6E8E,0x6E91,0x6E92,0x6E93, -0x6E94,0x6E95,0x6E96,0x6E97,0x6E99,0x6E9A,0x6E9B,0x6E9D, -0x6E9E,0x6EA0,0x6EA1,0x6EA3,0x6EA4,0x6EA6,0x6EA8,0x6EA9, -0x6EAB,0x6EAC,0x6EAD,0x6EAE,0x6EB0,0x6EB3,0x6EB5,0x6EB8, -0x6EB9,0x6EBC,0x6EBE,0x6EBF,0x6EC0,0x6EC3,0x6EC4,0x6EC5, -0x6EC6,0x6EC8,0x6EC9,0x6ECA,0x6ECC,0x6ECD,0x6ECE,0x6ED0, -0x6ED2,0x6ED6,0x6ED8,0x6ED9,0x6EDB,0x6EDC,0x6EDD,0x6EE3, -0x6EE7,0x6EEA,0x6EEB,0x6EEC,0x6EED,0x6EEE,0x6EEF, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6EF0,0x6EF1,0x6EF2,0x6EF3,0x6EF5,0x6EF6,0x6EF7,0x6EF8, -0x6EFA,0x6EFB,0x6EFC,0x6EFD,0x6EFE,0x6EFF,0x6F00,0x6F01, -0x6F03,0x6F04,0x6F05,0x6F07,0x6F08,0x6F0A,0x6F0B,0x6F0C, -0x6F0D,0x6F0E,0x6F10,0x6F11,0x6F12,0x6F16,0x6F17,0x6F18, -0x6F19,0x6F1A,0x6F1B,0x6F1C,0x6F1D,0x6F1E,0x6F1F,0x6F21, -0x6F22,0x6F23,0x6F25,0x6F26,0x6F27,0x6F28,0x6F2C,0x6F2E, -0x6F30,0x6F32,0x6F34,0x6F35,0x6F37,0x6F38,0x6F39,0x6F3A, -0x6F3B,0x6F3C,0x6F3D,0x6F3F,0x6F40,0x6F41,0x6F42, 0, -0x6F43,0x6F44,0x6F45,0x6F48,0x6F49,0x6F4A,0x6F4C,0x6F4E, -0x6F4F,0x6F50,0x6F51,0x6F52,0x6F53,0x6F54,0x6F55,0x6F56, -0x6F57,0x6F59,0x6F5A,0x6F5B,0x6F5D,0x6F5F,0x6F60,0x6F61, -0x6F63,0x6F64,0x6F65,0x6F67,0x6F68,0x6F69,0x6F6A,0x6F6B, -0x6F6C,0x6F6F,0x6F70,0x6F71,0x6F73,0x6F75,0x6F76,0x6F77, -0x6F79,0x6F7B,0x6F7D,0x6F7E,0x6F7F,0x6F80,0x6F81,0x6F82, -0x6F83,0x6F85,0x6F86,0x6F87,0x6F8A,0x6F8B,0x6F8F,0x6F90, -0x6F91,0x6F92,0x6F93,0x6F94,0x6F95,0x6F96,0x6F97,0x6F98, -0x6F99,0x6F9A,0x6F9B,0x6F9D,0x6F9E,0x6F9F,0x6FA0,0x6FA2, -0x6FA3,0x6FA4,0x6FA5,0x6FA6,0x6FA8,0x6FA9,0x6FAA,0x6FAB, -0x6FAC,0x6FAD,0x6FAE,0x6FAF,0x6FB0,0x6FB1,0x6FB2,0x6FB4, -0x6FB5,0x6FB7,0x6FB8,0x6FBA,0x6FBB,0x6FBC,0x6FBD,0x6FBE, -0x6FBF,0x6FC1,0x6FC3,0x6FC4,0x6FC5,0x6FC6,0x6FC7,0x6FC8, -0x6FCA,0x6FCB,0x6FCC,0x6FCD,0x6FCE,0x6FCF,0x6FD0,0x6FD3, -0x6FD4,0x6FD5,0x6FD6,0x6FD7,0x6FD8,0x6FD9,0x6FDA,0x6FDB, -0x6FDC,0x6FDD,0x6FDF,0x6FE2,0x6FE3,0x6FE4,0x6FE5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x6FE6,0x6FE7,0x6FE8,0x6FE9,0x6FEA,0x6FEB,0x6FEC,0x6FED, -0x6FF0,0x6FF1,0x6FF2,0x6FF3,0x6FF4,0x6FF5,0x6FF6,0x6FF7, -0x6FF8,0x6FF9,0x6FFA,0x6FFB,0x6FFC,0x6FFD,0x6FFE,0x6FFF, -0x7000,0x7001,0x7002,0x7003,0x7004,0x7005,0x7006,0x7007, -0x7008,0x7009,0x700A,0x700B,0x700C,0x700D,0x700E,0x700F, -0x7010,0x7012,0x7013,0x7014,0x7015,0x7016,0x7017,0x7018, -0x7019,0x701C,0x701D,0x701E,0x701F,0x7020,0x7021,0x7022, -0x7024,0x7025,0x7026,0x7027,0x7028,0x7029,0x702A, 0, -0x702B,0x702C,0x702D,0x702E,0x702F,0x7030,0x7031,0x7032, -0x7033,0x7034,0x7036,0x7037,0x7038,0x703A,0x703B,0x703C, -0x703D,0x703E,0x703F,0x7040,0x7041,0x7042,0x7043,0x7044, -0x7045,0x7046,0x7047,0x7048,0x7049,0x704A,0x704B,0x704D, -0x704E,0x7050,0x7051,0x7052,0x7053,0x7054,0x7055,0x7056, -0x7057,0x7058,0x7059,0x705A,0x705B,0x705C,0x705D,0x705F, -0x7060,0x7061,0x7062,0x7063,0x7064,0x7065,0x7066,0x7067, -0x7068,0x7069,0x706A,0x706E,0x7071,0x7072,0x7073,0x7074, -0x7077,0x7079,0x707A,0x707B,0x707D,0x7081,0x7082,0x7083, -0x7084,0x7086,0x7087,0x7088,0x708B,0x708C,0x708D,0x708F, -0x7090,0x7091,0x7093,0x7097,0x7098,0x709A,0x709B,0x709E, -0x709F,0x70A0,0x70A1,0x70A2,0x70A3,0x70A4,0x70A5,0x70A6, -0x70A7,0x70A8,0x70A9,0x70AA,0x70B0,0x70B2,0x70B4,0x70B5, -0x70B6,0x70BA,0x70BE,0x70BF,0x70C4,0x70C5,0x70C6,0x70C7, -0x70C9,0x70CB,0x70CC,0x70CD,0x70CE,0x70CF,0x70D0,0x70D1, -0x70D2,0x70D3,0x70D4,0x70D5,0x70D6,0x70D7,0x70DA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x70DC,0x70DD,0x70DE,0x70E0,0x70E1,0x70E2,0x70E3,0x70E5, -0x70EA,0x70EE,0x70F0,0x70F1,0x70F2,0x70F3,0x70F4,0x70F5, -0x70F6,0x70F8,0x70FA,0x70FB,0x70FC,0x70FE,0x70FF,0x7100, -0x7101,0x7102,0x7103,0x7104,0x7105,0x7106,0x7107,0x7108, -0x710B,0x710C,0x710D,0x710E,0x710F,0x7111,0x7112,0x7114, -0x7117,0x711B,0x711C,0x711D,0x711E,0x711F,0x7120,0x7121, -0x7122,0x7123,0x7124,0x7125,0x7127,0x7128,0x7129,0x712A, -0x712B,0x712C,0x712D,0x712E,0x7132,0x7133,0x7134, 0, -0x7135,0x7137,0x7138,0x7139,0x713A,0x713B,0x713C,0x713D, -0x713E,0x713F,0x7140,0x7141,0x7142,0x7143,0x7144,0x7146, -0x7147,0x7148,0x7149,0x714B,0x714D,0x714F,0x7150,0x7151, -0x7152,0x7153,0x7154,0x7155,0x7156,0x7157,0x7158,0x7159, -0x715A,0x715B,0x715D,0x715F,0x7160,0x7161,0x7162,0x7163, -0x7165,0x7169,0x716A,0x716B,0x716C,0x716D,0x716F,0x7170, -0x7171,0x7174,0x7175,0x7176,0x7177,0x7179,0x717B,0x717C, -0x717E,0x717F,0x7180,0x7181,0x7182,0x7183,0x7185,0x7186, -0x7187,0x7188,0x7189,0x718B,0x718C,0x718D,0x718E,0x7190, -0x7191,0x7192,0x7193,0x7195,0x7196,0x7197,0x719A,0x719B, -0x719C,0x719D,0x719E,0x71A1,0x71A2,0x71A3,0x71A4,0x71A5, -0x71A6,0x71A7,0x71A9,0x71AA,0x71AB,0x71AD,0x71AE,0x71AF, -0x71B0,0x71B1,0x71B2,0x71B4,0x71B6,0x71B7,0x71B8,0x71BA, -0x71BB,0x71BC,0x71BD,0x71BE,0x71BF,0x71C0,0x71C1,0x71C2, -0x71C4,0x71C5,0x71C6,0x71C7,0x71C8,0x71C9,0x71CA,0x71CB, -0x71CC,0x71CD,0x71CF,0x71D0,0x71D1,0x71D2,0x71D3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x71D6,0x71D7,0x71D8,0x71D9,0x71DA,0x71DB,0x71DC,0x71DD, -0x71DE,0x71DF,0x71E1,0x71E2,0x71E3,0x71E4,0x71E6,0x71E8, -0x71E9,0x71EA,0x71EB,0x71EC,0x71ED,0x71EF,0x71F0,0x71F1, -0x71F2,0x71F3,0x71F4,0x71F5,0x71F6,0x71F7,0x71F8,0x71FA, -0x71FB,0x71FC,0x71FD,0x71FE,0x71FF,0x7200,0x7201,0x7202, -0x7203,0x7204,0x7205,0x7207,0x7208,0x7209,0x720A,0x720B, -0x720C,0x720D,0x720E,0x720F,0x7210,0x7211,0x7212,0x7213, -0x7214,0x7215,0x7216,0x7217,0x7218,0x7219,0x721A, 0, -0x721B,0x721C,0x721E,0x721F,0x7220,0x7221,0x7222,0x7223, -0x7224,0x7225,0x7226,0x7227,0x7229,0x722B,0x722D,0x722E, -0x722F,0x7232,0x7233,0x7234,0x723A,0x723C,0x723E,0x7240, -0x7241,0x7242,0x7243,0x7244,0x7245,0x7246,0x7249,0x724A, -0x724B,0x724E,0x724F,0x7250,0x7251,0x7253,0x7254,0x7255, -0x7257,0x7258,0x725A,0x725C,0x725E,0x7260,0x7263,0x7264, -0x7265,0x7268,0x726A,0x726B,0x726C,0x726D,0x7270,0x7271, -0x7273,0x7274,0x7276,0x7277,0x7278,0x727B,0x727C,0x727D, -0x7282,0x7283,0x7285,0x7286,0x7287,0x7288,0x7289,0x728C, -0x728E,0x7290,0x7291,0x7293,0x7294,0x7295,0x7296,0x7297, -0x7298,0x7299,0x729A,0x729B,0x729C,0x729D,0x729E,0x72A0, -0x72A1,0x72A2,0x72A3,0x72A4,0x72A5,0x72A6,0x72A7,0x72A8, -0x72A9,0x72AA,0x72AB,0x72AE,0x72B1,0x72B2,0x72B3,0x72B5, -0x72BA,0x72BB,0x72BC,0x72BD,0x72BE,0x72BF,0x72C0,0x72C5, -0x72C6,0x72C7,0x72C9,0x72CA,0x72CB,0x72CC,0x72CF,0x72D1, -0x72D3,0x72D4,0x72D5,0x72D6,0x72D8,0x72DA,0x72DB, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x3000,0x3001,0x3002,0x00B7,0x02C9,0x02C7,0x00A8, -0x3003,0x3005,0x2014,0xFF5E,0x2016,0x2026,0x2018,0x2019, -0x201C,0x201D,0x3014,0x3015,0x3008,0x3009,0x300A,0x300B, -0x300C,0x300D,0x300E,0x300F,0x3016,0x3017,0x3010,0x3011, -0x00B1,0x00D7,0x00F7,0x2236,0x2227,0x2228,0x2211,0x220F, -0x222A,0x2229,0x2208,0x2237,0x221A,0x22A5,0x2225,0x2220, -0x2312,0x2299,0x222B,0x222E,0x2261,0x224C,0x2248,0x223D, -0x221D,0x2260,0x226E,0x226F,0x2264,0x2265,0x221E,0x2235, -0x2234,0x2642,0x2640,0x00B0,0x2032,0x2033,0x2103,0xFF04, -0x00A4,0xFFE0,0xFFE1,0x2030,0x00A7,0x2116,0x2606,0x2605, -0x25CB,0x25CF,0x25CE,0x25C7,0x25C6,0x25A1,0x25A0,0x25B3, -0x25B2,0x203B,0x2192,0x2190,0x2191,0x2193,0x3013, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176, -0x2177,0x2178,0x2179, 0, 0, 0, 0, 0, - 0,0x2488,0x2489,0x248A,0x248B,0x248C,0x248D,0x248E, -0x248F,0x2490,0x2491,0x2492,0x2493,0x2494,0x2495,0x2496, -0x2497,0x2498,0x2499,0x249A,0x249B,0x2474,0x2475,0x2476, -0x2477,0x2478,0x2479,0x247A,0x247B,0x247C,0x247D,0x247E, -0x247F,0x2480,0x2481,0x2482,0x2483,0x2484,0x2485,0x2486, -0x2487,0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466, -0x2467,0x2468,0x2469, 0, 0,0x3220,0x3221,0x3222, -0x3223,0x3224,0x3225,0x3226,0x3227,0x3228,0x3229, 0, - 0,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166, -0x2167,0x2168,0x2169,0x216A,0x216B, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xFF01,0xFF02,0xFF03,0xFFE5,0xFF05,0xFF06,0xFF07, -0xFF08,0xFF09,0xFF0A,0xFF0B,0xFF0C,0xFF0D,0xFF0E,0xFF0F, -0xFF10,0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17, -0xFF18,0xFF19,0xFF1A,0xFF1B,0xFF1C,0xFF1D,0xFF1E,0xFF1F, -0xFF20,0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27, -0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F, -0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37, -0xFF38,0xFF39,0xFF3A,0xFF3B,0xFF3C,0xFF3D,0xFF3E,0xFF3F, -0xFF40,0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47, -0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F, -0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57, -0xFF58,0xFF59,0xFF5A,0xFF5B,0xFF5C,0xFF5D,0xFFE3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047, -0x3048,0x3049,0x304A,0x304B,0x304C,0x304D,0x304E,0x304F, -0x3050,0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057, -0x3058,0x3059,0x305A,0x305B,0x305C,0x305D,0x305E,0x305F, -0x3060,0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067, -0x3068,0x3069,0x306A,0x306B,0x306C,0x306D,0x306E,0x306F, -0x3070,0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,0x3077, -0x3078,0x3079,0x307A,0x307B,0x307C,0x307D,0x307E,0x307F, -0x3080,0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,0x3087, -0x3088,0x3089,0x308A,0x308B,0x308C,0x308D,0x308E,0x308F, -0x3090,0x3091,0x3092,0x3093, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7, -0x30A8,0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF, -0x30B0,0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7, -0x30B8,0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF, -0x30C0,0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7, -0x30C8,0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF, -0x30D0,0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7, -0x30D8,0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF, -0x30E0,0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7, -0x30E8,0x30E9,0x30EA,0x30EB,0x30EC,0x30ED,0x30EE,0x30EF, -0x30F0,0x30F1,0x30F2,0x30F3,0x30F4,0x30F5,0x30F6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397, -0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F, -0x03A0,0x03A1,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,0x03A8, -0x03A9, 0, 0, 0, 0, 0, 0, 0, - 0,0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7, -0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF, -0x03C0,0x03C1,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8, -0x03C9, 0, 0, 0, 0, 0, 0, 0, -0xFE35,0xFE36,0xFE39,0xFE3A,0xFE3F,0xFE40,0xFE3D,0xFE3E, -0xFE41,0xFE42,0xFE43,0xFE44, 0, 0,0xFE3B,0xFE3C, -0xFE37,0xFE38,0xFE31, 0,0xFE33,0xFE34, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401, -0x0416,0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D, -0x041E,0x041F,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425, -0x0426,0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D, -0x042E,0x042F, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0451, -0x0436,0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D, -0x043E,0x043F,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445, -0x0446,0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D, -0x044E,0x044F, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x02CA,0x02CB,0x02D9,0x2013,0x2015,0x2025,0x2035,0x2105, -0x2109,0x2196,0x2197,0x2198,0x2199,0x2215,0x221F,0x2223, -0x2252,0x2266,0x2267,0x22BF,0x2550,0x2551,0x2552,0x2553, -0x2554,0x2555,0x2556,0x2557,0x2558,0x2559,0x255A,0x255B, -0x255C,0x255D,0x255E,0x255F,0x2560,0x2561,0x2562,0x2563, -0x2564,0x2565,0x2566,0x2567,0x2568,0x2569,0x256A,0x256B, -0x256C,0x256D,0x256E,0x256F,0x2570,0x2571,0x2572,0x2573, -0x2581,0x2582,0x2583,0x2584,0x2585,0x2586,0x2587, 0, -0x2588,0x2589,0x258A,0x258B,0x258C,0x258D,0x258E,0x258F, -0x2593,0x2594,0x2595,0x25BC,0x25BD,0x25E2,0x25E3,0x25E4, -0x25E5,0x2609,0x2295,0x3012,0x301D,0x301E, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0x0101,0x00E1,0x01CE,0x00E0,0x0113,0x00E9,0x011B, -0x00E8,0x012B,0x00ED,0x01D0,0x00EC,0x014D,0x00F3,0x01D2, -0x00F2,0x016B,0x00FA,0x01D4,0x00F9,0x01D6,0x01D8,0x01DA, -0x01DC,0x00FC,0x00EA,0x0251, 0,0x0144,0x0148, 0, -0x0261, 0, 0, 0, 0,0x3105,0x3106,0x3107, -0x3108,0x3109,0x310A,0x310B,0x310C,0x310D,0x310E,0x310F, -0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116,0x3117, -0x3118,0x3119,0x311A,0x311B,0x311C,0x311D,0x311E,0x311F, -0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126,0x3127, -0x3128,0x3129, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x3021,0x3022,0x3023,0x3024,0x3025,0x3026,0x3027,0x3028, -0x3029,0x32A3,0x338E,0x338F,0x339C,0x339D,0x339E,0x33A1, -0x33C4,0x33CE,0x33D1,0x33D2,0x33D5,0xFE30,0xFFE2,0xFFE4, - 0,0x2121,0x3231, 0,0x2010, 0, 0, 0, -0x30FC,0x309B,0x309C,0x30FD,0x30FE,0x3006,0x309D,0x309E, -0xFE49,0xFE4A,0xFE4B,0xFE4C,0xFE4D,0xFE4E,0xFE4F,0xFE50, -0xFE51,0xFE52,0xFE54,0xFE55,0xFE56,0xFE57,0xFE59,0xFE5A, -0xFE5B,0xFE5C,0xFE5D,0xFE5E,0xFE5F,0xFE60,0xFE61, 0, -0xFE62,0xFE63,0xFE64,0xFE65,0xFE66,0xFE68,0xFE69,0xFE6A, -0xFE6B, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0x3007, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0x2500,0x2501,0x2502,0x2503, -0x2504,0x2505,0x2506,0x2507,0x2508,0x2509,0x250A,0x250B, -0x250C,0x250D,0x250E,0x250F,0x2510,0x2511,0x2512,0x2513, -0x2514,0x2515,0x2516,0x2517,0x2518,0x2519,0x251A,0x251B, -0x251C,0x251D,0x251E,0x251F,0x2520,0x2521,0x2522,0x2523, -0x2524,0x2525,0x2526,0x2527,0x2528,0x2529,0x252A,0x252B, -0x252C,0x252D,0x252E,0x252F,0x2530,0x2531,0x2532,0x2533, -0x2534,0x2535,0x2536,0x2537,0x2538,0x2539,0x253A,0x253B, -0x253C,0x253D,0x253E,0x253F,0x2540,0x2541,0x2542,0x2543, -0x2544,0x2545,0x2546,0x2547,0x2548,0x2549,0x254A,0x254B, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x72DC,0x72DD,0x72DF,0x72E2,0x72E3,0x72E4,0x72E5,0x72E6, -0x72E7,0x72EA,0x72EB,0x72F5,0x72F6,0x72F9,0x72FD,0x72FE, -0x72FF,0x7300,0x7302,0x7304,0x7305,0x7306,0x7307,0x7308, -0x7309,0x730B,0x730C,0x730D,0x730F,0x7310,0x7311,0x7312, -0x7314,0x7318,0x7319,0x731A,0x731F,0x7320,0x7323,0x7324, -0x7326,0x7327,0x7328,0x732D,0x732F,0x7330,0x7332,0x7333, -0x7335,0x7336,0x733A,0x733B,0x733C,0x733D,0x7340,0x7341, -0x7342,0x7343,0x7344,0x7345,0x7346,0x7347,0x7348, 0, -0x7349,0x734A,0x734B,0x734C,0x734E,0x734F,0x7351,0x7353, -0x7354,0x7355,0x7356,0x7358,0x7359,0x735A,0x735B,0x735C, -0x735D,0x735E,0x735F,0x7361,0x7362,0x7363,0x7364,0x7365, -0x7366,0x7367,0x7368,0x7369,0x736A,0x736B,0x736E,0x7370, -0x7371, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7372,0x7373,0x7374,0x7375,0x7376,0x7377,0x7378,0x7379, -0x737A,0x737B,0x737C,0x737D,0x737F,0x7380,0x7381,0x7382, -0x7383,0x7385,0x7386,0x7388,0x738A,0x738C,0x738D,0x738F, -0x7390,0x7392,0x7393,0x7394,0x7395,0x7397,0x7398,0x7399, -0x739A,0x739C,0x739D,0x739E,0x73A0,0x73A1,0x73A3,0x73A4, -0x73A5,0x73A6,0x73A7,0x73A8,0x73AA,0x73AC,0x73AD,0x73B1, -0x73B4,0x73B5,0x73B6,0x73B8,0x73B9,0x73BC,0x73BD,0x73BE, -0x73BF,0x73C1,0x73C3,0x73C4,0x73C5,0x73C6,0x73C7, 0, -0x73CB,0x73CC,0x73CE,0x73D2,0x73D3,0x73D4,0x73D5,0x73D6, -0x73D7,0x73D8,0x73DA,0x73DB,0x73DC,0x73DD,0x73DF,0x73E1, -0x73E2,0x73E3,0x73E4,0x73E6,0x73E8,0x73EA,0x73EB,0x73EC, -0x73EE,0x73EF,0x73F0,0x73F1,0x73F3,0x73F4,0x73F5,0x73F6, -0x73F7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x73F8,0x73F9,0x73FA,0x73FB,0x73FC,0x73FD,0x73FE,0x73FF, -0x7400,0x7401,0x7402,0x7404,0x7407,0x7408,0x740B,0x740C, -0x740D,0x740E,0x7411,0x7412,0x7413,0x7414,0x7415,0x7416, -0x7417,0x7418,0x7419,0x741C,0x741D,0x741E,0x741F,0x7420, -0x7421,0x7423,0x7424,0x7427,0x7429,0x742B,0x742D,0x742F, -0x7431,0x7432,0x7437,0x7438,0x7439,0x743A,0x743B,0x743D, -0x743E,0x743F,0x7440,0x7442,0x7443,0x7444,0x7445,0x7446, -0x7447,0x7448,0x7449,0x744A,0x744B,0x744C,0x744D, 0, -0x744E,0x744F,0x7450,0x7451,0x7452,0x7453,0x7454,0x7456, -0x7458,0x745D,0x7460,0x7461,0x7462,0x7463,0x7464,0x7465, -0x7466,0x7467,0x7468,0x7469,0x746A,0x746B,0x746C,0x746E, -0x746F,0x7471,0x7472,0x7473,0x7474,0x7475,0x7478,0x7479, -0x747A, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x747B,0x747C,0x747D,0x747F,0x7482,0x7484,0x7485,0x7486, -0x7488,0x7489,0x748A,0x748C,0x748D,0x748F,0x7491,0x7492, -0x7493,0x7494,0x7495,0x7496,0x7497,0x7498,0x7499,0x749A, -0x749B,0x749D,0x749F,0x74A0,0x74A1,0x74A2,0x74A3,0x74A4, -0x74A5,0x74A6,0x74AA,0x74AB,0x74AC,0x74AD,0x74AE,0x74AF, -0x74B0,0x74B1,0x74B2,0x74B3,0x74B4,0x74B5,0x74B6,0x74B7, -0x74B8,0x74B9,0x74BB,0x74BC,0x74BD,0x74BE,0x74BF,0x74C0, -0x74C1,0x74C2,0x74C3,0x74C4,0x74C5,0x74C6,0x74C7, 0, -0x74C8,0x74C9,0x74CA,0x74CB,0x74CC,0x74CD,0x74CE,0x74CF, -0x74D0,0x74D1,0x74D3,0x74D4,0x74D5,0x74D6,0x74D7,0x74D8, -0x74D9,0x74DA,0x74DB,0x74DD,0x74DF,0x74E1,0x74E5,0x74E7, -0x74E8,0x74E9,0x74EA,0x74EB,0x74EC,0x74ED,0x74F0,0x74F1, -0x74F2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x74F3,0x74F5,0x74F8,0x74F9,0x74FA,0x74FB,0x74FC,0x74FD, -0x74FE,0x7500,0x7501,0x7502,0x7503,0x7505,0x7506,0x7507, -0x7508,0x7509,0x750A,0x750B,0x750C,0x750E,0x7510,0x7512, -0x7514,0x7515,0x7516,0x7517,0x751B,0x751D,0x751E,0x7520, -0x7521,0x7522,0x7523,0x7524,0x7526,0x7527,0x752A,0x752E, -0x7534,0x7536,0x7539,0x753C,0x753D,0x753F,0x7541,0x7542, -0x7543,0x7544,0x7546,0x7547,0x7549,0x754A,0x754D,0x7550, -0x7551,0x7552,0x7553,0x7555,0x7556,0x7557,0x7558, 0, -0x755D,0x755E,0x755F,0x7560,0x7561,0x7562,0x7563,0x7564, -0x7567,0x7568,0x7569,0x756B,0x756C,0x756D,0x756E,0x756F, -0x7570,0x7571,0x7573,0x7575,0x7576,0x7577,0x757A,0x757B, -0x757C,0x757D,0x757E,0x7580,0x7581,0x7582,0x7584,0x7585, -0x7587, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7588,0x7589,0x758A,0x758C,0x758D,0x758E,0x7590,0x7593, -0x7595,0x7598,0x759B,0x759C,0x759E,0x75A2,0x75A6,0x75A7, -0x75A8,0x75A9,0x75AA,0x75AD,0x75B6,0x75B7,0x75BA,0x75BB, -0x75BF,0x75C0,0x75C1,0x75C6,0x75CB,0x75CC,0x75CE,0x75CF, -0x75D0,0x75D1,0x75D3,0x75D7,0x75D9,0x75DA,0x75DC,0x75DD, -0x75DF,0x75E0,0x75E1,0x75E5,0x75E9,0x75EC,0x75ED,0x75EE, -0x75EF,0x75F2,0x75F3,0x75F5,0x75F6,0x75F7,0x75F8,0x75FA, -0x75FB,0x75FD,0x75FE,0x7602,0x7604,0x7606,0x7607, 0, -0x7608,0x7609,0x760B,0x760D,0x760E,0x760F,0x7611,0x7612, -0x7613,0x7614,0x7616,0x761A,0x761C,0x761D,0x761E,0x7621, -0x7623,0x7627,0x7628,0x762C,0x762E,0x762F,0x7631,0x7632, -0x7636,0x7637,0x7639,0x763A,0x763B,0x763D,0x7641,0x7642, -0x7644, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7645,0x7646,0x7647,0x7648,0x7649,0x764A,0x764B,0x764E, -0x764F,0x7650,0x7651,0x7652,0x7653,0x7655,0x7657,0x7658, -0x7659,0x765A,0x765B,0x765D,0x765F,0x7660,0x7661,0x7662, -0x7664,0x7665,0x7666,0x7667,0x7668,0x7669,0x766A,0x766C, -0x766D,0x766E,0x7670,0x7671,0x7672,0x7673,0x7674,0x7675, -0x7676,0x7677,0x7679,0x767A,0x767C,0x767F,0x7680,0x7681, -0x7683,0x7685,0x7689,0x768A,0x768C,0x768D,0x768F,0x7690, -0x7692,0x7694,0x7695,0x7697,0x7698,0x769A,0x769B, 0, -0x769C,0x769D,0x769E,0x769F,0x76A0,0x76A1,0x76A2,0x76A3, -0x76A5,0x76A6,0x76A7,0x76A8,0x76A9,0x76AA,0x76AB,0x76AC, -0x76AD,0x76AF,0x76B0,0x76B3,0x76B5,0x76B6,0x76B7,0x76B8, -0x76B9,0x76BA,0x76BB,0x76BC,0x76BD,0x76BE,0x76C0,0x76C1, -0x76C3,0x554A,0x963F,0x57C3,0x6328,0x54CE,0x5509,0x54C0, -0x7691,0x764C,0x853C,0x77EE,0x827E,0x788D,0x7231,0x9698, -0x978D,0x6C28,0x5B89,0x4FFA,0x6309,0x6697,0x5CB8,0x80FA, -0x6848,0x80AE,0x6602,0x76CE,0x51F9,0x6556,0x71AC,0x7FF1, -0x8884,0x50B2,0x5965,0x61CA,0x6FB3,0x82AD,0x634C,0x6252, -0x53ED,0x5427,0x7B06,0x516B,0x75A4,0x5DF4,0x62D4,0x8DCB, -0x9776,0x628A,0x8019,0x575D,0x9738,0x7F62,0x7238,0x767D, -0x67CF,0x767E,0x6446,0x4F70,0x8D25,0x62DC,0x7A17,0x6591, -0x73ED,0x642C,0x6273,0x822C,0x9881,0x677F,0x7248,0x626E, -0x62CC,0x4F34,0x74E3,0x534A,0x529E,0x7ECA,0x90A6,0x5E2E, -0x6886,0x699C,0x8180,0x7ED1,0x68D2,0x78C5,0x868C,0x9551, -0x508D,0x8C24,0x82DE,0x80DE,0x5305,0x8912,0x5265, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x76C4,0x76C7,0x76C9,0x76CB,0x76CC,0x76D3,0x76D5,0x76D9, -0x76DA,0x76DC,0x76DD,0x76DE,0x76E0,0x76E1,0x76E2,0x76E3, -0x76E4,0x76E6,0x76E7,0x76E8,0x76E9,0x76EA,0x76EB,0x76EC, -0x76ED,0x76F0,0x76F3,0x76F5,0x76F6,0x76F7,0x76FA,0x76FB, -0x76FD,0x76FF,0x7700,0x7702,0x7703,0x7705,0x7706,0x770A, -0x770C,0x770E,0x770F,0x7710,0x7711,0x7712,0x7713,0x7714, -0x7715,0x7716,0x7717,0x7718,0x771B,0x771C,0x771D,0x771E, -0x7721,0x7723,0x7724,0x7725,0x7727,0x772A,0x772B, 0, -0x772C,0x772E,0x7730,0x7731,0x7732,0x7733,0x7734,0x7739, -0x773B,0x773D,0x773E,0x773F,0x7742,0x7744,0x7745,0x7746, -0x7748,0x7749,0x774A,0x774B,0x774C,0x774D,0x774E,0x774F, -0x7752,0x7753,0x7754,0x7755,0x7756,0x7757,0x7758,0x7759, -0x775C,0x8584,0x96F9,0x4FDD,0x5821,0x9971,0x5B9D,0x62B1, -0x62A5,0x66B4,0x8C79,0x9C8D,0x7206,0x676F,0x7891,0x60B2, -0x5351,0x5317,0x8F88,0x80CC,0x8D1D,0x94A1,0x500D,0x72C8, -0x5907,0x60EB,0x7119,0x88AB,0x5954,0x82EF,0x672C,0x7B28, -0x5D29,0x7EF7,0x752D,0x6CF5,0x8E66,0x8FF8,0x903C,0x9F3B, -0x6BD4,0x9119,0x7B14,0x5F7C,0x78A7,0x84D6,0x853D,0x6BD5, -0x6BD9,0x6BD6,0x5E01,0x5E87,0x75F9,0x95ED,0x655D,0x5F0A, -0x5FC5,0x8F9F,0x58C1,0x81C2,0x907F,0x965B,0x97AD,0x8FB9, -0x7F16,0x8D2C,0x6241,0x4FBF,0x53D8,0x535E,0x8FA8,0x8FA9, -0x8FAB,0x904D,0x6807,0x5F6A,0x8198,0x8868,0x9CD6,0x618B, -0x522B,0x762A,0x5F6C,0x658C,0x6FD2,0x6EE8,0x5BBE,0x6448, -0x5175,0x51B0,0x67C4,0x4E19,0x79C9,0x997C,0x70B3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x775D,0x775E,0x775F,0x7760,0x7764,0x7767,0x7769,0x776A, -0x776D,0x776E,0x776F,0x7770,0x7771,0x7772,0x7773,0x7774, -0x7775,0x7776,0x7777,0x7778,0x777A,0x777B,0x777C,0x7781, -0x7782,0x7783,0x7786,0x7787,0x7788,0x7789,0x778A,0x778B, -0x778F,0x7790,0x7793,0x7794,0x7795,0x7796,0x7797,0x7798, -0x7799,0x779A,0x779B,0x779C,0x779D,0x779E,0x77A1,0x77A3, -0x77A4,0x77A6,0x77A8,0x77AB,0x77AD,0x77AE,0x77AF,0x77B1, -0x77B2,0x77B4,0x77B6,0x77B7,0x77B8,0x77B9,0x77BA, 0, -0x77BC,0x77BE,0x77C0,0x77C1,0x77C2,0x77C3,0x77C4,0x77C5, -0x77C6,0x77C7,0x77C8,0x77C9,0x77CA,0x77CB,0x77CC,0x77CE, -0x77CF,0x77D0,0x77D1,0x77D2,0x77D3,0x77D4,0x77D5,0x77D6, -0x77D8,0x77D9,0x77DA,0x77DD,0x77DE,0x77DF,0x77E0,0x77E1, -0x77E4,0x75C5,0x5E76,0x73BB,0x83E0,0x64AD,0x62E8,0x94B5, -0x6CE2,0x535A,0x52C3,0x640F,0x94C2,0x7B94,0x4F2F,0x5E1B, -0x8236,0x8116,0x818A,0x6E24,0x6CCA,0x9A73,0x6355,0x535C, -0x54FA,0x8865,0x57E0,0x4E0D,0x5E03,0x6B65,0x7C3F,0x90E8, -0x6016,0x64E6,0x731C,0x88C1,0x6750,0x624D,0x8D22,0x776C, -0x8E29,0x91C7,0x5F69,0x83DC,0x8521,0x9910,0x53C2,0x8695, -0x6B8B,0x60ED,0x60E8,0x707F,0x82CD,0x8231,0x4ED3,0x6CA7, -0x85CF,0x64CD,0x7CD9,0x69FD,0x66F9,0x8349,0x5395,0x7B56, -0x4FA7,0x518C,0x6D4B,0x5C42,0x8E6D,0x63D2,0x53C9,0x832C, -0x8336,0x67E5,0x78B4,0x643D,0x5BDF,0x5C94,0x5DEE,0x8BE7, -0x62C6,0x67F4,0x8C7A,0x6400,0x63BA,0x8749,0x998B,0x8C17, -0x7F20,0x94F2,0x4EA7,0x9610,0x98A4,0x660C,0x7316, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x77E6,0x77E8,0x77EA,0x77EF,0x77F0,0x77F1,0x77F2,0x77F4, -0x77F5,0x77F7,0x77F9,0x77FA,0x77FB,0x77FC,0x7803,0x7804, -0x7805,0x7806,0x7807,0x7808,0x780A,0x780B,0x780E,0x780F, -0x7810,0x7813,0x7815,0x7819,0x781B,0x781E,0x7820,0x7821, -0x7822,0x7824,0x7828,0x782A,0x782B,0x782E,0x782F,0x7831, -0x7832,0x7833,0x7835,0x7836,0x783D,0x783F,0x7841,0x7842, -0x7843,0x7844,0x7846,0x7848,0x7849,0x784A,0x784B,0x784D, -0x784F,0x7851,0x7853,0x7854,0x7858,0x7859,0x785A, 0, -0x785B,0x785C,0x785E,0x785F,0x7860,0x7861,0x7862,0x7863, -0x7864,0x7865,0x7866,0x7867,0x7868,0x7869,0x786F,0x7870, -0x7871,0x7872,0x7873,0x7874,0x7875,0x7876,0x7878,0x7879, -0x787A,0x787B,0x787D,0x787E,0x787F,0x7880,0x7881,0x7882, -0x7883,0x573A,0x5C1D,0x5E38,0x957F,0x507F,0x80A0,0x5382, -0x655E,0x7545,0x5531,0x5021,0x8D85,0x6284,0x949E,0x671D, -0x5632,0x6F6E,0x5DE2,0x5435,0x7092,0x8F66,0x626F,0x64A4, -0x63A3,0x5F7B,0x6F88,0x90F4,0x81E3,0x8FB0,0x5C18,0x6668, -0x5FF1,0x6C89,0x9648,0x8D81,0x886C,0x6491,0x79F0,0x57CE, -0x6A59,0x6210,0x5448,0x4E58,0x7A0B,0x60E9,0x6F84,0x8BDA, -0x627F,0x901E,0x9A8B,0x79E4,0x5403,0x75F4,0x6301,0x5319, -0x6C60,0x8FDF,0x5F1B,0x9A70,0x803B,0x9F7F,0x4F88,0x5C3A, -0x8D64,0x7FC5,0x65A5,0x70BD,0x5145,0x51B2,0x866B,0x5D07, -0x5BA0,0x62BD,0x916C,0x7574,0x8E0C,0x7A20,0x6101,0x7B79, -0x4EC7,0x7EF8,0x7785,0x4E11,0x81ED,0x521D,0x51FA,0x6A71, -0x53A8,0x8E87,0x9504,0x96CF,0x6EC1,0x9664,0x695A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7884,0x7885,0x7886,0x7888,0x788A,0x788B,0x788F,0x7890, -0x7892,0x7894,0x7895,0x7896,0x7899,0x789D,0x789E,0x78A0, -0x78A2,0x78A4,0x78A6,0x78A8,0x78A9,0x78AA,0x78AB,0x78AC, -0x78AD,0x78AE,0x78AF,0x78B5,0x78B6,0x78B7,0x78B8,0x78BA, -0x78BB,0x78BC,0x78BD,0x78BF,0x78C0,0x78C2,0x78C3,0x78C4, -0x78C6,0x78C7,0x78C8,0x78CC,0x78CD,0x78CE,0x78CF,0x78D1, -0x78D2,0x78D3,0x78D6,0x78D7,0x78D8,0x78DA,0x78DB,0x78DC, -0x78DD,0x78DE,0x78DF,0x78E0,0x78E1,0x78E2,0x78E3, 0, -0x78E4,0x78E5,0x78E6,0x78E7,0x78E9,0x78EA,0x78EB,0x78ED, -0x78EE,0x78EF,0x78F0,0x78F1,0x78F3,0x78F5,0x78F6,0x78F8, -0x78F9,0x78FB,0x78FC,0x78FD,0x78FE,0x78FF,0x7900,0x7902, -0x7903,0x7904,0x7906,0x7907,0x7908,0x7909,0x790A,0x790B, -0x790C,0x7840,0x50A8,0x77D7,0x6410,0x89E6,0x5904,0x63E3, -0x5DDD,0x7A7F,0x693D,0x4F20,0x8239,0x5598,0x4E32,0x75AE, -0x7A97,0x5E62,0x5E8A,0x95EF,0x521B,0x5439,0x708A,0x6376, -0x9524,0x5782,0x6625,0x693F,0x9187,0x5507,0x6DF3,0x7EAF, -0x8822,0x6233,0x7EF0,0x75B5,0x8328,0x78C1,0x96CC,0x8F9E, -0x6148,0x74F7,0x8BCD,0x6B64,0x523A,0x8D50,0x6B21,0x806A, -0x8471,0x56F1,0x5306,0x4ECE,0x4E1B,0x51D1,0x7C97,0x918B, -0x7C07,0x4FC3,0x8E7F,0x7BE1,0x7A9C,0x6467,0x5D14,0x50AC, -0x8106,0x7601,0x7CB9,0x6DEC,0x7FE0,0x6751,0x5B58,0x5BF8, -0x78CB,0x64AE,0x6413,0x63AA,0x632B,0x9519,0x642D,0x8FBE, -0x7B54,0x7629,0x6253,0x5927,0x5446,0x6B79,0x50A3,0x6234, -0x5E26,0x6B86,0x4EE3,0x8D37,0x888B,0x5F85,0x902E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x790D,0x790E,0x790F,0x7910,0x7911,0x7912,0x7914,0x7915, -0x7916,0x7917,0x7918,0x7919,0x791A,0x791B,0x791C,0x791D, -0x791F,0x7920,0x7921,0x7922,0x7923,0x7925,0x7926,0x7927, -0x7928,0x7929,0x792A,0x792B,0x792C,0x792D,0x792E,0x792F, -0x7930,0x7931,0x7932,0x7933,0x7935,0x7936,0x7937,0x7938, -0x7939,0x793D,0x793F,0x7942,0x7943,0x7944,0x7945,0x7947, -0x794A,0x794B,0x794C,0x794D,0x794E,0x794F,0x7950,0x7951, -0x7952,0x7954,0x7955,0x7958,0x7959,0x7961,0x7963, 0, -0x7964,0x7966,0x7969,0x796A,0x796B,0x796C,0x796E,0x7970, -0x7971,0x7972,0x7973,0x7974,0x7975,0x7976,0x7979,0x797B, -0x797C,0x797D,0x797E,0x797F,0x7982,0x7983,0x7986,0x7987, -0x7988,0x7989,0x798B,0x798C,0x798D,0x798E,0x7990,0x7991, -0x7992,0x6020,0x803D,0x62C5,0x4E39,0x5355,0x90F8,0x63B8, -0x80C6,0x65E6,0x6C2E,0x4F46,0x60EE,0x6DE1,0x8BDE,0x5F39, -0x86CB,0x5F53,0x6321,0x515A,0x8361,0x6863,0x5200,0x6363, -0x8E48,0x5012,0x5C9B,0x7977,0x5BFC,0x5230,0x7A3B,0x60BC, -0x9053,0x76D7,0x5FB7,0x5F97,0x7684,0x8E6C,0x706F,0x767B, -0x7B49,0x77AA,0x51F3,0x9093,0x5824,0x4F4E,0x6EF4,0x8FEA, -0x654C,0x7B1B,0x72C4,0x6DA4,0x7FDF,0x5AE1,0x62B5,0x5E95, -0x5730,0x8482,0x7B2C,0x5E1D,0x5F1F,0x9012,0x7F14,0x98A0, -0x6382,0x6EC7,0x7898,0x70B9,0x5178,0x975B,0x57AB,0x7535, -0x4F43,0x7538,0x5E97,0x60E6,0x5960,0x6DC0,0x6BBF,0x7889, -0x53FC,0x96D5,0x51CB,0x5201,0x6389,0x540A,0x9493,0x8C03, -0x8DCC,0x7239,0x789F,0x8776,0x8FED,0x8C0D,0x53E0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7993,0x7994,0x7995,0x7996,0x7997,0x7998,0x7999,0x799B, -0x799C,0x799D,0x799E,0x799F,0x79A0,0x79A1,0x79A2,0x79A3, -0x79A4,0x79A5,0x79A6,0x79A8,0x79A9,0x79AA,0x79AB,0x79AC, -0x79AD,0x79AE,0x79AF,0x79B0,0x79B1,0x79B2,0x79B4,0x79B5, -0x79B6,0x79B7,0x79B8,0x79BC,0x79BF,0x79C2,0x79C4,0x79C5, -0x79C7,0x79C8,0x79CA,0x79CC,0x79CE,0x79CF,0x79D0,0x79D3, -0x79D4,0x79D6,0x79D7,0x79D9,0x79DA,0x79DB,0x79DC,0x79DD, -0x79DE,0x79E0,0x79E1,0x79E2,0x79E5,0x79E8,0x79EA, 0, -0x79EC,0x79EE,0x79F1,0x79F2,0x79F3,0x79F4,0x79F5,0x79F6, -0x79F7,0x79F9,0x79FA,0x79FC,0x79FE,0x79FF,0x7A01,0x7A04, -0x7A05,0x7A07,0x7A08,0x7A09,0x7A0A,0x7A0C,0x7A0F,0x7A10, -0x7A11,0x7A12,0x7A13,0x7A15,0x7A16,0x7A18,0x7A19,0x7A1B, -0x7A1C,0x4E01,0x76EF,0x53EE,0x9489,0x9876,0x9F0E,0x952D, -0x5B9A,0x8BA2,0x4E22,0x4E1C,0x51AC,0x8463,0x61C2,0x52A8, -0x680B,0x4F97,0x606B,0x51BB,0x6D1E,0x515C,0x6296,0x6597, -0x9661,0x8C46,0x9017,0x75D8,0x90FD,0x7763,0x6BD2,0x728A, -0x72EC,0x8BFB,0x5835,0x7779,0x8D4C,0x675C,0x9540,0x809A, -0x5EA6,0x6E21,0x5992,0x7AEF,0x77ED,0x953B,0x6BB5,0x65AD, -0x7F0E,0x5806,0x5151,0x961F,0x5BF9,0x58A9,0x5428,0x8E72, -0x6566,0x987F,0x56E4,0x949D,0x76FE,0x9041,0x6387,0x54C6, -0x591A,0x593A,0x579B,0x8EB2,0x6735,0x8DFA,0x8235,0x5241, -0x60F0,0x5815,0x86FE,0x5CE8,0x9E45,0x4FC4,0x989D,0x8BB9, -0x5A25,0x6076,0x5384,0x627C,0x904F,0x9102,0x997F,0x6069, -0x800C,0x513F,0x8033,0x5C14,0x9975,0x6D31,0x4E8C, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7A1D,0x7A1F,0x7A21,0x7A22,0x7A24,0x7A25,0x7A26,0x7A27, -0x7A28,0x7A29,0x7A2A,0x7A2B,0x7A2C,0x7A2D,0x7A2E,0x7A2F, -0x7A30,0x7A31,0x7A32,0x7A34,0x7A35,0x7A36,0x7A38,0x7A3A, -0x7A3E,0x7A40,0x7A41,0x7A42,0x7A43,0x7A44,0x7A45,0x7A47, -0x7A48,0x7A49,0x7A4A,0x7A4B,0x7A4C,0x7A4D,0x7A4E,0x7A4F, -0x7A50,0x7A52,0x7A53,0x7A54,0x7A55,0x7A56,0x7A58,0x7A59, -0x7A5A,0x7A5B,0x7A5C,0x7A5D,0x7A5E,0x7A5F,0x7A60,0x7A61, -0x7A62,0x7A63,0x7A64,0x7A65,0x7A66,0x7A67,0x7A68, 0, -0x7A69,0x7A6A,0x7A6B,0x7A6C,0x7A6D,0x7A6E,0x7A6F,0x7A71, -0x7A72,0x7A73,0x7A75,0x7A7B,0x7A7C,0x7A7D,0x7A7E,0x7A82, -0x7A85,0x7A87,0x7A89,0x7A8A,0x7A8B,0x7A8C,0x7A8E,0x7A8F, -0x7A90,0x7A93,0x7A94,0x7A99,0x7A9A,0x7A9B,0x7A9E,0x7AA1, -0x7AA2,0x8D30,0x53D1,0x7F5A,0x7B4F,0x4F10,0x4E4F,0x9600, -0x6CD5,0x73D0,0x85E9,0x5E06,0x756A,0x7FFB,0x6A0A,0x77FE, -0x9492,0x7E41,0x51E1,0x70E6,0x53CD,0x8FD4,0x8303,0x8D29, -0x72AF,0x996D,0x6CDB,0x574A,0x82B3,0x65B9,0x80AA,0x623F, -0x9632,0x59A8,0x4EFF,0x8BBF,0x7EBA,0x653E,0x83F2,0x975E, -0x5561,0x98DE,0x80A5,0x532A,0x8BFD,0x5420,0x80BA,0x5E9F, -0x6CB8,0x8D39,0x82AC,0x915A,0x5429,0x6C1B,0x5206,0x7EB7, -0x575F,0x711A,0x6C7E,0x7C89,0x594B,0x4EFD,0x5FFF,0x6124, -0x7CAA,0x4E30,0x5C01,0x67AB,0x8702,0x5CF0,0x950B,0x98CE, -0x75AF,0x70FD,0x9022,0x51AF,0x7F1D,0x8BBD,0x5949,0x51E4, -0x4F5B,0x5426,0x592B,0x6577,0x80A4,0x5B75,0x6276,0x62C2, -0x8F90,0x5E45,0x6C1F,0x7B26,0x4F0F,0x4FD8,0x670D, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7AA3,0x7AA4,0x7AA7,0x7AA9,0x7AAA,0x7AAB,0x7AAE,0x7AAF, -0x7AB0,0x7AB1,0x7AB2,0x7AB4,0x7AB5,0x7AB6,0x7AB7,0x7AB8, -0x7AB9,0x7ABA,0x7ABB,0x7ABC,0x7ABD,0x7ABE,0x7AC0,0x7AC1, -0x7AC2,0x7AC3,0x7AC4,0x7AC5,0x7AC6,0x7AC7,0x7AC8,0x7AC9, -0x7ACA,0x7ACC,0x7ACD,0x7ACE,0x7ACF,0x7AD0,0x7AD1,0x7AD2, -0x7AD3,0x7AD4,0x7AD5,0x7AD7,0x7AD8,0x7ADA,0x7ADB,0x7ADC, -0x7ADD,0x7AE1,0x7AE2,0x7AE4,0x7AE7,0x7AE8,0x7AE9,0x7AEA, -0x7AEB,0x7AEC,0x7AEE,0x7AF0,0x7AF1,0x7AF2,0x7AF3, 0, -0x7AF4,0x7AF5,0x7AF6,0x7AF7,0x7AF8,0x7AFB,0x7AFC,0x7AFE, -0x7B00,0x7B01,0x7B02,0x7B05,0x7B07,0x7B09,0x7B0C,0x7B0D, -0x7B0E,0x7B10,0x7B12,0x7B13,0x7B16,0x7B17,0x7B18,0x7B1A, -0x7B1C,0x7B1D,0x7B1F,0x7B21,0x7B22,0x7B23,0x7B27,0x7B29, -0x7B2D,0x6D6E,0x6DAA,0x798F,0x88B1,0x5F17,0x752B,0x629A, -0x8F85,0x4FEF,0x91DC,0x65A7,0x812F,0x8151,0x5E9C,0x8150, -0x8D74,0x526F,0x8986,0x8D4B,0x590D,0x5085,0x4ED8,0x961C, -0x7236,0x8179,0x8D1F,0x5BCC,0x8BA3,0x9644,0x5987,0x7F1A, -0x5490,0x5676,0x560E,0x8BE5,0x6539,0x6982,0x9499,0x76D6, -0x6E89,0x5E72,0x7518,0x6746,0x67D1,0x7AFF,0x809D,0x8D76, -0x611F,0x79C6,0x6562,0x8D63,0x5188,0x521A,0x94A2,0x7F38, -0x809B,0x7EB2,0x5C97,0x6E2F,0x6760,0x7BD9,0x768B,0x9AD8, -0x818F,0x7F94,0x7CD5,0x641E,0x9550,0x7A3F,0x544A,0x54E5, -0x6B4C,0x6401,0x6208,0x9E3D,0x80F3,0x7599,0x5272,0x9769, -0x845B,0x683C,0x86E4,0x9601,0x9694,0x94EC,0x4E2A,0x5404, -0x7ED9,0x6839,0x8DDF,0x8015,0x66F4,0x5E9A,0x7FB9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7B2F,0x7B30,0x7B32,0x7B34,0x7B35,0x7B36,0x7B37,0x7B39, -0x7B3B,0x7B3D,0x7B3F,0x7B40,0x7B41,0x7B42,0x7B43,0x7B44, -0x7B46,0x7B48,0x7B4A,0x7B4D,0x7B4E,0x7B53,0x7B55,0x7B57, -0x7B59,0x7B5C,0x7B5E,0x7B5F,0x7B61,0x7B63,0x7B64,0x7B65, -0x7B66,0x7B67,0x7B68,0x7B69,0x7B6A,0x7B6B,0x7B6C,0x7B6D, -0x7B6F,0x7B70,0x7B73,0x7B74,0x7B76,0x7B78,0x7B7A,0x7B7C, -0x7B7D,0x7B7F,0x7B81,0x7B82,0x7B83,0x7B84,0x7B86,0x7B87, -0x7B88,0x7B89,0x7B8A,0x7B8B,0x7B8C,0x7B8E,0x7B8F, 0, -0x7B91,0x7B92,0x7B93,0x7B96,0x7B98,0x7B99,0x7B9A,0x7B9B, -0x7B9E,0x7B9F,0x7BA0,0x7BA3,0x7BA4,0x7BA5,0x7BAE,0x7BAF, -0x7BB0,0x7BB2,0x7BB3,0x7BB5,0x7BB6,0x7BB7,0x7BB9,0x7BBA, -0x7BBB,0x7BBC,0x7BBD,0x7BBE,0x7BBF,0x7BC0,0x7BC2,0x7BC3, -0x7BC4,0x57C2,0x803F,0x6897,0x5DE5,0x653B,0x529F,0x606D, -0x9F9A,0x4F9B,0x8EAC,0x516C,0x5BAB,0x5F13,0x5DE9,0x6C5E, -0x62F1,0x8D21,0x5171,0x94A9,0x52FE,0x6C9F,0x82DF,0x72D7, -0x57A2,0x6784,0x8D2D,0x591F,0x8F9C,0x83C7,0x5495,0x7B8D, -0x4F30,0x6CBD,0x5B64,0x59D1,0x9F13,0x53E4,0x86CA,0x9AA8, -0x8C37,0x80A1,0x6545,0x987E,0x56FA,0x96C7,0x522E,0x74DC, -0x5250,0x5BE1,0x6302,0x8902,0x4E56,0x62D0,0x602A,0x68FA, -0x5173,0x5B98,0x51A0,0x89C2,0x7BA1,0x9986,0x7F50,0x60EF, -0x704C,0x8D2F,0x5149,0x5E7F,0x901B,0x7470,0x89C4,0x572D, -0x7845,0x5F52,0x9F9F,0x95FA,0x8F68,0x9B3C,0x8BE1,0x7678, -0x6842,0x67DC,0x8DEA,0x8D35,0x523D,0x8F8A,0x6EDA,0x68CD, -0x9505,0x90ED,0x56FD,0x679C,0x88F9,0x8FC7,0x54C8, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7BC5,0x7BC8,0x7BC9,0x7BCA,0x7BCB,0x7BCD,0x7BCE,0x7BCF, -0x7BD0,0x7BD2,0x7BD4,0x7BD5,0x7BD6,0x7BD7,0x7BD8,0x7BDB, -0x7BDC,0x7BDE,0x7BDF,0x7BE0,0x7BE2,0x7BE3,0x7BE4,0x7BE7, -0x7BE8,0x7BE9,0x7BEB,0x7BEC,0x7BED,0x7BEF,0x7BF0,0x7BF2, -0x7BF3,0x7BF4,0x7BF5,0x7BF6,0x7BF8,0x7BF9,0x7BFA,0x7BFB, -0x7BFD,0x7BFF,0x7C00,0x7C01,0x7C02,0x7C03,0x7C04,0x7C05, -0x7C06,0x7C08,0x7C09,0x7C0A,0x7C0D,0x7C0E,0x7C10,0x7C11, -0x7C12,0x7C13,0x7C14,0x7C15,0x7C17,0x7C18,0x7C19, 0, -0x7C1A,0x7C1B,0x7C1C,0x7C1D,0x7C1E,0x7C20,0x7C21,0x7C22, -0x7C23,0x7C24,0x7C25,0x7C28,0x7C29,0x7C2B,0x7C2C,0x7C2D, -0x7C2E,0x7C2F,0x7C30,0x7C31,0x7C32,0x7C33,0x7C34,0x7C35, -0x7C36,0x7C37,0x7C39,0x7C3A,0x7C3B,0x7C3C,0x7C3D,0x7C3E, -0x7C42,0x9AB8,0x5B69,0x6D77,0x6C26,0x4EA5,0x5BB3,0x9A87, -0x9163,0x61A8,0x90AF,0x97E9,0x542B,0x6DB5,0x5BD2,0x51FD, -0x558A,0x7F55,0x7FF0,0x64BC,0x634D,0x65F1,0x61BE,0x608D, -0x710A,0x6C57,0x6C49,0x592F,0x676D,0x822A,0x58D5,0x568E, -0x8C6A,0x6BEB,0x90DD,0x597D,0x8017,0x53F7,0x6D69,0x5475, -0x559D,0x8377,0x83CF,0x6838,0x79BE,0x548C,0x4F55,0x5408, -0x76D2,0x8C89,0x9602,0x6CB3,0x6DB8,0x8D6B,0x8910,0x9E64, -0x8D3A,0x563F,0x9ED1,0x75D5,0x5F88,0x72E0,0x6068,0x54FC, -0x4EA8,0x6A2A,0x8861,0x6052,0x8F70,0x54C4,0x70D8,0x8679, -0x9E3F,0x6D2A,0x5B8F,0x5F18,0x7EA2,0x5589,0x4FAF,0x7334, -0x543C,0x539A,0x5019,0x540E,0x547C,0x4E4E,0x5FFD,0x745A, -0x58F6,0x846B,0x80E1,0x8774,0x72D0,0x7CCA,0x6E56, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7C43,0x7C44,0x7C45,0x7C46,0x7C47,0x7C48,0x7C49,0x7C4A, -0x7C4B,0x7C4C,0x7C4E,0x7C4F,0x7C50,0x7C51,0x7C52,0x7C53, -0x7C54,0x7C55,0x7C56,0x7C57,0x7C58,0x7C59,0x7C5A,0x7C5B, -0x7C5C,0x7C5D,0x7C5E,0x7C5F,0x7C60,0x7C61,0x7C62,0x7C63, -0x7C64,0x7C65,0x7C66,0x7C67,0x7C68,0x7C69,0x7C6A,0x7C6B, -0x7C6C,0x7C6D,0x7C6E,0x7C6F,0x7C70,0x7C71,0x7C72,0x7C75, -0x7C76,0x7C77,0x7C78,0x7C79,0x7C7A,0x7C7E,0x7C7F,0x7C80, -0x7C81,0x7C82,0x7C83,0x7C84,0x7C85,0x7C86,0x7C87, 0, -0x7C88,0x7C8A,0x7C8B,0x7C8C,0x7C8D,0x7C8E,0x7C8F,0x7C90, -0x7C93,0x7C94,0x7C96,0x7C99,0x7C9A,0x7C9B,0x7CA0,0x7CA1, -0x7CA3,0x7CA6,0x7CA7,0x7CA8,0x7CA9,0x7CAB,0x7CAC,0x7CAD, -0x7CAF,0x7CB0,0x7CB4,0x7CB5,0x7CB6,0x7CB7,0x7CB8,0x7CBA, -0x7CBB,0x5F27,0x864E,0x552C,0x62A4,0x4E92,0x6CAA,0x6237, -0x82B1,0x54D7,0x534E,0x733E,0x6ED1,0x753B,0x5212,0x5316, -0x8BDD,0x69D0,0x5F8A,0x6000,0x6DEE,0x574F,0x6B22,0x73AF, -0x6853,0x8FD8,0x7F13,0x6362,0x60A3,0x5524,0x75EA,0x8C62, -0x7115,0x6DA3,0x5BA6,0x5E7B,0x8352,0x614C,0x9EC4,0x78FA, -0x8757,0x7C27,0x7687,0x51F0,0x60F6,0x714C,0x6643,0x5E4C, -0x604D,0x8C0E,0x7070,0x6325,0x8F89,0x5FBD,0x6062,0x86D4, -0x56DE,0x6BC1,0x6094,0x6167,0x5349,0x60E0,0x6666,0x8D3F, -0x79FD,0x4F1A,0x70E9,0x6C47,0x8BB3,0x8BF2,0x7ED8,0x8364, -0x660F,0x5A5A,0x9B42,0x6D51,0x6DF7,0x8C41,0x6D3B,0x4F19, -0x706B,0x83B7,0x6216,0x60D1,0x970D,0x8D27,0x7978,0x51FB, -0x573E,0x57FA,0x673A,0x7578,0x7A3D,0x79EF,0x7B95, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7CBF,0x7CC0,0x7CC2,0x7CC3,0x7CC4,0x7CC6,0x7CC9,0x7CCB, -0x7CCE,0x7CCF,0x7CD0,0x7CD1,0x7CD2,0x7CD3,0x7CD4,0x7CD8, -0x7CDA,0x7CDB,0x7CDD,0x7CDE,0x7CE1,0x7CE2,0x7CE3,0x7CE4, -0x7CE5,0x7CE6,0x7CE7,0x7CE9,0x7CEA,0x7CEB,0x7CEC,0x7CED, -0x7CEE,0x7CF0,0x7CF1,0x7CF2,0x7CF3,0x7CF4,0x7CF5,0x7CF6, -0x7CF7,0x7CF9,0x7CFA,0x7CFC,0x7CFD,0x7CFE,0x7CFF,0x7D00, -0x7D01,0x7D02,0x7D03,0x7D04,0x7D05,0x7D06,0x7D07,0x7D08, -0x7D09,0x7D0B,0x7D0C,0x7D0D,0x7D0E,0x7D0F,0x7D10, 0, -0x7D11,0x7D12,0x7D13,0x7D14,0x7D15,0x7D16,0x7D17,0x7D18, -0x7D19,0x7D1A,0x7D1B,0x7D1C,0x7D1D,0x7D1E,0x7D1F,0x7D21, -0x7D23,0x7D24,0x7D25,0x7D26,0x7D28,0x7D29,0x7D2A,0x7D2C, -0x7D2D,0x7D2E,0x7D30,0x7D31,0x7D32,0x7D33,0x7D34,0x7D35, -0x7D36,0x808C,0x9965,0x8FF9,0x6FC0,0x8BA5,0x9E21,0x59EC, -0x7EE9,0x7F09,0x5409,0x6781,0x68D8,0x8F91,0x7C4D,0x96C6, -0x53CA,0x6025,0x75BE,0x6C72,0x5373,0x5AC9,0x7EA7,0x6324, -0x51E0,0x810A,0x5DF1,0x84DF,0x6280,0x5180,0x5B63,0x4F0E, -0x796D,0x5242,0x60B8,0x6D4E,0x5BC4,0x5BC2,0x8BA1,0x8BB0, -0x65E2,0x5FCC,0x9645,0x5993,0x7EE7,0x7EAA,0x5609,0x67B7, -0x5939,0x4F73,0x5BB6,0x52A0,0x835A,0x988A,0x8D3E,0x7532, -0x94BE,0x5047,0x7A3C,0x4EF7,0x67B6,0x9A7E,0x5AC1,0x6B7C, -0x76D1,0x575A,0x5C16,0x7B3A,0x95F4,0x714E,0x517C,0x80A9, -0x8270,0x5978,0x7F04,0x8327,0x68C0,0x67EC,0x78B1,0x7877, -0x62E3,0x6361,0x7B80,0x4FED,0x526A,0x51CF,0x8350,0x69DB, -0x9274,0x8DF5,0x8D31,0x89C1,0x952E,0x7BAD,0x4EF6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7D37,0x7D38,0x7D39,0x7D3A,0x7D3B,0x7D3C,0x7D3D,0x7D3E, -0x7D3F,0x7D40,0x7D41,0x7D42,0x7D43,0x7D44,0x7D45,0x7D46, -0x7D47,0x7D48,0x7D49,0x7D4A,0x7D4B,0x7D4C,0x7D4D,0x7D4E, -0x7D4F,0x7D50,0x7D51,0x7D52,0x7D53,0x7D54,0x7D55,0x7D56, -0x7D57,0x7D58,0x7D59,0x7D5A,0x7D5B,0x7D5C,0x7D5D,0x7D5E, -0x7D5F,0x7D60,0x7D61,0x7D62,0x7D63,0x7D64,0x7D65,0x7D66, -0x7D67,0x7D68,0x7D69,0x7D6A,0x7D6B,0x7D6C,0x7D6D,0x7D6F, -0x7D70,0x7D71,0x7D72,0x7D73,0x7D74,0x7D75,0x7D76, 0, -0x7D78,0x7D79,0x7D7A,0x7D7B,0x7D7C,0x7D7D,0x7D7E,0x7D7F, -0x7D80,0x7D81,0x7D82,0x7D83,0x7D84,0x7D85,0x7D86,0x7D87, -0x7D88,0x7D89,0x7D8A,0x7D8B,0x7D8C,0x7D8D,0x7D8E,0x7D8F, -0x7D90,0x7D91,0x7D92,0x7D93,0x7D94,0x7D95,0x7D96,0x7D97, -0x7D98,0x5065,0x8230,0x5251,0x996F,0x6E10,0x6E85,0x6DA7, -0x5EFA,0x50F5,0x59DC,0x5C06,0x6D46,0x6C5F,0x7586,0x848B, -0x6868,0x5956,0x8BB2,0x5320,0x9171,0x964D,0x8549,0x6912, -0x7901,0x7126,0x80F6,0x4EA4,0x90CA,0x6D47,0x9A84,0x5A07, -0x56BC,0x6405,0x94F0,0x77EB,0x4FA5,0x811A,0x72E1,0x89D2, -0x997A,0x7F34,0x7EDE,0x527F,0x6559,0x9175,0x8F7F,0x8F83, -0x53EB,0x7A96,0x63ED,0x63A5,0x7686,0x79F8,0x8857,0x9636, -0x622A,0x52AB,0x8282,0x6854,0x6770,0x6377,0x776B,0x7AED, -0x6D01,0x7ED3,0x89E3,0x59D0,0x6212,0x85C9,0x82A5,0x754C, -0x501F,0x4ECB,0x75A5,0x8BEB,0x5C4A,0x5DFE,0x7B4B,0x65A4, -0x91D1,0x4ECA,0x6D25,0x895F,0x7D27,0x9526,0x4EC5,0x8C28, -0x8FDB,0x9773,0x664B,0x7981,0x8FD1,0x70EC,0x6D78, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7D99,0x7D9A,0x7D9B,0x7D9C,0x7D9D,0x7D9E,0x7D9F,0x7DA0, -0x7DA1,0x7DA2,0x7DA3,0x7DA4,0x7DA5,0x7DA7,0x7DA8,0x7DA9, -0x7DAA,0x7DAB,0x7DAC,0x7DAD,0x7DAF,0x7DB0,0x7DB1,0x7DB2, -0x7DB3,0x7DB4,0x7DB5,0x7DB6,0x7DB7,0x7DB8,0x7DB9,0x7DBA, -0x7DBB,0x7DBC,0x7DBD,0x7DBE,0x7DBF,0x7DC0,0x7DC1,0x7DC2, -0x7DC3,0x7DC4,0x7DC5,0x7DC6,0x7DC7,0x7DC8,0x7DC9,0x7DCA, -0x7DCB,0x7DCC,0x7DCD,0x7DCE,0x7DCF,0x7DD0,0x7DD1,0x7DD2, -0x7DD3,0x7DD4,0x7DD5,0x7DD6,0x7DD7,0x7DD8,0x7DD9, 0, -0x7DDA,0x7DDB,0x7DDC,0x7DDD,0x7DDE,0x7DDF,0x7DE0,0x7DE1, -0x7DE2,0x7DE3,0x7DE4,0x7DE5,0x7DE6,0x7DE7,0x7DE8,0x7DE9, -0x7DEA,0x7DEB,0x7DEC,0x7DED,0x7DEE,0x7DEF,0x7DF0,0x7DF1, -0x7DF2,0x7DF3,0x7DF4,0x7DF5,0x7DF6,0x7DF7,0x7DF8,0x7DF9, -0x7DFA,0x5C3D,0x52B2,0x8346,0x5162,0x830E,0x775B,0x6676, -0x9CB8,0x4EAC,0x60CA,0x7CBE,0x7CB3,0x7ECF,0x4E95,0x8B66, -0x666F,0x9888,0x9759,0x5883,0x656C,0x955C,0x5F84,0x75C9, -0x9756,0x7ADF,0x7ADE,0x51C0,0x70AF,0x7A98,0x63EA,0x7A76, -0x7EA0,0x7396,0x97ED,0x4E45,0x7078,0x4E5D,0x9152,0x53A9, -0x6551,0x65E7,0x81FC,0x8205,0x548E,0x5C31,0x759A,0x97A0, -0x62D8,0x72D9,0x75BD,0x5C45,0x9A79,0x83CA,0x5C40,0x5480, -0x77E9,0x4E3E,0x6CAE,0x805A,0x62D2,0x636E,0x5DE8,0x5177, -0x8DDD,0x8E1E,0x952F,0x4FF1,0x53E5,0x60E7,0x70AC,0x5267, -0x6350,0x9E43,0x5A1F,0x5026,0x7737,0x5377,0x7EE2,0x6485, -0x652B,0x6289,0x6398,0x5014,0x7235,0x89C9,0x51B3,0x8BC0, -0x7EDD,0x5747,0x83CC,0x94A7,0x519B,0x541B,0x5CFB, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7DFB,0x7DFC,0x7DFD,0x7DFE,0x7DFF,0x7E00,0x7E01,0x7E02, -0x7E03,0x7E04,0x7E05,0x7E06,0x7E07,0x7E08,0x7E09,0x7E0A, -0x7E0B,0x7E0C,0x7E0D,0x7E0E,0x7E0F,0x7E10,0x7E11,0x7E12, -0x7E13,0x7E14,0x7E15,0x7E16,0x7E17,0x7E18,0x7E19,0x7E1A, -0x7E1B,0x7E1C,0x7E1D,0x7E1E,0x7E1F,0x7E20,0x7E21,0x7E22, -0x7E23,0x7E24,0x7E25,0x7E26,0x7E27,0x7E28,0x7E29,0x7E2A, -0x7E2B,0x7E2C,0x7E2D,0x7E2E,0x7E2F,0x7E30,0x7E31,0x7E32, -0x7E33,0x7E34,0x7E35,0x7E36,0x7E37,0x7E38,0x7E39, 0, -0x7E3A,0x7E3C,0x7E3D,0x7E3E,0x7E3F,0x7E40,0x7E42,0x7E43, -0x7E44,0x7E45,0x7E46,0x7E48,0x7E49,0x7E4A,0x7E4B,0x7E4C, -0x7E4D,0x7E4E,0x7E4F,0x7E50,0x7E51,0x7E52,0x7E53,0x7E54, -0x7E55,0x7E56,0x7E57,0x7E58,0x7E59,0x7E5A,0x7E5B,0x7E5C, -0x7E5D,0x4FCA,0x7AE3,0x6D5A,0x90E1,0x9A8F,0x5580,0x5496, -0x5361,0x54AF,0x5F00,0x63E9,0x6977,0x51EF,0x6168,0x520A, -0x582A,0x52D8,0x574E,0x780D,0x770B,0x5EB7,0x6177,0x7CE0, -0x625B,0x6297,0x4EA2,0x7095,0x8003,0x62F7,0x70E4,0x9760, -0x5777,0x82DB,0x67EF,0x68F5,0x78D5,0x9897,0x79D1,0x58F3, -0x54B3,0x53EF,0x6E34,0x514B,0x523B,0x5BA2,0x8BFE,0x80AF, -0x5543,0x57A6,0x6073,0x5751,0x542D,0x7A7A,0x6050,0x5B54, -0x63A7,0x62A0,0x53E3,0x6263,0x5BC7,0x67AF,0x54ED,0x7A9F, -0x82E6,0x9177,0x5E93,0x88E4,0x5938,0x57AE,0x630E,0x8DE8, -0x80EF,0x5757,0x7B77,0x4FA9,0x5FEB,0x5BBD,0x6B3E,0x5321, -0x7B50,0x72C2,0x6846,0x77FF,0x7736,0x65F7,0x51B5,0x4E8F, -0x76D4,0x5CBF,0x7AA5,0x8475,0x594E,0x9B41,0x5080, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7E5E,0x7E5F,0x7E60,0x7E61,0x7E62,0x7E63,0x7E64,0x7E65, -0x7E66,0x7E67,0x7E68,0x7E69,0x7E6A,0x7E6B,0x7E6C,0x7E6D, -0x7E6E,0x7E6F,0x7E70,0x7E71,0x7E72,0x7E73,0x7E74,0x7E75, -0x7E76,0x7E77,0x7E78,0x7E79,0x7E7A,0x7E7B,0x7E7C,0x7E7D, -0x7E7E,0x7E7F,0x7E80,0x7E81,0x7E83,0x7E84,0x7E85,0x7E86, -0x7E87,0x7E88,0x7E89,0x7E8A,0x7E8B,0x7E8C,0x7E8D,0x7E8E, -0x7E8F,0x7E90,0x7E91,0x7E92,0x7E93,0x7E94,0x7E95,0x7E96, -0x7E97,0x7E98,0x7E99,0x7E9A,0x7E9C,0x7E9D,0x7E9E, 0, -0x7EAE,0x7EB4,0x7EBB,0x7EBC,0x7ED6,0x7EE4,0x7EEC,0x7EF9, -0x7F0A,0x7F10,0x7F1E,0x7F37,0x7F39,0x7F3B,0x7F3C,0x7F3D, -0x7F3E,0x7F3F,0x7F40,0x7F41,0x7F43,0x7F46,0x7F47,0x7F48, -0x7F49,0x7F4A,0x7F4B,0x7F4C,0x7F4D,0x7F4E,0x7F4F,0x7F52, -0x7F53,0x9988,0x6127,0x6E83,0x5764,0x6606,0x6346,0x56F0, -0x62EC,0x6269,0x5ED3,0x9614,0x5783,0x62C9,0x5587,0x8721, -0x814A,0x8FA3,0x5566,0x83B1,0x6765,0x8D56,0x84DD,0x5A6A, -0x680F,0x62E6,0x7BEE,0x9611,0x5170,0x6F9C,0x8C30,0x63FD, -0x89C8,0x61D2,0x7F06,0x70C2,0x6EE5,0x7405,0x6994,0x72FC, -0x5ECA,0x90CE,0x6717,0x6D6A,0x635E,0x52B3,0x7262,0x8001, -0x4F6C,0x59E5,0x916A,0x70D9,0x6D9D,0x52D2,0x4E50,0x96F7, -0x956D,0x857E,0x78CA,0x7D2F,0x5121,0x5792,0x64C2,0x808B, -0x7C7B,0x6CEA,0x68F1,0x695E,0x51B7,0x5398,0x68A8,0x7281, -0x9ECE,0x7BF1,0x72F8,0x79BB,0x6F13,0x7406,0x674E,0x91CC, -0x9CA4,0x793C,0x8389,0x8354,0x540F,0x6817,0x4E3D,0x5389, -0x52B1,0x783E,0x5386,0x5229,0x5088,0x4F8B,0x4FD0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7F56,0x7F59,0x7F5B,0x7F5C,0x7F5D,0x7F5E,0x7F60,0x7F63, -0x7F64,0x7F65,0x7F66,0x7F67,0x7F6B,0x7F6C,0x7F6D,0x7F6F, -0x7F70,0x7F73,0x7F75,0x7F76,0x7F77,0x7F78,0x7F7A,0x7F7B, -0x7F7C,0x7F7D,0x7F7F,0x7F80,0x7F82,0x7F83,0x7F84,0x7F85, -0x7F86,0x7F87,0x7F88,0x7F89,0x7F8B,0x7F8D,0x7F8F,0x7F90, -0x7F91,0x7F92,0x7F93,0x7F95,0x7F96,0x7F97,0x7F98,0x7F99, -0x7F9B,0x7F9C,0x7FA0,0x7FA2,0x7FA3,0x7FA5,0x7FA6,0x7FA8, -0x7FA9,0x7FAA,0x7FAB,0x7FAC,0x7FAD,0x7FAE,0x7FB1, 0, -0x7FB3,0x7FB4,0x7FB5,0x7FB6,0x7FB7,0x7FBA,0x7FBB,0x7FBE, -0x7FC0,0x7FC2,0x7FC3,0x7FC4,0x7FC6,0x7FC7,0x7FC8,0x7FC9, -0x7FCB,0x7FCD,0x7FCF,0x7FD0,0x7FD1,0x7FD2,0x7FD3,0x7FD6, -0x7FD7,0x7FD9,0x7FDA,0x7FDB,0x7FDC,0x7FDD,0x7FDE,0x7FE2, -0x7FE3,0x75E2,0x7ACB,0x7C92,0x6CA5,0x96B6,0x529B,0x7483, -0x54E9,0x4FE9,0x8054,0x83B2,0x8FDE,0x9570,0x5EC9,0x601C, -0x6D9F,0x5E18,0x655B,0x8138,0x94FE,0x604B,0x70BC,0x7EC3, -0x7CAE,0x51C9,0x6881,0x7CB1,0x826F,0x4E24,0x8F86,0x91CF, -0x667E,0x4EAE,0x8C05,0x64A9,0x804A,0x50DA,0x7597,0x71CE, -0x5BE5,0x8FBD,0x6F66,0x4E86,0x6482,0x9563,0x5ED6,0x6599, -0x5217,0x88C2,0x70C8,0x52A3,0x730E,0x7433,0x6797,0x78F7, -0x9716,0x4E34,0x90BB,0x9CDE,0x6DCB,0x51DB,0x8D41,0x541D, -0x62CE,0x73B2,0x83F1,0x96F6,0x9F84,0x94C3,0x4F36,0x7F9A, -0x51CC,0x7075,0x9675,0x5CAD,0x9886,0x53E6,0x4EE4,0x6E9C, -0x7409,0x69B4,0x786B,0x998F,0x7559,0x5218,0x7624,0x6D41, -0x67F3,0x516D,0x9F99,0x804B,0x5499,0x7B3C,0x7ABF, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x7FE4,0x7FE7,0x7FE8,0x7FEA,0x7FEB,0x7FEC,0x7FED,0x7FEF, -0x7FF2,0x7FF4,0x7FF5,0x7FF6,0x7FF7,0x7FF8,0x7FF9,0x7FFA, -0x7FFD,0x7FFE,0x7FFF,0x8002,0x8007,0x8008,0x8009,0x800A, -0x800E,0x800F,0x8011,0x8013,0x801A,0x801B,0x801D,0x801E, -0x801F,0x8021,0x8023,0x8024,0x802B,0x802C,0x802D,0x802E, -0x802F,0x8030,0x8032,0x8034,0x8039,0x803A,0x803C,0x803E, -0x8040,0x8041,0x8044,0x8045,0x8047,0x8048,0x8049,0x804E, -0x804F,0x8050,0x8051,0x8053,0x8055,0x8056,0x8057, 0, -0x8059,0x805B,0x805C,0x805D,0x805E,0x805F,0x8060,0x8061, -0x8062,0x8063,0x8064,0x8065,0x8066,0x8067,0x8068,0x806B, -0x806C,0x806D,0x806E,0x806F,0x8070,0x8072,0x8073,0x8074, -0x8075,0x8076,0x8077,0x8078,0x8079,0x807A,0x807B,0x807C, -0x807D,0x9686,0x5784,0x62E2,0x9647,0x697C,0x5A04,0x6402, -0x7BD3,0x6F0F,0x964B,0x82A6,0x5362,0x9885,0x5E90,0x7089, -0x63B3,0x5364,0x864F,0x9C81,0x9E93,0x788C,0x9732,0x8DEF, -0x8D42,0x9E7F,0x6F5E,0x7984,0x5F55,0x9646,0x622E,0x9A74, -0x5415,0x94DD,0x4FA3,0x65C5,0x5C65,0x5C61,0x7F15,0x8651, -0x6C2F,0x5F8B,0x7387,0x6EE4,0x7EFF,0x5CE6,0x631B,0x5B6A, -0x6EE6,0x5375,0x4E71,0x63A0,0x7565,0x62A1,0x8F6E,0x4F26, -0x4ED1,0x6CA6,0x7EB6,0x8BBA,0x841D,0x87BA,0x7F57,0x903B, -0x9523,0x7BA9,0x9AA1,0x88F8,0x843D,0x6D1B,0x9A86,0x7EDC, -0x5988,0x9EBB,0x739B,0x7801,0x8682,0x9A6C,0x9A82,0x561B, -0x5417,0x57CB,0x4E70,0x9EA6,0x5356,0x8FC8,0x8109,0x7792, -0x9992,0x86EE,0x6EE1,0x8513,0x66FC,0x6162,0x6F2B, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x807E,0x8081,0x8082,0x8085,0x8088,0x808A,0x808D,0x808E, -0x808F,0x8090,0x8091,0x8092,0x8094,0x8095,0x8097,0x8099, -0x809E,0x80A3,0x80A6,0x80A7,0x80A8,0x80AC,0x80B0,0x80B3, -0x80B5,0x80B6,0x80B8,0x80B9,0x80BB,0x80C5,0x80C7,0x80C8, -0x80C9,0x80CA,0x80CB,0x80CF,0x80D0,0x80D1,0x80D2,0x80D3, -0x80D4,0x80D5,0x80D8,0x80DF,0x80E0,0x80E2,0x80E3,0x80E6, -0x80EE,0x80F5,0x80F7,0x80F9,0x80FB,0x80FE,0x80FF,0x8100, -0x8101,0x8103,0x8104,0x8105,0x8107,0x8108,0x810B, 0, -0x810C,0x8115,0x8117,0x8119,0x811B,0x811C,0x811D,0x811F, -0x8120,0x8121,0x8122,0x8123,0x8124,0x8125,0x8126,0x8127, -0x8128,0x8129,0x812A,0x812B,0x812D,0x812E,0x8130,0x8133, -0x8134,0x8135,0x8137,0x8139,0x813A,0x813B,0x813C,0x813D, -0x813F,0x8C29,0x8292,0x832B,0x76F2,0x6C13,0x5FD9,0x83BD, -0x732B,0x8305,0x951A,0x6BDB,0x77DB,0x94C6,0x536F,0x8302, -0x5192,0x5E3D,0x8C8C,0x8D38,0x4E48,0x73AB,0x679A,0x6885, -0x9176,0x9709,0x7164,0x6CA1,0x7709,0x5A92,0x9541,0x6BCF, -0x7F8E,0x6627,0x5BD0,0x59B9,0x5A9A,0x95E8,0x95F7,0x4EEC, -0x840C,0x8499,0x6AAC,0x76DF,0x9530,0x731B,0x68A6,0x5B5F, -0x772F,0x919A,0x9761,0x7CDC,0x8FF7,0x8C1C,0x5F25,0x7C73, -0x79D8,0x89C5,0x6CCC,0x871C,0x5BC6,0x5E42,0x68C9,0x7720, -0x7EF5,0x5195,0x514D,0x52C9,0x5A29,0x7F05,0x9762,0x82D7, -0x63CF,0x7784,0x85D0,0x79D2,0x6E3A,0x5E99,0x5999,0x8511, -0x706D,0x6C11,0x62BF,0x76BF,0x654F,0x60AF,0x95FD,0x660E, -0x879F,0x9E23,0x94ED,0x540D,0x547D,0x8C2C,0x6478, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8140,0x8141,0x8142,0x8143,0x8144,0x8145,0x8147,0x8149, -0x814D,0x814E,0x814F,0x8152,0x8156,0x8157,0x8158,0x815B, -0x815C,0x815D,0x815E,0x815F,0x8161,0x8162,0x8163,0x8164, -0x8166,0x8168,0x816A,0x816B,0x816C,0x816F,0x8172,0x8173, -0x8175,0x8176,0x8177,0x8178,0x8181,0x8183,0x8184,0x8185, -0x8186,0x8187,0x8189,0x818B,0x818C,0x818D,0x818E,0x8190, -0x8192,0x8193,0x8194,0x8195,0x8196,0x8197,0x8199,0x819A, -0x819E,0x819F,0x81A0,0x81A1,0x81A2,0x81A4,0x81A5, 0, -0x81A7,0x81A9,0x81AB,0x81AC,0x81AD,0x81AE,0x81AF,0x81B0, -0x81B1,0x81B2,0x81B4,0x81B5,0x81B6,0x81B7,0x81B8,0x81B9, -0x81BC,0x81BD,0x81BE,0x81BF,0x81C4,0x81C5,0x81C7,0x81C8, -0x81C9,0x81CB,0x81CD,0x81CE,0x81CF,0x81D0,0x81D1,0x81D2, -0x81D3,0x6479,0x8611,0x6A21,0x819C,0x78E8,0x6469,0x9B54, -0x62B9,0x672B,0x83AB,0x58A8,0x9ED8,0x6CAB,0x6F20,0x5BDE, -0x964C,0x8C0B,0x725F,0x67D0,0x62C7,0x7261,0x4EA9,0x59C6, -0x6BCD,0x5893,0x66AE,0x5E55,0x52DF,0x6155,0x6728,0x76EE, -0x7766,0x7267,0x7A46,0x62FF,0x54EA,0x5450,0x94A0,0x90A3, -0x5A1C,0x7EB3,0x6C16,0x4E43,0x5976,0x8010,0x5948,0x5357, -0x7537,0x96BE,0x56CA,0x6320,0x8111,0x607C,0x95F9,0x6DD6, -0x5462,0x9981,0x5185,0x5AE9,0x80FD,0x59AE,0x9713,0x502A, -0x6CE5,0x5C3C,0x62DF,0x4F60,0x533F,0x817B,0x9006,0x6EBA, -0x852B,0x62C8,0x5E74,0x78BE,0x64B5,0x637B,0x5FF5,0x5A18, -0x917F,0x9E1F,0x5C3F,0x634F,0x8042,0x5B7D,0x556E,0x954A, -0x954D,0x6D85,0x60A8,0x67E0,0x72DE,0x51DD,0x5B81, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x81D4,0x81D5,0x81D6,0x81D7,0x81D8,0x81D9,0x81DA,0x81DB, -0x81DC,0x81DD,0x81DE,0x81DF,0x81E0,0x81E1,0x81E2,0x81E4, -0x81E5,0x81E6,0x81E8,0x81E9,0x81EB,0x81EE,0x81EF,0x81F0, -0x81F1,0x81F2,0x81F5,0x81F6,0x81F7,0x81F8,0x81F9,0x81FA, -0x81FD,0x81FF,0x8203,0x8207,0x8208,0x8209,0x820A,0x820B, -0x820E,0x820F,0x8211,0x8213,0x8215,0x8216,0x8217,0x8218, -0x8219,0x821A,0x821D,0x8220,0x8224,0x8225,0x8226,0x8227, -0x8229,0x822E,0x8232,0x823A,0x823C,0x823D,0x823F, 0, -0x8240,0x8241,0x8242,0x8243,0x8245,0x8246,0x8248,0x824A, -0x824C,0x824D,0x824E,0x8250,0x8251,0x8252,0x8253,0x8254, -0x8255,0x8256,0x8257,0x8259,0x825B,0x825C,0x825D,0x825E, -0x8260,0x8261,0x8262,0x8263,0x8264,0x8265,0x8266,0x8267, -0x8269,0x62E7,0x6CDE,0x725B,0x626D,0x94AE,0x7EBD,0x8113, -0x6D53,0x519C,0x5F04,0x5974,0x52AA,0x6012,0x5973,0x6696, -0x8650,0x759F,0x632A,0x61E6,0x7CEF,0x8BFA,0x54E6,0x6B27, -0x9E25,0x6BB4,0x85D5,0x5455,0x5076,0x6CA4,0x556A,0x8DB4, -0x722C,0x5E15,0x6015,0x7436,0x62CD,0x6392,0x724C,0x5F98, -0x6E43,0x6D3E,0x6500,0x6F58,0x76D8,0x78D0,0x76FC,0x7554, -0x5224,0x53DB,0x4E53,0x5E9E,0x65C1,0x802A,0x80D6,0x629B, -0x5486,0x5228,0x70AE,0x888D,0x8DD1,0x6CE1,0x5478,0x80DA, -0x57F9,0x88F4,0x8D54,0x966A,0x914D,0x4F69,0x6C9B,0x55B7, -0x76C6,0x7830,0x62A8,0x70F9,0x6F8E,0x5F6D,0x84EC,0x68DA, -0x787C,0x7BF7,0x81A8,0x670B,0x9E4F,0x6367,0x78B0,0x576F, -0x7812,0x9739,0x6279,0x62AB,0x5288,0x7435,0x6BD7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x826A,0x826B,0x826C,0x826D,0x8271,0x8275,0x8276,0x8277, -0x8278,0x827B,0x827C,0x8280,0x8281,0x8283,0x8285,0x8286, -0x8287,0x8289,0x828C,0x8290,0x8293,0x8294,0x8295,0x8296, -0x829A,0x829B,0x829E,0x82A0,0x82A2,0x82A3,0x82A7,0x82B2, -0x82B5,0x82B6,0x82BA,0x82BB,0x82BC,0x82BF,0x82C0,0x82C2, -0x82C3,0x82C5,0x82C6,0x82C9,0x82D0,0x82D6,0x82D9,0x82DA, -0x82DD,0x82E2,0x82E7,0x82E8,0x82E9,0x82EA,0x82EC,0x82ED, -0x82EE,0x82F0,0x82F2,0x82F3,0x82F5,0x82F6,0x82F8, 0, -0x82FA,0x82FC,0x82FD,0x82FE,0x82FF,0x8300,0x830A,0x830B, -0x830D,0x8310,0x8312,0x8313,0x8316,0x8318,0x8319,0x831D, -0x831E,0x831F,0x8320,0x8321,0x8322,0x8323,0x8324,0x8325, -0x8326,0x8329,0x832A,0x832E,0x8330,0x8332,0x8337,0x833B, -0x833D,0x5564,0x813E,0x75B2,0x76AE,0x5339,0x75DE,0x50FB, -0x5C41,0x8B6C,0x7BC7,0x504F,0x7247,0x9A97,0x98D8,0x6F02, -0x74E2,0x7968,0x6487,0x77A5,0x62FC,0x9891,0x8D2B,0x54C1, -0x8058,0x4E52,0x576A,0x82F9,0x840D,0x5E73,0x51ED,0x74F6, -0x8BC4,0x5C4F,0x5761,0x6CFC,0x9887,0x5A46,0x7834,0x9B44, -0x8FEB,0x7C95,0x5256,0x6251,0x94FA,0x4EC6,0x8386,0x8461, -0x83E9,0x84B2,0x57D4,0x6734,0x5703,0x666E,0x6D66,0x8C31, -0x66DD,0x7011,0x671F,0x6B3A,0x6816,0x621A,0x59BB,0x4E03, -0x51C4,0x6F06,0x67D2,0x6C8F,0x5176,0x68CB,0x5947,0x6B67, -0x7566,0x5D0E,0x8110,0x9F50,0x65D7,0x7948,0x7941,0x9A91, -0x8D77,0x5C82,0x4E5E,0x4F01,0x542F,0x5951,0x780C,0x5668, -0x6C14,0x8FC4,0x5F03,0x6C7D,0x6CE3,0x8BAB,0x6390, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x833E,0x833F,0x8341,0x8342,0x8344,0x8345,0x8348,0x834A, -0x834B,0x834C,0x834D,0x834E,0x8353,0x8355,0x8356,0x8357, -0x8358,0x8359,0x835D,0x8362,0x8370,0x8371,0x8372,0x8373, -0x8374,0x8375,0x8376,0x8379,0x837A,0x837E,0x837F,0x8380, -0x8381,0x8382,0x8383,0x8384,0x8387,0x8388,0x838A,0x838B, -0x838C,0x838D,0x838F,0x8390,0x8391,0x8394,0x8395,0x8396, -0x8397,0x8399,0x839A,0x839D,0x839F,0x83A1,0x83A2,0x83A3, -0x83A4,0x83A5,0x83A6,0x83A7,0x83AC,0x83AD,0x83AE, 0, -0x83AF,0x83B5,0x83BB,0x83BE,0x83BF,0x83C2,0x83C3,0x83C4, -0x83C6,0x83C8,0x83C9,0x83CB,0x83CD,0x83CE,0x83D0,0x83D1, -0x83D2,0x83D3,0x83D5,0x83D7,0x83D9,0x83DA,0x83DB,0x83DE, -0x83E2,0x83E3,0x83E4,0x83E6,0x83E7,0x83E8,0x83EB,0x83EC, -0x83ED,0x6070,0x6D3D,0x7275,0x6266,0x948E,0x94C5,0x5343, -0x8FC1,0x7B7E,0x4EDF,0x8C26,0x4E7E,0x9ED4,0x94B1,0x94B3, -0x524D,0x6F5C,0x9063,0x6D45,0x8C34,0x5811,0x5D4C,0x6B20, -0x6B49,0x67AA,0x545B,0x8154,0x7F8C,0x5899,0x8537,0x5F3A, -0x62A2,0x6A47,0x9539,0x6572,0x6084,0x6865,0x77A7,0x4E54, -0x4FA8,0x5DE7,0x9798,0x64AC,0x7FD8,0x5CED,0x4FCF,0x7A8D, -0x5207,0x8304,0x4E14,0x602F,0x7A83,0x94A6,0x4FB5,0x4EB2, -0x79E6,0x7434,0x52E4,0x82B9,0x64D2,0x79BD,0x5BDD,0x6C81, -0x9752,0x8F7B,0x6C22,0x503E,0x537F,0x6E05,0x64CE,0x6674, -0x6C30,0x60C5,0x9877,0x8BF7,0x5E86,0x743C,0x7A77,0x79CB, -0x4E18,0x90B1,0x7403,0x6C42,0x56DA,0x914B,0x6CC5,0x8D8B, -0x533A,0x86C6,0x66F2,0x8EAF,0x5C48,0x9A71,0x6E20, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x83EE,0x83EF,0x83F3,0x83F4,0x83F5,0x83F6,0x83F7,0x83FA, -0x83FB,0x83FC,0x83FE,0x83FF,0x8400,0x8402,0x8405,0x8407, -0x8408,0x8409,0x840A,0x8410,0x8412,0x8413,0x8414,0x8415, -0x8416,0x8417,0x8419,0x841A,0x841B,0x841E,0x841F,0x8420, -0x8421,0x8422,0x8423,0x8429,0x842A,0x842B,0x842C,0x842D, -0x842E,0x842F,0x8430,0x8432,0x8433,0x8434,0x8435,0x8436, -0x8437,0x8439,0x843A,0x843B,0x843E,0x843F,0x8440,0x8441, -0x8442,0x8443,0x8444,0x8445,0x8447,0x8448,0x8449, 0, -0x844A,0x844B,0x844C,0x844D,0x844E,0x844F,0x8450,0x8452, -0x8453,0x8454,0x8455,0x8456,0x8458,0x845D,0x845E,0x845F, -0x8460,0x8462,0x8464,0x8465,0x8466,0x8467,0x8468,0x846A, -0x846E,0x846F,0x8470,0x8472,0x8474,0x8477,0x8479,0x847B, -0x847C,0x53D6,0x5A36,0x9F8B,0x8DA3,0x53BB,0x5708,0x98A7, -0x6743,0x919B,0x6CC9,0x5168,0x75CA,0x62F3,0x72AC,0x5238, -0x529D,0x7F3A,0x7094,0x7638,0x5374,0x9E4A,0x69B7,0x786E, -0x96C0,0x88D9,0x7FA4,0x7136,0x71C3,0x5189,0x67D3,0x74E4, -0x58E4,0x6518,0x56B7,0x8BA9,0x9976,0x6270,0x7ED5,0x60F9, -0x70ED,0x58EC,0x4EC1,0x4EBA,0x5FCD,0x97E7,0x4EFB,0x8BA4, -0x5203,0x598A,0x7EAB,0x6254,0x4ECD,0x65E5,0x620E,0x8338, -0x84C9,0x8363,0x878D,0x7194,0x6EB6,0x5BB9,0x7ED2,0x5197, -0x63C9,0x67D4,0x8089,0x8339,0x8815,0x5112,0x5B7A,0x5982, -0x8FB1,0x4E73,0x6C5D,0x5165,0x8925,0x8F6F,0x962E,0x854A, -0x745E,0x9510,0x95F0,0x6DA6,0x82E5,0x5F31,0x6492,0x6D12, -0x8428,0x816E,0x9CC3,0x585E,0x8D5B,0x4E09,0x53C1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x847D,0x847E,0x847F,0x8480,0x8481,0x8483,0x8484,0x8485, -0x8486,0x848A,0x848D,0x848F,0x8490,0x8491,0x8492,0x8493, -0x8494,0x8495,0x8496,0x8498,0x849A,0x849B,0x849D,0x849E, -0x849F,0x84A0,0x84A2,0x84A3,0x84A4,0x84A5,0x84A6,0x84A7, -0x84A8,0x84A9,0x84AA,0x84AB,0x84AC,0x84AD,0x84AE,0x84B0, -0x84B1,0x84B3,0x84B5,0x84B6,0x84B7,0x84BB,0x84BC,0x84BE, -0x84C0,0x84C2,0x84C3,0x84C5,0x84C6,0x84C7,0x84C8,0x84CB, -0x84CC,0x84CE,0x84CF,0x84D2,0x84D4,0x84D5,0x84D7, 0, -0x84D8,0x84D9,0x84DA,0x84DB,0x84DC,0x84DE,0x84E1,0x84E2, -0x84E4,0x84E7,0x84E8,0x84E9,0x84EA,0x84EB,0x84ED,0x84EE, -0x84EF,0x84F1,0x84F2,0x84F3,0x84F4,0x84F5,0x84F6,0x84F7, -0x84F8,0x84F9,0x84FA,0x84FB,0x84FD,0x84FE,0x8500,0x8501, -0x8502,0x4F1E,0x6563,0x6851,0x55D3,0x4E27,0x6414,0x9A9A, -0x626B,0x5AC2,0x745F,0x8272,0x6DA9,0x68EE,0x50E7,0x838E, -0x7802,0x6740,0x5239,0x6C99,0x7EB1,0x50BB,0x5565,0x715E, -0x7B5B,0x6652,0x73CA,0x82EB,0x6749,0x5C71,0x5220,0x717D, -0x886B,0x95EA,0x9655,0x64C5,0x8D61,0x81B3,0x5584,0x6C55, -0x6247,0x7F2E,0x5892,0x4F24,0x5546,0x8D4F,0x664C,0x4E0A, -0x5C1A,0x88F3,0x68A2,0x634E,0x7A0D,0x70E7,0x828D,0x52FA, -0x97F6,0x5C11,0x54E8,0x90B5,0x7ECD,0x5962,0x8D4A,0x86C7, -0x820C,0x820D,0x8D66,0x6444,0x5C04,0x6151,0x6D89,0x793E, -0x8BBE,0x7837,0x7533,0x547B,0x4F38,0x8EAB,0x6DF1,0x5A20, -0x7EC5,0x795E,0x6C88,0x5BA1,0x5A76,0x751A,0x80BE,0x614E, -0x6E17,0x58F0,0x751F,0x7525,0x7272,0x5347,0x7EF3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8503,0x8504,0x8505,0x8506,0x8507,0x8508,0x8509,0x850A, -0x850B,0x850D,0x850E,0x850F,0x8510,0x8512,0x8514,0x8515, -0x8516,0x8518,0x8519,0x851B,0x851C,0x851D,0x851E,0x8520, -0x8522,0x8523,0x8524,0x8525,0x8526,0x8527,0x8528,0x8529, -0x852A,0x852D,0x852E,0x852F,0x8530,0x8531,0x8532,0x8533, -0x8534,0x8535,0x8536,0x853E,0x853F,0x8540,0x8541,0x8542, -0x8544,0x8545,0x8546,0x8547,0x854B,0x854C,0x854D,0x854E, -0x854F,0x8550,0x8551,0x8552,0x8553,0x8554,0x8555, 0, -0x8557,0x8558,0x855A,0x855B,0x855C,0x855D,0x855F,0x8560, -0x8561,0x8562,0x8563,0x8565,0x8566,0x8567,0x8569,0x856A, -0x856B,0x856C,0x856D,0x856E,0x856F,0x8570,0x8571,0x8573, -0x8575,0x8576,0x8577,0x8578,0x857C,0x857D,0x857F,0x8580, -0x8581,0x7701,0x76DB,0x5269,0x80DC,0x5723,0x5E08,0x5931, -0x72EE,0x65BD,0x6E7F,0x8BD7,0x5C38,0x8671,0x5341,0x77F3, -0x62FE,0x65F6,0x4EC0,0x98DF,0x8680,0x5B9E,0x8BC6,0x53F2, -0x77E2,0x4F7F,0x5C4E,0x9A76,0x59CB,0x5F0F,0x793A,0x58EB, -0x4E16,0x67FF,0x4E8B,0x62ED,0x8A93,0x901D,0x52BF,0x662F, -0x55DC,0x566C,0x9002,0x4ED5,0x4F8D,0x91CA,0x9970,0x6C0F, -0x5E02,0x6043,0x5BA4,0x89C6,0x8BD5,0x6536,0x624B,0x9996, -0x5B88,0x5BFF,0x6388,0x552E,0x53D7,0x7626,0x517D,0x852C, -0x67A2,0x68B3,0x6B8A,0x6292,0x8F93,0x53D4,0x8212,0x6DD1, -0x758F,0x4E66,0x8D4E,0x5B70,0x719F,0x85AF,0x6691,0x66D9, -0x7F72,0x8700,0x9ECD,0x9F20,0x5C5E,0x672F,0x8FF0,0x6811, -0x675F,0x620D,0x7AD6,0x5885,0x5EB6,0x6570,0x6F31, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8582,0x8583,0x8586,0x8588,0x8589,0x858A,0x858B,0x858C, -0x858D,0x858E,0x8590,0x8591,0x8592,0x8593,0x8594,0x8595, -0x8596,0x8597,0x8598,0x8599,0x859A,0x859D,0x859E,0x859F, -0x85A0,0x85A1,0x85A2,0x85A3,0x85A5,0x85A6,0x85A7,0x85A9, -0x85AB,0x85AC,0x85AD,0x85B1,0x85B2,0x85B3,0x85B4,0x85B5, -0x85B6,0x85B8,0x85BA,0x85BB,0x85BC,0x85BD,0x85BE,0x85BF, -0x85C0,0x85C2,0x85C3,0x85C4,0x85C5,0x85C6,0x85C7,0x85C8, -0x85CA,0x85CB,0x85CC,0x85CD,0x85CE,0x85D1,0x85D2, 0, -0x85D4,0x85D6,0x85D7,0x85D8,0x85D9,0x85DA,0x85DB,0x85DD, -0x85DE,0x85DF,0x85E0,0x85E1,0x85E2,0x85E3,0x85E5,0x85E6, -0x85E7,0x85E8,0x85EA,0x85EB,0x85EC,0x85ED,0x85EE,0x85EF, -0x85F0,0x85F1,0x85F2,0x85F3,0x85F4,0x85F5,0x85F6,0x85F7, -0x85F8,0x6055,0x5237,0x800D,0x6454,0x8870,0x7529,0x5E05, -0x6813,0x62F4,0x971C,0x53CC,0x723D,0x8C01,0x6C34,0x7761, -0x7A0E,0x542E,0x77AC,0x987A,0x821C,0x8BF4,0x7855,0x6714, -0x70C1,0x65AF,0x6495,0x5636,0x601D,0x79C1,0x53F8,0x4E1D, -0x6B7B,0x8086,0x5BFA,0x55E3,0x56DB,0x4F3A,0x4F3C,0x9972, -0x5DF3,0x677E,0x8038,0x6002,0x9882,0x9001,0x5B8B,0x8BBC, -0x8BF5,0x641C,0x8258,0x64DE,0x55FD,0x82CF,0x9165,0x4FD7, -0x7D20,0x901F,0x7C9F,0x50F3,0x5851,0x6EAF,0x5BBF,0x8BC9, -0x8083,0x9178,0x849C,0x7B97,0x867D,0x968B,0x968F,0x7EE5, -0x9AD3,0x788E,0x5C81,0x7A57,0x9042,0x96A7,0x795F,0x5B59, -0x635F,0x7B0B,0x84D1,0x68AD,0x5506,0x7F29,0x7410,0x7D22, -0x9501,0x6240,0x584C,0x4ED6,0x5B83,0x5979,0x5854, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x85F9,0x85FA,0x85FC,0x85FD,0x85FE,0x8600,0x8601,0x8602, -0x8603,0x8604,0x8606,0x8607,0x8608,0x8609,0x860A,0x860B, -0x860C,0x860D,0x860E,0x860F,0x8610,0x8612,0x8613,0x8614, -0x8615,0x8617,0x8618,0x8619,0x861A,0x861B,0x861C,0x861D, -0x861E,0x861F,0x8620,0x8621,0x8622,0x8623,0x8624,0x8625, -0x8626,0x8628,0x862A,0x862B,0x862C,0x862D,0x862E,0x862F, -0x8630,0x8631,0x8632,0x8633,0x8634,0x8635,0x8636,0x8637, -0x8639,0x863A,0x863B,0x863D,0x863E,0x863F,0x8640, 0, -0x8641,0x8642,0x8643,0x8644,0x8645,0x8646,0x8647,0x8648, -0x8649,0x864A,0x864B,0x864C,0x8652,0x8653,0x8655,0x8656, -0x8657,0x8658,0x8659,0x865B,0x865C,0x865D,0x865F,0x8660, -0x8661,0x8663,0x8664,0x8665,0x8666,0x8667,0x8668,0x8669, -0x866A,0x736D,0x631E,0x8E4B,0x8E0F,0x80CE,0x82D4,0x62AC, -0x53F0,0x6CF0,0x915E,0x592A,0x6001,0x6C70,0x574D,0x644A, -0x8D2A,0x762B,0x6EE9,0x575B,0x6A80,0x75F0,0x6F6D,0x8C2D, -0x8C08,0x5766,0x6BEF,0x8892,0x78B3,0x63A2,0x53F9,0x70AD, -0x6C64,0x5858,0x642A,0x5802,0x68E0,0x819B,0x5510,0x7CD6, -0x5018,0x8EBA,0x6DCC,0x8D9F,0x70EB,0x638F,0x6D9B,0x6ED4, -0x7EE6,0x8404,0x6843,0x9003,0x6DD8,0x9676,0x8BA8,0x5957, -0x7279,0x85E4,0x817E,0x75BC,0x8A8A,0x68AF,0x5254,0x8E22, -0x9511,0x63D0,0x9898,0x8E44,0x557C,0x4F53,0x66FF,0x568F, -0x60D5,0x6D95,0x5243,0x5C49,0x5929,0x6DFB,0x586B,0x7530, -0x751C,0x606C,0x8214,0x8146,0x6311,0x6761,0x8FE2,0x773A, -0x8DF3,0x8D34,0x94C1,0x5E16,0x5385,0x542C,0x70C3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x866D,0x866F,0x8670,0x8672,0x8673,0x8674,0x8675,0x8676, -0x8677,0x8678,0x8683,0x8684,0x8685,0x8686,0x8687,0x8688, -0x8689,0x868E,0x868F,0x8690,0x8691,0x8692,0x8694,0x8696, -0x8697,0x8698,0x8699,0x869A,0x869B,0x869E,0x869F,0x86A0, -0x86A1,0x86A2,0x86A5,0x86A6,0x86AB,0x86AD,0x86AE,0x86B2, -0x86B3,0x86B7,0x86B8,0x86B9,0x86BB,0x86BC,0x86BD,0x86BE, -0x86BF,0x86C1,0x86C2,0x86C3,0x86C5,0x86C8,0x86CC,0x86CD, -0x86D2,0x86D3,0x86D5,0x86D6,0x86D7,0x86DA,0x86DC, 0, -0x86DD,0x86E0,0x86E1,0x86E2,0x86E3,0x86E5,0x86E6,0x86E7, -0x86E8,0x86EA,0x86EB,0x86EC,0x86EF,0x86F5,0x86F6,0x86F7, -0x86FA,0x86FB,0x86FC,0x86FD,0x86FF,0x8701,0x8704,0x8705, -0x8706,0x870B,0x870C,0x870E,0x870F,0x8710,0x8711,0x8714, -0x8716,0x6C40,0x5EF7,0x505C,0x4EAD,0x5EAD,0x633A,0x8247, -0x901A,0x6850,0x916E,0x77B3,0x540C,0x94DC,0x5F64,0x7AE5, -0x6876,0x6345,0x7B52,0x7EDF,0x75DB,0x5077,0x6295,0x5934, -0x900F,0x51F8,0x79C3,0x7A81,0x56FE,0x5F92,0x9014,0x6D82, -0x5C60,0x571F,0x5410,0x5154,0x6E4D,0x56E2,0x63A8,0x9893, -0x817F,0x8715,0x892A,0x9000,0x541E,0x5C6F,0x81C0,0x62D6, -0x6258,0x8131,0x9E35,0x9640,0x9A6E,0x9A7C,0x692D,0x59A5, -0x62D3,0x553E,0x6316,0x54C7,0x86D9,0x6D3C,0x5A03,0x74E6, -0x889C,0x6B6A,0x5916,0x8C4C,0x5F2F,0x6E7E,0x73A9,0x987D, -0x4E38,0x70F7,0x5B8C,0x7897,0x633D,0x665A,0x7696,0x60CB, -0x5B9B,0x5A49,0x4E07,0x8155,0x6C6A,0x738B,0x4EA1,0x6789, -0x7F51,0x5F80,0x65FA,0x671B,0x5FD8,0x5984,0x5A01, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8719,0x871B,0x871D,0x871F,0x8720,0x8724,0x8726,0x8727, -0x8728,0x872A,0x872B,0x872C,0x872D,0x872F,0x8730,0x8732, -0x8733,0x8735,0x8736,0x8738,0x8739,0x873A,0x873C,0x873D, -0x8740,0x8741,0x8742,0x8743,0x8744,0x8745,0x8746,0x874A, -0x874B,0x874D,0x874F,0x8750,0x8751,0x8752,0x8754,0x8755, -0x8756,0x8758,0x875A,0x875B,0x875C,0x875D,0x875E,0x875F, -0x8761,0x8762,0x8766,0x8767,0x8768,0x8769,0x876A,0x876B, -0x876C,0x876D,0x876F,0x8771,0x8772,0x8773,0x8775, 0, -0x8777,0x8778,0x8779,0x877A,0x877F,0x8780,0x8781,0x8784, -0x8786,0x8787,0x8789,0x878A,0x878C,0x878E,0x878F,0x8790, -0x8791,0x8792,0x8794,0x8795,0x8796,0x8798,0x8799,0x879A, -0x879B,0x879C,0x879D,0x879E,0x87A0,0x87A1,0x87A2,0x87A3, -0x87A4,0x5DCD,0x5FAE,0x5371,0x97E6,0x8FDD,0x6845,0x56F4, -0x552F,0x60DF,0x4E3A,0x6F4D,0x7EF4,0x82C7,0x840E,0x59D4, -0x4F1F,0x4F2A,0x5C3E,0x7EAC,0x672A,0x851A,0x5473,0x754F, -0x80C3,0x5582,0x9B4F,0x4F4D,0x6E2D,0x8C13,0x5C09,0x6170, -0x536B,0x761F,0x6E29,0x868A,0x6587,0x95FB,0x7EB9,0x543B, -0x7A33,0x7D0A,0x95EE,0x55E1,0x7FC1,0x74EE,0x631D,0x8717, -0x6DA1,0x7A9D,0x6211,0x65A1,0x5367,0x63E1,0x6C83,0x5DEB, -0x545C,0x94A8,0x4E4C,0x6C61,0x8BEC,0x5C4B,0x65E0,0x829C, -0x68A7,0x543E,0x5434,0x6BCB,0x6B66,0x4E94,0x6342,0x5348, -0x821E,0x4F0D,0x4FAE,0x575E,0x620A,0x96FE,0x6664,0x7269, -0x52FF,0x52A1,0x609F,0x8BEF,0x6614,0x7199,0x6790,0x897F, -0x7852,0x77FD,0x6670,0x563B,0x5438,0x9521,0x727A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x87A5,0x87A6,0x87A7,0x87A9,0x87AA,0x87AE,0x87B0,0x87B1, -0x87B2,0x87B4,0x87B6,0x87B7,0x87B8,0x87B9,0x87BB,0x87BC, -0x87BE,0x87BF,0x87C1,0x87C2,0x87C3,0x87C4,0x87C5,0x87C7, -0x87C8,0x87C9,0x87CC,0x87CD,0x87CE,0x87CF,0x87D0,0x87D4, -0x87D5,0x87D6,0x87D7,0x87D8,0x87D9,0x87DA,0x87DC,0x87DD, -0x87DE,0x87DF,0x87E1,0x87E2,0x87E3,0x87E4,0x87E6,0x87E7, -0x87E8,0x87E9,0x87EB,0x87EC,0x87ED,0x87EF,0x87F0,0x87F1, -0x87F2,0x87F3,0x87F4,0x87F5,0x87F6,0x87F7,0x87F8, 0, -0x87FA,0x87FB,0x87FC,0x87FD,0x87FF,0x8800,0x8801,0x8802, -0x8804,0x8805,0x8806,0x8807,0x8808,0x8809,0x880B,0x880C, -0x880D,0x880E,0x880F,0x8810,0x8811,0x8812,0x8814,0x8817, -0x8818,0x8819,0x881A,0x881C,0x881D,0x881E,0x881F,0x8820, -0x8823,0x7A00,0x606F,0x5E0C,0x6089,0x819D,0x5915,0x60DC, -0x7184,0x70EF,0x6EAA,0x6C50,0x7280,0x6A84,0x88AD,0x5E2D, -0x4E60,0x5AB3,0x559C,0x94E3,0x6D17,0x7CFB,0x9699,0x620F, -0x7EC6,0x778E,0x867E,0x5323,0x971E,0x8F96,0x6687,0x5CE1, -0x4FA0,0x72ED,0x4E0B,0x53A6,0x590F,0x5413,0x6380,0x9528, -0x5148,0x4ED9,0x9C9C,0x7EA4,0x54B8,0x8D24,0x8854,0x8237, -0x95F2,0x6D8E,0x5F26,0x5ACC,0x663E,0x9669,0x73B0,0x732E, -0x53BF,0x817A,0x9985,0x7FA1,0x5BAA,0x9677,0x9650,0x7EBF, -0x76F8,0x53A2,0x9576,0x9999,0x7BB1,0x8944,0x6E58,0x4E61, -0x7FD4,0x7965,0x8BE6,0x60F3,0x54CD,0x4EAB,0x9879,0x5DF7, -0x6A61,0x50CF,0x5411,0x8C61,0x8427,0x785D,0x9704,0x524A, -0x54EE,0x56A3,0x9500,0x6D88,0x5BB5,0x6DC6,0x6653, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8824,0x8825,0x8826,0x8827,0x8828,0x8829,0x882A,0x882B, -0x882C,0x882D,0x882E,0x882F,0x8830,0x8831,0x8833,0x8834, -0x8835,0x8836,0x8837,0x8838,0x883A,0x883B,0x883D,0x883E, -0x883F,0x8841,0x8842,0x8843,0x8846,0x8847,0x8848,0x8849, -0x884A,0x884B,0x884E,0x884F,0x8850,0x8851,0x8852,0x8853, -0x8855,0x8856,0x8858,0x885A,0x885B,0x885C,0x885D,0x885E, -0x885F,0x8860,0x8866,0x8867,0x886A,0x886D,0x886F,0x8871, -0x8873,0x8874,0x8875,0x8876,0x8878,0x8879,0x887A, 0, -0x887B,0x887C,0x8880,0x8883,0x8886,0x8887,0x8889,0x888A, -0x888C,0x888E,0x888F,0x8890,0x8891,0x8893,0x8894,0x8895, -0x8897,0x8898,0x8899,0x889A,0x889B,0x889D,0x889E,0x889F, -0x88A0,0x88A1,0x88A3,0x88A5,0x88A6,0x88A7,0x88A8,0x88A9, -0x88AA,0x5C0F,0x5B5D,0x6821,0x8096,0x5578,0x7B11,0x6548, -0x6954,0x4E9B,0x6B47,0x874E,0x978B,0x534F,0x631F,0x643A, -0x90AA,0x659C,0x80C1,0x8C10,0x5199,0x68B0,0x5378,0x87F9, -0x61C8,0x6CC4,0x6CFB,0x8C22,0x5C51,0x85AA,0x82AF,0x950C, -0x6B23,0x8F9B,0x65B0,0x5FFB,0x5FC3,0x4FE1,0x8845,0x661F, -0x8165,0x7329,0x60FA,0x5174,0x5211,0x578B,0x5F62,0x90A2, -0x884C,0x9192,0x5E78,0x674F,0x6027,0x59D3,0x5144,0x51F6, -0x80F8,0x5308,0x6C79,0x96C4,0x718A,0x4F11,0x4FEE,0x7F9E, -0x673D,0x55C5,0x9508,0x79C0,0x8896,0x7EE3,0x589F,0x620C, -0x9700,0x865A,0x5618,0x987B,0x5F90,0x8BB8,0x84C4,0x9157, -0x53D9,0x65ED,0x5E8F,0x755C,0x6064,0x7D6E,0x5A7F,0x7EEA, -0x7EED,0x8F69,0x55A7,0x5BA3,0x60AC,0x65CB,0x7384, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x88AC,0x88AE,0x88AF,0x88B0,0x88B2,0x88B3,0x88B4,0x88B5, -0x88B6,0x88B8,0x88B9,0x88BA,0x88BB,0x88BD,0x88BE,0x88BF, -0x88C0,0x88C3,0x88C4,0x88C7,0x88C8,0x88CA,0x88CB,0x88CC, -0x88CD,0x88CF,0x88D0,0x88D1,0x88D3,0x88D6,0x88D7,0x88DA, -0x88DB,0x88DC,0x88DD,0x88DE,0x88E0,0x88E1,0x88E6,0x88E7, -0x88E9,0x88EA,0x88EB,0x88EC,0x88ED,0x88EE,0x88EF,0x88F2, -0x88F5,0x88F6,0x88F7,0x88FA,0x88FB,0x88FD,0x88FF,0x8900, -0x8901,0x8903,0x8904,0x8905,0x8906,0x8907,0x8908, 0, -0x8909,0x890B,0x890C,0x890D,0x890E,0x890F,0x8911,0x8914, -0x8915,0x8916,0x8917,0x8918,0x891C,0x891D,0x891E,0x891F, -0x8920,0x8922,0x8923,0x8924,0x8926,0x8927,0x8928,0x8929, -0x892C,0x892D,0x892E,0x892F,0x8931,0x8932,0x8933,0x8935, -0x8937,0x9009,0x7663,0x7729,0x7EDA,0x9774,0x859B,0x5B66, -0x7A74,0x96EA,0x8840,0x52CB,0x718F,0x5FAA,0x65EC,0x8BE2, -0x5BFB,0x9A6F,0x5DE1,0x6B89,0x6C5B,0x8BAD,0x8BAF,0x900A, -0x8FC5,0x538B,0x62BC,0x9E26,0x9E2D,0x5440,0x4E2B,0x82BD, -0x7259,0x869C,0x5D16,0x8859,0x6DAF,0x96C5,0x54D1,0x4E9A, -0x8BB6,0x7109,0x54BD,0x9609,0x70DF,0x6DF9,0x76D0,0x4E25, -0x7814,0x8712,0x5CA9,0x5EF6,0x8A00,0x989C,0x960E,0x708E, -0x6CBF,0x5944,0x63A9,0x773C,0x884D,0x6F14,0x8273,0x5830, -0x71D5,0x538C,0x781A,0x96C1,0x5501,0x5F66,0x7130,0x5BB4, -0x8C1A,0x9A8C,0x6B83,0x592E,0x9E2F,0x79E7,0x6768,0x626C, -0x4F6F,0x75A1,0x7F8A,0x6D0B,0x9633,0x6C27,0x4EF0,0x75D2, -0x517B,0x6837,0x6F3E,0x9080,0x8170,0x5996,0x7476, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8938,0x8939,0x893A,0x893B,0x893C,0x893D,0x893E,0x893F, -0x8940,0x8942,0x8943,0x8945,0x8946,0x8947,0x8948,0x8949, -0x894A,0x894B,0x894C,0x894D,0x894E,0x894F,0x8950,0x8951, -0x8952,0x8953,0x8954,0x8955,0x8956,0x8957,0x8958,0x8959, -0x895A,0x895B,0x895C,0x895D,0x8960,0x8961,0x8962,0x8963, -0x8964,0x8965,0x8967,0x8968,0x8969,0x896A,0x896B,0x896C, -0x896D,0x896E,0x896F,0x8970,0x8971,0x8972,0x8973,0x8974, -0x8975,0x8976,0x8977,0x8978,0x8979,0x897A,0x897C, 0, -0x897D,0x897E,0x8980,0x8982,0x8984,0x8985,0x8987,0x8988, -0x8989,0x898A,0x898B,0x898C,0x898D,0x898E,0x898F,0x8990, -0x8991,0x8992,0x8993,0x8994,0x8995,0x8996,0x8997,0x8998, -0x8999,0x899A,0x899B,0x899C,0x899D,0x899E,0x899F,0x89A0, -0x89A1,0x6447,0x5C27,0x9065,0x7A91,0x8C23,0x59DA,0x54AC, -0x8200,0x836F,0x8981,0x8000,0x6930,0x564E,0x8036,0x7237, -0x91CE,0x51B6,0x4E5F,0x9875,0x6396,0x4E1A,0x53F6,0x66F3, -0x814B,0x591C,0x6DB2,0x4E00,0x58F9,0x533B,0x63D6,0x94F1, -0x4F9D,0x4F0A,0x8863,0x9890,0x5937,0x9057,0x79FB,0x4EEA, -0x80F0,0x7591,0x6C82,0x5B9C,0x59E8,0x5F5D,0x6905,0x8681, -0x501A,0x5DF2,0x4E59,0x77E3,0x4EE5,0x827A,0x6291,0x6613, -0x9091,0x5C79,0x4EBF,0x5F79,0x81C6,0x9038,0x8084,0x75AB, -0x4EA6,0x88D4,0x610F,0x6BC5,0x5FC6,0x4E49,0x76CA,0x6EA2, -0x8BE3,0x8BAE,0x8C0A,0x8BD1,0x5F02,0x7FFC,0x7FCC,0x7ECE, -0x8335,0x836B,0x56E0,0x6BB7,0x97F3,0x9634,0x59FB,0x541F, -0x94F6,0x6DEB,0x5BC5,0x996E,0x5C39,0x5F15,0x9690, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x89A2,0x89A3,0x89A4,0x89A5,0x89A6,0x89A7,0x89A8,0x89A9, -0x89AA,0x89AB,0x89AC,0x89AD,0x89AE,0x89AF,0x89B0,0x89B1, -0x89B2,0x89B3,0x89B4,0x89B5,0x89B6,0x89B7,0x89B8,0x89B9, -0x89BA,0x89BB,0x89BC,0x89BD,0x89BE,0x89BF,0x89C0,0x89C3, -0x89CD,0x89D3,0x89D4,0x89D5,0x89D7,0x89D8,0x89D9,0x89DB, -0x89DD,0x89DF,0x89E0,0x89E1,0x89E2,0x89E4,0x89E7,0x89E8, -0x89E9,0x89EA,0x89EC,0x89ED,0x89EE,0x89F0,0x89F1,0x89F2, -0x89F4,0x89F5,0x89F6,0x89F7,0x89F8,0x89F9,0x89FA, 0, -0x89FB,0x89FC,0x89FD,0x89FE,0x89FF,0x8A01,0x8A02,0x8A03, -0x8A04,0x8A05,0x8A06,0x8A08,0x8A09,0x8A0A,0x8A0B,0x8A0C, -0x8A0D,0x8A0E,0x8A0F,0x8A10,0x8A11,0x8A12,0x8A13,0x8A14, -0x8A15,0x8A16,0x8A17,0x8A18,0x8A19,0x8A1A,0x8A1B,0x8A1C, -0x8A1D,0x5370,0x82F1,0x6A31,0x5A74,0x9E70,0x5E94,0x7F28, -0x83B9,0x8424,0x8425,0x8367,0x8747,0x8FCE,0x8D62,0x76C8, -0x5F71,0x9896,0x786C,0x6620,0x54DF,0x62E5,0x4F63,0x81C3, -0x75C8,0x5EB8,0x96CD,0x8E0A,0x86F9,0x548F,0x6CF3,0x6D8C, -0x6C38,0x607F,0x52C7,0x7528,0x5E7D,0x4F18,0x60A0,0x5FE7, -0x5C24,0x7531,0x90AE,0x94C0,0x72B9,0x6CB9,0x6E38,0x9149, -0x6709,0x53CB,0x53F3,0x4F51,0x91C9,0x8BF1,0x53C8,0x5E7C, -0x8FC2,0x6DE4,0x4E8E,0x76C2,0x6986,0x865E,0x611A,0x8206, -0x4F59,0x4FDE,0x903E,0x9C7C,0x6109,0x6E1D,0x6E14,0x9685, -0x4E88,0x5A31,0x96E8,0x4E0E,0x5C7F,0x79B9,0x5B87,0x8BED, -0x7FBD,0x7389,0x57DF,0x828B,0x90C1,0x5401,0x9047,0x55BB, -0x5CEA,0x5FA1,0x6108,0x6B32,0x72F1,0x80B2,0x8A89, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8A1E,0x8A1F,0x8A20,0x8A21,0x8A22,0x8A23,0x8A24,0x8A25, -0x8A26,0x8A27,0x8A28,0x8A29,0x8A2A,0x8A2B,0x8A2C,0x8A2D, -0x8A2E,0x8A2F,0x8A30,0x8A31,0x8A32,0x8A33,0x8A34,0x8A35, -0x8A36,0x8A37,0x8A38,0x8A39,0x8A3A,0x8A3B,0x8A3C,0x8A3D, -0x8A3F,0x8A40,0x8A41,0x8A42,0x8A43,0x8A44,0x8A45,0x8A46, -0x8A47,0x8A49,0x8A4A,0x8A4B,0x8A4C,0x8A4D,0x8A4E,0x8A4F, -0x8A50,0x8A51,0x8A52,0x8A53,0x8A54,0x8A55,0x8A56,0x8A57, -0x8A58,0x8A59,0x8A5A,0x8A5B,0x8A5C,0x8A5D,0x8A5E, 0, -0x8A5F,0x8A60,0x8A61,0x8A62,0x8A63,0x8A64,0x8A65,0x8A66, -0x8A67,0x8A68,0x8A69,0x8A6A,0x8A6B,0x8A6C,0x8A6D,0x8A6E, -0x8A6F,0x8A70,0x8A71,0x8A72,0x8A73,0x8A74,0x8A75,0x8A76, -0x8A77,0x8A78,0x8A7A,0x8A7B,0x8A7C,0x8A7D,0x8A7E,0x8A7F, -0x8A80,0x6D74,0x5BD3,0x88D5,0x9884,0x8C6B,0x9A6D,0x9E33, -0x6E0A,0x51A4,0x5143,0x57A3,0x8881,0x539F,0x63F4,0x8F95, -0x56ED,0x5458,0x5706,0x733F,0x6E90,0x7F18,0x8FDC,0x82D1, -0x613F,0x6028,0x9662,0x66F0,0x7EA6,0x8D8A,0x8DC3,0x94A5, -0x5CB3,0x7CA4,0x6708,0x60A6,0x9605,0x8018,0x4E91,0x90E7, -0x5300,0x9668,0x5141,0x8FD0,0x8574,0x915D,0x6655,0x97F5, -0x5B55,0x531D,0x7838,0x6742,0x683D,0x54C9,0x707E,0x5BB0, -0x8F7D,0x518D,0x5728,0x54B1,0x6512,0x6682,0x8D5E,0x8D43, -0x810F,0x846C,0x906D,0x7CDF,0x51FF,0x85FB,0x67A3,0x65E9, -0x6FA1,0x86A4,0x8E81,0x566A,0x9020,0x7682,0x7076,0x71E5, -0x8D23,0x62E9,0x5219,0x6CFD,0x8D3C,0x600E,0x589E,0x618E, -0x66FE,0x8D60,0x624E,0x55B3,0x6E23,0x672D,0x8F67, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8A81,0x8A82,0x8A83,0x8A84,0x8A85,0x8A86,0x8A87,0x8A88, -0x8A8B,0x8A8C,0x8A8D,0x8A8E,0x8A8F,0x8A90,0x8A91,0x8A92, -0x8A94,0x8A95,0x8A96,0x8A97,0x8A98,0x8A99,0x8A9A,0x8A9B, -0x8A9C,0x8A9D,0x8A9E,0x8A9F,0x8AA0,0x8AA1,0x8AA2,0x8AA3, -0x8AA4,0x8AA5,0x8AA6,0x8AA7,0x8AA8,0x8AA9,0x8AAA,0x8AAB, -0x8AAC,0x8AAD,0x8AAE,0x8AAF,0x8AB0,0x8AB1,0x8AB2,0x8AB3, -0x8AB4,0x8AB5,0x8AB6,0x8AB7,0x8AB8,0x8AB9,0x8ABA,0x8ABB, -0x8ABC,0x8ABD,0x8ABE,0x8ABF,0x8AC0,0x8AC1,0x8AC2, 0, -0x8AC3,0x8AC4,0x8AC5,0x8AC6,0x8AC7,0x8AC8,0x8AC9,0x8ACA, -0x8ACB,0x8ACC,0x8ACD,0x8ACE,0x8ACF,0x8AD0,0x8AD1,0x8AD2, -0x8AD3,0x8AD4,0x8AD5,0x8AD6,0x8AD7,0x8AD8,0x8AD9,0x8ADA, -0x8ADB,0x8ADC,0x8ADD,0x8ADE,0x8ADF,0x8AE0,0x8AE1,0x8AE2, -0x8AE3,0x94E1,0x95F8,0x7728,0x6805,0x69A8,0x548B,0x4E4D, -0x70B8,0x8BC8,0x6458,0x658B,0x5B85,0x7A84,0x503A,0x5BE8, -0x77BB,0x6BE1,0x8A79,0x7C98,0x6CBE,0x76CF,0x65A9,0x8F97, -0x5D2D,0x5C55,0x8638,0x6808,0x5360,0x6218,0x7AD9,0x6E5B, -0x7EFD,0x6A1F,0x7AE0,0x5F70,0x6F33,0x5F20,0x638C,0x6DA8, -0x6756,0x4E08,0x5E10,0x8D26,0x4ED7,0x80C0,0x7634,0x969C, -0x62DB,0x662D,0x627E,0x6CBC,0x8D75,0x7167,0x7F69,0x5146, -0x8087,0x53EC,0x906E,0x6298,0x54F2,0x86F0,0x8F99,0x8005, -0x9517,0x8517,0x8FD9,0x6D59,0x73CD,0x659F,0x771F,0x7504, -0x7827,0x81FB,0x8D1E,0x9488,0x4FA6,0x6795,0x75B9,0x8BCA, -0x9707,0x632F,0x9547,0x9635,0x84B8,0x6323,0x7741,0x5F81, -0x72F0,0x4E89,0x6014,0x6574,0x62EF,0x6B63,0x653F, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8AE4,0x8AE5,0x8AE6,0x8AE7,0x8AE8,0x8AE9,0x8AEA,0x8AEB, -0x8AEC,0x8AED,0x8AEE,0x8AEF,0x8AF0,0x8AF1,0x8AF2,0x8AF3, -0x8AF4,0x8AF5,0x8AF6,0x8AF7,0x8AF8,0x8AF9,0x8AFA,0x8AFB, -0x8AFC,0x8AFD,0x8AFE,0x8AFF,0x8B00,0x8B01,0x8B02,0x8B03, -0x8B04,0x8B05,0x8B06,0x8B08,0x8B09,0x8B0A,0x8B0B,0x8B0C, -0x8B0D,0x8B0E,0x8B0F,0x8B10,0x8B11,0x8B12,0x8B13,0x8B14, -0x8B15,0x8B16,0x8B17,0x8B18,0x8B19,0x8B1A,0x8B1B,0x8B1C, -0x8B1D,0x8B1E,0x8B1F,0x8B20,0x8B21,0x8B22,0x8B23, 0, -0x8B24,0x8B25,0x8B27,0x8B28,0x8B29,0x8B2A,0x8B2B,0x8B2C, -0x8B2D,0x8B2E,0x8B2F,0x8B30,0x8B31,0x8B32,0x8B33,0x8B34, -0x8B35,0x8B36,0x8B37,0x8B38,0x8B39,0x8B3A,0x8B3B,0x8B3C, -0x8B3D,0x8B3E,0x8B3F,0x8B40,0x8B41,0x8B42,0x8B43,0x8B44, -0x8B45,0x5E27,0x75C7,0x90D1,0x8BC1,0x829D,0x679D,0x652F, -0x5431,0x8718,0x77E5,0x80A2,0x8102,0x6C41,0x4E4B,0x7EC7, -0x804C,0x76F4,0x690D,0x6B96,0x6267,0x503C,0x4F84,0x5740, -0x6307,0x6B62,0x8DBE,0x53EA,0x65E8,0x7EB8,0x5FD7,0x631A, -0x63B7,0x81F3,0x81F4,0x7F6E,0x5E1C,0x5CD9,0x5236,0x667A, -0x79E9,0x7A1A,0x8D28,0x7099,0x75D4,0x6EDE,0x6CBB,0x7A92, -0x4E2D,0x76C5,0x5FE0,0x949F,0x8877,0x7EC8,0x79CD,0x80BF, -0x91CD,0x4EF2,0x4F17,0x821F,0x5468,0x5DDE,0x6D32,0x8BCC, -0x7CA5,0x8F74,0x8098,0x5E1A,0x5492,0x76B1,0x5B99,0x663C, -0x9AA4,0x73E0,0x682A,0x86DB,0x6731,0x732A,0x8BF8,0x8BDB, -0x9010,0x7AF9,0x70DB,0x716E,0x62C4,0x77A9,0x5631,0x4E3B, -0x8457,0x67F1,0x52A9,0x86C0,0x8D2E,0x94F8,0x7B51, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8B46,0x8B47,0x8B48,0x8B49,0x8B4A,0x8B4B,0x8B4C,0x8B4D, -0x8B4E,0x8B4F,0x8B50,0x8B51,0x8B52,0x8B53,0x8B54,0x8B55, -0x8B56,0x8B57,0x8B58,0x8B59,0x8B5A,0x8B5B,0x8B5C,0x8B5D, -0x8B5E,0x8B5F,0x8B60,0x8B61,0x8B62,0x8B63,0x8B64,0x8B65, -0x8B67,0x8B68,0x8B69,0x8B6A,0x8B6B,0x8B6D,0x8B6E,0x8B6F, -0x8B70,0x8B71,0x8B72,0x8B73,0x8B74,0x8B75,0x8B76,0x8B77, -0x8B78,0x8B79,0x8B7A,0x8B7B,0x8B7C,0x8B7D,0x8B7E,0x8B7F, -0x8B80,0x8B81,0x8B82,0x8B83,0x8B84,0x8B85,0x8B86, 0, -0x8B87,0x8B88,0x8B89,0x8B8A,0x8B8B,0x8B8C,0x8B8D,0x8B8E, -0x8B8F,0x8B90,0x8B91,0x8B92,0x8B93,0x8B94,0x8B95,0x8B96, -0x8B97,0x8B98,0x8B99,0x8B9A,0x8B9B,0x8B9C,0x8B9D,0x8B9E, -0x8B9F,0x8BAC,0x8BB1,0x8BBB,0x8BC7,0x8BD0,0x8BEA,0x8C09, -0x8C1E,0x4F4F,0x6CE8,0x795D,0x9A7B,0x6293,0x722A,0x62FD, -0x4E13,0x7816,0x8F6C,0x64B0,0x8D5A,0x7BC6,0x6869,0x5E84, -0x88C5,0x5986,0x649E,0x58EE,0x72B6,0x690E,0x9525,0x8FFD, -0x8D58,0x5760,0x7F00,0x8C06,0x51C6,0x6349,0x62D9,0x5353, -0x684C,0x7422,0x8301,0x914C,0x5544,0x7740,0x707C,0x6D4A, -0x5179,0x54A8,0x8D44,0x59FF,0x6ECB,0x6DC4,0x5B5C,0x7D2B, -0x4ED4,0x7C7D,0x6ED3,0x5B50,0x81EA,0x6E0D,0x5B57,0x9B03, -0x68D5,0x8E2A,0x5B97,0x7EFC,0x603B,0x7EB5,0x90B9,0x8D70, -0x594F,0x63CD,0x79DF,0x8DB3,0x5352,0x65CF,0x7956,0x8BC5, -0x963B,0x7EC4,0x94BB,0x7E82,0x5634,0x9189,0x6700,0x7F6A, -0x5C0A,0x9075,0x6628,0x5DE6,0x4F50,0x67DE,0x505A,0x4F5C, -0x5750,0x5EA7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8C38,0x8C39,0x8C3A,0x8C3B,0x8C3C,0x8C3D,0x8C3E,0x8C3F, -0x8C40,0x8C42,0x8C43,0x8C44,0x8C45,0x8C48,0x8C4A,0x8C4B, -0x8C4D,0x8C4E,0x8C4F,0x8C50,0x8C51,0x8C52,0x8C53,0x8C54, -0x8C56,0x8C57,0x8C58,0x8C59,0x8C5B,0x8C5C,0x8C5D,0x8C5E, -0x8C5F,0x8C60,0x8C63,0x8C64,0x8C65,0x8C66,0x8C67,0x8C68, -0x8C69,0x8C6C,0x8C6D,0x8C6E,0x8C6F,0x8C70,0x8C71,0x8C72, -0x8C74,0x8C75,0x8C76,0x8C77,0x8C7B,0x8C7C,0x8C7D,0x8C7E, -0x8C7F,0x8C80,0x8C81,0x8C83,0x8C84,0x8C86,0x8C87, 0, -0x8C88,0x8C8B,0x8C8D,0x8C8E,0x8C8F,0x8C90,0x8C91,0x8C92, -0x8C93,0x8C95,0x8C96,0x8C97,0x8C99,0x8C9A,0x8C9B,0x8C9C, -0x8C9D,0x8C9E,0x8C9F,0x8CA0,0x8CA1,0x8CA2,0x8CA3,0x8CA4, -0x8CA5,0x8CA6,0x8CA7,0x8CA8,0x8CA9,0x8CAA,0x8CAB,0x8CAC, -0x8CAD,0x4E8D,0x4E0C,0x5140,0x4E10,0x5EFF,0x5345,0x4E15, -0x4E98,0x4E1E,0x9B32,0x5B6C,0x5669,0x4E28,0x79BA,0x4E3F, -0x5315,0x4E47,0x592D,0x723B,0x536E,0x6C10,0x56DF,0x80E4, -0x9997,0x6BD3,0x777E,0x9F17,0x4E36,0x4E9F,0x9F10,0x4E5C, -0x4E69,0x4E93,0x8288,0x5B5B,0x556C,0x560F,0x4EC4,0x538D, -0x539D,0x53A3,0x53A5,0x53AE,0x9765,0x8D5D,0x531A,0x53F5, -0x5326,0x532E,0x533E,0x8D5C,0x5366,0x5363,0x5202,0x5208, -0x520E,0x522D,0x5233,0x523F,0x5240,0x524C,0x525E,0x5261, -0x525C,0x84AF,0x527D,0x5282,0x5281,0x5290,0x5293,0x5182, -0x7F54,0x4EBB,0x4EC3,0x4EC9,0x4EC2,0x4EE8,0x4EE1,0x4EEB, -0x4EDE,0x4F1B,0x4EF3,0x4F22,0x4F64,0x4EF5,0x4F25,0x4F27, -0x4F09,0x4F2B,0x4F5E,0x4F67,0x6538,0x4F5A,0x4F5D, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8CAE,0x8CAF,0x8CB0,0x8CB1,0x8CB2,0x8CB3,0x8CB4,0x8CB5, -0x8CB6,0x8CB7,0x8CB8,0x8CB9,0x8CBA,0x8CBB,0x8CBC,0x8CBD, -0x8CBE,0x8CBF,0x8CC0,0x8CC1,0x8CC2,0x8CC3,0x8CC4,0x8CC5, -0x8CC6,0x8CC7,0x8CC8,0x8CC9,0x8CCA,0x8CCB,0x8CCC,0x8CCD, -0x8CCE,0x8CCF,0x8CD0,0x8CD1,0x8CD2,0x8CD3,0x8CD4,0x8CD5, -0x8CD6,0x8CD7,0x8CD8,0x8CD9,0x8CDA,0x8CDB,0x8CDC,0x8CDD, -0x8CDE,0x8CDF,0x8CE0,0x8CE1,0x8CE2,0x8CE3,0x8CE4,0x8CE5, -0x8CE6,0x8CE7,0x8CE8,0x8CE9,0x8CEA,0x8CEB,0x8CEC, 0, -0x8CED,0x8CEE,0x8CEF,0x8CF0,0x8CF1,0x8CF2,0x8CF3,0x8CF4, -0x8CF5,0x8CF6,0x8CF7,0x8CF8,0x8CF9,0x8CFA,0x8CFB,0x8CFC, -0x8CFD,0x8CFE,0x8CFF,0x8D00,0x8D01,0x8D02,0x8D03,0x8D04, -0x8D05,0x8D06,0x8D07,0x8D08,0x8D09,0x8D0A,0x8D0B,0x8D0C, -0x8D0D,0x4F5F,0x4F57,0x4F32,0x4F3D,0x4F76,0x4F74,0x4F91, -0x4F89,0x4F83,0x4F8F,0x4F7E,0x4F7B,0x4FAA,0x4F7C,0x4FAC, -0x4F94,0x4FE6,0x4FE8,0x4FEA,0x4FC5,0x4FDA,0x4FE3,0x4FDC, -0x4FD1,0x4FDF,0x4FF8,0x5029,0x504C,0x4FF3,0x502C,0x500F, -0x502E,0x502D,0x4FFE,0x501C,0x500C,0x5025,0x5028,0x507E, -0x5043,0x5055,0x5048,0x504E,0x506C,0x507B,0x50A5,0x50A7, -0x50A9,0x50BA,0x50D6,0x5106,0x50ED,0x50EC,0x50E6,0x50EE, -0x5107,0x510B,0x4EDD,0x6C3D,0x4F58,0x4F65,0x4FCE,0x9FA0, -0x6C46,0x7C74,0x516E,0x5DFD,0x9EC9,0x9998,0x5181,0x5914, -0x52F9,0x530D,0x8A07,0x5310,0x51EB,0x5919,0x5155,0x4EA0, -0x5156,0x4EB3,0x886E,0x88A4,0x4EB5,0x8114,0x88D2,0x7980, -0x5B34,0x8803,0x7FB8,0x51AB,0x51B1,0x51BD,0x51BC, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8D0E,0x8D0F,0x8D10,0x8D11,0x8D12,0x8D13,0x8D14,0x8D15, -0x8D16,0x8D17,0x8D18,0x8D19,0x8D1A,0x8D1B,0x8D1C,0x8D20, -0x8D51,0x8D52,0x8D57,0x8D5F,0x8D65,0x8D68,0x8D69,0x8D6A, -0x8D6C,0x8D6E,0x8D6F,0x8D71,0x8D72,0x8D78,0x8D79,0x8D7A, -0x8D7B,0x8D7C,0x8D7D,0x8D7E,0x8D7F,0x8D80,0x8D82,0x8D83, -0x8D86,0x8D87,0x8D88,0x8D89,0x8D8C,0x8D8D,0x8D8E,0x8D8F, -0x8D90,0x8D92,0x8D93,0x8D95,0x8D96,0x8D97,0x8D98,0x8D99, -0x8D9A,0x8D9B,0x8D9C,0x8D9D,0x8D9E,0x8DA0,0x8DA1, 0, -0x8DA2,0x8DA4,0x8DA5,0x8DA6,0x8DA7,0x8DA8,0x8DA9,0x8DAA, -0x8DAB,0x8DAC,0x8DAD,0x8DAE,0x8DAF,0x8DB0,0x8DB2,0x8DB6, -0x8DB7,0x8DB9,0x8DBB,0x8DBD,0x8DC0,0x8DC1,0x8DC2,0x8DC5, -0x8DC7,0x8DC8,0x8DC9,0x8DCA,0x8DCD,0x8DD0,0x8DD2,0x8DD3, -0x8DD4,0x51C7,0x5196,0x51A2,0x51A5,0x8BA0,0x8BA6,0x8BA7, -0x8BAA,0x8BB4,0x8BB5,0x8BB7,0x8BC2,0x8BC3,0x8BCB,0x8BCF, -0x8BCE,0x8BD2,0x8BD3,0x8BD4,0x8BD6,0x8BD8,0x8BD9,0x8BDC, -0x8BDF,0x8BE0,0x8BE4,0x8BE8,0x8BE9,0x8BEE,0x8BF0,0x8BF3, -0x8BF6,0x8BF9,0x8BFC,0x8BFF,0x8C00,0x8C02,0x8C04,0x8C07, -0x8C0C,0x8C0F,0x8C11,0x8C12,0x8C14,0x8C15,0x8C16,0x8C19, -0x8C1B,0x8C18,0x8C1D,0x8C1F,0x8C20,0x8C21,0x8C25,0x8C27, -0x8C2A,0x8C2B,0x8C2E,0x8C2F,0x8C32,0x8C33,0x8C35,0x8C36, -0x5369,0x537A,0x961D,0x9622,0x9621,0x9631,0x962A,0x963D, -0x963C,0x9642,0x9649,0x9654,0x965F,0x9667,0x966C,0x9672, -0x9674,0x9688,0x968D,0x9697,0x96B0,0x9097,0x909B,0x909D, -0x9099,0x90AC,0x90A1,0x90B4,0x90B3,0x90B6,0x90BA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8DD5,0x8DD8,0x8DD9,0x8DDC,0x8DE0,0x8DE1,0x8DE2,0x8DE5, -0x8DE6,0x8DE7,0x8DE9,0x8DED,0x8DEE,0x8DF0,0x8DF1,0x8DF2, -0x8DF4,0x8DF6,0x8DFC,0x8DFE,0x8DFF,0x8E00,0x8E01,0x8E02, -0x8E03,0x8E04,0x8E06,0x8E07,0x8E08,0x8E0B,0x8E0D,0x8E0E, -0x8E10,0x8E11,0x8E12,0x8E13,0x8E15,0x8E16,0x8E17,0x8E18, -0x8E19,0x8E1A,0x8E1B,0x8E1C,0x8E20,0x8E21,0x8E24,0x8E25, -0x8E26,0x8E27,0x8E28,0x8E2B,0x8E2D,0x8E30,0x8E32,0x8E33, -0x8E34,0x8E36,0x8E37,0x8E38,0x8E3B,0x8E3C,0x8E3E, 0, -0x8E3F,0x8E43,0x8E45,0x8E46,0x8E4C,0x8E4D,0x8E4E,0x8E4F, -0x8E50,0x8E53,0x8E54,0x8E55,0x8E56,0x8E57,0x8E58,0x8E5A, -0x8E5B,0x8E5C,0x8E5D,0x8E5E,0x8E5F,0x8E60,0x8E61,0x8E62, -0x8E63,0x8E64,0x8E65,0x8E67,0x8E68,0x8E6A,0x8E6B,0x8E6E, -0x8E71,0x90B8,0x90B0,0x90CF,0x90C5,0x90BE,0x90D0,0x90C4, -0x90C7,0x90D3,0x90E6,0x90E2,0x90DC,0x90D7,0x90DB,0x90EB, -0x90EF,0x90FE,0x9104,0x9122,0x911E,0x9123,0x9131,0x912F, -0x9139,0x9143,0x9146,0x520D,0x5942,0x52A2,0x52AC,0x52AD, -0x52BE,0x54FF,0x52D0,0x52D6,0x52F0,0x53DF,0x71EE,0x77CD, -0x5EF4,0x51F5,0x51FC,0x9B2F,0x53B6,0x5F01,0x755A,0x5DEF, -0x574C,0x57A9,0x57A1,0x587E,0x58BC,0x58C5,0x58D1,0x5729, -0x572C,0x572A,0x5733,0x5739,0x572E,0x572F,0x575C,0x573B, -0x5742,0x5769,0x5785,0x576B,0x5786,0x577C,0x577B,0x5768, -0x576D,0x5776,0x5773,0x57AD,0x57A4,0x578C,0x57B2,0x57CF, -0x57A7,0x57B4,0x5793,0x57A0,0x57D5,0x57D8,0x57DA,0x57D9, -0x57D2,0x57B8,0x57F4,0x57EF,0x57F8,0x57E4,0x57DD, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8E73,0x8E75,0x8E77,0x8E78,0x8E79,0x8E7A,0x8E7B,0x8E7D, -0x8E7E,0x8E80,0x8E82,0x8E83,0x8E84,0x8E86,0x8E88,0x8E89, -0x8E8A,0x8E8B,0x8E8C,0x8E8D,0x8E8E,0x8E91,0x8E92,0x8E93, -0x8E95,0x8E96,0x8E97,0x8E98,0x8E99,0x8E9A,0x8E9B,0x8E9D, -0x8E9F,0x8EA0,0x8EA1,0x8EA2,0x8EA3,0x8EA4,0x8EA5,0x8EA6, -0x8EA7,0x8EA8,0x8EA9,0x8EAA,0x8EAD,0x8EAE,0x8EB0,0x8EB1, -0x8EB3,0x8EB4,0x8EB5,0x8EB6,0x8EB7,0x8EB8,0x8EB9,0x8EBB, -0x8EBC,0x8EBD,0x8EBE,0x8EBF,0x8EC0,0x8EC1,0x8EC2, 0, -0x8EC3,0x8EC4,0x8EC5,0x8EC6,0x8EC7,0x8EC8,0x8EC9,0x8ECA, -0x8ECB,0x8ECC,0x8ECD,0x8ECF,0x8ED0,0x8ED1,0x8ED2,0x8ED3, -0x8ED4,0x8ED5,0x8ED6,0x8ED7,0x8ED8,0x8ED9,0x8EDA,0x8EDB, -0x8EDC,0x8EDD,0x8EDE,0x8EDF,0x8EE0,0x8EE1,0x8EE2,0x8EE3, -0x8EE4,0x580B,0x580D,0x57FD,0x57ED,0x5800,0x581E,0x5819, -0x5844,0x5820,0x5865,0x586C,0x5881,0x5889,0x589A,0x5880, -0x99A8,0x9F19,0x61FF,0x8279,0x827D,0x827F,0x828F,0x828A, -0x82A8,0x8284,0x828E,0x8291,0x8297,0x8299,0x82AB,0x82B8, -0x82BE,0x82B0,0x82C8,0x82CA,0x82E3,0x8298,0x82B7,0x82AE, -0x82CB,0x82CC,0x82C1,0x82A9,0x82B4,0x82A1,0x82AA,0x829F, -0x82C4,0x82CE,0x82A4,0x82E1,0x8309,0x82F7,0x82E4,0x830F, -0x8307,0x82DC,0x82F4,0x82D2,0x82D8,0x830C,0x82FB,0x82D3, -0x8311,0x831A,0x8306,0x8314,0x8315,0x82E0,0x82D5,0x831C, -0x8351,0x835B,0x835C,0x8308,0x8392,0x833C,0x8334,0x8331, -0x839B,0x835E,0x832F,0x834F,0x8347,0x8343,0x835F,0x8340, -0x8317,0x8360,0x832D,0x833A,0x8333,0x8366,0x8365, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8EE5,0x8EE6,0x8EE7,0x8EE8,0x8EE9,0x8EEA,0x8EEB,0x8EEC, -0x8EED,0x8EEE,0x8EEF,0x8EF0,0x8EF1,0x8EF2,0x8EF3,0x8EF4, -0x8EF5,0x8EF6,0x8EF7,0x8EF8,0x8EF9,0x8EFA,0x8EFB,0x8EFC, -0x8EFD,0x8EFE,0x8EFF,0x8F00,0x8F01,0x8F02,0x8F03,0x8F04, -0x8F05,0x8F06,0x8F07,0x8F08,0x8F09,0x8F0A,0x8F0B,0x8F0C, -0x8F0D,0x8F0E,0x8F0F,0x8F10,0x8F11,0x8F12,0x8F13,0x8F14, -0x8F15,0x8F16,0x8F17,0x8F18,0x8F19,0x8F1A,0x8F1B,0x8F1C, -0x8F1D,0x8F1E,0x8F1F,0x8F20,0x8F21,0x8F22,0x8F23, 0, -0x8F24,0x8F25,0x8F26,0x8F27,0x8F28,0x8F29,0x8F2A,0x8F2B, -0x8F2C,0x8F2D,0x8F2E,0x8F2F,0x8F30,0x8F31,0x8F32,0x8F33, -0x8F34,0x8F35,0x8F36,0x8F37,0x8F38,0x8F39,0x8F3A,0x8F3B, -0x8F3C,0x8F3D,0x8F3E,0x8F3F,0x8F40,0x8F41,0x8F42,0x8F43, -0x8F44,0x8368,0x831B,0x8369,0x836C,0x836A,0x836D,0x836E, -0x83B0,0x8378,0x83B3,0x83B4,0x83A0,0x83AA,0x8393,0x839C, -0x8385,0x837C,0x83B6,0x83A9,0x837D,0x83B8,0x837B,0x8398, -0x839E,0x83A8,0x83BA,0x83BC,0x83C1,0x8401,0x83E5,0x83D8, -0x5807,0x8418,0x840B,0x83DD,0x83FD,0x83D6,0x841C,0x8438, -0x8411,0x8406,0x83D4,0x83DF,0x840F,0x8403,0x83F8,0x83F9, -0x83EA,0x83C5,0x83C0,0x8426,0x83F0,0x83E1,0x845C,0x8451, -0x845A,0x8459,0x8473,0x8487,0x8488,0x847A,0x8489,0x8478, -0x843C,0x8446,0x8469,0x8476,0x848C,0x848E,0x8431,0x846D, -0x84C1,0x84CD,0x84D0,0x84E6,0x84BD,0x84D3,0x84CA,0x84BF, -0x84BA,0x84E0,0x84A1,0x84B9,0x84B4,0x8497,0x84E5,0x84E3, -0x850C,0x750D,0x8538,0x84F0,0x8539,0x851F,0x853A, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x8F45,0x8F46,0x8F47,0x8F48,0x8F49,0x8F4A,0x8F4B,0x8F4C, -0x8F4D,0x8F4E,0x8F4F,0x8F50,0x8F51,0x8F52,0x8F53,0x8F54, -0x8F55,0x8F56,0x8F57,0x8F58,0x8F59,0x8F5A,0x8F5B,0x8F5C, -0x8F5D,0x8F5E,0x8F5F,0x8F60,0x8F61,0x8F62,0x8F63,0x8F64, -0x8F65,0x8F6A,0x8F80,0x8F8C,0x8F92,0x8F9D,0x8FA0,0x8FA1, -0x8FA2,0x8FA4,0x8FA5,0x8FA6,0x8FA7,0x8FAA,0x8FAC,0x8FAD, -0x8FAE,0x8FAF,0x8FB2,0x8FB3,0x8FB4,0x8FB5,0x8FB7,0x8FB8, -0x8FBA,0x8FBB,0x8FBC,0x8FBF,0x8FC0,0x8FC3,0x8FC6, 0, -0x8FC9,0x8FCA,0x8FCB,0x8FCC,0x8FCD,0x8FCF,0x8FD2,0x8FD6, -0x8FD7,0x8FDA,0x8FE0,0x8FE1,0x8FE3,0x8FE7,0x8FEC,0x8FEF, -0x8FF1,0x8FF2,0x8FF4,0x8FF5,0x8FF6,0x8FFA,0x8FFB,0x8FFC, -0x8FFE,0x8FFF,0x9007,0x9008,0x900C,0x900E,0x9013,0x9015, -0x9018,0x8556,0x853B,0x84FF,0x84FC,0x8559,0x8548,0x8568, -0x8564,0x855E,0x857A,0x77A2,0x8543,0x8572,0x857B,0x85A4, -0x85A8,0x8587,0x858F,0x8579,0x85AE,0x859C,0x8585,0x85B9, -0x85B7,0x85B0,0x85D3,0x85C1,0x85DC,0x85FF,0x8627,0x8605, -0x8629,0x8616,0x863C,0x5EFE,0x5F08,0x593C,0x5941,0x8037, -0x5955,0x595A,0x5958,0x530F,0x5C22,0x5C25,0x5C2C,0x5C34, -0x624C,0x626A,0x629F,0x62BB,0x62CA,0x62DA,0x62D7,0x62EE, -0x6322,0x62F6,0x6339,0x634B,0x6343,0x63AD,0x63F6,0x6371, -0x637A,0x638E,0x63B4,0x636D,0x63AC,0x638A,0x6369,0x63AE, -0x63BC,0x63F2,0x63F8,0x63E0,0x63FF,0x63C4,0x63DE,0x63CE, -0x6452,0x63C6,0x63BE,0x6445,0x6441,0x640B,0x641B,0x6420, -0x640C,0x6426,0x6421,0x645E,0x6484,0x646D,0x6496, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9019,0x901C,0x9023,0x9024,0x9025,0x9027,0x9028,0x9029, -0x902A,0x902B,0x902C,0x9030,0x9031,0x9032,0x9033,0x9034, -0x9037,0x9039,0x903A,0x903D,0x903F,0x9040,0x9043,0x9045, -0x9046,0x9048,0x9049,0x904A,0x904B,0x904C,0x904E,0x9054, -0x9055,0x9056,0x9059,0x905A,0x905C,0x905D,0x905E,0x905F, -0x9060,0x9061,0x9064,0x9066,0x9067,0x9069,0x906A,0x906B, -0x906C,0x906F,0x9070,0x9071,0x9072,0x9073,0x9076,0x9077, -0x9078,0x9079,0x907A,0x907B,0x907C,0x907E,0x9081, 0, -0x9084,0x9085,0x9086,0x9087,0x9089,0x908A,0x908C,0x908D, -0x908E,0x908F,0x9090,0x9092,0x9094,0x9096,0x9098,0x909A, -0x909C,0x909E,0x909F,0x90A0,0x90A4,0x90A5,0x90A7,0x90A8, -0x90A9,0x90AB,0x90AD,0x90B2,0x90B7,0x90BC,0x90BD,0x90BF, -0x90C0,0x647A,0x64B7,0x64B8,0x6499,0x64BA,0x64C0,0x64D0, -0x64D7,0x64E4,0x64E2,0x6509,0x6525,0x652E,0x5F0B,0x5FD2, -0x7519,0x5F11,0x535F,0x53F1,0x53FD,0x53E9,0x53E8,0x53FB, -0x5412,0x5416,0x5406,0x544B,0x5452,0x5453,0x5454,0x5456, -0x5443,0x5421,0x5457,0x5459,0x5423,0x5432,0x5482,0x5494, -0x5477,0x5471,0x5464,0x549A,0x549B,0x5484,0x5476,0x5466, -0x549D,0x54D0,0x54AD,0x54C2,0x54B4,0x54D2,0x54A7,0x54A6, -0x54D3,0x54D4,0x5472,0x54A3,0x54D5,0x54BB,0x54BF,0x54CC, -0x54D9,0x54DA,0x54DC,0x54A9,0x54AA,0x54A4,0x54DD,0x54CF, -0x54DE,0x551B,0x54E7,0x5520,0x54FD,0x5514,0x54F3,0x5522, -0x5523,0x550F,0x5511,0x5527,0x552A,0x5567,0x558F,0x55B5, -0x5549,0x556D,0x5541,0x5555,0x553F,0x5550,0x553C, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x90C2,0x90C3,0x90C6,0x90C8,0x90C9,0x90CB,0x90CC,0x90CD, -0x90D2,0x90D4,0x90D5,0x90D6,0x90D8,0x90D9,0x90DA,0x90DE, -0x90DF,0x90E0,0x90E3,0x90E4,0x90E5,0x90E9,0x90EA,0x90EC, -0x90EE,0x90F0,0x90F1,0x90F2,0x90F3,0x90F5,0x90F6,0x90F7, -0x90F9,0x90FA,0x90FB,0x90FC,0x90FF,0x9100,0x9101,0x9103, -0x9105,0x9106,0x9107,0x9108,0x9109,0x910A,0x910B,0x910C, -0x910D,0x910E,0x910F,0x9110,0x9111,0x9112,0x9113,0x9114, -0x9115,0x9116,0x9117,0x9118,0x911A,0x911B,0x911C, 0, -0x911D,0x911F,0x9120,0x9121,0x9124,0x9125,0x9126,0x9127, -0x9128,0x9129,0x912A,0x912B,0x912C,0x912D,0x912E,0x9130, -0x9132,0x9133,0x9134,0x9135,0x9136,0x9137,0x9138,0x913A, -0x913B,0x913C,0x913D,0x913E,0x913F,0x9140,0x9141,0x9142, -0x9144,0x5537,0x5556,0x5575,0x5576,0x5577,0x5533,0x5530, -0x555C,0x558B,0x55D2,0x5583,0x55B1,0x55B9,0x5588,0x5581, -0x559F,0x557E,0x55D6,0x5591,0x557B,0x55DF,0x55BD,0x55BE, -0x5594,0x5599,0x55EA,0x55F7,0x55C9,0x561F,0x55D1,0x55EB, -0x55EC,0x55D4,0x55E6,0x55DD,0x55C4,0x55EF,0x55E5,0x55F2, -0x55F3,0x55CC,0x55CD,0x55E8,0x55F5,0x55E4,0x8F94,0x561E, -0x5608,0x560C,0x5601,0x5624,0x5623,0x55FE,0x5600,0x5627, -0x562D,0x5658,0x5639,0x5657,0x562C,0x564D,0x5662,0x5659, -0x565C,0x564C,0x5654,0x5686,0x5664,0x5671,0x566B,0x567B, -0x567C,0x5685,0x5693,0x56AF,0x56D4,0x56D7,0x56DD,0x56E1, -0x56F5,0x56EB,0x56F9,0x56FF,0x5704,0x570A,0x5709,0x571C, -0x5E0F,0x5E19,0x5E14,0x5E11,0x5E31,0x5E3B,0x5E3C, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9145,0x9147,0x9148,0x9151,0x9153,0x9154,0x9155,0x9156, -0x9158,0x9159,0x915B,0x915C,0x915F,0x9160,0x9166,0x9167, -0x9168,0x916B,0x916D,0x9173,0x917A,0x917B,0x917C,0x9180, -0x9181,0x9182,0x9183,0x9184,0x9186,0x9188,0x918A,0x918E, -0x918F,0x9193,0x9194,0x9195,0x9196,0x9197,0x9198,0x9199, -0x919C,0x919D,0x919E,0x919F,0x91A0,0x91A1,0x91A4,0x91A5, -0x91A6,0x91A7,0x91A8,0x91A9,0x91AB,0x91AC,0x91B0,0x91B1, -0x91B2,0x91B3,0x91B6,0x91B7,0x91B8,0x91B9,0x91BB, 0, -0x91BC,0x91BD,0x91BE,0x91BF,0x91C0,0x91C1,0x91C2,0x91C3, -0x91C4,0x91C5,0x91C6,0x91C8,0x91CB,0x91D0,0x91D2,0x91D3, -0x91D4,0x91D5,0x91D6,0x91D7,0x91D8,0x91D9,0x91DA,0x91DB, -0x91DD,0x91DE,0x91DF,0x91E0,0x91E1,0x91E2,0x91E3,0x91E4, -0x91E5,0x5E37,0x5E44,0x5E54,0x5E5B,0x5E5E,0x5E61,0x5C8C, -0x5C7A,0x5C8D,0x5C90,0x5C96,0x5C88,0x5C98,0x5C99,0x5C91, -0x5C9A,0x5C9C,0x5CB5,0x5CA2,0x5CBD,0x5CAC,0x5CAB,0x5CB1, -0x5CA3,0x5CC1,0x5CB7,0x5CC4,0x5CD2,0x5CE4,0x5CCB,0x5CE5, -0x5D02,0x5D03,0x5D27,0x5D26,0x5D2E,0x5D24,0x5D1E,0x5D06, -0x5D1B,0x5D58,0x5D3E,0x5D34,0x5D3D,0x5D6C,0x5D5B,0x5D6F, -0x5D5D,0x5D6B,0x5D4B,0x5D4A,0x5D69,0x5D74,0x5D82,0x5D99, -0x5D9D,0x8C73,0x5DB7,0x5DC5,0x5F73,0x5F77,0x5F82,0x5F87, -0x5F89,0x5F8C,0x5F95,0x5F99,0x5F9C,0x5FA8,0x5FAD,0x5FB5, -0x5FBC,0x8862,0x5F61,0x72AD,0x72B0,0x72B4,0x72B7,0x72B8, -0x72C3,0x72C1,0x72CE,0x72CD,0x72D2,0x72E8,0x72EF,0x72E9, -0x72F2,0x72F4,0x72F7,0x7301,0x72F3,0x7303,0x72FA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x91E6,0x91E7,0x91E8,0x91E9,0x91EA,0x91EB,0x91EC,0x91ED, -0x91EE,0x91EF,0x91F0,0x91F1,0x91F2,0x91F3,0x91F4,0x91F5, -0x91F6,0x91F7,0x91F8,0x91F9,0x91FA,0x91FB,0x91FC,0x91FD, -0x91FE,0x91FF,0x9200,0x9201,0x9202,0x9203,0x9204,0x9205, -0x9206,0x9207,0x9208,0x9209,0x920A,0x920B,0x920C,0x920D, -0x920E,0x920F,0x9210,0x9211,0x9212,0x9213,0x9214,0x9215, -0x9216,0x9217,0x9218,0x9219,0x921A,0x921B,0x921C,0x921D, -0x921E,0x921F,0x9220,0x9221,0x9222,0x9223,0x9224, 0, -0x9225,0x9226,0x9227,0x9228,0x9229,0x922A,0x922B,0x922C, -0x922D,0x922E,0x922F,0x9230,0x9231,0x9232,0x9233,0x9234, -0x9235,0x9236,0x9237,0x9238,0x9239,0x923A,0x923B,0x923C, -0x923D,0x923E,0x923F,0x9240,0x9241,0x9242,0x9243,0x9244, -0x9245,0x72FB,0x7317,0x7313,0x7321,0x730A,0x731E,0x731D, -0x7315,0x7322,0x7339,0x7325,0x732C,0x7338,0x7331,0x7350, -0x734D,0x7357,0x7360,0x736C,0x736F,0x737E,0x821B,0x5925, -0x98E7,0x5924,0x5902,0x9963,0x9967,0x9968,0x9969,0x996A, -0x996B,0x996C,0x9974,0x9977,0x997D,0x9980,0x9984,0x9987, -0x998A,0x998D,0x9990,0x9991,0x9993,0x9994,0x9995,0x5E80, -0x5E91,0x5E8B,0x5E96,0x5EA5,0x5EA0,0x5EB9,0x5EB5,0x5EBE, -0x5EB3,0x8D53,0x5ED2,0x5ED1,0x5EDB,0x5EE8,0x5EEA,0x81BA, -0x5FC4,0x5FC9,0x5FD6,0x5FCF,0x6003,0x5FEE,0x6004,0x5FE1, -0x5FE4,0x5FFE,0x6005,0x6006,0x5FEA,0x5FED,0x5FF8,0x6019, -0x6035,0x6026,0x601B,0x600F,0x600D,0x6029,0x602B,0x600A, -0x603F,0x6021,0x6078,0x6079,0x607B,0x607A,0x6042, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9246,0x9247,0x9248,0x9249,0x924A,0x924B,0x924C,0x924D, -0x924E,0x924F,0x9250,0x9251,0x9252,0x9253,0x9254,0x9255, -0x9256,0x9257,0x9258,0x9259,0x925A,0x925B,0x925C,0x925D, -0x925E,0x925F,0x9260,0x9261,0x9262,0x9263,0x9264,0x9265, -0x9266,0x9267,0x9268,0x9269,0x926A,0x926B,0x926C,0x926D, -0x926E,0x926F,0x9270,0x9271,0x9272,0x9273,0x9275,0x9276, -0x9277,0x9278,0x9279,0x927A,0x927B,0x927C,0x927D,0x927E, -0x927F,0x9280,0x9281,0x9282,0x9283,0x9284,0x9285, 0, -0x9286,0x9287,0x9288,0x9289,0x928A,0x928B,0x928C,0x928D, -0x928F,0x9290,0x9291,0x9292,0x9293,0x9294,0x9295,0x9296, -0x9297,0x9298,0x9299,0x929A,0x929B,0x929C,0x929D,0x929E, -0x929F,0x92A0,0x92A1,0x92A2,0x92A3,0x92A4,0x92A5,0x92A6, -0x92A7,0x606A,0x607D,0x6096,0x609A,0x60AD,0x609D,0x6083, -0x6092,0x608C,0x609B,0x60EC,0x60BB,0x60B1,0x60DD,0x60D8, -0x60C6,0x60DA,0x60B4,0x6120,0x6126,0x6115,0x6123,0x60F4, -0x6100,0x610E,0x612B,0x614A,0x6175,0x61AC,0x6194,0x61A7, -0x61B7,0x61D4,0x61F5,0x5FDD,0x96B3,0x95E9,0x95EB,0x95F1, -0x95F3,0x95F5,0x95F6,0x95FC,0x95FE,0x9603,0x9604,0x9606, -0x9608,0x960A,0x960B,0x960C,0x960D,0x960F,0x9612,0x9615, -0x9616,0x9617,0x9619,0x961A,0x4E2C,0x723F,0x6215,0x6C35, -0x6C54,0x6C5C,0x6C4A,0x6CA3,0x6C85,0x6C90,0x6C94,0x6C8C, -0x6C68,0x6C69,0x6C74,0x6C76,0x6C86,0x6CA9,0x6CD0,0x6CD4, -0x6CAD,0x6CF7,0x6CF8,0x6CF1,0x6CD7,0x6CB2,0x6CE0,0x6CD6, -0x6CFA,0x6CEB,0x6CEE,0x6CB1,0x6CD3,0x6CEF,0x6CFE, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x92A8,0x92A9,0x92AA,0x92AB,0x92AC,0x92AD,0x92AF,0x92B0, -0x92B1,0x92B2,0x92B3,0x92B4,0x92B5,0x92B6,0x92B7,0x92B8, -0x92B9,0x92BA,0x92BB,0x92BC,0x92BD,0x92BE,0x92BF,0x92C0, -0x92C1,0x92C2,0x92C3,0x92C4,0x92C5,0x92C6,0x92C7,0x92C9, -0x92CA,0x92CB,0x92CC,0x92CD,0x92CE,0x92CF,0x92D0,0x92D1, -0x92D2,0x92D3,0x92D4,0x92D5,0x92D6,0x92D7,0x92D8,0x92D9, -0x92DA,0x92DB,0x92DC,0x92DD,0x92DE,0x92DF,0x92E0,0x92E1, -0x92E2,0x92E3,0x92E4,0x92E5,0x92E6,0x92E7,0x92E8, 0, -0x92E9,0x92EA,0x92EB,0x92EC,0x92ED,0x92EE,0x92EF,0x92F0, -0x92F1,0x92F2,0x92F3,0x92F4,0x92F5,0x92F6,0x92F7,0x92F8, -0x92F9,0x92FA,0x92FB,0x92FC,0x92FD,0x92FE,0x92FF,0x9300, -0x9301,0x9302,0x9303,0x9304,0x9305,0x9306,0x9307,0x9308, -0x9309,0x6D39,0x6D27,0x6D0C,0x6D43,0x6D48,0x6D07,0x6D04, -0x6D19,0x6D0E,0x6D2B,0x6D4D,0x6D2E,0x6D35,0x6D1A,0x6D4F, -0x6D52,0x6D54,0x6D33,0x6D91,0x6D6F,0x6D9E,0x6DA0,0x6D5E, -0x6D93,0x6D94,0x6D5C,0x6D60,0x6D7C,0x6D63,0x6E1A,0x6DC7, -0x6DC5,0x6DDE,0x6E0E,0x6DBF,0x6DE0,0x6E11,0x6DE6,0x6DDD, -0x6DD9,0x6E16,0x6DAB,0x6E0C,0x6DAE,0x6E2B,0x6E6E,0x6E4E, -0x6E6B,0x6EB2,0x6E5F,0x6E86,0x6E53,0x6E54,0x6E32,0x6E25, -0x6E44,0x6EDF,0x6EB1,0x6E98,0x6EE0,0x6F2D,0x6EE2,0x6EA5, -0x6EA7,0x6EBD,0x6EBB,0x6EB7,0x6ED7,0x6EB4,0x6ECF,0x6E8F, -0x6EC2,0x6E9F,0x6F62,0x6F46,0x6F47,0x6F24,0x6F15,0x6EF9, -0x6F2F,0x6F36,0x6F4B,0x6F74,0x6F2A,0x6F09,0x6F29,0x6F89, -0x6F8D,0x6F8C,0x6F78,0x6F72,0x6F7C,0x6F7A,0x6FD1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x930A,0x930B,0x930C,0x930D,0x930E,0x930F,0x9310,0x9311, -0x9312,0x9313,0x9314,0x9315,0x9316,0x9317,0x9318,0x9319, -0x931A,0x931B,0x931C,0x931D,0x931E,0x931F,0x9320,0x9321, -0x9322,0x9323,0x9324,0x9325,0x9326,0x9327,0x9328,0x9329, -0x932A,0x932B,0x932C,0x932D,0x932E,0x932F,0x9330,0x9331, -0x9332,0x9333,0x9334,0x9335,0x9336,0x9337,0x9338,0x9339, -0x933A,0x933B,0x933C,0x933D,0x933F,0x9340,0x9341,0x9342, -0x9343,0x9344,0x9345,0x9346,0x9347,0x9348,0x9349, 0, -0x934A,0x934B,0x934C,0x934D,0x934E,0x934F,0x9350,0x9351, -0x9352,0x9353,0x9354,0x9355,0x9356,0x9357,0x9358,0x9359, -0x935A,0x935B,0x935C,0x935D,0x935E,0x935F,0x9360,0x9361, -0x9362,0x9363,0x9364,0x9365,0x9366,0x9367,0x9368,0x9369, -0x936B,0x6FC9,0x6FA7,0x6FB9,0x6FB6,0x6FC2,0x6FE1,0x6FEE, -0x6FDE,0x6FE0,0x6FEF,0x701A,0x7023,0x701B,0x7039,0x7035, -0x704F,0x705E,0x5B80,0x5B84,0x5B95,0x5B93,0x5BA5,0x5BB8, -0x752F,0x9A9E,0x6434,0x5BE4,0x5BEE,0x8930,0x5BF0,0x8E47, -0x8B07,0x8FB6,0x8FD3,0x8FD5,0x8FE5,0x8FEE,0x8FE4,0x8FE9, -0x8FE6,0x8FF3,0x8FE8,0x9005,0x9004,0x900B,0x9026,0x9011, -0x900D,0x9016,0x9021,0x9035,0x9036,0x902D,0x902F,0x9044, -0x9051,0x9052,0x9050,0x9068,0x9058,0x9062,0x905B,0x66B9, -0x9074,0x907D,0x9082,0x9088,0x9083,0x908B,0x5F50,0x5F57, -0x5F56,0x5F58,0x5C3B,0x54AB,0x5C50,0x5C59,0x5B71,0x5C63, -0x5C66,0x7FBC,0x5F2A,0x5F29,0x5F2D,0x8274,0x5F3C,0x9B3B, -0x5C6E,0x5981,0x5983,0x598D,0x59A9,0x59AA,0x59A3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x936C,0x936D,0x936E,0x936F,0x9370,0x9371,0x9372,0x9373, -0x9374,0x9375,0x9376,0x9377,0x9378,0x9379,0x937A,0x937B, -0x937C,0x937D,0x937E,0x937F,0x9380,0x9381,0x9382,0x9383, -0x9384,0x9385,0x9386,0x9387,0x9388,0x9389,0x938A,0x938B, -0x938C,0x938D,0x938E,0x9390,0x9391,0x9392,0x9393,0x9394, -0x9395,0x9396,0x9397,0x9398,0x9399,0x939A,0x939B,0x939C, -0x939D,0x939E,0x939F,0x93A0,0x93A1,0x93A2,0x93A3,0x93A4, -0x93A5,0x93A6,0x93A7,0x93A8,0x93A9,0x93AA,0x93AB, 0, -0x93AC,0x93AD,0x93AE,0x93AF,0x93B0,0x93B1,0x93B2,0x93B3, -0x93B4,0x93B5,0x93B6,0x93B7,0x93B8,0x93B9,0x93BA,0x93BB, -0x93BC,0x93BD,0x93BE,0x93BF,0x93C0,0x93C1,0x93C2,0x93C3, -0x93C4,0x93C5,0x93C6,0x93C7,0x93C8,0x93C9,0x93CB,0x93CC, -0x93CD,0x5997,0x59CA,0x59AB,0x599E,0x59A4,0x59D2,0x59B2, -0x59AF,0x59D7,0x59BE,0x5A05,0x5A06,0x59DD,0x5A08,0x59E3, -0x59D8,0x59F9,0x5A0C,0x5A09,0x5A32,0x5A34,0x5A11,0x5A23, -0x5A13,0x5A40,0x5A67,0x5A4A,0x5A55,0x5A3C,0x5A62,0x5A75, -0x80EC,0x5AAA,0x5A9B,0x5A77,0x5A7A,0x5ABE,0x5AEB,0x5AB2, -0x5AD2,0x5AD4,0x5AB8,0x5AE0,0x5AE3,0x5AF1,0x5AD6,0x5AE6, -0x5AD8,0x5ADC,0x5B09,0x5B17,0x5B16,0x5B32,0x5B37,0x5B40, -0x5C15,0x5C1C,0x5B5A,0x5B65,0x5B73,0x5B51,0x5B53,0x5B62, -0x9A75,0x9A77,0x9A78,0x9A7A,0x9A7F,0x9A7D,0x9A80,0x9A81, -0x9A85,0x9A88,0x9A8A,0x9A90,0x9A92,0x9A93,0x9A96,0x9A98, -0x9A9B,0x9A9C,0x9A9D,0x9A9F,0x9AA0,0x9AA2,0x9AA3,0x9AA5, -0x9AA7,0x7E9F,0x7EA1,0x7EA3,0x7EA5,0x7EA8,0x7EA9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x93CE,0x93CF,0x93D0,0x93D1,0x93D2,0x93D3,0x93D4,0x93D5, -0x93D7,0x93D8,0x93D9,0x93DA,0x93DB,0x93DC,0x93DD,0x93DE, -0x93DF,0x93E0,0x93E1,0x93E2,0x93E3,0x93E4,0x93E5,0x93E6, -0x93E7,0x93E8,0x93E9,0x93EA,0x93EB,0x93EC,0x93ED,0x93EE, -0x93EF,0x93F0,0x93F1,0x93F2,0x93F3,0x93F4,0x93F5,0x93F6, -0x93F7,0x93F8,0x93F9,0x93FA,0x93FB,0x93FC,0x93FD,0x93FE, -0x93FF,0x9400,0x9401,0x9402,0x9403,0x9404,0x9405,0x9406, -0x9407,0x9408,0x9409,0x940A,0x940B,0x940C,0x940D, 0, -0x940E,0x940F,0x9410,0x9411,0x9412,0x9413,0x9414,0x9415, -0x9416,0x9417,0x9418,0x9419,0x941A,0x941B,0x941C,0x941D, -0x941E,0x941F,0x9420,0x9421,0x9422,0x9423,0x9424,0x9425, -0x9426,0x9427,0x9428,0x9429,0x942A,0x942B,0x942C,0x942D, -0x942E,0x7EAD,0x7EB0,0x7EBE,0x7EC0,0x7EC1,0x7EC2,0x7EC9, -0x7ECB,0x7ECC,0x7ED0,0x7ED4,0x7ED7,0x7EDB,0x7EE0,0x7EE1, -0x7EE8,0x7EEB,0x7EEE,0x7EEF,0x7EF1,0x7EF2,0x7F0D,0x7EF6, -0x7EFA,0x7EFB,0x7EFE,0x7F01,0x7F02,0x7F03,0x7F07,0x7F08, -0x7F0B,0x7F0C,0x7F0F,0x7F11,0x7F12,0x7F17,0x7F19,0x7F1C, -0x7F1B,0x7F1F,0x7F21,0x7F22,0x7F23,0x7F24,0x7F25,0x7F26, -0x7F27,0x7F2A,0x7F2B,0x7F2C,0x7F2D,0x7F2F,0x7F30,0x7F31, -0x7F32,0x7F33,0x7F35,0x5E7A,0x757F,0x5DDB,0x753E,0x9095, -0x738E,0x7391,0x73AE,0x73A2,0x739F,0x73CF,0x73C2,0x73D1, -0x73B7,0x73B3,0x73C0,0x73C9,0x73C8,0x73E5,0x73D9,0x987C, -0x740A,0x73E9,0x73E7,0x73DE,0x73BA,0x73F2,0x740F,0x742A, -0x745B,0x7426,0x7425,0x7428,0x7430,0x742E,0x742C, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x942F,0x9430,0x9431,0x9432,0x9433,0x9434,0x9435,0x9436, -0x9437,0x9438,0x9439,0x943A,0x943B,0x943C,0x943D,0x943F, -0x9440,0x9441,0x9442,0x9443,0x9444,0x9445,0x9446,0x9447, -0x9448,0x9449,0x944A,0x944B,0x944C,0x944D,0x944E,0x944F, -0x9450,0x9451,0x9452,0x9453,0x9454,0x9455,0x9456,0x9457, -0x9458,0x9459,0x945A,0x945B,0x945C,0x945D,0x945E,0x945F, -0x9460,0x9461,0x9462,0x9463,0x9464,0x9465,0x9466,0x9467, -0x9468,0x9469,0x946A,0x946C,0x946D,0x946E,0x946F, 0, -0x9470,0x9471,0x9472,0x9473,0x9474,0x9475,0x9476,0x9477, -0x9478,0x9479,0x947A,0x947B,0x947C,0x947D,0x947E,0x947F, -0x9480,0x9481,0x9482,0x9483,0x9484,0x9491,0x9496,0x9498, -0x94C7,0x94CF,0x94D3,0x94D4,0x94DA,0x94E6,0x94FB,0x951C, -0x9520,0x741B,0x741A,0x7441,0x745C,0x7457,0x7455,0x7459, -0x7477,0x746D,0x747E,0x749C,0x748E,0x7480,0x7481,0x7487, -0x748B,0x749E,0x74A8,0x74A9,0x7490,0x74A7,0x74D2,0x74BA, -0x97EA,0x97EB,0x97EC,0x674C,0x6753,0x675E,0x6748,0x6769, -0x67A5,0x6787,0x676A,0x6773,0x6798,0x67A7,0x6775,0x67A8, -0x679E,0x67AD,0x678B,0x6777,0x677C,0x67F0,0x6809,0x67D8, -0x680A,0x67E9,0x67B0,0x680C,0x67D9,0x67B5,0x67DA,0x67B3, -0x67DD,0x6800,0x67C3,0x67B8,0x67E2,0x680E,0x67C1,0x67FD, -0x6832,0x6833,0x6860,0x6861,0x684E,0x6862,0x6844,0x6864, -0x6883,0x681D,0x6855,0x6866,0x6841,0x6867,0x6840,0x683E, -0x684A,0x6849,0x6829,0x68B5,0x688F,0x6874,0x6877,0x6893, -0x686B,0x68C2,0x696E,0x68FC,0x691F,0x6920,0x68F9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9527,0x9533,0x953D,0x9543,0x9548,0x954B,0x9555,0x955A, -0x9560,0x956E,0x9574,0x9575,0x9577,0x9578,0x9579,0x957A, -0x957B,0x957C,0x957D,0x957E,0x9580,0x9581,0x9582,0x9583, -0x9584,0x9585,0x9586,0x9587,0x9588,0x9589,0x958A,0x958B, -0x958C,0x958D,0x958E,0x958F,0x9590,0x9591,0x9592,0x9593, -0x9594,0x9595,0x9596,0x9597,0x9598,0x9599,0x959A,0x959B, -0x959C,0x959D,0x959E,0x959F,0x95A0,0x95A1,0x95A2,0x95A3, -0x95A4,0x95A5,0x95A6,0x95A7,0x95A8,0x95A9,0x95AA, 0, -0x95AB,0x95AC,0x95AD,0x95AE,0x95AF,0x95B0,0x95B1,0x95B2, -0x95B3,0x95B4,0x95B5,0x95B6,0x95B7,0x95B8,0x95B9,0x95BA, -0x95BB,0x95BC,0x95BD,0x95BE,0x95BF,0x95C0,0x95C1,0x95C2, -0x95C3,0x95C4,0x95C5,0x95C6,0x95C7,0x95C8,0x95C9,0x95CA, -0x95CB,0x6924,0x68F0,0x690B,0x6901,0x6957,0x68E3,0x6910, -0x6971,0x6939,0x6960,0x6942,0x695D,0x6984,0x696B,0x6980, -0x6998,0x6978,0x6934,0x69CC,0x6987,0x6988,0x69CE,0x6989, -0x6966,0x6963,0x6979,0x699B,0x69A7,0x69BB,0x69AB,0x69AD, -0x69D4,0x69B1,0x69C1,0x69CA,0x69DF,0x6995,0x69E0,0x698D, -0x69FF,0x6A2F,0x69ED,0x6A17,0x6A18,0x6A65,0x69F2,0x6A44, -0x6A3E,0x6AA0,0x6A50,0x6A5B,0x6A35,0x6A8E,0x6A79,0x6A3D, -0x6A28,0x6A58,0x6A7C,0x6A91,0x6A90,0x6AA9,0x6A97,0x6AAB, -0x7337,0x7352,0x6B81,0x6B82,0x6B87,0x6B84,0x6B92,0x6B93, -0x6B8D,0x6B9A,0x6B9B,0x6BA1,0x6BAA,0x8F6B,0x8F6D,0x8F71, -0x8F72,0x8F73,0x8F75,0x8F76,0x8F78,0x8F77,0x8F79,0x8F7A, -0x8F7C,0x8F7E,0x8F81,0x8F82,0x8F84,0x8F87,0x8F8B, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x95CC,0x95CD,0x95CE,0x95CF,0x95D0,0x95D1,0x95D2,0x95D3, -0x95D4,0x95D5,0x95D6,0x95D7,0x95D8,0x95D9,0x95DA,0x95DB, -0x95DC,0x95DD,0x95DE,0x95DF,0x95E0,0x95E1,0x95E2,0x95E3, -0x95E4,0x95E5,0x95E6,0x95E7,0x95EC,0x95FF,0x9607,0x9613, -0x9618,0x961B,0x961E,0x9620,0x9623,0x9624,0x9625,0x9626, -0x9627,0x9628,0x9629,0x962B,0x962C,0x962D,0x962F,0x9630, -0x9637,0x9638,0x9639,0x963A,0x963E,0x9641,0x9643,0x964A, -0x964E,0x964F,0x9651,0x9652,0x9653,0x9656,0x9657, 0, -0x9658,0x9659,0x965A,0x965C,0x965D,0x965E,0x9660,0x9663, -0x9665,0x9666,0x966B,0x966D,0x966E,0x966F,0x9670,0x9671, -0x9673,0x9678,0x9679,0x967A,0x967B,0x967C,0x967D,0x967E, -0x967F,0x9680,0x9681,0x9682,0x9683,0x9684,0x9687,0x9689, -0x968A,0x8F8D,0x8F8E,0x8F8F,0x8F98,0x8F9A,0x8ECE,0x620B, -0x6217,0x621B,0x621F,0x6222,0x6221,0x6225,0x6224,0x622C, -0x81E7,0x74EF,0x74F4,0x74FF,0x750F,0x7511,0x7513,0x6534, -0x65EE,0x65EF,0x65F0,0x660A,0x6619,0x6772,0x6603,0x6615, -0x6600,0x7085,0x66F7,0x661D,0x6634,0x6631,0x6636,0x6635, -0x8006,0x665F,0x6654,0x6641,0x664F,0x6656,0x6661,0x6657, -0x6677,0x6684,0x668C,0x66A7,0x669D,0x66BE,0x66DB,0x66DC, -0x66E6,0x66E9,0x8D32,0x8D33,0x8D36,0x8D3B,0x8D3D,0x8D40, -0x8D45,0x8D46,0x8D48,0x8D49,0x8D47,0x8D4D,0x8D55,0x8D59, -0x89C7,0x89CA,0x89CB,0x89CC,0x89CE,0x89CF,0x89D0,0x89D1, -0x726E,0x729F,0x725D,0x7266,0x726F,0x727E,0x727F,0x7284, -0x728B,0x728D,0x728F,0x7292,0x6308,0x6332,0x63B0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x968C,0x968E,0x9691,0x9692,0x9693,0x9695,0x9696,0x969A, -0x969B,0x969D,0x969E,0x969F,0x96A0,0x96A1,0x96A2,0x96A3, -0x96A4,0x96A5,0x96A6,0x96A8,0x96A9,0x96AA,0x96AB,0x96AC, -0x96AD,0x96AE,0x96AF,0x96B1,0x96B2,0x96B4,0x96B5,0x96B7, -0x96B8,0x96BA,0x96BB,0x96BF,0x96C2,0x96C3,0x96C8,0x96CA, -0x96CB,0x96D0,0x96D1,0x96D3,0x96D4,0x96D6,0x96D7,0x96D8, -0x96D9,0x96DA,0x96DB,0x96DC,0x96DD,0x96DE,0x96DF,0x96E1, -0x96E2,0x96E3,0x96E4,0x96E5,0x96E6,0x96E7,0x96EB, 0, -0x96EC,0x96ED,0x96EE,0x96F0,0x96F1,0x96F2,0x96F4,0x96F5, -0x96F8,0x96FA,0x96FB,0x96FC,0x96FD,0x96FF,0x9702,0x9703, -0x9705,0x970A,0x970B,0x970C,0x9710,0x9711,0x9712,0x9714, -0x9715,0x9717,0x9718,0x9719,0x971A,0x971B,0x971D,0x971F, -0x9720,0x643F,0x64D8,0x8004,0x6BEA,0x6BF3,0x6BFD,0x6BF5, -0x6BF9,0x6C05,0x6C07,0x6C06,0x6C0D,0x6C15,0x6C18,0x6C19, -0x6C1A,0x6C21,0x6C29,0x6C24,0x6C2A,0x6C32,0x6535,0x6555, -0x656B,0x724D,0x7252,0x7256,0x7230,0x8662,0x5216,0x809F, -0x809C,0x8093,0x80BC,0x670A,0x80BD,0x80B1,0x80AB,0x80AD, -0x80B4,0x80B7,0x80E7,0x80E8,0x80E9,0x80EA,0x80DB,0x80C2, -0x80C4,0x80D9,0x80CD,0x80D7,0x6710,0x80DD,0x80EB,0x80F1, -0x80F4,0x80ED,0x810D,0x810E,0x80F2,0x80FC,0x6715,0x8112, -0x8C5A,0x8136,0x811E,0x812C,0x8118,0x8132,0x8148,0x814C, -0x8153,0x8174,0x8159,0x815A,0x8171,0x8160,0x8169,0x817C, -0x817D,0x816D,0x8167,0x584D,0x5AB5,0x8188,0x8182,0x8191, -0x6ED5,0x81A3,0x81AA,0x81CC,0x6726,0x81CA,0x81BB, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9721,0x9722,0x9723,0x9724,0x9725,0x9726,0x9727,0x9728, -0x9729,0x972B,0x972C,0x972E,0x972F,0x9731,0x9733,0x9734, -0x9735,0x9736,0x9737,0x973A,0x973B,0x973C,0x973D,0x973F, -0x9740,0x9741,0x9742,0x9743,0x9744,0x9745,0x9746,0x9747, -0x9748,0x9749,0x974A,0x974B,0x974C,0x974D,0x974E,0x974F, -0x9750,0x9751,0x9754,0x9755,0x9757,0x9758,0x975A,0x975C, -0x975D,0x975F,0x9763,0x9764,0x9766,0x9767,0x9768,0x976A, -0x976B,0x976C,0x976D,0x976E,0x976F,0x9770,0x9771, 0, -0x9772,0x9775,0x9777,0x9778,0x9779,0x977A,0x977B,0x977D, -0x977E,0x977F,0x9780,0x9781,0x9782,0x9783,0x9784,0x9786, -0x9787,0x9788,0x9789,0x978A,0x978C,0x978E,0x978F,0x9790, -0x9793,0x9795,0x9796,0x9797,0x9799,0x979A,0x979B,0x979C, -0x979D,0x81C1,0x81A6,0x6B24,0x6B37,0x6B39,0x6B43,0x6B46, -0x6B59,0x98D1,0x98D2,0x98D3,0x98D5,0x98D9,0x98DA,0x6BB3, -0x5F40,0x6BC2,0x89F3,0x6590,0x9F51,0x6593,0x65BC,0x65C6, -0x65C4,0x65C3,0x65CC,0x65CE,0x65D2,0x65D6,0x7080,0x709C, -0x7096,0x709D,0x70BB,0x70C0,0x70B7,0x70AB,0x70B1,0x70E8, -0x70CA,0x7110,0x7113,0x7116,0x712F,0x7131,0x7173,0x715C, -0x7168,0x7145,0x7172,0x714A,0x7178,0x717A,0x7198,0x71B3, -0x71B5,0x71A8,0x71A0,0x71E0,0x71D4,0x71E7,0x71F9,0x721D, -0x7228,0x706C,0x7118,0x7166,0x71B9,0x623E,0x623D,0x6243, -0x6248,0x6249,0x793B,0x7940,0x7946,0x7949,0x795B,0x795C, -0x7953,0x795A,0x7962,0x7957,0x7960,0x796F,0x7967,0x797A, -0x7985,0x798A,0x799A,0x79A7,0x79B3,0x5FD1,0x5FD0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x979E,0x979F,0x97A1,0x97A2,0x97A4,0x97A5,0x97A6,0x97A7, -0x97A8,0x97A9,0x97AA,0x97AC,0x97AE,0x97B0,0x97B1,0x97B3, -0x97B5,0x97B6,0x97B7,0x97B8,0x97B9,0x97BA,0x97BB,0x97BC, -0x97BD,0x97BE,0x97BF,0x97C0,0x97C1,0x97C2,0x97C3,0x97C4, -0x97C5,0x97C6,0x97C7,0x97C8,0x97C9,0x97CA,0x97CB,0x97CC, -0x97CD,0x97CE,0x97CF,0x97D0,0x97D1,0x97D2,0x97D3,0x97D4, -0x97D5,0x97D6,0x97D7,0x97D8,0x97D9,0x97DA,0x97DB,0x97DC, -0x97DD,0x97DE,0x97DF,0x97E0,0x97E1,0x97E2,0x97E3, 0, -0x97E4,0x97E5,0x97E8,0x97EE,0x97EF,0x97F0,0x97F1,0x97F2, -0x97F4,0x97F7,0x97F8,0x97F9,0x97FA,0x97FB,0x97FC,0x97FD, -0x97FE,0x97FF,0x9800,0x9801,0x9802,0x9803,0x9804,0x9805, -0x9806,0x9807,0x9808,0x9809,0x980A,0x980B,0x980C,0x980D, -0x980E,0x603C,0x605D,0x605A,0x6067,0x6041,0x6059,0x6063, -0x60AB,0x6106,0x610D,0x615D,0x61A9,0x619D,0x61CB,0x61D1, -0x6206,0x8080,0x807F,0x6C93,0x6CF6,0x6DFC,0x77F6,0x77F8, -0x7800,0x7809,0x7817,0x7818,0x7811,0x65AB,0x782D,0x781C, -0x781D,0x7839,0x783A,0x783B,0x781F,0x783C,0x7825,0x782C, -0x7823,0x7829,0x784E,0x786D,0x7856,0x7857,0x7826,0x7850, -0x7847,0x784C,0x786A,0x789B,0x7893,0x789A,0x7887,0x789C, -0x78A1,0x78A3,0x78B2,0x78B9,0x78A5,0x78D4,0x78D9,0x78C9, -0x78EC,0x78F2,0x7905,0x78F4,0x7913,0x7924,0x791E,0x7934, -0x9F9B,0x9EF9,0x9EFB,0x9EFC,0x76F1,0x7704,0x770D,0x76F9, -0x7707,0x7708,0x771A,0x7722,0x7719,0x772D,0x7726,0x7735, -0x7738,0x7750,0x7751,0x7747,0x7743,0x775A,0x7768, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x980F,0x9810,0x9811,0x9812,0x9813,0x9814,0x9815,0x9816, -0x9817,0x9818,0x9819,0x981A,0x981B,0x981C,0x981D,0x981E, -0x981F,0x9820,0x9821,0x9822,0x9823,0x9824,0x9825,0x9826, -0x9827,0x9828,0x9829,0x982A,0x982B,0x982C,0x982D,0x982E, -0x982F,0x9830,0x9831,0x9832,0x9833,0x9834,0x9835,0x9836, -0x9837,0x9838,0x9839,0x983A,0x983B,0x983C,0x983D,0x983E, -0x983F,0x9840,0x9841,0x9842,0x9843,0x9844,0x9845,0x9846, -0x9847,0x9848,0x9849,0x984A,0x984B,0x984C,0x984D, 0, -0x984E,0x984F,0x9850,0x9851,0x9852,0x9853,0x9854,0x9855, -0x9856,0x9857,0x9858,0x9859,0x985A,0x985B,0x985C,0x985D, -0x985E,0x985F,0x9860,0x9861,0x9862,0x9863,0x9864,0x9865, -0x9866,0x9867,0x9868,0x9869,0x986A,0x986B,0x986C,0x986D, -0x986E,0x7762,0x7765,0x777F,0x778D,0x777D,0x7780,0x778C, -0x7791,0x779F,0x77A0,0x77B0,0x77B5,0x77BD,0x753A,0x7540, -0x754E,0x754B,0x7548,0x755B,0x7572,0x7579,0x7583,0x7F58, -0x7F61,0x7F5F,0x8A48,0x7F68,0x7F74,0x7F71,0x7F79,0x7F81, -0x7F7E,0x76CD,0x76E5,0x8832,0x9485,0x9486,0x9487,0x948B, -0x948A,0x948C,0x948D,0x948F,0x9490,0x9494,0x9497,0x9495, -0x949A,0x949B,0x949C,0x94A3,0x94A4,0x94AB,0x94AA,0x94AD, -0x94AC,0x94AF,0x94B0,0x94B2,0x94B4,0x94B6,0x94B7,0x94B8, -0x94B9,0x94BA,0x94BC,0x94BD,0x94BF,0x94C4,0x94C8,0x94C9, -0x94CA,0x94CB,0x94CC,0x94CD,0x94CE,0x94D0,0x94D1,0x94D2, -0x94D5,0x94D6,0x94D7,0x94D9,0x94D8,0x94DB,0x94DE,0x94DF, -0x94E0,0x94E2,0x94E4,0x94E5,0x94E7,0x94E8,0x94EA, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x986F,0x9870,0x9871,0x9872,0x9873,0x9874,0x988B,0x988E, -0x9892,0x9895,0x9899,0x98A3,0x98A8,0x98A9,0x98AA,0x98AB, -0x98AC,0x98AD,0x98AE,0x98AF,0x98B0,0x98B1,0x98B2,0x98B3, -0x98B4,0x98B5,0x98B6,0x98B7,0x98B8,0x98B9,0x98BA,0x98BB, -0x98BC,0x98BD,0x98BE,0x98BF,0x98C0,0x98C1,0x98C2,0x98C3, -0x98C4,0x98C5,0x98C6,0x98C7,0x98C8,0x98C9,0x98CA,0x98CB, -0x98CC,0x98CD,0x98CF,0x98D0,0x98D4,0x98D6,0x98D7,0x98DB, -0x98DC,0x98DD,0x98E0,0x98E1,0x98E2,0x98E3,0x98E4, 0, -0x98E5,0x98E6,0x98E9,0x98EA,0x98EB,0x98EC,0x98ED,0x98EE, -0x98EF,0x98F0,0x98F1,0x98F2,0x98F3,0x98F4,0x98F5,0x98F6, -0x98F7,0x98F8,0x98F9,0x98FA,0x98FB,0x98FC,0x98FD,0x98FE, -0x98FF,0x9900,0x9901,0x9902,0x9903,0x9904,0x9905,0x9906, -0x9907,0x94E9,0x94EB,0x94EE,0x94EF,0x94F3,0x94F4,0x94F5, -0x94F7,0x94F9,0x94FC,0x94FD,0x94FF,0x9503,0x9502,0x9506, -0x9507,0x9509,0x950A,0x950D,0x950E,0x950F,0x9512,0x9513, -0x9514,0x9515,0x9516,0x9518,0x951B,0x951D,0x951E,0x951F, -0x9522,0x952A,0x952B,0x9529,0x952C,0x9531,0x9532,0x9534, -0x9536,0x9537,0x9538,0x953C,0x953E,0x953F,0x9542,0x9535, -0x9544,0x9545,0x9546,0x9549,0x954C,0x954E,0x954F,0x9552, -0x9553,0x9554,0x9556,0x9557,0x9558,0x9559,0x955B,0x955E, -0x955F,0x955D,0x9561,0x9562,0x9564,0x9565,0x9566,0x9567, -0x9568,0x9569,0x956A,0x956B,0x956C,0x956F,0x9571,0x9572, -0x9573,0x953A,0x77E7,0x77EC,0x96C9,0x79D5,0x79ED,0x79E3, -0x79EB,0x7A06,0x5D47,0x7A03,0x7A02,0x7A1E,0x7A14, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9908,0x9909,0x990A,0x990B,0x990C,0x990E,0x990F,0x9911, -0x9912,0x9913,0x9914,0x9915,0x9916,0x9917,0x9918,0x9919, -0x991A,0x991B,0x991C,0x991D,0x991E,0x991F,0x9920,0x9921, -0x9922,0x9923,0x9924,0x9925,0x9926,0x9927,0x9928,0x9929, -0x992A,0x992B,0x992C,0x992D,0x992F,0x9930,0x9931,0x9932, -0x9933,0x9934,0x9935,0x9936,0x9937,0x9938,0x9939,0x993A, -0x993B,0x993C,0x993D,0x993E,0x993F,0x9940,0x9941,0x9942, -0x9943,0x9944,0x9945,0x9946,0x9947,0x9948,0x9949, 0, -0x994A,0x994B,0x994C,0x994D,0x994E,0x994F,0x9950,0x9951, -0x9952,0x9953,0x9956,0x9957,0x9958,0x9959,0x995A,0x995B, -0x995C,0x995D,0x995E,0x995F,0x9960,0x9961,0x9962,0x9964, -0x9966,0x9973,0x9978,0x9979,0x997B,0x997E,0x9982,0x9983, -0x9989,0x7A39,0x7A37,0x7A51,0x9ECF,0x99A5,0x7A70,0x7688, -0x768E,0x7693,0x7699,0x76A4,0x74DE,0x74E0,0x752C,0x9E20, -0x9E22,0x9E28,0x9E29,0x9E2A,0x9E2B,0x9E2C,0x9E32,0x9E31, -0x9E36,0x9E38,0x9E37,0x9E39,0x9E3A,0x9E3E,0x9E41,0x9E42, -0x9E44,0x9E46,0x9E47,0x9E48,0x9E49,0x9E4B,0x9E4C,0x9E4E, -0x9E51,0x9E55,0x9E57,0x9E5A,0x9E5B,0x9E5C,0x9E5E,0x9E63, -0x9E66,0x9E67,0x9E68,0x9E69,0x9E6A,0x9E6B,0x9E6C,0x9E71, -0x9E6D,0x9E73,0x7592,0x7594,0x7596,0x75A0,0x759D,0x75AC, -0x75A3,0x75B3,0x75B4,0x75B8,0x75C4,0x75B1,0x75B0,0x75C3, -0x75C2,0x75D6,0x75CD,0x75E3,0x75E8,0x75E6,0x75E4,0x75EB, -0x75E7,0x7603,0x75F1,0x75FC,0x75FF,0x7610,0x7600,0x7605, -0x760C,0x7617,0x760A,0x7625,0x7618,0x7615,0x7619, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x998C,0x998E,0x999A,0x999B,0x999C,0x999D,0x999E,0x999F, -0x99A0,0x99A1,0x99A2,0x99A3,0x99A4,0x99A6,0x99A7,0x99A9, -0x99AA,0x99AB,0x99AC,0x99AD,0x99AE,0x99AF,0x99B0,0x99B1, -0x99B2,0x99B3,0x99B4,0x99B5,0x99B6,0x99B7,0x99B8,0x99B9, -0x99BA,0x99BB,0x99BC,0x99BD,0x99BE,0x99BF,0x99C0,0x99C1, -0x99C2,0x99C3,0x99C4,0x99C5,0x99C6,0x99C7,0x99C8,0x99C9, -0x99CA,0x99CB,0x99CC,0x99CD,0x99CE,0x99CF,0x99D0,0x99D1, -0x99D2,0x99D3,0x99D4,0x99D5,0x99D6,0x99D7,0x99D8, 0, -0x99D9,0x99DA,0x99DB,0x99DC,0x99DD,0x99DE,0x99DF,0x99E0, -0x99E1,0x99E2,0x99E3,0x99E4,0x99E5,0x99E6,0x99E7,0x99E8, -0x99E9,0x99EA,0x99EB,0x99EC,0x99ED,0x99EE,0x99EF,0x99F0, -0x99F1,0x99F2,0x99F3,0x99F4,0x99F5,0x99F6,0x99F7,0x99F8, -0x99F9,0x761B,0x763C,0x7622,0x7620,0x7640,0x762D,0x7630, -0x763F,0x7635,0x7643,0x763E,0x7633,0x764D,0x765E,0x7654, -0x765C,0x7656,0x766B,0x766F,0x7FCA,0x7AE6,0x7A78,0x7A79, -0x7A80,0x7A86,0x7A88,0x7A95,0x7AA6,0x7AA0,0x7AAC,0x7AA8, -0x7AAD,0x7AB3,0x8864,0x8869,0x8872,0x887D,0x887F,0x8882, -0x88A2,0x88C6,0x88B7,0x88BC,0x88C9,0x88E2,0x88CE,0x88E3, -0x88E5,0x88F1,0x891A,0x88FC,0x88E8,0x88FE,0x88F0,0x8921, -0x8919,0x8913,0x891B,0x890A,0x8934,0x892B,0x8936,0x8941, -0x8966,0x897B,0x758B,0x80E5,0x76B2,0x76B4,0x77DC,0x8012, -0x8014,0x8016,0x801C,0x8020,0x8022,0x8025,0x8026,0x8027, -0x8029,0x8028,0x8031,0x800B,0x8035,0x8043,0x8046,0x804D, -0x8052,0x8069,0x8071,0x8983,0x9878,0x9880,0x9883, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x99FA,0x99FB,0x99FC,0x99FD,0x99FE,0x99FF,0x9A00,0x9A01, -0x9A02,0x9A03,0x9A04,0x9A05,0x9A06,0x9A07,0x9A08,0x9A09, -0x9A0A,0x9A0B,0x9A0C,0x9A0D,0x9A0E,0x9A0F,0x9A10,0x9A11, -0x9A12,0x9A13,0x9A14,0x9A15,0x9A16,0x9A17,0x9A18,0x9A19, -0x9A1A,0x9A1B,0x9A1C,0x9A1D,0x9A1E,0x9A1F,0x9A20,0x9A21, -0x9A22,0x9A23,0x9A24,0x9A25,0x9A26,0x9A27,0x9A28,0x9A29, -0x9A2A,0x9A2B,0x9A2C,0x9A2D,0x9A2E,0x9A2F,0x9A30,0x9A31, -0x9A32,0x9A33,0x9A34,0x9A35,0x9A36,0x9A37,0x9A38, 0, -0x9A39,0x9A3A,0x9A3B,0x9A3C,0x9A3D,0x9A3E,0x9A3F,0x9A40, -0x9A41,0x9A42,0x9A43,0x9A44,0x9A45,0x9A46,0x9A47,0x9A48, -0x9A49,0x9A4A,0x9A4B,0x9A4C,0x9A4D,0x9A4E,0x9A4F,0x9A50, -0x9A51,0x9A52,0x9A53,0x9A54,0x9A55,0x9A56,0x9A57,0x9A58, -0x9A59,0x9889,0x988C,0x988D,0x988F,0x9894,0x989A,0x989B, -0x989E,0x989F,0x98A1,0x98A2,0x98A5,0x98A6,0x864D,0x8654, -0x866C,0x866E,0x867F,0x867A,0x867C,0x867B,0x86A8,0x868D, -0x868B,0x86AC,0x869D,0x86A7,0x86A3,0x86AA,0x8693,0x86A9, -0x86B6,0x86C4,0x86B5,0x86CE,0x86B0,0x86BA,0x86B1,0x86AF, -0x86C9,0x86CF,0x86B4,0x86E9,0x86F1,0x86F2,0x86ED,0x86F3, -0x86D0,0x8713,0x86DE,0x86F4,0x86DF,0x86D8,0x86D1,0x8703, -0x8707,0x86F8,0x8708,0x870A,0x870D,0x8709,0x8723,0x873B, -0x871E,0x8725,0x872E,0x871A,0x873E,0x8748,0x8734,0x8731, -0x8729,0x8737,0x873F,0x8782,0x8722,0x877D,0x877E,0x877B, -0x8760,0x8770,0x874C,0x876E,0x878B,0x8753,0x8763,0x877C, -0x8764,0x8759,0x8765,0x8793,0x87AF,0x87A8,0x87D2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9A5A,0x9A5B,0x9A5C,0x9A5D,0x9A5E,0x9A5F,0x9A60,0x9A61, -0x9A62,0x9A63,0x9A64,0x9A65,0x9A66,0x9A67,0x9A68,0x9A69, -0x9A6A,0x9A6B,0x9A72,0x9A83,0x9A89,0x9A8D,0x9A8E,0x9A94, -0x9A95,0x9A99,0x9AA6,0x9AA9,0x9AAA,0x9AAB,0x9AAC,0x9AAD, -0x9AAE,0x9AAF,0x9AB2,0x9AB3,0x9AB4,0x9AB5,0x9AB9,0x9ABB, -0x9ABD,0x9ABE,0x9ABF,0x9AC3,0x9AC4,0x9AC6,0x9AC7,0x9AC8, -0x9AC9,0x9ACA,0x9ACD,0x9ACE,0x9ACF,0x9AD0,0x9AD2,0x9AD4, -0x9AD5,0x9AD6,0x9AD7,0x9AD9,0x9ADA,0x9ADB,0x9ADC, 0, -0x9ADD,0x9ADE,0x9AE0,0x9AE2,0x9AE3,0x9AE4,0x9AE5,0x9AE7, -0x9AE8,0x9AE9,0x9AEA,0x9AEC,0x9AEE,0x9AF0,0x9AF1,0x9AF2, -0x9AF3,0x9AF4,0x9AF5,0x9AF6,0x9AF7,0x9AF8,0x9AFA,0x9AFC, -0x9AFD,0x9AFE,0x9AFF,0x9B00,0x9B01,0x9B02,0x9B04,0x9B05, -0x9B06,0x87C6,0x8788,0x8785,0x87AD,0x8797,0x8783,0x87AB, -0x87E5,0x87AC,0x87B5,0x87B3,0x87CB,0x87D3,0x87BD,0x87D1, -0x87C0,0x87CA,0x87DB,0x87EA,0x87E0,0x87EE,0x8816,0x8813, -0x87FE,0x880A,0x881B,0x8821,0x8839,0x883C,0x7F36,0x7F42, -0x7F44,0x7F45,0x8210,0x7AFA,0x7AFD,0x7B08,0x7B03,0x7B04, -0x7B15,0x7B0A,0x7B2B,0x7B0F,0x7B47,0x7B38,0x7B2A,0x7B19, -0x7B2E,0x7B31,0x7B20,0x7B25,0x7B24,0x7B33,0x7B3E,0x7B1E, -0x7B58,0x7B5A,0x7B45,0x7B75,0x7B4C,0x7B5D,0x7B60,0x7B6E, -0x7B7B,0x7B62,0x7B72,0x7B71,0x7B90,0x7BA6,0x7BA7,0x7BB8, -0x7BAC,0x7B9D,0x7BA8,0x7B85,0x7BAA,0x7B9C,0x7BA2,0x7BAB, -0x7BB4,0x7BD1,0x7BC1,0x7BCC,0x7BDD,0x7BDA,0x7BE5,0x7BE6, -0x7BEA,0x7C0C,0x7BFE,0x7BFC,0x7C0F,0x7C16,0x7C0B, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9B07,0x9B09,0x9B0A,0x9B0B,0x9B0C,0x9B0D,0x9B0E,0x9B10, -0x9B11,0x9B12,0x9B14,0x9B15,0x9B16,0x9B17,0x9B18,0x9B19, -0x9B1A,0x9B1B,0x9B1C,0x9B1D,0x9B1E,0x9B20,0x9B21,0x9B22, -0x9B24,0x9B25,0x9B26,0x9B27,0x9B28,0x9B29,0x9B2A,0x9B2B, -0x9B2C,0x9B2D,0x9B2E,0x9B30,0x9B31,0x9B33,0x9B34,0x9B35, -0x9B36,0x9B37,0x9B38,0x9B39,0x9B3A,0x9B3D,0x9B3E,0x9B3F, -0x9B40,0x9B46,0x9B4A,0x9B4B,0x9B4C,0x9B4E,0x9B50,0x9B52, -0x9B53,0x9B55,0x9B56,0x9B57,0x9B58,0x9B59,0x9B5A, 0, -0x9B5B,0x9B5C,0x9B5D,0x9B5E,0x9B5F,0x9B60,0x9B61,0x9B62, -0x9B63,0x9B64,0x9B65,0x9B66,0x9B67,0x9B68,0x9B69,0x9B6A, -0x9B6B,0x9B6C,0x9B6D,0x9B6E,0x9B6F,0x9B70,0x9B71,0x9B72, -0x9B73,0x9B74,0x9B75,0x9B76,0x9B77,0x9B78,0x9B79,0x9B7A, -0x9B7B,0x7C1F,0x7C2A,0x7C26,0x7C38,0x7C41,0x7C40,0x81FE, -0x8201,0x8202,0x8204,0x81EC,0x8844,0x8221,0x8222,0x8223, -0x822D,0x822F,0x8228,0x822B,0x8238,0x823B,0x8233,0x8234, -0x823E,0x8244,0x8249,0x824B,0x824F,0x825A,0x825F,0x8268, -0x887E,0x8885,0x8888,0x88D8,0x88DF,0x895E,0x7F9D,0x7F9F, -0x7FA7,0x7FAF,0x7FB0,0x7FB2,0x7C7C,0x6549,0x7C91,0x7C9D, -0x7C9C,0x7C9E,0x7CA2,0x7CB2,0x7CBC,0x7CBD,0x7CC1,0x7CC7, -0x7CCC,0x7CCD,0x7CC8,0x7CC5,0x7CD7,0x7CE8,0x826E,0x66A8, -0x7FBF,0x7FCE,0x7FD5,0x7FE5,0x7FE1,0x7FE6,0x7FE9,0x7FEE, -0x7FF3,0x7CF8,0x7D77,0x7DA6,0x7DAE,0x7E47,0x7E9B,0x9EB8, -0x9EB4,0x8D73,0x8D84,0x8D94,0x8D91,0x8DB1,0x8D67,0x8D6D, -0x8C47,0x8C49,0x914A,0x9150,0x914E,0x914F,0x9164, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9B7C,0x9B7D,0x9B7E,0x9B7F,0x9B80,0x9B81,0x9B82,0x9B83, -0x9B84,0x9B85,0x9B86,0x9B87,0x9B88,0x9B89,0x9B8A,0x9B8B, -0x9B8C,0x9B8D,0x9B8E,0x9B8F,0x9B90,0x9B91,0x9B92,0x9B93, -0x9B94,0x9B95,0x9B96,0x9B97,0x9B98,0x9B99,0x9B9A,0x9B9B, -0x9B9C,0x9B9D,0x9B9E,0x9B9F,0x9BA0,0x9BA1,0x9BA2,0x9BA3, -0x9BA4,0x9BA5,0x9BA6,0x9BA7,0x9BA8,0x9BA9,0x9BAA,0x9BAB, -0x9BAC,0x9BAD,0x9BAE,0x9BAF,0x9BB0,0x9BB1,0x9BB2,0x9BB3, -0x9BB4,0x9BB5,0x9BB6,0x9BB7,0x9BB8,0x9BB9,0x9BBA, 0, -0x9BBB,0x9BBC,0x9BBD,0x9BBE,0x9BBF,0x9BC0,0x9BC1,0x9BC2, -0x9BC3,0x9BC4,0x9BC5,0x9BC6,0x9BC7,0x9BC8,0x9BC9,0x9BCA, -0x9BCB,0x9BCC,0x9BCD,0x9BCE,0x9BCF,0x9BD0,0x9BD1,0x9BD2, -0x9BD3,0x9BD4,0x9BD5,0x9BD6,0x9BD7,0x9BD8,0x9BD9,0x9BDA, -0x9BDB,0x9162,0x9161,0x9170,0x9169,0x916F,0x917D,0x917E, -0x9172,0x9174,0x9179,0x918C,0x9185,0x9190,0x918D,0x9191, -0x91A2,0x91A3,0x91AA,0x91AD,0x91AE,0x91AF,0x91B5,0x91B4, -0x91BA,0x8C55,0x9E7E,0x8DB8,0x8DEB,0x8E05,0x8E59,0x8E69, -0x8DB5,0x8DBF,0x8DBC,0x8DBA,0x8DC4,0x8DD6,0x8DD7,0x8DDA, -0x8DDE,0x8DCE,0x8DCF,0x8DDB,0x8DC6,0x8DEC,0x8DF7,0x8DF8, -0x8DE3,0x8DF9,0x8DFB,0x8DE4,0x8E09,0x8DFD,0x8E14,0x8E1D, -0x8E1F,0x8E2C,0x8E2E,0x8E23,0x8E2F,0x8E3A,0x8E40,0x8E39, -0x8E35,0x8E3D,0x8E31,0x8E49,0x8E41,0x8E42,0x8E51,0x8E52, -0x8E4A,0x8E70,0x8E76,0x8E7C,0x8E6F,0x8E74,0x8E85,0x8E8F, -0x8E94,0x8E90,0x8E9C,0x8E9E,0x8C78,0x8C82,0x8C8A,0x8C85, -0x8C98,0x8C94,0x659B,0x89D6,0x89DE,0x89DA,0x89DC, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9BDC,0x9BDD,0x9BDE,0x9BDF,0x9BE0,0x9BE1,0x9BE2,0x9BE3, -0x9BE4,0x9BE5,0x9BE6,0x9BE7,0x9BE8,0x9BE9,0x9BEA,0x9BEB, -0x9BEC,0x9BED,0x9BEE,0x9BEF,0x9BF0,0x9BF1,0x9BF2,0x9BF3, -0x9BF4,0x9BF5,0x9BF6,0x9BF7,0x9BF8,0x9BF9,0x9BFA,0x9BFB, -0x9BFC,0x9BFD,0x9BFE,0x9BFF,0x9C00,0x9C01,0x9C02,0x9C03, -0x9C04,0x9C05,0x9C06,0x9C07,0x9C08,0x9C09,0x9C0A,0x9C0B, -0x9C0C,0x9C0D,0x9C0E,0x9C0F,0x9C10,0x9C11,0x9C12,0x9C13, -0x9C14,0x9C15,0x9C16,0x9C17,0x9C18,0x9C19,0x9C1A, 0, -0x9C1B,0x9C1C,0x9C1D,0x9C1E,0x9C1F,0x9C20,0x9C21,0x9C22, -0x9C23,0x9C24,0x9C25,0x9C26,0x9C27,0x9C28,0x9C29,0x9C2A, -0x9C2B,0x9C2C,0x9C2D,0x9C2E,0x9C2F,0x9C30,0x9C31,0x9C32, -0x9C33,0x9C34,0x9C35,0x9C36,0x9C37,0x9C38,0x9C39,0x9C3A, -0x9C3B,0x89E5,0x89EB,0x89EF,0x8A3E,0x8B26,0x9753,0x96E9, -0x96F3,0x96EF,0x9706,0x9701,0x9708,0x970F,0x970E,0x972A, -0x972D,0x9730,0x973E,0x9F80,0x9F83,0x9F85,0x9F86,0x9F87, -0x9F88,0x9F89,0x9F8A,0x9F8C,0x9EFE,0x9F0B,0x9F0D,0x96B9, -0x96BC,0x96BD,0x96CE,0x96D2,0x77BF,0x96E0,0x928E,0x92AE, -0x92C8,0x933E,0x936A,0x93CA,0x938F,0x943E,0x946B,0x9C7F, -0x9C82,0x9C85,0x9C86,0x9C87,0x9C88,0x7A23,0x9C8B,0x9C8E, -0x9C90,0x9C91,0x9C92,0x9C94,0x9C95,0x9C9A,0x9C9B,0x9C9E, -0x9C9F,0x9CA0,0x9CA1,0x9CA2,0x9CA3,0x9CA5,0x9CA6,0x9CA7, -0x9CA8,0x9CA9,0x9CAB,0x9CAD,0x9CAE,0x9CB0,0x9CB1,0x9CB2, -0x9CB3,0x9CB4,0x9CB5,0x9CB6,0x9CB7,0x9CBA,0x9CBB,0x9CBC, -0x9CBD,0x9CC4,0x9CC5,0x9CC6,0x9CC7,0x9CCA,0x9CCB, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9C3C,0x9C3D,0x9C3E,0x9C3F,0x9C40,0x9C41,0x9C42,0x9C43, -0x9C44,0x9C45,0x9C46,0x9C47,0x9C48,0x9C49,0x9C4A,0x9C4B, -0x9C4C,0x9C4D,0x9C4E,0x9C4F,0x9C50,0x9C51,0x9C52,0x9C53, -0x9C54,0x9C55,0x9C56,0x9C57,0x9C58,0x9C59,0x9C5A,0x9C5B, -0x9C5C,0x9C5D,0x9C5E,0x9C5F,0x9C60,0x9C61,0x9C62,0x9C63, -0x9C64,0x9C65,0x9C66,0x9C67,0x9C68,0x9C69,0x9C6A,0x9C6B, -0x9C6C,0x9C6D,0x9C6E,0x9C6F,0x9C70,0x9C71,0x9C72,0x9C73, -0x9C74,0x9C75,0x9C76,0x9C77,0x9C78,0x9C79,0x9C7A, 0, -0x9C7B,0x9C7D,0x9C7E,0x9C80,0x9C83,0x9C84,0x9C89,0x9C8A, -0x9C8C,0x9C8F,0x9C93,0x9C96,0x9C97,0x9C98,0x9C99,0x9C9D, -0x9CAA,0x9CAC,0x9CAF,0x9CB9,0x9CBE,0x9CBF,0x9CC0,0x9CC1, -0x9CC2,0x9CC8,0x9CC9,0x9CD1,0x9CD2,0x9CDA,0x9CDB,0x9CE0, -0x9CE1,0x9CCC,0x9CCD,0x9CCE,0x9CCF,0x9CD0,0x9CD3,0x9CD4, -0x9CD5,0x9CD7,0x9CD8,0x9CD9,0x9CDC,0x9CDD,0x9CDF,0x9CE2, -0x977C,0x9785,0x9791,0x9792,0x9794,0x97AF,0x97AB,0x97A3, -0x97B2,0x97B4,0x9AB1,0x9AB0,0x9AB7,0x9E58,0x9AB6,0x9ABA, -0x9ABC,0x9AC1,0x9AC0,0x9AC5,0x9AC2,0x9ACB,0x9ACC,0x9AD1, -0x9B45,0x9B43,0x9B47,0x9B49,0x9B48,0x9B4D,0x9B51,0x98E8, -0x990D,0x992E,0x9955,0x9954,0x9ADF,0x9AE1,0x9AE6,0x9AEF, -0x9AEB,0x9AFB,0x9AED,0x9AF9,0x9B08,0x9B0F,0x9B13,0x9B1F, -0x9B23,0x9EBD,0x9EBE,0x7E3B,0x9E82,0x9E87,0x9E88,0x9E8B, -0x9E92,0x93D6,0x9E9D,0x9E9F,0x9EDB,0x9EDC,0x9EDD,0x9EE0, -0x9EDF,0x9EE2,0x9EE9,0x9EE7,0x9EE5,0x9EEA,0x9EEF,0x9F22, -0x9F2C,0x9F2F,0x9F39,0x9F37,0x9F3D,0x9F3E,0x9F44, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9CE3,0x9CE4,0x9CE5,0x9CE6,0x9CE7,0x9CE8,0x9CE9,0x9CEA, -0x9CEB,0x9CEC,0x9CED,0x9CEE,0x9CEF,0x9CF0,0x9CF1,0x9CF2, -0x9CF3,0x9CF4,0x9CF5,0x9CF6,0x9CF7,0x9CF8,0x9CF9,0x9CFA, -0x9CFB,0x9CFC,0x9CFD,0x9CFE,0x9CFF,0x9D00,0x9D01,0x9D02, -0x9D03,0x9D04,0x9D05,0x9D06,0x9D07,0x9D08,0x9D09,0x9D0A, -0x9D0B,0x9D0C,0x9D0D,0x9D0E,0x9D0F,0x9D10,0x9D11,0x9D12, -0x9D13,0x9D14,0x9D15,0x9D16,0x9D17,0x9D18,0x9D19,0x9D1A, -0x9D1B,0x9D1C,0x9D1D,0x9D1E,0x9D1F,0x9D20,0x9D21, 0, -0x9D22,0x9D23,0x9D24,0x9D25,0x9D26,0x9D27,0x9D28,0x9D29, -0x9D2A,0x9D2B,0x9D2C,0x9D2D,0x9D2E,0x9D2F,0x9D30,0x9D31, -0x9D32,0x9D33,0x9D34,0x9D35,0x9D36,0x9D37,0x9D38,0x9D39, -0x9D3A,0x9D3B,0x9D3C,0x9D3D,0x9D3E,0x9D3F,0x9D40,0x9D41, -0x9D42, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9D43,0x9D44,0x9D45,0x9D46,0x9D47,0x9D48,0x9D49,0x9D4A, -0x9D4B,0x9D4C,0x9D4D,0x9D4E,0x9D4F,0x9D50,0x9D51,0x9D52, -0x9D53,0x9D54,0x9D55,0x9D56,0x9D57,0x9D58,0x9D59,0x9D5A, -0x9D5B,0x9D5C,0x9D5D,0x9D5E,0x9D5F,0x9D60,0x9D61,0x9D62, -0x9D63,0x9D64,0x9D65,0x9D66,0x9D67,0x9D68,0x9D69,0x9D6A, -0x9D6B,0x9D6C,0x9D6D,0x9D6E,0x9D6F,0x9D70,0x9D71,0x9D72, -0x9D73,0x9D74,0x9D75,0x9D76,0x9D77,0x9D78,0x9D79,0x9D7A, -0x9D7B,0x9D7C,0x9D7D,0x9D7E,0x9D7F,0x9D80,0x9D81, 0, -0x9D82,0x9D83,0x9D84,0x9D85,0x9D86,0x9D87,0x9D88,0x9D89, -0x9D8A,0x9D8B,0x9D8C,0x9D8D,0x9D8E,0x9D8F,0x9D90,0x9D91, -0x9D92,0x9D93,0x9D94,0x9D95,0x9D96,0x9D97,0x9D98,0x9D99, -0x9D9A,0x9D9B,0x9D9C,0x9D9D,0x9D9E,0x9D9F,0x9DA0,0x9DA1, -0x9DA2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9DA3,0x9DA4,0x9DA5,0x9DA6,0x9DA7,0x9DA8,0x9DA9,0x9DAA, -0x9DAB,0x9DAC,0x9DAD,0x9DAE,0x9DAF,0x9DB0,0x9DB1,0x9DB2, -0x9DB3,0x9DB4,0x9DB5,0x9DB6,0x9DB7,0x9DB8,0x9DB9,0x9DBA, -0x9DBB,0x9DBC,0x9DBD,0x9DBE,0x9DBF,0x9DC0,0x9DC1,0x9DC2, -0x9DC3,0x9DC4,0x9DC5,0x9DC6,0x9DC7,0x9DC8,0x9DC9,0x9DCA, -0x9DCB,0x9DCC,0x9DCD,0x9DCE,0x9DCF,0x9DD0,0x9DD1,0x9DD2, -0x9DD3,0x9DD4,0x9DD5,0x9DD6,0x9DD7,0x9DD8,0x9DD9,0x9DDA, -0x9DDB,0x9DDC,0x9DDD,0x9DDE,0x9DDF,0x9DE0,0x9DE1, 0, -0x9DE2,0x9DE3,0x9DE4,0x9DE5,0x9DE6,0x9DE7,0x9DE8,0x9DE9, -0x9DEA,0x9DEB,0x9DEC,0x9DED,0x9DEE,0x9DEF,0x9DF0,0x9DF1, -0x9DF2,0x9DF3,0x9DF4,0x9DF5,0x9DF6,0x9DF7,0x9DF8,0x9DF9, -0x9DFA,0x9DFB,0x9DFC,0x9DFD,0x9DFE,0x9DFF,0x9E00,0x9E01, -0x9E02, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9E03,0x9E04,0x9E05,0x9E06,0x9E07,0x9E08,0x9E09,0x9E0A, -0x9E0B,0x9E0C,0x9E0D,0x9E0E,0x9E0F,0x9E10,0x9E11,0x9E12, -0x9E13,0x9E14,0x9E15,0x9E16,0x9E17,0x9E18,0x9E19,0x9E1A, -0x9E1B,0x9E1C,0x9E1D,0x9E1E,0x9E24,0x9E27,0x9E2E,0x9E30, -0x9E34,0x9E3B,0x9E3C,0x9E40,0x9E4D,0x9E50,0x9E52,0x9E53, -0x9E54,0x9E56,0x9E59,0x9E5D,0x9E5F,0x9E60,0x9E61,0x9E62, -0x9E65,0x9E6E,0x9E6F,0x9E72,0x9E74,0x9E75,0x9E76,0x9E77, -0x9E78,0x9E79,0x9E7A,0x9E7B,0x9E7C,0x9E7D,0x9E80, 0, -0x9E81,0x9E83,0x9E84,0x9E85,0x9E86,0x9E89,0x9E8A,0x9E8C, -0x9E8D,0x9E8E,0x9E8F,0x9E90,0x9E91,0x9E94,0x9E95,0x9E96, -0x9E97,0x9E98,0x9E99,0x9E9A,0x9E9B,0x9E9C,0x9E9E,0x9EA0, -0x9EA1,0x9EA2,0x9EA3,0x9EA4,0x9EA5,0x9EA7,0x9EA8,0x9EA9, -0x9EAA, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9EAB,0x9EAC,0x9EAD,0x9EAE,0x9EAF,0x9EB0,0x9EB1,0x9EB2, -0x9EB3,0x9EB5,0x9EB6,0x9EB7,0x9EB9,0x9EBA,0x9EBC,0x9EBF, -0x9EC0,0x9EC1,0x9EC2,0x9EC3,0x9EC5,0x9EC6,0x9EC7,0x9EC8, -0x9ECA,0x9ECB,0x9ECC,0x9ED0,0x9ED2,0x9ED3,0x9ED5,0x9ED6, -0x9ED7,0x9ED9,0x9EDA,0x9EDE,0x9EE1,0x9EE3,0x9EE4,0x9EE6, -0x9EE8,0x9EEB,0x9EEC,0x9EED,0x9EEE,0x9EF0,0x9EF1,0x9EF2, -0x9EF3,0x9EF4,0x9EF5,0x9EF6,0x9EF7,0x9EF8,0x9EFA,0x9EFD, -0x9EFF,0x9F00,0x9F01,0x9F02,0x9F03,0x9F04,0x9F05, 0, -0x9F06,0x9F07,0x9F08,0x9F09,0x9F0A,0x9F0C,0x9F0F,0x9F11, -0x9F12,0x9F14,0x9F15,0x9F16,0x9F18,0x9F1A,0x9F1B,0x9F1C, -0x9F1D,0x9F1E,0x9F1F,0x9F21,0x9F23,0x9F24,0x9F25,0x9F26, -0x9F27,0x9F28,0x9F29,0x9F2A,0x9F2B,0x9F2D,0x9F2E,0x9F30, -0x9F31, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x9F32,0x9F33,0x9F34,0x9F35,0x9F36,0x9F38,0x9F3A,0x9F3C, -0x9F3F,0x9F40,0x9F41,0x9F42,0x9F43,0x9F45,0x9F46,0x9F47, -0x9F48,0x9F49,0x9F4A,0x9F4B,0x9F4C,0x9F4D,0x9F4E,0x9F4F, -0x9F52,0x9F53,0x9F54,0x9F55,0x9F56,0x9F57,0x9F58,0x9F59, -0x9F5A,0x9F5B,0x9F5C,0x9F5D,0x9F5E,0x9F5F,0x9F60,0x9F61, -0x9F62,0x9F63,0x9F64,0x9F65,0x9F66,0x9F67,0x9F68,0x9F69, -0x9F6A,0x9F6B,0x9F6C,0x9F6D,0x9F6E,0x9F6F,0x9F70,0x9F71, -0x9F72,0x9F73,0x9F74,0x9F75,0x9F76,0x9F77,0x9F78, 0, -0x9F79,0x9F7A,0x9F7B,0x9F7C,0x9F7D,0x9F7E,0x9F81,0x9F82, -0x9F8D,0x9F8E,0x9F8F,0x9F90,0x9F91,0x9F92,0x9F93,0x9F94, -0x9F95,0x9F96,0x9F97,0x9F98,0x9F9C,0x9F9D,0x9F9E,0x9FA1, -0x9FA2,0x9FA3,0x9FA4,0x9FA5,0xF92C,0xF979,0xF995,0xF9E7, -0xF9F1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xFA0C,0xFA0D,0xFA0E,0xFA0F,0xFA11,0xFA13,0xFA14,0xFA18, -0xFA1F,0xFA20,0xFA21,0xFA23,0xFA24,0xFA27,0xFA28,0xFA29 -}; - -static int func_gbk_uni_onechar(int code){ - if ((code>=0x8140)&&(code<=0xFE4F)) - return(tab_gbk_uni0[code-0x8140]); - return(0); -} - - - -/* page 0 0x00A4-0x0451 */ -static uint16 tab_uni_gbk0[]={ -0xA1E8, 0, 0,0xA1EC,0xA1A7, 0, 0, 0, - 0, 0, 0, 0,0xA1E3,0xA1C0, 0, 0, - 0, 0, 0,0xA1A4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xA1C1, 0, 0, 0, 0, - 0, 0, 0, 0,0xA8A4,0xA8A2, 0, 0, - 0, 0, 0, 0,0xA8A8,0xA8A6,0xA8BA, 0, -0xA8AC,0xA8AA, 0, 0, 0, 0,0xA8B0,0xA8AE, - 0, 0, 0,0xA1C2, 0,0xA8B4,0xA8B2, 0, -0xA8B9, 0, 0, 0, 0,0xA8A1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xA8A5, - 0, 0, 0, 0, 0, 0, 0,0xA8A7, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xA8A9, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA8BD, 0, 0, 0,0xA8BE, 0, 0, 0, - 0,0xA8AD, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xA8B1, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xA8A3, 0,0xA8AB, 0,0xA8AF, 0, -0xA8B3, 0,0xA8B5, 0,0xA8B6, 0,0xA8B7, 0, -0xA8B8, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA8BB, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA8C0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xA1A6, 0,0xA1A5,0xA840,0xA841, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA842, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA6A1,0xA6A2,0xA6A3, -0xA6A4,0xA6A5,0xA6A6,0xA6A7,0xA6A8,0xA6A9,0xA6AA,0xA6AB, -0xA6AC,0xA6AD,0xA6AE,0xA6AF,0xA6B0,0xA6B1, 0,0xA6B2, -0xA6B3,0xA6B4,0xA6B5,0xA6B6,0xA6B7,0xA6B8, 0, 0, - 0, 0, 0, 0, 0,0xA6C1,0xA6C2,0xA6C3, -0xA6C4,0xA6C5,0xA6C6,0xA6C7,0xA6C8,0xA6C9,0xA6CA,0xA6CB, -0xA6CC,0xA6CD,0xA6CE,0xA6CF,0xA6D0,0xA6D1, 0,0xA6D2, -0xA6D3,0xA6D4,0xA6D5,0xA6D6,0xA6D7,0xA6D8, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA7A7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xA7A1,0xA7A2,0xA7A3,0xA7A4, -0xA7A5,0xA7A6,0xA7A8,0xA7A9,0xA7AA,0xA7AB,0xA7AC,0xA7AD, -0xA7AE,0xA7AF,0xA7B0,0xA7B1,0xA7B2,0xA7B3,0xA7B4,0xA7B5, -0xA7B6,0xA7B7,0xA7B8,0xA7B9,0xA7BA,0xA7BB,0xA7BC,0xA7BD, -0xA7BE,0xA7BF,0xA7C0,0xA7C1,0xA7D1,0xA7D2,0xA7D3,0xA7D4, -0xA7D5,0xA7D6,0xA7D8,0xA7D9,0xA7DA,0xA7DB,0xA7DC,0xA7DD, -0xA7DE,0xA7DF,0xA7E0,0xA7E1,0xA7E2,0xA7E3,0xA7E4,0xA7E5, -0xA7E6,0xA7E7,0xA7E8,0xA7E9,0xA7EA,0xA7EB,0xA7EC,0xA7ED, -0xA7EE,0xA7EF,0xA7F0,0xA7F1, 0,0xA7D7}; - -/* page 1 0x2010-0x2312 */ -static uint16 tab_uni_gbk1[]={ -0xA95C, 0, 0,0xA843,0xA1AA,0xA844,0xA1AC, 0, -0xA1AE,0xA1AF, 0, 0,0xA1B0,0xA1B1, 0, 0, - 0, 0, 0, 0, 0,0xA845,0xA1AD, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA1EB, 0,0xA1E4,0xA1E5, 0,0xA846, 0, 0, - 0, 0, 0,0xA1F9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xA1E6, 0,0xA847, 0, 0, - 0,0xA848, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xA1ED, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xA959, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA2F1,0xA2F2,0xA2F3,0xA2F4,0xA2F5,0xA2F6,0xA2F7,0xA2F8, -0xA2F9,0xA2FA,0xA2FB,0xA2FC, 0, 0, 0, 0, -0xA2A1,0xA2A2,0xA2A3,0xA2A4,0xA2A5,0xA2A6,0xA2A7,0xA2A8, -0xA2A9,0xA2AA, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA1FB,0xA1FC,0xA1FA,0xA1FD, 0, 0,0xA849,0xA84A, -0xA84B,0xA84C, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA1CA, 0, 0, 0, 0, 0, 0,0xA1C7, - 0,0xA1C6, 0, 0, 0,0xA84D, 0, 0, - 0, 0,0xA1CC, 0, 0,0xA1D8,0xA1DE,0xA84E, -0xA1CF, 0, 0,0xA84F, 0,0xA1CE, 0,0xA1C4, -0xA1C5,0xA1C9,0xA1C8,0xA1D2, 0, 0,0xA1D3, 0, - 0, 0, 0, 0,0xA1E0,0xA1DF,0xA1C3,0xA1CB, - 0, 0, 0, 0, 0,0xA1D7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA1D6, 0, 0, 0,0xA1D5, 0, 0, 0, - 0, 0,0xA850, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA1D9,0xA1D4, 0, 0,0xA1DC,0xA1DD,0xA851,0xA852, - 0, 0, 0, 0, 0, 0,0xA1DA,0xA1DB, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA892, 0, 0, - 0,0xA1D1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA1CD, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,0xA853, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xA1D0}; - -/* page 2 0x2460-0x2642 */ -static uint16 tab_uni_gbk2[]={ -0xA2D9,0xA2DA,0xA2DB,0xA2DC,0xA2DD,0xA2DE,0xA2DF,0xA2E0, -0xA2E1,0xA2E2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,0xA2C5,0xA2C6,0xA2C7,0xA2C8, -0xA2C9,0xA2CA,0xA2CB,0xA2CC,0xA2CD,0xA2CE,0xA2CF,0xA2D0, -0xA2D1,0xA2D2,0xA2D3,0xA2D4,0xA2D5,0xA2D6,0xA2D7,0xA2D8, -0xA2B1,0xA2B2,0xA2B3,0xA2B4,0xA2B5,0xA2B6,0xA2B7,0xA2B8, -0xA2B9,0xA2BA,0xA2BB,0xA2BC,0xA2BD,0xA2BE,0xA2BF,0xA2C0, -0xA2C1,0xA2C2,0xA2C3,0xA2C4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA9A4,0xA9A5,0xA9A6,0xA9A7,0xA9A8,0xA9A9,0xA9AA,0xA9AB, -0xA9AC,0xA9AD,0xA9AE,0xA9AF,0xA9B0,0xA9B1,0xA9B2,0xA9B3, -0xA9B4,0xA9B5,0xA9B6,0xA9B7,0xA9B8,0xA9B9,0xA9BA,0xA9BB, -0xA9BC,0xA9BD,0xA9BE,0xA9BF,0xA9C0,0xA9C1,0xA9C2,0xA9C3, -0xA9C4,0xA9C5,0xA9C6,0xA9C7,0xA9C8,0xA9C9,0xA9CA,0xA9CB, -0xA9CC,0xA9CD,0xA9CE,0xA9CF,0xA9D0,0xA9D1,0xA9D2,0xA9D3, -0xA9D4,0xA9D5,0xA9D6,0xA9D7,0xA9D8,0xA9D9,0xA9DA,0xA9DB, -0xA9DC,0xA9DD,0xA9DE,0xA9DF,0xA9E0,0xA9E1,0xA9E2,0xA9E3, -0xA9E4,0xA9E5,0xA9E6,0xA9E7,0xA9E8,0xA9E9,0xA9EA,0xA9EB, -0xA9EC,0xA9ED,0xA9EE,0xA9EF, 0, 0, 0, 0, -0xA854,0xA855,0xA856,0xA857,0xA858,0xA859,0xA85A,0xA85B, -0xA85C,0xA85D,0xA85E,0xA85F,0xA860,0xA861,0xA862,0xA863, -0xA864,0xA865,0xA866,0xA867,0xA868,0xA869,0xA86A,0xA86B, -0xA86C,0xA86D,0xA86E,0xA86F,0xA870,0xA871,0xA872,0xA873, -0xA874,0xA875,0xA876,0xA877, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xA878,0xA879,0xA87A,0xA87B,0xA87C,0xA87D,0xA87E, -0xA880,0xA881,0xA882,0xA883,0xA884,0xA885,0xA886,0xA887, - 0, 0, 0,0xA888,0xA889,0xA88A, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA1F6,0xA1F5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xA1F8,0xA1F7, 0, 0, 0, 0, - 0, 0, 0, 0,0xA88B,0xA88C, 0, 0, - 0, 0, 0, 0, 0, 0,0xA1F4,0xA1F3, - 0, 0, 0,0xA1F0, 0, 0,0xA1F2,0xA1F1, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,0xA88D,0xA88E,0xA88F,0xA890, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xA1EF,0xA1EE, 0, - 0,0xA891, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA1E2, 0,0xA1E1}; - -/* page 3 0x3000-0x3129 */ -static uint16 tab_uni_gbk3[]={ -0xA1A1,0xA1A2,0xA1A3,0xA1A8, 0,0xA1A9,0xA965,0xA996, -0xA1B4,0xA1B5,0xA1B6,0xA1B7,0xA1B8,0xA1B9,0xA1BA,0xA1BB, -0xA1BE,0xA1BF,0xA893,0xA1FE,0xA1B2,0xA1B3,0xA1BC,0xA1BD, - 0, 0, 0, 0, 0,0xA894,0xA895, 0, - 0,0xA940,0xA941,0xA942,0xA943,0xA944,0xA945,0xA946, -0xA947,0xA948, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xA4A1,0xA4A2,0xA4A3,0xA4A4,0xA4A5,0xA4A6,0xA4A7, -0xA4A8,0xA4A9,0xA4AA,0xA4AB,0xA4AC,0xA4AD,0xA4AE,0xA4AF, -0xA4B0,0xA4B1,0xA4B2,0xA4B3,0xA4B4,0xA4B5,0xA4B6,0xA4B7, -0xA4B8,0xA4B9,0xA4BA,0xA4BB,0xA4BC,0xA4BD,0xA4BE,0xA4BF, -0xA4C0,0xA4C1,0xA4C2,0xA4C3,0xA4C4,0xA4C5,0xA4C6,0xA4C7, -0xA4C8,0xA4C9,0xA4CA,0xA4CB,0xA4CC,0xA4CD,0xA4CE,0xA4CF, -0xA4D0,0xA4D1,0xA4D2,0xA4D3,0xA4D4,0xA4D5,0xA4D6,0xA4D7, -0xA4D8,0xA4D9,0xA4DA,0xA4DB,0xA4DC,0xA4DD,0xA4DE,0xA4DF, -0xA4E0,0xA4E1,0xA4E2,0xA4E3,0xA4E4,0xA4E5,0xA4E6,0xA4E7, -0xA4E8,0xA4E9,0xA4EA,0xA4EB,0xA4EC,0xA4ED,0xA4EE,0xA4EF, -0xA4F0,0xA4F1,0xA4F2,0xA4F3, 0, 0, 0, 0, - 0, 0, 0,0xA961,0xA962,0xA966,0xA967, 0, - 0,0xA5A1,0xA5A2,0xA5A3,0xA5A4,0xA5A5,0xA5A6,0xA5A7, -0xA5A8,0xA5A9,0xA5AA,0xA5AB,0xA5AC,0xA5AD,0xA5AE,0xA5AF, -0xA5B0,0xA5B1,0xA5B2,0xA5B3,0xA5B4,0xA5B5,0xA5B6,0xA5B7, -0xA5B8,0xA5B9,0xA5BA,0xA5BB,0xA5BC,0xA5BD,0xA5BE,0xA5BF, -0xA5C0,0xA5C1,0xA5C2,0xA5C3,0xA5C4,0xA5C5,0xA5C6,0xA5C7, -0xA5C8,0xA5C9,0xA5CA,0xA5CB,0xA5CC,0xA5CD,0xA5CE,0xA5CF, -0xA5D0,0xA5D1,0xA5D2,0xA5D3,0xA5D4,0xA5D5,0xA5D6,0xA5D7, -0xA5D8,0xA5D9,0xA5DA,0xA5DB,0xA5DC,0xA5DD,0xA5DE,0xA5DF, -0xA5E0,0xA5E1,0xA5E2,0xA5E3,0xA5E4,0xA5E5,0xA5E6,0xA5E7, -0xA5E8,0xA5E9,0xA5EA,0xA5EB,0xA5EC,0xA5ED,0xA5EE,0xA5EF, -0xA5F0,0xA5F1,0xA5F2,0xA5F3,0xA5F4,0xA5F5,0xA5F6, 0, - 0, 0, 0, 0,0xA960,0xA963,0xA964, 0, - 0, 0, 0, 0, 0,0xA8C5,0xA8C6,0xA8C7, -0xA8C8,0xA8C9,0xA8CA,0xA8CB,0xA8CC,0xA8CD,0xA8CE,0xA8CF, -0xA8D0,0xA8D1,0xA8D2,0xA8D3,0xA8D4,0xA8D5,0xA8D6,0xA8D7, -0xA8D8,0xA8D9,0xA8DA,0xA8DB,0xA8DC,0xA8DD,0xA8DE,0xA8DF, -0xA8E0,0xA8E1,0xA8E2,0xA8E3,0xA8E4,0xA8E5,0xA8E6,0xA8E7, -0xA8E8,0xA8E9}; - -/* page 4 0x3220-0x32A3 */ -static uint16 tab_uni_gbk4[]={ -0xA2E5,0xA2E6,0xA2E7,0xA2E8,0xA2E9,0xA2EA,0xA2EB,0xA2EC, -0xA2ED,0xA2EE, 0, 0, 0, 0, 0, 0, - 0,0xA95A, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xA949}; - -/* page 5 0x338E-0x33D5 */ -static uint16 tab_uni_gbk5[]={ -0xA94A,0xA94B, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xA94C,0xA94D, -0xA94E, 0, 0,0xA94F, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,0xA950, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA951, 0, 0,0xA952,0xA953, 0, 0,0xA954 -}; - -/* page 6 0x4E00-0x9FA5 */ -static uint16 tab_uni_gbk6[]={ -0xD2BB,0xB6A1,0x8140,0xC6DF,0x8141,0x8142,0x8143,0xCDF2, -0xD5C9,0xC8FD,0xC9CF,0xCFC2,0xD8A2,0xB2BB,0xD3EB,0x8144, -0xD8A4,0xB3F3,0x8145,0xD7A8,0xC7D2,0xD8A7,0xCAC0,0x8146, -0xC7F0,0xB1FB,0xD2B5,0xB4D4,0xB6AB,0xCBBF,0xD8A9,0x8147, -0x8148,0x8149,0xB6AA,0x814A,0xC1BD,0xD1CF,0x814B,0xC9A5, -0xD8AD,0x814C,0xB8F6,0xD1BE,0xE3DC,0xD6D0,0x814D,0x814E, -0xB7E1,0x814F,0xB4AE,0x8150,0xC1D9,0x8151,0xD8BC,0x8152, -0xCDE8,0xB5A4,0xCEAA,0xD6F7,0x8153,0xC0F6,0xBED9,0xD8AF, -0x8154,0x8155,0x8156,0xC4CB,0x8157,0xBEC3,0x8158,0xD8B1, -0xC3B4,0xD2E5,0x8159,0xD6AE,0xCEDA,0xD5A7,0xBAF5,0xB7A6, -0xC0D6,0x815A,0xC6B9,0xC5D2,0xC7C7,0x815B,0xB9D4,0x815C, -0xB3CB,0xD2D2,0x815D,0x815E,0xD8BF,0xBEC5,0xC6F2,0xD2B2, -0xCFB0,0xCFE7,0x815F,0x8160,0x8161,0x8162,0xCAE9,0x8163, -0x8164,0xD8C0,0x8165,0x8166,0x8167,0x8168,0x8169,0x816A, -0xC2F2,0xC2D2,0x816B,0xC8E9,0x816C,0x816D,0x816E,0x816F, -0x8170,0x8171,0x8172,0x8173,0x8174,0x8175,0xC7AC,0x8176, -0x8177,0x8178,0x8179,0x817A,0x817B,0x817C,0xC1CB,0x817D, -0xD3E8,0xD5F9,0x817E,0xCAC2,0xB6FE,0xD8A1,0xD3DA,0xBFF7, -0x8180,0xD4C6,0xBBA5,0xD8C1,0xCEE5,0xBEAE,0x8181,0x8182, -0xD8A8,0x8183,0xD1C7,0xD0A9,0x8184,0x8185,0x8186,0xD8BD, -0xD9EF,0xCDF6,0xBFBA,0x8187,0xBDBB,0xBAA5,0xD2E0,0xB2FA, -0xBAE0,0xC4B6,0x8188,0xCFED,0xBEA9,0xCDA4,0xC1C1,0x8189, -0x818A,0x818B,0xC7D7,0xD9F1,0x818C,0xD9F4,0x818D,0x818E, -0x818F,0x8190,0xC8CB,0xD8E9,0x8191,0x8192,0x8193,0xD2DA, -0xCAB2,0xC8CA,0xD8EC,0xD8EA,0xD8C6,0xBDF6,0xC6CD,0xB3F0, -0x8194,0xD8EB,0xBDF1,0xBDE9,0x8195,0xC8D4,0xB4D3,0x8196, -0x8197,0xC2D8,0x8198,0xB2D6,0xD7D0,0xCACB,0xCBFB,0xD5CC, -0xB8B6,0xCFC9,0x8199,0x819A,0x819B,0xD9DA,0xD8F0,0xC7AA, -0x819C,0xD8EE,0x819D,0xB4FA,0xC1EE,0xD2D4,0x819E,0x819F, -0xD8ED,0x81A0,0xD2C7,0xD8EF,0xC3C7,0x81A1,0x81A2,0x81A3, -0xD1F6,0x81A4,0xD6D9,0xD8F2,0x81A5,0xD8F5,0xBCFE,0xBCDB, -0x81A6,0x81A7,0x81A8,0xC8CE,0x81A9,0xB7DD,0x81AA,0xB7C2, -0x81AB,0xC6F3,0x81AC,0x81AD,0x81AE,0x81AF,0x81B0,0x81B1, -0x81B2,0xD8F8,0xD2C1,0x81B3,0x81B4,0xCEE9,0xBCBF,0xB7FC, -0xB7A5,0xD0DD,0x81B5,0x81B6,0x81B7,0x81B8,0x81B9,0xD6DA, -0xD3C5,0xBBEF,0xBBE1,0xD8F1,0x81BA,0x81BB,0xC9A1,0xCEB0, -0xB4AB,0x81BC,0xD8F3,0x81BD,0xC9CB,0xD8F6,0xC2D7,0xD8F7, -0x81BE,0x81BF,0xCEB1,0xD8F9,0x81C0,0x81C1,0x81C2,0xB2AE, -0xB9C0,0x81C3,0xD9A3,0x81C4,0xB0E9,0x81C5,0xC1E6,0x81C6, -0xC9EC,0x81C7,0xCBC5,0x81C8,0xCBC6,0xD9A4,0x81C9,0x81CA, -0x81CB,0x81CC,0x81CD,0xB5E8,0x81CE,0x81CF,0xB5AB,0x81D0, -0x81D1,0x81D2,0x81D3,0x81D4,0x81D5,0xCEBB,0xB5CD,0xD7A1, -0xD7F4,0xD3D3,0x81D6,0xCCE5,0x81D7,0xBACE,0x81D8,0xD9A2, -0xD9DC,0xD3E0,0xD8FD,0xB7F0,0xD7F7,0xD8FE,0xD8FA,0xD9A1, -0xC4E3,0x81D9,0x81DA,0xD3B6,0xD8F4,0xD9DD,0x81DB,0xD8FB, -0x81DC,0xC5E5,0x81DD,0x81DE,0xC0D0,0x81DF,0x81E0,0xD1F0, -0xB0DB,0x81E1,0x81E2,0xBCD1,0xD9A6,0x81E3,0xD9A5,0x81E4, -0x81E5,0x81E6,0x81E7,0xD9AC,0xD9AE,0x81E8,0xD9AB,0xCAB9, -0x81E9,0x81EA,0x81EB,0xD9A9,0xD6B6,0x81EC,0x81ED,0x81EE, -0xB3DE,0xD9A8,0x81EF,0xC0FD,0x81F0,0xCACC,0x81F1,0xD9AA, -0x81F2,0xD9A7,0x81F3,0x81F4,0xD9B0,0x81F5,0x81F6,0xB6B1, -0x81F7,0x81F8,0x81F9,0xB9A9,0x81FA,0xD2C0,0x81FB,0x81FC, -0xCFC0,0x81FD,0x81FE,0xC2C2,0x8240,0xBDC4,0xD5EC,0xB2E0, -0xC7C8,0xBFEB,0xD9AD,0x8241,0xD9AF,0x8242,0xCEEA,0xBAEE, -0x8243,0x8244,0x8245,0x8246,0x8247,0xC7D6,0x8248,0x8249, -0x824A,0x824B,0x824C,0x824D,0x824E,0x824F,0x8250,0xB1E3, -0x8251,0x8252,0x8253,0xB4D9,0xB6ED,0xD9B4,0x8254,0x8255, -0x8256,0x8257,0xBFA1,0x8258,0x8259,0x825A,0xD9DE,0xC7CE, -0xC0FE,0xD9B8,0x825B,0x825C,0x825D,0x825E,0x825F,0xCBD7, -0xB7FD,0x8260,0xD9B5,0x8261,0xD9B7,0xB1A3,0xD3E1,0xD9B9, -0x8262,0xD0C5,0x8263,0xD9B6,0x8264,0x8265,0xD9B1,0x8266, -0xD9B2,0xC1A9,0xD9B3,0x8267,0x8268,0xBCF3,0xD0DE,0xB8A9, -0x8269,0xBEE3,0x826A,0xD9BD,0x826B,0x826C,0x826D,0x826E, -0xD9BA,0x826F,0xB0B3,0x8270,0x8271,0x8272,0xD9C2,0x8273, -0x8274,0x8275,0x8276,0x8277,0x8278,0x8279,0x827A,0x827B, -0x827C,0x827D,0x827E,0x8280,0xD9C4,0xB1B6,0x8281,0xD9BF, -0x8282,0x8283,0xB5B9,0x8284,0xBEF3,0x8285,0x8286,0x8287, -0xCCC8,0xBAF2,0xD2D0,0x8288,0xD9C3,0x8289,0x828A,0xBDE8, -0x828B,0xB3AB,0x828C,0x828D,0x828E,0xD9C5,0xBEEB,0x828F, -0xD9C6,0xD9BB,0xC4DF,0x8290,0xD9BE,0xD9C1,0xD9C0,0x8291, -0x8292,0x8293,0x8294,0x8295,0x8296,0x8297,0x8298,0x8299, -0x829A,0x829B,0xD5AE,0x829C,0xD6B5,0x829D,0xC7E3,0x829E, -0x829F,0x82A0,0x82A1,0xD9C8,0x82A2,0x82A3,0x82A4,0xBCD9, -0xD9CA,0x82A5,0x82A6,0x82A7,0xD9BC,0x82A8,0xD9CB,0xC6AB, -0x82A9,0x82AA,0x82AB,0x82AC,0x82AD,0xD9C9,0x82AE,0x82AF, -0x82B0,0x82B1,0xD7F6,0x82B2,0xCDA3,0x82B3,0x82B4,0x82B5, -0x82B6,0x82B7,0x82B8,0x82B9,0x82BA,0xBDA1,0x82BB,0x82BC, -0x82BD,0x82BE,0x82BF,0x82C0,0xD9CC,0x82C1,0x82C2,0x82C3, -0x82C4,0x82C5,0x82C6,0x82C7,0x82C8,0x82C9,0xC5BC,0xCDB5, -0x82CA,0x82CB,0x82CC,0xD9CD,0x82CD,0x82CE,0xD9C7,0xB3A5, -0xBFFE,0x82CF,0x82D0,0x82D1,0x82D2,0xB8B5,0x82D3,0x82D4, -0xC0FC,0x82D5,0x82D6,0x82D7,0x82D8,0xB0F8,0x82D9,0x82DA, -0x82DB,0x82DC,0x82DD,0x82DE,0x82DF,0x82E0,0x82E1,0x82E2, -0x82E3,0x82E4,0x82E5,0x82E6,0x82E7,0x82E8,0x82E9,0x82EA, -0x82EB,0x82EC,0x82ED,0xB4F6,0x82EE,0xD9CE,0x82EF,0xD9CF, -0xB4A2,0xD9D0,0x82F0,0x82F1,0xB4DF,0x82F2,0x82F3,0x82F4, -0x82F5,0x82F6,0xB0C1,0x82F7,0x82F8,0x82F9,0x82FA,0x82FB, -0x82FC,0x82FD,0xD9D1,0xC9B5,0x82FE,0x8340,0x8341,0x8342, -0x8343,0x8344,0x8345,0x8346,0x8347,0x8348,0x8349,0x834A, -0x834B,0x834C,0x834D,0x834E,0x834F,0x8350,0x8351,0xCFF1, -0x8352,0x8353,0x8354,0x8355,0x8356,0x8357,0xD9D2,0x8358, -0x8359,0x835A,0xC1C5,0x835B,0x835C,0x835D,0x835E,0x835F, -0x8360,0x8361,0x8362,0x8363,0x8364,0x8365,0xD9D6,0xC9AE, -0x8366,0x8367,0x8368,0x8369,0xD9D5,0xD9D4,0xD9D7,0x836A, -0x836B,0x836C,0x836D,0xCBDB,0x836E,0xBDA9,0x836F,0x8370, -0x8371,0x8372,0x8373,0xC6A7,0x8374,0x8375,0x8376,0x8377, -0x8378,0x8379,0x837A,0x837B,0x837C,0x837D,0xD9D3,0xD9D8, -0x837E,0x8380,0x8381,0xD9D9,0x8382,0x8383,0x8384,0x8385, -0x8386,0x8387,0xC8E5,0x8388,0x8389,0x838A,0x838B,0x838C, -0x838D,0x838E,0x838F,0x8390,0x8391,0x8392,0x8393,0x8394, -0x8395,0xC0DC,0x8396,0x8397,0x8398,0x8399,0x839A,0x839B, -0x839C,0x839D,0x839E,0x839F,0x83A0,0x83A1,0x83A2,0x83A3, -0x83A4,0x83A5,0x83A6,0x83A7,0x83A8,0x83A9,0x83AA,0x83AB, -0x83AC,0x83AD,0x83AE,0x83AF,0x83B0,0x83B1,0x83B2,0xB6F9, -0xD8A3,0xD4CA,0x83B3,0xD4AA,0xD0D6,0xB3E4,0xD5D7,0x83B4, -0xCFC8,0xB9E2,0x83B5,0xBFCB,0x83B6,0xC3E2,0x83B7,0x83B8, -0x83B9,0xB6D2,0x83BA,0x83BB,0xCDC3,0xD9EE,0xD9F0,0x83BC, -0x83BD,0x83BE,0xB5B3,0x83BF,0xB6B5,0x83C0,0x83C1,0x83C2, -0x83C3,0x83C4,0xBEA4,0x83C5,0x83C6,0xC8EB,0x83C7,0x83C8, -0xC8AB,0x83C9,0x83CA,0xB0CB,0xB9AB,0xC1F9,0xD9E2,0x83CB, -0xC0BC,0xB9B2,0x83CC,0xB9D8,0xD0CB,0xB1F8,0xC6E4,0xBEDF, -0xB5E4,0xD7C8,0x83CD,0xD1F8,0xBCE6,0xCADE,0x83CE,0x83CF, -0xBCBD,0xD9E6,0xD8E7,0x83D0,0x83D1,0xC4DA,0x83D2,0x83D3, -0xB8D4,0xC8BD,0x83D4,0x83D5,0xB2E1,0xD4D9,0x83D6,0x83D7, -0x83D8,0x83D9,0xC3B0,0x83DA,0x83DB,0xC3E1,0xDAA2,0xC8DF, -0x83DC,0xD0B4,0x83DD,0xBEFC,0xC5A9,0x83DE,0x83DF,0x83E0, -0xB9DA,0x83E1,0xDAA3,0x83E2,0xD4A9,0xDAA4,0x83E3,0x83E4, -0x83E5,0x83E6,0x83E7,0xD9FB,0xB6AC,0x83E8,0x83E9,0xB7EB, -0xB1F9,0xD9FC,0xB3E5,0xBEF6,0x83EA,0xBFF6,0xD2B1,0xC0E4, -0x83EB,0x83EC,0x83ED,0xB6B3,0xD9FE,0xD9FD,0x83EE,0x83EF, -0xBEBB,0x83F0,0x83F1,0x83F2,0xC6E0,0x83F3,0xD7BC,0xDAA1, -0x83F4,0xC1B9,0x83F5,0xB5F2,0xC1E8,0x83F6,0x83F7,0xBCF5, -0x83F8,0xB4D5,0x83F9,0x83FA,0x83FB,0x83FC,0x83FD,0x83FE, -0x8440,0x8441,0x8442,0xC1DD,0x8443,0xC4FD,0x8444,0x8445, -0xBCB8,0xB7B2,0x8446,0x8447,0xB7EF,0x8448,0x8449,0x844A, -0x844B,0x844C,0x844D,0xD9EC,0x844E,0xC6BE,0x844F,0xBFAD, -0xBBCB,0x8450,0x8451,0xB5CA,0x8452,0xDBC9,0xD0D7,0x8453, -0xCDB9,0xB0BC,0xB3F6,0xBBF7,0xDBCA,0xBAAF,0x8454,0xD4E4, -0xB5B6,0xB5F3,0xD8D6,0xC8D0,0x8455,0x8456,0xB7D6,0xC7D0, -0xD8D7,0x8457,0xBFAF,0x8458,0x8459,0xDBBB,0xD8D8,0x845A, -0x845B,0xD0CC,0xBBAE,0x845C,0x845D,0x845E,0xEBBE,0xC1D0, -0xC1F5,0xD4F2,0xB8D5,0xB4B4,0x845F,0xB3F5,0x8460,0x8461, -0xC9BE,0x8462,0x8463,0x8464,0xC5D0,0x8465,0x8466,0x8467, -0xC5D9,0xC0FB,0x8468,0xB1F0,0x8469,0xD8D9,0xB9CE,0x846A, -0xB5BD,0x846B,0x846C,0xD8DA,0x846D,0x846E,0xD6C6,0xCBA2, -0xC8AF,0xC9B2,0xB4CC,0xBFCC,0x846F,0xB9F4,0x8470,0xD8DB, -0xD8DC,0xB6E7,0xBCC1,0xCCEA,0x8471,0x8472,0x8473,0x8474, -0x8475,0x8476,0xCFF7,0x8477,0xD8DD,0xC7B0,0x8478,0x8479, -0xB9D0,0xBDA3,0x847A,0x847B,0xCCDE,0x847C,0xC6CA,0x847D, -0x847E,0x8480,0x8481,0x8482,0xD8E0,0x8483,0xD8DE,0x8484, -0x8485,0xD8DF,0x8486,0x8487,0x8488,0xB0FE,0x8489,0xBEE7, -0x848A,0xCAA3,0xBCF4,0x848B,0x848C,0x848D,0x848E,0xB8B1, -0x848F,0x8490,0xB8EE,0x8491,0x8492,0x8493,0x8494,0x8495, -0x8496,0x8497,0x8498,0x8499,0x849A,0xD8E2,0x849B,0xBDCB, -0x849C,0xD8E4,0xD8E3,0x849D,0x849E,0x849F,0x84A0,0x84A1, -0xC5FC,0x84A2,0x84A3,0x84A4,0x84A5,0x84A6,0x84A7,0x84A8, -0xD8E5,0x84A9,0x84AA,0xD8E6,0x84AB,0x84AC,0x84AD,0x84AE, -0x84AF,0x84B0,0x84B1,0xC1A6,0x84B2,0xC8B0,0xB0EC,0xB9A6, -0xBCD3,0xCEF1,0xDBBD,0xC1D3,0x84B3,0x84B4,0x84B5,0x84B6, -0xB6AF,0xD6FA,0xC5AC,0xBDD9,0xDBBE,0xDBBF,0x84B7,0x84B8, -0x84B9,0xC0F8,0xBEA2,0xC0CD,0x84BA,0x84BB,0x84BC,0x84BD, -0x84BE,0x84BF,0x84C0,0x84C1,0x84C2,0x84C3,0xDBC0,0xCAC6, -0x84C4,0x84C5,0x84C6,0xB2AA,0x84C7,0x84C8,0x84C9,0xD3C2, -0x84CA,0xC3E3,0x84CB,0xD1AB,0x84CC,0x84CD,0x84CE,0x84CF, -0xDBC2,0x84D0,0xC0D5,0x84D1,0x84D2,0x84D3,0xDBC3,0x84D4, -0xBFB1,0x84D5,0x84D6,0x84D7,0x84D8,0x84D9,0x84DA,0xC4BC, -0x84DB,0x84DC,0x84DD,0x84DE,0xC7DA,0x84DF,0x84E0,0x84E1, -0x84E2,0x84E3,0x84E4,0x84E5,0x84E6,0x84E7,0x84E8,0x84E9, -0xDBC4,0x84EA,0x84EB,0x84EC,0x84ED,0x84EE,0x84EF,0x84F0, -0x84F1,0xD9E8,0xC9D7,0x84F2,0x84F3,0x84F4,0xB9B4,0xCEF0, -0xD4C8,0x84F5,0x84F6,0x84F7,0x84F8,0xB0FC,0xB4D2,0x84F9, -0xD0D9,0x84FA,0x84FB,0x84FC,0x84FD,0xD9E9,0x84FE,0xDECB, -0xD9EB,0x8540,0x8541,0x8542,0x8543,0xD8B0,0xBBAF,0xB1B1, -0x8544,0xB3D7,0xD8CE,0x8545,0x8546,0xD4D1,0x8547,0x8548, -0xBDB3,0xBFEF,0x8549,0xCFBB,0x854A,0x854B,0xD8D0,0x854C, -0x854D,0x854E,0xB7CB,0x854F,0x8550,0x8551,0xD8D1,0x8552, -0x8553,0x8554,0x8555,0x8556,0x8557,0x8558,0x8559,0x855A, -0x855B,0xC6A5,0xC7F8,0xD2BD,0x855C,0x855D,0xD8D2,0xC4E4, -0x855E,0xCAAE,0x855F,0xC7A7,0x8560,0xD8A6,0x8561,0xC9FD, -0xCEE7,0xBBDC,0xB0EB,0x8562,0x8563,0x8564,0xBBAA,0xD0AD, -0x8565,0xB1B0,0xD7E4,0xD7BF,0x8566,0xB5A5,0xC2F4,0xC4CF, -0x8567,0x8568,0xB2A9,0x8569,0xB2B7,0x856A,0xB1E5,0xDFB2, -0xD5BC,0xBFA8,0xC2AC,0xD8D5,0xC2B1,0x856B,0xD8D4,0xCED4, -0x856C,0xDAE0,0x856D,0xCEC0,0x856E,0x856F,0xD8B4,0xC3AE, -0xD3A1,0xCEA3,0x8570,0xBCB4,0xC8B4,0xC2D1,0x8571,0xBEED, -0xD0B6,0x8572,0xDAE1,0x8573,0x8574,0x8575,0x8576,0xC7E4, -0x8577,0x8578,0xB3A7,0x8579,0xB6F2,0xCCFC,0xC0FA,0x857A, -0x857B,0xC0F7,0x857C,0xD1B9,0xD1E1,0xD8C7,0x857D,0x857E, -0x8580,0x8581,0x8582,0x8583,0x8584,0xB2DE,0x8585,0x8586, -0xC0E5,0x8587,0xBAF1,0x8588,0x8589,0xD8C8,0x858A,0xD4AD, -0x858B,0x858C,0xCFE1,0xD8C9,0x858D,0xD8CA,0xCFC3,0x858E, -0xB3F8,0xBEC7,0x858F,0x8590,0x8591,0x8592,0xD8CB,0x8593, -0x8594,0x8595,0x8596,0x8597,0x8598,0x8599,0xDBCC,0x859A, -0x859B,0x859C,0x859D,0xC8A5,0x859E,0x859F,0x85A0,0xCFD8, -0x85A1,0xC8FE,0xB2CE,0x85A2,0x85A3,0x85A4,0x85A5,0x85A6, -0xD3D6,0xB2E6,0xBCB0,0xD3D1,0xCBAB,0xB7B4,0x85A7,0x85A8, -0x85A9,0xB7A2,0x85AA,0x85AB,0xCAE5,0x85AC,0xC8A1,0xCADC, -0xB1E4,0xD0F0,0x85AD,0xC5D1,0x85AE,0x85AF,0x85B0,0xDBC5, -0xB5FE,0x85B1,0x85B2,0xBFDA,0xB9C5,0xBEE4,0xC1ED,0x85B3, -0xDFB6,0xDFB5,0xD6BB,0xBDD0,0xD5D9,0xB0C8,0xB6A3,0xBFC9, -0xCCA8,0xDFB3,0xCAB7,0xD3D2,0x85B4,0xD8CF,0xD2B6,0xBAC5, -0xCBBE,0xCCBE,0x85B5,0xDFB7,0xB5F0,0xDFB4,0x85B6,0x85B7, -0x85B8,0xD3F5,0x85B9,0xB3D4,0xB8F7,0x85BA,0xDFBA,0x85BB, -0xBACF,0xBCAA,0xB5F5,0x85BC,0xCDAC,0xC3FB,0xBAF3,0xC0F4, -0xCDC2,0xCFF2,0xDFB8,0xCFC5,0x85BD,0xC2C0,0xDFB9,0xC2F0, -0x85BE,0x85BF,0x85C0,0xBEFD,0x85C1,0xC1DF,0xCDCC,0xD2F7, -0xB7CD,0xDFC1,0x85C2,0xDFC4,0x85C3,0x85C4,0xB7F1,0xB0C9, -0xB6D6,0xB7D4,0x85C5,0xBAAC,0xCCFD,0xBFD4,0xCBB1,0xC6F4, -0x85C6,0xD6A8,0xDFC5,0x85C7,0xCEE2,0xB3B3,0x85C8,0x85C9, -0xCEFC,0xB4B5,0x85CA,0xCEC7,0xBAF0,0x85CB,0xCEE1,0x85CC, -0xD1BD,0x85CD,0x85CE,0xDFC0,0x85CF,0x85D0,0xB4F4,0x85D1, -0xB3CA,0x85D2,0xB8E6,0xDFBB,0x85D3,0x85D4,0x85D5,0x85D6, -0xC4C5,0x85D7,0xDFBC,0xDFBD,0xDFBE,0xC5BB,0xDFBF,0xDFC2, -0xD4B1,0xDFC3,0x85D8,0xC7BA,0xCED8,0x85D9,0x85DA,0x85DB, -0x85DC,0x85DD,0xC4D8,0x85DE,0xDFCA,0x85DF,0xDFCF,0x85E0, -0xD6DC,0x85E1,0x85E2,0x85E3,0x85E4,0x85E5,0x85E6,0x85E7, -0x85E8,0xDFC9,0xDFDA,0xCEB6,0x85E9,0xBAC7,0xDFCE,0xDFC8, -0xC5DE,0x85EA,0x85EB,0xC9EB,0xBAF4,0xC3FC,0x85EC,0x85ED, -0xBED7,0x85EE,0xDFC6,0x85EF,0xDFCD,0x85F0,0xC5D8,0x85F1, -0x85F2,0x85F3,0x85F4,0xD5A6,0xBACD,0x85F5,0xBECC,0xD3BD, -0xB8C0,0x85F6,0xD6E4,0x85F7,0xDFC7,0xB9BE,0xBFA7,0x85F8, -0x85F9,0xC1FC,0xDFCB,0xDFCC,0x85FA,0xDFD0,0x85FB,0x85FC, -0x85FD,0x85FE,0x8640,0xDFDB,0xDFE5,0x8641,0xDFD7,0xDFD6, -0xD7C9,0xDFE3,0xDFE4,0xE5EB,0xD2A7,0xDFD2,0x8642,0xBFA9, -0x8643,0xD4DB,0x8644,0xBFC8,0xDFD4,0x8645,0x8646,0x8647, -0xCFCC,0x8648,0x8649,0xDFDD,0x864A,0xD1CA,0x864B,0xDFDE, -0xB0A7,0xC6B7,0xDFD3,0x864C,0xBAE5,0x864D,0xB6DF,0xCDDB, -0xB9FE,0xD4D5,0x864E,0x864F,0xDFDF,0xCFEC,0xB0A5,0xDFE7, -0xDFD1,0xD1C6,0xDFD5,0xDFD8,0xDFD9,0xDFDC,0x8650,0xBBA9, -0x8651,0xDFE0,0xDFE1,0x8652,0xDFE2,0xDFE6,0xDFE8,0xD3B4, -0x8653,0x8654,0x8655,0x8656,0x8657,0xB8E7,0xC5B6,0xDFEA, -0xC9DA,0xC1A8,0xC4C4,0x8658,0x8659,0xBFDE,0xCFF8,0x865A, -0x865B,0x865C,0xD5DC,0xDFEE,0x865D,0x865E,0x865F,0x8660, -0x8661,0x8662,0xB2B8,0x8663,0xBADF,0xDFEC,0x8664,0xDBC1, -0x8665,0xD1E4,0x8666,0x8667,0x8668,0x8669,0xCBF4,0xB4BD, -0x866A,0xB0A6,0x866B,0x866C,0x866D,0x866E,0x866F,0xDFF1, -0xCCC6,0xDFF2,0x8670,0x8671,0xDFED,0x8672,0x8673,0x8674, -0x8675,0x8676,0x8677,0xDFE9,0x8678,0x8679,0x867A,0x867B, -0xDFEB,0x867C,0xDFEF,0xDFF0,0xBBBD,0x867D,0x867E,0xDFF3, -0x8680,0x8681,0xDFF4,0x8682,0xBBA3,0x8683,0xCADB,0xCEA8, -0xE0A7,0xB3AA,0x8684,0xE0A6,0x8685,0x8686,0x8687,0xE0A1, -0x8688,0x8689,0x868A,0x868B,0xDFFE,0x868C,0xCDD9,0xDFFC, -0x868D,0xDFFA,0x868E,0xBFD0,0xD7C4,0x868F,0xC9CC,0x8690, -0x8691,0xDFF8,0xB0A1,0x8692,0x8693,0x8694,0x8695,0x8696, -0xDFFD,0x8697,0x8698,0x8699,0x869A,0xDFFB,0xE0A2,0x869B, -0x869C,0x869D,0x869E,0x869F,0xE0A8,0x86A0,0x86A1,0x86A2, -0x86A3,0xB7C8,0x86A4,0x86A5,0xC6A1,0xC9B6,0xC0B2,0xDFF5, -0x86A6,0x86A7,0xC5BE,0x86A8,0xD8C4,0xDFF9,0xC4F6,0x86A9, -0x86AA,0x86AB,0x86AC,0x86AD,0x86AE,0xE0A3,0xE0A4,0xE0A5, -0xD0A5,0x86AF,0x86B0,0xE0B4,0xCCE4,0x86B1,0xE0B1,0x86B2, -0xBFA6,0xE0AF,0xCEB9,0xE0AB,0xC9C6,0x86B3,0x86B4,0xC0AE, -0xE0AE,0xBAED,0xBAB0,0xE0A9,0x86B5,0x86B6,0x86B7,0xDFF6, -0x86B8,0xE0B3,0x86B9,0x86BA,0xE0B8,0x86BB,0x86BC,0x86BD, -0xB4AD,0xE0B9,0x86BE,0x86BF,0xCFB2,0xBAC8,0x86C0,0xE0B0, -0x86C1,0x86C2,0x86C3,0x86C4,0x86C5,0x86C6,0x86C7,0xD0FA, -0x86C8,0x86C9,0x86CA,0x86CB,0x86CC,0x86CD,0x86CE,0x86CF, -0x86D0,0xE0AC,0x86D1,0xD4FB,0x86D2,0xDFF7,0x86D3,0xC5E7, -0x86D4,0xE0AD,0x86D5,0xD3F7,0x86D6,0xE0B6,0xE0B7,0x86D7, -0x86D8,0x86D9,0x86DA,0x86DB,0xE0C4,0xD0E1,0x86DC,0x86DD, -0x86DE,0xE0BC,0x86DF,0x86E0,0xE0C9,0xE0CA,0x86E1,0x86E2, -0x86E3,0xE0BE,0xE0AA,0xC9A4,0xE0C1,0x86E4,0xE0B2,0x86E5, -0x86E6,0x86E7,0x86E8,0x86E9,0xCAC8,0xE0C3,0x86EA,0xE0B5, -0x86EB,0xCECB,0x86EC,0xCBC3,0xE0CD,0xE0C6,0xE0C2,0x86ED, -0xE0CB,0x86EE,0xE0BA,0xE0BF,0xE0C0,0x86EF,0x86F0,0xE0C5, -0x86F1,0x86F2,0xE0C7,0xE0C8,0x86F3,0xE0CC,0x86F4,0xE0BB, -0x86F5,0x86F6,0x86F7,0x86F8,0x86F9,0xCBD4,0xE0D5,0x86FA, -0xE0D6,0xE0D2,0x86FB,0x86FC,0x86FD,0x86FE,0x8740,0x8741, -0xE0D0,0xBCCE,0x8742,0x8743,0xE0D1,0x8744,0xB8C2,0xD8C5, -0x8745,0x8746,0x8747,0x8748,0x8749,0x874A,0x874B,0x874C, -0xD0EA,0x874D,0x874E,0xC2EF,0x874F,0x8750,0xE0CF,0xE0BD, -0x8751,0x8752,0x8753,0xE0D4,0xE0D3,0x8754,0x8755,0xE0D7, -0x8756,0x8757,0x8758,0x8759,0xE0DC,0xE0D8,0x875A,0x875B, -0x875C,0xD6F6,0xB3B0,0x875D,0xD7EC,0x875E,0xCBBB,0x875F, -0x8760,0xE0DA,0x8761,0xCEFB,0x8762,0x8763,0x8764,0xBAD9, -0x8765,0x8766,0x8767,0x8768,0x8769,0x876A,0x876B,0x876C, -0x876D,0x876E,0x876F,0x8770,0xE0E1,0xE0DD,0xD2AD,0x8771, -0x8772,0x8773,0x8774,0x8775,0xE0E2,0x8776,0x8777,0xE0DB, -0xE0D9,0xE0DF,0x8778,0x8779,0xE0E0,0x877A,0x877B,0x877C, -0x877D,0x877E,0xE0DE,0x8780,0xE0E4,0x8781,0x8782,0x8783, -0xC6F7,0xD8AC,0xD4EB,0xE0E6,0xCAC9,0x8784,0x8785,0x8786, -0x8787,0xE0E5,0x8788,0x8789,0x878A,0x878B,0xB8C1,0x878C, -0x878D,0x878E,0x878F,0xE0E7,0xE0E8,0x8790,0x8791,0x8792, -0x8793,0x8794,0x8795,0x8796,0x8797,0xE0E9,0xE0E3,0x8798, -0x8799,0x879A,0x879B,0x879C,0x879D,0x879E,0xBABF,0xCCE7, -0x879F,0x87A0,0x87A1,0xE0EA,0x87A2,0x87A3,0x87A4,0x87A5, -0x87A6,0x87A7,0x87A8,0x87A9,0x87AA,0x87AB,0x87AC,0x87AD, -0x87AE,0x87AF,0x87B0,0xCFF9,0x87B1,0x87B2,0x87B3,0x87B4, -0x87B5,0x87B6,0x87B7,0x87B8,0x87B9,0x87BA,0x87BB,0xE0EB, -0x87BC,0x87BD,0x87BE,0x87BF,0x87C0,0x87C1,0x87C2,0xC8C2, -0x87C3,0x87C4,0x87C5,0x87C6,0xBDC0,0x87C7,0x87C8,0x87C9, -0x87CA,0x87CB,0x87CC,0x87CD,0x87CE,0x87CF,0x87D0,0x87D1, -0x87D2,0x87D3,0xC4D2,0x87D4,0x87D5,0x87D6,0x87D7,0x87D8, -0x87D9,0x87DA,0x87DB,0x87DC,0xE0EC,0x87DD,0x87DE,0xE0ED, -0x87DF,0x87E0,0xC7F4,0xCBC4,0x87E1,0xE0EE,0xBBD8,0xD8B6, -0xD2F2,0xE0EF,0xCDC5,0x87E2,0xB6DA,0x87E3,0x87E4,0x87E5, -0x87E6,0x87E7,0x87E8,0xE0F1,0x87E9,0xD4B0,0x87EA,0x87EB, -0xC0A7,0xB4D1,0x87EC,0x87ED,0xCEA7,0xE0F0,0x87EE,0x87EF, -0x87F0,0xE0F2,0xB9CC,0x87F1,0x87F2,0xB9FA,0xCDBC,0xE0F3, -0x87F3,0x87F4,0x87F5,0xC6D4,0xE0F4,0x87F6,0xD4B2,0x87F7, -0xC8A6,0xE0F6,0xE0F5,0x87F8,0x87F9,0x87FA,0x87FB,0x87FC, -0x87FD,0x87FE,0x8840,0x8841,0x8842,0x8843,0x8844,0x8845, -0x8846,0x8847,0x8848,0x8849,0xE0F7,0x884A,0x884B,0xCDC1, -0x884C,0x884D,0x884E,0xCAA5,0x884F,0x8850,0x8851,0x8852, -0xD4DA,0xDBD7,0xDBD9,0x8853,0xDBD8,0xB9E7,0xDBDC,0xDBDD, -0xB5D8,0x8854,0x8855,0xDBDA,0x8856,0x8857,0x8858,0x8859, -0x885A,0xDBDB,0xB3A1,0xDBDF,0x885B,0x885C,0xBBF8,0x885D, -0xD6B7,0x885E,0xDBE0,0x885F,0x8860,0x8861,0x8862,0xBEF9, -0x8863,0x8864,0xB7BB,0x8865,0xDBD0,0xCCAE,0xBFB2,0xBBB5, -0xD7F8,0xBFD3,0x8866,0x8867,0x8868,0x8869,0x886A,0xBFE9, -0x886B,0x886C,0xBCE1,0xCCB3,0xDBDE,0xB0D3,0xCEEB,0xB7D8, -0xD7B9,0xC6C2,0x886D,0x886E,0xC0A4,0x886F,0xCCB9,0x8870, -0xDBE7,0xDBE1,0xC6BA,0xDBE3,0x8871,0xDBE8,0x8872,0xC5F7, -0x8873,0x8874,0x8875,0xDBEA,0x8876,0x8877,0xDBE9,0xBFC0, -0x8878,0x8879,0x887A,0xDBE6,0xDBE5,0x887B,0x887C,0x887D, -0x887E,0x8880,0xB4B9,0xC0AC,0xC2A2,0xDBE2,0xDBE4,0x8881, -0x8882,0x8883,0x8884,0xD0CD,0xDBED,0x8885,0x8886,0x8887, -0x8888,0x8889,0xC0DD,0xDBF2,0x888A,0x888B,0x888C,0x888D, -0x888E,0x888F,0x8890,0xB6E2,0x8891,0x8892,0x8893,0x8894, -0xDBF3,0xDBD2,0xB9B8,0xD4AB,0xDBEC,0x8895,0xBFD1,0xDBF0, -0x8896,0xDBD1,0x8897,0xB5E6,0x8898,0xDBEB,0xBFE5,0x8899, -0x889A,0x889B,0xDBEE,0x889C,0xDBF1,0x889D,0x889E,0x889F, -0xDBF9,0x88A0,0x88A1,0x88A2,0x88A3,0x88A4,0x88A5,0x88A6, -0x88A7,0x88A8,0xB9A1,0xB0A3,0x88A9,0x88AA,0x88AB,0x88AC, -0x88AD,0x88AE,0x88AF,0xC2F1,0x88B0,0x88B1,0xB3C7,0xDBEF, -0x88B2,0x88B3,0xDBF8,0x88B4,0xC6D2,0xDBF4,0x88B5,0x88B6, -0xDBF5,0xDBF7,0xDBF6,0x88B7,0x88B8,0xDBFE,0x88B9,0xD3F2, -0xB2BA,0x88BA,0x88BB,0x88BC,0xDBFD,0x88BD,0x88BE,0x88BF, -0x88C0,0x88C1,0x88C2,0x88C3,0x88C4,0xDCA4,0x88C5,0xDBFB, -0x88C6,0x88C7,0x88C8,0x88C9,0xDBFA,0x88CA,0x88CB,0x88CC, -0xDBFC,0xC5E0,0xBBF9,0x88CD,0x88CE,0xDCA3,0x88CF,0x88D0, -0xDCA5,0x88D1,0xCCC3,0x88D2,0x88D3,0x88D4,0xB6D1,0xDDC0, -0x88D5,0x88D6,0x88D7,0xDCA1,0x88D8,0xDCA2,0x88D9,0x88DA, -0x88DB,0xC7B5,0x88DC,0x88DD,0x88DE,0xB6E9,0x88DF,0x88E0, -0x88E1,0xDCA7,0x88E2,0x88E3,0x88E4,0x88E5,0xDCA6,0x88E6, -0xDCA9,0xB1A4,0x88E7,0x88E8,0xB5CC,0x88E9,0x88EA,0x88EB, -0x88EC,0x88ED,0xBFB0,0x88EE,0x88EF,0x88F0,0x88F1,0x88F2, -0xD1DF,0x88F3,0x88F4,0x88F5,0x88F6,0xB6C2,0x88F7,0x88F8, -0x88F9,0x88FA,0x88FB,0x88FC,0x88FD,0x88FE,0x8940,0x8941, -0x8942,0x8943,0x8944,0x8945,0xDCA8,0x8946,0x8947,0x8948, -0x8949,0x894A,0x894B,0x894C,0xCBFA,0xEBF3,0x894D,0x894E, -0x894F,0xCBDC,0x8950,0x8951,0xCBFE,0x8952,0x8953,0x8954, -0xCCC1,0x8955,0x8956,0x8957,0x8958,0x8959,0xC8FB,0x895A, -0x895B,0x895C,0x895D,0x895E,0x895F,0xDCAA,0x8960,0x8961, -0x8962,0x8963,0x8964,0xCCEE,0xDCAB,0x8965,0x8966,0x8967, -0x8968,0x8969,0x896A,0x896B,0x896C,0x896D,0x896E,0x896F, -0x8970,0x8971,0x8972,0x8973,0x8974,0x8975,0xDBD3,0x8976, -0xDCAF,0xDCAC,0x8977,0xBEB3,0x8978,0xCAFB,0x8979,0x897A, -0x897B,0xDCAD,0x897C,0x897D,0x897E,0x8980,0x8981,0x8982, -0x8983,0x8984,0xC9CA,0xC4B9,0x8985,0x8986,0x8987,0x8988, -0x8989,0xC7BD,0xDCAE,0x898A,0x898B,0x898C,0xD4F6,0xD0E6, -0x898D,0x898E,0x898F,0x8990,0x8991,0x8992,0x8993,0x8994, -0xC4AB,0xB6D5,0x8995,0x8996,0x8997,0x8998,0x8999,0x899A, -0x899B,0x899C,0x899D,0x899E,0x899F,0x89A0,0x89A1,0x89A2, -0x89A3,0x89A4,0x89A5,0x89A6,0xDBD4,0x89A7,0x89A8,0x89A9, -0x89AA,0xB1DA,0x89AB,0x89AC,0x89AD,0xDBD5,0x89AE,0x89AF, -0x89B0,0x89B1,0x89B2,0x89B3,0x89B4,0x89B5,0x89B6,0x89B7, -0x89B8,0xDBD6,0x89B9,0x89BA,0x89BB,0xBABE,0x89BC,0x89BD, -0x89BE,0x89BF,0x89C0,0x89C1,0x89C2,0x89C3,0x89C4,0x89C5, -0x89C6,0x89C7,0x89C8,0x89C9,0xC8C0,0x89CA,0x89CB,0x89CC, -0x89CD,0x89CE,0x89CF,0xCABF,0xC8C9,0x89D0,0xD7B3,0x89D1, -0xC9F9,0x89D2,0x89D3,0xBFC7,0x89D4,0x89D5,0xBAF8,0x89D6, -0x89D7,0xD2BC,0x89D8,0x89D9,0x89DA,0x89DB,0x89DC,0x89DD, -0x89DE,0x89DF,0xE2BA,0x89E0,0xB4A6,0x89E1,0x89E2,0xB1B8, -0x89E3,0x89E4,0x89E5,0x89E6,0x89E7,0xB8B4,0x89E8,0xCFC4, -0x89E9,0x89EA,0x89EB,0x89EC,0xD9E7,0xCFA6,0xCDE2,0x89ED, -0x89EE,0xD9ED,0xB6E0,0x89EF,0xD2B9,0x89F0,0x89F1,0xB9BB, -0x89F2,0x89F3,0x89F4,0x89F5,0xE2B9,0xE2B7,0x89F6,0xB4F3, -0x89F7,0xCCEC,0xCCAB,0xB7F2,0x89F8,0xD8B2,0xD1EB,0xBABB, -0x89F9,0xCAA7,0x89FA,0x89FB,0xCDB7,0x89FC,0x89FD,0xD2C4, -0xBFE4,0xBCD0,0xB6E1,0x89FE,0xDEC5,0x8A40,0x8A41,0x8A42, -0x8A43,0xDEC6,0xDBBC,0x8A44,0xD1D9,0x8A45,0x8A46,0xC6E6, -0xC4CE,0xB7EE,0x8A47,0xB7DC,0x8A48,0x8A49,0xBFFC,0xD7E0, -0x8A4A,0xC6F5,0x8A4B,0x8A4C,0xB1BC,0xDEC8,0xBDB1,0xCCD7, -0xDECA,0x8A4D,0xDEC9,0x8A4E,0x8A4F,0x8A50,0x8A51,0x8A52, -0xB5EC,0x8A53,0xC9DD,0x8A54,0x8A55,0xB0C2,0x8A56,0x8A57, -0x8A58,0x8A59,0x8A5A,0x8A5B,0x8A5C,0x8A5D,0x8A5E,0x8A5F, -0x8A60,0x8A61,0x8A62,0xC5AE,0xC5AB,0x8A63,0xC4CC,0x8A64, -0xBCE9,0xCBFD,0x8A65,0x8A66,0x8A67,0xBAC3,0x8A68,0x8A69, -0x8A6A,0xE5F9,0xC8E7,0xE5FA,0xCDFD,0x8A6B,0xD7B1,0xB8BE, -0xC2E8,0x8A6C,0xC8D1,0x8A6D,0x8A6E,0xE5FB,0x8A6F,0x8A70, -0x8A71,0x8A72,0xB6CA,0xBCCB,0x8A73,0x8A74,0xD1FD,0xE6A1, -0x8A75,0xC3EE,0x8A76,0x8A77,0x8A78,0x8A79,0xE6A4,0x8A7A, -0x8A7B,0x8A7C,0x8A7D,0xE5FE,0xE6A5,0xCDD7,0x8A7E,0x8A80, -0xB7C1,0xE5FC,0xE5FD,0xE6A3,0x8A81,0x8A82,0xC4DD,0xE6A8, -0x8A83,0x8A84,0xE6A7,0x8A85,0x8A86,0x8A87,0x8A88,0x8A89, -0x8A8A,0xC3C3,0x8A8B,0xC6DE,0x8A8C,0x8A8D,0xE6AA,0x8A8E, -0x8A8F,0x8A90,0x8A91,0x8A92,0x8A93,0x8A94,0xC4B7,0x8A95, -0x8A96,0x8A97,0xE6A2,0xCABC,0x8A98,0x8A99,0x8A9A,0x8A9B, -0xBDE3,0xB9C3,0xE6A6,0xD0D5,0xCEAF,0x8A9C,0x8A9D,0xE6A9, -0xE6B0,0x8A9E,0xD2A6,0x8A9F,0xBDAA,0xE6AD,0x8AA0,0x8AA1, -0x8AA2,0x8AA3,0x8AA4,0xE6AF,0x8AA5,0xC0D1,0x8AA6,0x8AA7, -0xD2CC,0x8AA8,0x8AA9,0x8AAA,0xBCA7,0x8AAB,0x8AAC,0x8AAD, -0x8AAE,0x8AAF,0x8AB0,0x8AB1,0x8AB2,0x8AB3,0x8AB4,0x8AB5, -0x8AB6,0xE6B1,0x8AB7,0xD2F6,0x8AB8,0x8AB9,0x8ABA,0xD7CB, -0x8ABB,0xCDFE,0x8ABC,0xCDDE,0xC2A6,0xE6AB,0xE6AC,0xBDBF, -0xE6AE,0xE6B3,0x8ABD,0x8ABE,0xE6B2,0x8ABF,0x8AC0,0x8AC1, -0x8AC2,0xE6B6,0x8AC3,0xE6B8,0x8AC4,0x8AC5,0x8AC6,0x8AC7, -0xC4EF,0x8AC8,0x8AC9,0x8ACA,0xC4C8,0x8ACB,0x8ACC,0xBEEA, -0xC9EF,0x8ACD,0x8ACE,0xE6B7,0x8ACF,0xB6F0,0x8AD0,0x8AD1, -0x8AD2,0xC3E4,0x8AD3,0x8AD4,0x8AD5,0x8AD6,0x8AD7,0x8AD8, -0x8AD9,0xD3E9,0xE6B4,0x8ADA,0xE6B5,0x8ADB,0xC8A2,0x8ADC, -0x8ADD,0x8ADE,0x8ADF,0x8AE0,0xE6BD,0x8AE1,0x8AE2,0x8AE3, -0xE6B9,0x8AE4,0x8AE5,0x8AE6,0x8AE7,0x8AE8,0xC6C5,0x8AE9, -0x8AEA,0xCDF1,0xE6BB,0x8AEB,0x8AEC,0x8AED,0x8AEE,0x8AEF, -0x8AF0,0x8AF1,0x8AF2,0x8AF3,0x8AF4,0xE6BC,0x8AF5,0x8AF6, -0x8AF7,0x8AF8,0xBBE9,0x8AF9,0x8AFA,0x8AFB,0x8AFC,0x8AFD, -0x8AFE,0x8B40,0xE6BE,0x8B41,0x8B42,0x8B43,0x8B44,0xE6BA, -0x8B45,0x8B46,0xC0B7,0x8B47,0x8B48,0x8B49,0x8B4A,0x8B4B, -0x8B4C,0x8B4D,0x8B4E,0x8B4F,0xD3A4,0xE6BF,0xC9F4,0xE6C3, -0x8B50,0x8B51,0xE6C4,0x8B52,0x8B53,0x8B54,0x8B55,0xD0F6, -0x8B56,0x8B57,0x8B58,0x8B59,0x8B5A,0x8B5B,0x8B5C,0x8B5D, -0x8B5E,0x8B5F,0x8B60,0x8B61,0x8B62,0x8B63,0x8B64,0x8B65, -0x8B66,0x8B67,0xC3BD,0x8B68,0x8B69,0x8B6A,0x8B6B,0x8B6C, -0x8B6D,0x8B6E,0xC3C4,0xE6C2,0x8B6F,0x8B70,0x8B71,0x8B72, -0x8B73,0x8B74,0x8B75,0x8B76,0x8B77,0x8B78,0x8B79,0x8B7A, -0x8B7B,0x8B7C,0xE6C1,0x8B7D,0x8B7E,0x8B80,0x8B81,0x8B82, -0x8B83,0x8B84,0xE6C7,0xCFB1,0x8B85,0xEBF4,0x8B86,0x8B87, -0xE6CA,0x8B88,0x8B89,0x8B8A,0x8B8B,0x8B8C,0xE6C5,0x8B8D, -0x8B8E,0xBCDE,0xC9A9,0x8B8F,0x8B90,0x8B91,0x8B92,0x8B93, -0x8B94,0xBCB5,0x8B95,0x8B96,0xCFD3,0x8B97,0x8B98,0x8B99, -0x8B9A,0x8B9B,0xE6C8,0x8B9C,0xE6C9,0x8B9D,0xE6CE,0x8B9E, -0xE6D0,0x8B9F,0x8BA0,0x8BA1,0xE6D1,0x8BA2,0x8BA3,0x8BA4, -0xE6CB,0xB5D5,0x8BA5,0xE6CC,0x8BA6,0x8BA7,0xE6CF,0x8BA8, -0x8BA9,0xC4DB,0x8BAA,0xE6C6,0x8BAB,0x8BAC,0x8BAD,0x8BAE, -0x8BAF,0xE6CD,0x8BB0,0x8BB1,0x8BB2,0x8BB3,0x8BB4,0x8BB5, -0x8BB6,0x8BB7,0x8BB8,0x8BB9,0x8BBA,0x8BBB,0x8BBC,0x8BBD, -0x8BBE,0x8BBF,0x8BC0,0x8BC1,0x8BC2,0x8BC3,0x8BC4,0x8BC5, -0x8BC6,0xE6D2,0x8BC7,0x8BC8,0x8BC9,0x8BCA,0x8BCB,0x8BCC, -0x8BCD,0x8BCE,0x8BCF,0x8BD0,0x8BD1,0x8BD2,0xE6D4,0xE6D3, -0x8BD3,0x8BD4,0x8BD5,0x8BD6,0x8BD7,0x8BD8,0x8BD9,0x8BDA, -0x8BDB,0x8BDC,0x8BDD,0x8BDE,0x8BDF,0x8BE0,0x8BE1,0x8BE2, -0x8BE3,0x8BE4,0x8BE5,0x8BE6,0x8BE7,0x8BE8,0x8BE9,0x8BEA, -0x8BEB,0x8BEC,0xE6D5,0x8BED,0xD9F8,0x8BEE,0x8BEF,0xE6D6, -0x8BF0,0x8BF1,0x8BF2,0x8BF3,0x8BF4,0x8BF5,0x8BF6,0x8BF7, -0xE6D7,0x8BF8,0x8BF9,0x8BFA,0x8BFB,0x8BFC,0x8BFD,0x8BFE, -0x8C40,0x8C41,0x8C42,0x8C43,0x8C44,0x8C45,0x8C46,0x8C47, -0xD7D3,0xE6DD,0x8C48,0xE6DE,0xBFD7,0xD4D0,0x8C49,0xD7D6, -0xB4E6,0xCBEF,0xE6DA,0xD8C3,0xD7CE,0xD0A2,0x8C4A,0xC3CF, -0x8C4B,0x8C4C,0xE6DF,0xBCBE,0xB9C2,0xE6DB,0xD1A7,0x8C4D, -0x8C4E,0xBAA2,0xC2CF,0x8C4F,0xD8AB,0x8C50,0x8C51,0x8C52, -0xCAEB,0xE5EE,0x8C53,0xE6DC,0x8C54,0xB7F5,0x8C55,0x8C56, -0x8C57,0x8C58,0xC8E6,0x8C59,0x8C5A,0xC4F5,0x8C5B,0x8C5C, -0xE5B2,0xC4FE,0x8C5D,0xCBFC,0xE5B3,0xD5AC,0x8C5E,0xD3EE, -0xCAD8,0xB0B2,0x8C5F,0xCBCE,0xCDEA,0x8C60,0x8C61,0xBAEA, -0x8C62,0x8C63,0x8C64,0xE5B5,0x8C65,0xE5B4,0x8C66,0xD7DA, -0xB9D9,0xD6E6,0xB6A8,0xCDF0,0xD2CB,0xB1A6,0xCAB5,0x8C67, -0xB3E8,0xC9F3,0xBFCD,0xD0FB,0xCAD2,0xE5B6,0xBBC2,0x8C68, -0x8C69,0x8C6A,0xCFDC,0xB9AC,0x8C6B,0x8C6C,0x8C6D,0x8C6E, -0xD4D7,0x8C6F,0x8C70,0xBAA6,0xD1E7,0xCFFC,0xBCD2,0x8C71, -0xE5B7,0xC8DD,0x8C72,0x8C73,0x8C74,0xBFED,0xB1F6,0xCBDE, -0x8C75,0x8C76,0xBCC5,0x8C77,0xBCC4,0xD2FA,0xC3DC,0xBFDC, -0x8C78,0x8C79,0x8C7A,0x8C7B,0xB8BB,0x8C7C,0x8C7D,0x8C7E, -0xC3C2,0x8C80,0xBAAE,0xD4A2,0x8C81,0x8C82,0x8C83,0x8C84, -0x8C85,0x8C86,0x8C87,0x8C88,0x8C89,0xC7DE,0xC4AF,0xB2EC, -0x8C8A,0xB9D1,0x8C8B,0x8C8C,0xE5BB,0xC1C8,0x8C8D,0x8C8E, -0xD5AF,0x8C8F,0x8C90,0x8C91,0x8C92,0x8C93,0xE5BC,0x8C94, -0xE5BE,0x8C95,0x8C96,0x8C97,0x8C98,0x8C99,0x8C9A,0x8C9B, -0xB4E7,0xB6D4,0xCBC2,0xD1B0,0xB5BC,0x8C9C,0x8C9D,0xCAD9, -0x8C9E,0xB7E2,0x8C9F,0x8CA0,0xC9E4,0x8CA1,0xBDAB,0x8CA2, -0x8CA3,0xCEBE,0xD7F0,0x8CA4,0x8CA5,0x8CA6,0x8CA7,0xD0A1, -0x8CA8,0xC9D9,0x8CA9,0x8CAA,0xB6FB,0xE6D8,0xBCE2,0x8CAB, -0xB3BE,0x8CAC,0xC9D0,0x8CAD,0xE6D9,0xB3A2,0x8CAE,0x8CAF, -0x8CB0,0x8CB1,0xDECC,0x8CB2,0xD3C8,0xDECD,0x8CB3,0xD2A2, -0x8CB4,0x8CB5,0x8CB6,0x8CB7,0xDECE,0x8CB8,0x8CB9,0x8CBA, -0x8CBB,0xBECD,0x8CBC,0x8CBD,0xDECF,0x8CBE,0x8CBF,0x8CC0, -0xCAAC,0xD2FC,0xB3DF,0xE5EA,0xC4E1,0xBEA1,0xCEB2,0xC4F2, -0xBED6,0xC6A8,0xB2E3,0x8CC1,0x8CC2,0xBED3,0x8CC3,0x8CC4, -0xC7FC,0xCCEB,0xBDEC,0xCEDD,0x8CC5,0x8CC6,0xCABA,0xC6C1, -0xE5EC,0xD0BC,0x8CC7,0x8CC8,0x8CC9,0xD5B9,0x8CCA,0x8CCB, -0x8CCC,0xE5ED,0x8CCD,0x8CCE,0x8CCF,0x8CD0,0xCAF4,0x8CD1, -0xCDC0,0xC2C5,0x8CD2,0xE5EF,0x8CD3,0xC2C4,0xE5F0,0x8CD4, -0x8CD5,0x8CD6,0x8CD7,0x8CD8,0x8CD9,0x8CDA,0xE5F8,0xCDCD, -0x8CDB,0xC9BD,0x8CDC,0x8CDD,0x8CDE,0x8CDF,0x8CE0,0x8CE1, -0x8CE2,0xD2D9,0xE1A8,0x8CE3,0x8CE4,0x8CE5,0x8CE6,0xD3EC, -0x8CE7,0xCBEA,0xC6F1,0x8CE8,0x8CE9,0x8CEA,0x8CEB,0x8CEC, -0xE1AC,0x8CED,0x8CEE,0x8CEF,0xE1A7,0xE1A9,0x8CF0,0x8CF1, -0xE1AA,0xE1AF,0x8CF2,0x8CF3,0xB2ED,0x8CF4,0xE1AB,0xB8DA, -0xE1AD,0xE1AE,0xE1B0,0xB5BA,0xE1B1,0x8CF5,0x8CF6,0x8CF7, -0x8CF8,0x8CF9,0xE1B3,0xE1B8,0x8CFA,0x8CFB,0x8CFC,0x8CFD, -0x8CFE,0xD1D2,0x8D40,0xE1B6,0xE1B5,0xC1EB,0x8D41,0x8D42, -0x8D43,0xE1B7,0x8D44,0xD4C0,0x8D45,0xE1B2,0x8D46,0xE1BA, -0xB0B6,0x8D47,0x8D48,0x8D49,0x8D4A,0xE1B4,0x8D4B,0xBFF9, -0x8D4C,0xE1B9,0x8D4D,0x8D4E,0xE1BB,0x8D4F,0x8D50,0x8D51, -0x8D52,0x8D53,0x8D54,0xE1BE,0x8D55,0x8D56,0x8D57,0x8D58, -0x8D59,0x8D5A,0xE1BC,0x8D5B,0x8D5C,0x8D5D,0x8D5E,0x8D5F, -0x8D60,0xD6C5,0x8D61,0x8D62,0x8D63,0x8D64,0x8D65,0x8D66, -0x8D67,0xCFBF,0x8D68,0x8D69,0xE1BD,0xE1BF,0xC2CD,0x8D6A, -0xB6EB,0x8D6B,0xD3F8,0x8D6C,0x8D6D,0xC7CD,0x8D6E,0x8D6F, -0xB7E5,0x8D70,0x8D71,0x8D72,0x8D73,0x8D74,0x8D75,0x8D76, -0x8D77,0x8D78,0x8D79,0xBEFE,0x8D7A,0x8D7B,0x8D7C,0x8D7D, -0x8D7E,0x8D80,0xE1C0,0xE1C1,0x8D81,0x8D82,0xE1C7,0xB3E7, -0x8D83,0x8D84,0x8D85,0x8D86,0x8D87,0x8D88,0xC6E9,0x8D89, -0x8D8A,0x8D8B,0x8D8C,0x8D8D,0xB4DE,0x8D8E,0xD1C2,0x8D8F, -0x8D90,0x8D91,0x8D92,0xE1C8,0x8D93,0x8D94,0xE1C6,0x8D95, -0x8D96,0x8D97,0x8D98,0x8D99,0xE1C5,0x8D9A,0xE1C3,0xE1C2, -0x8D9B,0xB1C0,0x8D9C,0x8D9D,0x8D9E,0xD5B8,0xE1C4,0x8D9F, -0x8DA0,0x8DA1,0x8DA2,0x8DA3,0xE1CB,0x8DA4,0x8DA5,0x8DA6, -0x8DA7,0x8DA8,0x8DA9,0x8DAA,0x8DAB,0xE1CC,0xE1CA,0x8DAC, -0x8DAD,0x8DAE,0x8DAF,0x8DB0,0x8DB1,0x8DB2,0x8DB3,0xEFFA, -0x8DB4,0x8DB5,0xE1D3,0xE1D2,0xC7B6,0x8DB6,0x8DB7,0x8DB8, -0x8DB9,0x8DBA,0x8DBB,0x8DBC,0x8DBD,0x8DBE,0x8DBF,0x8DC0, -0xE1C9,0x8DC1,0x8DC2,0xE1CE,0x8DC3,0xE1D0,0x8DC4,0x8DC5, -0x8DC6,0x8DC7,0x8DC8,0x8DC9,0x8DCA,0x8DCB,0x8DCC,0x8DCD, -0x8DCE,0xE1D4,0x8DCF,0xE1D1,0xE1CD,0x8DD0,0x8DD1,0xE1CF, -0x8DD2,0x8DD3,0x8DD4,0x8DD5,0xE1D5,0x8DD6,0x8DD7,0x8DD8, -0x8DD9,0x8DDA,0x8DDB,0x8DDC,0x8DDD,0x8DDE,0x8DDF,0x8DE0, -0x8DE1,0x8DE2,0xE1D6,0x8DE3,0x8DE4,0x8DE5,0x8DE6,0x8DE7, -0x8DE8,0x8DE9,0x8DEA,0x8DEB,0x8DEC,0x8DED,0x8DEE,0x8DEF, -0x8DF0,0x8DF1,0x8DF2,0x8DF3,0x8DF4,0x8DF5,0x8DF6,0x8DF7, -0x8DF8,0xE1D7,0x8DF9,0x8DFA,0x8DFB,0xE1D8,0x8DFC,0x8DFD, -0x8DFE,0x8E40,0x8E41,0x8E42,0x8E43,0x8E44,0x8E45,0x8E46, -0x8E47,0x8E48,0x8E49,0x8E4A,0x8E4B,0x8E4C,0x8E4D,0x8E4E, -0x8E4F,0x8E50,0x8E51,0x8E52,0x8E53,0x8E54,0x8E55,0xE1DA, -0x8E56,0x8E57,0x8E58,0x8E59,0x8E5A,0x8E5B,0x8E5C,0x8E5D, -0x8E5E,0x8E5F,0x8E60,0x8E61,0x8E62,0xE1DB,0x8E63,0x8E64, -0x8E65,0x8E66,0x8E67,0x8E68,0x8E69,0xCEA1,0x8E6A,0x8E6B, -0x8E6C,0x8E6D,0x8E6E,0x8E6F,0x8E70,0x8E71,0x8E72,0x8E73, -0x8E74,0x8E75,0x8E76,0xE7DD,0x8E77,0xB4A8,0xD6DD,0x8E78, -0x8E79,0xD1B2,0xB3B2,0x8E7A,0x8E7B,0xB9A4,0xD7F3,0xC7C9, -0xBEDE,0xB9AE,0x8E7C,0xCED7,0x8E7D,0x8E7E,0xB2EE,0xDBCF, -0x8E80,0xBCBA,0xD2D1,0xCBC8,0xB0CD,0x8E81,0x8E82,0xCFEF, -0x8E83,0x8E84,0x8E85,0x8E86,0x8E87,0xD9E3,0xBDED,0x8E88, -0x8E89,0xB1D2,0xCAD0,0xB2BC,0x8E8A,0xCBA7,0xB7AB,0x8E8B, -0xCAA6,0x8E8C,0x8E8D,0x8E8E,0xCFA3,0x8E8F,0x8E90,0xE0F8, -0xD5CA,0xE0FB,0x8E91,0x8E92,0xE0FA,0xC5C1,0xCCFB,0x8E93, -0xC1B1,0xE0F9,0xD6E3,0xB2AF,0xD6C4,0xB5DB,0x8E94,0x8E95, -0x8E96,0x8E97,0x8E98,0x8E99,0x8E9A,0x8E9B,0xB4F8,0xD6A1, -0x8E9C,0x8E9D,0x8E9E,0x8E9F,0x8EA0,0xCFAF,0xB0EF,0x8EA1, -0x8EA2,0xE0FC,0x8EA3,0x8EA4,0x8EA5,0x8EA6,0x8EA7,0xE1A1, -0xB3A3,0x8EA8,0x8EA9,0xE0FD,0xE0FE,0xC3B1,0x8EAA,0x8EAB, -0x8EAC,0x8EAD,0xC3DD,0x8EAE,0xE1A2,0xB7F9,0x8EAF,0x8EB0, -0x8EB1,0x8EB2,0x8EB3,0x8EB4,0xBBCF,0x8EB5,0x8EB6,0x8EB7, -0x8EB8,0x8EB9,0x8EBA,0x8EBB,0xE1A3,0xC4BB,0x8EBC,0x8EBD, -0x8EBE,0x8EBF,0x8EC0,0xE1A4,0x8EC1,0x8EC2,0xE1A5,0x8EC3, -0x8EC4,0xE1A6,0xB4B1,0x8EC5,0x8EC6,0x8EC7,0x8EC8,0x8EC9, -0x8ECA,0x8ECB,0x8ECC,0x8ECD,0x8ECE,0x8ECF,0x8ED0,0x8ED1, -0x8ED2,0x8ED3,0xB8C9,0xC6BD,0xC4EA,0x8ED4,0xB2A2,0x8ED5, -0xD0D2,0x8ED6,0xE7DB,0xBBC3,0xD3D7,0xD3C4,0x8ED7,0xB9E3, -0xE2CF,0x8ED8,0x8ED9,0x8EDA,0xD7AF,0x8EDB,0xC7EC,0xB1D3, -0x8EDC,0x8EDD,0xB4B2,0xE2D1,0x8EDE,0x8EDF,0x8EE0,0xD0F2, -0xC2AE,0xE2D0,0x8EE1,0xBFE2,0xD3A6,0xB5D7,0xE2D2,0xB5EA, -0x8EE2,0xC3ED,0xB8FD,0x8EE3,0xB8AE,0x8EE4,0xC5D3,0xB7CF, -0xE2D4,0x8EE5,0x8EE6,0x8EE7,0x8EE8,0xE2D3,0xB6C8,0xD7F9, -0x8EE9,0x8EEA,0x8EEB,0x8EEC,0x8EED,0xCDA5,0x8EEE,0x8EEF, -0x8EF0,0x8EF1,0x8EF2,0xE2D8,0x8EF3,0xE2D6,0xCAFC,0xBFB5, -0xD3B9,0xE2D5,0x8EF4,0x8EF5,0x8EF6,0x8EF7,0xE2D7,0x8EF8, -0x8EF9,0x8EFA,0x8EFB,0x8EFC,0x8EFD,0x8EFE,0x8F40,0x8F41, -0x8F42,0xC1AE,0xC0C8,0x8F43,0x8F44,0x8F45,0x8F46,0x8F47, -0x8F48,0xE2DB,0xE2DA,0xC0AA,0x8F49,0x8F4A,0xC1CE,0x8F4B, -0x8F4C,0x8F4D,0x8F4E,0xE2DC,0x8F4F,0x8F50,0x8F51,0x8F52, -0x8F53,0x8F54,0x8F55,0x8F56,0x8F57,0x8F58,0x8F59,0x8F5A, -0xE2DD,0x8F5B,0xE2DE,0x8F5C,0x8F5D,0x8F5E,0x8F5F,0x8F60, -0x8F61,0x8F62,0x8F63,0x8F64,0xDBC8,0x8F65,0xD1D3,0xCDA2, -0x8F66,0x8F67,0xBDA8,0x8F68,0x8F69,0x8F6A,0xDEC3,0xD8A5, -0xBFAA,0xDBCD,0xD2EC,0xC6FA,0xC5AA,0x8F6B,0x8F6C,0x8F6D, -0xDEC4,0x8F6E,0xB1D7,0xDFAE,0x8F6F,0x8F70,0x8F71,0xCABD, -0x8F72,0xDFB1,0x8F73,0xB9AD,0x8F74,0xD2FD,0x8F75,0xB8A5, -0xBAEB,0x8F76,0x8F77,0xB3DA,0x8F78,0x8F79,0x8F7A,0xB5DC, -0xD5C5,0x8F7B,0x8F7C,0x8F7D,0x8F7E,0xC3D6,0xCFD2,0xBBA1, -0x8F80,0xE5F3,0xE5F2,0x8F81,0x8F82,0xE5F4,0x8F83,0xCDE4, -0x8F84,0xC8F5,0x8F85,0x8F86,0x8F87,0x8F88,0x8F89,0x8F8A, -0x8F8B,0xB5AF,0xC7BF,0x8F8C,0xE5F6,0x8F8D,0x8F8E,0x8F8F, -0xECB0,0x8F90,0x8F91,0x8F92,0x8F93,0x8F94,0x8F95,0x8F96, -0x8F97,0x8F98,0x8F99,0x8F9A,0x8F9B,0x8F9C,0x8F9D,0x8F9E, -0xE5E6,0x8F9F,0xB9E9,0xB5B1,0x8FA0,0xC2BC,0xE5E8,0xE5E7, -0xE5E9,0x8FA1,0x8FA2,0x8FA3,0x8FA4,0xD2CD,0x8FA5,0x8FA6, -0x8FA7,0xE1EA,0xD0CE,0x8FA8,0xCDAE,0x8FA9,0xD1E5,0x8FAA, -0x8FAB,0xB2CA,0xB1EB,0x8FAC,0xB1F2,0xC5ED,0x8FAD,0x8FAE, -0xD5C3,0xD3B0,0x8FAF,0xE1DC,0x8FB0,0x8FB1,0x8FB2,0xE1DD, -0x8FB3,0xD2DB,0x8FB4,0xB3B9,0xB1CB,0x8FB5,0x8FB6,0x8FB7, -0xCDF9,0xD5F7,0xE1DE,0x8FB8,0xBEB6,0xB4FD,0x8FB9,0xE1DF, -0xBADC,0xE1E0,0xBBB2,0xC2C9,0xE1E1,0x8FBA,0x8FBB,0x8FBC, -0xD0EC,0x8FBD,0xCDBD,0x8FBE,0x8FBF,0xE1E2,0x8FC0,0xB5C3, -0xC5C7,0xE1E3,0x8FC1,0x8FC2,0xE1E4,0x8FC3,0x8FC4,0x8FC5, -0x8FC6,0xD3F9,0x8FC7,0x8FC8,0x8FC9,0x8FCA,0x8FCB,0x8FCC, -0xE1E5,0x8FCD,0xD1AD,0x8FCE,0x8FCF,0xE1E6,0xCEA2,0x8FD0, -0x8FD1,0x8FD2,0x8FD3,0x8FD4,0x8FD5,0xE1E7,0x8FD6,0xB5C2, -0x8FD7,0x8FD8,0x8FD9,0x8FDA,0xE1E8,0xBBD5,0x8FDB,0x8FDC, -0x8FDD,0x8FDE,0x8FDF,0xD0C4,0xE2E0,0xB1D8,0xD2E4,0x8FE0, -0x8FE1,0xE2E1,0x8FE2,0x8FE3,0xBCC9,0xC8CC,0x8FE4,0xE2E3, -0xECFE,0xECFD,0xDFAF,0x8FE5,0x8FE6,0x8FE7,0xE2E2,0xD6BE, -0xCDFC,0xC3A6,0x8FE8,0x8FE9,0x8FEA,0xE3C3,0x8FEB,0x8FEC, -0xD6D2,0xE2E7,0x8FED,0x8FEE,0xE2E8,0x8FEF,0x8FF0,0xD3C7, -0x8FF1,0x8FF2,0xE2EC,0xBFEC,0x8FF3,0xE2ED,0xE2E5,0x8FF4, -0x8FF5,0xB3C0,0x8FF6,0x8FF7,0x8FF8,0xC4EE,0x8FF9,0x8FFA, -0xE2EE,0x8FFB,0x8FFC,0xD0C3,0x8FFD,0xBAF6,0xE2E9,0xB7DE, -0xBBB3,0xCCAC,0xCBCB,0xE2E4,0xE2E6,0xE2EA,0xE2EB,0x8FFE, -0x9040,0x9041,0xE2F7,0x9042,0x9043,0xE2F4,0xD4F5,0xE2F3, -0x9044,0x9045,0xC5AD,0x9046,0xD5FA,0xC5C2,0xB2C0,0x9047, -0x9048,0xE2EF,0x9049,0xE2F2,0xC1AF,0xCBBC,0x904A,0x904B, -0xB5A1,0xE2F9,0x904C,0x904D,0x904E,0xBCB1,0xE2F1,0xD0D4, -0xD4B9,0xE2F5,0xB9D6,0xE2F6,0x904F,0x9050,0x9051,0xC7D3, -0x9052,0x9053,0x9054,0x9055,0x9056,0xE2F0,0x9057,0x9058, -0x9059,0x905A,0x905B,0xD7DC,0xEDA1,0x905C,0x905D,0xE2F8, -0x905E,0xEDA5,0xE2FE,0xCAD1,0x905F,0x9060,0x9061,0x9062, -0x9063,0x9064,0x9065,0xC1B5,0x9066,0xBBD0,0x9067,0x9068, -0xBFD6,0x9069,0xBAE3,0x906A,0x906B,0xCBA1,0x906C,0x906D, -0x906E,0xEDA6,0xEDA3,0x906F,0x9070,0xEDA2,0x9071,0x9072, -0x9073,0x9074,0xBBD6,0xEDA7,0xD0F4,0x9075,0x9076,0xEDA4, -0xBADE,0xB6F7,0xE3A1,0xB6B2,0xCCF1,0xB9A7,0x9077,0xCFA2, -0xC7A1,0x9078,0x9079,0xBFD2,0x907A,0x907B,0xB6F1,0x907C, -0xE2FA,0xE2FB,0xE2FD,0xE2FC,0xC4D5,0xE3A2,0x907D,0xD3C1, -0x907E,0x9080,0x9081,0xE3A7,0xC7C4,0x9082,0x9083,0x9084, -0x9085,0xCFA4,0x9086,0x9087,0xE3A9,0xBAB7,0x9088,0x9089, -0x908A,0x908B,0xE3A8,0x908C,0xBBDA,0x908D,0xE3A3,0x908E, -0x908F,0x9090,0xE3A4,0xE3AA,0x9091,0xE3A6,0x9092,0xCEF2, -0xD3C6,0x9093,0x9094,0xBBBC,0x9095,0x9096,0xD4C3,0x9097, -0xC4FA,0x9098,0x9099,0xEDA8,0xD0FC,0xE3A5,0x909A,0xC3F5, -0x909B,0xE3AD,0xB1AF,0x909C,0xE3B2,0x909D,0x909E,0x909F, -0xBCC2,0x90A0,0x90A1,0xE3AC,0xB5BF,0x90A2,0x90A3,0x90A4, -0x90A5,0x90A6,0x90A7,0x90A8,0x90A9,0xC7E9,0xE3B0,0x90AA, -0x90AB,0x90AC,0xBEAA,0xCDEF,0x90AD,0x90AE,0x90AF,0x90B0, -0x90B1,0xBBF3,0x90B2,0x90B3,0x90B4,0xCCE8,0x90B5,0x90B6, -0xE3AF,0x90B7,0xE3B1,0x90B8,0xCFA7,0xE3AE,0x90B9,0xCEA9, -0xBBDD,0x90BA,0x90BB,0x90BC,0x90BD,0x90BE,0xB5EB,0xBEE5, -0xB2D2,0xB3CD,0x90BF,0xB1B9,0xE3AB,0xB2D1,0xB5AC,0xB9DF, -0xB6E8,0x90C0,0x90C1,0xCFEB,0xE3B7,0x90C2,0xBBCC,0x90C3, -0x90C4,0xC8C7,0xD0CA,0x90C5,0x90C6,0x90C7,0x90C8,0x90C9, -0xE3B8,0xB3EE,0x90CA,0x90CB,0x90CC,0x90CD,0xEDA9,0x90CE, -0xD3FA,0xD3E4,0x90CF,0x90D0,0x90D1,0xEDAA,0xE3B9,0xD2E2, -0x90D2,0x90D3,0x90D4,0x90D5,0x90D6,0xE3B5,0x90D7,0x90D8, -0x90D9,0x90DA,0xD3DE,0x90DB,0x90DC,0x90DD,0x90DE,0xB8D0, -0xE3B3,0x90DF,0x90E0,0xE3B6,0xB7DF,0x90E1,0xE3B4,0xC0A2, -0x90E2,0x90E3,0x90E4,0xE3BA,0x90E5,0x90E6,0x90E7,0x90E8, -0x90E9,0x90EA,0x90EB,0x90EC,0x90ED,0x90EE,0x90EF,0x90F0, -0x90F1,0x90F2,0x90F3,0x90F4,0x90F5,0x90F6,0x90F7,0xD4B8, -0x90F8,0x90F9,0x90FA,0x90FB,0x90FC,0x90FD,0x90FE,0x9140, -0xB4C8,0x9141,0xE3BB,0x9142,0xBBC5,0x9143,0xC9F7,0x9144, -0x9145,0xC9E5,0x9146,0x9147,0x9148,0xC4BD,0x9149,0x914A, -0x914B,0x914C,0x914D,0x914E,0x914F,0xEDAB,0x9150,0x9151, -0x9152,0x9153,0xC2FD,0x9154,0x9155,0x9156,0x9157,0xBBDB, -0xBFAE,0x9158,0x9159,0x915A,0x915B,0x915C,0x915D,0x915E, -0xCEBF,0x915F,0x9160,0x9161,0x9162,0xE3BC,0x9163,0xBFB6, -0x9164,0x9165,0x9166,0x9167,0x9168,0x9169,0x916A,0x916B, -0x916C,0x916D,0x916E,0x916F,0x9170,0x9171,0x9172,0x9173, -0x9174,0x9175,0x9176,0xB1EF,0x9177,0x9178,0xD4F7,0x9179, -0x917A,0x917B,0x917C,0x917D,0xE3BE,0x917E,0x9180,0x9181, -0x9182,0x9183,0x9184,0x9185,0x9186,0xEDAD,0x9187,0x9188, -0x9189,0x918A,0x918B,0x918C,0x918D,0x918E,0x918F,0xE3BF, -0xBAA9,0xEDAC,0x9190,0x9191,0xE3BD,0x9192,0x9193,0x9194, -0x9195,0x9196,0x9197,0x9198,0x9199,0x919A,0x919B,0xE3C0, -0x919C,0x919D,0x919E,0x919F,0x91A0,0x91A1,0xBAB6,0x91A2, -0x91A3,0x91A4,0xB6AE,0x91A5,0x91A6,0x91A7,0x91A8,0x91A9, -0xD0B8,0x91AA,0xB0C3,0xEDAE,0x91AB,0x91AC,0x91AD,0x91AE, -0x91AF,0xEDAF,0xC0C1,0x91B0,0xE3C1,0x91B1,0x91B2,0x91B3, -0x91B4,0x91B5,0x91B6,0x91B7,0x91B8,0x91B9,0x91BA,0x91BB, -0x91BC,0x91BD,0x91BE,0x91BF,0x91C0,0x91C1,0xC5B3,0x91C2, -0x91C3,0x91C4,0x91C5,0x91C6,0x91C7,0x91C8,0x91C9,0x91CA, -0x91CB,0x91CC,0x91CD,0x91CE,0x91CF,0xE3C2,0x91D0,0x91D1, -0x91D2,0x91D3,0x91D4,0x91D5,0x91D6,0x91D7,0x91D8,0xDCB2, -0x91D9,0x91DA,0x91DB,0x91DC,0x91DD,0x91DE,0xEDB0,0x91DF, -0xB8EA,0x91E0,0xCEEC,0xEAA7,0xD0E7,0xCAF9,0xC8D6,0xCFB7, -0xB3C9,0xCED2,0xBDE4,0x91E1,0x91E2,0xE3DE,0xBBF2,0xEAA8, -0xD5BD,0x91E3,0xC6DD,0xEAA9,0x91E4,0x91E5,0x91E6,0xEAAA, -0x91E7,0xEAAC,0xEAAB,0x91E8,0xEAAE,0xEAAD,0x91E9,0x91EA, -0x91EB,0x91EC,0xBDD8,0x91ED,0xEAAF,0x91EE,0xC2BE,0x91EF, -0x91F0,0x91F1,0x91F2,0xB4C1,0xB4F7,0x91F3,0x91F4,0xBBA7, -0x91F5,0x91F6,0x91F7,0x91F8,0x91F9,0xECE6,0xECE5,0xB7BF, -0xCBF9,0xB1E2,0x91FA,0xECE7,0x91FB,0x91FC,0x91FD,0xC9C8, -0xECE8,0xECE9,0x91FE,0xCAD6,0xDED0,0xB2C5,0xD4FA,0x9240, -0x9241,0xC6CB,0xB0C7,0xB4F2,0xC8D3,0x9242,0x9243,0x9244, -0xCDD0,0x9245,0x9246,0xBFB8,0x9247,0x9248,0x9249,0x924A, -0x924B,0x924C,0x924D,0xBFDB,0x924E,0x924F,0xC7A4,0xD6B4, -0x9250,0xC0A9,0xDED1,0xC9A8,0xD1EF,0xC5A4,0xB0E7,0xB3B6, -0xC8C5,0x9251,0x9252,0xB0E2,0x9253,0x9254,0xB7F6,0x9255, -0x9256,0xC5FA,0x9257,0x9258,0xB6F3,0x9259,0xD5D2,0xB3D0, -0xBCBC,0x925A,0x925B,0x925C,0xB3AD,0x925D,0x925E,0x925F, -0x9260,0xBEF1,0xB0D1,0x9261,0x9262,0x9263,0x9264,0x9265, -0x9266,0xD2D6,0xCAE3,0xD7A5,0x9267,0xCDB6,0xB6B6,0xBFB9, -0xD5DB,0x9268,0xB8A7,0xC5D7,0x9269,0x926A,0x926B,0xDED2, -0xBFD9,0xC2D5,0xC7C0,0x926C,0xBBA4,0xB1A8,0x926D,0x926E, -0xC5EA,0x926F,0x9270,0xC5FB,0xCCA7,0x9271,0x9272,0x9273, -0x9274,0xB1A7,0x9275,0x9276,0x9277,0xB5D6,0x9278,0x9279, -0x927A,0xC4A8,0x927B,0xDED3,0xD1BA,0xB3E9,0x927C,0xC3F2, -0x927D,0x927E,0xB7F7,0x9280,0xD6F4,0xB5A3,0xB2F0,0xC4B4, -0xC4E9,0xC0AD,0xDED4,0x9281,0xB0E8,0xC5C4,0xC1E0,0x9282, -0xB9D5,0x9283,0xBEDC,0xCDD8,0xB0CE,0x9284,0xCDCF,0xDED6, -0xBED0,0xD7BE,0xDED5,0xD5D0,0xB0DD,0x9285,0x9286,0xC4E2, -0x9287,0x9288,0xC2A3,0xBCF0,0x9289,0xD3B5,0xC0B9,0xC5A1, -0xB2A6,0xD4F1,0x928A,0x928B,0xC0A8,0xCAC3,0xDED7,0xD5FC, -0x928C,0xB9B0,0x928D,0xC8AD,0xCBA9,0x928E,0xDED9,0xBFBD, -0x928F,0x9290,0x9291,0x9292,0xC6B4,0xD7A7,0xCAB0,0xC4C3, -0x9293,0xB3D6,0xB9D2,0x9294,0x9295,0x9296,0x9297,0xD6B8, -0xEAFC,0xB0B4,0x9298,0x9299,0x929A,0x929B,0xBFE6,0x929C, -0x929D,0xCCF4,0x929E,0x929F,0x92A0,0x92A1,0xCDDA,0x92A2, -0x92A3,0x92A4,0xD6BF,0xC2CE,0x92A5,0xCECE,0xCCA2,0xD0AE, -0xC4D3,0xB5B2,0xDED8,0xD5F5,0xBCB7,0xBBD3,0x92A6,0x92A7, -0xB0A4,0x92A8,0xC5B2,0xB4EC,0x92A9,0x92AA,0x92AB,0xD5F1, -0x92AC,0x92AD,0xEAFD,0x92AE,0x92AF,0x92B0,0x92B1,0x92B2, -0x92B3,0xDEDA,0xCDA6,0x92B4,0x92B5,0xCDEC,0x92B6,0x92B7, -0x92B8,0x92B9,0xCEE6,0xDEDC,0x92BA,0xCDB1,0xC0A6,0x92BB, -0x92BC,0xD7BD,0x92BD,0xDEDB,0xB0C6,0xBAB4,0xC9D3,0xC4F3, -0xBEE8,0x92BE,0x92BF,0x92C0,0x92C1,0xB2B6,0x92C2,0x92C3, -0x92C4,0x92C5,0x92C6,0x92C7,0x92C8,0x92C9,0xC0CC,0xCBF0, -0x92CA,0xBCF1,0xBBBB,0xB5B7,0x92CB,0x92CC,0x92CD,0xC5F5, -0x92CE,0xDEE6,0x92CF,0x92D0,0x92D1,0xDEE3,0xBEDD,0x92D2, -0x92D3,0xDEDF,0x92D4,0x92D5,0x92D6,0x92D7,0xB4B7,0xBDDD, -0x92D8,0x92D9,0xDEE0,0xC4ED,0x92DA,0x92DB,0x92DC,0x92DD, -0xCFC6,0x92DE,0xB5E0,0x92DF,0x92E0,0x92E1,0x92E2,0xB6DE, -0xCADA,0xB5F4,0xDEE5,0x92E3,0xD5C6,0x92E4,0xDEE1,0xCCCD, -0xC6FE,0x92E5,0xC5C5,0x92E6,0x92E7,0x92E8,0xD2B4,0x92E9, -0xBEF2,0x92EA,0x92EB,0x92EC,0x92ED,0x92EE,0x92EF,0x92F0, -0xC2D3,0x92F1,0xCCBD,0xB3B8,0x92F2,0xBDD3,0x92F3,0xBFD8, -0xCDC6,0xD1DA,0xB4EB,0x92F4,0xDEE4,0xDEDD,0xDEE7,0x92F5, -0xEAFE,0x92F6,0x92F7,0xC2B0,0xDEE2,0x92F8,0x92F9,0xD6C0, -0xB5A7,0x92FA,0xB2F4,0x92FB,0xDEE8,0x92FC,0xDEF2,0x92FD, -0x92FE,0x9340,0x9341,0x9342,0xDEED,0x9343,0xDEF1,0x9344, -0x9345,0xC8E0,0x9346,0x9347,0x9348,0xD7E1,0xDEEF,0xC3E8, -0xCCE1,0x9349,0xB2E5,0x934A,0x934B,0x934C,0xD2BE,0x934D, -0x934E,0x934F,0x9350,0x9351,0x9352,0x9353,0xDEEE,0x9354, -0xDEEB,0xCED5,0x9355,0xB4A7,0x9356,0x9357,0x9358,0x9359, -0x935A,0xBFAB,0xBEBE,0x935B,0x935C,0xBDD2,0x935D,0x935E, -0x935F,0x9360,0xDEE9,0x9361,0xD4AE,0x9362,0xDEDE,0x9363, -0xDEEA,0x9364,0x9365,0x9366,0x9367,0xC0BF,0x9368,0xDEEC, -0xB2F3,0xB8E9,0xC2A7,0x9369,0x936A,0xBDC1,0x936B,0x936C, -0x936D,0x936E,0x936F,0xDEF5,0xDEF8,0x9370,0x9371,0xB2AB, -0xB4A4,0x9372,0x9373,0xB4EA,0xC9A6,0x9374,0x9375,0x9376, -0x9377,0x9378,0x9379,0xDEF6,0xCBD1,0x937A,0xB8E3,0x937B, -0xDEF7,0xDEFA,0x937C,0x937D,0x937E,0x9380,0xDEF9,0x9381, -0x9382,0x9383,0xCCC2,0x9384,0xB0E1,0xB4EE,0x9385,0x9386, -0x9387,0x9388,0x9389,0x938A,0xE5BA,0x938B,0x938C,0x938D, -0x938E,0x938F,0xD0AF,0x9390,0x9391,0xB2EB,0x9392,0xEBA1, -0x9393,0xDEF4,0x9394,0x9395,0xC9E3,0xDEF3,0xB0DA,0xD2A1, -0xB1F7,0x9396,0xCCAF,0x9397,0x9398,0x9399,0x939A,0x939B, -0x939C,0x939D,0xDEF0,0x939E,0xCBA4,0x939F,0x93A0,0x93A1, -0xD5AA,0x93A2,0x93A3,0x93A4,0x93A5,0x93A6,0xDEFB,0x93A7, -0x93A8,0x93A9,0x93AA,0x93AB,0x93AC,0x93AD,0x93AE,0xB4DD, -0x93AF,0xC4A6,0x93B0,0x93B1,0x93B2,0xDEFD,0x93B3,0x93B4, -0x93B5,0x93B6,0x93B7,0x93B8,0x93B9,0x93BA,0x93BB,0x93BC, -0xC3FE,0xC4A1,0xDFA1,0x93BD,0x93BE,0x93BF,0x93C0,0x93C1, -0x93C2,0x93C3,0xC1CC,0x93C4,0xDEFC,0xBEEF,0x93C5,0xC6B2, -0x93C6,0x93C7,0x93C8,0x93C9,0x93CA,0x93CB,0x93CC,0x93CD, -0x93CE,0xB3C5,0xC8F6,0x93CF,0x93D0,0xCBBA,0xDEFE,0x93D1, -0x93D2,0xDFA4,0x93D3,0x93D4,0x93D5,0x93D6,0xD7B2,0x93D7, -0x93D8,0x93D9,0x93DA,0x93DB,0xB3B7,0x93DC,0x93DD,0x93DE, -0x93DF,0xC1C3,0x93E0,0x93E1,0xC7CB,0xB2A5,0xB4E9,0x93E2, -0xD7AB,0x93E3,0x93E4,0x93E5,0x93E6,0xC4EC,0x93E7,0xDFA2, -0xDFA3,0x93E8,0xDFA5,0x93E9,0xBAB3,0x93EA,0x93EB,0x93EC, -0xDFA6,0x93ED,0xC0DE,0x93EE,0x93EF,0xC9C3,0x93F0,0x93F1, -0x93F2,0x93F3,0x93F4,0x93F5,0x93F6,0xB2D9,0xC7E6,0x93F7, -0xDFA7,0x93F8,0xC7DC,0x93F9,0x93FA,0x93FB,0x93FC,0xDFA8, -0xEBA2,0x93FD,0x93FE,0x9440,0x9441,0x9442,0xCBD3,0x9443, -0x9444,0x9445,0xDFAA,0x9446,0xDFA9,0x9447,0xB2C1,0x9448, -0x9449,0x944A,0x944B,0x944C,0x944D,0x944E,0x944F,0x9450, -0x9451,0x9452,0x9453,0x9454,0x9455,0x9456,0x9457,0x9458, -0x9459,0x945A,0x945B,0x945C,0x945D,0x945E,0x945F,0x9460, -0xC5CA,0x9461,0x9462,0x9463,0x9464,0x9465,0x9466,0x9467, -0x9468,0xDFAB,0x9469,0x946A,0x946B,0x946C,0x946D,0x946E, -0x946F,0x9470,0xD4DC,0x9471,0x9472,0x9473,0x9474,0x9475, -0xC8C1,0x9476,0x9477,0x9478,0x9479,0x947A,0x947B,0x947C, -0x947D,0x947E,0x9480,0x9481,0x9482,0xDFAC,0x9483,0x9484, -0x9485,0x9486,0x9487,0xBEF0,0x9488,0x9489,0xDFAD,0xD6A7, -0x948A,0x948B,0x948C,0x948D,0xEAB7,0xEBB6,0xCAD5,0x948E, -0xD8FC,0xB8C4,0x948F,0xB9A5,0x9490,0x9491,0xB7C5,0xD5FE, -0x9492,0x9493,0x9494,0x9495,0x9496,0xB9CA,0x9497,0x9498, -0xD0A7,0xF4CD,0x9499,0x949A,0xB5D0,0x949B,0x949C,0xC3F4, -0x949D,0xBEC8,0x949E,0x949F,0x94A0,0xEBB7,0xB0BD,0x94A1, -0x94A2,0xBDCC,0x94A3,0xC1B2,0x94A4,0xB1D6,0xB3A8,0x94A5, -0x94A6,0x94A7,0xB8D2,0xC9A2,0x94A8,0x94A9,0xB6D8,0x94AA, -0x94AB,0x94AC,0x94AD,0xEBB8,0xBEB4,0x94AE,0x94AF,0x94B0, -0xCAFD,0x94B1,0xC7C3,0x94B2,0xD5FB,0x94B3,0x94B4,0xB7F3, -0x94B5,0x94B6,0x94B7,0x94B8,0x94B9,0x94BA,0x94BB,0x94BC, -0x94BD,0x94BE,0x94BF,0x94C0,0x94C1,0x94C2,0x94C3,0xCEC4, -0x94C4,0x94C5,0x94C6,0xD5AB,0xB1F3,0x94C7,0x94C8,0x94C9, -0xECB3,0xB0DF,0x94CA,0xECB5,0x94CB,0x94CC,0x94CD,0xB6B7, -0x94CE,0xC1CF,0x94CF,0xF5FA,0xD0B1,0x94D0,0x94D1,0xD5E5, -0x94D2,0xCED3,0x94D3,0x94D4,0xBDEF,0xB3E2,0x94D5,0xB8AB, -0x94D6,0xD5B6,0x94D7,0xEDBD,0x94D8,0xB6CF,0x94D9,0xCBB9, -0xD0C2,0x94DA,0x94DB,0x94DC,0x94DD,0x94DE,0x94DF,0x94E0, -0x94E1,0xB7BD,0x94E2,0x94E3,0xECB6,0xCAA9,0x94E4,0x94E5, -0x94E6,0xC5D4,0x94E7,0xECB9,0xECB8,0xC2C3,0xECB7,0x94E8, -0x94E9,0x94EA,0x94EB,0xD0FD,0xECBA,0x94EC,0xECBB,0xD7E5, -0x94ED,0x94EE,0xECBC,0x94EF,0x94F0,0x94F1,0xECBD,0xC6EC, -0x94F2,0x94F3,0x94F4,0x94F5,0x94F6,0x94F7,0x94F8,0x94F9, -0xCEDE,0x94FA,0xBCC8,0x94FB,0x94FC,0xC8D5,0xB5A9,0xBEC9, -0xD6BC,0xD4E7,0x94FD,0x94FE,0xD1AE,0xD0F1,0xEAB8,0xEAB9, -0xEABA,0xBAB5,0x9540,0x9541,0x9542,0x9543,0xCAB1,0xBFF5, -0x9544,0x9545,0xCDFA,0x9546,0x9547,0x9548,0x9549,0x954A, -0xEAC0,0x954B,0xB0BA,0xEABE,0x954C,0x954D,0xC0A5,0x954E, -0x954F,0x9550,0xEABB,0x9551,0xB2FD,0x9552,0xC3F7,0xBBE8, -0x9553,0x9554,0x9555,0xD2D7,0xCEF4,0xEABF,0x9556,0x9557, -0x9558,0xEABC,0x9559,0x955A,0x955B,0xEAC3,0x955C,0xD0C7, -0xD3B3,0x955D,0x955E,0x955F,0x9560,0xB4BA,0x9561,0xC3C1, -0xD7F2,0x9562,0x9563,0x9564,0x9565,0xD5D1,0x9566,0xCAC7, -0x9567,0xEAC5,0x9568,0x9569,0xEAC4,0xEAC7,0xEAC6,0x956A, -0x956B,0x956C,0x956D,0x956E,0xD6E7,0x956F,0xCFD4,0x9570, -0x9571,0xEACB,0x9572,0xBBCE,0x9573,0x9574,0x9575,0x9576, -0x9577,0x9578,0x9579,0xBDFA,0xC9CE,0x957A,0x957B,0xEACC, -0x957C,0x957D,0xC9B9,0xCFFE,0xEACA,0xD4CE,0xEACD,0xEACF, -0x957E,0x9580,0xCDED,0x9581,0x9582,0x9583,0x9584,0xEAC9, -0x9585,0xEACE,0x9586,0x9587,0xCEEE,0x9588,0xBBDE,0x9589, -0xB3BF,0x958A,0x958B,0x958C,0x958D,0x958E,0xC6D5,0xBEB0, -0xCEFA,0x958F,0x9590,0x9591,0xC7E7,0x9592,0xBEA7,0xEAD0, -0x9593,0x9594,0xD6C7,0x9595,0x9596,0x9597,0xC1C0,0x9598, -0x9599,0x959A,0xD4DD,0x959B,0xEAD1,0x959C,0x959D,0xCFBE, -0x959E,0x959F,0x95A0,0x95A1,0xEAD2,0x95A2,0x95A3,0x95A4, -0x95A5,0xCAEE,0x95A6,0x95A7,0x95A8,0x95A9,0xC5AF,0xB0B5, -0x95AA,0x95AB,0x95AC,0x95AD,0x95AE,0xEAD4,0x95AF,0x95B0, -0x95B1,0x95B2,0x95B3,0x95B4,0x95B5,0x95B6,0x95B7,0xEAD3, -0xF4DF,0x95B8,0x95B9,0x95BA,0x95BB,0x95BC,0xC4BA,0x95BD, -0x95BE,0x95BF,0x95C0,0x95C1,0xB1A9,0x95C2,0x95C3,0x95C4, -0x95C5,0xE5DF,0x95C6,0x95C7,0x95C8,0x95C9,0xEAD5,0x95CA, -0x95CB,0x95CC,0x95CD,0x95CE,0x95CF,0x95D0,0x95D1,0x95D2, -0x95D3,0x95D4,0x95D5,0x95D6,0x95D7,0x95D8,0x95D9,0x95DA, -0x95DB,0x95DC,0x95DD,0x95DE,0x95DF,0x95E0,0x95E1,0x95E2, -0x95E3,0xCAEF,0x95E4,0xEAD6,0xEAD7,0xC6D8,0x95E5,0x95E6, -0x95E7,0x95E8,0x95E9,0x95EA,0x95EB,0x95EC,0xEAD8,0x95ED, -0x95EE,0xEAD9,0x95EF,0x95F0,0x95F1,0x95F2,0x95F3,0x95F4, -0xD4BB,0x95F5,0xC7FA,0xD2B7,0xB8FC,0x95F6,0x95F7,0xEAC2, -0x95F8,0xB2DC,0x95F9,0x95FA,0xC2FC,0x95FB,0xD4F8,0xCCE6, -0xD7EE,0x95FC,0x95FD,0x95FE,0x9640,0x9641,0x9642,0x9643, -0xD4C2,0xD3D0,0xEBC3,0xC5F3,0x9644,0xB7FE,0x9645,0x9646, -0xEBD4,0x9647,0x9648,0x9649,0xCBB7,0xEBDE,0x964A,0xC0CA, -0x964B,0x964C,0x964D,0xCDFB,0x964E,0xB3AF,0x964F,0xC6DA, -0x9650,0x9651,0x9652,0x9653,0x9654,0x9655,0xEBFC,0x9656, -0xC4BE,0x9657,0xCEB4,0xC4A9,0xB1BE,0xD4FD,0x9658,0xCAF5, -0x9659,0xD6EC,0x965A,0x965B,0xC6D3,0xB6E4,0x965C,0x965D, -0x965E,0x965F,0xBBFA,0x9660,0x9661,0xD0E0,0x9662,0x9663, -0xC9B1,0x9664,0xD4D3,0xC8A8,0x9665,0x9666,0xB8CB,0x9667, -0xE8BE,0xC9BC,0x9668,0x9669,0xE8BB,0x966A,0xC0EE,0xD0D3, -0xB2C4,0xB4E5,0x966B,0xE8BC,0x966C,0x966D,0xD5C8,0x966E, -0x966F,0x9670,0x9671,0x9672,0xB6C5,0x9673,0xE8BD,0xCAF8, -0xB8DC,0xCCF5,0x9674,0x9675,0x9676,0xC0B4,0x9677,0x9678, -0xD1EE,0xE8BF,0xE8C2,0x9679,0x967A,0xBABC,0x967B,0xB1AD, -0xBDDC,0x967C,0xEABD,0xE8C3,0x967D,0xE8C6,0x967E,0xE8CB, -0x9680,0x9681,0x9682,0x9683,0xE8CC,0x9684,0xCBC9,0xB0E5, -0x9685,0xBCAB,0x9686,0x9687,0xB9B9,0x9688,0x9689,0xE8C1, -0x968A,0xCDF7,0x968B,0xE8CA,0x968C,0x968D,0x968E,0x968F, -0xCEF6,0x9690,0x9691,0x9692,0x9693,0xD5ED,0x9694,0xC1D6, -0xE8C4,0x9695,0xC3B6,0x9696,0xB9FB,0xD6A6,0xE8C8,0x9697, -0x9698,0x9699,0xCAE0,0xD4E6,0x969A,0xE8C0,0x969B,0xE8C5, -0xE8C7,0x969C,0xC7B9,0xB7E3,0x969D,0xE8C9,0x969E,0xBFDD, -0xE8D2,0x969F,0x96A0,0xE8D7,0x96A1,0xE8D5,0xBCDC,0xBCCF, -0xE8DB,0x96A2,0x96A3,0x96A4,0x96A5,0x96A6,0x96A7,0x96A8, -0x96A9,0xE8DE,0x96AA,0xE8DA,0xB1FA,0x96AB,0x96AC,0x96AD, -0x96AE,0x96AF,0x96B0,0x96B1,0x96B2,0x96B3,0x96B4,0xB0D8, -0xC4B3,0xB8CC,0xC6E2,0xC8BE,0xC8E1,0x96B5,0x96B6,0x96B7, -0xE8CF,0xE8D4,0xE8D6,0x96B8,0xB9F1,0xE8D8,0xD7F5,0x96B9, -0xC4FB,0x96BA,0xE8DC,0x96BB,0x96BC,0xB2E9,0x96BD,0x96BE, -0x96BF,0xE8D1,0x96C0,0x96C1,0xBCED,0x96C2,0x96C3,0xBFC2, -0xE8CD,0xD6F9,0x96C4,0xC1F8,0xB2F1,0x96C5,0x96C6,0x96C7, -0x96C8,0x96C9,0x96CA,0x96CB,0x96CC,0xE8DF,0x96CD,0xCAC1, -0xE8D9,0x96CE,0x96CF,0x96D0,0x96D1,0xD5A4,0x96D2,0xB1EA, -0xD5BB,0xE8CE,0xE8D0,0xB6B0,0xE8D3,0x96D3,0xE8DD,0xC0B8, -0x96D4,0xCAF7,0x96D5,0xCBA8,0x96D6,0x96D7,0xC6DC,0xC0F5, -0x96D8,0x96D9,0x96DA,0x96DB,0x96DC,0xE8E9,0x96DD,0x96DE, -0x96DF,0xD0A3,0x96E0,0x96E1,0x96E2,0x96E3,0x96E4,0x96E5, -0x96E6,0xE8F2,0xD6EA,0x96E7,0x96E8,0x96E9,0x96EA,0x96EB, -0x96EC,0x96ED,0xE8E0,0xE8E1,0x96EE,0x96EF,0x96F0,0xD1F9, -0xBACB,0xB8F9,0x96F1,0x96F2,0xB8F1,0xD4D4,0xE8EF,0x96F3, -0xE8EE,0xE8EC,0xB9F0,0xCCD2,0xE8E6,0xCEA6,0xBFF2,0x96F4, -0xB0B8,0xE8F1,0xE8F0,0x96F5,0xD7C0,0x96F6,0xE8E4,0x96F7, -0xCDA9,0xC9A3,0x96F8,0xBBB8,0xBDDB,0xE8EA,0x96F9,0x96FA, -0x96FB,0x96FC,0x96FD,0x96FE,0x9740,0x9741,0x9742,0x9743, -0xE8E2,0xE8E3,0xE8E5,0xB5B5,0xE8E7,0xC7C5,0xE8EB,0xE8ED, -0xBDB0,0xD7AE,0x9744,0xE8F8,0x9745,0x9746,0x9747,0x9748, -0x9749,0x974A,0x974B,0x974C,0xE8F5,0x974D,0xCDB0,0xE8F6, -0x974E,0x974F,0x9750,0x9751,0x9752,0x9753,0x9754,0x9755, -0x9756,0xC1BA,0x9757,0xE8E8,0x9758,0xC3B7,0xB0F0,0x9759, -0x975A,0x975B,0x975C,0x975D,0x975E,0x975F,0x9760,0xE8F4, -0x9761,0x9762,0x9763,0xE8F7,0x9764,0x9765,0x9766,0xB9A3, -0x9767,0x9768,0x9769,0x976A,0x976B,0x976C,0x976D,0x976E, -0x976F,0x9770,0xC9D2,0x9771,0x9772,0x9773,0xC3CE,0xCEE0, -0xC0E6,0x9774,0x9775,0x9776,0x9777,0xCBF3,0x9778,0xCCDD, -0xD0B5,0x9779,0x977A,0xCAE1,0x977B,0xE8F3,0x977C,0x977D, -0x977E,0x9780,0x9781,0x9782,0x9783,0x9784,0x9785,0x9786, -0xBCEC,0x9787,0xE8F9,0x9788,0x9789,0x978A,0x978B,0x978C, -0x978D,0xC3DE,0x978E,0xC6E5,0x978F,0xB9F7,0x9790,0x9791, -0x9792,0x9793,0xB0F4,0x9794,0x9795,0xD7D8,0x9796,0x9797, -0xBCAC,0x9798,0xC5EF,0x9799,0x979A,0x979B,0x979C,0x979D, -0xCCC4,0x979E,0x979F,0xE9A6,0x97A0,0x97A1,0x97A2,0x97A3, -0x97A4,0x97A5,0x97A6,0x97A7,0x97A8,0x97A9,0xC9AD,0x97AA, -0xE9A2,0xC0E2,0x97AB,0x97AC,0x97AD,0xBFC3,0x97AE,0x97AF, -0x97B0,0xE8FE,0xB9D7,0x97B1,0xE8FB,0x97B2,0x97B3,0x97B4, -0x97B5,0xE9A4,0x97B6,0x97B7,0x97B8,0xD2CE,0x97B9,0x97BA, -0x97BB,0x97BC,0x97BD,0xE9A3,0x97BE,0xD6B2,0xD7B5,0x97BF, -0xE9A7,0x97C0,0xBDB7,0x97C1,0x97C2,0x97C3,0x97C4,0x97C5, -0x97C6,0x97C7,0x97C8,0x97C9,0x97CA,0x97CB,0x97CC,0xE8FC, -0xE8FD,0x97CD,0x97CE,0x97CF,0xE9A1,0x97D0,0x97D1,0x97D2, -0x97D3,0x97D4,0x97D5,0x97D6,0x97D7,0xCDD6,0x97D8,0x97D9, -0xD2AC,0x97DA,0x97DB,0x97DC,0xE9B2,0x97DD,0x97DE,0x97DF, -0x97E0,0xE9A9,0x97E1,0x97E2,0x97E3,0xB4AA,0x97E4,0xB4BB, -0x97E5,0x97E6,0xE9AB,0x97E7,0x97E8,0x97E9,0x97EA,0x97EB, -0x97EC,0x97ED,0x97EE,0x97EF,0x97F0,0x97F1,0x97F2,0x97F3, -0x97F4,0x97F5,0x97F6,0x97F7,0xD0A8,0x97F8,0x97F9,0xE9A5, -0x97FA,0x97FB,0xB3FE,0x97FC,0x97FD,0xE9AC,0xC0E3,0x97FE, -0xE9AA,0x9840,0x9841,0xE9B9,0x9842,0x9843,0xE9B8,0x9844, -0x9845,0x9846,0x9847,0xE9AE,0x9848,0x9849,0xE8FA,0x984A, -0x984B,0xE9A8,0x984C,0x984D,0x984E,0x984F,0x9850,0xBFAC, -0xE9B1,0xE9BA,0x9851,0x9852,0xC2A5,0x9853,0x9854,0x9855, -0xE9AF,0x9856,0xB8C5,0x9857,0xE9AD,0x9858,0xD3DC,0xE9B4, -0xE9B5,0xE9B7,0x9859,0x985A,0x985B,0xE9C7,0x985C,0x985D, -0x985E,0x985F,0x9860,0x9861,0xC0C6,0xE9C5,0x9862,0x9863, -0xE9B0,0x9864,0x9865,0xE9BB,0xB0F1,0x9866,0x9867,0x9868, -0x9869,0x986A,0x986B,0x986C,0x986D,0x986E,0x986F,0xE9BC, -0xD5A5,0x9870,0x9871,0xE9BE,0x9872,0xE9BF,0x9873,0x9874, -0x9875,0xE9C1,0x9876,0x9877,0xC1F1,0x9878,0x9879,0xC8B6, -0x987A,0x987B,0x987C,0xE9BD,0x987D,0x987E,0x9880,0x9881, -0x9882,0xE9C2,0x9883,0x9884,0x9885,0x9886,0x9887,0x9888, -0x9889,0x988A,0xE9C3,0x988B,0xE9B3,0x988C,0xE9B6,0x988D, -0xBBB1,0x988E,0x988F,0x9890,0xE9C0,0x9891,0x9892,0x9893, -0x9894,0x9895,0x9896,0xBCF7,0x9897,0x9898,0x9899,0xE9C4, -0xE9C6,0x989A,0x989B,0x989C,0x989D,0x989E,0x989F,0x98A0, -0x98A1,0x98A2,0x98A3,0x98A4,0x98A5,0xE9CA,0x98A6,0x98A7, -0x98A8,0x98A9,0xE9CE,0x98AA,0x98AB,0x98AC,0x98AD,0x98AE, -0x98AF,0x98B0,0x98B1,0x98B2,0x98B3,0xB2DB,0x98B4,0xE9C8, -0x98B5,0x98B6,0x98B7,0x98B8,0x98B9,0x98BA,0x98BB,0x98BC, -0x98BD,0x98BE,0xB7AE,0x98BF,0x98C0,0x98C1,0x98C2,0x98C3, -0x98C4,0x98C5,0x98C6,0x98C7,0x98C8,0x98C9,0x98CA,0xE9CB, -0xE9CC,0x98CB,0x98CC,0x98CD,0x98CE,0x98CF,0x98D0,0xD5C1, -0x98D1,0xC4A3,0x98D2,0x98D3,0x98D4,0x98D5,0x98D6,0x98D7, -0xE9D8,0x98D8,0xBAE1,0x98D9,0x98DA,0x98DB,0x98DC,0xE9C9, -0x98DD,0xD3A3,0x98DE,0x98DF,0x98E0,0xE9D4,0x98E1,0x98E2, -0x98E3,0x98E4,0x98E5,0x98E6,0x98E7,0xE9D7,0xE9D0,0x98E8, -0x98E9,0x98EA,0x98EB,0x98EC,0xE9CF,0x98ED,0x98EE,0xC7C1, -0x98EF,0x98F0,0x98F1,0x98F2,0x98F3,0x98F4,0x98F5,0x98F6, -0xE9D2,0x98F7,0x98F8,0x98F9,0x98FA,0x98FB,0x98FC,0x98FD, -0xE9D9,0xB3C8,0x98FE,0xE9D3,0x9940,0x9941,0x9942,0x9943, -0x9944,0xCFF0,0x9945,0x9946,0x9947,0xE9CD,0x9948,0x9949, -0x994A,0x994B,0x994C,0x994D,0x994E,0x994F,0x9950,0x9951, -0x9952,0xB3F7,0x9953,0x9954,0x9955,0x9956,0x9957,0x9958, -0x9959,0xE9D6,0x995A,0x995B,0xE9DA,0x995C,0x995D,0x995E, -0xCCB4,0x995F,0x9960,0x9961,0xCFAD,0x9962,0x9963,0x9964, -0x9965,0x9966,0x9967,0x9968,0x9969,0x996A,0xE9D5,0x996B, -0xE9DC,0xE9DB,0x996C,0x996D,0x996E,0x996F,0x9970,0xE9DE, -0x9971,0x9972,0x9973,0x9974,0x9975,0x9976,0x9977,0x9978, -0xE9D1,0x9979,0x997A,0x997B,0x997C,0x997D,0x997E,0x9980, -0x9981,0xE9DD,0x9982,0xE9DF,0xC3CA,0x9983,0x9984,0x9985, -0x9986,0x9987,0x9988,0x9989,0x998A,0x998B,0x998C,0x998D, -0x998E,0x998F,0x9990,0x9991,0x9992,0x9993,0x9994,0x9995, -0x9996,0x9997,0x9998,0x9999,0x999A,0x999B,0x999C,0x999D, -0x999E,0x999F,0x99A0,0x99A1,0x99A2,0x99A3,0x99A4,0x99A5, -0x99A6,0x99A7,0x99A8,0x99A9,0x99AA,0x99AB,0x99AC,0x99AD, -0x99AE,0x99AF,0x99B0,0x99B1,0x99B2,0x99B3,0x99B4,0x99B5, -0x99B6,0x99B7,0x99B8,0x99B9,0x99BA,0x99BB,0x99BC,0x99BD, -0x99BE,0x99BF,0x99C0,0x99C1,0x99C2,0x99C3,0x99C4,0x99C5, -0x99C6,0x99C7,0x99C8,0x99C9,0x99CA,0x99CB,0x99CC,0x99CD, -0x99CE,0x99CF,0x99D0,0x99D1,0x99D2,0x99D3,0x99D4,0x99D5, -0x99D6,0x99D7,0x99D8,0x99D9,0x99DA,0x99DB,0x99DC,0x99DD, -0x99DE,0x99DF,0x99E0,0x99E1,0x99E2,0x99E3,0x99E4,0x99E5, -0x99E6,0x99E7,0x99E8,0x99E9,0x99EA,0x99EB,0x99EC,0x99ED, -0x99EE,0x99EF,0x99F0,0x99F1,0x99F2,0x99F3,0x99F4,0x99F5, -0xC7B7,0xB4CE,0xBBB6,0xD0C0,0xECA3,0x99F6,0x99F7,0xC5B7, -0x99F8,0x99F9,0x99FA,0x99FB,0x99FC,0x99FD,0x99FE,0x9A40, -0x9A41,0x9A42,0xD3FB,0x9A43,0x9A44,0x9A45,0x9A46,0xECA4, -0x9A47,0xECA5,0xC6DB,0x9A48,0x9A49,0x9A4A,0xBFEE,0x9A4B, -0x9A4C,0x9A4D,0x9A4E,0xECA6,0x9A4F,0x9A50,0xECA7,0xD0AA, -0x9A51,0xC7B8,0x9A52,0x9A53,0xB8E8,0x9A54,0x9A55,0x9A56, -0x9A57,0x9A58,0x9A59,0x9A5A,0x9A5B,0x9A5C,0x9A5D,0x9A5E, -0x9A5F,0xECA8,0x9A60,0x9A61,0x9A62,0x9A63,0x9A64,0x9A65, -0x9A66,0x9A67,0xD6B9,0xD5FD,0xB4CB,0xB2BD,0xCEE4,0xC6E7, -0x9A68,0x9A69,0xCDE1,0x9A6A,0x9A6B,0x9A6C,0x9A6D,0x9A6E, -0x9A6F,0x9A70,0x9A71,0x9A72,0x9A73,0x9A74,0x9A75,0x9A76, -0x9A77,0xB4F5,0x9A78,0xCBC0,0xBCDF,0x9A79,0x9A7A,0x9A7B, -0x9A7C,0xE9E2,0xE9E3,0xD1EA,0xE9E5,0x9A7D,0xB4F9,0xE9E4, -0x9A7E,0xD1B3,0xCAE2,0xB2D0,0x9A80,0xE9E8,0x9A81,0x9A82, -0x9A83,0x9A84,0xE9E6,0xE9E7,0x9A85,0x9A86,0xD6B3,0x9A87, -0x9A88,0x9A89,0xE9E9,0xE9EA,0x9A8A,0x9A8B,0x9A8C,0x9A8D, -0x9A8E,0xE9EB,0x9A8F,0x9A90,0x9A91,0x9A92,0x9A93,0x9A94, -0x9A95,0x9A96,0xE9EC,0x9A97,0x9A98,0x9A99,0x9A9A,0x9A9B, -0x9A9C,0x9A9D,0x9A9E,0xECAF,0xC5B9,0xB6CE,0x9A9F,0xD2F3, -0x9AA0,0x9AA1,0x9AA2,0x9AA3,0x9AA4,0x9AA5,0x9AA6,0xB5EE, -0x9AA7,0xBBD9,0xECB1,0x9AA8,0x9AA9,0xD2E3,0x9AAA,0x9AAB, -0x9AAC,0x9AAD,0x9AAE,0xCEE3,0x9AAF,0xC4B8,0x9AB0,0xC3BF, -0x9AB1,0x9AB2,0xB6BE,0xD8B9,0xB1C8,0xB1CF,0xB1D1,0xC5FE, -0x9AB3,0xB1D0,0x9AB4,0xC3AB,0x9AB5,0x9AB6,0x9AB7,0x9AB8, -0x9AB9,0xD5B1,0x9ABA,0x9ABB,0x9ABC,0x9ABD,0x9ABE,0x9ABF, -0x9AC0,0x9AC1,0xEBA4,0xBAC1,0x9AC2,0x9AC3,0x9AC4,0xCCBA, -0x9AC5,0x9AC6,0x9AC7,0xEBA5,0x9AC8,0xEBA7,0x9AC9,0x9ACA, -0x9ACB,0xEBA8,0x9ACC,0x9ACD,0x9ACE,0xEBA6,0x9ACF,0x9AD0, -0x9AD1,0x9AD2,0x9AD3,0x9AD4,0x9AD5,0xEBA9,0xEBAB,0xEBAA, -0x9AD6,0x9AD7,0x9AD8,0x9AD9,0x9ADA,0xEBAC,0x9ADB,0xCACF, -0xD8B5,0xC3F1,0x9ADC,0xC3A5,0xC6F8,0xEBAD,0xC4CA,0x9ADD, -0xEBAE,0xEBAF,0xEBB0,0xB7D5,0x9ADE,0x9ADF,0x9AE0,0xB7FA, -0x9AE1,0xEBB1,0xC7E2,0x9AE2,0xEBB3,0x9AE3,0xBAA4,0xD1F5, -0xB0B1,0xEBB2,0xEBB4,0x9AE4,0x9AE5,0x9AE6,0xB5AA,0xC2C8, -0xC7E8,0x9AE7,0xEBB5,0x9AE8,0xCBAE,0xE3DF,0x9AE9,0x9AEA, -0xD3C0,0x9AEB,0x9AEC,0x9AED,0x9AEE,0xD9DB,0x9AEF,0x9AF0, -0xCDA1,0xD6AD,0xC7F3,0x9AF1,0x9AF2,0x9AF3,0xD9E0,0xBBE3, -0x9AF4,0xBABA,0xE3E2,0x9AF5,0x9AF6,0x9AF7,0x9AF8,0x9AF9, -0xCFAB,0x9AFA,0x9AFB,0x9AFC,0xE3E0,0xC9C7,0x9AFD,0xBAB9, -0x9AFE,0x9B40,0x9B41,0xD1B4,0xE3E1,0xC8EA,0xB9AF,0xBDAD, -0xB3D8,0xCEDB,0x9B42,0x9B43,0xCCC0,0x9B44,0x9B45,0x9B46, -0xE3E8,0xE3E9,0xCDF4,0x9B47,0x9B48,0x9B49,0x9B4A,0x9B4B, -0xCCAD,0x9B4C,0xBCB3,0x9B4D,0xE3EA,0x9B4E,0xE3EB,0x9B4F, -0x9B50,0xD0DA,0x9B51,0x9B52,0x9B53,0xC6FB,0xB7DA,0x9B54, -0x9B55,0xC7DF,0xD2CA,0xCED6,0x9B56,0xE3E4,0xE3EC,0x9B57, -0xC9F2,0xB3C1,0x9B58,0x9B59,0xE3E7,0x9B5A,0x9B5B,0xC6E3, -0xE3E5,0x9B5C,0x9B5D,0xEDB3,0xE3E6,0x9B5E,0x9B5F,0x9B60, -0x9B61,0xC9B3,0x9B62,0xC5E6,0x9B63,0x9B64,0x9B65,0xB9B5, -0x9B66,0xC3BB,0x9B67,0xE3E3,0xC5BD,0xC1A4,0xC2D9,0xB2D7, -0x9B68,0xE3ED,0xBBA6,0xC4AD,0x9B69,0xE3F0,0xBEDA,0x9B6A, -0x9B6B,0xE3FB,0xE3F5,0xBAD3,0x9B6C,0x9B6D,0x9B6E,0x9B6F, -0xB7D0,0xD3CD,0x9B70,0xD6CE,0xD5D3,0xB9C1,0xD5B4,0xD1D8, -0x9B71,0x9B72,0x9B73,0x9B74,0xD0B9,0xC7F6,0x9B75,0x9B76, -0x9B77,0xC8AA,0xB2B4,0x9B78,0xC3DA,0x9B79,0x9B7A,0x9B7B, -0xE3EE,0x9B7C,0x9B7D,0xE3FC,0xE3EF,0xB7A8,0xE3F7,0xE3F4, -0x9B7E,0x9B80,0x9B81,0xB7BA,0x9B82,0x9B83,0xC5A2,0x9B84, -0xE3F6,0xC5DD,0xB2A8,0xC6FC,0x9B85,0xC4E0,0x9B86,0x9B87, -0xD7A2,0x9B88,0xC0E1,0xE3F9,0x9B89,0x9B8A,0xE3FA,0xE3FD, -0xCCA9,0xE3F3,0x9B8B,0xD3BE,0x9B8C,0xB1C3,0xEDB4,0xE3F1, -0xE3F2,0x9B8D,0xE3F8,0xD0BA,0xC6C3,0xD4F3,0xE3FE,0x9B8E, -0x9B8F,0xBDE0,0x9B90,0x9B91,0xE4A7,0x9B92,0x9B93,0xE4A6, -0x9B94,0x9B95,0x9B96,0xD1F3,0xE4A3,0x9B97,0xE4A9,0x9B98, -0x9B99,0x9B9A,0xC8F7,0x9B9B,0x9B9C,0x9B9D,0x9B9E,0xCFB4, -0x9B9F,0xE4A8,0xE4AE,0xC2E5,0x9BA0,0x9BA1,0xB6B4,0x9BA2, -0x9BA3,0x9BA4,0x9BA5,0x9BA6,0x9BA7,0xBDF2,0x9BA8,0xE4A2, -0x9BA9,0x9BAA,0xBAE9,0xE4AA,0x9BAB,0x9BAC,0xE4AC,0x9BAD, -0x9BAE,0xB6FD,0xD6DE,0xE4B2,0x9BAF,0xE4AD,0x9BB0,0x9BB1, -0x9BB2,0xE4A1,0x9BB3,0xBBEE,0xCDDD,0xC7A2,0xC5C9,0x9BB4, -0x9BB5,0xC1F7,0x9BB6,0xE4A4,0x9BB7,0xC7B3,0xBDAC,0xBDBD, -0xE4A5,0x9BB8,0xD7C7,0xB2E2,0x9BB9,0xE4AB,0xBCC3,0xE4AF, -0x9BBA,0xBBEB,0xE4B0,0xC5A8,0xE4B1,0x9BBB,0x9BBC,0x9BBD, -0x9BBE,0xD5E3,0xBFA3,0x9BBF,0xE4BA,0x9BC0,0xE4B7,0x9BC1, -0xE4BB,0x9BC2,0x9BC3,0xE4BD,0x9BC4,0x9BC5,0xC6D6,0x9BC6, -0x9BC7,0xBAC6,0xC0CB,0x9BC8,0x9BC9,0x9BCA,0xB8A1,0xE4B4, -0x9BCB,0x9BCC,0x9BCD,0x9BCE,0xD4A1,0x9BCF,0x9BD0,0xBAA3, -0xBDFE,0x9BD1,0x9BD2,0x9BD3,0xE4BC,0x9BD4,0x9BD5,0x9BD6, -0x9BD7,0x9BD8,0xCDBF,0x9BD9,0x9BDA,0xC4F9,0x9BDB,0x9BDC, -0xCFFB,0xC9E6,0x9BDD,0x9BDE,0xD3BF,0x9BDF,0xCFD1,0x9BE0, -0x9BE1,0xE4B3,0x9BE2,0xE4B8,0xE4B9,0xCCE9,0x9BE3,0x9BE4, -0x9BE5,0x9BE6,0x9BE7,0xCCCE,0x9BE8,0xC0D4,0xE4B5,0xC1B0, -0xE4B6,0xCED0,0x9BE9,0xBBC1,0xB5D3,0x9BEA,0xC8F3,0xBDA7, -0xD5C7,0xC9AC,0xB8A2,0xE4CA,0x9BEB,0x9BEC,0xE4CC,0xD1C4, -0x9BED,0x9BEE,0xD2BA,0x9BEF,0x9BF0,0xBAAD,0x9BF1,0x9BF2, -0xBAD4,0x9BF3,0x9BF4,0x9BF5,0x9BF6,0x9BF7,0x9BF8,0xE4C3, -0xB5ED,0x9BF9,0x9BFA,0x9BFB,0xD7CD,0xE4C0,0xCFFD,0xE4BF, -0x9BFC,0x9BFD,0x9BFE,0xC1DC,0xCCCA,0x9C40,0x9C41,0x9C42, -0x9C43,0xCAE7,0x9C44,0x9C45,0x9C46,0x9C47,0xC4D7,0x9C48, -0xCCD4,0xE4C8,0x9C49,0x9C4A,0x9C4B,0xE4C7,0xE4C1,0x9C4C, -0xE4C4,0xB5AD,0x9C4D,0x9C4E,0xD3D9,0x9C4F,0xE4C6,0x9C50, -0x9C51,0x9C52,0x9C53,0xD2F9,0xB4E3,0x9C54,0xBBB4,0x9C55, -0x9C56,0xC9EE,0x9C57,0xB4BE,0x9C58,0x9C59,0x9C5A,0xBBEC, -0x9C5B,0xD1CD,0x9C5C,0xCCED,0xEDB5,0x9C5D,0x9C5E,0x9C5F, -0x9C60,0x9C61,0x9C62,0x9C63,0x9C64,0xC7E5,0x9C65,0x9C66, -0x9C67,0x9C68,0xD4A8,0x9C69,0xE4CB,0xD7D5,0xE4C2,0x9C6A, -0xBDA5,0xE4C5,0x9C6B,0x9C6C,0xD3E6,0x9C6D,0xE4C9,0xC9F8, -0x9C6E,0x9C6F,0xE4BE,0x9C70,0x9C71,0xD3E5,0x9C72,0x9C73, -0xC7FE,0xB6C9,0x9C74,0xD4FC,0xB2B3,0xE4D7,0x9C75,0x9C76, -0x9C77,0xCEC2,0x9C78,0xE4CD,0x9C79,0xCEBC,0x9C7A,0xB8DB, -0x9C7B,0x9C7C,0xE4D6,0x9C7D,0xBFCA,0x9C7E,0x9C80,0x9C81, -0xD3CE,0x9C82,0xC3EC,0x9C83,0x9C84,0x9C85,0x9C86,0x9C87, -0x9C88,0x9C89,0x9C8A,0xC5C8,0xE4D8,0x9C8B,0x9C8C,0x9C8D, -0x9C8E,0x9C8F,0x9C90,0x9C91,0x9C92,0xCDC4,0xE4CF,0x9C93, -0x9C94,0x9C95,0x9C96,0xE4D4,0xE4D5,0x9C97,0xBAFE,0x9C98, -0xCFE6,0x9C99,0x9C9A,0xD5BF,0x9C9B,0x9C9C,0x9C9D,0xE4D2, -0x9C9E,0x9C9F,0x9CA0,0x9CA1,0x9CA2,0x9CA3,0x9CA4,0x9CA5, -0x9CA6,0x9CA7,0x9CA8,0xE4D0,0x9CA9,0x9CAA,0xE4CE,0x9CAB, -0x9CAC,0x9CAD,0x9CAE,0x9CAF,0x9CB0,0x9CB1,0x9CB2,0x9CB3, -0x9CB4,0x9CB5,0x9CB6,0x9CB7,0x9CB8,0x9CB9,0xCDE5,0xCAAA, -0x9CBA,0x9CBB,0x9CBC,0xC0A3,0x9CBD,0xBDA6,0xE4D3,0x9CBE, -0x9CBF,0xB8C8,0x9CC0,0x9CC1,0x9CC2,0x9CC3,0x9CC4,0xE4E7, -0xD4B4,0x9CC5,0x9CC6,0x9CC7,0x9CC8,0x9CC9,0x9CCA,0x9CCB, -0xE4DB,0x9CCC,0x9CCD,0x9CCE,0xC1EF,0x9CCF,0x9CD0,0xE4E9, -0x9CD1,0x9CD2,0xD2E7,0x9CD3,0x9CD4,0xE4DF,0x9CD5,0xE4E0, -0x9CD6,0x9CD7,0xCFAA,0x9CD8,0x9CD9,0x9CDA,0x9CDB,0xCBDD, -0x9CDC,0xE4DA,0xE4D1,0x9CDD,0xE4E5,0x9CDE,0xC8DC,0xE4E3, -0x9CDF,0x9CE0,0xC4E7,0xE4E2,0x9CE1,0xE4E1,0x9CE2,0x9CE3, -0x9CE4,0xB3FC,0xE4E8,0x9CE5,0x9CE6,0x9CE7,0x9CE8,0xB5E1, -0x9CE9,0x9CEA,0x9CEB,0xD7CC,0x9CEC,0x9CED,0x9CEE,0xE4E6, -0x9CEF,0xBBAC,0x9CF0,0xD7D2,0xCCCF,0xEBF8,0x9CF1,0xE4E4, -0x9CF2,0x9CF3,0xB9F6,0x9CF4,0x9CF5,0x9CF6,0xD6CD,0xE4D9, -0xE4DC,0xC2FA,0xE4DE,0x9CF7,0xC2CB,0xC0C4,0xC2D0,0x9CF8, -0xB1F5,0xCCB2,0x9CF9,0x9CFA,0x9CFB,0x9CFC,0x9CFD,0x9CFE, -0x9D40,0x9D41,0x9D42,0x9D43,0xB5CE,0x9D44,0x9D45,0x9D46, -0x9D47,0xE4EF,0x9D48,0x9D49,0x9D4A,0x9D4B,0x9D4C,0x9D4D, -0x9D4E,0x9D4F,0xC6AF,0x9D50,0x9D51,0x9D52,0xC6E1,0x9D53, -0x9D54,0xE4F5,0x9D55,0x9D56,0x9D57,0x9D58,0x9D59,0xC2A9, -0x9D5A,0x9D5B,0x9D5C,0xC0EC,0xD1DD,0xE4EE,0x9D5D,0x9D5E, -0x9D5F,0x9D60,0x9D61,0x9D62,0x9D63,0x9D64,0x9D65,0x9D66, -0xC4AE,0x9D67,0x9D68,0x9D69,0xE4ED,0x9D6A,0x9D6B,0x9D6C, -0x9D6D,0xE4F6,0xE4F4,0xC2FE,0x9D6E,0xE4DD,0x9D6F,0xE4F0, -0x9D70,0xCAFE,0x9D71,0xD5C4,0x9D72,0x9D73,0xE4F1,0x9D74, -0x9D75,0x9D76,0x9D77,0x9D78,0x9D79,0x9D7A,0xD1FA,0x9D7B, -0x9D7C,0x9D7D,0x9D7E,0x9D80,0x9D81,0x9D82,0xE4EB,0xE4EC, -0x9D83,0x9D84,0x9D85,0xE4F2,0x9D86,0xCEAB,0x9D87,0x9D88, -0x9D89,0x9D8A,0x9D8B,0x9D8C,0x9D8D,0x9D8E,0x9D8F,0x9D90, -0xC5CB,0x9D91,0x9D92,0x9D93,0xC7B1,0x9D94,0xC2BA,0x9D95, -0x9D96,0x9D97,0xE4EA,0x9D98,0x9D99,0x9D9A,0xC1CA,0x9D9B, -0x9D9C,0x9D9D,0x9D9E,0x9D9F,0x9DA0,0xCCB6,0xB3B1,0x9DA1, -0x9DA2,0x9DA3,0xE4FB,0x9DA4,0xE4F3,0x9DA5,0x9DA6,0x9DA7, -0xE4FA,0x9DA8,0xE4FD,0x9DA9,0xE4FC,0x9DAA,0x9DAB,0x9DAC, -0x9DAD,0x9DAE,0x9DAF,0x9DB0,0xB3CE,0x9DB1,0x9DB2,0x9DB3, -0xB3BA,0xE4F7,0x9DB4,0x9DB5,0xE4F9,0xE4F8,0xC5EC,0x9DB6, -0x9DB7,0x9DB8,0x9DB9,0x9DBA,0x9DBB,0x9DBC,0x9DBD,0x9DBE, -0x9DBF,0x9DC0,0x9DC1,0x9DC2,0xC0BD,0x9DC3,0x9DC4,0x9DC5, -0x9DC6,0xD4E8,0x9DC7,0x9DC8,0x9DC9,0x9DCA,0x9DCB,0xE5A2, -0x9DCC,0x9DCD,0x9DCE,0x9DCF,0x9DD0,0x9DD1,0x9DD2,0x9DD3, -0x9DD4,0x9DD5,0x9DD6,0xB0C4,0x9DD7,0x9DD8,0xE5A4,0x9DD9, -0x9DDA,0xE5A3,0x9DDB,0x9DDC,0x9DDD,0x9DDE,0x9DDF,0x9DE0, -0xBCA4,0x9DE1,0xE5A5,0x9DE2,0x9DE3,0x9DE4,0x9DE5,0x9DE6, -0x9DE7,0xE5A1,0x9DE8,0x9DE9,0x9DEA,0x9DEB,0x9DEC,0x9DED, -0x9DEE,0xE4FE,0xB1F4,0x9DEF,0x9DF0,0x9DF1,0x9DF2,0x9DF3, -0x9DF4,0x9DF5,0x9DF6,0x9DF7,0x9DF8,0x9DF9,0xE5A8,0x9DFA, -0xE5A9,0xE5A6,0x9DFB,0x9DFC,0x9DFD,0x9DFE,0x9E40,0x9E41, -0x9E42,0x9E43,0x9E44,0x9E45,0x9E46,0x9E47,0xE5A7,0xE5AA, -0x9E48,0x9E49,0x9E4A,0x9E4B,0x9E4C,0x9E4D,0x9E4E,0x9E4F, -0x9E50,0x9E51,0x9E52,0x9E53,0x9E54,0x9E55,0x9E56,0x9E57, -0x9E58,0x9E59,0x9E5A,0x9E5B,0x9E5C,0x9E5D,0x9E5E,0x9E5F, -0x9E60,0x9E61,0x9E62,0x9E63,0x9E64,0x9E65,0x9E66,0x9E67, -0x9E68,0xC6D9,0x9E69,0x9E6A,0x9E6B,0x9E6C,0x9E6D,0x9E6E, -0x9E6F,0x9E70,0xE5AB,0xE5AD,0x9E71,0x9E72,0x9E73,0x9E74, -0x9E75,0x9E76,0x9E77,0xE5AC,0x9E78,0x9E79,0x9E7A,0x9E7B, -0x9E7C,0x9E7D,0x9E7E,0x9E80,0x9E81,0x9E82,0x9E83,0x9E84, -0x9E85,0x9E86,0x9E87,0x9E88,0x9E89,0xE5AF,0x9E8A,0x9E8B, -0x9E8C,0xE5AE,0x9E8D,0x9E8E,0x9E8F,0x9E90,0x9E91,0x9E92, -0x9E93,0x9E94,0x9E95,0x9E96,0x9E97,0x9E98,0x9E99,0x9E9A, -0x9E9B,0x9E9C,0x9E9D,0x9E9E,0xB9E0,0x9E9F,0x9EA0,0xE5B0, -0x9EA1,0x9EA2,0x9EA3,0x9EA4,0x9EA5,0x9EA6,0x9EA7,0x9EA8, -0x9EA9,0x9EAA,0x9EAB,0x9EAC,0x9EAD,0x9EAE,0xE5B1,0x9EAF, -0x9EB0,0x9EB1,0x9EB2,0x9EB3,0x9EB4,0x9EB5,0x9EB6,0x9EB7, -0x9EB8,0x9EB9,0x9EBA,0xBBF0,0xECE1,0xC3F0,0x9EBB,0xB5C6, -0xBBD2,0x9EBC,0x9EBD,0x9EBE,0x9EBF,0xC1E9,0xD4EE,0x9EC0, -0xBEC4,0x9EC1,0x9EC2,0x9EC3,0xD7C6,0x9EC4,0xD4D6,0xB2D3, -0xECBE,0x9EC5,0x9EC6,0x9EC7,0x9EC8,0xEAC1,0x9EC9,0x9ECA, -0x9ECB,0xC2AF,0xB4B6,0x9ECC,0x9ECD,0x9ECE,0xD1D7,0x9ECF, -0x9ED0,0x9ED1,0xB3B4,0x9ED2,0xC8B2,0xBFBB,0xECC0,0x9ED3, -0x9ED4,0xD6CB,0x9ED5,0x9ED6,0xECBF,0xECC1,0x9ED7,0x9ED8, -0x9ED9,0x9EDA,0x9EDB,0x9EDC,0x9EDD,0x9EDE,0x9EDF,0x9EE0, -0x9EE1,0x9EE2,0x9EE3,0xECC5,0xBEE6,0xCCBF,0xC5DA,0xBEBC, -0x9EE4,0xECC6,0x9EE5,0xB1FE,0x9EE6,0x9EE7,0x9EE8,0xECC4, -0xD5A8,0xB5E3,0x9EE9,0xECC2,0xC1B6,0xB3E3,0x9EEA,0x9EEB, -0xECC3,0xCBB8,0xC0C3,0xCCFE,0x9EEC,0x9EED,0x9EEE,0x9EEF, -0xC1D2,0x9EF0,0xECC8,0x9EF1,0x9EF2,0x9EF3,0x9EF4,0x9EF5, -0x9EF6,0x9EF7,0x9EF8,0x9EF9,0x9EFA,0x9EFB,0x9EFC,0x9EFD, -0xBAE6,0xC0D3,0x9EFE,0xD6F2,0x9F40,0x9F41,0x9F42,0xD1CC, -0x9F43,0x9F44,0x9F45,0x9F46,0xBFBE,0x9F47,0xB7B3,0xC9D5, -0xECC7,0xBBE2,0x9F48,0xCCCC,0xBDFD,0xC8C8,0x9F49,0xCFA9, -0x9F4A,0x9F4B,0x9F4C,0x9F4D,0x9F4E,0x9F4F,0x9F50,0xCDE9, -0x9F51,0xC5EB,0x9F52,0x9F53,0x9F54,0xB7E9,0x9F55,0x9F56, -0x9F57,0x9F58,0x9F59,0x9F5A,0x9F5B,0x9F5C,0x9F5D,0x9F5E, -0x9F5F,0xD1C9,0xBAB8,0x9F60,0x9F61,0x9F62,0x9F63,0x9F64, -0xECC9,0x9F65,0x9F66,0xECCA,0x9F67,0xBBC0,0xECCB,0x9F68, -0xECE2,0xB1BA,0xB7D9,0x9F69,0x9F6A,0x9F6B,0x9F6C,0x9F6D, -0x9F6E,0x9F6F,0x9F70,0x9F71,0x9F72,0x9F73,0xBDB9,0x9F74, -0x9F75,0x9F76,0x9F77,0x9F78,0x9F79,0x9F7A,0x9F7B,0xECCC, -0xD1E6,0xECCD,0x9F7C,0x9F7D,0x9F7E,0x9F80,0xC8BB,0x9F81, -0x9F82,0x9F83,0x9F84,0x9F85,0x9F86,0x9F87,0x9F88,0x9F89, -0x9F8A,0x9F8B,0x9F8C,0x9F8D,0x9F8E,0xECD1,0x9F8F,0x9F90, -0x9F91,0x9F92,0xECD3,0x9F93,0xBBCD,0x9F94,0xBCE5,0x9F95, -0x9F96,0x9F97,0x9F98,0x9F99,0x9F9A,0x9F9B,0x9F9C,0x9F9D, -0x9F9E,0x9F9F,0x9FA0,0x9FA1,0xECCF,0x9FA2,0xC9B7,0x9FA3, -0x9FA4,0x9FA5,0x9FA6,0x9FA7,0xC3BA,0x9FA8,0xECE3,0xD5D5, -0xECD0,0x9FA9,0x9FAA,0x9FAB,0x9FAC,0x9FAD,0xD6F3,0x9FAE, -0x9FAF,0x9FB0,0xECD2,0xECCE,0x9FB1,0x9FB2,0x9FB3,0x9FB4, -0xECD4,0x9FB5,0xECD5,0x9FB6,0x9FB7,0xC9BF,0x9FB8,0x9FB9, -0x9FBA,0x9FBB,0x9FBC,0x9FBD,0xCFA8,0x9FBE,0x9FBF,0x9FC0, -0x9FC1,0x9FC2,0xD0DC,0x9FC3,0x9FC4,0x9FC5,0x9FC6,0xD1AC, -0x9FC7,0x9FC8,0x9FC9,0x9FCA,0xC8DB,0x9FCB,0x9FCC,0x9FCD, -0xECD6,0xCEF5,0x9FCE,0x9FCF,0x9FD0,0x9FD1,0x9FD2,0xCAEC, -0xECDA,0x9FD3,0x9FD4,0x9FD5,0x9FD6,0x9FD7,0x9FD8,0x9FD9, -0xECD9,0x9FDA,0x9FDB,0x9FDC,0xB0BE,0x9FDD,0x9FDE,0x9FDF, -0x9FE0,0x9FE1,0x9FE2,0xECD7,0x9FE3,0xECD8,0x9FE4,0x9FE5, -0x9FE6,0xECE4,0x9FE7,0x9FE8,0x9FE9,0x9FEA,0x9FEB,0x9FEC, -0x9FED,0x9FEE,0x9FEF,0xC8BC,0x9FF0,0x9FF1,0x9FF2,0x9FF3, -0x9FF4,0x9FF5,0x9FF6,0x9FF7,0x9FF8,0x9FF9,0xC1C7,0x9FFA, -0x9FFB,0x9FFC,0x9FFD,0x9FFE,0xECDC,0xD1E0,0xA040,0xA041, -0xA042,0xA043,0xA044,0xA045,0xA046,0xA047,0xA048,0xA049, -0xECDB,0xA04A,0xA04B,0xA04C,0xA04D,0xD4EF,0xA04E,0xECDD, -0xA04F,0xA050,0xA051,0xA052,0xA053,0xA054,0xDBC6,0xA055, -0xA056,0xA057,0xA058,0xA059,0xA05A,0xA05B,0xA05C,0xA05D, -0xA05E,0xECDE,0xA05F,0xA060,0xA061,0xA062,0xA063,0xA064, -0xA065,0xA066,0xA067,0xA068,0xA069,0xA06A,0xB1AC,0xA06B, -0xA06C,0xA06D,0xA06E,0xA06F,0xA070,0xA071,0xA072,0xA073, -0xA074,0xA075,0xA076,0xA077,0xA078,0xA079,0xA07A,0xA07B, -0xA07C,0xA07D,0xA07E,0xA080,0xA081,0xECDF,0xA082,0xA083, -0xA084,0xA085,0xA086,0xA087,0xA088,0xA089,0xA08A,0xA08B, -0xECE0,0xA08C,0xD7A6,0xA08D,0xC5C0,0xA08E,0xA08F,0xA090, -0xEBBC,0xB0AE,0xA091,0xA092,0xA093,0xBEF4,0xB8B8,0xD2AF, -0xB0D6,0xB5F9,0xA094,0xD8B3,0xA095,0xCBAC,0xA096,0xE3DD, -0xA097,0xA098,0xA099,0xA09A,0xA09B,0xA09C,0xA09D,0xC6AC, -0xB0E6,0xA09E,0xA09F,0xA0A0,0xC5C6,0xEBB9,0xA0A1,0xA0A2, -0xA0A3,0xA0A4,0xEBBA,0xA0A5,0xA0A6,0xA0A7,0xEBBB,0xA0A8, -0xA0A9,0xD1C0,0xA0AA,0xC5A3,0xA0AB,0xEAF2,0xA0AC,0xC4B2, -0xA0AD,0xC4B5,0xC0CE,0xA0AE,0xA0AF,0xA0B0,0xEAF3,0xC4C1, -0xA0B1,0xCEEF,0xA0B2,0xA0B3,0xA0B4,0xA0B5,0xEAF0,0xEAF4, -0xA0B6,0xA0B7,0xC9FC,0xA0B8,0xA0B9,0xC7A3,0xA0BA,0xA0BB, -0xA0BC,0xCCD8,0xCEFE,0xA0BD,0xA0BE,0xA0BF,0xEAF5,0xEAF6, -0xCFAC,0xC0E7,0xA0C0,0xA0C1,0xEAF7,0xA0C2,0xA0C3,0xA0C4, -0xA0C5,0xA0C6,0xB6BF,0xEAF8,0xA0C7,0xEAF9,0xA0C8,0xEAFA, -0xA0C9,0xA0CA,0xEAFB,0xA0CB,0xA0CC,0xA0CD,0xA0CE,0xA0CF, -0xA0D0,0xA0D1,0xA0D2,0xA0D3,0xA0D4,0xA0D5,0xA0D6,0xEAF1, -0xA0D7,0xA0D8,0xA0D9,0xA0DA,0xA0DB,0xA0DC,0xA0DD,0xA0DE, -0xA0DF,0xA0E0,0xA0E1,0xA0E2,0xC8AE,0xE1EB,0xA0E3,0xB7B8, -0xE1EC,0xA0E4,0xA0E5,0xA0E6,0xE1ED,0xA0E7,0xD7B4,0xE1EE, -0xE1EF,0xD3CC,0xA0E8,0xA0E9,0xA0EA,0xA0EB,0xA0EC,0xA0ED, -0xA0EE,0xE1F1,0xBFF1,0xE1F0,0xB5D2,0xA0EF,0xA0F0,0xA0F1, -0xB1B7,0xA0F2,0xA0F3,0xA0F4,0xA0F5,0xE1F3,0xE1F2,0xA0F6, -0xBAFC,0xA0F7,0xE1F4,0xA0F8,0xA0F9,0xA0FA,0xA0FB,0xB9B7, -0xA0FC,0xBED1,0xA0FD,0xA0FE,0xAA40,0xAA41,0xC4FC,0xAA42, -0xBADD,0xBDC6,0xAA43,0xAA44,0xAA45,0xAA46,0xAA47,0xAA48, -0xE1F5,0xE1F7,0xAA49,0xAA4A,0xB6C0,0xCFC1,0xCAA8,0xE1F6, -0xD5F8,0xD3FC,0xE1F8,0xE1FC,0xE1F9,0xAA4B,0xAA4C,0xE1FA, -0xC0EA,0xAA4D,0xE1FE,0xE2A1,0xC0C7,0xAA4E,0xAA4F,0xAA50, -0xAA51,0xE1FB,0xAA52,0xE1FD,0xAA53,0xAA54,0xAA55,0xAA56, -0xAA57,0xAA58,0xE2A5,0xAA59,0xAA5A,0xAA5B,0xC1D4,0xAA5C, -0xAA5D,0xAA5E,0xAA5F,0xE2A3,0xAA60,0xE2A8,0xB2FE,0xE2A2, -0xAA61,0xAA62,0xAA63,0xC3CD,0xB2C2,0xE2A7,0xE2A6,0xAA64, -0xAA65,0xE2A4,0xE2A9,0xAA66,0xAA67,0xE2AB,0xAA68,0xAA69, -0xAA6A,0xD0C9,0xD6ED,0xC3A8,0xE2AC,0xAA6B,0xCFD7,0xAA6C, -0xAA6D,0xE2AE,0xAA6E,0xAA6F,0xBAEF,0xAA70,0xAA71,0xE9E0, -0xE2AD,0xE2AA,0xAA72,0xAA73,0xAA74,0xAA75,0xBBAB,0xD4B3, -0xAA76,0xAA77,0xAA78,0xAA79,0xAA7A,0xAA7B,0xAA7C,0xAA7D, -0xAA7E,0xAA80,0xAA81,0xAA82,0xAA83,0xE2B0,0xAA84,0xAA85, -0xE2AF,0xAA86,0xE9E1,0xAA87,0xAA88,0xAA89,0xAA8A,0xE2B1, -0xAA8B,0xAA8C,0xAA8D,0xAA8E,0xAA8F,0xAA90,0xAA91,0xAA92, -0xE2B2,0xAA93,0xAA94,0xAA95,0xAA96,0xAA97,0xAA98,0xAA99, -0xAA9A,0xAA9B,0xAA9C,0xAA9D,0xE2B3,0xCCA1,0xAA9E,0xE2B4, -0xAA9F,0xAAA0,0xAB40,0xAB41,0xAB42,0xAB43,0xAB44,0xAB45, -0xAB46,0xAB47,0xAB48,0xAB49,0xAB4A,0xAB4B,0xE2B5,0xAB4C, -0xAB4D,0xAB4E,0xAB4F,0xAB50,0xD0FE,0xAB51,0xAB52,0xC2CA, -0xAB53,0xD3F1,0xAB54,0xCDF5,0xAB55,0xAB56,0xE7E0,0xAB57, -0xAB58,0xE7E1,0xAB59,0xAB5A,0xAB5B,0xAB5C,0xBEC1,0xAB5D, -0xAB5E,0xAB5F,0xAB60,0xC2EA,0xAB61,0xAB62,0xAB63,0xE7E4, -0xAB64,0xAB65,0xE7E3,0xAB66,0xAB67,0xAB68,0xAB69,0xAB6A, -0xAB6B,0xCDE6,0xAB6C,0xC3B5,0xAB6D,0xAB6E,0xE7E2,0xBBB7, -0xCFD6,0xAB6F,0xC1E1,0xE7E9,0xAB70,0xAB71,0xAB72,0xE7E8, -0xAB73,0xAB74,0xE7F4,0xB2A3,0xAB75,0xAB76,0xAB77,0xAB78, -0xE7EA,0xAB79,0xE7E6,0xAB7A,0xAB7B,0xAB7C,0xAB7D,0xAB7E, -0xE7EC,0xE7EB,0xC9BA,0xAB80,0xAB81,0xD5E4,0xAB82,0xE7E5, -0xB7A9,0xE7E7,0xAB83,0xAB84,0xAB85,0xAB86,0xAB87,0xAB88, -0xAB89,0xE7EE,0xAB8A,0xAB8B,0xAB8C,0xAB8D,0xE7F3,0xAB8E, -0xD6E9,0xAB8F,0xAB90,0xAB91,0xAB92,0xE7ED,0xAB93,0xE7F2, -0xAB94,0xE7F1,0xAB95,0xAB96,0xAB97,0xB0E0,0xAB98,0xAB99, -0xAB9A,0xAB9B,0xE7F5,0xAB9C,0xAB9D,0xAB9E,0xAB9F,0xABA0, -0xAC40,0xAC41,0xAC42,0xAC43,0xAC44,0xAC45,0xAC46,0xAC47, -0xAC48,0xAC49,0xAC4A,0xC7F2,0xAC4B,0xC0C5,0xC0ED,0xAC4C, -0xAC4D,0xC1F0,0xE7F0,0xAC4E,0xAC4F,0xAC50,0xAC51,0xE7F6, -0xCBF6,0xAC52,0xAC53,0xAC54,0xAC55,0xAC56,0xAC57,0xAC58, -0xAC59,0xAC5A,0xE8A2,0xE8A1,0xAC5B,0xAC5C,0xAC5D,0xAC5E, -0xAC5F,0xAC60,0xD7C1,0xAC61,0xAC62,0xE7FA,0xE7F9,0xAC63, -0xE7FB,0xAC64,0xE7F7,0xAC65,0xE7FE,0xAC66,0xE7FD,0xAC67, -0xE7FC,0xAC68,0xAC69,0xC1D5,0xC7D9,0xC5FD,0xC5C3,0xAC6A, -0xAC6B,0xAC6C,0xAC6D,0xAC6E,0xC7ED,0xAC6F,0xAC70,0xAC71, -0xAC72,0xE8A3,0xAC73,0xAC74,0xAC75,0xAC76,0xAC77,0xAC78, -0xAC79,0xAC7A,0xAC7B,0xAC7C,0xAC7D,0xAC7E,0xAC80,0xAC81, -0xAC82,0xAC83,0xAC84,0xAC85,0xAC86,0xE8A6,0xAC87,0xE8A5, -0xAC88,0xE8A7,0xBAF7,0xE7F8,0xE8A4,0xAC89,0xC8F0,0xC9AA, -0xAC8A,0xAC8B,0xAC8C,0xAC8D,0xAC8E,0xAC8F,0xAC90,0xAC91, -0xAC92,0xAC93,0xAC94,0xAC95,0xAC96,0xE8A9,0xAC97,0xAC98, -0xB9E5,0xAC99,0xAC9A,0xAC9B,0xAC9C,0xAC9D,0xD1FE,0xE8A8, -0xAC9E,0xAC9F,0xACA0,0xAD40,0xAD41,0xAD42,0xE8AA,0xAD43, -0xE8AD,0xE8AE,0xAD44,0xC1A7,0xAD45,0xAD46,0xAD47,0xE8AF, -0xAD48,0xAD49,0xAD4A,0xE8B0,0xAD4B,0xAD4C,0xE8AC,0xAD4D, -0xE8B4,0xAD4E,0xAD4F,0xAD50,0xAD51,0xAD52,0xAD53,0xAD54, -0xAD55,0xAD56,0xAD57,0xAD58,0xE8AB,0xAD59,0xE8B1,0xAD5A, -0xAD5B,0xAD5C,0xAD5D,0xAD5E,0xAD5F,0xAD60,0xAD61,0xE8B5, -0xE8B2,0xE8B3,0xAD62,0xAD63,0xAD64,0xAD65,0xAD66,0xAD67, -0xAD68,0xAD69,0xAD6A,0xAD6B,0xAD6C,0xAD6D,0xAD6E,0xAD6F, -0xAD70,0xAD71,0xE8B7,0xAD72,0xAD73,0xAD74,0xAD75,0xAD76, -0xAD77,0xAD78,0xAD79,0xAD7A,0xAD7B,0xAD7C,0xAD7D,0xAD7E, -0xAD80,0xAD81,0xAD82,0xAD83,0xAD84,0xAD85,0xAD86,0xAD87, -0xAD88,0xAD89,0xE8B6,0xAD8A,0xAD8B,0xAD8C,0xAD8D,0xAD8E, -0xAD8F,0xAD90,0xAD91,0xAD92,0xB9CF,0xAD93,0xF0AC,0xAD94, -0xF0AD,0xAD95,0xC6B0,0xB0EA,0xC8BF,0xAD96,0xCDDF,0xAD97, -0xAD98,0xAD99,0xAD9A,0xAD9B,0xAD9C,0xAD9D,0xCECD,0xEAB1, -0xAD9E,0xAD9F,0xADA0,0xAE40,0xEAB2,0xAE41,0xC6BF,0xB4C9, -0xAE42,0xAE43,0xAE44,0xAE45,0xAE46,0xAE47,0xAE48,0xEAB3, -0xAE49,0xAE4A,0xAE4B,0xAE4C,0xD5E7,0xAE4D,0xAE4E,0xAE4F, -0xAE50,0xAE51,0xAE52,0xAE53,0xAE54,0xDDF9,0xAE55,0xEAB4, -0xAE56,0xEAB5,0xAE57,0xEAB6,0xAE58,0xAE59,0xAE5A,0xAE5B, -0xB8CA,0xDFB0,0xC9F5,0xAE5C,0xCCF0,0xAE5D,0xAE5E,0xC9FA, -0xAE5F,0xAE60,0xAE61,0xAE62,0xAE63,0xC9FB,0xAE64,0xAE65, -0xD3C3,0xCBA6,0xAE66,0xB8A6,0xF0AE,0xB1C2,0xAE67,0xE5B8, -0xCCEF,0xD3C9,0xBCD7,0xC9EA,0xAE68,0xB5E7,0xAE69,0xC4D0, -0xB5E9,0xAE6A,0xEEAE,0xBBAD,0xAE6B,0xAE6C,0xE7DE,0xAE6D, -0xEEAF,0xAE6E,0xAE6F,0xAE70,0xAE71,0xB3A9,0xAE72,0xAE73, -0xEEB2,0xAE74,0xAE75,0xEEB1,0xBDE7,0xAE76,0xEEB0,0xCEB7, -0xAE77,0xAE78,0xAE79,0xAE7A,0xC5CF,0xAE7B,0xAE7C,0xAE7D, -0xAE7E,0xC1F4,0xDBCE,0xEEB3,0xD0F3,0xAE80,0xAE81,0xAE82, -0xAE83,0xAE84,0xAE85,0xAE86,0xAE87,0xC2D4,0xC6E8,0xAE88, -0xAE89,0xAE8A,0xB7AC,0xAE8B,0xAE8C,0xAE8D,0xAE8E,0xAE8F, -0xAE90,0xAE91,0xEEB4,0xAE92,0xB3EB,0xAE93,0xAE94,0xAE95, -0xBBFB,0xEEB5,0xAE96,0xAE97,0xAE98,0xAE99,0xAE9A,0xE7DC, -0xAE9B,0xAE9C,0xAE9D,0xEEB6,0xAE9E,0xAE9F,0xBDAE,0xAEA0, -0xAF40,0xAF41,0xAF42,0xF1E2,0xAF43,0xAF44,0xAF45,0xCAE8, -0xAF46,0xD2C9,0xF0DA,0xAF47,0xF0DB,0xAF48,0xF0DC,0xC1C6, -0xAF49,0xB8ED,0xBECE,0xAF4A,0xAF4B,0xF0DE,0xAF4C,0xC5B1, -0xF0DD,0xD1F1,0xAF4D,0xF0E0,0xB0CC,0xBDEA,0xAF4E,0xAF4F, -0xAF50,0xAF51,0xAF52,0xD2DF,0xF0DF,0xAF53,0xB4AF,0xB7E8, -0xF0E6,0xF0E5,0xC6A3,0xF0E1,0xF0E2,0xB4C3,0xAF54,0xAF55, -0xF0E3,0xD5EE,0xAF56,0xAF57,0xCCDB,0xBED2,0xBCB2,0xAF58, -0xAF59,0xAF5A,0xF0E8,0xF0E7,0xF0E4,0xB2A1,0xAF5B,0xD6A2, -0xD3B8,0xBEB7,0xC8AC,0xAF5C,0xAF5D,0xF0EA,0xAF5E,0xAF5F, -0xAF60,0xAF61,0xD1F7,0xAF62,0xD6CC,0xBADB,0xF0E9,0xAF63, -0xB6BB,0xAF64,0xAF65,0xCDB4,0xAF66,0xAF67,0xC6A6,0xAF68, -0xAF69,0xAF6A,0xC1A1,0xF0EB,0xF0EE,0xAF6B,0xF0ED,0xF0F0, -0xF0EC,0xAF6C,0xBBBE,0xF0EF,0xAF6D,0xAF6E,0xAF6F,0xAF70, -0xCCB5,0xF0F2,0xAF71,0xAF72,0xB3D5,0xAF73,0xAF74,0xAF75, -0xAF76,0xB1D4,0xAF77,0xAF78,0xF0F3,0xAF79,0xAF7A,0xF0F4, -0xF0F6,0xB4E1,0xAF7B,0xF0F1,0xAF7C,0xF0F7,0xAF7D,0xAF7E, -0xAF80,0xAF81,0xF0FA,0xAF82,0xF0F8,0xAF83,0xAF84,0xAF85, -0xF0F5,0xAF86,0xAF87,0xAF88,0xAF89,0xF0FD,0xAF8A,0xF0F9, -0xF0FC,0xF0FE,0xAF8B,0xF1A1,0xAF8C,0xAF8D,0xAF8E,0xCEC1, -0xF1A4,0xAF8F,0xF1A3,0xAF90,0xC1F6,0xF0FB,0xCADD,0xAF91, -0xAF92,0xB4F1,0xB1F1,0xCCB1,0xAF93,0xF1A6,0xAF94,0xAF95, -0xF1A7,0xAF96,0xAF97,0xF1AC,0xD5CE,0xF1A9,0xAF98,0xAF99, -0xC8B3,0xAF9A,0xAF9B,0xAF9C,0xF1A2,0xAF9D,0xF1AB,0xF1A8, -0xF1A5,0xAF9E,0xAF9F,0xF1AA,0xAFA0,0xB040,0xB041,0xB042, -0xB043,0xB044,0xB045,0xB046,0xB0A9,0xF1AD,0xB047,0xB048, -0xB049,0xB04A,0xB04B,0xB04C,0xF1AF,0xB04D,0xF1B1,0xB04E, -0xB04F,0xB050,0xB051,0xB052,0xF1B0,0xB053,0xF1AE,0xB054, -0xB055,0xB056,0xB057,0xD1A2,0xB058,0xB059,0xB05A,0xB05B, -0xB05C,0xB05D,0xB05E,0xF1B2,0xB05F,0xB060,0xB061,0xF1B3, -0xB062,0xB063,0xB064,0xB065,0xB066,0xB067,0xB068,0xB069, -0xB9EF,0xB06A,0xB06B,0xB5C7,0xB06C,0xB0D7,0xB0D9,0xB06D, -0xB06E,0xB06F,0xD4ED,0xB070,0xB5C4,0xB071,0xBDD4,0xBBCA, -0xF0A7,0xB072,0xB073,0xB8DE,0xB074,0xB075,0xF0A8,0xB076, -0xB077,0xB0A8,0xB078,0xF0A9,0xB079,0xB07A,0xCDEE,0xB07B, -0xB07C,0xF0AA,0xB07D,0xB07E,0xB080,0xB081,0xB082,0xB083, -0xB084,0xB085,0xB086,0xB087,0xF0AB,0xB088,0xB089,0xB08A, -0xB08B,0xB08C,0xB08D,0xB08E,0xB08F,0xB090,0xC6A4,0xB091, -0xB092,0xD6E5,0xF1E4,0xB093,0xF1E5,0xB094,0xB095,0xB096, -0xB097,0xB098,0xB099,0xB09A,0xB09B,0xB09C,0xB09D,0xC3F3, -0xB09E,0xB09F,0xD3DB,0xB0A0,0xB140,0xD6D1,0xC5E8,0xB141, -0xD3AF,0xB142,0xD2E6,0xB143,0xB144,0xEEC1,0xB0BB,0xD5B5, -0xD1CE,0xBCE0,0xBAD0,0xB145,0xBFF8,0xB146,0xB8C7,0xB5C1, -0xC5CC,0xB147,0xB148,0xCAA2,0xB149,0xB14A,0xB14B,0xC3CB, -0xB14C,0xB14D,0xB14E,0xB14F,0xB150,0xEEC2,0xB151,0xB152, -0xB153,0xB154,0xB155,0xB156,0xB157,0xB158,0xC4BF,0xB6A2, -0xB159,0xEDEC,0xC3A4,0xB15A,0xD6B1,0xB15B,0xB15C,0xB15D, -0xCFE0,0xEDEF,0xB15E,0xB15F,0xC5CE,0xB160,0xB6DC,0xB161, -0xB162,0xCAA1,0xB163,0xB164,0xEDED,0xB165,0xB166,0xEDF0, -0xEDF1,0xC3BC,0xB167,0xBFB4,0xB168,0xEDEE,0xB169,0xB16A, -0xB16B,0xB16C,0xB16D,0xB16E,0xB16F,0xB170,0xB171,0xB172, -0xB173,0xEDF4,0xEDF2,0xB174,0xB175,0xB176,0xB177,0xD5E6, -0xC3DF,0xB178,0xEDF3,0xB179,0xB17A,0xB17B,0xEDF6,0xB17C, -0xD5A3,0xD1A3,0xB17D,0xB17E,0xB180,0xEDF5,0xB181,0xC3D0, -0xB182,0xB183,0xB184,0xB185,0xB186,0xEDF7,0xBFF4,0xBEEC, -0xEDF8,0xB187,0xCCF7,0xB188,0xD1DB,0xB189,0xB18A,0xB18B, -0xD7C5,0xD5F6,0xB18C,0xEDFC,0xB18D,0xB18E,0xB18F,0xEDFB, -0xB190,0xB191,0xB192,0xB193,0xB194,0xB195,0xB196,0xB197, -0xEDF9,0xEDFA,0xB198,0xB199,0xB19A,0xB19B,0xB19C,0xB19D, -0xB19E,0xB19F,0xEDFD,0xBEA6,0xB1A0,0xB240,0xB241,0xB242, -0xB243,0xCBAF,0xEEA1,0xB6BD,0xB244,0xEEA2,0xC4C0,0xB245, -0xEDFE,0xB246,0xB247,0xBDDE,0xB2C7,0xB248,0xB249,0xB24A, -0xB24B,0xB24C,0xB24D,0xB24E,0xB24F,0xB250,0xB251,0xB252, -0xB253,0xB6C3,0xB254,0xB255,0xB256,0xEEA5,0xD8BA,0xEEA3, -0xEEA6,0xB257,0xB258,0xB259,0xC3E9,0xB3F2,0xB25A,0xB25B, -0xB25C,0xB25D,0xB25E,0xB25F,0xEEA7,0xEEA4,0xCFB9,0xB260, -0xB261,0xEEA8,0xC2F7,0xB262,0xB263,0xB264,0xB265,0xB266, -0xB267,0xB268,0xB269,0xB26A,0xB26B,0xB26C,0xB26D,0xEEA9, -0xEEAA,0xB26E,0xDEAB,0xB26F,0xB270,0xC6B3,0xB271,0xC7C6, -0xB272,0xD6F5,0xB5C9,0xB273,0xCBB2,0xB274,0xB275,0xB276, -0xEEAB,0xB277,0xB278,0xCDAB,0xB279,0xEEAC,0xB27A,0xB27B, -0xB27C,0xB27D,0xB27E,0xD5B0,0xB280,0xEEAD,0xB281,0xF6C4, -0xB282,0xB283,0xB284,0xB285,0xB286,0xB287,0xB288,0xB289, -0xB28A,0xB28B,0xB28C,0xB28D,0xB28E,0xDBC7,0xB28F,0xB290, -0xB291,0xB292,0xB293,0xB294,0xB295,0xB296,0xB297,0xB4A3, -0xB298,0xB299,0xB29A,0xC3AC,0xF1E6,0xB29B,0xB29C,0xB29D, -0xB29E,0xB29F,0xCAB8,0xD2D3,0xB2A0,0xD6AA,0xB340,0xEFF2, -0xB341,0xBED8,0xB342,0xBDC3,0xEFF3,0xB6CC,0xB0AB,0xB343, -0xB344,0xB345,0xB346,0xCAAF,0xB347,0xB348,0xEDB6,0xB349, -0xEDB7,0xB34A,0xB34B,0xB34C,0xB34D,0xCEF9,0xB7AF,0xBFF3, -0xEDB8,0xC2EB,0xC9B0,0xB34E,0xB34F,0xB350,0xB351,0xB352, -0xB353,0xEDB9,0xB354,0xB355,0xC6F6,0xBFB3,0xB356,0xB357, -0xB358,0xEDBC,0xC5F8,0xB359,0xD1D0,0xB35A,0xD7A9,0xEDBA, -0xEDBB,0xB35B,0xD1E2,0xB35C,0xEDBF,0xEDC0,0xB35D,0xEDC4, -0xB35E,0xB35F,0xB360,0xEDC8,0xB361,0xEDC6,0xEDCE,0xD5E8, -0xB362,0xEDC9,0xB363,0xB364,0xEDC7,0xEDBE,0xB365,0xB366, -0xC5E9,0xB367,0xB368,0xB369,0xC6C6,0xB36A,0xB36B,0xC9E9, -0xD4D2,0xEDC1,0xEDC2,0xEDC3,0xEDC5,0xB36C,0xC0F9,0xB36D, -0xB4A1,0xB36E,0xB36F,0xB370,0xB371,0xB9E8,0xB372,0xEDD0, -0xB373,0xB374,0xB375,0xB376,0xEDD1,0xB377,0xEDCA,0xB378, -0xEDCF,0xB379,0xCEF8,0xB37A,0xB37B,0xCBB6,0xEDCC,0xEDCD, -0xB37C,0xB37D,0xB37E,0xB380,0xB381,0xCFF5,0xB382,0xB383, -0xB384,0xB385,0xB386,0xB387,0xB388,0xB389,0xB38A,0xB38B, -0xB38C,0xB38D,0xEDD2,0xC1F2,0xD3B2,0xEDCB,0xC8B7,0xB38E, -0xB38F,0xB390,0xB391,0xB392,0xB393,0xB394,0xB395,0xBCEF, -0xB396,0xB397,0xB398,0xB399,0xC5F0,0xB39A,0xB39B,0xB39C, -0xB39D,0xB39E,0xB39F,0xB3A0,0xB440,0xB441,0xB442,0xEDD6, -0xB443,0xB5EF,0xB444,0xB445,0xC2B5,0xB0AD,0xCBE9,0xB446, -0xB447,0xB1AE,0xB448,0xEDD4,0xB449,0xB44A,0xB44B,0xCDEB, -0xB5E2,0xB44C,0xEDD5,0xEDD3,0xEDD7,0xB44D,0xB44E,0xB5FA, -0xB44F,0xEDD8,0xB450,0xEDD9,0xB451,0xEDDC,0xB452,0xB1CC, -0xB453,0xB454,0xB455,0xB456,0xB457,0xB458,0xB459,0xB45A, -0xC5F6,0xBCEE,0xEDDA,0xCCBC,0xB2EA,0xB45B,0xB45C,0xB45D, -0xB45E,0xEDDB,0xB45F,0xB460,0xB461,0xB462,0xC4EB,0xB463, -0xB464,0xB4C5,0xB465,0xB466,0xB467,0xB0F5,0xB468,0xB469, -0xB46A,0xEDDF,0xC0DA,0xB4E8,0xB46B,0xB46C,0xB46D,0xB46E, -0xC5CD,0xB46F,0xB470,0xB471,0xEDDD,0xBFC4,0xB472,0xB473, -0xB474,0xEDDE,0xB475,0xB476,0xB477,0xB478,0xB479,0xB47A, -0xB47B,0xB47C,0xB47D,0xB47E,0xB480,0xB481,0xB482,0xB483, -0xC4A5,0xB484,0xB485,0xB486,0xEDE0,0xB487,0xB488,0xB489, -0xB48A,0xB48B,0xEDE1,0xB48C,0xEDE3,0xB48D,0xB48E,0xC1D7, -0xB48F,0xB490,0xBBC7,0xB491,0xB492,0xB493,0xB494,0xB495, -0xB496,0xBDB8,0xB497,0xB498,0xB499,0xEDE2,0xB49A,0xB49B, -0xB49C,0xB49D,0xB49E,0xB49F,0xB4A0,0xB540,0xB541,0xB542, -0xB543,0xB544,0xB545,0xEDE4,0xB546,0xB547,0xB548,0xB549, -0xB54A,0xB54B,0xB54C,0xB54D,0xB54E,0xB54F,0xEDE6,0xB550, -0xB551,0xB552,0xB553,0xB554,0xEDE5,0xB555,0xB556,0xB557, -0xB558,0xB559,0xB55A,0xB55B,0xB55C,0xB55D,0xB55E,0xB55F, -0xB560,0xB561,0xB562,0xB563,0xEDE7,0xB564,0xB565,0xB566, -0xB567,0xB568,0xCABE,0xECEA,0xC0F1,0xB569,0xC9E7,0xB56A, -0xECEB,0xC6EE,0xB56B,0xB56C,0xB56D,0xB56E,0xECEC,0xB56F, -0xC6ED,0xECED,0xB570,0xB571,0xB572,0xB573,0xB574,0xB575, -0xB576,0xB577,0xB578,0xECF0,0xB579,0xB57A,0xD7E6,0xECF3, -0xB57B,0xB57C,0xECF1,0xECEE,0xECEF,0xD7A3,0xC9F1,0xCBEE, -0xECF4,0xB57D,0xECF2,0xB57E,0xB580,0xCFE9,0xB581,0xECF6, -0xC6B1,0xB582,0xB583,0xB584,0xB585,0xBCC0,0xB586,0xECF5, -0xB587,0xB588,0xB589,0xB58A,0xB58B,0xB58C,0xB58D,0xB5BB, -0xBBF6,0xB58E,0xECF7,0xB58F,0xB590,0xB591,0xB592,0xB593, -0xD9F7,0xBDFB,0xB594,0xB595,0xC2BB,0xECF8,0xB596,0xB597, -0xB598,0xB599,0xECF9,0xB59A,0xB59B,0xB59C,0xB59D,0xB8A3, -0xB59E,0xB59F,0xB5A0,0xB640,0xB641,0xB642,0xB643,0xB644, -0xB645,0xB646,0xECFA,0xB647,0xB648,0xB649,0xB64A,0xB64B, -0xB64C,0xB64D,0xB64E,0xB64F,0xB650,0xB651,0xB652,0xECFB, -0xB653,0xB654,0xB655,0xB656,0xB657,0xB658,0xB659,0xB65A, -0xB65B,0xB65C,0xB65D,0xECFC,0xB65E,0xB65F,0xB660,0xB661, -0xB662,0xD3ED,0xD8AE,0xC0EB,0xB663,0xC7DD,0xBACC,0xB664, -0xD0E3,0xCBBD,0xB665,0xCDBA,0xB666,0xB667,0xB8D1,0xB668, -0xB669,0xB1FC,0xB66A,0xC7EF,0xB66B,0xD6D6,0xB66C,0xB66D, -0xB66E,0xBFC6,0xC3EB,0xB66F,0xB670,0xEFF5,0xB671,0xB672, -0xC3D8,0xB673,0xB674,0xB675,0xB676,0xB677,0xB678,0xD7E2, -0xB679,0xB67A,0xB67B,0xEFF7,0xB3D3,0xB67C,0xC7D8,0xD1ED, -0xB67D,0xD6C8,0xB67E,0xEFF8,0xB680,0xEFF6,0xB681,0xBBFD, -0xB3C6,0xB682,0xB683,0xB684,0xB685,0xB686,0xB687,0xB688, -0xBDD5,0xB689,0xB68A,0xD2C6,0xB68B,0xBBE0,0xB68C,0xB68D, -0xCFA1,0xB68E,0xEFFC,0xEFFB,0xB68F,0xB690,0xEFF9,0xB691, -0xB692,0xB693,0xB694,0xB3CC,0xB695,0xC9D4,0xCBB0,0xB696, -0xB697,0xB698,0xB699,0xB69A,0xEFFE,0xB69B,0xB69C,0xB0DE, -0xB69D,0xB69E,0xD6C9,0xB69F,0xB6A0,0xB740,0xEFFD,0xB741, -0xB3ED,0xB742,0xB743,0xF6D5,0xB744,0xB745,0xB746,0xB747, -0xB748,0xB749,0xB74A,0xB74B,0xB74C,0xB74D,0xB74E,0xB74F, -0xB750,0xB751,0xB752,0xCEC8,0xB753,0xB754,0xB755,0xF0A2, -0xB756,0xF0A1,0xB757,0xB5BE,0xBCDA,0xBBFC,0xB758,0xB8E5, -0xB759,0xB75A,0xB75B,0xB75C,0xB75D,0xB75E,0xC4C2,0xB75F, -0xB760,0xB761,0xB762,0xB763,0xB764,0xB765,0xB766,0xB767, -0xB768,0xF0A3,0xB769,0xB76A,0xB76B,0xB76C,0xB76D,0xCBEB, -0xB76E,0xB76F,0xB770,0xB771,0xB772,0xB773,0xB774,0xB775, -0xB776,0xB777,0xB778,0xB779,0xB77A,0xB77B,0xB77C,0xB77D, -0xB77E,0xB780,0xB781,0xB782,0xB783,0xB784,0xB785,0xB786, -0xF0A6,0xB787,0xB788,0xB789,0xD1A8,0xB78A,0xBEBF,0xC7EE, -0xF1B6,0xF1B7,0xBFD5,0xB78B,0xB78C,0xB78D,0xB78E,0xB4A9, -0xF1B8,0xCDBB,0xB78F,0xC7D4,0xD5AD,0xB790,0xF1B9,0xB791, -0xF1BA,0xB792,0xB793,0xB794,0xB795,0xC7CF,0xB796,0xB797, -0xB798,0xD2A4,0xD6CF,0xB799,0xB79A,0xF1BB,0xBDD1,0xB4B0, -0xBEBD,0xB79B,0xB79C,0xB79D,0xB4DC,0xCED1,0xB79E,0xBFDF, -0xF1BD,0xB79F,0xB7A0,0xB840,0xB841,0xBFFA,0xF1BC,0xB842, -0xF1BF,0xB843,0xB844,0xB845,0xF1BE,0xF1C0,0xB846,0xB847, -0xB848,0xB849,0xB84A,0xF1C1,0xB84B,0xB84C,0xB84D,0xB84E, -0xB84F,0xB850,0xB851,0xB852,0xB853,0xB854,0xB855,0xC1FE, -0xB856,0xB857,0xB858,0xB859,0xB85A,0xB85B,0xB85C,0xB85D, -0xB85E,0xB85F,0xB860,0xC1A2,0xB861,0xB862,0xB863,0xB864, -0xB865,0xB866,0xB867,0xB868,0xB869,0xB86A,0xCAFA,0xB86B, -0xB86C,0xD5BE,0xB86D,0xB86E,0xB86F,0xB870,0xBEBA,0xBEB9, -0xD5C2,0xB871,0xB872,0xBFA2,0xB873,0xCDAF,0xF1B5,0xB874, -0xB875,0xB876,0xB877,0xB878,0xB879,0xBDDF,0xB87A,0xB6CB, -0xB87B,0xB87C,0xB87D,0xB87E,0xB880,0xB881,0xB882,0xB883, -0xB884,0xD6F1,0xF3C3,0xB885,0xB886,0xF3C4,0xB887,0xB8CD, -0xB888,0xB889,0xB88A,0xF3C6,0xF3C7,0xB88B,0xB0CA,0xB88C, -0xF3C5,0xB88D,0xF3C9,0xCBF1,0xB88E,0xB88F,0xB890,0xF3CB, -0xB891,0xD0A6,0xB892,0xB893,0xB1CA,0xF3C8,0xB894,0xB895, -0xB896,0xF3CF,0xB897,0xB5D1,0xB898,0xB899,0xF3D7,0xB89A, -0xF3D2,0xB89B,0xB89C,0xB89D,0xF3D4,0xF3D3,0xB7FB,0xB89E, -0xB1BF,0xB89F,0xF3CE,0xF3CA,0xB5DA,0xB8A0,0xF3D0,0xB940, -0xB941,0xF3D1,0xB942,0xF3D5,0xB943,0xB944,0xB945,0xB946, -0xF3CD,0xB947,0xBCE3,0xB948,0xC1FD,0xB949,0xF3D6,0xB94A, -0xB94B,0xB94C,0xB94D,0xB94E,0xB94F,0xF3DA,0xB950,0xF3CC, -0xB951,0xB5C8,0xB952,0xBDEE,0xF3DC,0xB953,0xB954,0xB7A4, -0xBFF0,0xD6FE,0xCDB2,0xB955,0xB4F0,0xB956,0xB2DF,0xB957, -0xF3D8,0xB958,0xF3D9,0xC9B8,0xB959,0xF3DD,0xB95A,0xB95B, -0xF3DE,0xB95C,0xF3E1,0xB95D,0xB95E,0xB95F,0xB960,0xB961, -0xB962,0xB963,0xB964,0xB965,0xB966,0xB967,0xF3DF,0xB968, -0xB969,0xF3E3,0xF3E2,0xB96A,0xB96B,0xF3DB,0xB96C,0xBFEA, -0xB96D,0xB3EF,0xB96E,0xF3E0,0xB96F,0xB970,0xC7A9,0xB971, -0xBCF2,0xB972,0xB973,0xB974,0xB975,0xF3EB,0xB976,0xB977, -0xB978,0xB979,0xB97A,0xB97B,0xB97C,0xB9BF,0xB97D,0xB97E, -0xF3E4,0xB980,0xB981,0xB982,0xB2AD,0xBBFE,0xB983,0xCBE3, -0xB984,0xB985,0xB986,0xB987,0xF3ED,0xF3E9,0xB988,0xB989, -0xB98A,0xB9DC,0xF3EE,0xB98B,0xB98C,0xB98D,0xF3E5,0xF3E6, -0xF3EA,0xC2E1,0xF3EC,0xF3EF,0xF3E8,0xBCFD,0xB98E,0xB98F, -0xB990,0xCFE4,0xB991,0xB992,0xF3F0,0xB993,0xB994,0xB995, -0xF3E7,0xB996,0xB997,0xB998,0xB999,0xB99A,0xB99B,0xB99C, -0xB99D,0xF3F2,0xB99E,0xB99F,0xB9A0,0xBA40,0xD7AD,0xC6AA, -0xBA41,0xBA42,0xBA43,0xBA44,0xF3F3,0xBA45,0xBA46,0xBA47, -0xBA48,0xF3F1,0xBA49,0xC2A8,0xBA4A,0xBA4B,0xBA4C,0xBA4D, -0xBA4E,0xB8DD,0xF3F5,0xBA4F,0xBA50,0xF3F4,0xBA51,0xBA52, -0xBA53,0xB4DB,0xBA54,0xBA55,0xBA56,0xF3F6,0xF3F7,0xBA57, -0xBA58,0xBA59,0xF3F8,0xBA5A,0xBA5B,0xBA5C,0xC0BA,0xBA5D, -0xBA5E,0xC0E9,0xBA5F,0xBA60,0xBA61,0xBA62,0xBA63,0xC5F1, -0xBA64,0xBA65,0xBA66,0xBA67,0xF3FB,0xBA68,0xF3FA,0xBA69, -0xBA6A,0xBA6B,0xBA6C,0xBA6D,0xBA6E,0xBA6F,0xBA70,0xB4D8, -0xBA71,0xBA72,0xBA73,0xF3FE,0xF3F9,0xBA74,0xBA75,0xF3FC, -0xBA76,0xBA77,0xBA78,0xBA79,0xBA7A,0xBA7B,0xF3FD,0xBA7C, -0xBA7D,0xBA7E,0xBA80,0xBA81,0xBA82,0xBA83,0xBA84,0xF4A1, -0xBA85,0xBA86,0xBA87,0xBA88,0xBA89,0xBA8A,0xF4A3,0xBBC9, -0xBA8B,0xBA8C,0xF4A2,0xBA8D,0xBA8E,0xBA8F,0xBA90,0xBA91, -0xBA92,0xBA93,0xBA94,0xBA95,0xBA96,0xBA97,0xBA98,0xBA99, -0xF4A4,0xBA9A,0xBA9B,0xBA9C,0xBA9D,0xBA9E,0xBA9F,0xB2BE, -0xF4A6,0xF4A5,0xBAA0,0xBB40,0xBB41,0xBB42,0xBB43,0xBB44, -0xBB45,0xBB46,0xBB47,0xBB48,0xBB49,0xBCAE,0xBB4A,0xBB4B, -0xBB4C,0xBB4D,0xBB4E,0xBB4F,0xBB50,0xBB51,0xBB52,0xBB53, -0xBB54,0xBB55,0xBB56,0xBB57,0xBB58,0xBB59,0xBB5A,0xBB5B, -0xBB5C,0xBB5D,0xBB5E,0xBB5F,0xBB60,0xBB61,0xBB62,0xBB63, -0xBB64,0xBB65,0xBB66,0xBB67,0xBB68,0xBB69,0xBB6A,0xBB6B, -0xBB6C,0xBB6D,0xBB6E,0xC3D7,0xD9E1,0xBB6F,0xBB70,0xBB71, -0xBB72,0xBB73,0xBB74,0xC0E0,0xF4CC,0xD7D1,0xBB75,0xBB76, -0xBB77,0xBB78,0xBB79,0xBB7A,0xBB7B,0xBB7C,0xBB7D,0xBB7E, -0xBB80,0xB7DB,0xBB81,0xBB82,0xBB83,0xBB84,0xBB85,0xBB86, -0xBB87,0xF4CE,0xC1A3,0xBB88,0xBB89,0xC6C9,0xBB8A,0xB4D6, -0xD5B3,0xBB8B,0xBB8C,0xBB8D,0xF4D0,0xF4CF,0xF4D1,0xCBDA, -0xBB8E,0xBB8F,0xF4D2,0xBB90,0xD4C1,0xD6E0,0xBB91,0xBB92, -0xBB93,0xBB94,0xB7E0,0xBB95,0xBB96,0xBB97,0xC1B8,0xBB98, -0xBB99,0xC1BB,0xF4D3,0xBEAC,0xBB9A,0xBB9B,0xBB9C,0xBB9D, -0xBB9E,0xB4E2,0xBB9F,0xBBA0,0xF4D4,0xF4D5,0xBEAB,0xBC40, -0xBC41,0xF4D6,0xBC42,0xBC43,0xBC44,0xF4DB,0xBC45,0xF4D7, -0xF4DA,0xBC46,0xBAFD,0xBC47,0xF4D8,0xF4D9,0xBC48,0xBC49, -0xBC4A,0xBC4B,0xBC4C,0xBC4D,0xBC4E,0xB8E2,0xCCC7,0xF4DC, -0xBC4F,0xB2DA,0xBC50,0xBC51,0xC3D3,0xBC52,0xBC53,0xD4E3, -0xBFB7,0xBC54,0xBC55,0xBC56,0xBC57,0xBC58,0xBC59,0xBC5A, -0xF4DD,0xBC5B,0xBC5C,0xBC5D,0xBC5E,0xBC5F,0xBC60,0xC5B4, -0xBC61,0xBC62,0xBC63,0xBC64,0xBC65,0xBC66,0xBC67,0xBC68, -0xF4E9,0xBC69,0xBC6A,0xCFB5,0xBC6B,0xBC6C,0xBC6D,0xBC6E, -0xBC6F,0xBC70,0xBC71,0xBC72,0xBC73,0xBC74,0xBC75,0xBC76, -0xBC77,0xBC78,0xCEC9,0xBC79,0xBC7A,0xBC7B,0xBC7C,0xBC7D, -0xBC7E,0xBC80,0xBC81,0xBC82,0xBC83,0xBC84,0xBC85,0xBC86, -0xBC87,0xBC88,0xBC89,0xBC8A,0xBC8B,0xBC8C,0xBC8D,0xBC8E, -0xCBD8,0xBC8F,0xCBF7,0xBC90,0xBC91,0xBC92,0xBC93,0xBDF4, -0xBC94,0xBC95,0xBC96,0xD7CF,0xBC97,0xBC98,0xBC99,0xC0DB, -0xBC9A,0xBC9B,0xBC9C,0xBC9D,0xBC9E,0xBC9F,0xBCA0,0xBD40, -0xBD41,0xBD42,0xBD43,0xBD44,0xBD45,0xBD46,0xBD47,0xBD48, -0xBD49,0xBD4A,0xBD4B,0xBD4C,0xBD4D,0xBD4E,0xBD4F,0xBD50, -0xBD51,0xBD52,0xBD53,0xBD54,0xBD55,0xBD56,0xBD57,0xBD58, -0xBD59,0xBD5A,0xBD5B,0xBD5C,0xBD5D,0xBD5E,0xBD5F,0xBD60, -0xBD61,0xBD62,0xBD63,0xBD64,0xBD65,0xBD66,0xBD67,0xBD68, -0xBD69,0xBD6A,0xBD6B,0xBD6C,0xBD6D,0xBD6E,0xBD6F,0xBD70, -0xBD71,0xBD72,0xBD73,0xBD74,0xBD75,0xBD76,0xD0F5,0xBD77, -0xBD78,0xBD79,0xBD7A,0xBD7B,0xBD7C,0xBD7D,0xBD7E,0xF4EA, -0xBD80,0xBD81,0xBD82,0xBD83,0xBD84,0xBD85,0xBD86,0xBD87, -0xBD88,0xBD89,0xBD8A,0xBD8B,0xBD8C,0xBD8D,0xBD8E,0xBD8F, -0xBD90,0xBD91,0xBD92,0xBD93,0xBD94,0xBD95,0xBD96,0xBD97, -0xBD98,0xBD99,0xBD9A,0xBD9B,0xBD9C,0xBD9D,0xBD9E,0xBD9F, -0xBDA0,0xBE40,0xBE41,0xBE42,0xBE43,0xBE44,0xBE45,0xBE46, -0xBE47,0xBE48,0xBE49,0xBE4A,0xBE4B,0xBE4C,0xF4EB,0xBE4D, -0xBE4E,0xBE4F,0xBE50,0xBE51,0xBE52,0xBE53,0xF4EC,0xBE54, -0xBE55,0xBE56,0xBE57,0xBE58,0xBE59,0xBE5A,0xBE5B,0xBE5C, -0xBE5D,0xBE5E,0xBE5F,0xBE60,0xBE61,0xBE62,0xBE63,0xBE64, -0xBE65,0xBE66,0xBE67,0xBE68,0xBE69,0xBE6A,0xBE6B,0xBE6C, -0xBE6D,0xBE6E,0xBE6F,0xBE70,0xBE71,0xBE72,0xBE73,0xBE74, -0xBE75,0xBE76,0xBE77,0xBE78,0xBE79,0xBE7A,0xBE7B,0xBE7C, -0xBE7D,0xBE7E,0xBE80,0xBE81,0xBE82,0xBE83,0xBE84,0xBE85, -0xBE86,0xBE87,0xBE88,0xBE89,0xBE8A,0xBE8B,0xBE8C,0xBE8D, -0xBE8E,0xBE8F,0xBE90,0xBE91,0xBE92,0xBE93,0xBE94,0xBE95, -0xBE96,0xBE97,0xBE98,0xBE99,0xBE9A,0xBE9B,0xBE9C,0xBE9D, -0xBE9E,0xBE9F,0xBEA0,0xBF40,0xBF41,0xBF42,0xBF43,0xBF44, -0xBF45,0xBF46,0xBF47,0xBF48,0xBF49,0xBF4A,0xBF4B,0xBF4C, -0xBF4D,0xBF4E,0xBF4F,0xBF50,0xBF51,0xBF52,0xBF53,0xBF54, -0xBF55,0xBF56,0xBF57,0xBF58,0xBF59,0xBF5A,0xBF5B,0xBF5C, -0xBF5D,0xBF5E,0xBF5F,0xBF60,0xBF61,0xBF62,0xBF63,0xBF64, -0xBF65,0xBF66,0xBF67,0xBF68,0xBF69,0xBF6A,0xBF6B,0xBF6C, -0xBF6D,0xBF6E,0xBF6F,0xBF70,0xBF71,0xBF72,0xBF73,0xBF74, -0xBF75,0xBF76,0xBF77,0xBF78,0xBF79,0xBF7A,0xBF7B,0xBF7C, -0xBF7D,0xBF7E,0xBF80,0xF7E3,0xBF81,0xBF82,0xBF83,0xBF84, -0xBF85,0xB7B1,0xBF86,0xBF87,0xBF88,0xBF89,0xBF8A,0xF4ED, -0xBF8B,0xBF8C,0xBF8D,0xBF8E,0xBF8F,0xBF90,0xBF91,0xBF92, -0xBF93,0xBF94,0xBF95,0xBF96,0xBF97,0xBF98,0xBF99,0xBF9A, -0xBF9B,0xBF9C,0xBF9D,0xBF9E,0xBF9F,0xBFA0,0xC040,0xC041, -0xC042,0xC043,0xC044,0xC045,0xC046,0xC047,0xC048,0xC049, -0xC04A,0xC04B,0xC04C,0xC04D,0xC04E,0xC04F,0xC050,0xC051, -0xC052,0xC053,0xC054,0xC055,0xC056,0xC057,0xC058,0xC059, -0xC05A,0xC05B,0xC05C,0xC05D,0xC05E,0xC05F,0xC060,0xC061, -0xC062,0xC063,0xD7EB,0xC064,0xC065,0xC066,0xC067,0xC068, -0xC069,0xC06A,0xC06B,0xC06C,0xC06D,0xC06E,0xC06F,0xC070, -0xC071,0xC072,0xC073,0xC074,0xC075,0xC076,0xC077,0xC078, -0xC079,0xC07A,0xC07B,0xF4EE,0xC07C,0xC07D,0xC07E,0xE6F9, -0xBEC0,0xE6FA,0xBAEC,0xE6FB,0xCFCB,0xE6FC,0xD4BC,0xBCB6, -0xE6FD,0xE6FE,0xBCCD,0xC8D2,0xCEB3,0xE7A1,0xC080,0xB4BF, -0xE7A2,0xC9B4,0xB8D9,0xC4C9,0xC081,0xD7DD,0xC2DA,0xB7D7, -0xD6BD,0xCEC6,0xB7C4,0xC082,0xC083,0xC5A6,0xE7A3,0xCFDF, -0xE7A4,0xE7A5,0xE7A6,0xC1B7,0xD7E9,0xC9F0,0xCFB8,0xD6AF, -0xD6D5,0xE7A7,0xB0ED,0xE7A8,0xE7A9,0xC9DC,0xD2EF,0xBEAD, -0xE7AA,0xB0F3,0xC8DE,0xBDE1,0xE7AB,0xC8C6,0xC084,0xE7AC, -0xBBE6,0xB8F8,0xD1A4,0xE7AD,0xC2E7,0xBEF8,0xBDCA,0xCDB3, -0xE7AE,0xE7AF,0xBEEE,0xD0E5,0xC085,0xCBE7,0xCCD0,0xBCCC, -0xE7B0,0xBCA8,0xD0F7,0xE7B1,0xC086,0xD0F8,0xE7B2,0xE7B3, -0xB4C2,0xE7B4,0xE7B5,0xC9FE,0xCEAC,0xC3E0,0xE7B7,0xB1C1, -0xB3F1,0xC087,0xE7B8,0xE7B9,0xD7DB,0xD5C0,0xE7BA,0xC2CC, -0xD7BA,0xE7BB,0xE7BC,0xE7BD,0xBCEA,0xC3E5,0xC0C2,0xE7BE, -0xE7BF,0xBCA9,0xC088,0xE7C0,0xE7C1,0xE7B6,0xB6D0,0xE7C2, -0xC089,0xE7C3,0xE7C4,0xBBBA,0xB5DE,0xC2C6,0xB1E0,0xE7C5, -0xD4B5,0xE7C6,0xB8BF,0xE7C8,0xE7C7,0xB7EC,0xC08A,0xE7C9, -0xB2F8,0xE7CA,0xE7CB,0xE7CC,0xE7CD,0xE7CE,0xE7CF,0xE7D0, -0xD3A7,0xCBF5,0xE7D1,0xE7D2,0xE7D3,0xE7D4,0xC9C9,0xE7D5, -0xE7D6,0xE7D7,0xE7D8,0xE7D9,0xBDC9,0xE7DA,0xF3BE,0xC08B, -0xB8D7,0xC08C,0xC8B1,0xC08D,0xC08E,0xC08F,0xC090,0xC091, -0xC092,0xC093,0xF3BF,0xC094,0xF3C0,0xF3C1,0xC095,0xC096, -0xC097,0xC098,0xC099,0xC09A,0xC09B,0xC09C,0xC09D,0xC09E, -0xB9DE,0xCDF8,0xC09F,0xC0A0,0xD8E8,0xBAB1,0xC140,0xC2DE, -0xEEB7,0xC141,0xB7A3,0xC142,0xC143,0xC144,0xC145,0xEEB9, -0xC146,0xEEB8,0xB0D5,0xC147,0xC148,0xC149,0xC14A,0xC14B, -0xEEBB,0xD5D6,0xD7EF,0xC14C,0xC14D,0xC14E,0xD6C3,0xC14F, -0xC150,0xEEBD,0xCAF0,0xC151,0xEEBC,0xC152,0xC153,0xC154, -0xC155,0xEEBE,0xC156,0xC157,0xC158,0xC159,0xEEC0,0xC15A, -0xC15B,0xEEBF,0xC15C,0xC15D,0xC15E,0xC15F,0xC160,0xC161, -0xC162,0xC163,0xD1F2,0xC164,0xC7BC,0xC165,0xC3C0,0xC166, -0xC167,0xC168,0xC169,0xC16A,0xB8E1,0xC16B,0xC16C,0xC16D, -0xC16E,0xC16F,0xC1E7,0xC170,0xC171,0xF4C6,0xD0DF,0xF4C7, -0xC172,0xCFDB,0xC173,0xC174,0xC8BA,0xC175,0xC176,0xF4C8, -0xC177,0xC178,0xC179,0xC17A,0xC17B,0xC17C,0xC17D,0xF4C9, -0xF4CA,0xC17E,0xF4CB,0xC180,0xC181,0xC182,0xC183,0xC184, -0xD9FA,0xB8FE,0xC185,0xC186,0xE5F1,0xD3F0,0xC187,0xF4E0, -0xC188,0xCECC,0xC189,0xC18A,0xC18B,0xB3E1,0xC18C,0xC18D, -0xC18E,0xC18F,0xF1B4,0xC190,0xD2EE,0xC191,0xF4E1,0xC192, -0xC193,0xC194,0xC195,0xC196,0xCFE8,0xF4E2,0xC197,0xC198, -0xC7CC,0xC199,0xC19A,0xC19B,0xC19C,0xC19D,0xC19E,0xB5D4, -0xB4E4,0xF4E4,0xC19F,0xC1A0,0xC240,0xF4E3,0xF4E5,0xC241, -0xC242,0xF4E6,0xC243,0xC244,0xC245,0xC246,0xF4E7,0xC247, -0xBAB2,0xB0BF,0xC248,0xF4E8,0xC249,0xC24A,0xC24B,0xC24C, -0xC24D,0xC24E,0xC24F,0xB7AD,0xD2ED,0xC250,0xC251,0xC252, -0xD2AB,0xC0CF,0xC253,0xBFBC,0xEBA3,0xD5DF,0xEAC8,0xC254, -0xC255,0xC256,0xC257,0xF1F3,0xB6F8,0xCBA3,0xC258,0xC259, -0xC4CD,0xC25A,0xF1E7,0xC25B,0xF1E8,0xB8FB,0xF1E9,0xBAC4, -0xD4C5,0xB0D2,0xC25C,0xC25D,0xF1EA,0xC25E,0xC25F,0xC260, -0xF1EB,0xC261,0xF1EC,0xC262,0xC263,0xF1ED,0xF1EE,0xF1EF, -0xF1F1,0xF1F0,0xC5D5,0xC264,0xC265,0xC266,0xC267,0xC268, -0xC269,0xF1F2,0xC26A,0xB6FA,0xC26B,0xF1F4,0xD2AE,0xDEC7, -0xCBCA,0xC26C,0xC26D,0xB3DC,0xC26E,0xB5A2,0xC26F,0xB9A2, -0xC270,0xC271,0xC4F4,0xF1F5,0xC272,0xC273,0xF1F6,0xC274, -0xC275,0xC276,0xC1C4,0xC1FB,0xD6B0,0xF1F7,0xC277,0xC278, -0xC279,0xC27A,0xF1F8,0xC27B,0xC1AA,0xC27C,0xC27D,0xC27E, -0xC6B8,0xC280,0xBEDB,0xC281,0xC282,0xC283,0xC284,0xC285, -0xC286,0xC287,0xC288,0xC289,0xC28A,0xC28B,0xC28C,0xC28D, -0xC28E,0xF1F9,0xB4CF,0xC28F,0xC290,0xC291,0xC292,0xC293, -0xC294,0xF1FA,0xC295,0xC296,0xC297,0xC298,0xC299,0xC29A, -0xC29B,0xC29C,0xC29D,0xC29E,0xC29F,0xC2A0,0xC340,0xEDB2, -0xEDB1,0xC341,0xC342,0xCBE0,0xD2DE,0xC343,0xCBC1,0xD5D8, -0xC344,0xC8E2,0xC345,0xC0DF,0xBCA1,0xC346,0xC347,0xC348, -0xC349,0xC34A,0xC34B,0xEBC1,0xC34C,0xC34D,0xD0A4,0xC34E, -0xD6E2,0xC34F,0xB6C7,0xB8D8,0xEBC0,0xB8CE,0xC350,0xEBBF, -0xB3A6,0xB9C9,0xD6AB,0xC351,0xB7F4,0xB7CA,0xC352,0xC353, -0xC354,0xBCE7,0xB7BE,0xEBC6,0xC355,0xEBC7,0xB0B9,0xBFCF, -0xC356,0xEBC5,0xD3FD,0xC357,0xEBC8,0xC358,0xC359,0xEBC9, -0xC35A,0xC35B,0xB7CE,0xC35C,0xEBC2,0xEBC4,0xC9F6,0xD6D7, -0xD5CD,0xD0B2,0xEBCF,0xCEB8,0xEBD0,0xC35D,0xB5A8,0xC35E, -0xC35F,0xC360,0xC361,0xC362,0xB1B3,0xEBD2,0xCCA5,0xC363, -0xC364,0xC365,0xC366,0xC367,0xC368,0xC369,0xC5D6,0xEBD3, -0xC36A,0xEBD1,0xC5DF,0xEBCE,0xCAA4,0xEBD5,0xB0FB,0xC36B, -0xC36C,0xBAFA,0xC36D,0xC36E,0xD8B7,0xF1E3,0xC36F,0xEBCA, -0xEBCB,0xEBCC,0xEBCD,0xEBD6,0xE6C0,0xEBD9,0xC370,0xBFE8, -0xD2C8,0xEBD7,0xEBDC,0xB8EC,0xEBD8,0xC371,0xBDBA,0xC372, -0xD0D8,0xC373,0xB0B7,0xC374,0xEBDD,0xC4DC,0xC375,0xC376, -0xC377,0xC378,0xD6AC,0xC379,0xC37A,0xC37B,0xB4E0,0xC37C, -0xC37D,0xC2F6,0xBCB9,0xC37E,0xC380,0xEBDA,0xEBDB,0xD4E0, -0xC6EA,0xC4D4,0xEBDF,0xC5A7,0xD9F5,0xC381,0xB2B1,0xC382, -0xEBE4,0xC383,0xBDC5,0xC384,0xC385,0xC386,0xEBE2,0xC387, -0xC388,0xC389,0xC38A,0xC38B,0xC38C,0xC38D,0xC38E,0xC38F, -0xC390,0xC391,0xC392,0xC393,0xEBE3,0xC394,0xC395,0xB8AC, -0xC396,0xCDD1,0xEBE5,0xC397,0xC398,0xC399,0xEBE1,0xC39A, -0xC1B3,0xC39B,0xC39C,0xC39D,0xC39E,0xC39F,0xC6A2,0xC3A0, -0xC440,0xC441,0xC442,0xC443,0xC444,0xC445,0xCCF3,0xC446, -0xEBE6,0xC447,0xC0B0,0xD2B8,0xEBE7,0xC448,0xC449,0xC44A, -0xB8AF,0xB8AD,0xC44B,0xEBE8,0xC7BB,0xCDF3,0xC44C,0xC44D, -0xC44E,0xEBEA,0xEBEB,0xC44F,0xC450,0xC451,0xC452,0xC453, -0xEBED,0xC454,0xC455,0xC456,0xC457,0xD0C8,0xC458,0xEBF2, -0xC459,0xEBEE,0xC45A,0xC45B,0xC45C,0xEBF1,0xC8F9,0xC45D, -0xD1FC,0xEBEC,0xC45E,0xC45F,0xEBE9,0xC460,0xC461,0xC462, -0xC463,0xB8B9,0xCFD9,0xC4E5,0xEBEF,0xEBF0,0xCCDA,0xCDC8, -0xB0F2,0xC464,0xEBF6,0xC465,0xC466,0xC467,0xC468,0xC469, -0xEBF5,0xC46A,0xB2B2,0xC46B,0xC46C,0xC46D,0xC46E,0xB8E0, -0xC46F,0xEBF7,0xC470,0xC471,0xC472,0xC473,0xC474,0xC475, -0xB1EC,0xC476,0xC477,0xCCC5,0xC4A4,0xCFA5,0xC478,0xC479, -0xC47A,0xC47B,0xC47C,0xEBF9,0xC47D,0xC47E,0xECA2,0xC480, -0xC5F2,0xC481,0xEBFA,0xC482,0xC483,0xC484,0xC485,0xC486, -0xC487,0xC488,0xC489,0xC9C5,0xC48A,0xC48B,0xC48C,0xC48D, -0xC48E,0xC48F,0xE2DF,0xEBFE,0xC490,0xC491,0xC492,0xC493, -0xCDCE,0xECA1,0xB1DB,0xD3B7,0xC494,0xC495,0xD2DC,0xC496, -0xC497,0xC498,0xEBFD,0xC499,0xEBFB,0xC49A,0xC49B,0xC49C, -0xC49D,0xC49E,0xC49F,0xC4A0,0xC540,0xC541,0xC542,0xC543, -0xC544,0xC545,0xC546,0xC547,0xC548,0xC549,0xC54A,0xC54B, -0xC54C,0xC54D,0xC54E,0xB3BC,0xC54F,0xC550,0xC551,0xEAB0, -0xC552,0xC553,0xD7D4,0xC554,0xF4AB,0xB3F4,0xC555,0xC556, -0xC557,0xC558,0xC559,0xD6C1,0xD6C2,0xC55A,0xC55B,0xC55C, -0xC55D,0xC55E,0xC55F,0xD5E9,0xBECA,0xC560,0xF4A7,0xC561, -0xD2A8,0xF4A8,0xF4A9,0xC562,0xF4AA,0xBECB,0xD3DF,0xC563, -0xC564,0xC565,0xC566,0xC567,0xC9E0,0xC9E1,0xC568,0xC569, -0xF3C2,0xC56A,0xCAE6,0xC56B,0xCCF2,0xC56C,0xC56D,0xC56E, -0xC56F,0xC570,0xC571,0xE2B6,0xCBB4,0xC572,0xCEE8,0xD6DB, -0xC573,0xF4AD,0xF4AE,0xF4AF,0xC574,0xC575,0xC576,0xC577, -0xF4B2,0xC578,0xBABD,0xF4B3,0xB0E3,0xF4B0,0xC579,0xF4B1, -0xBDA2,0xB2D5,0xC57A,0xF4B6,0xF4B7,0xB6E6,0xB2B0,0xCFCF, -0xF4B4,0xB4AC,0xC57B,0xF4B5,0xC57C,0xC57D,0xF4B8,0xC57E, -0xC580,0xC581,0xC582,0xC583,0xF4B9,0xC584,0xC585,0xCDA7, -0xC586,0xF4BA,0xC587,0xF4BB,0xC588,0xC589,0xC58A,0xF4BC, -0xC58B,0xC58C,0xC58D,0xC58E,0xC58F,0xC590,0xC591,0xC592, -0xCBD2,0xC593,0xF4BD,0xC594,0xC595,0xC596,0xC597,0xF4BE, -0xC598,0xC599,0xC59A,0xC59B,0xC59C,0xC59D,0xC59E,0xC59F, -0xF4BF,0xC5A0,0xC640,0xC641,0xC642,0xC643,0xF4DE,0xC1BC, -0xBCE8,0xC644,0xC9AB,0xD1DE,0xE5F5,0xC645,0xC646,0xC647, -0xC648,0xDCB3,0xD2D5,0xC649,0xC64A,0xDCB4,0xB0AC,0xDCB5, -0xC64B,0xC64C,0xBDDA,0xC64D,0xDCB9,0xC64E,0xC64F,0xC650, -0xD8C2,0xC651,0xDCB7,0xD3F3,0xC652,0xC9D6,0xDCBA,0xDCB6, -0xC653,0xDCBB,0xC3A2,0xC654,0xC655,0xC656,0xC657,0xDCBC, -0xDCC5,0xDCBD,0xC658,0xC659,0xCEDF,0xD6A5,0xC65A,0xDCCF, -0xC65B,0xDCCD,0xC65C,0xC65D,0xDCD2,0xBDE6,0xC2AB,0xC65E, -0xDCB8,0xDCCB,0xDCCE,0xDCBE,0xB7D2,0xB0C5,0xDCC7,0xD0BE, -0xDCC1,0xBBA8,0xC65F,0xB7BC,0xDCCC,0xC660,0xC661,0xDCC6, -0xDCBF,0xC7DB,0xC662,0xC663,0xC664,0xD1BF,0xDCC0,0xC665, -0xC666,0xDCCA,0xC667,0xC668,0xDCD0,0xC669,0xC66A,0xCEAD, -0xDCC2,0xC66B,0xDCC3,0xDCC8,0xDCC9,0xB2D4,0xDCD1,0xCBD5, -0xC66C,0xD4B7,0xDCDB,0xDCDF,0xCCA6,0xDCE6,0xC66D,0xC3E7, -0xDCDC,0xC66E,0xC66F,0xBFC1,0xDCD9,0xC670,0xB0FA,0xB9B6, -0xDCE5,0xDCD3,0xC671,0xDCC4,0xDCD6,0xC8F4,0xBFE0,0xC672, -0xC673,0xC674,0xC675,0xC9BB,0xC676,0xC677,0xC678,0xB1BD, -0xC679,0xD3A2,0xC67A,0xC67B,0xDCDA,0xC67C,0xC67D,0xDCD5, -0xC67E,0xC6BB,0xC680,0xDCDE,0xC681,0xC682,0xC683,0xC684, -0xC685,0xD7C2,0xC3AF,0xB7B6,0xC7D1,0xC3A9,0xDCE2,0xDCD8, -0xDCEB,0xDCD4,0xC686,0xC687,0xDCDD,0xC688,0xBEA5,0xDCD7, -0xC689,0xDCE0,0xC68A,0xC68B,0xDCE3,0xDCE4,0xC68C,0xDCF8, -0xC68D,0xC68E,0xDCE1,0xDDA2,0xDCE7,0xC68F,0xC690,0xC691, -0xC692,0xC693,0xC694,0xC695,0xC696,0xC697,0xC698,0xBCEB, -0xB4C4,0xC699,0xC69A,0xC3A3,0xB2E7,0xDCFA,0xC69B,0xDCF2, -0xC69C,0xDCEF,0xC69D,0xDCFC,0xDCEE,0xD2F0,0xB2E8,0xC69E, -0xC8D7,0xC8E3,0xDCFB,0xC69F,0xDCED,0xC6A0,0xC740,0xC741, -0xDCF7,0xC742,0xC743,0xDCF5,0xC744,0xC745,0xBEA3,0xDCF4, -0xC746,0xB2DD,0xC747,0xC748,0xC749,0xC74A,0xC74B,0xDCF3, -0xBCF6,0xDCE8,0xBBC4,0xC74C,0xC0F3,0xC74D,0xC74E,0xC74F, -0xC750,0xC751,0xBCD4,0xDCE9,0xDCEA,0xC752,0xDCF1,0xDCF6, -0xDCF9,0xB5B4,0xC753,0xC8D9,0xBBE7,0xDCFE,0xDCFD,0xD3AB, -0xDDA1,0xDDA3,0xDDA5,0xD2F1,0xDDA4,0xDDA6,0xDDA7,0xD2A9, -0xC754,0xC755,0xC756,0xC757,0xC758,0xC759,0xC75A,0xBAC9, -0xDDA9,0xC75B,0xC75C,0xDDB6,0xDDB1,0xDDB4,0xC75D,0xC75E, -0xC75F,0xC760,0xC761,0xC762,0xC763,0xDDB0,0xC6CE,0xC764, -0xC765,0xC0F2,0xC766,0xC767,0xC768,0xC769,0xC9AF,0xC76A, -0xC76B,0xC76C,0xDCEC,0xDDAE,0xC76D,0xC76E,0xC76F,0xC770, -0xDDB7,0xC771,0xC772,0xDCF0,0xDDAF,0xC773,0xDDB8,0xC774, -0xDDAC,0xC775,0xC776,0xC777,0xC778,0xC779,0xC77A,0xC77B, -0xDDB9,0xDDB3,0xDDAD,0xC4AA,0xC77C,0xC77D,0xC77E,0xC780, -0xDDA8,0xC0B3,0xC1AB,0xDDAA,0xDDAB,0xC781,0xDDB2,0xBBF1, -0xDDB5,0xD3A8,0xDDBA,0xC782,0xDDBB,0xC3A7,0xC783,0xC784, -0xDDD2,0xDDBC,0xC785,0xC786,0xC787,0xDDD1,0xC788,0xB9BD, -0xC789,0xC78A,0xBED5,0xC78B,0xBEFA,0xC78C,0xC78D,0xBACA, -0xC78E,0xC78F,0xC790,0xC791,0xDDCA,0xC792,0xDDC5,0xC793, -0xDDBF,0xC794,0xC795,0xC796,0xB2CB,0xDDC3,0xC797,0xDDCB, -0xB2A4,0xDDD5,0xC798,0xC799,0xC79A,0xDDBE,0xC79B,0xC79C, -0xC79D,0xC6D0,0xDDD0,0xC79E,0xC79F,0xC7A0,0xC840,0xC841, -0xDDD4,0xC1E2,0xB7C6,0xC842,0xC843,0xC844,0xC845,0xC846, -0xDDCE,0xDDCF,0xC847,0xC848,0xC849,0xDDC4,0xC84A,0xC84B, -0xC84C,0xDDBD,0xC84D,0xDDCD,0xCCD1,0xC84E,0xDDC9,0xC84F, -0xC850,0xC851,0xC852,0xDDC2,0xC3C8,0xC6BC,0xCEAE,0xDDCC, -0xC853,0xDDC8,0xC854,0xC855,0xC856,0xC857,0xC858,0xC859, -0xDDC1,0xC85A,0xC85B,0xC85C,0xDDC6,0xC2DC,0xC85D,0xC85E, -0xC85F,0xC860,0xC861,0xC862,0xD3A9,0xD3AA,0xDDD3,0xCFF4, -0xC8F8,0xC863,0xC864,0xC865,0xC866,0xC867,0xC868,0xC869, -0xC86A,0xDDE6,0xC86B,0xC86C,0xC86D,0xC86E,0xC86F,0xC870, -0xDDC7,0xC871,0xC872,0xC873,0xDDE0,0xC2E4,0xC874,0xC875, -0xC876,0xC877,0xC878,0xC879,0xC87A,0xC87B,0xDDE1,0xC87C, -0xC87D,0xC87E,0xC880,0xC881,0xC882,0xC883,0xC884,0xC885, -0xC886,0xDDD7,0xC887,0xC888,0xC889,0xC88A,0xC88B,0xD6F8, -0xC88C,0xDDD9,0xDDD8,0xB8F0,0xDDD6,0xC88D,0xC88E,0xC88F, -0xC890,0xC6CF,0xC891,0xB6AD,0xC892,0xC893,0xC894,0xC895, -0xC896,0xDDE2,0xC897,0xBAF9,0xD4E1,0xDDE7,0xC898,0xC899, -0xC89A,0xB4D0,0xC89B,0xDDDA,0xC89C,0xBFFB,0xDDE3,0xC89D, -0xDDDF,0xC89E,0xDDDD,0xC89F,0xC8A0,0xC940,0xC941,0xC942, -0xC943,0xC944,0xB5D9,0xC945,0xC946,0xC947,0xC948,0xDDDB, -0xDDDC,0xDDDE,0xC949,0xBDAF,0xDDE4,0xC94A,0xDDE5,0xC94B, -0xC94C,0xC94D,0xC94E,0xC94F,0xC950,0xC951,0xC952,0xDDF5, -0xC953,0xC3C9,0xC954,0xC955,0xCBE2,0xC956,0xC957,0xC958, -0xC959,0xDDF2,0xC95A,0xC95B,0xC95C,0xC95D,0xC95E,0xC95F, -0xC960,0xC961,0xC962,0xC963,0xC964,0xC965,0xC966,0xD8E1, -0xC967,0xC968,0xC6D1,0xC969,0xDDF4,0xC96A,0xC96B,0xC96C, -0xD5F4,0xDDF3,0xDDF0,0xC96D,0xC96E,0xDDEC,0xC96F,0xDDEF, -0xC970,0xDDE8,0xC971,0xC972,0xD0EE,0xC973,0xC974,0xC975, -0xC976,0xC8D8,0xDDEE,0xC977,0xC978,0xDDE9,0xC979,0xC97A, -0xDDEA,0xCBF2,0xC97B,0xDDED,0xC97C,0xC97D,0xB1CD,0xC97E, -0xC980,0xC981,0xC982,0xC983,0xC984,0xC0B6,0xC985,0xBCBB, -0xDDF1,0xC986,0xC987,0xDDF7,0xC988,0xDDF6,0xDDEB,0xC989, -0xC98A,0xC98B,0xC98C,0xC98D,0xC5EE,0xC98E,0xC98F,0xC990, -0xDDFB,0xC991,0xC992,0xC993,0xC994,0xC995,0xC996,0xC997, -0xC998,0xC999,0xC99A,0xC99B,0xDEA4,0xC99C,0xC99D,0xDEA3, -0xC99E,0xC99F,0xC9A0,0xCA40,0xCA41,0xCA42,0xCA43,0xCA44, -0xCA45,0xCA46,0xCA47,0xCA48,0xDDF8,0xCA49,0xCA4A,0xCA4B, -0xCA4C,0xC3EF,0xCA4D,0xC2FB,0xCA4E,0xCA4F,0xCA50,0xD5E1, -0xCA51,0xCA52,0xCEB5,0xCA53,0xCA54,0xCA55,0xCA56,0xDDFD, -0xCA57,0xB2CC,0xCA58,0xCA59,0xCA5A,0xCA5B,0xCA5C,0xCA5D, -0xCA5E,0xCA5F,0xCA60,0xC4E8,0xCADF,0xCA61,0xCA62,0xCA63, -0xCA64,0xCA65,0xCA66,0xCA67,0xCA68,0xCA69,0xCA6A,0xC7BE, -0xDDFA,0xDDFC,0xDDFE,0xDEA2,0xB0AA,0xB1CE,0xCA6B,0xCA6C, -0xCA6D,0xCA6E,0xCA6F,0xDEAC,0xCA70,0xCA71,0xCA72,0xCA73, -0xDEA6,0xBDB6,0xC8EF,0xCA74,0xCA75,0xCA76,0xCA77,0xCA78, -0xCA79,0xCA7A,0xCA7B,0xCA7C,0xCA7D,0xCA7E,0xDEA1,0xCA80, -0xCA81,0xDEA5,0xCA82,0xCA83,0xCA84,0xCA85,0xDEA9,0xCA86, -0xCA87,0xCA88,0xCA89,0xCA8A,0xDEA8,0xCA8B,0xCA8C,0xCA8D, -0xDEA7,0xCA8E,0xCA8F,0xCA90,0xCA91,0xCA92,0xCA93,0xCA94, -0xCA95,0xCA96,0xDEAD,0xCA97,0xD4CC,0xCA98,0xCA99,0xCA9A, -0xCA9B,0xDEB3,0xDEAA,0xDEAE,0xCA9C,0xCA9D,0xC0D9,0xCA9E, -0xCA9F,0xCAA0,0xCB40,0xCB41,0xB1A1,0xDEB6,0xCB42,0xDEB1, -0xCB43,0xCB44,0xCB45,0xCB46,0xCB47,0xCB48,0xCB49,0xDEB2, -0xCB4A,0xCB4B,0xCB4C,0xCB4D,0xCB4E,0xCB4F,0xCB50,0xCB51, -0xCB52,0xCB53,0xCB54,0xD1A6,0xDEB5,0xCB55,0xCB56,0xCB57, -0xCB58,0xCB59,0xCB5A,0xCB5B,0xDEAF,0xCB5C,0xCB5D,0xCB5E, -0xDEB0,0xCB5F,0xD0BD,0xCB60,0xCB61,0xCB62,0xDEB4,0xCAED, -0xDEB9,0xCB63,0xCB64,0xCB65,0xCB66,0xCB67,0xCB68,0xDEB8, -0xCB69,0xDEB7,0xCB6A,0xCB6B,0xCB6C,0xCB6D,0xCB6E,0xCB6F, -0xCB70,0xDEBB,0xCB71,0xCB72,0xCB73,0xCB74,0xCB75,0xCB76, -0xCB77,0xBDE5,0xCB78,0xCB79,0xCB7A,0xCB7B,0xCB7C,0xB2D8, -0xC3EA,0xCB7D,0xCB7E,0xDEBA,0xCB80,0xC5BA,0xCB81,0xCB82, -0xCB83,0xCB84,0xCB85,0xCB86,0xDEBC,0xCB87,0xCB88,0xCB89, -0xCB8A,0xCB8B,0xCB8C,0xCB8D,0xCCD9,0xCB8E,0xCB8F,0xCB90, -0xCB91,0xB7AA,0xCB92,0xCB93,0xCB94,0xCB95,0xCB96,0xCB97, -0xCB98,0xCB99,0xCB9A,0xCB9B,0xCB9C,0xCB9D,0xCB9E,0xCB9F, -0xCBA0,0xCC40,0xCC41,0xD4E5,0xCC42,0xCC43,0xCC44,0xDEBD, -0xCC45,0xCC46,0xCC47,0xCC48,0xCC49,0xDEBF,0xCC4A,0xCC4B, -0xCC4C,0xCC4D,0xCC4E,0xCC4F,0xCC50,0xCC51,0xCC52,0xCC53, -0xCC54,0xC4A2,0xCC55,0xCC56,0xCC57,0xCC58,0xDEC1,0xCC59, -0xCC5A,0xCC5B,0xCC5C,0xCC5D,0xCC5E,0xCC5F,0xCC60,0xCC61, -0xCC62,0xCC63,0xCC64,0xCC65,0xCC66,0xCC67,0xCC68,0xDEBE, -0xCC69,0xDEC0,0xCC6A,0xCC6B,0xCC6C,0xCC6D,0xCC6E,0xCC6F, -0xCC70,0xCC71,0xCC72,0xCC73,0xCC74,0xCC75,0xCC76,0xCC77, -0xD5BA,0xCC78,0xCC79,0xCC7A,0xDEC2,0xCC7B,0xCC7C,0xCC7D, -0xCC7E,0xCC80,0xCC81,0xCC82,0xCC83,0xCC84,0xCC85,0xCC86, -0xCC87,0xCC88,0xCC89,0xCC8A,0xCC8B,0xF2AE,0xBBA2,0xC2B2, -0xC5B0,0xC2C7,0xCC8C,0xCC8D,0xF2AF,0xCC8E,0xCC8F,0xCC90, -0xCC91,0xCC92,0xD0E9,0xCC93,0xCC94,0xCC95,0xD3DD,0xCC96, -0xCC97,0xCC98,0xEBBD,0xCC99,0xCC9A,0xCC9B,0xCC9C,0xCC9D, -0xCC9E,0xCC9F,0xCCA0,0xB3E6,0xF2B0,0xCD40,0xF2B1,0xCD41, -0xCD42,0xCAAD,0xCD43,0xCD44,0xCD45,0xCD46,0xCD47,0xCD48, -0xCD49,0xBAE7,0xF2B3,0xF2B5,0xF2B4,0xCBE4,0xCFBA,0xF2B2, -0xCAB4,0xD2CF,0xC2EC,0xCD4A,0xCD4B,0xCD4C,0xCD4D,0xCD4E, -0xCD4F,0xCD50,0xCEC3,0xF2B8,0xB0F6,0xF2B7,0xCD51,0xCD52, -0xCD53,0xCD54,0xCD55,0xF2BE,0xCD56,0xB2CF,0xCD57,0xCD58, -0xCD59,0xCD5A,0xCD5B,0xCD5C,0xD1C1,0xF2BA,0xCD5D,0xCD5E, -0xCD5F,0xCD60,0xCD61,0xF2BC,0xD4E9,0xCD62,0xCD63,0xF2BB, -0xF2B6,0xF2BF,0xF2BD,0xCD64,0xF2B9,0xCD65,0xCD66,0xF2C7, -0xF2C4,0xF2C6,0xCD67,0xCD68,0xF2CA,0xF2C2,0xF2C0,0xCD69, -0xCD6A,0xCD6B,0xF2C5,0xCD6C,0xCD6D,0xCD6E,0xCD6F,0xCD70, -0xD6FB,0xCD71,0xCD72,0xCD73,0xF2C1,0xCD74,0xC7F9,0xC9DF, -0xCD75,0xF2C8,0xB9C6,0xB5B0,0xCD76,0xCD77,0xF2C3,0xF2C9, -0xF2D0,0xF2D6,0xCD78,0xCD79,0xBBD7,0xCD7A,0xCD7B,0xCD7C, -0xF2D5,0xCDDC,0xCD7D,0xD6EB,0xCD7E,0xCD80,0xF2D2,0xF2D4, -0xCD81,0xCD82,0xCD83,0xCD84,0xB8F2,0xCD85,0xCD86,0xCD87, -0xCD88,0xF2CB,0xCD89,0xCD8A,0xCD8B,0xF2CE,0xC2F9,0xCD8C, -0xD5DD,0xF2CC,0xF2CD,0xF2CF,0xF2D3,0xCD8D,0xCD8E,0xCD8F, -0xF2D9,0xD3BC,0xCD90,0xCD91,0xCD92,0xCD93,0xB6EA,0xCD94, -0xCAF1,0xCD95,0xB7E4,0xF2D7,0xCD96,0xCD97,0xCD98,0xF2D8, -0xF2DA,0xF2DD,0xF2DB,0xCD99,0xCD9A,0xF2DC,0xCD9B,0xCD9C, -0xCD9D,0xCD9E,0xD1D1,0xF2D1,0xCD9F,0xCDC9,0xCDA0,0xCECF, -0xD6A9,0xCE40,0xF2E3,0xCE41,0xC3DB,0xCE42,0xF2E0,0xCE43, -0xCE44,0xC0AF,0xF2EC,0xF2DE,0xCE45,0xF2E1,0xCE46,0xCE47, -0xCE48,0xF2E8,0xCE49,0xCE4A,0xCE4B,0xCE4C,0xF2E2,0xCE4D, -0xCE4E,0xF2E7,0xCE4F,0xCE50,0xF2E6,0xCE51,0xCE52,0xF2E9, -0xCE53,0xCE54,0xCE55,0xF2DF,0xCE56,0xCE57,0xF2E4,0xF2EA, -0xCE58,0xCE59,0xCE5A,0xCE5B,0xCE5C,0xCE5D,0xCE5E,0xD3AC, -0xF2E5,0xB2F5,0xCE5F,0xCE60,0xF2F2,0xCE61,0xD0AB,0xCE62, -0xCE63,0xCE64,0xCE65,0xF2F5,0xCE66,0xCE67,0xCE68,0xBBC8, -0xCE69,0xF2F9,0xCE6A,0xCE6B,0xCE6C,0xCE6D,0xCE6E,0xCE6F, -0xF2F0,0xCE70,0xCE71,0xF2F6,0xF2F8,0xF2FA,0xCE72,0xCE73, -0xCE74,0xCE75,0xCE76,0xCE77,0xCE78,0xCE79,0xF2F3,0xCE7A, -0xF2F1,0xCE7B,0xCE7C,0xCE7D,0xBAFB,0xCE7E,0xB5FB,0xCE80, -0xCE81,0xCE82,0xCE83,0xF2EF,0xF2F7,0xF2ED,0xF2EE,0xCE84, -0xCE85,0xCE86,0xF2EB,0xF3A6,0xCE87,0xF3A3,0xCE88,0xCE89, -0xF3A2,0xCE8A,0xCE8B,0xF2F4,0xCE8C,0xC8DA,0xCE8D,0xCE8E, -0xCE8F,0xCE90,0xCE91,0xF2FB,0xCE92,0xCE93,0xCE94,0xF3A5, -0xCE95,0xCE96,0xCE97,0xCE98,0xCE99,0xCE9A,0xCE9B,0xC3F8, -0xCE9C,0xCE9D,0xCE9E,0xCE9F,0xCEA0,0xCF40,0xCF41,0xCF42, -0xF2FD,0xCF43,0xCF44,0xF3A7,0xF3A9,0xF3A4,0xCF45,0xF2FC, -0xCF46,0xCF47,0xCF48,0xF3AB,0xCF49,0xF3AA,0xCF4A,0xCF4B, -0xCF4C,0xCF4D,0xC2DD,0xCF4E,0xCF4F,0xF3AE,0xCF50,0xCF51, -0xF3B0,0xCF52,0xCF53,0xCF54,0xCF55,0xCF56,0xF3A1,0xCF57, -0xCF58,0xCF59,0xF3B1,0xF3AC,0xCF5A,0xCF5B,0xCF5C,0xCF5D, -0xCF5E,0xF3AF,0xF2FE,0xF3AD,0xCF5F,0xCF60,0xCF61,0xCF62, -0xCF63,0xCF64,0xCF65,0xF3B2,0xCF66,0xCF67,0xCF68,0xCF69, -0xF3B4,0xCF6A,0xCF6B,0xCF6C,0xCF6D,0xF3A8,0xCF6E,0xCF6F, -0xCF70,0xCF71,0xF3B3,0xCF72,0xCF73,0xCF74,0xF3B5,0xCF75, -0xCF76,0xCF77,0xCF78,0xCF79,0xCF7A,0xCF7B,0xCF7C,0xCF7D, -0xCF7E,0xD0B7,0xCF80,0xCF81,0xCF82,0xCF83,0xF3B8,0xCF84, -0xCF85,0xCF86,0xCF87,0xD9F9,0xCF88,0xCF89,0xCF8A,0xCF8B, -0xCF8C,0xCF8D,0xF3B9,0xCF8E,0xCF8F,0xCF90,0xCF91,0xCF92, -0xCF93,0xCF94,0xCF95,0xF3B7,0xCF96,0xC8E4,0xF3B6,0xCF97, -0xCF98,0xCF99,0xCF9A,0xF3BA,0xCF9B,0xCF9C,0xCF9D,0xCF9E, -0xCF9F,0xF3BB,0xB4C0,0xCFA0,0xD040,0xD041,0xD042,0xD043, -0xD044,0xD045,0xD046,0xD047,0xD048,0xD049,0xD04A,0xD04B, -0xD04C,0xD04D,0xEEC3,0xD04E,0xD04F,0xD050,0xD051,0xD052, -0xD053,0xF3BC,0xD054,0xD055,0xF3BD,0xD056,0xD057,0xD058, -0xD1AA,0xD059,0xD05A,0xD05B,0xF4AC,0xD0C6,0xD05C,0xD05D, -0xD05E,0xD05F,0xD060,0xD061,0xD0D0,0xD1DC,0xD062,0xD063, -0xD064,0xD065,0xD066,0xD067,0xCFCE,0xD068,0xD069,0xBDD6, -0xD06A,0xD1C3,0xD06B,0xD06C,0xD06D,0xD06E,0xD06F,0xD070, -0xD071,0xBAE2,0xE1E9,0xD2C2,0xF1C2,0xB2B9,0xD072,0xD073, -0xB1ED,0xF1C3,0xD074,0xC9C0,0xB3C4,0xD075,0xD9F2,0xD076, -0xCBA5,0xD077,0xF1C4,0xD078,0xD079,0xD07A,0xD07B,0xD6D4, -0xD07C,0xD07D,0xD07E,0xD080,0xD081,0xF1C5,0xF4C0,0xF1C6, -0xD082,0xD4AC,0xF1C7,0xD083,0xB0C0,0xF4C1,0xD084,0xD085, -0xF4C2,0xD086,0xD087,0xB4FC,0xD088,0xC5DB,0xD089,0xD08A, -0xD08B,0xD08C,0xCCBB,0xD08D,0xD08E,0xD08F,0xD0E4,0xD090, -0xD091,0xD092,0xD093,0xD094,0xCDE0,0xD095,0xD096,0xD097, -0xD098,0xD099,0xF1C8,0xD09A,0xD9F3,0xD09B,0xD09C,0xD09D, -0xD09E,0xD09F,0xD0A0,0xB1BB,0xD140,0xCFAE,0xD141,0xD142, -0xD143,0xB8A4,0xD144,0xD145,0xD146,0xD147,0xD148,0xF1CA, -0xD149,0xD14A,0xD14B,0xD14C,0xF1CB,0xD14D,0xD14E,0xD14F, -0xD150,0xB2C3,0xC1D1,0xD151,0xD152,0xD7B0,0xF1C9,0xD153, -0xD154,0xF1CC,0xD155,0xD156,0xD157,0xD158,0xF1CE,0xD159, -0xD15A,0xD15B,0xD9F6,0xD15C,0xD2E1,0xD4A3,0xD15D,0xD15E, -0xF4C3,0xC8B9,0xD15F,0xD160,0xD161,0xD162,0xD163,0xF4C4, -0xD164,0xD165,0xF1CD,0xF1CF,0xBFE3,0xF1D0,0xD166,0xD167, -0xF1D4,0xD168,0xD169,0xD16A,0xD16B,0xD16C,0xD16D,0xD16E, -0xF1D6,0xF1D1,0xD16F,0xC9D1,0xC5E1,0xD170,0xD171,0xD172, -0xC2E3,0xB9FC,0xD173,0xD174,0xF1D3,0xD175,0xF1D5,0xD176, -0xD177,0xD178,0xB9D3,0xD179,0xD17A,0xD17B,0xD17C,0xD17D, -0xD17E,0xD180,0xF1DB,0xD181,0xD182,0xD183,0xD184,0xD185, -0xBAD6,0xD186,0xB0FD,0xF1D9,0xD187,0xD188,0xD189,0xD18A, -0xD18B,0xF1D8,0xF1D2,0xF1DA,0xD18C,0xD18D,0xD18E,0xD18F, -0xD190,0xF1D7,0xD191,0xD192,0xD193,0xC8EC,0xD194,0xD195, -0xD196,0xD197,0xCDCA,0xF1DD,0xD198,0xD199,0xD19A,0xD19B, -0xE5BD,0xD19C,0xD19D,0xD19E,0xF1DC,0xD19F,0xF1DE,0xD1A0, -0xD240,0xD241,0xD242,0xD243,0xD244,0xD245,0xD246,0xD247, -0xD248,0xF1DF,0xD249,0xD24A,0xCFE5,0xD24B,0xD24C,0xD24D, -0xD24E,0xD24F,0xD250,0xD251,0xD252,0xD253,0xD254,0xD255, -0xD256,0xD257,0xD258,0xD259,0xD25A,0xD25B,0xD25C,0xD25D, -0xD25E,0xD25F,0xD260,0xD261,0xD262,0xD263,0xF4C5,0xBDF3, -0xD264,0xD265,0xD266,0xD267,0xD268,0xD269,0xF1E0,0xD26A, -0xD26B,0xD26C,0xD26D,0xD26E,0xD26F,0xD270,0xD271,0xD272, -0xD273,0xD274,0xD275,0xD276,0xD277,0xD278,0xD279,0xD27A, -0xD27B,0xD27C,0xD27D,0xF1E1,0xD27E,0xD280,0xD281,0xCEF7, -0xD282,0xD2AA,0xD283,0xF1FB,0xD284,0xD285,0xB8B2,0xD286, -0xD287,0xD288,0xD289,0xD28A,0xD28B,0xD28C,0xD28D,0xD28E, -0xD28F,0xD290,0xD291,0xD292,0xD293,0xD294,0xD295,0xD296, -0xD297,0xD298,0xD299,0xD29A,0xD29B,0xD29C,0xD29D,0xD29E, -0xD29F,0xD2A0,0xD340,0xD341,0xD342,0xD343,0xD344,0xD345, -0xD346,0xD347,0xD348,0xD349,0xD34A,0xD34B,0xD34C,0xD34D, -0xD34E,0xD34F,0xD350,0xD351,0xD352,0xD353,0xD354,0xD355, -0xD356,0xD357,0xD358,0xD359,0xD35A,0xD35B,0xD35C,0xD35D, -0xD35E,0xBCFB,0xB9DB,0xD35F,0xB9E6,0xC3D9,0xCAD3,0xEAE8, -0xC0C0,0xBEF5,0xEAE9,0xEAEA,0xEAEB,0xD360,0xEAEC,0xEAED, -0xEAEE,0xEAEF,0xBDC7,0xD361,0xD362,0xD363,0xF5FB,0xD364, -0xD365,0xD366,0xF5FD,0xD367,0xF5FE,0xD368,0xF5FC,0xD369, -0xD36A,0xD36B,0xD36C,0xBDE2,0xD36D,0xF6A1,0xB4A5,0xD36E, -0xD36F,0xD370,0xD371,0xF6A2,0xD372,0xD373,0xD374,0xF6A3, -0xD375,0xD376,0xD377,0xECB2,0xD378,0xD379,0xD37A,0xD37B, -0xD37C,0xD37D,0xD37E,0xD380,0xD381,0xD382,0xD383,0xD384, -0xD1D4,0xD385,0xD386,0xD387,0xD388,0xD389,0xD38A,0xD9EA, -0xD38B,0xD38C,0xD38D,0xD38E,0xD38F,0xD390,0xD391,0xD392, -0xD393,0xD394,0xD395,0xD396,0xD397,0xD398,0xD399,0xD39A, -0xD39B,0xD39C,0xD39D,0xD39E,0xD39F,0xD3A0,0xD440,0xD441, -0xD442,0xD443,0xD444,0xD445,0xD446,0xD447,0xD448,0xD449, -0xD44A,0xD44B,0xD44C,0xD44D,0xD44E,0xD44F,0xD450,0xD451, -0xD452,0xD453,0xD454,0xD455,0xD456,0xD457,0xD458,0xD459, -0xD45A,0xD45B,0xD45C,0xD45D,0xD45E,0xD45F,0xF6A4,0xD460, -0xD461,0xD462,0xD463,0xD464,0xD465,0xD466,0xD467,0xD468, -0xEEBA,0xD469,0xD46A,0xD46B,0xD46C,0xD46D,0xD46E,0xD46F, -0xD470,0xD471,0xD472,0xD473,0xD474,0xD475,0xD476,0xD477, -0xD478,0xD479,0xD47A,0xD47B,0xD47C,0xD47D,0xD47E,0xD480, -0xD481,0xD482,0xD483,0xD484,0xD485,0xD486,0xD487,0xD488, -0xD489,0xD48A,0xD48B,0xD48C,0xD48D,0xD48E,0xD48F,0xD490, -0xD491,0xD492,0xD493,0xD494,0xD495,0xD496,0xD497,0xD498, -0xD499,0xD5B2,0xD49A,0xD49B,0xD49C,0xD49D,0xD49E,0xD49F, -0xD4A0,0xD540,0xD541,0xD542,0xD543,0xD544,0xD545,0xD546, -0xD547,0xD3FE,0xCCDC,0xD548,0xD549,0xD54A,0xD54B,0xD54C, -0xD54D,0xD54E,0xD54F,0xCAC4,0xD550,0xD551,0xD552,0xD553, -0xD554,0xD555,0xD556,0xD557,0xD558,0xD559,0xD55A,0xD55B, -0xD55C,0xD55D,0xD55E,0xD55F,0xD560,0xD561,0xD562,0xD563, -0xD564,0xD565,0xD566,0xD567,0xD568,0xD569,0xD56A,0xD56B, -0xD56C,0xD56D,0xD56E,0xD56F,0xD570,0xD571,0xD572,0xD573, -0xD574,0xD575,0xD576,0xD577,0xD578,0xD579,0xD57A,0xD57B, -0xD57C,0xD57D,0xD57E,0xD580,0xD581,0xD582,0xD583,0xD584, -0xD585,0xD586,0xD587,0xD588,0xD589,0xD58A,0xD58B,0xD58C, -0xD58D,0xD58E,0xD58F,0xD590,0xD591,0xD592,0xD593,0xD594, -0xD595,0xD596,0xD597,0xD598,0xD599,0xD59A,0xD59B,0xD59C, -0xD59D,0xD59E,0xD59F,0xD5A0,0xD640,0xD641,0xD642,0xD643, -0xD644,0xD645,0xD646,0xD647,0xD648,0xD649,0xD64A,0xD64B, -0xD64C,0xD64D,0xD64E,0xD64F,0xD650,0xD651,0xD652,0xD653, -0xD654,0xD655,0xD656,0xD657,0xD658,0xD659,0xD65A,0xD65B, -0xD65C,0xD65D,0xD65E,0xD65F,0xD660,0xD661,0xD662,0xE5C0, -0xD663,0xD664,0xD665,0xD666,0xD667,0xD668,0xD669,0xD66A, -0xD66B,0xD66C,0xD66D,0xD66E,0xD66F,0xD670,0xD671,0xD672, -0xD673,0xD674,0xD675,0xD676,0xD677,0xD678,0xD679,0xD67A, -0xD67B,0xD67C,0xD67D,0xD67E,0xD680,0xD681,0xF6A5,0xD682, -0xD683,0xD684,0xD685,0xD686,0xD687,0xD688,0xD689,0xD68A, -0xD68B,0xD68C,0xD68D,0xD68E,0xD68F,0xD690,0xD691,0xD692, -0xD693,0xD694,0xD695,0xD696,0xD697,0xD698,0xD699,0xD69A, -0xD69B,0xD69C,0xD69D,0xD69E,0xD69F,0xD6A0,0xD740,0xD741, -0xD742,0xD743,0xD744,0xD745,0xD746,0xD747,0xD748,0xD749, -0xD74A,0xD74B,0xD74C,0xD74D,0xD74E,0xD74F,0xD750,0xD751, -0xD752,0xD753,0xD754,0xD755,0xD756,0xD757,0xD758,0xD759, -0xD75A,0xD75B,0xD75C,0xD75D,0xD75E,0xD75F,0xBEAF,0xD760, -0xD761,0xD762,0xD763,0xD764,0xC6A9,0xD765,0xD766,0xD767, -0xD768,0xD769,0xD76A,0xD76B,0xD76C,0xD76D,0xD76E,0xD76F, -0xD770,0xD771,0xD772,0xD773,0xD774,0xD775,0xD776,0xD777, -0xD778,0xD779,0xD77A,0xD77B,0xD77C,0xD77D,0xD77E,0xD780, -0xD781,0xD782,0xD783,0xD784,0xD785,0xD786,0xD787,0xD788, -0xD789,0xD78A,0xD78B,0xD78C,0xD78D,0xD78E,0xD78F,0xD790, -0xD791,0xD792,0xD793,0xD794,0xD795,0xD796,0xD797,0xD798, -0xDAA5,0xBCC6,0xB6A9,0xB8BC,0xC8CF,0xBCA5,0xDAA6,0xDAA7, -0xCCD6,0xC8C3,0xDAA8,0xC6FD,0xD799,0xD1B5,0xD2E9,0xD1B6, -0xBCC7,0xD79A,0xBDB2,0xBBE4,0xDAA9,0xDAAA,0xD1C8,0xDAAB, -0xD0ED,0xB6EF,0xC2DB,0xD79B,0xCBCF,0xB7ED,0xC9E8,0xB7C3, -0xBEF7,0xD6A4,0xDAAC,0xDAAD,0xC6C0,0xD7E7,0xCAB6,0xD79C, -0xD5A9,0xCBDF,0xD5EF,0xDAAE,0xD6DF,0xB4CA,0xDAB0,0xDAAF, -0xD79D,0xD2EB,0xDAB1,0xDAB2,0xDAB3,0xCAD4,0xDAB4,0xCAAB, -0xDAB5,0xDAB6,0xB3CF,0xD6EF,0xDAB7,0xBBB0,0xB5AE,0xDAB8, -0xDAB9,0xB9EE,0xD1AF,0xD2E8,0xDABA,0xB8C3,0xCFEA,0xB2EF, -0xDABB,0xDABC,0xD79E,0xBDEB,0xCEDC,0xD3EF,0xDABD,0xCEF3, -0xDABE,0xD3D5,0xBBE5,0xDABF,0xCBB5,0xCBD0,0xDAC0,0xC7EB, -0xD6EE,0xDAC1,0xC5B5,0xB6C1,0xDAC2,0xB7CC,0xBFCE,0xDAC3, -0xDAC4,0xCBAD,0xDAC5,0xB5F7,0xDAC6,0xC1C2,0xD7BB,0xDAC7, -0xCCB8,0xD79F,0xD2EA,0xC4B1,0xDAC8,0xB5FD,0xBBD1,0xDAC9, -0xD0B3,0xDACA,0xDACB,0xCEBD,0xDACC,0xDACD,0xDACE,0xB2F7, -0xDAD1,0xDACF,0xD1E8,0xDAD0,0xC3D5,0xDAD2,0xD7A0,0xDAD3, -0xDAD4,0xDAD5,0xD0BB,0xD2A5,0xB0F9,0xDAD6,0xC7AB,0xDAD7, -0xBDF7,0xC3A1,0xDAD8,0xDAD9,0xC3FD,0xCCB7,0xDADA,0xDADB, -0xC0BE,0xC6D7,0xDADC,0xDADD,0xC7B4,0xDADE,0xDADF,0xB9C8, -0xD840,0xD841,0xD842,0xD843,0xD844,0xD845,0xD846,0xD847, -0xD848,0xBBED,0xD849,0xD84A,0xD84B,0xD84C,0xB6B9,0xF4F8, -0xD84D,0xF4F9,0xD84E,0xD84F,0xCDE3,0xD850,0xD851,0xD852, -0xD853,0xD854,0xD855,0xD856,0xD857,0xF5B9,0xD858,0xD859, -0xD85A,0xD85B,0xEBE0,0xD85C,0xD85D,0xD85E,0xD85F,0xD860, -0xD861,0xCFF3,0xBBBF,0xD862,0xD863,0xD864,0xD865,0xD866, -0xD867,0xD868,0xBAC0,0xD4A5,0xD869,0xD86A,0xD86B,0xD86C, -0xD86D,0xD86E,0xD86F,0xE1D9,0xD870,0xD871,0xD872,0xD873, -0xF5F4,0xB1AA,0xB2F2,0xD874,0xD875,0xD876,0xD877,0xD878, -0xD879,0xD87A,0xF5F5,0xD87B,0xD87C,0xF5F7,0xD87D,0xD87E, -0xD880,0xBAD1,0xF5F6,0xD881,0xC3B2,0xD882,0xD883,0xD884, -0xD885,0xD886,0xD887,0xD888,0xF5F9,0xD889,0xD88A,0xD88B, -0xF5F8,0xD88C,0xD88D,0xD88E,0xD88F,0xD890,0xD891,0xD892, -0xD893,0xD894,0xD895,0xD896,0xD897,0xD898,0xD899,0xD89A, -0xD89B,0xD89C,0xD89D,0xD89E,0xD89F,0xD8A0,0xD940,0xD941, -0xD942,0xD943,0xD944,0xD945,0xD946,0xD947,0xD948,0xD949, -0xD94A,0xD94B,0xD94C,0xD94D,0xD94E,0xD94F,0xD950,0xD951, -0xD952,0xD953,0xD954,0xD955,0xD956,0xD957,0xD958,0xD959, -0xD95A,0xD95B,0xD95C,0xD95D,0xD95E,0xD95F,0xD960,0xD961, -0xD962,0xD963,0xD964,0xD965,0xD966,0xD967,0xD968,0xD969, -0xD96A,0xD96B,0xD96C,0xD96D,0xD96E,0xD96F,0xD970,0xD971, -0xD972,0xD973,0xD974,0xD975,0xD976,0xD977,0xD978,0xD979, -0xD97A,0xD97B,0xD97C,0xD97D,0xD97E,0xD980,0xD981,0xD982, -0xD983,0xD984,0xD985,0xD986,0xD987,0xD988,0xD989,0xD98A, -0xD98B,0xD98C,0xD98D,0xD98E,0xD98F,0xD990,0xD991,0xD992, -0xD993,0xD994,0xD995,0xD996,0xD997,0xD998,0xD999,0xD99A, -0xD99B,0xD99C,0xD99D,0xD99E,0xD99F,0xD9A0,0xDA40,0xDA41, -0xDA42,0xDA43,0xDA44,0xDA45,0xDA46,0xDA47,0xDA48,0xDA49, -0xDA4A,0xDA4B,0xDA4C,0xDA4D,0xDA4E,0xB1B4,0xD5EA,0xB8BA, -0xDA4F,0xB9B1,0xB2C6,0xD4F0,0xCFCD,0xB0DC,0xD5CB,0xBBF5, -0xD6CA,0xB7B7,0xCCB0,0xC6B6,0xB1E1,0xB9BA,0xD6FC,0xB9E1, -0xB7A1,0xBCFA,0xEADA,0xEADB,0xCCF9,0xB9F3,0xEADC,0xB4FB, -0xC3B3,0xB7D1,0xBAD8,0xEADD,0xD4F4,0xEADE,0xBCD6,0xBBDF, -0xEADF,0xC1DE,0xC2B8,0xD4DF,0xD7CA,0xEAE0,0xEAE1,0xEAE4, -0xEAE2,0xEAE3,0xC9DE,0xB8B3,0xB6C4,0xEAE5,0xCAEA,0xC9CD, -0xB4CD,0xDA50,0xDA51,0xE2D9,0xC5E2,0xEAE6,0xC0B5,0xDA52, -0xD7B8,0xEAE7,0xD7AC,0xC8FC,0xD8D3,0xD8CD,0xD4DE,0xDA53, -0xD4F9,0xC9C4,0xD3AE,0xB8D3,0xB3E0,0xDA54,0xC9E2,0xF4F6, -0xDA55,0xDA56,0xDA57,0xBAD5,0xDA58,0xF4F7,0xDA59,0xDA5A, -0xD7DF,0xDA5B,0xDA5C,0xF4F1,0xB8B0,0xD5D4,0xB8CF,0xC6F0, -0xDA5D,0xDA5E,0xDA5F,0xDA60,0xDA61,0xDA62,0xDA63,0xDA64, -0xDA65,0xB3C3,0xDA66,0xDA67,0xF4F2,0xB3AC,0xDA68,0xDA69, -0xDA6A,0xDA6B,0xD4BD,0xC7F7,0xDA6C,0xDA6D,0xDA6E,0xDA6F, -0xDA70,0xF4F4,0xDA71,0xDA72,0xF4F3,0xDA73,0xDA74,0xDA75, -0xDA76,0xDA77,0xDA78,0xDA79,0xDA7A,0xDA7B,0xDA7C,0xCCCB, -0xDA7D,0xDA7E,0xDA80,0xC8A4,0xDA81,0xDA82,0xDA83,0xDA84, -0xDA85,0xDA86,0xDA87,0xDA88,0xDA89,0xDA8A,0xDA8B,0xDA8C, -0xDA8D,0xF4F5,0xDA8E,0xD7E3,0xC5BF,0xF5C0,0xDA8F,0xDA90, -0xF5BB,0xDA91,0xF5C3,0xDA92,0xF5C2,0xDA93,0xD6BA,0xF5C1, -0xDA94,0xDA95,0xDA96,0xD4BE,0xF5C4,0xDA97,0xF5CC,0xDA98, -0xDA99,0xDA9A,0xDA9B,0xB0CF,0xB5F8,0xDA9C,0xF5C9,0xF5CA, -0xDA9D,0xC5DC,0xDA9E,0xDA9F,0xDAA0,0xDB40,0xF5C5,0xF5C6, -0xDB41,0xDB42,0xF5C7,0xF5CB,0xDB43,0xBEE0,0xF5C8,0xB8FA, -0xDB44,0xDB45,0xDB46,0xF5D0,0xF5D3,0xDB47,0xDB48,0xDB49, -0xBFE7,0xDB4A,0xB9F2,0xF5BC,0xF5CD,0xDB4B,0xDB4C,0xC2B7, -0xDB4D,0xDB4E,0xDB4F,0xCCF8,0xDB50,0xBCF9,0xDB51,0xF5CE, -0xF5CF,0xF5D1,0xB6E5,0xF5D2,0xDB52,0xF5D5,0xDB53,0xDB54, -0xDB55,0xDB56,0xDB57,0xDB58,0xDB59,0xF5BD,0xDB5A,0xDB5B, -0xDB5C,0xF5D4,0xD3BB,0xDB5D,0xB3EC,0xDB5E,0xDB5F,0xCCA4, -0xDB60,0xDB61,0xDB62,0xDB63,0xF5D6,0xDB64,0xDB65,0xDB66, -0xDB67,0xDB68,0xDB69,0xDB6A,0xDB6B,0xF5D7,0xBEE1,0xF5D8, -0xDB6C,0xDB6D,0xCCDF,0xF5DB,0xDB6E,0xDB6F,0xDB70,0xDB71, -0xDB72,0xB2C8,0xD7D9,0xDB73,0xF5D9,0xDB74,0xF5DA,0xF5DC, -0xDB75,0xF5E2,0xDB76,0xDB77,0xDB78,0xF5E0,0xDB79,0xDB7A, -0xDB7B,0xF5DF,0xF5DD,0xDB7C,0xDB7D,0xF5E1,0xDB7E,0xDB80, -0xF5DE,0xF5E4,0xF5E5,0xDB81,0xCCE3,0xDB82,0xDB83,0xE5BF, -0xB5B8,0xF5E3,0xF5E8,0xCCA3,0xDB84,0xDB85,0xDB86,0xDB87, -0xDB88,0xF5E6,0xF5E7,0xDB89,0xDB8A,0xDB8B,0xDB8C,0xDB8D, -0xDB8E,0xF5BE,0xDB8F,0xDB90,0xDB91,0xDB92,0xDB93,0xDB94, -0xDB95,0xDB96,0xDB97,0xDB98,0xDB99,0xDB9A,0xB1C4,0xDB9B, -0xDB9C,0xF5BF,0xDB9D,0xDB9E,0xB5C5,0xB2E4,0xDB9F,0xF5EC, -0xF5E9,0xDBA0,0xB6D7,0xDC40,0xF5ED,0xDC41,0xF5EA,0xDC42, -0xDC43,0xDC44,0xDC45,0xDC46,0xF5EB,0xDC47,0xDC48,0xB4DA, -0xDC49,0xD4EA,0xDC4A,0xDC4B,0xDC4C,0xF5EE,0xDC4D,0xB3F9, -0xDC4E,0xDC4F,0xDC50,0xDC51,0xDC52,0xDC53,0xDC54,0xF5EF, -0xF5F1,0xDC55,0xDC56,0xDC57,0xF5F0,0xDC58,0xDC59,0xDC5A, -0xDC5B,0xDC5C,0xDC5D,0xDC5E,0xF5F2,0xDC5F,0xF5F3,0xDC60, -0xDC61,0xDC62,0xDC63,0xDC64,0xDC65,0xDC66,0xDC67,0xDC68, -0xDC69,0xDC6A,0xDC6B,0xC9ED,0xB9AA,0xDC6C,0xDC6D,0xC7FB, -0xDC6E,0xDC6F,0xB6E3,0xDC70,0xDC71,0xDC72,0xDC73,0xDC74, -0xDC75,0xDC76,0xCCC9,0xDC77,0xDC78,0xDC79,0xDC7A,0xDC7B, -0xDC7C,0xDC7D,0xDC7E,0xDC80,0xDC81,0xDC82,0xDC83,0xDC84, -0xDC85,0xDC86,0xDC87,0xDC88,0xDC89,0xDC8A,0xEAA6,0xDC8B, -0xDC8C,0xDC8D,0xDC8E,0xDC8F,0xDC90,0xDC91,0xDC92,0xDC93, -0xDC94,0xDC95,0xDC96,0xDC97,0xDC98,0xDC99,0xDC9A,0xDC9B, -0xDC9C,0xDC9D,0xDC9E,0xDC9F,0xDCA0,0xDD40,0xDD41,0xDD42, -0xDD43,0xDD44,0xDD45,0xDD46,0xDD47,0xDD48,0xDD49,0xDD4A, -0xDD4B,0xDD4C,0xDD4D,0xDD4E,0xDD4F,0xDD50,0xDD51,0xDD52, -0xDD53,0xDD54,0xDD55,0xDD56,0xDD57,0xDD58,0xDD59,0xDD5A, -0xDD5B,0xDD5C,0xDD5D,0xDD5E,0xDD5F,0xDD60,0xDD61,0xDD62, -0xDD63,0xDD64,0xDD65,0xDD66,0xDD67,0xDD68,0xDD69,0xDD6A, -0xDD6B,0xDD6C,0xDD6D,0xDD6E,0xDD6F,0xDD70,0xDD71,0xDD72, -0xDD73,0xDD74,0xDD75,0xDD76,0xDD77,0xDD78,0xDD79,0xDD7A, -0xDD7B,0xDD7C,0xDD7D,0xDD7E,0xDD80,0xDD81,0xDD82,0xDD83, -0xDD84,0xDD85,0xDD86,0xDD87,0xDD88,0xDD89,0xDD8A,0xDD8B, -0xDD8C,0xDD8D,0xDD8E,0xDD8F,0xDD90,0xDD91,0xDD92,0xDD93, -0xDD94,0xDD95,0xDD96,0xDD97,0xDD98,0xDD99,0xDD9A,0xDD9B, -0xDD9C,0xDD9D,0xDD9E,0xDD9F,0xDDA0,0xDE40,0xDE41,0xDE42, -0xDE43,0xDE44,0xDE45,0xDE46,0xDE47,0xDE48,0xDE49,0xDE4A, -0xDE4B,0xDE4C,0xDE4D,0xDE4E,0xDE4F,0xDE50,0xDE51,0xDE52, -0xDE53,0xDE54,0xDE55,0xDE56,0xDE57,0xDE58,0xDE59,0xDE5A, -0xDE5B,0xDE5C,0xDE5D,0xDE5E,0xDE5F,0xDE60,0xB3B5,0xD4FE, -0xB9EC,0xD0F9,0xDE61,0xE9ED,0xD7AA,0xE9EE,0xC2D6,0xC8ED, -0xBAE4,0xE9EF,0xE9F0,0xE9F1,0xD6E1,0xE9F2,0xE9F3,0xE9F5, -0xE9F4,0xE9F6,0xE9F7,0xC7E1,0xE9F8,0xD4D8,0xE9F9,0xBDCE, -0xDE62,0xE9FA,0xE9FB,0xBDCF,0xE9FC,0xB8A8,0xC1BE,0xE9FD, -0xB1B2,0xBBD4,0xB9F5,0xE9FE,0xDE63,0xEAA1,0xEAA2,0xEAA3, -0xB7F8,0xBCAD,0xDE64,0xCAE4,0xE0CE,0xD4AF,0xCFBD,0xD5B7, -0xEAA4,0xD5DE,0xEAA5,0xD0C1,0xB9BC,0xDE65,0xB4C7,0xB1D9, -0xDE66,0xDE67,0xDE68,0xC0B1,0xDE69,0xDE6A,0xDE6B,0xDE6C, -0xB1E6,0xB1E7,0xDE6D,0xB1E8,0xDE6E,0xDE6F,0xDE70,0xDE71, -0xB3BD,0xC8E8,0xDE72,0xDE73,0xDE74,0xDE75,0xE5C1,0xDE76, -0xDE77,0xB1DF,0xDE78,0xDE79,0xDE7A,0xC1C9,0xB4EF,0xDE7B, -0xDE7C,0xC7A8,0xD3D8,0xDE7D,0xC6F9,0xD1B8,0xDE7E,0xB9FD, -0xC2F5,0xDE80,0xDE81,0xDE82,0xDE83,0xDE84,0xD3AD,0xDE85, -0xD4CB,0xBDFC,0xDE86,0xE5C2,0xB7B5,0xE5C3,0xDE87,0xDE88, -0xBBB9,0xD5E2,0xDE89,0xBDF8,0xD4B6,0xCEA5,0xC1AC,0xB3D9, -0xDE8A,0xDE8B,0xCCF6,0xDE8C,0xE5C6,0xE5C4,0xE5C8,0xDE8D, -0xE5CA,0xE5C7,0xB5CF,0xC6C8,0xDE8E,0xB5FC,0xE5C5,0xDE8F, -0xCAF6,0xDE90,0xDE91,0xE5C9,0xDE92,0xDE93,0xDE94,0xC3D4, -0xB1C5,0xBCA3,0xDE95,0xDE96,0xDE97,0xD7B7,0xDE98,0xDE99, -0xCDCB,0xCBCD,0xCACA,0xCCD3,0xE5CC,0xE5CB,0xC4E6,0xDE9A, -0xDE9B,0xD1A1,0xD1B7,0xE5CD,0xDE9C,0xE5D0,0xDE9D,0xCDB8, -0xD6F0,0xE5CF,0xB5DD,0xDE9E,0xCDBE,0xDE9F,0xE5D1,0xB6BA, -0xDEA0,0xDF40,0xCDA8,0xB9E4,0xDF41,0xCAC5,0xB3D1,0xCBD9, -0xD4EC,0xE5D2,0xB7EA,0xDF42,0xDF43,0xDF44,0xE5CE,0xDF45, -0xDF46,0xDF47,0xDF48,0xDF49,0xDF4A,0xE5D5,0xB4FE,0xE5D6, -0xDF4B,0xDF4C,0xDF4D,0xDF4E,0xDF4F,0xE5D3,0xE5D4,0xDF50, -0xD2DD,0xDF51,0xDF52,0xC2DF,0xB1C6,0xDF53,0xD3E2,0xDF54, -0xDF55,0xB6DD,0xCBEC,0xDF56,0xE5D7,0xDF57,0xDF58,0xD3F6, -0xDF59,0xDF5A,0xDF5B,0xDF5C,0xDF5D,0xB1E9,0xDF5E,0xB6F4, -0xE5DA,0xE5D8,0xE5D9,0xB5C0,0xDF5F,0xDF60,0xDF61,0xD2C5, -0xE5DC,0xDF62,0xDF63,0xE5DE,0xDF64,0xDF65,0xDF66,0xDF67, -0xDF68,0xDF69,0xE5DD,0xC7B2,0xDF6A,0xD2A3,0xDF6B,0xDF6C, -0xE5DB,0xDF6D,0xDF6E,0xDF6F,0xDF70,0xD4E2,0xD5DA,0xDF71, -0xDF72,0xDF73,0xDF74,0xDF75,0xE5E0,0xD7F1,0xDF76,0xDF77, -0xDF78,0xDF79,0xDF7A,0xDF7B,0xDF7C,0xE5E1,0xDF7D,0xB1DC, -0xD1FB,0xDF7E,0xE5E2,0xE5E4,0xDF80,0xDF81,0xDF82,0xDF83, -0xE5E3,0xDF84,0xDF85,0xE5E5,0xDF86,0xDF87,0xDF88,0xDF89, -0xDF8A,0xD2D8,0xDF8B,0xB5CB,0xDF8C,0xE7DF,0xDF8D,0xDAF5, -0xDF8E,0xDAF8,0xDF8F,0xDAF6,0xDF90,0xDAF7,0xDF91,0xDF92, -0xDF93,0xDAFA,0xD0CF,0xC4C7,0xDF94,0xDF95,0xB0EE,0xDF96, -0xDF97,0xDF98,0xD0B0,0xDF99,0xDAF9,0xDF9A,0xD3CA,0xBAAA, -0xDBA2,0xC7F1,0xDF9B,0xDAFC,0xDAFB,0xC9DB,0xDAFD,0xDF9C, -0xDBA1,0xD7DE,0xDAFE,0xC1DA,0xDF9D,0xDF9E,0xDBA5,0xDF9F, -0xDFA0,0xD3F4,0xE040,0xE041,0xDBA7,0xDBA4,0xE042,0xDBA8, -0xE043,0xE044,0xBDBC,0xE045,0xE046,0xE047,0xC0C9,0xDBA3, -0xDBA6,0xD6A3,0xE048,0xDBA9,0xE049,0xE04A,0xE04B,0xDBAD, -0xE04C,0xE04D,0xE04E,0xDBAE,0xDBAC,0xBAC2,0xE04F,0xE050, -0xE051,0xBFA4,0xDBAB,0xE052,0xE053,0xE054,0xDBAA,0xD4C7, -0xB2BF,0xE055,0xE056,0xDBAF,0xE057,0xB9F9,0xE058,0xDBB0, -0xE059,0xE05A,0xE05B,0xE05C,0xB3BB,0xE05D,0xE05E,0xE05F, -0xB5A6,0xE060,0xE061,0xE062,0xE063,0xB6BC,0xDBB1,0xE064, -0xE065,0xE066,0xB6F5,0xE067,0xDBB2,0xE068,0xE069,0xE06A, -0xE06B,0xE06C,0xE06D,0xE06E,0xE06F,0xE070,0xE071,0xE072, -0xE073,0xE074,0xE075,0xE076,0xE077,0xE078,0xE079,0xE07A, -0xE07B,0xB1C9,0xE07C,0xE07D,0xE07E,0xE080,0xDBB4,0xE081, -0xE082,0xE083,0xDBB3,0xDBB5,0xE084,0xE085,0xE086,0xE087, -0xE088,0xE089,0xE08A,0xE08B,0xE08C,0xE08D,0xE08E,0xDBB7, -0xE08F,0xDBB6,0xE090,0xE091,0xE092,0xE093,0xE094,0xE095, -0xE096,0xDBB8,0xE097,0xE098,0xE099,0xE09A,0xE09B,0xE09C, -0xE09D,0xE09E,0xE09F,0xDBB9,0xE0A0,0xE140,0xDBBA,0xE141, -0xE142,0xD3CF,0xF4FA,0xC7F5,0xD7C3,0xC5E4,0xF4FC,0xF4FD, -0xF4FB,0xE143,0xBEC6,0xE144,0xE145,0xE146,0xE147,0xD0EF, -0xE148,0xE149,0xB7D3,0xE14A,0xE14B,0xD4CD,0xCCAA,0xE14C, -0xE14D,0xF5A2,0xF5A1,0xBAA8,0xF4FE,0xCBD6,0xE14E,0xE14F, -0xE150,0xF5A4,0xC0D2,0xE151,0xB3EA,0xE152,0xCDAA,0xF5A5, -0xF5A3,0xBDB4,0xF5A8,0xE153,0xF5A9,0xBDCD,0xC3B8,0xBFE1, -0xCBE1,0xF5AA,0xE154,0xE155,0xE156,0xF5A6,0xF5A7,0xC4F0, -0xE157,0xE158,0xE159,0xE15A,0xE15B,0xF5AC,0xE15C,0xB4BC, -0xE15D,0xD7ED,0xE15E,0xB4D7,0xF5AB,0xF5AE,0xE15F,0xE160, -0xF5AD,0xF5AF,0xD0D1,0xE161,0xE162,0xE163,0xE164,0xE165, -0xE166,0xE167,0xC3D1,0xC8A9,0xE168,0xE169,0xE16A,0xE16B, -0xE16C,0xE16D,0xF5B0,0xF5B1,0xE16E,0xE16F,0xE170,0xE171, -0xE172,0xE173,0xF5B2,0xE174,0xE175,0xF5B3,0xF5B4,0xF5B5, -0xE176,0xE177,0xE178,0xE179,0xF5B7,0xF5B6,0xE17A,0xE17B, -0xE17C,0xE17D,0xF5B8,0xE17E,0xE180,0xE181,0xE182,0xE183, -0xE184,0xE185,0xE186,0xE187,0xE188,0xE189,0xE18A,0xB2C9, -0xE18B,0xD3D4,0xCACD,0xE18C,0xC0EF,0xD6D8,0xD2B0,0xC1BF, -0xE18D,0xBDF0,0xE18E,0xE18F,0xE190,0xE191,0xE192,0xE193, -0xE194,0xE195,0xE196,0xE197,0xB8AA,0xE198,0xE199,0xE19A, -0xE19B,0xE19C,0xE19D,0xE19E,0xE19F,0xE1A0,0xE240,0xE241, -0xE242,0xE243,0xE244,0xE245,0xE246,0xE247,0xE248,0xE249, -0xE24A,0xE24B,0xE24C,0xE24D,0xE24E,0xE24F,0xE250,0xE251, -0xE252,0xE253,0xE254,0xE255,0xE256,0xE257,0xE258,0xE259, -0xE25A,0xE25B,0xE25C,0xE25D,0xE25E,0xE25F,0xE260,0xE261, -0xE262,0xE263,0xE264,0xE265,0xE266,0xE267,0xE268,0xE269, -0xE26A,0xE26B,0xE26C,0xE26D,0xE26E,0xE26F,0xE270,0xE271, -0xE272,0xE273,0xE274,0xE275,0xE276,0xE277,0xE278,0xE279, -0xE27A,0xE27B,0xE27C,0xE27D,0xE27E,0xE280,0xE281,0xE282, -0xE283,0xE284,0xE285,0xE286,0xE287,0xE288,0xE289,0xE28A, -0xE28B,0xE28C,0xE28D,0xE28E,0xE28F,0xE290,0xE291,0xE292, -0xE293,0xE294,0xE295,0xE296,0xE297,0xE298,0xE299,0xE29A, -0xE29B,0xE29C,0xE29D,0xE29E,0xE29F,0xE2A0,0xE340,0xE341, -0xE342,0xE343,0xE344,0xE345,0xE346,0xE347,0xE348,0xE349, -0xE34A,0xE34B,0xE34C,0xE34D,0xE34E,0xE34F,0xE350,0xE351, -0xE352,0xE353,0xE354,0xE355,0xE356,0xE357,0xE358,0xE359, -0xE35A,0xE35B,0xE35C,0xE35D,0xE35E,0xE35F,0xE360,0xE361, -0xE362,0xE363,0xE364,0xE365,0xE366,0xE367,0xE368,0xE369, -0xE36A,0xE36B,0xE36C,0xE36D,0xBCF8,0xE36E,0xE36F,0xE370, -0xE371,0xE372,0xE373,0xE374,0xE375,0xE376,0xE377,0xE378, -0xE379,0xE37A,0xE37B,0xE37C,0xE37D,0xE37E,0xE380,0xE381, -0xE382,0xE383,0xE384,0xE385,0xE386,0xE387,0xF6C6,0xE388, -0xE389,0xE38A,0xE38B,0xE38C,0xE38D,0xE38E,0xE38F,0xE390, -0xE391,0xE392,0xE393,0xE394,0xE395,0xE396,0xE397,0xE398, -0xE399,0xE39A,0xE39B,0xE39C,0xE39D,0xE39E,0xE39F,0xE3A0, -0xE440,0xE441,0xE442,0xE443,0xE444,0xE445,0xF6C7,0xE446, -0xE447,0xE448,0xE449,0xE44A,0xE44B,0xE44C,0xE44D,0xE44E, -0xE44F,0xE450,0xE451,0xE452,0xE453,0xE454,0xE455,0xE456, -0xE457,0xE458,0xE459,0xE45A,0xE45B,0xE45C,0xE45D,0xE45E, -0xF6C8,0xE45F,0xE460,0xE461,0xE462,0xE463,0xE464,0xE465, -0xE466,0xE467,0xE468,0xE469,0xE46A,0xE46B,0xE46C,0xE46D, -0xE46E,0xE46F,0xE470,0xE471,0xE472,0xE473,0xE474,0xE475, -0xE476,0xE477,0xE478,0xE479,0xE47A,0xE47B,0xE47C,0xE47D, -0xE47E,0xE480,0xE481,0xE482,0xE483,0xE484,0xE485,0xE486, -0xE487,0xE488,0xE489,0xE48A,0xE48B,0xE48C,0xE48D,0xE48E, -0xE48F,0xE490,0xE491,0xE492,0xE493,0xE494,0xE495,0xE496, -0xE497,0xE498,0xE499,0xE49A,0xE49B,0xE49C,0xE49D,0xE49E, -0xE49F,0xE4A0,0xE540,0xE541,0xE542,0xE543,0xE544,0xE545, -0xE546,0xE547,0xE548,0xE549,0xE54A,0xE54B,0xE54C,0xE54D, -0xE54E,0xE54F,0xE550,0xE551,0xE552,0xE553,0xE554,0xE555, -0xE556,0xE557,0xE558,0xE559,0xE55A,0xE55B,0xE55C,0xE55D, -0xE55E,0xE55F,0xE560,0xE561,0xE562,0xE563,0xE564,0xE565, -0xE566,0xE567,0xE568,0xE569,0xE56A,0xE56B,0xE56C,0xE56D, -0xE56E,0xE56F,0xE570,0xE571,0xE572,0xE573,0xF6C9,0xE574, -0xE575,0xE576,0xE577,0xE578,0xE579,0xE57A,0xE57B,0xE57C, -0xE57D,0xE57E,0xE580,0xE581,0xE582,0xE583,0xE584,0xE585, -0xE586,0xE587,0xE588,0xE589,0xE58A,0xE58B,0xE58C,0xE58D, -0xE58E,0xE58F,0xE590,0xE591,0xE592,0xE593,0xE594,0xE595, -0xE596,0xE597,0xE598,0xE599,0xE59A,0xE59B,0xE59C,0xE59D, -0xE59E,0xE59F,0xF6CA,0xE5A0,0xE640,0xE641,0xE642,0xE643, -0xE644,0xE645,0xE646,0xE647,0xE648,0xE649,0xE64A,0xE64B, -0xE64C,0xE64D,0xE64E,0xE64F,0xE650,0xE651,0xE652,0xE653, -0xE654,0xE655,0xE656,0xE657,0xE658,0xE659,0xE65A,0xE65B, -0xE65C,0xE65D,0xE65E,0xE65F,0xE660,0xE661,0xE662,0xF6CC, -0xE663,0xE664,0xE665,0xE666,0xE667,0xE668,0xE669,0xE66A, -0xE66B,0xE66C,0xE66D,0xE66E,0xE66F,0xE670,0xE671,0xE672, -0xE673,0xE674,0xE675,0xE676,0xE677,0xE678,0xE679,0xE67A, -0xE67B,0xE67C,0xE67D,0xE67E,0xE680,0xE681,0xE682,0xE683, -0xE684,0xE685,0xE686,0xE687,0xE688,0xE689,0xE68A,0xE68B, -0xE68C,0xE68D,0xE68E,0xE68F,0xE690,0xE691,0xE692,0xE693, -0xE694,0xE695,0xE696,0xE697,0xE698,0xE699,0xE69A,0xE69B, -0xE69C,0xE69D,0xF6CB,0xE69E,0xE69F,0xE6A0,0xE740,0xE741, -0xE742,0xE743,0xE744,0xE745,0xE746,0xE747,0xF7E9,0xE748, -0xE749,0xE74A,0xE74B,0xE74C,0xE74D,0xE74E,0xE74F,0xE750, -0xE751,0xE752,0xE753,0xE754,0xE755,0xE756,0xE757,0xE758, -0xE759,0xE75A,0xE75B,0xE75C,0xE75D,0xE75E,0xE75F,0xE760, -0xE761,0xE762,0xE763,0xE764,0xE765,0xE766,0xE767,0xE768, -0xE769,0xE76A,0xE76B,0xE76C,0xE76D,0xE76E,0xE76F,0xE770, -0xE771,0xE772,0xE773,0xE774,0xE775,0xE776,0xE777,0xE778, -0xE779,0xE77A,0xE77B,0xE77C,0xE77D,0xE77E,0xE780,0xE781, -0xE782,0xE783,0xE784,0xE785,0xE786,0xE787,0xE788,0xE789, -0xE78A,0xE78B,0xE78C,0xE78D,0xE78E,0xE78F,0xE790,0xE791, -0xE792,0xE793,0xE794,0xE795,0xE796,0xE797,0xE798,0xE799, -0xE79A,0xE79B,0xE79C,0xE79D,0xE79E,0xE79F,0xE7A0,0xE840, -0xE841,0xE842,0xE843,0xE844,0xE845,0xE846,0xE847,0xE848, -0xE849,0xE84A,0xE84B,0xE84C,0xE84D,0xE84E,0xF6CD,0xE84F, -0xE850,0xE851,0xE852,0xE853,0xE854,0xE855,0xE856,0xE857, -0xE858,0xE859,0xE85A,0xE85B,0xE85C,0xE85D,0xE85E,0xE85F, -0xE860,0xE861,0xE862,0xE863,0xE864,0xE865,0xE866,0xE867, -0xE868,0xE869,0xE86A,0xE86B,0xE86C,0xE86D,0xE86E,0xE86F, -0xE870,0xE871,0xE872,0xE873,0xE874,0xE875,0xE876,0xE877, -0xE878,0xE879,0xE87A,0xF6CE,0xE87B,0xE87C,0xE87D,0xE87E, -0xE880,0xE881,0xE882,0xE883,0xE884,0xE885,0xE886,0xE887, -0xE888,0xE889,0xE88A,0xE88B,0xE88C,0xE88D,0xE88E,0xE88F, -0xE890,0xE891,0xE892,0xE893,0xE894,0xEEC4,0xEEC5,0xEEC6, -0xD5EB,0xB6A4,0xEEC8,0xEEC7,0xEEC9,0xEECA,0xC7A5,0xEECB, -0xEECC,0xE895,0xB7B0,0xB5F6,0xEECD,0xEECF,0xE896,0xEECE, -0xE897,0xB8C6,0xEED0,0xEED1,0xEED2,0xB6DB,0xB3AE,0xD6D3, -0xC4C6,0xB1B5,0xB8D6,0xEED3,0xEED4,0xD4BF,0xC7D5,0xBEFB, -0xCED9,0xB9B3,0xEED6,0xEED5,0xEED8,0xEED7,0xC5A5,0xEED9, -0xEEDA,0xC7AE,0xEEDB,0xC7AF,0xEEDC,0xB2A7,0xEEDD,0xEEDE, -0xEEDF,0xEEE0,0xEEE1,0xD7EA,0xEEE2,0xEEE3,0xBCD8,0xEEE4, -0xD3CB,0xCCFA,0xB2AC,0xC1E5,0xEEE5,0xC7A6,0xC3AD,0xE898, -0xEEE6,0xEEE7,0xEEE8,0xEEE9,0xEEEA,0xEEEB,0xEEEC,0xE899, -0xEEED,0xEEEE,0xEEEF,0xE89A,0xE89B,0xEEF0,0xEEF1,0xEEF2, -0xEEF4,0xEEF3,0xE89C,0xEEF5,0xCDAD,0xC2C1,0xEEF6,0xEEF7, -0xEEF8,0xD5A1,0xEEF9,0xCFB3,0xEEFA,0xEEFB,0xE89D,0xEEFC, -0xEEFD,0xEFA1,0xEEFE,0xEFA2,0xB8F5,0xC3FA,0xEFA3,0xEFA4, -0xBDC2,0xD2BF,0xB2F9,0xEFA5,0xEFA6,0xEFA7,0xD2F8,0xEFA8, -0xD6FD,0xEFA9,0xC6CC,0xE89E,0xEFAA,0xEFAB,0xC1B4,0xEFAC, -0xCFFA,0xCBF8,0xEFAE,0xEFAD,0xB3FA,0xB9F8,0xEFAF,0xEFB0, -0xD0E2,0xEFB1,0xEFB2,0xB7E6,0xD0BF,0xEFB3,0xEFB4,0xEFB5, -0xC8F1,0xCCE0,0xEFB6,0xEFB7,0xEFB8,0xEFB9,0xEFBA,0xD5E0, -0xEFBB,0xB4ED,0xC3AA,0xEFBC,0xE89F,0xEFBD,0xEFBE,0xEFBF, -0xE8A0,0xCEFD,0xEFC0,0xC2E0,0xB4B8,0xD7B6,0xBDF5,0xE940, -0xCFC7,0xEFC3,0xEFC1,0xEFC2,0xEFC4,0xB6A7,0xBCFC,0xBEE2, -0xC3CC,0xEFC5,0xEFC6,0xE941,0xEFC7,0xEFCF,0xEFC8,0xEFC9, -0xEFCA,0xC7C2,0xEFF1,0xB6CD,0xEFCB,0xE942,0xEFCC,0xEFCD, -0xB6C6,0xC3BE,0xEFCE,0xE943,0xEFD0,0xEFD1,0xEFD2,0xD5F2, -0xE944,0xEFD3,0xC4F7,0xE945,0xEFD4,0xC4F8,0xEFD5,0xEFD6, -0xB8E4,0xB0F7,0xEFD7,0xEFD8,0xEFD9,0xE946,0xEFDA,0xEFDB, -0xEFDC,0xEFDD,0xE947,0xEFDE,0xBEB5,0xEFE1,0xEFDF,0xEFE0, -0xE948,0xEFE2,0xEFE3,0xC1CD,0xEFE4,0xEFE5,0xEFE6,0xEFE7, -0xEFE8,0xEFE9,0xEFEA,0xEFEB,0xEFEC,0xC0D8,0xE949,0xEFED, -0xC1AD,0xEFEE,0xEFEF,0xEFF0,0xE94A,0xE94B,0xCFE2,0xE94C, -0xE94D,0xE94E,0xE94F,0xE950,0xE951,0xE952,0xE953,0xB3A4, -0xE954,0xE955,0xE956,0xE957,0xE958,0xE959,0xE95A,0xE95B, -0xE95C,0xE95D,0xE95E,0xE95F,0xE960,0xE961,0xE962,0xE963, -0xE964,0xE965,0xE966,0xE967,0xE968,0xE969,0xE96A,0xE96B, -0xE96C,0xE96D,0xE96E,0xE96F,0xE970,0xE971,0xE972,0xE973, -0xE974,0xE975,0xE976,0xE977,0xE978,0xE979,0xE97A,0xE97B, -0xE97C,0xE97D,0xE97E,0xE980,0xE981,0xE982,0xE983,0xE984, -0xE985,0xE986,0xE987,0xE988,0xE989,0xE98A,0xE98B,0xE98C, -0xE98D,0xE98E,0xE98F,0xE990,0xE991,0xE992,0xE993,0xE994, -0xE995,0xE996,0xE997,0xE998,0xE999,0xE99A,0xE99B,0xE99C, -0xE99D,0xE99E,0xE99F,0xE9A0,0xEA40,0xEA41,0xEA42,0xEA43, -0xEA44,0xEA45,0xEA46,0xEA47,0xEA48,0xEA49,0xEA4A,0xEA4B, -0xEA4C,0xEA4D,0xEA4E,0xEA4F,0xEA50,0xEA51,0xEA52,0xEA53, -0xEA54,0xEA55,0xEA56,0xEA57,0xEA58,0xEA59,0xEA5A,0xEA5B, -0xC3C5,0xE3C5,0xC9C1,0xE3C6,0xEA5C,0xB1D5,0xCECA,0xB4B3, -0xC8F2,0xE3C7,0xCFD0,0xE3C8,0xBCE4,0xE3C9,0xE3CA,0xC3C6, -0xD5A2,0xC4D6,0xB9EB,0xCEC5,0xE3CB,0xC3F6,0xE3CC,0xEA5D, -0xB7A7,0xB8F3,0xBAD2,0xE3CD,0xE3CE,0xD4C4,0xE3CF,0xEA5E, -0xE3D0,0xD1CB,0xE3D1,0xE3D2,0xE3D3,0xE3D4,0xD1D6,0xE3D5, -0xB2FB,0xC0BB,0xE3D6,0xEA5F,0xC0AB,0xE3D7,0xE3D8,0xE3D9, -0xEA60,0xE3DA,0xE3DB,0xEA61,0xB8B7,0xDAE2,0xEA62,0xB6D3, -0xEA63,0xDAE4,0xDAE3,0xEA64,0xEA65,0xEA66,0xEA67,0xEA68, -0xEA69,0xEA6A,0xDAE6,0xEA6B,0xEA6C,0xEA6D,0xC8EE,0xEA6E, -0xEA6F,0xDAE5,0xB7C0,0xD1F4,0xD2F5,0xD5F3,0xBDD7,0xEA70, -0xEA71,0xEA72,0xEA73,0xD7E8,0xDAE8,0xDAE7,0xEA74,0xB0A2, -0xCDD3,0xEA75,0xDAE9,0xEA76,0xB8BD,0xBCCA,0xC2BD,0xC2A4, -0xB3C2,0xDAEA,0xEA77,0xC2AA,0xC4B0,0xBDB5,0xEA78,0xEA79, -0xCFDE,0xEA7A,0xEA7B,0xEA7C,0xDAEB,0xC9C2,0xEA7D,0xEA7E, -0xEA80,0xEA81,0xEA82,0xB1DD,0xEA83,0xEA84,0xEA85,0xDAEC, -0xEA86,0xB6B8,0xD4BA,0xEA87,0xB3FD,0xEA88,0xEA89,0xDAED, -0xD4C9,0xCFD5,0xC5E3,0xEA8A,0xDAEE,0xEA8B,0xEA8C,0xEA8D, -0xEA8E,0xEA8F,0xDAEF,0xEA90,0xDAF0,0xC1EA,0xCCD5,0xCFDD, -0xEA91,0xEA92,0xEA93,0xEA94,0xEA95,0xEA96,0xEA97,0xEA98, -0xEA99,0xEA9A,0xEA9B,0xEA9C,0xEA9D,0xD3E7,0xC2A1,0xEA9E, -0xDAF1,0xEA9F,0xEAA0,0xCBE5,0xEB40,0xDAF2,0xEB41,0xCBE6, -0xD2FE,0xEB42,0xEB43,0xEB44,0xB8F4,0xEB45,0xEB46,0xDAF3, -0xB0AF,0xCFB6,0xEB47,0xEB48,0xD5CF,0xEB49,0xEB4A,0xEB4B, -0xEB4C,0xEB4D,0xEB4E,0xEB4F,0xEB50,0xEB51,0xEB52,0xCBED, -0xEB53,0xEB54,0xEB55,0xEB56,0xEB57,0xEB58,0xEB59,0xEB5A, -0xDAF4,0xEB5B,0xEB5C,0xE3C4,0xEB5D,0xEB5E,0xC1A5,0xEB5F, -0xEB60,0xF6BF,0xEB61,0xEB62,0xF6C0,0xF6C1,0xC4D1,0xEB63, -0xC8B8,0xD1E3,0xEB64,0xEB65,0xD0DB,0xD1C5,0xBCAF,0xB9CD, -0xEB66,0xEFF4,0xEB67,0xEB68,0xB4C6,0xD3BA,0xF6C2,0xB3FB, -0xEB69,0xEB6A,0xF6C3,0xEB6B,0xEB6C,0xB5F1,0xEB6D,0xEB6E, -0xEB6F,0xEB70,0xEB71,0xEB72,0xEB73,0xEB74,0xEB75,0xEB76, -0xF6C5,0xEB77,0xEB78,0xEB79,0xEB7A,0xEB7B,0xEB7C,0xEB7D, -0xD3EA,0xF6A7,0xD1A9,0xEB7E,0xEB80,0xEB81,0xEB82,0xF6A9, -0xEB83,0xEB84,0xEB85,0xF6A8,0xEB86,0xEB87,0xC1E3,0xC0D7, -0xEB88,0xB1A2,0xEB89,0xEB8A,0xEB8B,0xEB8C,0xCEED,0xEB8D, -0xD0E8,0xF6AB,0xEB8E,0xEB8F,0xCFF6,0xEB90,0xF6AA,0xD5F0, -0xF6AC,0xC3B9,0xEB91,0xEB92,0xEB93,0xBBF4,0xF6AE,0xF6AD, -0xEB94,0xEB95,0xEB96,0xC4DE,0xEB97,0xEB98,0xC1D8,0xEB99, -0xEB9A,0xEB9B,0xEB9C,0xEB9D,0xCBAA,0xEB9E,0xCFBC,0xEB9F, -0xEBA0,0xEC40,0xEC41,0xEC42,0xEC43,0xEC44,0xEC45,0xEC46, -0xEC47,0xEC48,0xF6AF,0xEC49,0xEC4A,0xF6B0,0xEC4B,0xEC4C, -0xF6B1,0xEC4D,0xC2B6,0xEC4E,0xEC4F,0xEC50,0xEC51,0xEC52, -0xB0D4,0xC5F9,0xEC53,0xEC54,0xEC55,0xEC56,0xF6B2,0xEC57, -0xEC58,0xEC59,0xEC5A,0xEC5B,0xEC5C,0xEC5D,0xEC5E,0xEC5F, -0xEC60,0xEC61,0xEC62,0xEC63,0xEC64,0xEC65,0xEC66,0xEC67, -0xEC68,0xEC69,0xC7E0,0xF6A6,0xEC6A,0xEC6B,0xBEB8,0xEC6C, -0xEC6D,0xBEB2,0xEC6E,0xB5E5,0xEC6F,0xEC70,0xB7C7,0xEC71, -0xBFBF,0xC3D2,0xC3E6,0xEC72,0xEC73,0xD8CC,0xEC74,0xEC75, -0xEC76,0xB8EF,0xEC77,0xEC78,0xEC79,0xEC7A,0xEC7B,0xEC7C, -0xEC7D,0xEC7E,0xEC80,0xBDF9,0xD1A5,0xEC81,0xB0D0,0xEC82, -0xEC83,0xEC84,0xEC85,0xEC86,0xF7B0,0xEC87,0xEC88,0xEC89, -0xEC8A,0xEC8B,0xEC8C,0xEC8D,0xEC8E,0xF7B1,0xEC8F,0xEC90, -0xEC91,0xEC92,0xEC93,0xD0AC,0xEC94,0xB0B0,0xEC95,0xEC96, -0xEC97,0xF7B2,0xF7B3,0xEC98,0xF7B4,0xEC99,0xEC9A,0xEC9B, -0xC7CA,0xEC9C,0xEC9D,0xEC9E,0xEC9F,0xECA0,0xED40,0xED41, -0xBECF,0xED42,0xED43,0xF7B7,0xED44,0xED45,0xED46,0xED47, -0xED48,0xED49,0xED4A,0xF7B6,0xED4B,0xB1DE,0xED4C,0xF7B5, -0xED4D,0xED4E,0xF7B8,0xED4F,0xF7B9,0xED50,0xED51,0xED52, -0xED53,0xED54,0xED55,0xED56,0xED57,0xED58,0xED59,0xED5A, -0xED5B,0xED5C,0xED5D,0xED5E,0xED5F,0xED60,0xED61,0xED62, -0xED63,0xED64,0xED65,0xED66,0xED67,0xED68,0xED69,0xED6A, -0xED6B,0xED6C,0xED6D,0xED6E,0xED6F,0xED70,0xED71,0xED72, -0xED73,0xED74,0xED75,0xED76,0xED77,0xED78,0xED79,0xED7A, -0xED7B,0xED7C,0xED7D,0xED7E,0xED80,0xED81,0xCEA4,0xC8CD, -0xED82,0xBAAB,0xE8B8,0xE8B9,0xE8BA,0xBEC2,0xED83,0xED84, -0xED85,0xED86,0xED87,0xD2F4,0xED88,0xD4CF,0xC9D8,0xED89, -0xED8A,0xED8B,0xED8C,0xED8D,0xED8E,0xED8F,0xED90,0xED91, -0xED92,0xED93,0xED94,0xED95,0xED96,0xED97,0xED98,0xED99, -0xED9A,0xED9B,0xED9C,0xED9D,0xED9E,0xED9F,0xEDA0,0xEE40, -0xEE41,0xEE42,0xEE43,0xEE44,0xEE45,0xEE46,0xEE47,0xEE48, -0xEE49,0xEE4A,0xEE4B,0xEE4C,0xEE4D,0xEE4E,0xEE4F,0xEE50, -0xEE51,0xEE52,0xEE53,0xEE54,0xEE55,0xEE56,0xEE57,0xEE58, -0xEE59,0xEE5A,0xEE5B,0xEE5C,0xEE5D,0xEE5E,0xEE5F,0xEE60, -0xEE61,0xEE62,0xEE63,0xEE64,0xEE65,0xEE66,0xEE67,0xEE68, -0xEE69,0xEE6A,0xEE6B,0xEE6C,0xEE6D,0xEE6E,0xEE6F,0xEE70, -0xEE71,0xEE72,0xEE73,0xEE74,0xEE75,0xEE76,0xEE77,0xEE78, -0xEE79,0xEE7A,0xEE7B,0xEE7C,0xEE7D,0xEE7E,0xEE80,0xEE81, -0xEE82,0xEE83,0xEE84,0xEE85,0xEE86,0xEE87,0xEE88,0xEE89, -0xEE8A,0xEE8B,0xEE8C,0xEE8D,0xEE8E,0xEE8F,0xEE90,0xEE91, -0xEE92,0xEE93,0xEE94,0xEE95,0xEE96,0xEE97,0xEE98,0xEE99, -0xEE9A,0xEE9B,0xEE9C,0xEE9D,0xEE9E,0xEE9F,0xEEA0,0xEF40, -0xEF41,0xEF42,0xEF43,0xEF44,0xEF45,0xD2B3,0xB6A5,0xC7EA, -0xF1FC,0xCFEE,0xCBB3,0xD0EB,0xE7EF,0xCDE7,0xB9CB,0xB6D9, -0xF1FD,0xB0E4,0xCBCC,0xF1FE,0xD4A4,0xC2AD,0xC1EC,0xC6C4, -0xBEB1,0xF2A1,0xBCD5,0xEF46,0xF2A2,0xF2A3,0xEF47,0xF2A4, -0xD2C3,0xC6B5,0xEF48,0xCDC7,0xF2A5,0xEF49,0xD3B1,0xBFC5, -0xCCE2,0xEF4A,0xF2A6,0xF2A7,0xD1D5,0xB6EE,0xF2A8,0xF2A9, -0xB5DF,0xF2AA,0xF2AB,0xEF4B,0xB2FC,0xF2AC,0xF2AD,0xC8A7, -0xEF4C,0xEF4D,0xEF4E,0xEF4F,0xEF50,0xEF51,0xEF52,0xEF53, -0xEF54,0xEF55,0xEF56,0xEF57,0xEF58,0xEF59,0xEF5A,0xEF5B, -0xEF5C,0xEF5D,0xEF5E,0xEF5F,0xEF60,0xEF61,0xEF62,0xEF63, -0xEF64,0xEF65,0xEF66,0xEF67,0xEF68,0xEF69,0xEF6A,0xEF6B, -0xEF6C,0xEF6D,0xEF6E,0xEF6F,0xEF70,0xEF71,0xB7E7,0xEF72, -0xEF73,0xECA9,0xECAA,0xECAB,0xEF74,0xECAC,0xEF75,0xEF76, -0xC6AE,0xECAD,0xECAE,0xEF77,0xEF78,0xEF79,0xB7C9,0xCAB3, -0xEF7A,0xEF7B,0xEF7C,0xEF7D,0xEF7E,0xEF80,0xEF81,0xE2B8, -0xF7CF,0xEF82,0xEF83,0xEF84,0xEF85,0xEF86,0xEF87,0xEF88, -0xEF89,0xEF8A,0xEF8B,0xEF8C,0xEF8D,0xEF8E,0xEF8F,0xEF90, -0xEF91,0xEF92,0xEF93,0xEF94,0xEF95,0xEF96,0xEF97,0xEF98, -0xEF99,0xEF9A,0xEF9B,0xEF9C,0xEF9D,0xEF9E,0xEF9F,0xEFA0, -0xF040,0xF041,0xF042,0xF043,0xF044,0xF7D0,0xF045,0xF046, -0xB2CD,0xF047,0xF048,0xF049,0xF04A,0xF04B,0xF04C,0xF04D, -0xF04E,0xF04F,0xF050,0xF051,0xF052,0xF053,0xF054,0xF055, -0xF056,0xF057,0xF058,0xF059,0xF05A,0xF05B,0xF05C,0xF05D, -0xF05E,0xF05F,0xF060,0xF061,0xF062,0xF063,0xF7D1,0xF064, -0xF065,0xF066,0xF067,0xF068,0xF069,0xF06A,0xF06B,0xF06C, -0xF06D,0xF06E,0xF06F,0xF070,0xF071,0xF072,0xF073,0xF074, -0xF075,0xF076,0xF077,0xF078,0xF079,0xF07A,0xF07B,0xF07C, -0xF07D,0xF07E,0xF080,0xF081,0xF082,0xF083,0xF084,0xF085, -0xF086,0xF087,0xF088,0xF089,0xF7D3,0xF7D2,0xF08A,0xF08B, -0xF08C,0xF08D,0xF08E,0xF08F,0xF090,0xF091,0xF092,0xF093, -0xF094,0xF095,0xF096,0xE2BB,0xF097,0xBCA2,0xF098,0xE2BC, -0xE2BD,0xE2BE,0xE2BF,0xE2C0,0xE2C1,0xB7B9,0xD2FB,0xBDA4, -0xCACE,0xB1A5,0xCBC7,0xF099,0xE2C2,0xB6FC,0xC8C4,0xE2C3, -0xF09A,0xF09B,0xBDC8,0xF09C,0xB1FD,0xE2C4,0xF09D,0xB6F6, -0xE2C5,0xC4D9,0xF09E,0xF09F,0xE2C6,0xCFDA,0xB9DD,0xE2C7, -0xC0A1,0xF0A0,0xE2C8,0xB2F6,0xF140,0xE2C9,0xF141,0xC1F3, -0xE2CA,0xE2CB,0xC2F8,0xE2CC,0xE2CD,0xE2CE,0xCAD7,0xD8B8, -0xD9E5,0xCFE3,0xF142,0xF143,0xF144,0xF145,0xF146,0xF147, -0xF148,0xF149,0xF14A,0xF14B,0xF14C,0xF0A5,0xF14D,0xF14E, -0xDCB0,0xF14F,0xF150,0xF151,0xF152,0xF153,0xF154,0xF155, -0xF156,0xF157,0xF158,0xF159,0xF15A,0xF15B,0xF15C,0xF15D, -0xF15E,0xF15F,0xF160,0xF161,0xF162,0xF163,0xF164,0xF165, -0xF166,0xF167,0xF168,0xF169,0xF16A,0xF16B,0xF16C,0xF16D, -0xF16E,0xF16F,0xF170,0xF171,0xF172,0xF173,0xF174,0xF175, -0xF176,0xF177,0xF178,0xF179,0xF17A,0xF17B,0xF17C,0xF17D, -0xF17E,0xF180,0xF181,0xF182,0xF183,0xF184,0xF185,0xF186, -0xF187,0xF188,0xF189,0xF18A,0xF18B,0xF18C,0xF18D,0xF18E, -0xF18F,0xF190,0xF191,0xF192,0xF193,0xF194,0xF195,0xF196, -0xF197,0xF198,0xF199,0xF19A,0xF19B,0xF19C,0xF19D,0xF19E, -0xF19F,0xF1A0,0xF240,0xF241,0xF242,0xF243,0xF244,0xF245, -0xF246,0xF247,0xF248,0xF249,0xF24A,0xF24B,0xF24C,0xF24D, -0xF24E,0xF24F,0xF250,0xF251,0xF252,0xF253,0xF254,0xF255, -0xF256,0xF257,0xF258,0xF259,0xF25A,0xF25B,0xF25C,0xF25D, -0xF25E,0xF25F,0xF260,0xF261,0xF262,0xF263,0xF264,0xF265, -0xF266,0xF267,0xF268,0xF269,0xF26A,0xF26B,0xF26C,0xF26D, -0xF26E,0xF26F,0xF270,0xF271,0xF272,0xF273,0xF274,0xF275, -0xF276,0xF277,0xF278,0xF279,0xF27A,0xF27B,0xF27C,0xF27D, -0xF27E,0xF280,0xF281,0xF282,0xF283,0xF284,0xF285,0xF286, -0xF287,0xF288,0xF289,0xF28A,0xF28B,0xF28C,0xF28D,0xF28E, -0xF28F,0xF290,0xF291,0xF292,0xF293,0xF294,0xF295,0xF296, -0xF297,0xF298,0xF299,0xF29A,0xF29B,0xF29C,0xF29D,0xF29E, -0xF29F,0xF2A0,0xF340,0xF341,0xF342,0xF343,0xF344,0xF345, -0xF346,0xF347,0xF348,0xF349,0xF34A,0xF34B,0xF34C,0xF34D, -0xF34E,0xF34F,0xF350,0xF351,0xC2ED,0xD4A6,0xCDD4,0xD1B1, -0xB3DB,0xC7FD,0xF352,0xB2B5,0xC2BF,0xE6E0,0xCABB,0xE6E1, -0xE6E2,0xBED4,0xE6E3,0xD7A4,0xCDD5,0xE6E5,0xBCDD,0xE6E4, -0xE6E6,0xE6E7,0xC2EE,0xF353,0xBDBE,0xE6E8,0xC2E6,0xBAA7, -0xE6E9,0xF354,0xE6EA,0xB3D2,0xD1E9,0xF355,0xF356,0xBFA5, -0xE6EB,0xC6EF,0xE6EC,0xE6ED,0xF357,0xF358,0xE6EE,0xC6AD, -0xE6EF,0xF359,0xC9A7,0xE6F0,0xE6F1,0xE6F2,0xE5B9,0xE6F3, -0xE6F4,0xC2E2,0xE6F5,0xE6F6,0xD6E8,0xE6F7,0xF35A,0xE6F8, -0xB9C7,0xF35B,0xF35C,0xF35D,0xF35E,0xF35F,0xF360,0xF361, -0xF7BB,0xF7BA,0xF362,0xF363,0xF364,0xF365,0xF7BE,0xF7BC, -0xBAA1,0xF366,0xF7BF,0xF367,0xF7C0,0xF368,0xF369,0xF36A, -0xF7C2,0xF7C1,0xF7C4,0xF36B,0xF36C,0xF7C3,0xF36D,0xF36E, -0xF36F,0xF370,0xF371,0xF7C5,0xF7C6,0xF372,0xF373,0xF374, -0xF375,0xF7C7,0xF376,0xCBE8,0xF377,0xF378,0xF379,0xF37A, -0xB8DF,0xF37B,0xF37C,0xF37D,0xF37E,0xF380,0xF381,0xF7D4, -0xF382,0xF7D5,0xF383,0xF384,0xF385,0xF386,0xF7D6,0xF387, -0xF388,0xF389,0xF38A,0xF7D8,0xF38B,0xF7DA,0xF38C,0xF7D7, -0xF38D,0xF38E,0xF38F,0xF390,0xF391,0xF392,0xF393,0xF394, -0xF395,0xF7DB,0xF396,0xF7D9,0xF397,0xF398,0xF399,0xF39A, -0xF39B,0xF39C,0xF39D,0xD7D7,0xF39E,0xF39F,0xF3A0,0xF440, -0xF7DC,0xF441,0xF442,0xF443,0xF444,0xF445,0xF446,0xF7DD, -0xF447,0xF448,0xF449,0xF7DE,0xF44A,0xF44B,0xF44C,0xF44D, -0xF44E,0xF44F,0xF450,0xF451,0xF452,0xF453,0xF454,0xF7DF, -0xF455,0xF456,0xF457,0xF7E0,0xF458,0xF459,0xF45A,0xF45B, -0xF45C,0xF45D,0xF45E,0xF45F,0xF460,0xF461,0xF462,0xDBCB, -0xF463,0xF464,0xD8AA,0xF465,0xF466,0xF467,0xF468,0xF469, -0xF46A,0xF46B,0xF46C,0xE5F7,0xB9ED,0xF46D,0xF46E,0xF46F, -0xF470,0xBFFD,0xBBEA,0xF7C9,0xC6C7,0xF7C8,0xF471,0xF7CA, -0xF7CC,0xF7CB,0xF472,0xF473,0xF474,0xF7CD,0xF475,0xCEBA, -0xF476,0xF7CE,0xF477,0xF478,0xC4A7,0xF479,0xF47A,0xF47B, -0xF47C,0xF47D,0xF47E,0xF480,0xF481,0xF482,0xF483,0xF484, -0xF485,0xF486,0xF487,0xF488,0xF489,0xF48A,0xF48B,0xF48C, -0xF48D,0xF48E,0xF48F,0xF490,0xF491,0xF492,0xF493,0xF494, -0xF495,0xF496,0xF497,0xF498,0xF499,0xF49A,0xF49B,0xF49C, -0xF49D,0xF49E,0xF49F,0xF4A0,0xF540,0xF541,0xF542,0xF543, -0xF544,0xF545,0xF546,0xF547,0xF548,0xF549,0xF54A,0xF54B, -0xF54C,0xF54D,0xF54E,0xF54F,0xF550,0xF551,0xF552,0xF553, -0xF554,0xF555,0xF556,0xF557,0xF558,0xF559,0xF55A,0xF55B, -0xF55C,0xF55D,0xF55E,0xF55F,0xF560,0xF561,0xF562,0xF563, -0xF564,0xF565,0xF566,0xF567,0xF568,0xF569,0xF56A,0xF56B, -0xF56C,0xF56D,0xF56E,0xF56F,0xF570,0xF571,0xF572,0xF573, -0xF574,0xF575,0xF576,0xF577,0xF578,0xF579,0xF57A,0xF57B, -0xF57C,0xF57D,0xF57E,0xF580,0xF581,0xF582,0xF583,0xF584, -0xF585,0xF586,0xF587,0xF588,0xF589,0xF58A,0xF58B,0xF58C, -0xF58D,0xF58E,0xF58F,0xF590,0xF591,0xF592,0xF593,0xF594, -0xF595,0xF596,0xF597,0xF598,0xF599,0xF59A,0xF59B,0xF59C, -0xF59D,0xF59E,0xF59F,0xF5A0,0xF640,0xF641,0xF642,0xF643, -0xF644,0xF645,0xF646,0xF647,0xF648,0xF649,0xF64A,0xF64B, -0xF64C,0xF64D,0xF64E,0xF64F,0xF650,0xF651,0xF652,0xF653, -0xF654,0xF655,0xF656,0xF657,0xF658,0xF659,0xF65A,0xF65B, -0xF65C,0xF65D,0xF65E,0xF65F,0xF660,0xF661,0xF662,0xF663, -0xF664,0xF665,0xF666,0xF667,0xF668,0xF669,0xF66A,0xF66B, -0xF66C,0xF66D,0xF66E,0xF66F,0xF670,0xF671,0xF672,0xF673, -0xF674,0xF675,0xF676,0xF677,0xF678,0xF679,0xF67A,0xF67B, -0xF67C,0xF67D,0xF67E,0xF680,0xF681,0xF682,0xF683,0xF684, -0xF685,0xF686,0xF687,0xF688,0xF689,0xF68A,0xF68B,0xF68C, -0xF68D,0xF68E,0xF68F,0xF690,0xF691,0xF692,0xF693,0xF694, -0xF695,0xF696,0xF697,0xF698,0xF699,0xF69A,0xF69B,0xF69C, -0xF69D,0xF69E,0xF69F,0xF6A0,0xF740,0xF741,0xF742,0xF743, -0xF744,0xF745,0xF746,0xF747,0xF748,0xF749,0xF74A,0xF74B, -0xF74C,0xF74D,0xF74E,0xF74F,0xF750,0xF751,0xF752,0xF753, -0xF754,0xF755,0xF756,0xF757,0xF758,0xF759,0xF75A,0xF75B, -0xF75C,0xF75D,0xF75E,0xF75F,0xF760,0xF761,0xF762,0xF763, -0xF764,0xF765,0xF766,0xF767,0xF768,0xF769,0xF76A,0xF76B, -0xF76C,0xF76D,0xF76E,0xF76F,0xF770,0xF771,0xF772,0xF773, -0xF774,0xF775,0xF776,0xF777,0xF778,0xF779,0xF77A,0xF77B, -0xF77C,0xF77D,0xF77E,0xF780,0xD3E3,0xF781,0xF782,0xF6CF, -0xF783,0xC2B3,0xF6D0,0xF784,0xF785,0xF6D1,0xF6D2,0xF6D3, -0xF6D4,0xF786,0xF787,0xF6D6,0xF788,0xB1AB,0xF6D7,0xF789, -0xF6D8,0xF6D9,0xF6DA,0xF78A,0xF6DB,0xF6DC,0xF78B,0xF78C, -0xF78D,0xF78E,0xF6DD,0xF6DE,0xCFCA,0xF78F,0xF6DF,0xF6E0, -0xF6E1,0xF6E2,0xF6E3,0xF6E4,0xC0F0,0xF6E5,0xF6E6,0xF6E7, -0xF6E8,0xF6E9,0xF790,0xF6EA,0xF791,0xF6EB,0xF6EC,0xF792, -0xF6ED,0xF6EE,0xF6EF,0xF6F0,0xF6F1,0xF6F2,0xF6F3,0xF6F4, -0xBEA8,0xF793,0xF6F5,0xF6F6,0xF6F7,0xF6F8,0xF794,0xF795, -0xF796,0xF797,0xF798,0xC8FA,0xF6F9,0xF6FA,0xF6FB,0xF6FC, -0xF799,0xF79A,0xF6FD,0xF6FE,0xF7A1,0xF7A2,0xF7A3,0xF7A4, -0xF7A5,0xF79B,0xF79C,0xF7A6,0xF7A7,0xF7A8,0xB1EE,0xF7A9, -0xF7AA,0xF7AB,0xF79D,0xF79E,0xF7AC,0xF7AD,0xC1DB,0xF7AE, -0xF79F,0xF7A0,0xF7AF,0xF840,0xF841,0xF842,0xF843,0xF844, -0xF845,0xF846,0xF847,0xF848,0xF849,0xF84A,0xF84B,0xF84C, -0xF84D,0xF84E,0xF84F,0xF850,0xF851,0xF852,0xF853,0xF854, -0xF855,0xF856,0xF857,0xF858,0xF859,0xF85A,0xF85B,0xF85C, -0xF85D,0xF85E,0xF85F,0xF860,0xF861,0xF862,0xF863,0xF864, -0xF865,0xF866,0xF867,0xF868,0xF869,0xF86A,0xF86B,0xF86C, -0xF86D,0xF86E,0xF86F,0xF870,0xF871,0xF872,0xF873,0xF874, -0xF875,0xF876,0xF877,0xF878,0xF879,0xF87A,0xF87B,0xF87C, -0xF87D,0xF87E,0xF880,0xF881,0xF882,0xF883,0xF884,0xF885, -0xF886,0xF887,0xF888,0xF889,0xF88A,0xF88B,0xF88C,0xF88D, -0xF88E,0xF88F,0xF890,0xF891,0xF892,0xF893,0xF894,0xF895, -0xF896,0xF897,0xF898,0xF899,0xF89A,0xF89B,0xF89C,0xF89D, -0xF89E,0xF89F,0xF8A0,0xF940,0xF941,0xF942,0xF943,0xF944, -0xF945,0xF946,0xF947,0xF948,0xF949,0xF94A,0xF94B,0xF94C, -0xF94D,0xF94E,0xF94F,0xF950,0xF951,0xF952,0xF953,0xF954, -0xF955,0xF956,0xF957,0xF958,0xF959,0xF95A,0xF95B,0xF95C, -0xF95D,0xF95E,0xF95F,0xF960,0xF961,0xF962,0xF963,0xF964, -0xF965,0xF966,0xF967,0xF968,0xF969,0xF96A,0xF96B,0xF96C, -0xF96D,0xF96E,0xF96F,0xF970,0xF971,0xF972,0xF973,0xF974, -0xF975,0xF976,0xF977,0xF978,0xF979,0xF97A,0xF97B,0xF97C, -0xF97D,0xF97E,0xF980,0xF981,0xF982,0xF983,0xF984,0xF985, -0xF986,0xF987,0xF988,0xF989,0xF98A,0xF98B,0xF98C,0xF98D, -0xF98E,0xF98F,0xF990,0xF991,0xF992,0xF993,0xF994,0xF995, -0xF996,0xF997,0xF998,0xF999,0xF99A,0xF99B,0xF99C,0xF99D, -0xF99E,0xF99F,0xF9A0,0xFA40,0xFA41,0xFA42,0xFA43,0xFA44, -0xFA45,0xFA46,0xFA47,0xFA48,0xFA49,0xFA4A,0xFA4B,0xFA4C, -0xFA4D,0xFA4E,0xFA4F,0xFA50,0xFA51,0xFA52,0xFA53,0xFA54, -0xFA55,0xFA56,0xFA57,0xFA58,0xFA59,0xFA5A,0xFA5B,0xFA5C, -0xFA5D,0xFA5E,0xFA5F,0xFA60,0xFA61,0xFA62,0xFA63,0xFA64, -0xFA65,0xFA66,0xFA67,0xFA68,0xFA69,0xFA6A,0xFA6B,0xFA6C, -0xFA6D,0xFA6E,0xFA6F,0xFA70,0xFA71,0xFA72,0xFA73,0xFA74, -0xFA75,0xFA76,0xFA77,0xFA78,0xFA79,0xFA7A,0xFA7B,0xFA7C, -0xFA7D,0xFA7E,0xFA80,0xFA81,0xFA82,0xFA83,0xFA84,0xFA85, -0xFA86,0xFA87,0xFA88,0xFA89,0xFA8A,0xFA8B,0xFA8C,0xFA8D, -0xFA8E,0xFA8F,0xFA90,0xFA91,0xFA92,0xFA93,0xFA94,0xFA95, -0xFA96,0xFA97,0xFA98,0xFA99,0xFA9A,0xFA9B,0xFA9C,0xFA9D, -0xFA9E,0xFA9F,0xFAA0,0xFB40,0xFB41,0xFB42,0xFB43,0xFB44, -0xFB45,0xFB46,0xFB47,0xFB48,0xFB49,0xFB4A,0xFB4B,0xFB4C, -0xFB4D,0xFB4E,0xFB4F,0xFB50,0xFB51,0xFB52,0xFB53,0xFB54, -0xFB55,0xFB56,0xFB57,0xFB58,0xFB59,0xFB5A,0xFB5B,0xC4F1, -0xF0AF,0xBCA6,0xF0B0,0xC3F9,0xFB5C,0xC5B8,0xD1BB,0xFB5D, -0xF0B1,0xF0B2,0xF0B3,0xF0B4,0xF0B5,0xD1BC,0xFB5E,0xD1EC, -0xFB5F,0xF0B7,0xF0B6,0xD4A7,0xFB60,0xCDD2,0xF0B8,0xF0BA, -0xF0B9,0xF0BB,0xF0BC,0xFB61,0xFB62,0xB8EB,0xF0BD,0xBAE8, -0xFB63,0xF0BE,0xF0BF,0xBEE9,0xF0C0,0xB6EC,0xF0C1,0xF0C2, -0xF0C3,0xF0C4,0xC8B5,0xF0C5,0xF0C6,0xFB64,0xF0C7,0xC5F4, -0xFB65,0xF0C8,0xFB66,0xFB67,0xFB68,0xF0C9,0xFB69,0xF0CA, -0xF7BD,0xFB6A,0xF0CB,0xF0CC,0xF0CD,0xFB6B,0xF0CE,0xFB6C, -0xFB6D,0xFB6E,0xFB6F,0xF0CF,0xBAD7,0xFB70,0xF0D0,0xF0D1, -0xF0D2,0xF0D3,0xF0D4,0xF0D5,0xF0D6,0xF0D8,0xFB71,0xFB72, -0xD3A5,0xF0D7,0xFB73,0xF0D9,0xFB74,0xFB75,0xFB76,0xFB77, -0xFB78,0xFB79,0xFB7A,0xFB7B,0xFB7C,0xFB7D,0xF5BA,0xC2B9, -0xFB7E,0xFB80,0xF7E4,0xFB81,0xFB82,0xFB83,0xFB84,0xF7E5, -0xF7E6,0xFB85,0xFB86,0xF7E7,0xFB87,0xFB88,0xFB89,0xFB8A, -0xFB8B,0xFB8C,0xF7E8,0xC2B4,0xFB8D,0xFB8E,0xFB8F,0xFB90, -0xFB91,0xFB92,0xFB93,0xFB94,0xFB95,0xF7EA,0xFB96,0xF7EB, -0xFB97,0xFB98,0xFB99,0xFB9A,0xFB9B,0xFB9C,0xC2F3,0xFB9D, -0xFB9E,0xFB9F,0xFBA0,0xFC40,0xFC41,0xFC42,0xFC43,0xFC44, -0xFC45,0xFC46,0xFC47,0xFC48,0xF4F0,0xFC49,0xFC4A,0xFC4B, -0xF4EF,0xFC4C,0xFC4D,0xC2E9,0xFC4E,0xF7E1,0xF7E2,0xFC4F, -0xFC50,0xFC51,0xFC52,0xFC53,0xBBC6,0xFC54,0xFC55,0xFC56, -0xFC57,0xD9E4,0xFC58,0xFC59,0xFC5A,0xCAF2,0xC0E8,0xF0A4, -0xFC5B,0xBADA,0xFC5C,0xFC5D,0xC7AD,0xFC5E,0xFC5F,0xFC60, -0xC4AC,0xFC61,0xFC62,0xF7EC,0xF7ED,0xF7EE,0xFC63,0xF7F0, -0xF7EF,0xFC64,0xF7F1,0xFC65,0xFC66,0xF7F4,0xFC67,0xF7F3, -0xFC68,0xF7F2,0xF7F5,0xFC69,0xFC6A,0xFC6B,0xFC6C,0xF7F6, -0xFC6D,0xFC6E,0xFC6F,0xFC70,0xFC71,0xFC72,0xFC73,0xFC74, -0xFC75,0xEDE9,0xFC76,0xEDEA,0xEDEB,0xFC77,0xF6BC,0xFC78, -0xFC79,0xFC7A,0xFC7B,0xFC7C,0xFC7D,0xFC7E,0xFC80,0xFC81, -0xFC82,0xFC83,0xFC84,0xF6BD,0xFC85,0xF6BE,0xB6A6,0xFC86, -0xD8BE,0xFC87,0xFC88,0xB9C4,0xFC89,0xFC8A,0xFC8B,0xD8BB, -0xFC8C,0xDCB1,0xFC8D,0xFC8E,0xFC8F,0xFC90,0xFC91,0xFC92, -0xCAF3,0xFC93,0xF7F7,0xFC94,0xFC95,0xFC96,0xFC97,0xFC98, -0xFC99,0xFC9A,0xFC9B,0xFC9C,0xF7F8,0xFC9D,0xFC9E,0xF7F9, -0xFC9F,0xFCA0,0xFD40,0xFD41,0xFD42,0xFD43,0xFD44,0xF7FB, -0xFD45,0xF7FA,0xFD46,0xB1C7,0xFD47,0xF7FC,0xF7FD,0xFD48, -0xFD49,0xFD4A,0xFD4B,0xFD4C,0xF7FE,0xFD4D,0xFD4E,0xFD4F, -0xFD50,0xFD51,0xFD52,0xFD53,0xFD54,0xFD55,0xFD56,0xFD57, -0xC6EB,0xECB4,0xFD58,0xFD59,0xFD5A,0xFD5B,0xFD5C,0xFD5D, -0xFD5E,0xFD5F,0xFD60,0xFD61,0xFD62,0xFD63,0xFD64,0xFD65, -0xFD66,0xFD67,0xFD68,0xFD69,0xFD6A,0xFD6B,0xFD6C,0xFD6D, -0xFD6E,0xFD6F,0xFD70,0xFD71,0xFD72,0xFD73,0xFD74,0xFD75, -0xFD76,0xFD77,0xFD78,0xFD79,0xFD7A,0xFD7B,0xFD7C,0xFD7D, -0xFD7E,0xFD80,0xFD81,0xFD82,0xFD83,0xFD84,0xFD85,0xB3DD, -0xF6B3,0xFD86,0xFD87,0xF6B4,0xC1E4,0xF6B5,0xF6B6,0xF6B7, -0xF6B8,0xF6B9,0xF6BA,0xC8A3,0xF6BB,0xFD88,0xFD89,0xFD8A, -0xFD8B,0xFD8C,0xFD8D,0xFD8E,0xFD8F,0xFD90,0xFD91,0xFD92, -0xFD93,0xC1FA,0xB9A8,0xEDE8,0xFD94,0xFD95,0xFD96,0xB9EA, -0xD9DF,0xFD97,0xFD98,0xFD99,0xFD9A,0xFD9B}; - -/* page 7 0xF92C-0xFA29 */ -static uint16 tab_uni_gbk7[]={ -0xFD9C, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xFD9D, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xFD9E, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,0xFD9F, 0, 0, 0, 0, - 0, 0, 0, 0, 0,0xFDA0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xFE40,0xFE41,0xFE42,0xFE43, 0,0xFE44, 0,0xFE45, -0xFE46, 0, 0, 0,0xFE47, 0, 0, 0, - 0, 0, 0,0xFE48,0xFE49,0xFE4A, 0,0xFE4B, -0xFE4C, 0, 0,0xFE4D,0xFE4E,0xFE4F}; - -/* page 8 0xFE30-0xFFE5 */ -static uint16 tab_uni_gbk8[]={ -0xA955,0xA6F2, 0,0xA6F4,0xA6F5,0xA6E0,0xA6E1,0xA6F0, -0xA6F1,0xA6E2,0xA6E3,0xA6EE,0xA6EF,0xA6E6,0xA6E7,0xA6E4, -0xA6E5,0xA6E8,0xA6E9,0xA6EA,0xA6EB, 0, 0, 0, - 0,0xA968,0xA969,0xA96A,0xA96B,0xA96C,0xA96D,0xA96E, -0xA96F,0xA970,0xA971, 0,0xA972,0xA973,0xA974,0xA975, - 0,0xA976,0xA977,0xA978,0xA979,0xA97A,0xA97B,0xA97C, -0xA97D,0xA97E,0xA980,0xA981,0xA982,0xA983,0xA984, 0, -0xA985,0xA986,0xA987,0xA988, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0,0xA3A1,0xA3A2,0xA3A3,0xA1E7,0xA3A5,0xA3A6,0xA3A7, -0xA3A8,0xA3A9,0xA3AA,0xA3AB,0xA3AC,0xA3AD,0xA3AE,0xA3AF, -0xA3B0,0xA3B1,0xA3B2,0xA3B3,0xA3B4,0xA3B5,0xA3B6,0xA3B7, -0xA3B8,0xA3B9,0xA3BA,0xA3BB,0xA3BC,0xA3BD,0xA3BE,0xA3BF, -0xA3C0,0xA3C1,0xA3C2,0xA3C3,0xA3C4,0xA3C5,0xA3C6,0xA3C7, -0xA3C8,0xA3C9,0xA3CA,0xA3CB,0xA3CC,0xA3CD,0xA3CE,0xA3CF, -0xA3D0,0xA3D1,0xA3D2,0xA3D3,0xA3D4,0xA3D5,0xA3D6,0xA3D7, -0xA3D8,0xA3D9,0xA3DA,0xA3DB,0xA3DC,0xA3DD,0xA3DE,0xA3DF, -0xA3E0,0xA3E1,0xA3E2,0xA3E3,0xA3E4,0xA3E5,0xA3E6,0xA3E7, -0xA3E8,0xA3E9,0xA3EA,0xA3EB,0xA3EC,0xA3ED,0xA3EE,0xA3EF, -0xA3F0,0xA3F1,0xA3F2,0xA3F3,0xA3F4,0xA3F5,0xA3F6,0xA3F7, -0xA3F8,0xA3F9,0xA3FA,0xA3FB,0xA3FC,0xA3FD,0xA1AB, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0xA1E9,0xA1EA,0xA956,0xA3FE,0xA957,0xA3A4}; - -static int func_uni_gbk_onechar(int code){ - if ((code>=0x00A4)&&(code<=0x0451)) - return(tab_uni_gbk0[code-0x00A4]); - if ((code>=0x2010)&&(code<=0x2312)) - return(tab_uni_gbk1[code-0x2010]); - if ((code>=0x2460)&&(code<=0x2642)) - return(tab_uni_gbk2[code-0x2460]); - if ((code>=0x3000)&&(code<=0x3129)) - return(tab_uni_gbk3[code-0x3000]); - if ((code>=0x3220)&&(code<=0x32A3)) - return(tab_uni_gbk4[code-0x3220]); - if ((code>=0x338E)&&(code<=0x33D5)) - return(tab_uni_gbk5[code-0x338E]); - if ((code>=0x4E00)&&(code<=0x9FA5)) - return(tab_uni_gbk6[code-0x4E00]); - if ((code>=0xF92C)&&(code<=0xFA29)) - return(tab_uni_gbk7[code-0xF92C]); - if ((code>=0xFE30)&&(code<=0xFFE5)) - return(tab_uni_gbk8[code-0xFE30]); - return(0); -} - -static int -my_wc_mb_gbk(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, uchar *s, uchar *e) -{ - int code; - - if (s >= e) - return MY_CS_TOOSMALL; - - if ((uint) wc < 0x80) - { - s[0]= (uchar) wc; - return 1; - } - - if (!(code=func_uni_gbk_onechar(wc))) - return MY_CS_ILUNI; - - if (s+2>e) - return MY_CS_TOOSMALL2; - - s[0]=code>>8; - s[1]=code&0xFF; - return 2; -} - -static int -my_mb_wc_gbk(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t *pwc, const uchar *s, const uchar *e) -{ - int hi; - - if (s >= e) - return MY_CS_TOOSMALL; - - hi=s[0]; - - if (hi<0x80) - { - pwc[0]=hi; - return 1; - } - - if (s+2>e) - return MY_CS_TOOSMALL2; - - if (!(pwc[0]=func_gbk_uni_onechar( (hi<<8) + s[1]))) - return -2; - - return 2; - -} - - -/* - Returns well formed length of a GBK string. -*/ -static -size_t my_well_formed_len_gbk(CHARSET_INFO *cs __attribute__((unused)), - const char *b, const char *e, - size_t pos, int *error) -{ - const char *b0= b; - const char *emb= e - 1; /* Last possible end of an MB character */ - - *error= 0; - while (pos-- && b < e) - { - if ((uchar) b[0] < 128) - { - /* Single byte ascii character */ - b++; - } - else if ((b < emb) && isgbkcode((uchar)*b, (uchar)b[1])) - { - /* Double byte character */ - b+= 2; - } - else - { - /* Wrong byte sequence */ - *error= 1; - break; - } - } - return (size_t) (b - b0); -} - - - - -static MY_COLLATION_HANDLER my_collation_ci_handler = -{ - NULL, /* init */ - my_strnncoll_gbk, - my_strnncollsp_gbk, - my_strnxfrm_gbk, - my_strnxfrmlen_simple, - my_like_range_mb, - my_wildcmp_mb, - my_strcasecmp_mb, - my_instr_mb, - my_hash_sort_simple, - my_propagate_simple -}; - -static MY_CHARSET_HANDLER my_charset_handler= -{ - NULL, /* init */ - ismbchar_gbk, - mbcharlen_gbk, - my_numchars_mb, - my_charpos_mb, - my_well_formed_len_gbk, - my_lengthsp_8bit, - my_numcells_8bit, - my_mb_wc_gbk, - my_wc_mb_gbk, - my_mb_ctype_mb, - my_caseup_str_mb, - my_casedn_str_mb, - my_caseup_mb, - my_casedn_mb, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_strtoll10_8bit, - my_strntoull10rnd_8bit, - my_scan_8bit -}; - - -CHARSET_INFO my_charset_gbk_chinese_ci= -{ - 28,0,0, /* number */ - MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ - "gbk", /* cs name */ - "gbk_chinese_ci", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_gbk, - to_lower_gbk, - to_upper_gbk, - sort_order_gbk, - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_caseinfo_gbk, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 2, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xA967, /* max_sort_char */ - ' ', /* pad char */ - 1, /* escape_with_backslash_is_dangerous */ - &my_charset_handler, - &my_collation_ci_handler -}; - -CHARSET_INFO my_charset_gbk_bin= -{ - 87,0,0, /* number */ - MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "gbk", /* cs name */ - "gbk_bin", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_gbk, - to_lower_gbk, - to_upper_gbk, - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_caseinfo_gbk, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 2, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFEFE, /* max_sort_char */ - ' ', /* pad char */ - 1, /* escape_with_backslash_is_dangerous */ - &my_charset_handler, - &my_collation_mb_bin_handler -}; - - -#endif diff --git a/deps/mysqllite/strings/ctype-latin1.c b/deps/mysqllite/strings/ctype-latin1.c deleted file mode 100644 index 028a1be6745543..00000000000000 --- a/deps/mysqllite/strings/ctype-latin1.c +++ /dev/null @@ -1,782 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include "m_string.h" -#include "m_ctype.h" - -static uchar ctype_latin1[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 16, 0, 16, 2, 16, 16, 16, 16, 16, 16, 1, 16, 1, 0, 1, 0, - 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 2, 0, 2, 1, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static uchar to_lower_latin1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_latin1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255 -}; - -static uchar sort_order_latin1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 65, 65, 65, 65, 92, 91, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 68, 78, 79, 79, 79, 79, 93,215,216, 85, 85, 85, 89, 89,222,223, - 65, 65, 65, 65, 92, 91, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 68, 78, 79, 79, 79, 79, 93,247,216, 85, 85, 85, 89, 89,222,255 -}; - -/* - WL#1494 notes: - - We'll use cp1252 instead of iso-8859-1. - cp1252 contains printable characters in the range 0x80-0x9F. - In ISO 8859-1, these code points have no associated printable - characters. Therefore, by converting from CP1252 to ISO 8859-1, - one would lose the euro (for instance). Since most people are - unaware of the difference, and since we don't really want a - "Windows ANSI" to differ from a "Unix ANSI", we will: - - - continue to pretend the latin1 character set is ISO 8859-1 - - actually allow the storage of euro etc. so it's actually cp1252 - - Also we'll map these five undefined cp1252 character: - 0x81, 0x8D, 0x8F, 0x90, 0x9D - into corresponding control characters: - U+0081, U+008D, U+008F, U+0090, U+009D. - like ISO-8859-1 does. Otherwise, loading "mysqldump" - output doesn't reproduce these undefined characters. -*/ - -unsigned short cs_to_uni[256]={ -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC,0x0081,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, -0x02C6,0x2030,0x0160,0x2039,0x0152,0x008D,0x017D,0x008F, -0x0090,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, -0x02DC,0x2122,0x0161,0x203A,0x0153,0x009D,0x017E,0x0178, -0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, -0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, -0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, -0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, -0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF, -0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, -0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, -0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF -}; -uchar pl00[256]={ -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, -0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, -0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27, -0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, -0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47, -0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57, -0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67, -0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77, -0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x8D,0x00,0x8F, -0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x9D,0x00,0x00, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7, -0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7, -0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7, -0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7, -0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7, -0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7, -0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; -uchar pl01[256]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x8C,0x9C,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x8A,0x9A,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x9F,0x00,0x00,0x00,0x00,0x8E,0x9E,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x83,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; -uchar pl02[256]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; -uchar pl20[256]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x96,0x97,0x00,0x00,0x00, -0x91,0x92,0x82,0x00,0x93,0x94,0x84,0x00, -0x86,0x87,0x95,0x00,0x00,0x00,0x85,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x8B,0x9B,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; -uchar pl21[256]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -}; -uchar *uni_to_cs[256]={ -pl00,pl01,pl02,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -pl20,pl21,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL -}; - -static -int my_mb_wc_latin1(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t *wc, - const uchar *str, - const uchar *end __attribute__((unused))) -{ - if (str >= end) - return MY_CS_TOOSMALL; - - *wc=cs_to_uni[*str]; - return (!wc[0] && str[0]) ? -1 : 1; -} - -static -int my_wc_mb_latin1(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, - uchar *str, - uchar *end __attribute__((unused))) -{ - uchar *pl; - - if (str >= end) - return MY_CS_TOOSMALL; - - pl= uni_to_cs[(wc>>8) & 0xFF]; - str[0]= pl ? pl[wc & 0xFF] : '\0'; - return (!str[0] && wc) ? MY_CS_ILUNI : 1; -} - -static MY_CHARSET_HANDLER my_charset_handler= -{ - NULL, /* init */ - NULL, - my_mbcharlen_8bit, - my_numchars_8bit, - my_charpos_8bit, - my_well_formed_len_8bit, - my_lengthsp_8bit, - my_numcells_8bit, - my_mb_wc_latin1, - my_wc_mb_latin1, - my_mb_ctype_8bit, - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_strtoll10_8bit, - my_strntoull10rnd_8bit, - my_scan_8bit -}; - - -CHARSET_INFO my_charset_latin1= -{ - 8,0,0, /* number */ - MY_CS_COMPILED | MY_CS_PRIMARY, /* state */ - "latin1", /* cs name */ - "latin1_swedish_ci", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin1, - to_lower_latin1, - to_upper_latin1, - sort_order_latin1, - NULL, /* contractions */ - NULL, /* sort_order_big*/ - cs_to_uni, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_handler, - &my_collation_8bit_simple_ci_handler -}; - - - - -/* - * This file is the latin1 character set with German sorting - * - * The modern sort order is used, where: - * - * '�' -> "ae" - * '�' -> "oe" - * '�' -> "ue" - * '�' -> "ss" - */ - - -/* - * This is a simple latin1 mapping table, which maps all accented - * characters to their non-accented equivalents. Note: in this - * table, '�' is mapped to 'A', '�' is mapped to 'Y', etc. - all - * accented characters except the following are treated the same way. - * �, �, �, �, �, � - */ - -static uchar sort_order_latin1_de[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 65, 65, 65, 65,196, 65, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 68, 78, 79, 79, 79, 79,214,215,216, 85, 85, 85,220, 89,222,223, - 65, 65, 65, 65,196, 65, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 68, 78, 79, 79, 79, 79,214,247,216, 85, 85, 85,220, 89,222, 89 -}; - - -/* - same as sort_order_latin_de, but maps ALL accented chars to unaccented ones -*/ - -uchar combo1map[]={ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 65, 65, 65, 65, 65, 65, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 68, 78, 79, 79, 79, 79, 79,215,216, 85, 85, 85, 85, 89,222, 83, - 65, 65, 65, 65, 65, 65, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 68, 78, 79, 79, 79, 79, 79,247,216, 85, 85, 85, 85, 89,222, 89 -}; - -uchar combo2map[]={ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,69, 0, 0, 0, 0, 0,69, 0, 0,83, 0, 0, 0, 0,69, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,69, 0, 0, 0, 0, 0,69, 0, 0, 0, 0 -}; - - -/* - Some notes about the following comparison rules: - By definition, my_strnncoll_latin_de must works exactly as if had called - my_strnxfrm_latin_de() on both strings and compared the result strings. - - This means that: - � must also matches �E and A�, because my_strxn_frm_latin_de() will convert - both to AE. - - The other option would be to not do any accent removal in - sort_order_latin_de[] at all -*/ - - -static int my_strnncoll_latin1_de(CHARSET_INFO *cs __attribute__((unused)), - const uchar *a, size_t a_length, - const uchar *b, size_t b_length, - my_bool b_is_prefix) -{ - const uchar *a_end= a + a_length; - const uchar *b_end= b + b_length; - uchar a_char, a_extend= 0, b_char, b_extend= 0; - - while ((a < a_end || a_extend) && (b < b_end || b_extend)) - { - if (a_extend) - { - a_char=a_extend; a_extend=0; - } - else - { - a_extend=combo2map[*a]; - a_char=combo1map[*a++]; - } - if (b_extend) - { - b_char=b_extend; b_extend=0; - } - else - { - b_extend=combo2map[*b]; - b_char=combo1map[*b++]; - } - if (a_char != b_char) - return (int) a_char - (int) b_char; - } - /* - A simple test of string lengths won't work -- we test to see - which string ran out first - */ - return ((a < a_end || a_extend) ? (b_is_prefix ? 0 : 1) : - (b < b_end || b_extend) ? -1 : 0); -} - - -static int my_strnncollsp_latin1_de(CHARSET_INFO *cs __attribute__((unused)), - const uchar *a, size_t a_length, - const uchar *b, size_t b_length, - my_bool diff_if_only_endspace_difference) -{ - const uchar *a_end= a + a_length, *b_end= b + b_length; - uchar a_char, a_extend= 0, b_char, b_extend= 0; - int res; - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= 0; -#endif - - while ((a < a_end || a_extend) && (b < b_end || b_extend)) - { - if (a_extend) - { - a_char=a_extend; - a_extend= 0; - } - else - { - a_extend= combo2map[*a]; - a_char= combo1map[*a++]; - } - if (b_extend) - { - b_char= b_extend; - b_extend= 0; - } - else - { - b_extend= combo2map[*b]; - b_char= combo1map[*b++]; - } - if (a_char != b_char) - return (int) a_char - (int) b_char; - } - /* Check if double character last */ - if (a_extend) - return 1; - if (b_extend) - return -1; - - res= 0; - if (a != a_end || b != b_end) - { - int swap= 1; - if (diff_if_only_endspace_difference) - res= 1; /* Assume 'a' is bigger */ - /* - Check the next not space character of the longer key. If it's < ' ', - then it's smaller than the other key. - */ - if (a == a_end) - { - /* put shorter key in a */ - a_end= b_end; - a= b; - swap= -1; /* swap sign of result */ - res= -res; - } - for ( ; a < a_end ; a++) - { - if (*a != ' ') - return (*a < ' ') ? -swap : swap; - } - } - return res; -} - - -static size_t my_strnxfrm_latin1_de(CHARSET_INFO *cs __attribute__((unused)), - uchar *dest, size_t len, - const uchar *src, size_t srclen) -{ - const uchar *de = dest + len; - const uchar *se = src + srclen; - for ( ; src < se && dest < de ; src++) - { - uchar chr=combo1map[*src]; - *dest++=chr; - if ((chr=combo2map[*src]) && dest < de) - *dest++=chr; - } - if (dest < de) - bfill(dest, de - dest, ' '); - return (int) len; -} - - -void my_hash_sort_latin1_de(CHARSET_INFO *cs __attribute__((unused)), - const uchar *key, size_t len, - ulong *nr1, ulong *nr2) -{ - const uchar *end; - /* - Remove end space. We have to do this to be able to compare - 'AE' and '�' as identical - */ - end= skip_trailing_space(key, len); - - for (; key < end ; key++) - { - uint X= (uint) combo1map[(uint) *key]; - nr1[0]^=(ulong) ((((uint) nr1[0] & 63)+nr2[0]) * X) + (nr1[0] << 8); - nr2[0]+=3; - if ((X= combo2map[*key])) - { - nr1[0]^=(ulong) ((((uint) nr1[0] & 63)+nr2[0]) * X) + (nr1[0] << 8); - nr2[0]+=3; - } - } -} - - -static MY_COLLATION_HANDLER my_collation_german2_ci_handler= -{ - NULL, /* init */ - my_strnncoll_latin1_de, - my_strnncollsp_latin1_de, - my_strnxfrm_latin1_de, - my_strnxfrmlen_simple, - my_like_range_simple, - my_wildcmp_8bit, - my_strcasecmp_8bit, - my_instr_simple, - my_hash_sort_latin1_de, - my_propagate_complex -}; - - -CHARSET_INFO my_charset_latin1_german2_ci= -{ - 31,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */ - "latin1", /* cs name */ - "latin1_german2_ci", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin1, - to_lower_latin1, - to_upper_latin1, - sort_order_latin1_de, - NULL, /* contractions */ - NULL, /* sort_order_big*/ - cs_to_uni, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 2, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 247, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_handler, - &my_collation_german2_ci_handler -}; - - -CHARSET_INFO my_charset_latin1_bin= -{ - 47,0,0, /* number */ - MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "latin1", /* cs name */ - "latin1_bin", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_latin1, - to_lower_latin1, - to_upper_latin1, - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - cs_to_uni, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_handler, - &my_collation_8bit_bin_handler -}; - diff --git a/deps/mysqllite/strings/ctype-mb.c b/deps/mysqllite/strings/ctype-mb.c deleted file mode 100644 index 8b985b7405b8ae..00000000000000 --- a/deps/mysqllite/strings/ctype-mb.c +++ /dev/null @@ -1,1369 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include "m_ctype.h" -#include "m_string.h" - -#ifdef USE_MB - - -size_t my_caseup_str_mb(CHARSET_INFO * cs, char *str) -{ - register uint32 l; - register uchar *map= cs->to_upper; - char *str_orig= str; - - while (*str) - { - /* Pointing after the '\0' is safe here. */ - if ((l= my_ismbchar(cs, str, str + cs->mbmaxlen))) - str+= l; - else - { - *str= (char) map[(uchar)*str]; - str++; - } - } - return (size_t) (str - str_orig); -} - - -size_t my_casedn_str_mb(CHARSET_INFO * cs, char *str) -{ - register uint32 l; - register uchar *map= cs->to_lower; - char *str_orig= str; - - while (*str) - { - /* Pointing after the '\0' is safe here. */ - if ((l= my_ismbchar(cs, str, str + cs->mbmaxlen))) - str+= l; - else - { - *str= (char) map[(uchar)*str]; - str++; - } - } - return (size_t) (str - str_orig); -} - - -static inline MY_UNICASE_INFO* -get_case_info_for_ch(CHARSET_INFO *cs, uint page, uint offs) -{ - MY_UNICASE_INFO *p; - return cs->caseinfo ? ((p= cs->caseinfo[page]) ? &p[offs] : NULL) : NULL; -} - - -/* - For character sets which don't change octet length in case conversion. -*/ -size_t my_caseup_mb(CHARSET_INFO * cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) -{ - register uint32 l; - register char *srcend= src + srclen; - register uchar *map= cs->to_upper; - - DBUG_ASSERT(cs->caseup_multiply == 1); - DBUG_ASSERT(src == dst && srclen == dstlen); - DBUG_ASSERT(cs->mbmaxlen == 2); - - while (src < srcend) - { - if ((l=my_ismbchar(cs, src, srcend))) - { - MY_UNICASE_INFO *ch; - if ((ch= get_case_info_for_ch(cs, (uchar) src[0], (uchar) src[1]))) - { - *src++= ch->toupper >> 8; - *src++= ch->toupper & 0xFF; - } - else - src+= l; - } - else - { - *src=(char) map[(uchar) *src]; - src++; - } - } - return srclen; -} - - -size_t my_casedn_mb(CHARSET_INFO * cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) -{ - register uint32 l; - register char *srcend= src + srclen; - register uchar *map=cs->to_lower; - - DBUG_ASSERT(cs->casedn_multiply == 1); - DBUG_ASSERT(src == dst && srclen == dstlen); - DBUG_ASSERT(cs->mbmaxlen == 2); - - while (src < srcend) - { - if ((l= my_ismbchar(cs, src, srcend))) - { - MY_UNICASE_INFO *ch; - if ((ch= get_case_info_for_ch(cs, (uchar) src[0], (uchar) src[1]))) - { - *src++= ch->tolower >> 8; - *src++= ch->tolower & 0xFF; - } - else - src+= l; - } - else - { - *src= (char) map[(uchar)*src]; - src++; - } - } - return srclen; -} - - -/* - Case folding functions for character set - where case conversion can change string octet length. - For example, in EUCKR, - _euckr 0xA9A5 == "LATIN LETTER DOTLESS I" (Turkish letter) - is upper-cased to to - _euckr 0x49 "LATIN CAPITAL LETTER I" ('usual' letter I) - Length is reduced in this example from two bytes to one byte. -*/ -static size_t -my_casefold_mb_varlen(CHARSET_INFO *cs, - char *src, size_t srclen, - char *dst, size_t dstlen __attribute__((unused)), - uchar *map, - size_t is_upper) -{ - char *srcend= src + srclen, *dst0= dst; - - DBUG_ASSERT(cs->mbmaxlen == 2); - - while (src < srcend) - { - size_t mblen= my_ismbchar(cs, src, srcend); - if (mblen) - { - MY_UNICASE_INFO *ch; - if ((ch= get_case_info_for_ch(cs, (uchar) src[0], (uchar) src[1]))) - { - int code= is_upper ? ch->toupper : ch->tolower; - src+= 2; - if (code > 0xFF) - *dst++= code >> 8; - *dst++= code & 0xFF; - } - else - { - *dst++= *src++; - *dst++= *src++; - } - } - else - { - *dst++= (char) map[(uchar) *src++]; - } - } - return (size_t) (dst - dst0); -} - - -size_t -my_casedn_mb_varlen(CHARSET_INFO * cs, char *src, size_t srclen, - char *dst, size_t dstlen) -{ - DBUG_ASSERT(dstlen >= srclen * cs->casedn_multiply); - DBUG_ASSERT(src != dst || cs->casedn_multiply == 1); - return my_casefold_mb_varlen(cs, src, srclen, dst, dstlen, cs->to_lower, 0); -} - - -size_t -my_caseup_mb_varlen(CHARSET_INFO * cs, char *src, size_t srclen, - char *dst, size_t dstlen) -{ - DBUG_ASSERT(dstlen >= srclen * cs->caseup_multiply); - DBUG_ASSERT(src != dst || cs->caseup_multiply == 1); - return my_casefold_mb_varlen(cs, src, srclen, dst, dstlen, cs->to_upper, 1); -} - - -/* - my_strcasecmp_mb() returns 0 if strings are equal, non-zero otherwise. - */ - -int my_strcasecmp_mb(CHARSET_INFO * cs,const char *s, const char *t) -{ - register uint32 l; - register uchar *map=cs->to_upper; - - while (*s && *t) - { - /* Pointing after the '\0' is safe here. */ - if ((l=my_ismbchar(cs, s, s + cs->mbmaxlen))) - { - while (l--) - if (*s++ != *t++) - return 1; - } - else if (my_mbcharlen(cs, *t) > 1) - return 1; - else if (map[(uchar) *s++] != map[(uchar) *t++]) - return 1; - } - /* At least one of '*s' and '*t' is zero here. */ - return (*t != *s); -} - - -/* -** Compare string against string with wildcard -** 0 if matched -** -1 if not matched with wildcard -** 1 if matched with wildcard -*/ - -#define INC_PTR(cs,A,B) A+=(my_ismbchar(cs,A,B) ? my_ismbchar(cs,A,B) : 1) - -#define likeconv(s,A) (uchar) (s)->sort_order[(uchar) (A)] - -int my_wildcmp_mb(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many) -{ - int result= -1; /* Not found, using wildcards */ - - while (wildstr != wildend) - { - while (*wildstr != w_many && *wildstr != w_one) - { - int l; - if (*wildstr == escape && wildstr+1 != wildend) - wildstr++; - if ((l = my_ismbchar(cs, wildstr, wildend))) - { - if (str+l > str_end || memcmp(str, wildstr, l) != 0) - return 1; - str += l; - wildstr += l; - } - else - if (str == str_end || likeconv(cs,*wildstr++) != likeconv(cs,*str++)) - return(1); /* No match */ - if (wildstr == wildend) - return (str != str_end); /* Match if both are at end */ - result=1; /* Found an anchor char */ - } - if (*wildstr == w_one) - { - do - { - if (str == str_end) /* Skip one char if possible */ - return (result); - INC_PTR(cs,str,str_end); - } while (++wildstr < wildend && *wildstr == w_one); - if (wildstr == wildend) - break; - } - if (*wildstr == w_many) - { /* Found w_many */ - uchar cmp; - const char* mb = wildstr; - int mb_len=0; - - wildstr++; - /* Remove any '%' and '_' from the wild search string */ - for (; wildstr != wildend ; wildstr++) - { - if (*wildstr == w_many) - continue; - if (*wildstr == w_one) - { - if (str == str_end) - return (-1); - INC_PTR(cs,str,str_end); - continue; - } - break; /* Not a wild character */ - } - if (wildstr == wildend) - return(0); /* Ok if w_many is last */ - if (str == str_end) - return -1; - - if ((cmp= *wildstr) == escape && wildstr+1 != wildend) - cmp= *++wildstr; - - mb=wildstr; - mb_len= my_ismbchar(cs, wildstr, wildend); - INC_PTR(cs,wildstr,wildend); /* This is compared trough cmp */ - cmp=likeconv(cs,cmp); - do - { - for (;;) - { - if (str >= str_end) - return -1; - if (mb_len) - { - if (str+mb_len <= str_end && memcmp(str, mb, mb_len) == 0) - { - str += mb_len; - break; - } - } - else if (!my_ismbchar(cs, str, str_end) && - likeconv(cs,*str) == cmp) - { - str++; - break; - } - INC_PTR(cs,str, str_end); - } - { - int tmp=my_wildcmp_mb(cs,str,str_end,wildstr,wildend,escape,w_one, - w_many); - if (tmp <= 0) - return (tmp); - } - } while (str != str_end && wildstr[0] != w_many); - return(-1); - } - } - return (str != str_end ? 1 : 0); -} - - -size_t my_numchars_mb(CHARSET_INFO *cs __attribute__((unused)), - const char *pos, const char *end) -{ - register size_t count= 0; - while (pos < end) - { - uint mb_len; - pos+= (mb_len= my_ismbchar(cs,pos,end)) ? mb_len : 1; - count++; - } - return count; -} - - -size_t my_charpos_mb(CHARSET_INFO *cs __attribute__((unused)), - const char *pos, const char *end, size_t length) -{ - const char *start= pos; - - while (length && pos < end) - { - uint mb_len; - pos+= (mb_len= my_ismbchar(cs, pos, end)) ? mb_len : 1; - length--; - } - return (size_t) (length ? end+2-start : pos-start); -} - - -size_t my_well_formed_len_mb(CHARSET_INFO *cs, const char *b, const char *e, - size_t pos, int *error) -{ - const char *b_start= b; - *error= 0; - while (pos) - { - my_wc_t wc; - int mb_len; - - if ((mb_len= cs->cset->mb_wc(cs, &wc, (uchar*) b, (uchar*) e)) <= 0) - { - *error= b < e ? 1 : 0; - break; - } - b+= mb_len; - pos--; - } - return (size_t) (b - b_start); -} - - -uint my_instr_mb(CHARSET_INFO *cs, - const char *b, size_t b_length, - const char *s, size_t s_length, - my_match_t *match, uint nmatch) -{ - register const char *end, *b0; - int res= 0; - - if (s_length <= b_length) - { - if (!s_length) - { - if (nmatch) - { - match->beg= 0; - match->end= 0; - match->mb_len= 0; - } - return 1; /* Empty string is always found */ - } - - b0= b; - end= b+b_length-s_length+1; - - while (b < end) - { - int mb_len; - - if (!cs->coll->strnncoll(cs, (uchar*) b, s_length, - (uchar*) s, s_length, 0)) - { - if (nmatch) - { - match[0].beg= 0; - match[0].end= (size_t) (b-b0); - match[0].mb_len= res; - if (nmatch > 1) - { - match[1].beg= match[0].end; - match[1].end= match[0].end+s_length; - match[1].mb_len= 0; /* Not computed */ - } - } - return 2; - } - mb_len= (mb_len= my_ismbchar(cs, b, end)) ? mb_len : 1; - b+= mb_len; - b_length-= mb_len; - res++; - } - } - return 0; -} - - -/* BINARY collations handlers for MB charsets */ - -int -my_strnncoll_mb_bin(CHARSET_INFO * cs __attribute__((unused)), - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - size_t len=min(slen,tlen); - int cmp= memcmp(s,t,len); - return cmp ? cmp : (int) ((t_is_prefix ? len : slen) - tlen); -} - - -/* - Compare two strings. - - SYNOPSIS - my_strnncollsp_mb_bin() - cs Chararacter set - s String to compare - slen Length of 's' - t String to compare - tlen Length of 't' - diff_if_only_endspace_difference - Set to 1 if the strings should be regarded as different - if they only difference in end space - - NOTE - This function is used for character strings with binary collations. - The shorter string is extended with end space to be as long as the longer - one. - - RETURN - A negative number if s < t - A positive number if s > t - 0 if strings are equal -*/ - -int -my_strnncollsp_mb_bin(CHARSET_INFO * cs __attribute__((unused)), - const uchar *a, size_t a_length, - const uchar *b, size_t b_length, - my_bool diff_if_only_endspace_difference) -{ - const uchar *end; - size_t length; - int res; - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= 0; -#endif - - end= a + (length= min(a_length, b_length)); - while (a < end) - { - if (*a++ != *b++) - return ((int) a[-1] - (int) b[-1]); - } - res= 0; - if (a_length != b_length) - { - int swap= 1; - if (diff_if_only_endspace_difference) - res= 1; /* Assume 'a' is bigger */ - /* - Check the next not space character of the longer key. If it's < ' ', - then it's smaller than the other key. - */ - if (a_length < b_length) - { - /* put shorter key in s */ - a_length= b_length; - a= b; - swap= -1; /* swap sign of result */ - res= -res; - } - for (end= a + a_length-length; a < end ; a++) - { - if (*a != ' ') - return (*a < ' ') ? -swap : swap; - } - } - return res; -} - - -static size_t my_strnxfrm_mb_bin(CHARSET_INFO *cs __attribute__((unused)), - uchar *dest, size_t dstlen, - const uchar *src, size_t srclen) -{ - if (dest != src) - memcpy(dest, src, min(dstlen, srclen)); - if (dstlen > srclen) - bfill(dest + srclen, dstlen - srclen, ' '); - return dstlen; -} - - -int -my_strcasecmp_mb_bin(CHARSET_INFO * cs __attribute__((unused)), - const char *s, const char *t) -{ - return strcmp(s,t); -} - - -void -my_hash_sort_mb_bin(CHARSET_INFO *cs __attribute__((unused)), - const uchar *key, size_t len,ulong *nr1, ulong *nr2) -{ - const uchar *pos = key; - - /* - Remove trailing spaces. We have to do this to be able to compare - 'A ' and 'A' as identical - */ - key= skip_trailing_space(key, len); - - for (; pos < (uchar*) key ; pos++) - { - nr1[0]^=(ulong) ((((uint) nr1[0] & 63)+nr2[0]) * - ((uint)*pos)) + (nr1[0] << 8); - nr2[0]+=3; - } -} - - -/* - Fill the given buffer with 'maximum character' for given charset - SYNOPSIS - pad_max_char() - cs Character set - str Start of buffer to fill - end End of buffer to fill - - DESCRIPTION - Write max key: - - for non-Unicode character sets: - just bfill using max_sort_char if max_sort_char is one byte. - In case when max_sort_char is two bytes, fill with double-byte pairs - and optionally pad with a single space character. - - for Unicode character set (utf-8): - create a buffer with multibyte representation of the max_sort_char - character, and copy it into max_str in a loop. -*/ -static void pad_max_char(CHARSET_INFO *cs, char *str, char *end) -{ - char buf[10]; - char buflen; - - if (!(cs->state & MY_CS_UNICODE)) - { - if (cs->max_sort_char <= 255) - { - bfill(str, end - str, cs->max_sort_char); - return; - } - buf[0]= cs->max_sort_char >> 8; - buf[1]= cs->max_sort_char & 0xFF; - buflen= 2; - } - else - { - buflen= cs->cset->wc_mb(cs, cs->max_sort_char, (uchar*) buf, - (uchar*) buf + sizeof(buf)); - } - - DBUG_ASSERT(buflen > 0); - do - { - if ((str + buflen) <= end) - { - /* Enough space for the characer */ - memcpy(str, buf, buflen); - str+= buflen; - } - else - { - /* - There is no space for whole multibyte - character, then add trailing spaces. - */ - *str++= ' '; - } - } while (str < end); -} - -/* -** Calculate min_str and max_str that ranges a LIKE string. -** Arguments: -** ptr Pointer to LIKE string. -** ptr_length Length of LIKE string. -** escape Escape character in LIKE. (Normally '\'). -** All escape characters should be removed from min_str and max_str -** res_length Length of min_str and max_str. -** min_str Smallest case sensitive string that ranges LIKE. -** Should be space padded to res_length. -** max_str Largest case sensitive string that ranges LIKE. -** Normally padded with the biggest character sort value. -** -** The function should return 0 if ok and 1 if the LIKE string can't be -** optimized ! -*/ - -my_bool my_like_range_mb(CHARSET_INFO *cs, - const char *ptr,size_t ptr_length, - pbool escape, pbool w_one, pbool w_many, - size_t res_length, - char *min_str,char *max_str, - size_t *min_length,size_t *max_length) -{ - uint mb_len; - const char *end= ptr + ptr_length; - char *min_org= min_str; - char *min_end= min_str + res_length; - char *max_end= max_str + res_length; - size_t maxcharlen= res_length / cs->mbmaxlen; - const char *contraction_flags= cs->contractions ? - ((const char*) cs->contractions) + 0x40*0x40 : NULL; - - for (; ptr != end && min_str != min_end && maxcharlen ; maxcharlen--) - { - /* We assume here that escape, w_any, w_namy are one-byte characters */ - if (*ptr == escape && ptr+1 != end) - ptr++; /* Skip escape */ - else if (*ptr == w_one || *ptr == w_many) /* '_' and '%' in SQL */ - { -fill_max_and_min: - /* - Calculate length of keys: - 'a\0\0... is the smallest possible string when we have space expand - a\ff\ff... is the biggest possible string - */ - *min_length= ((cs->state & MY_CS_BINSORT) ? (size_t) (min_str - min_org) : - res_length); - *max_length= res_length; - /* Create min key */ - do - { - *min_str++= (char) cs->min_sort_char; - } while (min_str != min_end); - - /* - Write max key: create a buffer with multibyte - representation of the max_sort_char character, - and copy it into max_str in a loop. - */ - *max_length= res_length; - pad_max_char(cs, max_str, max_end); - return 0; - } - if ((mb_len= my_ismbchar(cs, ptr, end)) > 1) - { - if (ptr+mb_len > end || min_str+mb_len > min_end) - break; - while (mb_len--) - *min_str++= *max_str++= *ptr++; - } - else - { - /* - Special case for collations with contractions. - For example, in Chezh, 'ch' is a separate letter - which is sorted between 'h' and 'i'. - If the pattern 'abc%', 'c' at the end can mean: - - letter 'c' itself, - - beginning of the contraction 'ch'. - - If we simply return this LIKE range: - - 'abc\min\min\min' and 'abc\max\max\max' - - then this query: SELECT * FROM t1 WHERE a LIKE 'abc%' - will only find values starting from 'abc[^h]', - but won't find values starting from 'abch'. - - We must ignore contraction heads followed by w_one or w_many. - ('Contraction head' means any letter which can be the first - letter in a contraction) - - For example, for Czech 'abc%', we will return LIKE range, - which is equal to LIKE range for 'ab%': - - 'ab\min\min\min\min' and 'ab\max\max\max\max'. - - */ - if (contraction_flags && ptr + 1 < end && - contraction_flags[(uchar) *ptr]) - { - /* Ptr[0] is a contraction head. */ - - if (ptr[1] == w_one || ptr[1] == w_many) - { - /* Contraction head followed by a wildcard, quit. */ - goto fill_max_and_min; - } - - /* - Some letters can be both contraction heads and contraction tails. - For example, in Danish 'aa' is a separate single letter which - is sorted after 'z'. So 'a' can be both head and tail. - - If ptr[0]+ptr[1] is a contraction, - then put both letters together. - - If ptr[1] can be a contraction part, but ptr[0]+ptr[1] - is not a contraction, then we put only ptr[0], - and continue with ptr[1] on the next loop. - */ - if (contraction_flags[(uchar) ptr[1]] && - cs->contractions[(*ptr-0x40)*0x40 + ptr[1] - 0x40]) - { - /* Contraction found */ - if (maxcharlen == 1 || min_str + 1 >= min_end) - { - /* Both contraction parts don't fit, quit */ - goto fill_max_and_min; - } - - /* Put contraction head */ - *min_str++= *max_str++= *ptr++; - maxcharlen--; - } - } - /* Put contraction tail, or a single character */ - *min_str++= *max_str++= *ptr++; - } - } - - *min_length= *max_length = (size_t) (min_str - min_org); - while (min_str != min_end) - *min_str++= *max_str++= ' '; /* Because if key compression */ - return 0; -} - - -/** - Calculate min_str and max_str that ranges a LIKE string. - Generic function, currently used for ucs2, utf16, utf32, - but should be suitable for any other character sets with - cs->min_sort_char and cs->max_sort_char represented in - Unicode code points. - - @param cs Character set and collation pointer - @param ptr Pointer to LIKE pattern. - @param ptr_length Length of LIKE pattern. - @param escape Escape character pattern, typically '\'. - @param w_one 'One character' pattern, typically '_'. - @param w_many 'Many characters' pattern, typically '%'. - @param res_length Length of min_str and max_str. - - @param[out] min_str Smallest string that ranges LIKE. - @param[out] max_str Largest string that ranges LIKE. - @param[out] min_len Length of min_str - @param[out] max_len Length of max_str - - @return Optimization status. - @retval FALSE if LIKE pattern can be optimized - @rerval TRUE if LIKE can't be optimized. -*/ -my_bool -my_like_range_generic(CHARSET_INFO *cs, - const char *ptr, size_t ptr_length, - pbool escape, pbool w_one, pbool w_many, - size_t res_length, - char *min_str,char *max_str, - size_t *min_length,size_t *max_length) -{ - const char *end= ptr + ptr_length; - const char *min_org= min_str; - const char *max_org= max_str; - char *min_end= min_str + res_length; - char *max_end= max_str + res_length; - size_t charlen= res_length / cs->mbmaxlen; - size_t res_length_diff; - my_bool have_contractions= my_cs_have_contractions(cs); - - for ( ; charlen > 0; charlen--) - { - my_wc_t wc, wc2; - int res; - if ((res= cs->cset->mb_wc(cs, &wc, (uchar*) ptr, (uchar*) end)) <= 0) - { - if (res == MY_CS_ILSEQ) /* Bad sequence */ - return TRUE; /* min_length and max_length are not important */ - break; /* End of the string */ - } - ptr+= res; - - if (wc == (my_wc_t) escape) - { - if ((res= cs->cset->mb_wc(cs, &wc, (uchar*) ptr, (uchar*) end)) <= 0) - { - if (res == MY_CS_ILSEQ) - return TRUE; /* min_length and max_length are not important */ - /* - End of the string: Escape is the last character. - Put escape as a normal character. - We'll will leave the loop on the next iteration. - */ - } - else - ptr+= res; - - /* Put escape character to min_str and max_str */ - if ((res= cs->cset->wc_mb(cs, wc, - (uchar*) min_str, (uchar*) min_end)) <= 0) - goto pad_set_lengths; /* No space */ - min_str+= res; - - if ((res= cs->cset->wc_mb(cs, wc, - (uchar*) max_str, (uchar*) max_end)) <= 0) - goto pad_set_lengths; /* No space */ - max_str+= res; - continue; - } - else if (wc == (my_wc_t) w_one) - { - if ((res= cs->cset->wc_mb(cs, cs->min_sort_char, - (uchar*) min_str, (uchar*) min_end)) <= 0) - goto pad_set_lengths; - min_str+= res; - - if ((res= cs->cset->wc_mb(cs, cs->max_sort_char, - (uchar*) max_str, (uchar*) max_end)) <= 0) - goto pad_set_lengths; - max_str+= res; - continue; - } - else if (wc == (my_wc_t) w_many) - { - /* - Calculate length of keys: - a\min\min... is the smallest possible string - a\max\max... is the biggest possible string - */ - *min_length= ((cs->state & MY_CS_BINSORT) ? - (size_t) (min_str - min_org) : - res_length); - *max_length= res_length; - goto pad_min_max; - } - - if (have_contractions && - my_cs_can_be_contraction_head(cs, wc) && - (res= cs->cset->mb_wc(cs, &wc2, (uchar*) ptr, (uchar*) end)) > 0) - { - uint16 *weight; - if ((wc2 == (my_wc_t) w_one || wc2 == (my_wc_t) w_many)) - { - /* Contraction head followed by a wildcard */ - *min_length= *max_length= res_length; - goto pad_min_max; - } - - if (my_cs_can_be_contraction_tail(cs, wc2) && - (weight= my_cs_contraction2_weight(cs, wc, wc2)) && weight[0]) - { - /* Contraction found */ - if (charlen == 1) - { - /* contraction does not fit to result */ - *min_length= *max_length= res_length; - goto pad_min_max; - } - - ptr+= res; - charlen--; - - /* Put contraction head */ - if ((res= cs->cset->wc_mb(cs, wc, - (uchar*) min_str, (uchar*) min_end)) <= 0) - goto pad_set_lengths; - min_str+= res; - - if ((res= cs->cset->wc_mb(cs, wc, - (uchar*) max_str, (uchar*) max_end)) <= 0) - goto pad_set_lengths; - max_str+= res; - wc= wc2; /* Prepare to put contraction tail */ - } - } - - /* Normal character, or contraction tail */ - if ((res= cs->cset->wc_mb(cs, wc, - (uchar*) min_str, (uchar*) min_end)) <= 0) - goto pad_set_lengths; - min_str+= res; - if ((res= cs->cset->wc_mb(cs, wc, - (uchar*) max_str, (uchar*) max_end)) <= 0) - goto pad_set_lengths; - max_str+= res; - } - -pad_set_lengths: - *min_length= (size_t) (min_str - min_org); - *max_length= (size_t) (max_str - max_org); - -pad_min_max: - /* - Fill up max_str and min_str to res_length. - fill() cannot set incomplete characters and - requires that "length" argument is divisible to mbminlen. - Make sure to call fill() with proper "length" argument. - */ - res_length_diff= res_length % cs->mbminlen; - cs->cset->fill(cs, min_str, min_end - min_str - res_length_diff, - cs->min_sort_char); - cs->cset->fill(cs, max_str, max_end - max_str - res_length_diff, - cs->max_sort_char); - - /* In case of incomplete characters set the remainder to 0x00's */ - if (res_length_diff) - { - /* Example: odd res_length for ucs2 */ - memset(min_end - res_length_diff, 0, res_length_diff); - memset(max_end - res_length_diff, 0, res_length_diff); - } - return FALSE; -} - - -int -my_wildcmp_mb_bin(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many) -{ - int result= -1; /* Not found, using wildcards */ - - while (wildstr != wildend) - { - while (*wildstr != w_many && *wildstr != w_one) - { - int l; - if (*wildstr == escape && wildstr+1 != wildend) - wildstr++; - if ((l = my_ismbchar(cs, wildstr, wildend))) - { - if (str+l > str_end || memcmp(str, wildstr, l) != 0) - return 1; - str += l; - wildstr += l; - } - else - if (str == str_end || *wildstr++ != *str++) - return(1); /* No match */ - if (wildstr == wildend) - return (str != str_end); /* Match if both are at end */ - result=1; /* Found an anchor char */ - } - if (*wildstr == w_one) - { - do - { - if (str == str_end) /* Skip one char if possible */ - return (result); - INC_PTR(cs,str,str_end); - } while (++wildstr < wildend && *wildstr == w_one); - if (wildstr == wildend) - break; - } - if (*wildstr == w_many) - { /* Found w_many */ - uchar cmp; - const char* mb = wildstr; - int mb_len=0; - - wildstr++; - /* Remove any '%' and '_' from the wild search string */ - for (; wildstr != wildend ; wildstr++) - { - if (*wildstr == w_many) - continue; - if (*wildstr == w_one) - { - if (str == str_end) - return (-1); - INC_PTR(cs,str,str_end); - continue; - } - break; /* Not a wild character */ - } - if (wildstr == wildend) - return(0); /* Ok if w_many is last */ - if (str == str_end) - return -1; - - if ((cmp= *wildstr) == escape && wildstr+1 != wildend) - cmp= *++wildstr; - - mb=wildstr; - mb_len= my_ismbchar(cs, wildstr, wildend); - INC_PTR(cs,wildstr,wildend); /* This is compared trough cmp */ - do - { - for (;;) - { - if (str >= str_end) - return -1; - if (mb_len) - { - if (str+mb_len <= str_end && memcmp(str, mb, mb_len) == 0) - { - str += mb_len; - break; - } - } - else if (!my_ismbchar(cs, str, str_end) && *str == cmp) - { - str++; - break; - } - INC_PTR(cs,str, str_end); - } - { - int tmp=my_wildcmp_mb_bin(cs,str,str_end,wildstr,wildend,escape,w_one,w_many); - if (tmp <= 0) - return (tmp); - } - } while (str != str_end && wildstr[0] != w_many); - return(-1); - } - } - return (str != str_end ? 1 : 0); -} - - -/* - Data was produced from EastAsianWidth.txt - using utt11-dump utility. -*/ -static char pg11[256]= -{ -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -}; - -static char pg23[256]= -{ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -}; - -static char pg2E[256]= -{ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 -}; - -static char pg2F[256]= -{ -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0 -}; - -static char pg30[256]= -{ -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, -0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -}; - -static char pg31[256]= -{ -0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -}; - -static char pg32[256]= -{ -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 -}; - -static char pg4D[256]= -{ -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -}; - -static char pg9F[256]= -{ -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -}; - -static char pgA4[256]= -{ -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -}; - -static char pgD7[256]= -{ -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -}; - -static char pgFA[256]= -{ -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -}; - -static char pgFE[256]= -{ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -}; - -static char pgFF[256]= -{ -0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -}; - -static struct {int page; char *p;} utr11_data[256]= -{ -{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL}, -{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL}, -{0,NULL},{0,pg11},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL}, -{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL}, -{0,NULL},{0,NULL},{0,NULL},{0,pg23},{0,NULL},{0,NULL},{0,NULL},{0,NULL}, -{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,pg2E},{0,pg2F}, -{0,pg30},{0,pg31},{0,pg32},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{0,pg4D},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{0,pg9F}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{0,pgA4},{0,NULL},{0,NULL},{0,NULL}, -{0,NULL},{0,NULL},{0,NULL},{0,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL}, -{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{1,NULL},{0,pgD7}, -{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL}, -{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL}, -{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL}, -{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL},{0,NULL}, -{0,NULL},{1,NULL},{0,pgFA},{0,NULL},{0,NULL},{0,NULL},{0,pgFE},{0,pgFF} -}; - - -size_t my_numcells_mb(CHARSET_INFO *cs, const char *b, const char *e) -{ - my_wc_t wc; - size_t clen= 0; - - while (b < e) - { - int mb_len; - uint pg; - if ((mb_len= cs->cset->mb_wc(cs, &wc, (uchar*) b, (uchar*) e)) <= 0) - { - mb_len= 1; /* Let's think a wrong sequence takes 1 dysplay cell */ - b++; - continue; - } - b+= mb_len; - if (wc > 0xFFFF) - { - if (wc >= 0x20000 && wc <= 0x3FFFD) /* CJK Ideograph Extension B, C */ - clen+= 1; - } - else - { - pg= (wc >> 8) & 0xFF; - clen+= utr11_data[pg].p ? utr11_data[pg].p[wc & 0xFF] : utr11_data[pg].page; - } - clen++; - } - return clen; -} - - -int my_mb_ctype_mb(CHARSET_INFO *cs, int *ctype, - const uchar *s, const uchar *e) -{ - my_wc_t wc; - int res= cs->cset->mb_wc(cs, &wc, s, e); - if (res <= 0 || wc > 0xFFFF) - *ctype= 0; - else - *ctype= my_uni_ctype[wc>>8].ctype ? - my_uni_ctype[wc>>8].ctype[wc&0xFF] : - my_uni_ctype[wc>>8].pctype; - return res; -} - - -MY_COLLATION_HANDLER my_collation_mb_bin_handler = -{ - NULL, /* init */ - my_strnncoll_mb_bin, - my_strnncollsp_mb_bin, - my_strnxfrm_mb_bin, - my_strnxfrmlen_simple, - my_like_range_mb, - my_wildcmp_mb_bin, - my_strcasecmp_mb_bin, - my_instr_mb, - my_hash_sort_mb_bin, - my_propagate_simple -}; - - -#endif diff --git a/deps/mysqllite/strings/ctype-simple.c b/deps/mysqllite/strings/ctype-simple.c deleted file mode 100644 index 2e5f78a30bf9a7..00000000000000 --- a/deps/mysqllite/strings/ctype-simple.c +++ /dev/null @@ -1,1704 +0,0 @@ -/* Copyright (C) 2002 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include "m_string.h" -#include "m_ctype.h" -#include "my_sys.h" /* Needed for MY_ERRNO_ERANGE */ -#include - -#include "stdarg.h" - -/* - Returns the number of bytes required for strnxfrm(). -*/ - -size_t my_strnxfrmlen_simple(CHARSET_INFO *cs, size_t len) -{ - return len * (cs->strxfrm_multiply ? cs->strxfrm_multiply : 1); -} - - -/* - Converts a string into its sort key. - - SYNOPSIS - my_strnxfrm_xxx() - - IMPLEMENTATION - - The my_strxfrm_xxx() function transforms a string pointed to by - 'src' with length 'srclen' according to the charset+collation - pair 'cs' and copies the result key into 'dest'. - - Comparing two strings using memcmp() after my_strnxfrm_xxx() - is equal to comparing two original strings with my_strnncollsp_xxx(). - - Not more than 'dstlen' bytes are written into 'dst'. - To garantee that the whole string is transformed, 'dstlen' must be - at least srclen*cs->strnxfrm_multiply bytes long. Otherwise, - consequent memcmp() may return a non-accurate result. - - If the source string is too short to fill whole 'dstlen' bytes, - then the 'dest' string is padded up to 'dstlen', ensuring that: - - "a" == "a " - "a\0" < "a" - "a\0" < "a " - - my_strnxfrm_simple() is implemented for 8bit charsets and - simple collations with one-to-one string->key transformation. - - See also implementations for various charsets/collations in - other ctype-xxx.c files. - - RETURN - - Target len 'dstlen'. - -*/ - - -size_t my_strnxfrm_simple(CHARSET_INFO * cs, - uchar *dest, size_t len, - const uchar *src, size_t srclen) -{ - uchar *map= cs->sort_order; - size_t dstlen= len; - set_if_smaller(len, srclen); - if (dest != src) - { - const uchar *end; - for ( end=src+len; src < end ; ) - *dest++= map[*src++]; - } - else - { - const uchar *end; - for ( end=dest+len; dest < end ; dest++) - *dest= (char) map[(uchar) *dest]; - } - if (dstlen > len) - bfill(dest, dstlen - len, ' '); - return dstlen; -} - - -int my_strnncoll_simple(CHARSET_INFO * cs, const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - size_t len = ( slen > tlen ) ? tlen : slen; - uchar *map= cs->sort_order; - if (t_is_prefix && slen > tlen) - slen=tlen; - while (len--) - { - if (map[*s++] != map[*t++]) - return ((int) map[s[-1]] - (int) map[t[-1]]); - } - /* - We can't use (slen - tlen) here as the result may be outside of the - precision of a signed int - */ - return slen > tlen ? 1 : slen < tlen ? -1 : 0 ; -} - - -/* - Compare strings, discarding end space - - SYNOPSIS - my_strnncollsp_simple() - cs character set handler - a First string to compare - a_length Length of 'a' - b Second string to compare - b_length Length of 'b' - diff_if_only_endspace_difference - Set to 1 if the strings should be regarded as different - if they only difference in end space - - IMPLEMENTATION - If one string is shorter as the other, then we space extend the other - so that the strings have equal length. - - This will ensure that the following things hold: - - "a" == "a " - "a\0" < "a" - "a\0" < "a " - - RETURN - < 0 a < b - = 0 a == b - > 0 a > b -*/ - -int my_strnncollsp_simple(CHARSET_INFO * cs, const uchar *a, size_t a_length, - const uchar *b, size_t b_length, - my_bool diff_if_only_endspace_difference) -{ - const uchar *map= cs->sort_order, *end; - size_t length; - int res; - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= 0; -#endif - - end= a + (length= min(a_length, b_length)); - while (a < end) - { - if (map[*a++] != map[*b++]) - return ((int) map[a[-1]] - (int) map[b[-1]]); - } - res= 0; - if (a_length != b_length) - { - int swap= 1; - if (diff_if_only_endspace_difference) - res= 1; /* Assume 'a' is bigger */ - /* - Check the next not space character of the longer key. If it's < ' ', - then it's smaller than the other key. - */ - if (a_length < b_length) - { - /* put shorter key in s */ - a_length= b_length; - a= b; - swap= -1; /* swap sign of result */ - res= -res; - } - for (end= a + a_length-length; a < end ; a++) - { - if (map[*a] != map[' ']) - return (map[*a] < map[' ']) ? -swap : swap; - } - } - return res; -} - - -size_t my_caseup_str_8bit(CHARSET_INFO * cs,char *str) -{ - register uchar *map= cs->to_upper; - char *str_orig= str; - while ((*str= (char) map[(uchar) *str]) != 0) - str++; - return (size_t) (str - str_orig); -} - - -size_t my_casedn_str_8bit(CHARSET_INFO * cs,char *str) -{ - register uchar *map= cs->to_lower; - char *str_orig= str; - while ((*str= (char) map[(uchar) *str]) != 0) - str++; - return (size_t) (str - str_orig); -} - - -size_t my_caseup_8bit(CHARSET_INFO * cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) -{ - char *end= src + srclen; - register uchar *map= cs->to_upper; - DBUG_ASSERT(src == dst && srclen == dstlen); - for ( ; src != end ; src++) - *src= (char) map[(uchar) *src]; - return srclen; -} - - -size_t my_casedn_8bit(CHARSET_INFO * cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) -{ - char *end= src + srclen; - register uchar *map=cs->to_lower; - DBUG_ASSERT(src == dst && srclen == dstlen); - for ( ; src != end ; src++) - *src= (char) map[(uchar) *src]; - return srclen; -} - -int my_strcasecmp_8bit(CHARSET_INFO * cs,const char *s, const char *t) -{ - register uchar *map=cs->to_upper; - while (map[(uchar) *s] == map[(uchar) *t++]) - if (!*s++) return 0; - return ((int) map[(uchar) s[0]] - (int) map[(uchar) t[-1]]); -} - - -int my_mb_wc_8bit(CHARSET_INFO *cs,my_wc_t *wc, - const uchar *str, - const uchar *end __attribute__((unused))) -{ - if (str >= end) - return MY_CS_TOOSMALL; - - *wc=cs->tab_to_uni[*str]; - return (!wc[0] && str[0]) ? -1 : 1; -} - -int my_wc_mb_8bit(CHARSET_INFO *cs,my_wc_t wc, - uchar *str, - uchar *end) -{ - MY_UNI_IDX *idx; - - if (str >= end) - return MY_CS_TOOSMALL; - - for (idx=cs->tab_from_uni; idx->tab ; idx++) - { - if (idx->from <= wc && idx->to >= wc) - { - str[0]= idx->tab[wc - idx->from]; - return (!str[0] && wc) ? MY_CS_ILUNI : 1; - } - } - return MY_CS_ILUNI; -} - - -/* - We can't use vsprintf here as it's not guaranteed to return - the length on all operating systems. - This function is also not called in a safe environment, so the - end buffer must be checked. -*/ - -size_t my_snprintf_8bit(CHARSET_INFO *cs __attribute__((unused)), - char* to, size_t n __attribute__((unused)), - const char* fmt, ...) -{ - va_list args; - int result; - va_start(args,fmt); - result= my_vsnprintf(to, n, fmt, args); - va_end(args); - return result; -} - - -void my_hash_sort_simple(CHARSET_INFO *cs, - const uchar *key, size_t len, - ulong *nr1, ulong *nr2) -{ - register uchar *sort_order=cs->sort_order; - const uchar *end; - - /* - Remove end space. We have to do this to be able to compare - 'A ' and 'A' as identical - */ - end= skip_trailing_space(key, len); - - for (; key < (uchar*) end ; key++) - { - nr1[0]^=(ulong) ((((uint) nr1[0] & 63)+nr2[0]) * - ((uint) sort_order[(uint) *key])) + (nr1[0] << 8); - nr2[0]+=3; - } -} - - -long my_strntol_8bit(CHARSET_INFO *cs, - const char *nptr, size_t l, int base, - char **endptr, int *err) -{ - int negative; - register uint32 cutoff; - register uint cutlim; - register uint32 i; - register const char *s; - register uchar c; - const char *save, *e; - int overflow; - - *err= 0; /* Initialize error indicator */ - - s = nptr; - e = nptr+l; - - for ( ; s='0' && c<='9') - c -= '0'; - else if (c>='A' && c<='Z') - c = c - 'A' + 10; - else if (c>='a' && c<='z') - c = c - 'a' + 10; - else - break; - if (c >= base) - break; - if (i > cutoff || (i == cutoff && c > cutlim)) - overflow = 1; - else - { - i *= (uint32) base; - i += c; - } - } - - if (s == save) - goto noconv; - - if (endptr != NULL) - *endptr = (char *) s; - - if (negative) - { - if (i > (uint32) INT_MIN32) - overflow = 1; - } - else if (i > INT_MAX32) - overflow = 1; - - if (overflow) - { - err[0]= ERANGE; - return negative ? INT_MIN32 : INT_MAX32; - } - - return (negative ? -((long) i) : (long) i); - -noconv: - err[0]= EDOM; - if (endptr != NULL) - *endptr = (char *) nptr; - return 0L; -} - - -ulong my_strntoul_8bit(CHARSET_INFO *cs, - const char *nptr, size_t l, int base, - char **endptr, int *err) -{ - int negative; - register uint32 cutoff; - register uint cutlim; - register uint32 i; - register const char *s; - register uchar c; - const char *save, *e; - int overflow; - - *err= 0; /* Initialize error indicator */ - - s = nptr; - e = nptr+l; - - for( ; s='0' && c<='9') - c -= '0'; - else if (c>='A' && c<='Z') - c = c - 'A' + 10; - else if (c>='a' && c<='z') - c = c - 'a' + 10; - else - break; - if (c >= base) - break; - if (i > cutoff || (i == cutoff && c > cutlim)) - overflow = 1; - else - { - i *= (uint32) base; - i += c; - } - } - - if (s == save) - goto noconv; - - if (endptr != NULL) - *endptr = (char *) s; - - if (overflow) - { - err[0]= ERANGE; - return (~(uint32) 0); - } - - return (negative ? -((long) i) : (long) i); - -noconv: - err[0]= EDOM; - if (endptr != NULL) - *endptr = (char *) nptr; - return 0L; -} - - -longlong my_strntoll_8bit(CHARSET_INFO *cs __attribute__((unused)), - const char *nptr, size_t l, int base, - char **endptr,int *err) -{ - int negative; - register ulonglong cutoff; - register uint cutlim; - register ulonglong i; - register const char *s, *e; - const char *save; - int overflow; - - *err= 0; /* Initialize error indicator */ - - s = nptr; - e = nptr+l; - - for(; s='0' && c<='9') - c -= '0'; - else if (c>='A' && c<='Z') - c = c - 'A' + 10; - else if (c>='a' && c<='z') - c = c - 'a' + 10; - else - break; - if (c >= base) - break; - if (i > cutoff || (i == cutoff && c > cutlim)) - overflow = 1; - else - { - i *= (ulonglong) base; - i += c; - } - } - - if (s == save) - goto noconv; - - if (endptr != NULL) - *endptr = (char *) s; - - if (negative) - { - if (i > (ulonglong) LONGLONG_MIN) - overflow = 1; - } - else if (i > (ulonglong) LONGLONG_MAX) - overflow = 1; - - if (overflow) - { - err[0]= ERANGE; - return negative ? LONGLONG_MIN : LONGLONG_MAX; - } - - return (negative ? -((longlong) i) : (longlong) i); - -noconv: - err[0]= EDOM; - if (endptr != NULL) - *endptr = (char *) nptr; - return 0L; -} - - -ulonglong my_strntoull_8bit(CHARSET_INFO *cs, - const char *nptr, size_t l, int base, - char **endptr, int *err) -{ - int negative; - register ulonglong cutoff; - register uint cutlim; - register ulonglong i; - register const char *s, *e; - const char *save; - int overflow; - - *err= 0; /* Initialize error indicator */ - - s = nptr; - e = nptr+l; - - for(; s='0' && c<='9') - c -= '0'; - else if (c>='A' && c<='Z') - c = c - 'A' + 10; - else if (c>='a' && c<='z') - c = c - 'a' + 10; - else - break; - if (c >= base) - break; - if (i > cutoff || (i == cutoff && c > cutlim)) - overflow = 1; - else - { - i *= (ulonglong) base; - i += c; - } - } - - if (s == save) - goto noconv; - - if (endptr != NULL) - *endptr = (char *) s; - - if (overflow) - { - err[0]= ERANGE; - return (~(ulonglong) 0); - } - - return (negative ? -((longlong) i) : (longlong) i); - -noconv: - err[0]= EDOM; - if (endptr != NULL) - *endptr = (char *) nptr; - return 0L; -} - - -/* - Read double from string - - SYNOPSIS: - my_strntod_8bit() - cs Character set information - str String to convert to double - length Optional length for string. - end result pointer to end of converted string - err Error number if failed conversion - - NOTES: - If length is not INT_MAX32 or str[length] != 0 then the given str must - be writeable - If length == INT_MAX32 the str must be \0 terminated. - - It's implemented this way to save a buffer allocation and a memory copy. - - RETURN - Value of number in string -*/ - - -double my_strntod_8bit(CHARSET_INFO *cs __attribute__((unused)), - char *str, size_t length, - char **end, int *err) -{ - if (length == INT_MAX32) - length= 65535; /* Should be big enough */ - *end= str + length; - return my_strtod(str, end, err); -} - - -/* - This is a fast version optimized for the case of radix 10 / -10 - - Assume len >= 1 -*/ - -size_t my_long10_to_str_8bit(CHARSET_INFO *cs __attribute__((unused)), - char *dst, size_t len, int radix, long int val) -{ - char buffer[66]; - register char *p, *e; - long int new_val; - uint sign=0; - unsigned long int uval = (unsigned long int) val; - - e = p = &buffer[sizeof(buffer)-1]; - *p= 0; - - if (radix < 0) - { - if (val < 0) - { - /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */ - uval= (unsigned long int)0 - uval; - *dst++= '-'; - len--; - sign= 1; - } - } - - new_val = (long) (uval / 10); - *--p = '0'+ (char) (uval - (unsigned long) new_val * 10); - val = new_val; - - while (val != 0) - { - new_val=val/10; - *--p = '0' + (char) (val-new_val*10); - val= new_val; - } - - len= min(len, (size_t) (e-p)); - memcpy(dst, p, len); - return len+sign; -} - - -size_t my_longlong10_to_str_8bit(CHARSET_INFO *cs __attribute__((unused)), - char *dst, size_t len, int radix, - longlong val) -{ - char buffer[65]; - register char *p, *e; - long long_val; - uint sign= 0; - ulonglong uval = (ulonglong)val; - - if (radix < 0) - { - if (val < 0) - { - /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */ - uval = (ulonglong)0 - uval; - *dst++= '-'; - len--; - sign= 1; - } - } - - e = p = &buffer[sizeof(buffer)-1]; - *p= 0; - - if (uval == 0) - { - *--p= '0'; - len= 1; - goto cnv; - } - - while (uval > (ulonglong) LONG_MAX) - { - ulonglong quo= uval/(uint) 10; - uint rem= (uint) (uval- quo* (uint) 10); - *--p = '0' + rem; - uval= quo; - } - - long_val= (long) uval; - while (long_val != 0) - { - long quo= long_val/10; - *--p = (char) ('0' + (long_val - quo*10)); - long_val= quo; - } - - len= min(len, (size_t) (e-p)); -cnv: - memcpy(dst, p, len); - return len+sign; -} - - -/* -** Compare string against string with wildcard -** 0 if matched -** -1 if not matched with wildcard -** 1 if matched with wildcard -*/ - -#ifdef LIKE_CMP_TOUPPER -#define likeconv(s,A) (uchar) my_toupper(s,A) -#else -#define likeconv(s,A) (uchar) (s)->sort_order[(uchar) (A)] -#endif - -#define INC_PTR(cs,A,B) (A)++ - - -int my_wildcmp_8bit(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many) -{ - int result= -1; /* Not found, using wildcards */ - - while (wildstr != wildend) - { - while (*wildstr != w_many && *wildstr != w_one) - { - if (*wildstr == escape && wildstr+1 != wildend) - wildstr++; - - if (str == str_end || likeconv(cs,*wildstr++) != likeconv(cs,*str++)) - return(1); /* No match */ - if (wildstr == wildend) - return(str != str_end); /* Match if both are at end */ - result=1; /* Found an anchor char */ - } - if (*wildstr == w_one) - { - do - { - if (str == str_end) /* Skip one char if possible */ - return(result); - INC_PTR(cs,str,str_end); - } while (++wildstr < wildend && *wildstr == w_one); - if (wildstr == wildend) - break; - } - if (*wildstr == w_many) - { /* Found w_many */ - uchar cmp; - - wildstr++; - /* Remove any '%' and '_' from the wild search string */ - for (; wildstr != wildend ; wildstr++) - { - if (*wildstr == w_many) - continue; - if (*wildstr == w_one) - { - if (str == str_end) - return(-1); - INC_PTR(cs,str,str_end); - continue; - } - break; /* Not a wild character */ - } - if (wildstr == wildend) - return(0); /* Ok if w_many is last */ - if (str == str_end) - return(-1); - - if ((cmp= *wildstr) == escape && wildstr+1 != wildend) - cmp= *++wildstr; - - INC_PTR(cs,wildstr,wildend); /* This is compared trough cmp */ - cmp=likeconv(cs,cmp); - do - { - while (str != str_end && (uchar) likeconv(cs,*str) != cmp) - str++; - if (str++ == str_end) return(-1); - { - int tmp=my_wildcmp_8bit(cs,str,str_end,wildstr,wildend,escape,w_one, - w_many); - if (tmp <= 0) - return(tmp); - } - } while (str != str_end && wildstr[0] != w_many); - return(-1); - } - } - return(str != str_end ? 1 : 0); -} - - -/* -** Calculate min_str and max_str that ranges a LIKE string. -** Arguments: -** ptr Pointer to LIKE string. -** ptr_length Length of LIKE string. -** escape Escape character in LIKE. (Normally '\'). -** All escape characters should be removed from min_str and max_str -** res_length Length of min_str and max_str. -** min_str Smallest case sensitive string that ranges LIKE. -** Should be space padded to res_length. -** max_str Largest case sensitive string that ranges LIKE. -** Normally padded with the biggest character sort value. -** -** The function should return 0 if ok and 1 if the LIKE string can't be -** optimized ! -*/ - -my_bool my_like_range_simple(CHARSET_INFO *cs, - const char *ptr, size_t ptr_length, - pbool escape, pbool w_one, pbool w_many, - size_t res_length, - char *min_str,char *max_str, - size_t *min_length, size_t *max_length) -{ - const char *end= ptr + ptr_length; - char *min_org=min_str; - char *min_end=min_str+res_length; - size_t charlen= res_length / cs->mbmaxlen; - - for (; ptr != end && min_str != min_end && charlen > 0 ; ptr++, charlen--) - { - if (*ptr == escape && ptr+1 != end) - { - ptr++; /* Skip escape */ - *min_str++= *max_str++ = *ptr; - continue; - } - if (*ptr == w_one) /* '_' in SQL */ - { - *min_str++='\0'; /* This should be min char */ - *max_str++= (char) cs->max_sort_char; - continue; - } - if (*ptr == w_many) /* '%' in SQL */ - { - /* Calculate length of keys */ - *min_length= ((cs->state & MY_CS_BINSORT) ? - (size_t) (min_str - min_org) : - res_length); - *max_length= res_length; - do - { - *min_str++= 0; - *max_str++= (char) cs->max_sort_char; - } while (min_str != min_end); - return 0; - } - *min_str++= *max_str++ = *ptr; - } - - *min_length= *max_length = (size_t) (min_str - min_org); - while (min_str != min_end) - *min_str++= *max_str++ = ' '; /* Because if key compression */ - return 0; -} - - -size_t my_scan_8bit(CHARSET_INFO *cs, const char *str, const char *end, int sq) -{ - const char *str0= str; - switch (sq) - { - case MY_SEQ_INTTAIL: - if (*str == '.') - { - for(str++ ; str != end && *str == '0' ; str++); - return (size_t) (str - str0); - } - return 0; - - case MY_SEQ_SPACES: - for ( ; str < end ; str++) - { - if (!my_isspace(cs,*str)) - break; - } - return (size_t) (str - str0); - default: - return 0; - } -} - - -void my_fill_8bit(CHARSET_INFO *cs __attribute__((unused)), - char *s, size_t l, int fill) -{ - bfill((uchar*) s,l,fill); -} - - -size_t my_numchars_8bit(CHARSET_INFO *cs __attribute__((unused)), - const char *b, const char *e) -{ - return (size_t) (e - b); -} - - -size_t my_numcells_8bit(CHARSET_INFO *cs __attribute__((unused)), - const char *b, const char *e) -{ - return (size_t) (e - b); -} - - -size_t my_charpos_8bit(CHARSET_INFO *cs __attribute__((unused)), - const char *b __attribute__((unused)), - const char *e __attribute__((unused)), - size_t pos) -{ - return pos; -} - - -size_t my_well_formed_len_8bit(CHARSET_INFO *cs __attribute__((unused)), - const char *start, const char *end, - size_t nchars, int *error) -{ - size_t nbytes= (size_t) (end-start); - *error= 0; - return min(nbytes, nchars); -} - - -size_t my_lengthsp_8bit(CHARSET_INFO *cs __attribute__((unused)), - const char *ptr, size_t length) -{ - const char *end; - end= (const char *) skip_trailing_space((const uchar *)ptr, length); - return (size_t) (end-ptr); -} - - -uint my_instr_simple(CHARSET_INFO *cs, - const char *b, size_t b_length, - const char *s, size_t s_length, - my_match_t *match, uint nmatch) -{ - register const uchar *str, *search, *end, *search_end; - - if (s_length <= b_length) - { - if (!s_length) - { - if (nmatch) - { - match->beg= 0; - match->end= 0; - match->mb_len= 0; - } - return 1; /* Empty string is always found */ - } - - str= (const uchar*) b; - search= (const uchar*) s; - end= (const uchar*) b+b_length-s_length+1; - search_end= (const uchar*) s + s_length; - -skip: - while (str != end) - { - if (cs->sort_order[*str++] == cs->sort_order[*search]) - { - register const uchar *i,*j; - - i= str; - j= search+1; - - while (j != search_end) - if (cs->sort_order[*i++] != cs->sort_order[*j++]) - goto skip; - - if (nmatch > 0) - { - match[0].beg= 0; - match[0].end= (size_t) (str- (const uchar*)b-1); - match[0].mb_len= match[0].end; - - if (nmatch > 1) - { - match[1].beg= match[0].end; - match[1].end= match[0].end+s_length; - match[1].mb_len= match[1].end-match[1].beg; - } - } - return 2; - } - } - } - return 0; -} - - -typedef struct -{ - int nchars; - MY_UNI_IDX uidx; -} uni_idx; - -#define PLANE_SIZE 0x100 -#define PLANE_NUM 0x100 -#define PLANE_NUMBER(x) (((x)>>8) % PLANE_NUM) - -static int pcmp(const void * f, const void * s) -{ - const uni_idx *F= (const uni_idx*) f; - const uni_idx *S= (const uni_idx*) s; - int res; - - if (!(res=((S->nchars)-(F->nchars)))) - res=((F->uidx.from)-(S->uidx.to)); - return res; -} - -static my_bool create_fromuni(CHARSET_INFO *cs, void *(*alloc)(size_t)) -{ - uni_idx idx[PLANE_NUM]; - int i,n; - - /* - Check that Unicode map is loaded. - It can be not loaded when the collation is - listed in Index.xml but not specified - in the character set specific XML file. - */ - if (!cs->tab_to_uni) - return TRUE; - - /* Clear plane statistics */ - bzero(idx,sizeof(idx)); - - /* Count number of characters in each plane */ - for (i=0; i< 0x100; i++) - { - uint16 wc=cs->tab_to_uni[i]; - int pl= PLANE_NUMBER(wc); - - if (wc || !i) - { - if (!idx[pl].nchars) - { - idx[pl].uidx.from=wc; - idx[pl].uidx.to=wc; - }else - { - idx[pl].uidx.from=wcidx[pl].uidx.to?wc:idx[pl].uidx.to; - } - idx[pl].nchars++; - } - } - - /* Sort planes in descending order */ - qsort(&idx,PLANE_NUM,sizeof(uni_idx),&pcmp); - - for (i=0; i < PLANE_NUM; i++) - { - int ch,numchars; - - /* Skip empty plane */ - if (!idx[i].nchars) - break; - - numchars=idx[i].uidx.to-idx[i].uidx.from+1; - if (!(idx[i].uidx.tab=(uchar*) alloc(numchars * sizeof(*idx[i].uidx.tab)))) - return TRUE; - - bzero(idx[i].uidx.tab,numchars*sizeof(*idx[i].uidx.tab)); - - for (ch=1; ch < PLANE_SIZE; ch++) - { - uint16 wc=cs->tab_to_uni[ch]; - if (wc >= idx[i].uidx.from && wc <= idx[i].uidx.to && wc) - { - int ofs= wc - idx[i].uidx.from; - idx[i].uidx.tab[ofs]= ch; - } - } - } - - /* Allocate and fill reverse table for each plane */ - n=i; - if (!(cs->tab_from_uni= (MY_UNI_IDX*) alloc(sizeof(MY_UNI_IDX)*(n+1)))) - return TRUE; - - for (i=0; i< n; i++) - cs->tab_from_uni[i]= idx[i].uidx; - - /* Set end-of-list marker */ - bzero(&cs->tab_from_uni[i],sizeof(MY_UNI_IDX)); - return FALSE; -} - -static my_bool my_cset_init_8bit(CHARSET_INFO *cs, void *(*alloc)(size_t)) -{ - cs->caseup_multiply= 1; - cs->casedn_multiply= 1; - cs->pad_char= ' '; - return create_fromuni(cs, alloc); -} - -static void set_max_sort_char(CHARSET_INFO *cs) -{ - uchar max_char; - uint i; - - if (!cs->sort_order) - return; - - max_char=cs->sort_order[(uchar) cs->max_sort_char]; - for (i= 0; i < 256; i++) - { - if ((uchar) cs->sort_order[i] > max_char) - { - max_char=(uchar) cs->sort_order[i]; - cs->max_sort_char= i; - } - } -} - -static my_bool my_coll_init_simple(CHARSET_INFO *cs, - void *(*alloc)(size_t) __attribute__((unused))) -{ - set_max_sort_char(cs); - return FALSE; -} - - -longlong my_strtoll10_8bit(CHARSET_INFO *cs __attribute__((unused)), - const char *nptr, char **endptr, int *error) -{ - return my_strtoll10(nptr, endptr, error); -} - - -int my_mb_ctype_8bit(CHARSET_INFO *cs, int *ctype, - const uchar *s, const uchar *e) -{ - if (s >= e) - { - *ctype= 0; - return MY_CS_TOOSMALL; - } - *ctype= cs->ctype[*s + 1]; - return 1; -} - - -#define CUTOFF (ULONGLONG_MAX / 10) -#define CUTLIM (ULONGLONG_MAX % 10) -#define DIGITS_IN_ULONGLONG 20 - -static ulonglong d10[DIGITS_IN_ULONGLONG]= -{ - 1, - 10, - 100, - 1000, - 10000, - 100000, - 1000000, - 10000000, - 100000000, - 1000000000, - 10000000000ULL, - 100000000000ULL, - 1000000000000ULL, - 10000000000000ULL, - 100000000000000ULL, - 1000000000000000ULL, - 10000000000000000ULL, - 100000000000000000ULL, - 1000000000000000000ULL, - 10000000000000000000ULL -}; - - -/* - - Convert a string to unsigned long long integer value - with rounding. - - SYNOPSYS - my_strntoull10_8bit() - cs in pointer to character set - str in pointer to the string to be converted - length in string length - unsigned_flag in whether the number is unsigned - endptr out pointer to the stop character - error out returned error code - - DESCRIPTION - This function takes the decimal representation of integer number - from string str and converts it to an signed or unsigned - long long integer value. - Space characters and tab are ignored. - A sign character might precede the digit characters. - The number may have any number of pre-zero digits. - The number may have decimal point and exponent. - Rounding is always done in "away from zero" style: - 0.5 -> 1 - -0.5 -> -1 - - The function stops reading the string str after "length" bytes - or at the first character that is not a part of correct number syntax: - - ::= - [ ] [ E [ ] ] - - ::= - [ [ ] ] - | - ::= ... - - RETURN VALUES - Value of string as a signed/unsigned longlong integer - - endptr cannot be NULL. The function will store the end pointer - to the stop character here. - - The error parameter contains information how things went: - 0 ok - ERANGE If the the value of the converted number is out of range - In this case the return value is: - - ULONGLONG_MAX if unsigned_flag and the number was too big - - 0 if unsigned_flag and the number was negative - - LONGLONG_MAX if no unsigned_flag and the number is too big - - LONGLONG_MIN if no unsigned_flag and the number it too big negative - - EDOM If the string didn't contain any digits. - In this case the return value is 0. -*/ - -ulonglong -my_strntoull10rnd_8bit(CHARSET_INFO *cs __attribute__((unused)), - const char *str, size_t length, int unsigned_flag, - char **endptr, int *error) -{ - const char *dot, *end9, *beg, *end= str + length; - ulonglong ull; - ulong ul; - uchar ch; - int shift= 0, digits= 0, negative, addon; - - /* Skip leading spaces and tabs */ - for ( ; str < end && (*str == ' ' || *str == '\t') ; str++); - - if (str >= end) - goto ret_edom; - - if ((negative= (*str == '-')) || *str=='+') /* optional sign */ - { - if (++str == end) - goto ret_edom; - } - - beg= str; - end9= (str + 9) > end ? end : (str + 9); - /* Accumulate small number into ulong, for performance purposes */ - for (ul= 0 ; str < end9 && (ch= (uchar) (*str - '0')) < 10; str++) - { - ul= ul * 10 + ch; - } - - if (str >= end) /* Small number without dots and expanents */ - { - *endptr= (char*) str; - if (negative) - { - if (unsigned_flag) - { - *error= ul ? MY_ERRNO_ERANGE : 0; - return 0; - } - else - { - *error= 0; - return (ulonglong) (longlong) -(long) ul; - } - } - else - { - *error=0; - return (ulonglong) ul; - } - } - - digits= str - beg; - - /* Continue to accumulate into ulonglong */ - for (dot= NULL, ull= ul; str < end; str++) - { - if ((ch= (uchar) (*str - '0')) < 10) - { - if (ull < CUTOFF || (ull == CUTOFF && ch <= CUTLIM)) - { - ull= ull * 10 + ch; - digits++; - continue; - } - /* - Adding the next digit would overflow. - Remember the next digit in "addon", for rounding. - Scan all digits with an optional single dot. - */ - if (ull == CUTOFF) - { - ull= ULONGLONG_MAX; - addon= 1; - str++; - } - else - addon= (*str >= '5'); - if (!dot) - { - for ( ; str < end && (ch= (uchar) (*str - '0')) < 10; shift++, str++); - if (str < end && *str == '.') - { - str++; - for ( ; str < end && (ch= (uchar) (*str - '0')) < 10; str++); - } - } - else - { - shift= dot - str; - for ( ; str < end && (ch= (uchar) (*str - '0')) < 10; str++); - } - goto exp; - } - - if (*str == '.') - { - if (dot) - { - /* The second dot character */ - addon= 0; - goto exp; - } - else - { - dot= str + 1; - } - continue; - } - - /* Unknown character, exit the loop */ - break; - } - shift= dot ? dot - str : 0; /* Right shift */ - addon= 0; - -exp: /* [ E [ ] ] */ - - if (!digits) - { - str= beg; - goto ret_edom; - } - - if (str < end && (*str == 'e' || *str == 'E')) - { - str++; - if (str < end) - { - int negative_exp, exponent; - if ((negative_exp= (*str == '-')) || *str=='+') - { - if (++str == end) - goto ret_sign; - } - for (exponent= 0 ; - str < end && (ch= (uchar) (*str - '0')) < 10; - str++) - { - exponent= exponent * 10 + ch; - } - shift+= negative_exp ? -exponent : exponent; - } - } - - if (shift == 0) /* No shift, check addon digit */ - { - if (addon) - { - if (ull == ULONGLONG_MAX) - goto ret_too_big; - ull++; - } - goto ret_sign; - } - - if (shift < 0) /* Right shift */ - { - ulonglong d, r; - - if (-shift >= DIGITS_IN_ULONGLONG) - goto ret_zero; /* Exponent is a big negative number, return 0 */ - - d= d10[-shift]; - r= (ull % d) * 2; - ull /= d; - if (r >= d) - ull++; - goto ret_sign; - } - - if (shift > DIGITS_IN_ULONGLONG) /* Huge left shift */ - { - if (!ull) - goto ret_sign; - goto ret_too_big; - } - - for ( ; shift > 0; shift--, ull*= 10) /* Left shift */ - { - if (ull > CUTOFF) - goto ret_too_big; /* Overflow, number too big */ - } - -ret_sign: - *endptr= (char*) str; - - if (!unsigned_flag) - { - if (negative) - { - if (ull > (ulonglong) LONGLONG_MIN) - { - *error= MY_ERRNO_ERANGE; - return (ulonglong) LONGLONG_MIN; - } - *error= 0; - return (ulonglong) -(longlong) ull; - } - else - { - if (ull > (ulonglong) LONGLONG_MAX) - { - *error= MY_ERRNO_ERANGE; - return (ulonglong) LONGLONG_MAX; - } - *error= 0; - return ull; - } - } - - /* Unsigned number */ - if (negative && ull) - { - *error= MY_ERRNO_ERANGE; - return 0; - } - *error= 0; - return ull; - -ret_zero: - *endptr= (char*) str; - *error= 0; - return 0; - -ret_edom: - *endptr= (char*) str; - *error= MY_ERRNO_EDOM; - return 0; - -ret_too_big: - *endptr= (char*) str; - *error= MY_ERRNO_ERANGE; - return unsigned_flag ? - ULONGLONG_MAX : - negative ? (ulonglong) LONGLONG_MIN : (ulonglong) LONGLONG_MAX; -} - - -/* - Check if a constant can be propagated - - SYNOPSIS: - my_propagate_simple() - cs Character set information - str String to convert to double - length Optional length for string. - - NOTES: - Takes the string in the given charset and check - if it can be safely propagated in the optimizer. - - create table t1 ( - s char(5) character set latin1 collate latin1_german2_ci); - insert into t1 values (0xf6); -- o-umlaut - select * from t1 where length(s)=1 and s='oe'; - - The above query should return one row. - We cannot convert this query into: - select * from t1 where length('oe')=1 and s='oe'; - - Currently we don't check the constant itself, - and decide not to propagate a constant - just if the collation itself allows tricky things - like expansions and contractions. In the future - we can write a more sophisticated functions to - check the constants. For example, 'oa' can always - be safety propagated in German2 because unlike - 'oe' it does not have any special meaning. - - RETURN - 1 if constant can be safely propagated - 0 if it is not safe to propagate the constant -*/ - - - -my_bool my_propagate_simple(CHARSET_INFO *cs __attribute__((unused)), - const uchar *str __attribute__((unused)), - size_t length __attribute__((unused))) -{ - return 1; -} - - -my_bool my_propagate_complex(CHARSET_INFO *cs __attribute__((unused)), - const uchar *str __attribute__((unused)), - size_t length __attribute__((unused))) -{ - return 0; -} - - -MY_CHARSET_HANDLER my_charset_8bit_handler= -{ - my_cset_init_8bit, - NULL, /* ismbchar */ - my_mbcharlen_8bit, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_well_formed_len_8bit, - my_lengthsp_8bit, - my_numcells_8bit, - my_mb_wc_8bit, - my_wc_mb_8bit, - my_mb_ctype_8bit, - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_strtoll10_8bit, - my_strntoull10rnd_8bit, - my_scan_8bit -}; - -MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler = -{ - my_coll_init_simple, /* init */ - my_strnncoll_simple, - my_strnncollsp_simple, - my_strnxfrm_simple, - my_strnxfrmlen_simple, - my_like_range_simple, - my_wildcmp_8bit, - my_strcasecmp_8bit, - my_instr_simple, - my_hash_sort_simple, - my_propagate_simple -}; diff --git a/deps/mysqllite/strings/ctype-tis620.c b/deps/mysqllite/strings/ctype-tis620.c deleted file mode 100644 index 14b661ab0fc6fd..00000000000000 --- a/deps/mysqllite/strings/ctype-tis620.c +++ /dev/null @@ -1,965 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Copyright (C) 2003 by Sathit Jittanupat - - * solving bug crash with long text field string - * sorting with different number of space or sign char. within string - - Copyright (C) 2001 by Korakot Chaovavanich and - Apisilp Trunganont - Copyright (C) 1998, 1999 by Pruet Boonma - Copyright (C) 1998 by Theppitak Karoonboonyanan - Copyright (C) 1989, 1991 by Samphan Raruenrom - - Permission to use, copy, modify, distribute and sell this software - and its documentation for any purpose is hereby granted without fee, - provided that the above copyright notice appear in all copies. - Samphan Raruenrom , Theppitak Karoonboonyanan , Pruet Boonma , - Korakot Chaovavanich and Apisilp Trunganont makes no representations - about the suitability of this software for any purpose. It is provided - "as is" without express or implied warranty. -*/ - - -/* - This file is basicly tis620 character sets with some extra functions - for tis-620 handling -*/ - -/* - * This comment is parsed by configure to create ctype.c, - * so don't change it unless you know what you are doing. - * - * .configure. strxfrm_multiply_tis620=4 - */ - -#include -#include -#include "m_string.h" -#include "m_ctype.h" -#include "t_ctype.h" - -#ifdef HAVE_CHARSET_tis620 - -#define BUFFER_MULTIPLY 4 -#define M L_MIDDLE -#define U L_UPPER -#define L L_LOWER -#define UU L_UPRUPR -#define X L_MIDDLE - - -static int t_ctype[][TOT_LEVELS] = { - /*0x00*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x01*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x02*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x03*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x04*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x05*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x06*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x07*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x08*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x09*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x0A*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x0B*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x0C*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x0D*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x0E*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x0F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x10*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x11*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x12*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x13*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x14*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x15*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x16*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x17*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x18*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x19*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x1A*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x1B*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x1C*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x1D*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x1E*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x1F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x20*/ { IGNORE, IGNORE, L3_SPACE, IGNORE, M}, - /*0x21*/ { IGNORE, IGNORE, L3_EXCLAMATION, IGNORE, M }, - /*0x22*/ { IGNORE, IGNORE, L3_QUOTATION, IGNORE, M }, - /*0x23*/ { IGNORE, IGNORE, L3_NUMBER, IGNORE, M }, - /*0x24*/ { IGNORE, IGNORE, L3_DOLLAR, IGNORE, M }, - /*0x25*/ { IGNORE, IGNORE, L3_PERCENT, IGNORE, M }, - /*0x26*/ { IGNORE, IGNORE, L3_AMPERSAND, IGNORE, M }, - /*0x27*/ { IGNORE, IGNORE, L3_APOSTROPHE, IGNORE, M }, - /*0x28*/ { IGNORE, IGNORE, L3_L_PARANTHESIS, IGNORE, M }, - /*0x29*/ { IGNORE, IGNORE, L3_R_PARENTHESIS, IGNORE, M }, - /*0x2A*/ { IGNORE, IGNORE, L3_ASTERISK, IGNORE, M }, - /*0x2B*/ { IGNORE, IGNORE, L3_PLUS, IGNORE, M }, - /*0x2C*/ { IGNORE, IGNORE, L3_COMMA, IGNORE, M }, - /*0x2D*/ { IGNORE, IGNORE, L3_HYPHEN, IGNORE, M }, - /*0x2E*/ { IGNORE, IGNORE, L3_FULL_STOP, IGNORE, M }, - /*0x2F*/ { IGNORE, IGNORE, L3_SOLIDUS, IGNORE, M }, - /*0x30*/ { L1_08, L2_BLANK, L3_BLANK, L4_BLANK, M }, - /*0x31*/ { L1_18, L2_BLANK, L3_BLANK, L4_BLANK, M }, - /*0x32*/ { L1_28, L2_BLANK, L3_BLANK, L4_BLANK, M }, - /*0x33*/ { L1_38, L2_BLANK, L3_BLANK, L4_BLANK, M }, - /*0x34*/ { L1_48, L2_BLANK, L3_BLANK, L4_BLANK, M }, - /*0x35*/ { L1_58, L2_BLANK, L3_BLANK, L4_BLANK, M }, - /*0x36*/ { L1_68, L2_BLANK, L3_BLANK, L4_BLANK, M }, - /*0x37*/ { L1_78, L2_BLANK, L3_BLANK, L4_BLANK, M }, - /*0x38*/ { L1_88, L2_BLANK, L3_BLANK, L4_BLANK, M }, - /*0x39*/ { L1_98, L2_BLANK, L3_BLANK, L4_BLANK, M }, - /*0x3A*/ { IGNORE, IGNORE, L3_COLON, IGNORE, M }, - /*0x3B*/ { IGNORE, IGNORE, L3_SEMICOLON, IGNORE, M }, - /*0x3C*/ { IGNORE, IGNORE, L3_LESS_THAN, IGNORE, M }, - /*0x3D*/ { IGNORE, IGNORE, L3_EQUAL, IGNORE, M }, - /*0x3E*/ { IGNORE, IGNORE, L3_GREATER_THAN, IGNORE, M }, - /*0x3F*/ { IGNORE, IGNORE, L3_QUESTION, IGNORE, M }, - /*0x40*/ { IGNORE, IGNORE, L3_AT, IGNORE, M }, - /*0x41*/ { L1_A8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x42*/ { L1_B8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x43*/ { L1_C8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x44*/ { L1_D8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x45*/ { L1_E8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x46*/ { L1_F8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x47*/ { L1_G8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x48*/ { L1_H8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x49*/ { L1_I8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x4A*/ { L1_J8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x4B*/ { L1_K8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x4C*/ { L1_L8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x4D*/ { L1_M8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x4E*/ { L1_N8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x4F*/ { L1_O8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x50*/ { L1_P8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x51*/ { L1_Q8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x52*/ { L1_R8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x53*/ { L1_S8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x54*/ { L1_T8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x55*/ { L1_U8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x56*/ { L1_V8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x57*/ { L1_W8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x58*/ { L1_X8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x59*/ { L1_Y8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x5A*/ { L1_Z8, L2_BLANK, L3_BLANK, L4_CAP, M }, - /*0x5B*/ { IGNORE, IGNORE, L3_L_BRACKET, IGNORE, M }, - /*0x5C*/ { IGNORE, IGNORE, L3_BK_SOLIDUS, IGNORE, M }, - /*0x5D*/ { IGNORE, IGNORE, L3_R_BRACKET, IGNORE, M }, - /*0x5E*/ { IGNORE, IGNORE, L3_CIRCUMFLEX, IGNORE, M }, - /*0x5F*/ { IGNORE, IGNORE, L3_LOW_LINE, IGNORE, M }, - /*0x60*/ { IGNORE, IGNORE, L3_GRAVE, IGNORE, M }, - /*0x61*/ { L1_A8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x62*/ { L1_B8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x63*/ { L1_C8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x64*/ { L1_D8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x65*/ { L1_E8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x66*/ { L1_F8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x67*/ { L1_G8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x68*/ { L1_H8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x69*/ { L1_I8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x6A*/ { L1_J8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x6B*/ { L1_K8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x6C*/ { L1_L8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x6D*/ { L1_M8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x6E*/ { L1_N8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x6F*/ { L1_O8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x70*/ { L1_P8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x71*/ { L1_Q8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x72*/ { L1_R8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x73*/ { L1_S8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x74*/ { L1_T8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x75*/ { L1_U8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x76*/ { L1_V8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x77*/ { L1_W8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x78*/ { L1_X8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x79*/ { L1_Y8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x7A*/ { L1_Z8, L2_BLANK, L3_BLANK, L4_MIN, M }, - /*0x7B*/ { IGNORE, IGNORE, L3_L_BRACE, IGNORE, M }, - /*0x7C*/ { IGNORE, IGNORE, L3_V_LINE, IGNORE, M }, - /*0x7D*/ { IGNORE, IGNORE, L3_R_BRACE, IGNORE, M }, - /*0x7E*/ { IGNORE, IGNORE, L3_TILDE, IGNORE, M }, - /*0x7F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x80*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x81*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x82*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x83*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x84*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x85*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x86*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x87*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x88*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x89*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x8A*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x8B*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x8C*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x8D*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x8E*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x8F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x90*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x91*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x92*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x93*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x94*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x95*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x96*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x97*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x98*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x99*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x9A*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x9B*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x9C*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x9D*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x9E*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0x9F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0xA0*/ { IGNORE, IGNORE, L3_NB_SACE, IGNORE, X }, - /*0xA1*/ { L1_KO_KAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xA2*/ { L1_KHO_KHAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xA3*/ { L1_KHO_KHUAT, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xA4*/ { L1_KHO_KHWAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xA5*/ { L1_KHO_KHON, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xA6*/ { L1_KHO_RAKHANG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xA7*/ { L1_NGO_NGU, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xA8*/ { L1_CHO_CHAN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xA9*/ { L1_CHO_CHING, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xAA*/ { L1_CHO_CHANG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xAB*/ { L1_SO_SO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xAC*/ { L1_CHO_CHOE, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xAD*/ { L1_YO_YING, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xAE*/ { L1_DO_CHADA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xAF*/ { L1_TO_PATAK, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xB0*/ { L1_THO_THAN, L2_BLANK,L3_BLANK, L4_BLANK, M | _consnt}, - /*0xB1*/ { L1_THO_NANGMONTHO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xB2*/ { L1_THO_PHUTHAO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xB3*/ { L1_NO_NEN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xB4*/ { L1_DO_DEK, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xB5*/ { L1_TO_TAO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xB6*/ { L1_THO_THUNG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xB7*/ { L1_THO_THAHAN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xB8*/ { L1_THO_THONG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xB9*/ { L1_NO_NU, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xBA*/ { L1_BO_BAIMAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xBB*/ { L1_PO_PLA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xBC*/ { L1_PHO_PHUNG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xBD*/ { L1_FO_FA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xBE*/ { L1_PHO_PHAN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xBF*/ { L1_FO_FAN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xC0*/ { L1_PHO_SAMPHAO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xC1*/ { L1_MO_MA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xC2*/ { L1_YO_YAK, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xC3*/ { L1_RO_RUA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xC4*/ { L1_RU, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xC5*/ { L1_LO_LING, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xC6*/ { L1_LU, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xC7*/ { L1_WO_WAEN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xC8*/ { L1_SO_SALA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xC9*/ { L1_SO_RUSI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xCA*/ { L1_SO_SUA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xCB*/ { L1_HO_HIP, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xCC*/ { L1_LO_CHULA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xCD*/ { L1_O_ANG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xCE*/ { L1_HO_NOKHUK, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt}, - /*0xCF*/ { IGNORE, IGNORE, L3_PAIYAN_NOI, IGNORE, M}, - /*0xD0*/ { L1_SARA_A, L2_BLANK, L3_BLANK, L4_BLANK, M | _fllwvowel}, - /*0xD1*/ { L1_MAI_HAN_AKAT, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel}, - /*0xD2*/ { L1_SARA_AA, L2_BLANK, L3_BLANK, L4_BLANK, M | _fllwvowel}, - /*0xD3*/ { L1_SARA_AM, L2_BLANK, L3_BLANK, L4_BLANK, M | _fllwvowel}, - /*0xD4*/ { L1_SARA_I, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel}, - /*0xD5*/ { L1_SARA_II, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel}, - /*0xD6*/ { L1_SARA_UE, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel}, - /*0xD7*/ { L1_SARA_UEE, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel}, - /*0xD8*/ { L1_SARA_U, L2_BLANK, L3_BLANK, L4_BLANK, L | _lwrvowel}, - /*0xD9*/ { L1_SARA_UU, L2_BLANK, L3_BLANK, L4_BLANK, L | _lwrvowel}, - /*0xDA*/ { IGNORE, L2_PINTHU, L3_BLANK, L4_BLANK, L }, - /*0xDB*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0xDC*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0xDD*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0xDE*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0xDF*/ { IGNORE, IGNORE, L3_BAHT, IGNORE, M}, - /*0xE0*/ { L1_SARA_E, L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel }, - /*0xE1*/ { L1_SARA_AE, L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel }, - /*0xE2*/ { L1_SARA_O, L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel }, - /*0xE3*/ { L1_SARA_AI_MAIMUAN, L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel }, - /*0xE4*/ { L1_SARA_AI_MAIMALAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel }, - /*0xE5*/ { L1_SARA_AA, L2_BLANK, L3_BLANK, L4_EXT, M | _fllwvowel }, - /*0xE6*/ { IGNORE, IGNORE, L3_MAI_YAMOK, IGNORE, M | _stone }, - /*0xE7*/ { IGNORE, L2_TYKHU, L3_BLANK, L4_BLANK, U | _diacrt1 | _stone }, - /*0xE8*/ { IGNORE, L2_TONE1, L3_BLANK, L4_BLANK, UU | _tone | _combine | _stone }, - /*0xE9*/ { IGNORE, L2_TONE2, L3_BLANK, L4_BLANK, UU | _tone | _combine | _stone }, - /*0xEA*/ { IGNORE, L2_TONE3, L3_BLANK, L4_BLANK, UU | _tone | _combine | _stone }, - /*0xEB*/ { IGNORE, L2_TONE4, L3_BLANK, L4_BLANK, UU | _tone | _combine | _stone }, - /*0xEC*/ { IGNORE, L2_GARAN, L3_BLANK, L4_BLANK, UU | _diacrt2 | _combine | _stone }, - /*0xED*/ { L1_NKHIT, L2_BLANK, L3_BLANK, L4_BLANK, U | _diacrt1 }, - /*0xEE*/ { IGNORE, L2_YAMAK, L3_BLANK, L4_BLANK, U | _diacrt1 }, - /*0xEF*/ { IGNORE, IGNORE, L3_FONGMAN, IGNORE, M }, - /*0xF0*/ { L1_08, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig }, - /*0xF1*/ { L1_18, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig }, - /*0xF2*/ { L1_28, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig }, - /*0xF3*/ { L1_38, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig }, - /*0xF4*/ { L1_48, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig }, - /*0xF5*/ { L1_58, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig }, - /*0xF6*/ { L1_68, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig }, - /*0xF7*/ { L1_78, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig }, - /*0xF8*/ { L1_88, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig }, - /*0xF9*/ { L1_98, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig }, - /*0xFA*/ { IGNORE, IGNORE, L3_ANGKHANKHU, IGNORE, X }, - /*0xFB*/ { IGNORE, IGNORE, L3_KHOMUT, IGNORE, X }, - /*0xFC*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0xFD*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /*0xFE*/ { IGNORE, IGNORE, IGNORE, IGNORE, X }, - /* Utilize 0xFF for max_sort_chr in my_like_range_tis620 */ - /*0xFF*/ { 255 /*IGNORE*/, IGNORE, IGNORE, IGNORE, X }, -}; - -static uchar ctype_tis620[257] = -{ - 0, /* For standard library */ - 32,32,32,32,32,32,32,32,32,40,40,40,40,40,32,32, - 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, - 72,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, - 132,132,132,132,132,132,132,132,132,132,16,16,16,16,16,16, - 16,129,129,129,129,129,129,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,16,16,16,16,16, - 16,130,130,130,130,130,130,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,16,16,16,16,32, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -static uchar to_lower_tis620[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '[', '\\', ']', '^', '_', - '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '{', '|', '}', '~', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - -static uchar to_upper_tis620[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', - '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '{', '|', '}', '~', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - -static uchar sort_order_tis620[]= -{ - '\000','\001','\002','\003','\004','\005','\006','\007', - '\010','\011','\012','\013','\014','\015','\016','\017', - '\020','\021','\022','\023','\024','\025','\026','\027', - '\030','\031','\032','\033','\034','\035','\036','\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '\\', ']', '[', '^', '_', - 'E', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '{', '|', '}', 'Y', '\177', - (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207', - (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217', - (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227', - (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237', - (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247', - (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257', - (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267', - (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277', - (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307', - (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317', - (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327', - (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337', - (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347', - (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357', - (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367', - (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', -}; - - -/* - Convert thai string to "Standard C String Function" sortable string - - SYNOPSIS - thai2sortable() - tstr String to convert. Does not have to end with \0 - len Length of tstr -*/ - -static size_t thai2sortable(uchar *tstr, size_t len) -{ - uchar *p; - int tlen; - uchar l2bias; - - tlen= len; - l2bias= 256 - 8; - for (p= tstr; tlen > 0; p++, tlen--) - { - uchar c= *p; - - if (isthai(c)) - { - int *t_ctype0= t_ctype[c]; - - if (isconsnt(c)) - l2bias -= 8; - if (isldvowel(c) && tlen != 1 && isconsnt(p[1])) - { - /* simply swap between leading-vowel and consonant */ - *p= p[1]; - p[1]= c; - tlen--; - p++; - continue; - } - - /* if found level 2 char (L2_GARAN,L2_TONE*,L2_TYKHU) move to last */ - if (t_ctype0[1] >= L2_GARAN) - { - /* - l2bias use to control position weight of l2char - example (*=l2char) XX*X must come before X*XX - */ - memmove((char*) p, (char*) (p+1), tlen-1); - tstr[len-1]= l2bias + t_ctype0[1]- L2_GARAN +1; - p--; - continue; - } - } - else - { - l2bias-= 8; - *p= to_lower_tis620[c]; - } - } - return len; -} - - -/* - strncoll() replacement, compare 2 string, both are converted to sortable - string - - NOTE: - We can't cut strings at end \0 as this would break comparision with - LIKE characters, where the min range is stored as end \0 - - Arg: 2 Strings and it compare length - Ret: strcmp result -*/ - -static -int my_strnncoll_tis620(CHARSET_INFO *cs __attribute__((unused)), - const uchar *s1, size_t len1, - const uchar *s2, size_t len2, - my_bool s2_is_prefix) -{ - uchar buf[80] ; - uchar *tc1, *tc2; - int i; - - if (s2_is_prefix && len1 > len2) - len1= len2; - - tc1= buf; - if ((len1 + len2 +2) > (int) sizeof(buf)) - tc1= (uchar*) my_str_malloc(len1+len2+2); - tc2= tc1 + len1+1; - memcpy((char*) tc1, (char*) s1, len1); - tc1[len1]= 0; /* if length(s1)> len1, need to put 'end of string' */ - memcpy((char *)tc2, (char *)s2, len2); - tc2[len2]= 0; /* put end of string */ - thai2sortable(tc1, len1); - thai2sortable(tc2, len2); - i= strcmp((char*)tc1, (char*)tc2); - if (tc1 != buf) - my_str_free(tc1); - return i; -} - - -static -int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)), - const uchar *a0, size_t a_length, - const uchar *b0, size_t b_length, - my_bool diff_if_only_endspace_difference) -{ - uchar buf[80], *end, *a, *b, *alloced= NULL; - size_t length; - int res= 0; - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= 0; -#endif - - a= buf; - if ((a_length + b_length +2) > (int) sizeof(buf)) - alloced= a= (uchar*) my_str_malloc(a_length+b_length+2); - - b= a + a_length+1; - memcpy((char*) a, (char*) a0, a_length); - a[a_length]= 0; /* if length(a0)> len1, need to put 'end of string' */ - memcpy((char *)b, (char *)b0, b_length); - b[b_length]= 0; /* put end of string */ - a_length= thai2sortable(a, a_length); - b_length= thai2sortable(b, b_length); - - end= a + (length= min(a_length, b_length)); - while (a < end) - { - if (*a++ != *b++) - { - res= ((int) a[-1] - (int) b[-1]); - goto ret; - } - } - if (a_length != b_length) - { - int swap= 1; - if (diff_if_only_endspace_difference) - res= 1; /* Assume 'a' is bigger */ - /* - Check the next not space character of the longer key. If it's < ' ', - then it's smaller than the other key. - */ - if (a_length < b_length) - { - /* put shorter key in s */ - a_length= b_length; - a= b; - swap= -1; /* swap sign of result */ - res= -res; - } - for (end= a + a_length-length; a < end ; a++) - { - if (*a != ' ') - { - res= (*a < ' ') ? -swap : swap; - goto ret; - } - } - } - -ret: - - if (alloced) - my_str_free(alloced); - return res; -} - - -/* - strnxfrm replacment, convert Thai string to sortable string - - Arg: Destination buffer, source string, dest length and source length - Ret: Conveted string size -*/ - -static -size_t my_strnxfrm_tis620(CHARSET_INFO *cs __attribute__((unused)), - uchar *dest, size_t len, - const uchar *src, size_t srclen) -{ - size_t dstlen= len; - len= (size_t) (strmake((char*) dest, (char*) src, min(len, srclen)) - - (char*) dest); - len= thai2sortable(dest, len); - if (dstlen > len) - bfill(dest + len, dstlen - len, ' '); - return dstlen; -} - - -static unsigned short cs_to_uni[256]={ -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0xFFFD,0x0E01,0x0E02,0x0E03,0x0E04,0x0E05,0x0E06,0x0E07, -0x0E08,0x0E09,0x0E0A,0x0E0B,0x0E0C,0x0E0D,0x0E0E,0x0E0F, -0x0E10,0x0E11,0x0E12,0x0E13,0x0E14,0x0E15,0x0E16,0x0E17, -0x0E18,0x0E19,0x0E1A,0x0E1B,0x0E1C,0x0E1D,0x0E1E,0x0E1F, -0x0E20,0x0E21,0x0E22,0x0E23,0x0E24,0x0E25,0x0E26,0x0E27, -0x0E28,0x0E29,0x0E2A,0x0E2B,0x0E2C,0x0E2D,0x0E2E,0x0E2F, -0x0E30,0x0E31,0x0E32,0x0E33,0x0E34,0x0E35,0x0E36,0x0E37, -0x0E38,0x0E39,0x0E3A,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0x0E3F, -0x0E40,0x0E41,0x0E42,0x0E43,0x0E44,0x0E45,0x0E46,0x0E47, -0x0E48,0x0E49,0x0E4A,0x0E4B,0x0E4C,0x0E4D,0x0E4E,0x0E4F, -0x0E50,0x0E51,0x0E52,0x0E53,0x0E54,0x0E55,0x0E56,0x0E57, -0x0E58,0x0E59,0x0E5A,0x0E5B,0xFFFD,0xFFFD,0xFFFD,0xFFFD -}; -static uchar pl00[256]={ -0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 -}; -static uchar pl0E[256]={ -0x0000,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, -0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, -0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, -0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, -0x00D8,0x00D9,0x00DA,0x0000,0x0000,0x0000,0x0000,0x00DF, -0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, -0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, -0x00F8,0x00F9,0x00FA,0x00FB,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 -}; -static uchar plFF[256]={ -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000,0x00FF,0x0000,0x0000 -}; -static uchar *uni_to_cs[256]={ -pl00,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,pl0E,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL,NULL,NULL,plFF -}; - - -static -int my_mb_wc_tis620(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t *wc, - const uchar *str, - const uchar *end __attribute__((unused))) -{ - if (str >= end) - return MY_CS_TOOSMALL; - - *wc=cs_to_uni[*str]; - return (!wc[0] && str[0]) ? -1 : 1; -} - -static -int my_wc_mb_tis620(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, - uchar *str, - uchar *end __attribute__((unused))) -{ - uchar *pl; - - if (str >= end) - return MY_CS_TOOSMALL; - - pl= uni_to_cs[(wc>>8) & 0xFF]; - str[0]= pl ? pl[wc & 0xFF] : '\0'; - return (!str[0] && wc) ? MY_CS_ILUNI : 1; -} - - -static MY_COLLATION_HANDLER my_collation_ci_handler = -{ - NULL, /* init */ - my_strnncoll_tis620, - my_strnncollsp_tis620, - my_strnxfrm_tis620, - my_strnxfrmlen_simple, - my_like_range_simple, - my_wildcmp_8bit, /* wildcmp */ - my_strcasecmp_8bit, - my_instr_simple, /* QQ: To be fixed */ - my_hash_sort_simple, - my_propagate_simple -}; - -static MY_CHARSET_HANDLER my_charset_handler= -{ - NULL, /* init */ - NULL, /* ismbchar */ - my_mbcharlen_8bit, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_well_formed_len_8bit, - my_lengthsp_8bit, - my_numcells_8bit, - my_mb_wc_tis620, /* mb_wc */ - my_wc_mb_tis620, /* wc_mb */ - my_mb_ctype_8bit, - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_strtoll10_8bit, - my_strntoull10rnd_8bit, - my_scan_8bit -}; - - - -CHARSET_INFO my_charset_tis620_thai_ci= -{ - 18,0,0, /* number */ - MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ - "tis620", /* cs name */ - "tis620_thai_ci", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_tis620, - to_lower_tis620, - to_upper_tis620, - sort_order_tis620, - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 4, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_handler, - &my_collation_ci_handler -}; - -CHARSET_INFO my_charset_tis620_bin= -{ - 89,0,0, /* number */ - MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "tis620", /* cs name */ - "tis620_bin", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_tis620, - to_lower_tis620, - to_upper_tis620, - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_handler, - &my_collation_8bit_bin_handler -}; - - -#endif diff --git a/deps/mysqllite/strings/ctype-uca.c b/deps/mysqllite/strings/ctype-uca.c deleted file mode 100644 index 2f7bf030d9034d..00000000000000 --- a/deps/mysqllite/strings/ctype-uca.c +++ /dev/null @@ -1,11462 +0,0 @@ -/* Copyright (C) 2004 MySQL AB - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; version 2 - of the License. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -/* - UCA (Unicode Collation Algorithm) support. - Written by Alexander Barkov - - Currently supports only subset of the full UCA: - - Only Primary level key comparison - - Basic Latin letters contraction is implemented - - Variable weighting is done for Non-ignorable option - - Features that are not implemented yet: - - No Normalization From D is done - + No decomposition is done - + No Thai/Lao orderding is done - - No combining marks processing is done -*/ - - -#include -#include "m_string.h" -#include "m_ctype.h" - -#ifdef HAVE_UCA_COLLATIONS - -#define MY_UCA_NPAGES 256 -#define MY_UCA_NCHARS 256 -#define MY_UCA_CMASK 255 -#define MY_UCA_PSHIFT 8 - -uint16 page000data[]= { /* 0000 (4 weights per char) */ -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0201,0x0000,0x0000,0x0000, -0x0202,0x0000,0x0000,0x0000, 0x0203,0x0000,0x0000,0x0000, -0x0204,0x0000,0x0000,0x0000, 0x0205,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0209,0x0000,0x0000,0x0000, 0x0251,0x0000,0x0000,0x0000, -0x027E,0x0000,0x0000,0x0000, 0x02D2,0x0000,0x0000,0x0000, -0x0E0F,0x0000,0x0000,0x0000, 0x02D3,0x0000,0x0000,0x0000, -0x02CF,0x0000,0x0000,0x0000, 0x0277,0x0000,0x0000,0x0000, -0x0288,0x0000,0x0000,0x0000, 0x0289,0x0000,0x0000,0x0000, -0x02C8,0x0000,0x0000,0x0000, 0x0428,0x0000,0x0000,0x0000, -0x022F,0x0000,0x0000,0x0000, 0x0221,0x0000,0x0000,0x0000, -0x025D,0x0000,0x0000,0x0000, 0x02CC,0x0000,0x0000,0x0000, -0x0E29,0x0000,0x0000,0x0000, 0x0E2A,0x0000,0x0000,0x0000, -0x0E2B,0x0000,0x0000,0x0000, 0x0E2C,0x0000,0x0000,0x0000, -0x0E2D,0x0000,0x0000,0x0000, 0x0E2E,0x0000,0x0000,0x0000, -0x0E2F,0x0000,0x0000,0x0000, 0x0E30,0x0000,0x0000,0x0000, -0x0E31,0x0000,0x0000,0x0000, 0x0E32,0x0000,0x0000,0x0000, -0x023D,0x0000,0x0000,0x0000, 0x023A,0x0000,0x0000,0x0000, -0x042C,0x0000,0x0000,0x0000, 0x042D,0x0000,0x0000,0x0000, -0x042E,0x0000,0x0000,0x0000, 0x0255,0x0000,0x0000,0x0000, -0x02C7,0x0000,0x0000,0x0000, 0x0E33,0x0000,0x0000,0x0000, -0x0E4A,0x0000,0x0000,0x0000, 0x0E60,0x0000,0x0000,0x0000, -0x0E6D,0x0000,0x0000,0x0000, 0x0E8B,0x0000,0x0000,0x0000, -0x0EB9,0x0000,0x0000,0x0000, 0x0EC1,0x0000,0x0000,0x0000, -0x0EE1,0x0000,0x0000,0x0000, 0x0EFB,0x0000,0x0000,0x0000, -0x0F10,0x0000,0x0000,0x0000, 0x0F21,0x0000,0x0000,0x0000, -0x0F2E,0x0000,0x0000,0x0000, 0x0F5B,0x0000,0x0000,0x0000, -0x0F64,0x0000,0x0000,0x0000, 0x0F82,0x0000,0x0000,0x0000, -0x0FA7,0x0000,0x0000,0x0000, 0x0FB4,0x0000,0x0000,0x0000, -0x0FC0,0x0000,0x0000,0x0000, 0x0FEA,0x0000,0x0000,0x0000, -0x1002,0x0000,0x0000,0x0000, 0x101F,0x0000,0x0000,0x0000, -0x1044,0x0000,0x0000,0x0000, 0x1051,0x0000,0x0000,0x0000, -0x105A,0x0000,0x0000,0x0000, 0x105E,0x0000,0x0000,0x0000, -0x106A,0x0000,0x0000,0x0000, 0x028A,0x0000,0x0000,0x0000, -0x02CE,0x0000,0x0000,0x0000, 0x028B,0x0000,0x0000,0x0000, -0x020F,0x0000,0x0000,0x0000, 0x021B,0x0000,0x0000,0x0000, -0x020C,0x0000,0x0000,0x0000, 0x0E33,0x0000,0x0000,0x0000, -0x0E4A,0x0000,0x0000,0x0000, 0x0E60,0x0000,0x0000,0x0000, -0x0E6D,0x0000,0x0000,0x0000, 0x0E8B,0x0000,0x0000,0x0000, -0x0EB9,0x0000,0x0000,0x0000, 0x0EC1,0x0000,0x0000,0x0000, -0x0EE1,0x0000,0x0000,0x0000, 0x0EFB,0x0000,0x0000,0x0000, -0x0F10,0x0000,0x0000,0x0000, 0x0F21,0x0000,0x0000,0x0000, -0x0F2E,0x0000,0x0000,0x0000, 0x0F5B,0x0000,0x0000,0x0000, -0x0F64,0x0000,0x0000,0x0000, 0x0F82,0x0000,0x0000,0x0000, -0x0FA7,0x0000,0x0000,0x0000, 0x0FB4,0x0000,0x0000,0x0000, -0x0FC0,0x0000,0x0000,0x0000, 0x0FEA,0x0000,0x0000,0x0000, -0x1002,0x0000,0x0000,0x0000, 0x101F,0x0000,0x0000,0x0000, -0x1044,0x0000,0x0000,0x0000, 0x1051,0x0000,0x0000,0x0000, -0x105A,0x0000,0x0000,0x0000, 0x105E,0x0000,0x0000,0x0000, -0x106A,0x0000,0x0000,0x0000, 0x028C,0x0000,0x0000,0x0000, -0x0430,0x0000,0x0000,0x0000, 0x028D,0x0000,0x0000,0x0000, -0x0433,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0206,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0209,0x0000,0x0000,0x0000, 0x0252,0x0000,0x0000,0x0000, -0x0E0E,0x0000,0x0000,0x0000, 0x0E10,0x0000,0x0000,0x0000, -0x0E0D,0x0000,0x0000,0x0000, 0x0E11,0x0000,0x0000,0x0000, -0x0431,0x0000,0x0000,0x0000, 0x02C2,0x0000,0x0000,0x0000, -0x0214,0x0000,0x0000,0x0000, 0x02C5,0x0000,0x0000,0x0000, -0x0E33,0x0000,0x0000,0x0000, 0x0286,0x0000,0x0000,0x0000, -0x042F,0x0000,0x0000,0x0000, 0x0220,0x0000,0x0000,0x0000, -0x02C6,0x0000,0x0000,0x0000, 0x0210,0x0000,0x0000,0x0000, -0x034A,0x0000,0x0000,0x0000, 0x0429,0x0000,0x0000,0x0000, -0x0E2B,0x0000,0x0000,0x0000, 0x0E2C,0x0000,0x0000,0x0000, -0x020D,0x0000,0x0000,0x0000, 0x10F8,0x0000,0x0000,0x0000, -0x02C3,0x0000,0x0000,0x0000, 0x0267,0x0000,0x0000,0x0000, -0x0219,0x0000,0x0000,0x0000, 0x0E2A,0x0000,0x0000,0x0000, -0x0F82,0x0000,0x0000,0x0000, 0x0287,0x0000,0x0000,0x0000, -0x0E2A,0x02CD,0x0E2D,0x0000, 0x0E2A,0x02CD,0x0E2B,0x0000, -0x0E2C,0x02CD,0x0E2D,0x0000, 0x0256,0x0000,0x0000,0x0000, -0x0E33,0x0000,0x0000,0x0000, 0x0E33,0x0000,0x0000,0x0000, -0x0E33,0x0000,0x0000,0x0000, 0x0E33,0x0000,0x0000,0x0000, -0x0E33,0x0000,0x0000,0x0000, 0x0E33,0x0000,0x0000,0x0000, -0x0E38,0x0000,0x0000,0x0000, 0x0E60,0x0000,0x0000,0x0000, -0x0E8B,0x0000,0x0000,0x0000, 0x0E8B,0x0000,0x0000,0x0000, -0x0E8B,0x0000,0x0000,0x0000, 0x0E8B,0x0000,0x0000,0x0000, -0x0EFB,0x0000,0x0000,0x0000, 0x0EFB,0x0000,0x0000,0x0000, -0x0EFB,0x0000,0x0000,0x0000, 0x0EFB,0x0000,0x0000,0x0000, -0x0E86,0x0000,0x0000,0x0000, 0x0F64,0x0000,0x0000,0x0000, -0x0F82,0x0000,0x0000,0x0000, 0x0F82,0x0000,0x0000,0x0000, -0x0F82,0x0000,0x0000,0x0000, 0x0F82,0x0000,0x0000,0x0000, -0x0F82,0x0000,0x0000,0x0000, 0x042B,0x0000,0x0000,0x0000, -0x0F8D,0x0000,0x0000,0x0000, 0x101F,0x0000,0x0000,0x0000, -0x101F,0x0000,0x0000,0x0000, 0x101F,0x0000,0x0000,0x0000, -0x101F,0x0000,0x0000,0x0000, 0x105E,0x0000,0x0000,0x0000, -0x1094,0x0000,0x0000,0x0000, 0x0FEA,0x0FEA,0x0000,0x0000, -0x0E33,0x0000,0x0000,0x0000, 0x0E33,0x0000,0x0000,0x0000, -0x0E33,0x0000,0x0000,0x0000, 0x0E33,0x0000,0x0000,0x0000, -0x0E33,0x0000,0x0000,0x0000, 0x0E33,0x0000,0x0000,0x0000, -0x0E38,0x0000,0x0000,0x0000, 0x0E60,0x0000,0x0000,0x0000, -0x0E8B,0x0000,0x0000,0x0000, 0x0E8B,0x0000,0x0000,0x0000, -0x0E8B,0x0000,0x0000,0x0000, 0x0E8B,0x0000,0x0000,0x0000, -0x0EFB,0x0000,0x0000,0x0000, 0x0EFB,0x0000,0x0000,0x0000, -0x0EFB,0x0000,0x0000,0x0000, 0x0EFB,0x0000,0x0000,0x0000, -0x0E86,0x0000,0x0000,0x0000, 0x0F64,0x0000,0x0000,0x0000, -0x0F82,0x0000,0x0000,0x0000, 0x0F82,0x0000,0x0000,0x0000, -0x0F82,0x0000,0x0000,0x0000, 0x0F82,0x0000,0x0000,0x0000, -0x0F82,0x0000,0x0000,0x0000, 0x042A,0x0000,0x0000,0x0000, -0x0F8D,0x0000,0x0000,0x0000, 0x101F,0x0000,0x0000,0x0000, -0x101F,0x0000,0x0000,0x0000, 0x101F,0x0000,0x0000,0x0000, -0x101F,0x0000,0x0000,0x0000, 0x105E,0x0000,0x0000,0x0000, -0x1094,0x0000,0x0000,0x0000, 0x105E,0x0000,0x0000,0x0000 -}; - -uint16 page001data[]= { /* 0100 (3 weights per char) */ -0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E60,0x0000,0x0000, 0x0E60,0x0000,0x0000, 0x0E60,0x0000,0x0000, -0x0E60,0x0000,0x0000, 0x0E60,0x0000,0x0000, 0x0E60,0x0000,0x0000, -0x0E60,0x0000,0x0000, 0x0E60,0x0000,0x0000, 0x0E6D,0x0000,0x0000, -0x0E6D,0x0000,0x0000, 0x0E72,0x0000,0x0000, 0x0E72,0x0000,0x0000, -0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, -0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, -0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, -0x0E8B,0x0000,0x0000, 0x0EC1,0x0000,0x0000, 0x0EC1,0x0000,0x0000, -0x0EC1,0x0000,0x0000, 0x0EC1,0x0000,0x0000, 0x0EC1,0x0000,0x0000, -0x0EC1,0x0000,0x0000, 0x0EC1,0x0000,0x0000, 0x0EC1,0x0000,0x0000, -0x0EE1,0x0000,0x0000, 0x0EE1,0x0000,0x0000, 0x0EED,0x0000,0x0000, -0x0EED,0x0000,0x0000, 0x0EFB,0x0000,0x0000, 0x0EFB,0x0000,0x0000, -0x0EFB,0x0000,0x0000, 0x0EFB,0x0000,0x0000, 0x0EFB,0x0000,0x0000, -0x0EFB,0x0000,0x0000, 0x0EFB,0x0000,0x0000, 0x0EFB,0x0000,0x0000, -0x0EFB,0x0000,0x0000, 0x0EFF,0x0000,0x0000, 0x0EFB,0x0F10,0x0000, -0x0EFB,0x0F10,0x0000, 0x0F10,0x0000,0x0000, 0x0F10,0x0000,0x0000, -0x0F21,0x0000,0x0000, 0x0F21,0x0000,0x0000, 0x0FBC,0x0000,0x0000, -0x0F2E,0x0000,0x0000, 0x0F2E,0x0000,0x0000, 0x0F2E,0x0000,0x0000, -0x0F2E,0x0000,0x0000, 0x0F2E,0x0000,0x0000, 0x0F2E,0x0000,0x0000, -0x0F2E,0x0267,0x0000, 0x0F2E,0x0267,0x0000, 0x0F36,0x0000,0x0000, -0x0F36,0x0000,0x0000, 0x0F64,0x0000,0x0000, 0x0F64,0x0000,0x0000, -0x0F64,0x0000,0x0000, 0x0F64,0x0000,0x0000, 0x0F64,0x0000,0x0000, -0x0F64,0x0000,0x0000, 0x10B1,0x0F64,0x0000, 0x0F7E,0x0000,0x0000, -0x0F7E,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0E8B,0x0000, 0x0F82,0x0E8B,0x0000, -0x0FC0,0x0000,0x0000, 0x0FC0,0x0000,0x0000, 0x0FC0,0x0000,0x0000, -0x0FC0,0x0000,0x0000, 0x0FC0,0x0000,0x0000, 0x0FC0,0x0000,0x0000, -0x0FEA,0x0000,0x0000, 0x0FEA,0x0000,0x0000, 0x0FEA,0x0000,0x0000, -0x0FEA,0x0000,0x0000, 0x0FEA,0x0000,0x0000, 0x0FEA,0x0000,0x0000, -0x0FEA,0x0000,0x0000, 0x0FEA,0x0000,0x0000, 0x1002,0x0000,0x0000, -0x1002,0x0000,0x0000, 0x1002,0x0000,0x0000, 0x1002,0x0000,0x0000, -0x1007,0x0000,0x0000, 0x1007,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x1051,0x0000,0x0000, -0x1051,0x0000,0x0000, 0x105E,0x0000,0x0000, 0x105E,0x0000,0x0000, -0x105E,0x0000,0x0000, 0x106A,0x0000,0x0000, 0x106A,0x0000,0x0000, -0x106A,0x0000,0x0000, 0x106A,0x0000,0x0000, 0x106A,0x0000,0x0000, -0x106A,0x0000,0x0000, 0x0FEA,0x0000,0x0000, 0x0E52,0x0000,0x0000, -0x0E58,0x0000,0x0000, 0x0E5C,0x0000,0x0000, 0x0E5C,0x0000,0x0000, -0x10A8,0x0000,0x0000, 0x10A8,0x0000,0x0000, 0x0F92,0x0000,0x0000, -0x0E65,0x0000,0x0000, 0x0E65,0x0000,0x0000, 0x0E76,0x0000,0x0000, -0x0E7A,0x0000,0x0000, 0x0E7E,0x0000,0x0000, 0x0E7E,0x0000,0x0000, -0x106A,0x1051,0x0000, 0x0E90,0x0000,0x0000, 0x0E94,0x0000,0x0000, -0x0E98,0x0000,0x0000, 0x0EBD,0x0000,0x0000, 0x0EBD,0x0000,0x0000, -0x0ED1,0x0000,0x0000, 0x0ED9,0x0000,0x0000, 0x0EE9,0x0000,0x0000, -0x0F0C,0x0000,0x0000, 0x0F08,0x0000,0x0000, 0x0F26,0x0000,0x0000, -0x0F26,0x0000,0x0000, 0x0F3B,0x0000,0x0000, 0x0F53,0x0000,0x0000, -0x1037,0x0000,0x0000, 0x0F6E,0x0000,0x0000, 0x0F72,0x0000,0x0000, -0x0F9A,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0EDD,0x0000,0x0000, 0x0EDD,0x0000,0x0000, 0x0FAC,0x0000,0x0000, -0x0FAC,0x0000,0x0000, 0x0FC4,0x0000,0x0000, 0x10A0,0x0000,0x0000, -0x10A0,0x0000,0x0000, 0x0FF2,0x0000,0x0000, 0x0FF6,0x0000,0x0000, -0x100B,0x0000,0x0000, 0x100F,0x0000,0x0000, 0x100F,0x0000,0x0000, -0x1013,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x1040,0x0000,0x0000, 0x1049,0x0000,0x0000, 0x1066,0x0000,0x0000, -0x1066,0x0000,0x0000, 0x106F,0x0000,0x0000, 0x106F,0x0000,0x0000, -0x107F,0x0000,0x0000, 0x1084,0x0000,0x0000, 0x1084,0x0000,0x0000, -0x1088,0x0000,0x0000, 0x109C,0x0000,0x0000, 0x10A4,0x0000,0x0000, -0x10A4,0x0000,0x0000, 0x1002,0x0FEA,0x0000, 0x1098,0x0000,0x0000, -0x10C8,0x0000,0x0000, 0x10CC,0x0000,0x0000, 0x10D0,0x0000,0x0000, -0x10D4,0x0000,0x0000, 0x0E6D,0x106A,0x0000, 0x0E6D,0x106A,0x0000, -0x0E6D,0x106A,0x0000, 0x0F2E,0x0F10,0x0000, 0x0F2E,0x0F10,0x0000, -0x0F2E,0x0F10,0x0000, 0x0F64,0x0F10,0x0000, 0x0F64,0x0F10,0x0000, -0x0F64,0x0F10,0x0000, 0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0EFB,0x0000,0x0000, 0x0EFB,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x0E90,0x0000,0x0000, -0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E33,0x0000,0x0000, 0x0E38,0x0000,0x0000, 0x0E38,0x0000,0x0000, -0x0ECD,0x0000,0x0000, 0x0ECD,0x0000,0x0000, 0x0EC1,0x0000,0x0000, -0x0EC1,0x0000,0x0000, 0x0F21,0x0000,0x0000, 0x0F21,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x107F,0x0000,0x0000, 0x107F,0x0000,0x0000, -0x0F10,0x0000,0x0000, 0x0E6D,0x106A,0x0000, 0x0E6D,0x106A,0x0000, -0x0E6D,0x106A,0x0000, 0x0EC1,0x0000,0x0000, 0x0EC1,0x0000,0x0000, -0x0EE9,0x0000,0x0000, 0x1098,0x0000,0x0000, 0x0F64,0x0000,0x0000, -0x0F64,0x0000,0x0000, 0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E38,0x0000,0x0000, 0x0E38,0x0000,0x0000, 0x0F8D,0x0000,0x0000, -0x0F8D,0x0000,0x0000 }; - -uint16 page002data[]= { /* 0200 (3 weights per char) */ -0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E33,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, -0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0EFB,0x0000,0x0000, -0x0EFB,0x0000,0x0000, 0x0EFB,0x0000,0x0000, 0x0EFB,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0FC0,0x0000,0x0000, 0x0FC0,0x0000,0x0000, -0x0FC0,0x0000,0x0000, 0x0FC0,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x0FEA,0x0000,0x0000, 0x0FEA,0x0000,0x0000, 0x1002,0x0000,0x0000, -0x1002,0x0000,0x0000, 0x1090,0x0000,0x0000, 0x1090,0x0000,0x0000, -0x0EE1,0x0000,0x0000, 0x0EE1,0x0000,0x0000, 0x0F72,0x0000,0x0000, -0x0E82,0x0000,0x0000, 0x0FA2,0x0000,0x0000, 0x0FA2,0x0000,0x0000, -0x1073,0x0000,0x0000, 0x1073,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E33,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x105E,0x0000,0x0000, -0x105E,0x0000,0x0000, 0x0F4B,0x0000,0x0000, 0x0F7A,0x0000,0x0000, -0x1017,0x0000,0x0000, 0xFBC0,0x8237,0x0000, 0xFBC0,0x8238,0x0000, -0xFBC0,0x8239,0x0000, 0xFBC0,0x823A,0x0000, 0xFBC0,0x823B,0x0000, -0xFBC0,0x823C,0x0000, 0xFBC0,0x823D,0x0000, 0xFBC0,0x823E,0x0000, -0xFBC0,0x823F,0x0000, 0xFBC0,0x8240,0x0000, 0xFBC0,0x8241,0x0000, -0xFBC0,0x8242,0x0000, 0xFBC0,0x8243,0x0000, 0xFBC0,0x8244,0x0000, -0xFBC0,0x8245,0x0000, 0xFBC0,0x8246,0x0000, 0xFBC0,0x8247,0x0000, -0xFBC0,0x8248,0x0000, 0xFBC0,0x8249,0x0000, 0xFBC0,0x824A,0x0000, -0xFBC0,0x824B,0x0000, 0xFBC0,0x824C,0x0000, 0xFBC0,0x824D,0x0000, -0xFBC0,0x824E,0x0000, 0xFBC0,0x824F,0x0000, 0x0E3E,0x0000,0x0000, -0x0E42,0x0000,0x0000, 0x0E46,0x0000,0x0000, 0x0E58,0x0000,0x0000, -0x0F92,0x0000,0x0000, 0x0E69,0x0000,0x0000, 0x0E76,0x0000,0x0000, -0x0E7A,0x0000,0x0000, 0x0E9C,0x0000,0x0000, 0x0E94,0x0000,0x0000, -0x0EA0,0x0000,0x0000, 0x0E98,0x0000,0x0000, 0x0EA4,0x0000,0x0000, -0x0EA9,0x0000,0x0000, 0x0EAD,0x0000,0x0000, 0x0F19,0x0000,0x0000, -0x0ED1,0x0000,0x0000, 0x0EC5,0x0000,0x0000, 0x0EC9,0x0000,0x0000, -0x0ED9,0x0000,0x0000, 0x0EB5,0x0000,0x0000, 0x102B,0x0000,0x0000, -0x0EF1,0x0000,0x0000, 0x0EF5,0x0000,0x0000, 0x0F08,0x0000,0x0000, -0x0F0C,0x0000,0x0000, 0x0F03,0x0000,0x0000, 0x0F3F,0x0000,0x0000, -0x0F43,0x0000,0x0000, 0x0F47,0x0000,0x0000, 0x0F4F,0x0000,0x0000, -0x1037,0x0000,0x0000, 0x103C,0x0000,0x0000, 0x0F60,0x0000,0x0000, -0x0F6E,0x0000,0x0000, 0x0F76,0x0000,0x0000, 0x0F68,0x0000,0x0000, -0x0F9A,0x0000,0x0000, 0x0F88,0x0000,0x0000, 0x0F9E,0x0000,0x0000, -0x0FB0,0x0000,0x0000, 0x0FC9,0x0000,0x0000, 0x0FCE,0x0000,0x0000, -0x0FD2,0x0000,0x0000, 0x0FD6,0x0000,0x0000, 0x0FDA,0x0000,0x0000, -0x0FDE,0x0000,0x0000, 0x0FE2,0x0000,0x0000, 0x0FC4,0x0000,0x0000, -0x0FE6,0x0000,0x0000, 0x0FEE,0x0000,0x0000, 0x0FF2,0x0000,0x0000, -0x0F1D,0x0000,0x0000, 0x0FFA,0x0000,0x0000, 0x0FFE,0x0000,0x0000, -0x101B,0x0000,0x0000, 0x1013,0x0000,0x0000, 0x1027,0x0000,0x0000, -0x1040,0x0000,0x0000, 0x1049,0x0000,0x0000, 0x104D,0x0000,0x0000, -0x1056,0x0000,0x0000, 0x0F57,0x0000,0x0000, 0x1062,0x0000,0x0000, -0x1077,0x0000,0x0000, 0x107B,0x0000,0x0000, 0x107F,0x0000,0x0000, -0x108C,0x0000,0x0000, 0x10AC,0x0000,0x0000, 0x10B4,0x0000,0x0000, -0x10C4,0x0000,0x0000, 0x10D8,0x0000,0x0000, 0x10DC,0x0000,0x0000, -0x0E4E,0x0000,0x0000, 0x0EB1,0x0000,0x0000, 0x0ED5,0x0000,0x0000, -0x0EE5,0x0000,0x0000, 0x0F15,0x0000,0x0000, 0x0F2A,0x0000,0x0000, -0x0F32,0x0000,0x0000, 0x0FB8,0x0000,0x0000, 0x10BC,0x0000,0x0000, -0x10C0,0x0000,0x0000, 0x0E6D,0x106A,0x0000, 0x0E6D,0x107F,0x0000, -0x0E6D,0x107B,0x0000, 0x1002,0x0FEA,0x0000, 0x1002,0x0FF2,0x0000, -0x1002,0x0E69,0x0000, 0x0EB9,0x0F7E,0x0000, 0x0F2E,0x0FEA,0x0000, -0x0F2E,0x106A,0x0000, 0x10E0,0x0000,0x0000, 0x10E4,0x0000,0x0000, -0x102F,0x0000,0x0000, 0x1033,0x0000,0x0000, 0x0EE1,0x0000,0x0000, -0x0EF1,0x0000,0x0000, 0x0F10,0x0000,0x0000, 0x0FC0,0x0000,0x0000, -0x0FC9,0x0000,0x0000, 0x0FD2,0x0000,0x0000, 0x0FE6,0x0000,0x0000, -0x1051,0x0000,0x0000, 0x105E,0x0000,0x0000, 0x0317,0x0000,0x0000, -0x0319,0x0000,0x0000, 0x0EF9,0x0000,0x0000, 0x10B1,0x0000,0x0000, -0x0EFA,0x0000,0x0000, 0x10B3,0x0000,0x0000, 0x10B8,0x0000,0x0000, -0x10B0,0x0000,0x0000, 0x10B9,0x0000,0x0000, 0x031A,0x0000,0x0000, -0x031B,0x0000,0x0000, 0x031C,0x0000,0x0000, 0x031D,0x0000,0x0000, -0x031E,0x0000,0x0000, 0x031F,0x0000,0x0000, 0x0320,0x0000,0x0000, -0x0321,0x0000,0x0000, 0x0322,0x0000,0x0000, 0x0323,0x0000,0x0000, -0x0324,0x0000,0x0000, 0x0325,0x0000,0x0000, 0x0326,0x0000,0x0000, -0x0327,0x0000,0x0000, 0x0E01,0x0000,0x0000, 0x0E02,0x0000,0x0000, -0x0328,0x0000,0x0000, 0x0329,0x0000,0x0000, 0x032A,0x0000,0x0000, -0x032B,0x0000,0x0000, 0x032C,0x0000,0x0000, 0x032D,0x0000,0x0000, -0x0212,0x0000,0x0000, 0x0213,0x0000,0x0000, 0x0215,0x0000,0x0000, -0x021A,0x0000,0x0000, 0x020E,0x0000,0x0000, 0x0216,0x0000,0x0000, -0x032E,0x0000,0x0000, 0x032F,0x0000,0x0000, 0x0ED9,0x0000,0x0000, -0x0F2E,0x0000,0x0000, 0x0FEA,0x0000,0x0000, 0x105A,0x0000,0x0000, -0x10B4,0x0000,0x0000, 0x0330,0x0000,0x0000, 0x0331,0x0000,0x0000, -0x0332,0x0000,0x0000, 0x0333,0x0000,0x0000, 0x0334,0x0000,0x0000, -0x0335,0x0000,0x0000, 0x0336,0x0000,0x0000, 0x0337,0x0000,0x0000, -0x0338,0x0000,0x0000, 0x10B2,0x0000,0x0000, 0x0339,0x0000,0x0000, -0x033A,0x0000,0x0000, 0x033B,0x0000,0x0000, 0x033C,0x0000,0x0000, -0x033D,0x0000,0x0000, 0x033E,0x0000,0x0000, 0x033F,0x0000,0x0000, -0x0340,0x0000,0x0000, 0x0341,0x0000,0x0000, 0x0342,0x0000,0x0000, -0x0343,0x0000,0x0000, 0x0344,0x0000,0x0000, 0x0345,0x0000,0x0000, -0x0346,0x0000,0x0000, 0x0347,0x0000,0x0000, 0x0348,0x0000,0x0000, -0x0349,0x0000,0x0000 }; - -uint16 page003data[]= { /* 0300 (4 weights per char) */ -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0xFBC0,0x8358,0x0000,0x0000, 0xFBC0,0x8359,0x0000,0x0000, -0xFBC0,0x835A,0x0000,0x0000, 0xFBC0,0x835B,0x0000,0x0000, -0xFBC0,0x835C,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x0E33,0x0000,0x0000,0x0000, -0x0E8B,0x0000,0x0000,0x0000, 0x0EFB,0x0000,0x0000,0x0000, -0x0F82,0x0000,0x0000,0x0000, 0x101F,0x0000,0x0000,0x0000, -0x0E60,0x0000,0x0000,0x0000, 0x0E6D,0x0000,0x0000,0x0000, -0x0EE1,0x0000,0x0000,0x0000, 0x0F5B,0x0000,0x0000,0x0000, -0x0FC0,0x0000,0x0000,0x0000, 0x1002,0x0000,0x0000,0x0000, -0x1044,0x0000,0x0000,0x0000, 0x105A,0x0000,0x0000,0x0000, -0xFBC0,0x8370,0x0000,0x0000, 0xFBC0,0x8371,0x0000,0x0000, -0xFBC0,0x8372,0x0000,0x0000, 0xFBC0,0x8373,0x0000,0x0000, -0x0317,0x0000,0x0000,0x0000, 0x0318,0x0000,0x0000,0x0000, -0xFBC0,0x8376,0x0000,0x0000, 0xFBC0,0x8377,0x0000,0x0000, -0xFBC0,0x8378,0x0000,0x0000, 0xFBC0,0x8379,0x0000,0x0000, -0x10F3,0x0000,0x0000,0x0000, 0xFBC0,0x837B,0x0000,0x0000, -0xFBC0,0x837C,0x0000,0x0000, 0xFBC0,0x837D,0x0000,0x0000, -0x023A,0x0000,0x0000,0x0000, 0xFBC0,0x837F,0x0000,0x0000, -0xFBC0,0x8380,0x0000,0x0000, 0xFBC0,0x8381,0x0000,0x0000, -0xFBC0,0x8382,0x0000,0x0000, 0xFBC0,0x8383,0x0000,0x0000, -0x020D,0x0000,0x0000,0x0000, 0x0214,0x0000,0x0000,0x0000, -0x10E8,0x0000,0x0000,0x0000, 0x0267,0x0000,0x0000,0x0000, -0x10ED,0x0000,0x0000,0x0000, 0x10F1,0x0000,0x0000,0x0000, -0x10F3,0x0000,0x0000,0x0000, 0xFBC0,0x838B,0x0000,0x0000, -0x10FB,0x0000,0x0000,0x0000, 0xFBC0,0x838D,0x0000,0x0000, -0x1104,0x0000,0x0000,0x0000, 0x1109,0x0000,0x0000,0x0000, -0x10F3,0x0000,0x0000,0x0000, 0x10E8,0x0000,0x0000,0x0000, -0x10E9,0x0000,0x0000,0x0000, 0x10EA,0x0000,0x0000,0x0000, -0x10EC,0x0000,0x0000,0x0000, 0x10ED,0x0000,0x0000,0x0000, -0x10F0,0x0000,0x0000,0x0000, 0x10F1,0x0000,0x0000,0x0000, -0x10F2,0x0000,0x0000,0x0000, 0x10F3,0x0000,0x0000,0x0000, -0x10F5,0x0000,0x0000,0x0000, 0x10F6,0x0000,0x0000,0x0000, -0x10F8,0x0000,0x0000,0x0000, 0x10F9,0x0000,0x0000,0x0000, -0x10FA,0x0000,0x0000,0x0000, 0x10FB,0x0000,0x0000,0x0000, -0x10FC,0x0000,0x0000,0x0000, 0x1100,0x0000,0x0000,0x0000, -0xFBC0,0x83A2,0x0000,0x0000, 0x1102,0x0000,0x0000,0x0000, -0x1103,0x0000,0x0000,0x0000, 0x1104,0x0000,0x0000,0x0000, -0x1105,0x0000,0x0000,0x0000, 0x1106,0x0000,0x0000,0x0000, -0x1107,0x0000,0x0000,0x0000, 0x1109,0x0000,0x0000,0x0000, -0x10F3,0x0000,0x0000,0x0000, 0x1104,0x0000,0x0000,0x0000, -0x10E8,0x0000,0x0000,0x0000, 0x10ED,0x0000,0x0000,0x0000, -0x10F1,0x0000,0x0000,0x0000, 0x10F3,0x0000,0x0000,0x0000, -0x1104,0x0000,0x0000,0x0000, 0x10E8,0x0000,0x0000,0x0000, -0x10E9,0x0000,0x0000,0x0000, 0x10EA,0x0000,0x0000,0x0000, -0x10EC,0x0000,0x0000,0x0000, 0x10ED,0x0000,0x0000,0x0000, -0x10F0,0x0000,0x0000,0x0000, 0x10F1,0x0000,0x0000,0x0000, -0x10F2,0x0000,0x0000,0x0000, 0x10F3,0x0000,0x0000,0x0000, -0x10F5,0x0000,0x0000,0x0000, 0x10F6,0x0000,0x0000,0x0000, -0x10F8,0x0000,0x0000,0x0000, 0x10F9,0x0000,0x0000,0x0000, -0x10FA,0x0000,0x0000,0x0000, 0x10FB,0x0000,0x0000,0x0000, -0x10FC,0x0000,0x0000,0x0000, 0x1100,0x0000,0x0000,0x0000, -0x1102,0x0000,0x0000,0x0000, 0x1102,0x0000,0x0000,0x0000, -0x1103,0x0000,0x0000,0x0000, 0x1104,0x0000,0x0000,0x0000, -0x1105,0x0000,0x0000,0x0000, 0x1106,0x0000,0x0000,0x0000, -0x1107,0x0000,0x0000,0x0000, 0x1109,0x0000,0x0000,0x0000, -0x10F3,0x0000,0x0000,0x0000, 0x1104,0x0000,0x0000,0x0000, -0x10FB,0x0000,0x0000,0x0000, 0x1104,0x0000,0x0000,0x0000, -0x1109,0x0000,0x0000,0x0000, 0xFBC0,0x83CF,0x0000,0x0000, -0x10E9,0x0000,0x0000,0x0000, 0x10F2,0x0000,0x0000,0x0000, -0x1104,0x0000,0x0000,0x0000, 0x1104,0x0000,0x0000,0x0000, -0x1104,0x0000,0x0000,0x0000, 0x1105,0x0000,0x0000,0x0000, -0x10FC,0x0000,0x0000,0x0000, 0x10F5,0x10E8,0x10F3,0x0000, -0x10FF,0x0000,0x0000,0x0000, 0x10FF,0x0000,0x0000,0x0000, -0x10EF,0x0000,0x0000,0x0000, 0x10EF,0x0000,0x0000,0x0000, -0x10EE,0x0000,0x0000,0x0000, 0x10EE,0x0000,0x0000,0x0000, -0x10FE,0x0000,0x0000,0x0000, 0x10FE,0x0000,0x0000,0x0000, -0x110A,0x0000,0x0000,0x0000, 0x110A,0x0000,0x0000,0x0000, -0x110D,0x0000,0x0000,0x0000, 0x110D,0x0000,0x0000,0x0000, -0x110E,0x0000,0x0000,0x0000, 0x110E,0x0000,0x0000,0x0000, -0x110F,0x0000,0x0000,0x0000, 0x110F,0x0000,0x0000,0x0000, -0x1110,0x0000,0x0000,0x0000, 0x1110,0x0000,0x0000,0x0000, -0x1111,0x0000,0x0000,0x0000, 0x1111,0x0000,0x0000,0x0000, -0x1112,0x0000,0x0000,0x0000, 0x1112,0x0000,0x0000,0x0000, -0x1113,0x0000,0x0000,0x0000, 0x1113,0x0000,0x0000,0x0000, -0x10F5,0x0000,0x0000,0x0000, 0x1100,0x0000,0x0000,0x0000, -0x1102,0x0000,0x0000,0x0000, 0x10F4,0x0000,0x0000,0x0000, -0x10F2,0x0000,0x0000,0x0000, 0x10ED,0x0000,0x0000,0x0000, -0x0423,0x0000,0x0000,0x0000, 0x110B,0x0000,0x0000,0x0000, -0x110B,0x0000,0x0000,0x0000, 0x1102,0x0000,0x0000,0x0000, -0x110C,0x0000,0x0000,0x0000, 0x110C,0x0000,0x0000,0x0000, -0xFBC0,0x83FC,0x0000,0x0000, 0xFBC0,0x83FD,0x0000,0x0000, -0xFBC0,0x83FE,0x0000,0x0000, 0xFBC0,0x83FF,0x0000,0x0000 -}; - -uint16 page004data[]= { /* 0400 (3 weights per char) */ -0x1152,0x0000,0x0000, 0x1152,0x0000,0x0000, 0x1145,0x0000,0x0000, -0x114A,0x0000,0x0000, 0x115A,0x0000,0x0000, 0x1173,0x0000,0x0000, -0x1188,0x0000,0x0000, 0x118C,0x0000,0x0000, 0x1194,0x0000,0x0000, -0x11B9,0x0000,0x0000, 0x11DA,0x0000,0x0000, 0x1215,0x0000,0x0000, -0x1219,0x0000,0x0000, 0x117C,0x0000,0x0000, 0x1221,0x0000,0x0000, -0x127D,0x0000,0x0000, 0x1114,0x0000,0x0000, 0x112C,0x0000,0x0000, -0x1130,0x0000,0x0000, 0x1134,0x0000,0x0000, 0x1140,0x0000,0x0000, -0x1152,0x0000,0x0000, 0x115E,0x0000,0x0000, 0x116A,0x0000,0x0000, -0x117C,0x0000,0x0000, 0x1190,0x0000,0x0000, 0x1198,0x0000,0x0000, -0x11B0,0x0000,0x0000, 0x11BE,0x0000,0x0000, 0x11C6,0x0000,0x0000, -0x11DF,0x0000,0x0000, 0x11EF,0x0000,0x0000, 0x11FB,0x0000,0x0000, -0x1203,0x0000,0x0000, 0x120C,0x0000,0x0000, 0x121D,0x0000,0x0000, -0x1239,0x0000,0x0000, 0x123D,0x0000,0x0000, 0x1259,0x0000,0x0000, -0x1261,0x0000,0x0000, 0x1281,0x0000,0x0000, 0x1285,0x0000,0x0000, -0x1289,0x0000,0x0000, 0x128D,0x0000,0x0000, 0x1295,0x0000,0x0000, -0x12A1,0x0000,0x0000, 0x12A9,0x0000,0x0000, 0x12AD,0x0000,0x0000, -0x1114,0x0000,0x0000, 0x112C,0x0000,0x0000, 0x1130,0x0000,0x0000, -0x1134,0x0000,0x0000, 0x1140,0x0000,0x0000, 0x1152,0x0000,0x0000, -0x115E,0x0000,0x0000, 0x116A,0x0000,0x0000, 0x117C,0x0000,0x0000, -0x1190,0x0000,0x0000, 0x1198,0x0000,0x0000, 0x11B0,0x0000,0x0000, -0x11BE,0x0000,0x0000, 0x11C6,0x0000,0x0000, 0x11DF,0x0000,0x0000, -0x11EF,0x0000,0x0000, 0x11FB,0x0000,0x0000, 0x1203,0x0000,0x0000, -0x120C,0x0000,0x0000, 0x121D,0x0000,0x0000, 0x1239,0x0000,0x0000, -0x123D,0x0000,0x0000, 0x1259,0x0000,0x0000, 0x1261,0x0000,0x0000, -0x1281,0x0000,0x0000, 0x1285,0x0000,0x0000, 0x1289,0x0000,0x0000, -0x128D,0x0000,0x0000, 0x1295,0x0000,0x0000, 0x12A1,0x0000,0x0000, -0x12A9,0x0000,0x0000, 0x12AD,0x0000,0x0000, 0x1152,0x0000,0x0000, -0x1152,0x0000,0x0000, 0x1145,0x0000,0x0000, 0x114A,0x0000,0x0000, -0x115A,0x0000,0x0000, 0x1173,0x0000,0x0000, 0x1188,0x0000,0x0000, -0x118C,0x0000,0x0000, 0x1194,0x0000,0x0000, 0x11B9,0x0000,0x0000, -0x11DA,0x0000,0x0000, 0x1215,0x0000,0x0000, 0x1219,0x0000,0x0000, -0x117C,0x0000,0x0000, 0x1221,0x0000,0x0000, 0x127D,0x0000,0x0000, -0x1249,0x0000,0x0000, 0x1249,0x0000,0x0000, 0x129D,0x0000,0x0000, -0x129D,0x0000,0x0000, 0x12B1,0x0000,0x0000, 0x12B1,0x0000,0x0000, -0x12B5,0x0000,0x0000, 0x12B5,0x0000,0x0000, 0x12BD,0x0000,0x0000, -0x12BD,0x0000,0x0000, 0x12B9,0x0000,0x0000, 0x12B9,0x0000,0x0000, -0x12C1,0x0000,0x0000, 0x12C1,0x0000,0x0000, 0x12C5,0x0000,0x0000, -0x12C5,0x0000,0x0000, 0x12C9,0x0000,0x0000, 0x12C9,0x0000,0x0000, -0x12CD,0x0000,0x0000, 0x12CD,0x0000,0x0000, 0x12D1,0x0000,0x0000, -0x12D1,0x0000,0x0000, 0x12D5,0x0000,0x0000, 0x12D5,0x0000,0x0000, -0x1235,0x0000,0x0000, 0x1235,0x0000,0x0000, 0x1255,0x0000,0x0000, -0x1255,0x0000,0x0000, 0x1251,0x0000,0x0000, 0x1251,0x0000,0x0000, -0x124D,0x0000,0x0000, 0x124D,0x0000,0x0000, 0x11F7,0x0000,0x0000, -0x11F7,0x0000,0x0000, 0x034B,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0xFBC0,0x8487,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x1180,0x0000,0x0000, 0x1180,0x0000,0x0000, 0x1299,0x0000,0x0000, -0x1299,0x0000,0x0000, 0x11FF,0x0000,0x0000, 0x11FF,0x0000,0x0000, -0x1134,0x0000,0x0000, 0x1134,0x0000,0x0000, 0x1138,0x0000,0x0000, -0x1138,0x0000,0x0000, 0x113C,0x0000,0x0000, 0x113C,0x0000,0x0000, -0x1166,0x0000,0x0000, 0x1166,0x0000,0x0000, 0x114E,0x0000,0x0000, -0x114E,0x0000,0x0000, 0x119C,0x0000,0x0000, 0x119C,0x0000,0x0000, -0x11AC,0x0000,0x0000, 0x11AC,0x0000,0x0000, 0x11A8,0x0000,0x0000, -0x11A8,0x0000,0x0000, 0x11A4,0x0000,0x0000, 0x11A4,0x0000,0x0000, -0x11CE,0x0000,0x0000, 0x11CE,0x0000,0x0000, 0x11D6,0x0000,0x0000, -0x11D6,0x0000,0x0000, 0x11F3,0x0000,0x0000, 0x11F3,0x0000,0x0000, -0x12D9,0x0000,0x0000, 0x12D9,0x0000,0x0000, 0x1208,0x0000,0x0000, -0x1208,0x0000,0x0000, 0x1211,0x0000,0x0000, 0x1211,0x0000,0x0000, -0x122D,0x0000,0x0000, 0x122D,0x0000,0x0000, 0x1231,0x0000,0x0000, -0x1231,0x0000,0x0000, 0x1241,0x0000,0x0000, 0x1241,0x0000,0x0000, -0x125D,0x0000,0x0000, 0x125D,0x0000,0x0000, 0x1269,0x0000,0x0000, -0x1269,0x0000,0x0000, 0x1271,0x0000,0x0000, 0x1271,0x0000,0x0000, -0x1245,0x0000,0x0000, 0x1245,0x0000,0x0000, 0x1275,0x0000,0x0000, -0x1275,0x0000,0x0000, 0x1279,0x0000,0x0000, 0x1279,0x0000,0x0000, -0x12DD,0x0000,0x0000, 0x115E,0x0000,0x0000, 0x115E,0x0000,0x0000, -0x11A0,0x0000,0x0000, 0x11A0,0x0000,0x0000, 0x11B5,0x0000,0x0000, -0x11B5,0x0000,0x0000, 0x11D2,0x0000,0x0000, 0x11D2,0x0000,0x0000, -0x11CA,0x0000,0x0000, 0x11CA,0x0000,0x0000, 0x126D,0x0000,0x0000, -0x126D,0x0000,0x0000, 0x11C2,0x0000,0x0000, 0x11C2,0x0000,0x0000, -0xFBC0,0x84CF,0x0000, 0x1118,0x0000,0x0000, 0x1118,0x0000,0x0000, -0x111C,0x0000,0x0000, 0x111C,0x0000,0x0000, 0x1128,0x0000,0x0000, -0x1128,0x0000,0x0000, 0x1156,0x0000,0x0000, 0x1156,0x0000,0x0000, -0x1120,0x0000,0x0000, 0x1120,0x0000,0x0000, 0x1124,0x0000,0x0000, -0x1124,0x0000,0x0000, 0x1162,0x0000,0x0000, 0x1162,0x0000,0x0000, -0x116F,0x0000,0x0000, 0x116F,0x0000,0x0000, 0x1177,0x0000,0x0000, -0x1177,0x0000,0x0000, 0x117C,0x0000,0x0000, 0x117C,0x0000,0x0000, -0x1184,0x0000,0x0000, 0x1184,0x0000,0x0000, 0x11E3,0x0000,0x0000, -0x11E3,0x0000,0x0000, 0x11E7,0x0000,0x0000, 0x11E7,0x0000,0x0000, -0x11EB,0x0000,0x0000, 0x11EB,0x0000,0x0000, 0x12A5,0x0000,0x0000, -0x12A5,0x0000,0x0000, 0x121D,0x0000,0x0000, 0x121D,0x0000,0x0000, -0x1225,0x0000,0x0000, 0x1225,0x0000,0x0000, 0x1229,0x0000,0x0000, -0x1229,0x0000,0x0000, 0x1265,0x0000,0x0000, 0x1265,0x0000,0x0000, -0xFBC0,0x84F6,0x0000, 0xFBC0,0x84F7,0x0000, 0x1291,0x0000,0x0000, -0x1291,0x0000,0x0000, 0xFBC0,0x84FA,0x0000, 0xFBC0,0x84FB,0x0000, -0xFBC0,0x84FC,0x0000, 0xFBC0,0x84FD,0x0000, 0xFBC0,0x84FE,0x0000, -0xFBC0,0x84FF,0x0000 }; - -uint16 page005data[]= { /* 0500 (3 weights per char) */ -0x1144,0x0000,0x0000, 0x1144,0x0000,0x0000, 0x1149,0x0000,0x0000, -0x1149,0x0000,0x0000, 0x116E,0x0000,0x0000, 0x116E,0x0000,0x0000, -0x117B,0x0000,0x0000, 0x117B,0x0000,0x0000, 0x11BD,0x0000,0x0000, -0x11BD,0x0000,0x0000, 0x11DE,0x0000,0x0000, 0x11DE,0x0000,0x0000, -0x1207,0x0000,0x0000, 0x1207,0x0000,0x0000, 0x1210,0x0000,0x0000, -0x1210,0x0000,0x0000, 0xFBC0,0x8510,0x0000, 0xFBC0,0x8511,0x0000, -0xFBC0,0x8512,0x0000, 0xFBC0,0x8513,0x0000, 0xFBC0,0x8514,0x0000, -0xFBC0,0x8515,0x0000, 0xFBC0,0x8516,0x0000, 0xFBC0,0x8517,0x0000, -0xFBC0,0x8518,0x0000, 0xFBC0,0x8519,0x0000, 0xFBC0,0x851A,0x0000, -0xFBC0,0x851B,0x0000, 0xFBC0,0x851C,0x0000, 0xFBC0,0x851D,0x0000, -0xFBC0,0x851E,0x0000, 0xFBC0,0x851F,0x0000, 0xFBC0,0x8520,0x0000, -0xFBC0,0x8521,0x0000, 0xFBC0,0x8522,0x0000, 0xFBC0,0x8523,0x0000, -0xFBC0,0x8524,0x0000, 0xFBC0,0x8525,0x0000, 0xFBC0,0x8526,0x0000, -0xFBC0,0x8527,0x0000, 0xFBC0,0x8528,0x0000, 0xFBC0,0x8529,0x0000, -0xFBC0,0x852A,0x0000, 0xFBC0,0x852B,0x0000, 0xFBC0,0x852C,0x0000, -0xFBC0,0x852D,0x0000, 0xFBC0,0x852E,0x0000, 0xFBC0,0x852F,0x0000, -0xFBC0,0x8530,0x0000, 0x130A,0x0000,0x0000, 0x130B,0x0000,0x0000, -0x130C,0x0000,0x0000, 0x130D,0x0000,0x0000, 0x130E,0x0000,0x0000, -0x130F,0x0000,0x0000, 0x1310,0x0000,0x0000, 0x1311,0x0000,0x0000, -0x1312,0x0000,0x0000, 0x1313,0x0000,0x0000, 0x1314,0x0000,0x0000, -0x1315,0x0000,0x0000, 0x1316,0x0000,0x0000, 0x1317,0x0000,0x0000, -0x1318,0x0000,0x0000, 0x1319,0x0000,0x0000, 0x131A,0x0000,0x0000, -0x131B,0x0000,0x0000, 0x131C,0x0000,0x0000, 0x131D,0x0000,0x0000, -0x131E,0x0000,0x0000, 0x131F,0x0000,0x0000, 0x1320,0x0000,0x0000, -0x1321,0x0000,0x0000, 0x1322,0x0000,0x0000, 0x1323,0x0000,0x0000, -0x1324,0x0000,0x0000, 0x1325,0x0000,0x0000, 0x1326,0x0000,0x0000, -0x1327,0x0000,0x0000, 0x1328,0x0000,0x0000, 0x1329,0x0000,0x0000, -0x132A,0x0000,0x0000, 0x132B,0x0000,0x0000, 0x132C,0x0000,0x0000, -0x132D,0x0000,0x0000, 0x132E,0x0000,0x0000, 0x132F,0x0000,0x0000, -0xFBC0,0x8557,0x0000, 0xFBC0,0x8558,0x0000, 0x1330,0x0000,0x0000, -0x02EC,0x0000,0x0000, 0x02ED,0x0000,0x0000, 0x0253,0x0000,0x0000, -0x0230,0x0000,0x0000, 0x0257,0x0000,0x0000, 0x02EE,0x0000,0x0000, -0xFBC0,0x8560,0x0000, 0x130A,0x0000,0x0000, 0x130B,0x0000,0x0000, -0x130C,0x0000,0x0000, 0x130D,0x0000,0x0000, 0x130E,0x0000,0x0000, -0x130F,0x0000,0x0000, 0x1310,0x0000,0x0000, 0x1311,0x0000,0x0000, -0x1312,0x0000,0x0000, 0x1313,0x0000,0x0000, 0x1314,0x0000,0x0000, -0x1315,0x0000,0x0000, 0x1316,0x0000,0x0000, 0x1317,0x0000,0x0000, -0x1318,0x0000,0x0000, 0x1319,0x0000,0x0000, 0x131A,0x0000,0x0000, -0x131B,0x0000,0x0000, 0x131C,0x0000,0x0000, 0x131D,0x0000,0x0000, -0x131E,0x0000,0x0000, 0x131F,0x0000,0x0000, 0x1320,0x0000,0x0000, -0x1321,0x0000,0x0000, 0x1322,0x0000,0x0000, 0x1323,0x0000,0x0000, -0x1324,0x0000,0x0000, 0x1325,0x0000,0x0000, 0x1326,0x0000,0x0000, -0x1327,0x0000,0x0000, 0x1328,0x0000,0x0000, 0x1329,0x0000,0x0000, -0x132A,0x0000,0x0000, 0x132B,0x0000,0x0000, 0x132C,0x0000,0x0000, -0x132D,0x0000,0x0000, 0x132E,0x0000,0x0000, 0x132F,0x0000,0x0000, -0x130E,0x132B,0x0000, 0xFBC0,0x8588,0x0000, 0x023E,0x0000,0x0000, -0x0222,0x0000,0x0000, 0xFBC0,0x858B,0x0000, 0xFBC0,0x858C,0x0000, -0xFBC0,0x858D,0x0000, 0xFBC0,0x858E,0x0000, 0xFBC0,0x858F,0x0000, -0xFBC0,0x8590,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0xFBC0,0x85A2,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0xFBC0,0x85BA,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x02EF,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x02F0,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x02F1,0x0000,0x0000, 0x0000,0x0000,0x0000, 0xFBC0,0x85C5,0x0000, -0xFBC0,0x85C6,0x0000, 0xFBC0,0x85C7,0x0000, 0xFBC0,0x85C8,0x0000, -0xFBC0,0x85C9,0x0000, 0xFBC0,0x85CA,0x0000, 0xFBC0,0x85CB,0x0000, -0xFBC0,0x85CC,0x0000, 0xFBC0,0x85CD,0x0000, 0xFBC0,0x85CE,0x0000, -0xFBC0,0x85CF,0x0000, 0x1331,0x0000,0x0000, 0x1332,0x0000,0x0000, -0x1333,0x0000,0x0000, 0x1334,0x0000,0x0000, 0x1335,0x0000,0x0000, -0x1336,0x0000,0x0000, 0x1337,0x0000,0x0000, 0x1338,0x0000,0x0000, -0x1339,0x0000,0x0000, 0x133A,0x0000,0x0000, 0x133B,0x0000,0x0000, -0x133B,0x0000,0x0000, 0x133C,0x0000,0x0000, 0x133D,0x0000,0x0000, -0x133D,0x0000,0x0000, 0x133E,0x0000,0x0000, 0x133E,0x0000,0x0000, -0x133F,0x0000,0x0000, 0x1340,0x0000,0x0000, 0x1341,0x0000,0x0000, -0x1341,0x0000,0x0000, 0x1342,0x0000,0x0000, 0x1342,0x0000,0x0000, -0x1343,0x0000,0x0000, 0x1344,0x0000,0x0000, 0x1345,0x0000,0x0000, -0x1346,0x0000,0x0000, 0xFBC0,0x85EB,0x0000, 0xFBC0,0x85EC,0x0000, -0xFBC0,0x85ED,0x0000, 0xFBC0,0x85EE,0x0000, 0xFBC0,0x85EF,0x0000, -0x1336,0x1336,0x0000, 0x1336,0x133A,0x0000, 0x133A,0x133A,0x0000, -0x02F2,0x0000,0x0000, 0x02F3,0x0000,0x0000, 0xFBC0,0x85F5,0x0000, -0xFBC0,0x85F6,0x0000, 0xFBC0,0x85F7,0x0000, 0xFBC0,0x85F8,0x0000, -0xFBC0,0x85F9,0x0000, 0xFBC0,0x85FA,0x0000, 0xFBC0,0x85FB,0x0000, -0xFBC0,0x85FC,0x0000, 0xFBC0,0x85FD,0x0000, 0xFBC0,0x85FE,0x0000, -0xFBC0,0x85FF,0x0000 }; - -uint16 page006data[]= { /* 0600 (3 weights per char) */ -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0xFBC0,0x8604,0x0000, 0xFBC0,0x8605,0x0000, -0xFBC0,0x8606,0x0000, 0xFBC0,0x8607,0x0000, 0xFBC0,0x8608,0x0000, -0xFBC0,0x8609,0x0000, 0xFBC0,0x860A,0x0000, 0xFBC0,0x860B,0x0000, -0x0231,0x0000,0x0000, 0x0232,0x0000,0x0000, 0x034C,0x0000,0x0000, -0x034D,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0xFBC0,0x8616,0x0000, 0xFBC0,0x8617,0x0000, -0xFBC0,0x8618,0x0000, 0xFBC0,0x8619,0x0000, 0xFBC0,0x861A,0x0000, -0x023B,0x0000,0x0000, 0xFBC0,0x861C,0x0000, 0xFBC0,0x861D,0x0000, -0xFBC0,0x861E,0x0000, 0x0258,0x0000,0x0000, 0xFBC0,0x8620,0x0000, -0x1347,0x0000,0x0000, 0x1348,0x0000,0x0000, 0x1349,0x0000,0x0000, -0x134C,0x0000,0x0000, 0x134D,0x0000,0x0000, 0x134F,0x0000,0x0000, -0x1350,0x0000,0x0000, 0x1352,0x0000,0x0000, 0x1356,0x0000,0x0000, -0x1357,0x0000,0x0000, 0x1358,0x0000,0x0000, 0x135E,0x0000,0x0000, -0x1364,0x0000,0x0000, 0x1365,0x0000,0x0000, 0x1369,0x0000,0x0000, -0x136A,0x0000,0x0000, 0x1375,0x0000,0x0000, 0x1376,0x0000,0x0000, -0x1381,0x0000,0x0000, 0x1382,0x0000,0x0000, 0x1387,0x0000,0x0000, -0x1388,0x0000,0x0000, 0x138C,0x0000,0x0000, 0x138D,0x0000,0x0000, -0x138F,0x0000,0x0000, 0x1390,0x0000,0x0000, 0xFBC0,0x863B,0x0000, -0xFBC0,0x863C,0x0000, 0xFBC0,0x863D,0x0000, 0xFBC0,0x863E,0x0000, -0xFBC0,0x863F,0x0000, 0x020B,0x0000,0x0000, 0x1393,0x0000,0x0000, -0x139B,0x0000,0x0000, 0x139E,0x0000,0x0000, 0x13AB,0x0000,0x0000, -0x13B0,0x0000,0x0000, 0x13B1,0x0000,0x0000, 0x13B7,0x0000,0x0000, -0x13BD,0x0000,0x0000, 0x13C7,0x0000,0x0000, 0x13C8,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0xFBC0,0x8659,0x0000, -0xFBC0,0x865A,0x0000, 0xFBC0,0x865B,0x0000, 0xFBC0,0x865C,0x0000, -0xFBC0,0x865D,0x0000, 0xFBC0,0x865E,0x0000, 0xFBC0,0x865F,0x0000, -0x0E29,0x0000,0x0000, 0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, -0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, -0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, -0x0E32,0x0000,0x0000, 0x02D4,0x0000,0x0000, 0x0233,0x0000,0x0000, -0x0234,0x0000,0x0000, 0x02CB,0x0000,0x0000, 0x1351,0x0000,0x0000, -0x139A,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x134B,0x0000,0x0000, -0x134A,0x0000,0x0000, 0x134E,0x0000,0x0000, 0x1347,0x0000,0x0000, -0x1350,0x1347,0x0000, 0x13BD,0x1347,0x0000, 0x13C1,0x1347,0x0000, -0x13C8,0x1347,0x0000, 0x1359,0x0000,0x0000, 0x135A,0x0000,0x0000, -0x1353,0x0000,0x0000, 0x135B,0x0000,0x0000, 0x135C,0x0000,0x0000, -0x1354,0x0000,0x0000, 0x135D,0x0000,0x0000, 0x1355,0x0000,0x0000, -0x1366,0x0000,0x0000, 0x1367,0x0000,0x0000, 0x135F,0x0000,0x0000, -0x1360,0x0000,0x0000, 0x1368,0x0000,0x0000, 0x1361,0x0000,0x0000, -0x1363,0x0000,0x0000, 0x136B,0x0000,0x0000, 0x136C,0x0000,0x0000, -0x136D,0x0000,0x0000, 0x136E,0x0000,0x0000, 0x136F,0x0000,0x0000, -0x1370,0x0000,0x0000, 0x1371,0x0000,0x0000, 0x1372,0x0000,0x0000, -0x1373,0x0000,0x0000, 0x1377,0x0000,0x0000, 0x1378,0x0000,0x0000, -0x1379,0x0000,0x0000, 0x137A,0x0000,0x0000, 0x137B,0x0000,0x0000, -0x137C,0x0000,0x0000, 0x137D,0x0000,0x0000, 0x137E,0x0000,0x0000, -0x137F,0x0000,0x0000, 0x1383,0x0000,0x0000, 0x1384,0x0000,0x0000, -0x1385,0x0000,0x0000, 0x1389,0x0000,0x0000, 0x138A,0x0000,0x0000, -0x138E,0x0000,0x0000, 0x1391,0x0000,0x0000, 0x1394,0x0000,0x0000, -0x1395,0x0000,0x0000, 0x1396,0x0000,0x0000, 0x1397,0x0000,0x0000, -0x1398,0x0000,0x0000, 0x1399,0x0000,0x0000, 0x139C,0x0000,0x0000, -0x139D,0x0000,0x0000, 0x139F,0x0000,0x0000, 0x13A0,0x0000,0x0000, -0x13A1,0x0000,0x0000, 0x13A2,0x0000,0x0000, 0x13A3,0x0000,0x0000, -0x13A4,0x0000,0x0000, 0x13A5,0x0000,0x0000, 0x13A6,0x0000,0x0000, -0x13A7,0x0000,0x0000, 0x13A8,0x0000,0x0000, 0x13A9,0x0000,0x0000, -0x13AA,0x0000,0x0000, 0x13AC,0x0000,0x0000, 0x13AD,0x0000,0x0000, -0x13AE,0x0000,0x0000, 0x13AF,0x0000,0x0000, 0x13B6,0x0000,0x0000, -0x13B2,0x0000,0x0000, 0x13B3,0x0000,0x0000, 0x13B4,0x0000,0x0000, -0x13B5,0x0000,0x0000, 0x13B8,0x0000,0x0000, 0x1362,0x0000,0x0000, -0x13BC,0x0000,0x0000, 0x13B9,0x0000,0x0000, 0x13B9,0x0000,0x0000, -0x13BA,0x0000,0x0000, 0x13BE,0x0000,0x0000, 0x13BF,0x0000,0x0000, -0x13C0,0x0000,0x0000, 0x13C1,0x0000,0x0000, 0x13C2,0x0000,0x0000, -0x13C3,0x0000,0x0000, 0x13C4,0x0000,0x0000, 0x13C5,0x0000,0x0000, -0x13C9,0x0000,0x0000, 0x13CA,0x0000,0x0000, 0x13CB,0x0000,0x0000, -0x13C6,0x0000,0x0000, 0x13CC,0x0000,0x0000, 0x13CD,0x0000,0x0000, -0x13CE,0x0000,0x0000, 0x13CE,0x0000,0x0000, 0x025F,0x0000,0x0000, -0x13BC,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x13BD,0x0000,0x0000, 0x13C8,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x034E,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x1374,0x0000,0x0000, 0x1380,0x0000,0x0000, -0x0E29,0x0000,0x0000, 0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, -0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, -0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, -0x0E32,0x0000,0x0000, 0x1386,0x0000,0x0000, 0x138B,0x0000,0x0000, -0x1392,0x0000,0x0000, 0x1347,0x0000,0x0000, 0x13B0,0x0000,0x0000, -0x13BB,0x0000,0x0000 }; - -uint16 page007data[]= { /* 0700 (3 weights per char) */ -0x0270,0x0000,0x0000, 0x0260,0x0000,0x0000, 0x0261,0x0000,0x0000, -0x023F,0x0000,0x0000, 0x0240,0x0000,0x0000, 0x0241,0x0000,0x0000, -0x0242,0x0000,0x0000, 0x0243,0x0000,0x0000, 0x0244,0x0000,0x0000, -0x0259,0x0000,0x0000, 0x02F4,0x0000,0x0000, 0x02F5,0x0000,0x0000, -0x02F6,0x0000,0x0000, 0x02F7,0x0000,0x0000, 0xFBC0,0x870E,0x0000, -0x0000,0x0000,0x0000, 0x13CF,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x13D0,0x0000,0x0000, 0x13D1,0x0000,0x0000, 0x13D1,0x0000,0x0000, -0x13D3,0x0000,0x0000, 0x13D2,0x0000,0x0000, 0x13D4,0x0000,0x0000, -0x13D5,0x0000,0x0000, 0x13D6,0x0000,0x0000, 0x13D8,0x0000,0x0000, -0x13D9,0x0000,0x0000, 0x13D9,0x0000,0x0000, 0x13DA,0x0000,0x0000, -0x13DB,0x0000,0x0000, 0x13DC,0x0000,0x0000, 0x13DE,0x0000,0x0000, -0x13DF,0x0000,0x0000, 0x13E0,0x0000,0x0000, 0x13E1,0x0000,0x0000, -0x13E1,0x0000,0x0000, 0x13E2,0x0000,0x0000, 0x13E3,0x0000,0x0000, -0x13E3,0x0000,0x0000, 0x13E5,0x0000,0x0000, 0x13E6,0x0000,0x0000, -0x13E7,0x0000,0x0000, 0x13E8,0x0000,0x0000, 0x13E9,0x0000,0x0000, -0x13D0,0x0000,0x0000, 0x13D1,0x0000,0x0000, 0x13D3,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0xFBC0,0x874B,0x0000, 0xFBC0,0x874C,0x0000, 0x13D7,0x0000,0x0000, -0x13DD,0x0000,0x0000, 0x13E4,0x0000,0x0000, 0xFBC0,0x8750,0x0000, -0xFBC0,0x8751,0x0000, 0xFBC0,0x8752,0x0000, 0xFBC0,0x8753,0x0000, -0xFBC0,0x8754,0x0000, 0xFBC0,0x8755,0x0000, 0xFBC0,0x8756,0x0000, -0xFBC0,0x8757,0x0000, 0xFBC0,0x8758,0x0000, 0xFBC0,0x8759,0x0000, -0xFBC0,0x875A,0x0000, 0xFBC0,0x875B,0x0000, 0xFBC0,0x875C,0x0000, -0xFBC0,0x875D,0x0000, 0xFBC0,0x875E,0x0000, 0xFBC0,0x875F,0x0000, -0xFBC0,0x8760,0x0000, 0xFBC0,0x8761,0x0000, 0xFBC0,0x8762,0x0000, -0xFBC0,0x8763,0x0000, 0xFBC0,0x8764,0x0000, 0xFBC0,0x8765,0x0000, -0xFBC0,0x8766,0x0000, 0xFBC0,0x8767,0x0000, 0xFBC0,0x8768,0x0000, -0xFBC0,0x8769,0x0000, 0xFBC0,0x876A,0x0000, 0xFBC0,0x876B,0x0000, -0xFBC0,0x876C,0x0000, 0xFBC0,0x876D,0x0000, 0xFBC0,0x876E,0x0000, -0xFBC0,0x876F,0x0000, 0xFBC0,0x8770,0x0000, 0xFBC0,0x8771,0x0000, -0xFBC0,0x8772,0x0000, 0xFBC0,0x8773,0x0000, 0xFBC0,0x8774,0x0000, -0xFBC0,0x8775,0x0000, 0xFBC0,0x8776,0x0000, 0xFBC0,0x8777,0x0000, -0xFBC0,0x8778,0x0000, 0xFBC0,0x8779,0x0000, 0xFBC0,0x877A,0x0000, -0xFBC0,0x877B,0x0000, 0xFBC0,0x877C,0x0000, 0xFBC0,0x877D,0x0000, -0xFBC0,0x877E,0x0000, 0xFBC0,0x877F,0x0000, 0x13EA,0x0000,0x0000, -0x13ED,0x0000,0x0000, 0x13EE,0x0000,0x0000, 0x13EF,0x0000,0x0000, -0x13F1,0x0000,0x0000, 0x13F2,0x0000,0x0000, 0x13F3,0x0000,0x0000, -0x13F4,0x0000,0x0000, 0x13F7,0x0000,0x0000, 0x13F9,0x0000,0x0000, -0x13FA,0x0000,0x0000, 0x13FB,0x0000,0x0000, 0x13FD,0x0000,0x0000, -0x1401,0x0000,0x0000, 0x1402,0x0000,0x0000, 0x1404,0x0000,0x0000, -0x1405,0x0000,0x0000, 0x1409,0x0000,0x0000, 0x140A,0x0000,0x0000, -0x140B,0x0000,0x0000, 0x140C,0x0000,0x0000, 0x140D,0x0000,0x0000, -0x140E,0x0000,0x0000, 0x140F,0x0000,0x0000, 0x13FE,0x0000,0x0000, -0x13EB,0x0000,0x0000, 0x13EC,0x0000,0x0000, 0x13FC,0x0000,0x0000, -0x13F0,0x0000,0x0000, 0x1406,0x0000,0x0000, 0x1407,0x0000,0x0000, -0x1408,0x0000,0x0000, 0x13FF,0x0000,0x0000, 0x1400,0x0000,0x0000, -0x13F5,0x0000,0x0000, 0x13F6,0x0000,0x0000, 0x1403,0x0000,0x0000, -0x13F8,0x0000,0x0000, 0x1411,0x0000,0x0000, 0x1412,0x0000,0x0000, -0x1413,0x0000,0x0000, 0x1414,0x0000,0x0000, 0x1415,0x0000,0x0000, -0x1416,0x0000,0x0000, 0x1417,0x0000,0x0000, 0x1418,0x0000,0x0000, -0x1419,0x0000,0x0000, 0x141A,0x0000,0x0000, 0x141B,0x0000,0x0000, -0x1410,0x0000,0x0000, 0xFBC0,0x87B2,0x0000, 0xFBC0,0x87B3,0x0000, -0xFBC0,0x87B4,0x0000, 0xFBC0,0x87B5,0x0000, 0xFBC0,0x87B6,0x0000, -0xFBC0,0x87B7,0x0000, 0xFBC0,0x87B8,0x0000, 0xFBC0,0x87B9,0x0000, -0xFBC0,0x87BA,0x0000, 0xFBC0,0x87BB,0x0000, 0xFBC0,0x87BC,0x0000, -0xFBC0,0x87BD,0x0000, 0xFBC0,0x87BE,0x0000, 0xFBC0,0x87BF,0x0000, -0xFBC0,0x87C0,0x0000, 0xFBC0,0x87C1,0x0000, 0xFBC0,0x87C2,0x0000, -0xFBC0,0x87C3,0x0000, 0xFBC0,0x87C4,0x0000, 0xFBC0,0x87C5,0x0000, -0xFBC0,0x87C6,0x0000, 0xFBC0,0x87C7,0x0000, 0xFBC0,0x87C8,0x0000, -0xFBC0,0x87C9,0x0000, 0xFBC0,0x87CA,0x0000, 0xFBC0,0x87CB,0x0000, -0xFBC0,0x87CC,0x0000, 0xFBC0,0x87CD,0x0000, 0xFBC0,0x87CE,0x0000, -0xFBC0,0x87CF,0x0000, 0xFBC0,0x87D0,0x0000, 0xFBC0,0x87D1,0x0000, -0xFBC0,0x87D2,0x0000, 0xFBC0,0x87D3,0x0000, 0xFBC0,0x87D4,0x0000, -0xFBC0,0x87D5,0x0000, 0xFBC0,0x87D6,0x0000, 0xFBC0,0x87D7,0x0000, -0xFBC0,0x87D8,0x0000, 0xFBC0,0x87D9,0x0000, 0xFBC0,0x87DA,0x0000, -0xFBC0,0x87DB,0x0000, 0xFBC0,0x87DC,0x0000, 0xFBC0,0x87DD,0x0000, -0xFBC0,0x87DE,0x0000, 0xFBC0,0x87DF,0x0000, 0xFBC0,0x87E0,0x0000, -0xFBC0,0x87E1,0x0000, 0xFBC0,0x87E2,0x0000, 0xFBC0,0x87E3,0x0000, -0xFBC0,0x87E4,0x0000, 0xFBC0,0x87E5,0x0000, 0xFBC0,0x87E6,0x0000, -0xFBC0,0x87E7,0x0000, 0xFBC0,0x87E8,0x0000, 0xFBC0,0x87E9,0x0000, -0xFBC0,0x87EA,0x0000, 0xFBC0,0x87EB,0x0000, 0xFBC0,0x87EC,0x0000, -0xFBC0,0x87ED,0x0000, 0xFBC0,0x87EE,0x0000, 0xFBC0,0x87EF,0x0000, -0xFBC0,0x87F0,0x0000, 0xFBC0,0x87F1,0x0000, 0xFBC0,0x87F2,0x0000, -0xFBC0,0x87F3,0x0000, 0xFBC0,0x87F4,0x0000, 0xFBC0,0x87F5,0x0000, -0xFBC0,0x87F6,0x0000, 0xFBC0,0x87F7,0x0000, 0xFBC0,0x87F8,0x0000, -0xFBC0,0x87F9,0x0000, 0xFBC0,0x87FA,0x0000, 0xFBC0,0x87FB,0x0000, -0xFBC0,0x87FC,0x0000, 0xFBC0,0x87FD,0x0000, 0xFBC0,0x87FE,0x0000, -0xFBC0,0x87FF,0x0000 }; - -uint16 page009data[]= { /* 0900 (3 weights per char) */ -0xFBC0,0x8900,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x155A,0x0000,0x0000, 0x155B,0x0000,0x0000, -0x155C,0x0000,0x0000, 0x155D,0x0000,0x0000, 0x155E,0x0000,0x0000, -0x155F,0x0000,0x0000, 0x1560,0x0000,0x0000, 0x1561,0x0000,0x0000, -0x1563,0x0000,0x0000, 0x1565,0x0000,0x0000, 0x1566,0x0000,0x0000, -0x1567,0x0000,0x0000, 0x1568,0x0000,0x0000, 0x1569,0x0000,0x0000, -0x156A,0x0000,0x0000, 0x156B,0x0000,0x0000, 0x156C,0x0000,0x0000, -0x156D,0x0000,0x0000, 0x156E,0x0000,0x0000, 0x156F,0x0000,0x0000, -0x1570,0x0000,0x0000, 0x1571,0x0000,0x0000, 0x1572,0x0000,0x0000, -0x1573,0x0000,0x0000, 0x1574,0x0000,0x0000, 0x1575,0x0000,0x0000, -0x1576,0x0000,0x0000, 0x1577,0x0000,0x0000, 0x1578,0x0000,0x0000, -0x1579,0x0000,0x0000, 0x157A,0x0000,0x0000, 0x157B,0x0000,0x0000, -0x157C,0x0000,0x0000, 0x157D,0x0000,0x0000, 0x157E,0x0000,0x0000, -0x157F,0x0000,0x0000, 0x1580,0x0000,0x0000, 0x1580,0x0000,0x0000, -0x1581,0x0000,0x0000, 0x1582,0x0000,0x0000, 0x1583,0x0000,0x0000, -0x1584,0x0000,0x0000, 0x1585,0x0000,0x0000, 0x1586,0x0000,0x0000, -0x1587,0x0000,0x0000, 0x1587,0x0000,0x0000, 0x1588,0x0000,0x0000, -0x1589,0x0000,0x0000, 0x1589,0x0000,0x0000, 0x158A,0x0000,0x0000, -0x158B,0x0000,0x0000, 0x158C,0x0000,0x0000, 0x158D,0x0000,0x0000, -0x158E,0x0000,0x0000, 0xFBC0,0x893A,0x0000, 0xFBC0,0x893B,0x0000, -0x0000,0x0000,0x0000, 0x158F,0x0000,0x0000, 0x1590,0x0000,0x0000, -0x1591,0x0000,0x0000, 0x1592,0x0000,0x0000, 0x1593,0x0000,0x0000, -0x1594,0x0000,0x0000, 0x1595,0x0000,0x0000, 0x1596,0x0000,0x0000, -0x1599,0x0000,0x0000, 0x159A,0x0000,0x0000, 0x159B,0x0000,0x0000, -0x159C,0x0000,0x0000, 0x159D,0x0000,0x0000, 0x159E,0x0000,0x0000, -0x159F,0x0000,0x0000, 0x15A0,0x0000,0x0000, 0x15A1,0x0000,0x0000, -0xFBC0,0x894E,0x0000, 0xFBC0,0x894F,0x0000, 0x1559,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0xFBC0,0x8955,0x0000, 0xFBC0,0x8956,0x0000, -0xFBC0,0x8957,0x0000, 0x156D,0x0000,0x0000, 0x156E,0x0000,0x0000, -0x156F,0x0000,0x0000, 0x1574,0x0000,0x0000, 0x1579,0x0000,0x0000, -0x157A,0x0000,0x0000, 0x1582,0x0000,0x0000, 0x1586,0x0000,0x0000, -0x1562,0x0000,0x0000, 0x1564,0x0000,0x0000, 0x1597,0x0000,0x0000, -0x1598,0x0000,0x0000, 0x0268,0x0000,0x0000, 0x0269,0x0000,0x0000, -0x0E29,0x0000,0x0000, 0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, -0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, -0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, -0x0E32,0x0000,0x0000, 0x02FA,0x0000,0x0000, 0xFBC0,0x8971,0x0000, -0xFBC0,0x8972,0x0000, 0xFBC0,0x8973,0x0000, 0xFBC0,0x8974,0x0000, -0xFBC0,0x8975,0x0000, 0xFBC0,0x8976,0x0000, 0xFBC0,0x8977,0x0000, -0xFBC0,0x8978,0x0000, 0xFBC0,0x8979,0x0000, 0xFBC0,0x897A,0x0000, -0xFBC0,0x897B,0x0000, 0xFBC0,0x897C,0x0000, 0xFBC0,0x897D,0x0000, -0xFBC0,0x897E,0x0000, 0xFBC0,0x897F,0x0000, 0xFBC0,0x8980,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0xFBC0,0x8984,0x0000, 0x15A2,0x0000,0x0000, 0x15A3,0x0000,0x0000, -0x15A4,0x0000,0x0000, 0x15A5,0x0000,0x0000, 0x15A6,0x0000,0x0000, -0x15A7,0x0000,0x0000, 0x15A8,0x0000,0x0000, 0x15AA,0x0000,0x0000, -0xFBC0,0x898D,0x0000, 0xFBC0,0x898E,0x0000, 0x15AC,0x0000,0x0000, -0x15AD,0x0000,0x0000, 0xFBC0,0x8991,0x0000, 0xFBC0,0x8992,0x0000, -0x15AE,0x0000,0x0000, 0x15AF,0x0000,0x0000, 0x15B0,0x0000,0x0000, -0x15B1,0x0000,0x0000, 0x15B2,0x0000,0x0000, 0x15B3,0x0000,0x0000, -0x15B4,0x0000,0x0000, 0x15B5,0x0000,0x0000, 0x15B6,0x0000,0x0000, -0x15B7,0x0000,0x0000, 0x15B8,0x0000,0x0000, 0x15B9,0x0000,0x0000, -0x15BA,0x0000,0x0000, 0x15BB,0x0000,0x0000, 0x15BC,0x0000,0x0000, -0x15BD,0x0000,0x0000, 0x15BE,0x0000,0x0000, 0x15BF,0x0000,0x0000, -0x15C0,0x0000,0x0000, 0x15C1,0x0000,0x0000, 0x15C2,0x0000,0x0000, -0x15C3,0x0000,0x0000, 0xFBC0,0x89A9,0x0000, 0x15C4,0x0000,0x0000, -0x15C5,0x0000,0x0000, 0x15C6,0x0000,0x0000, 0x15C7,0x0000,0x0000, -0x15C8,0x0000,0x0000, 0x15C9,0x0000,0x0000, 0x15CA,0x0000,0x0000, -0xFBC0,0x89B1,0x0000, 0x15CC,0x0000,0x0000, 0xFBC0,0x89B3,0x0000, -0xFBC0,0x89B4,0x0000, 0xFBC0,0x89B5,0x0000, 0x15CE,0x0000,0x0000, -0x15CF,0x0000,0x0000, 0x15D0,0x0000,0x0000, 0x15D1,0x0000,0x0000, -0xFBC0,0x89BA,0x0000, 0xFBC0,0x89BB,0x0000, 0x0000,0x0000,0x0000, -0x15D2,0x0000,0x0000, 0x15D3,0x0000,0x0000, 0x15D4,0x0000,0x0000, -0x15D5,0x0000,0x0000, 0x15D6,0x0000,0x0000, 0x15D7,0x0000,0x0000, -0x15D8,0x0000,0x0000, 0x15D9,0x0000,0x0000, 0xFBC0,0x89C5,0x0000, -0xFBC0,0x89C6,0x0000, 0x15DC,0x0000,0x0000, 0x15DD,0x0000,0x0000, -0xFBC0,0x89C9,0x0000, 0xFBC0,0x89CA,0x0000, 0x15DE,0x0000,0x0000, -0x15DF,0x0000,0x0000, 0x15E0,0x0000,0x0000, 0xFBC0,0x89CE,0x0000, -0xFBC0,0x89CF,0x0000, 0xFBC0,0x89D0,0x0000, 0xFBC0,0x89D1,0x0000, -0xFBC0,0x89D2,0x0000, 0xFBC0,0x89D3,0x0000, 0xFBC0,0x89D4,0x0000, -0xFBC0,0x89D5,0x0000, 0xFBC0,0x89D6,0x0000, 0x15E1,0x0000,0x0000, -0xFBC0,0x89D8,0x0000, 0xFBC0,0x89D9,0x0000, 0xFBC0,0x89DA,0x0000, -0xFBC0,0x89DB,0x0000, 0x15BC,0x0000,0x0000, 0x15BD,0x0000,0x0000, -0xFBC0,0x89DE,0x0000, 0x15C9,0x0000,0x0000, 0x15A9,0x0000,0x0000, -0x15AB,0x0000,0x0000, 0x15DA,0x0000,0x0000, 0x15DB,0x0000,0x0000, -0xFBC0,0x89E4,0x0000, 0xFBC0,0x89E5,0x0000, 0x0E29,0x0000,0x0000, -0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, -0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, -0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, -0x15CB,0x0000,0x0000, 0x15CD,0x0000,0x0000, 0x0E12,0x0000,0x0000, -0x0E13,0x0000,0x0000, 0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, -0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, 0x0DC7,0x0000,0x0000, -0x0DC8,0x0000,0x0000, 0x0350,0x0000,0x0000, 0xFBC0,0x89FB,0x0000, -0xFBC0,0x89FC,0x0000, 0xFBC0,0x89FD,0x0000, 0xFBC0,0x89FE,0x0000, -0xFBC0,0x89FF,0x0000 }; - -uint16 page00Adata[]= { /* 0A00 (3 weights per char) */ -0xFBC0,0x8A00,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0xFBC0,0x8A04,0x0000, 0x15E7,0x0000,0x0000, -0x15E8,0x0000,0x0000, 0x15EC,0x0000,0x0000, 0x15ED,0x0000,0x0000, -0x15E4,0x0000,0x0000, 0x15E5,0x0000,0x0000, 0xFBC0,0x8A0B,0x0000, -0xFBC0,0x8A0C,0x0000, 0xFBC0,0x8A0D,0x0000, 0xFBC0,0x8A0E,0x0000, -0x15EE,0x0000,0x0000, 0x15E9,0x0000,0x0000, 0xFBC0,0x8A11,0x0000, -0xFBC0,0x8A12,0x0000, 0x15E6,0x0000,0x0000, 0x15EA,0x0000,0x0000, -0x15F1,0x0000,0x0000, 0x15F2,0x0000,0x0000, 0x15F3,0x0000,0x0000, -0x15F4,0x0000,0x0000, 0x15F5,0x0000,0x0000, 0x15F6,0x0000,0x0000, -0x15F7,0x0000,0x0000, 0x15F8,0x0000,0x0000, 0x15F9,0x0000,0x0000, -0x15FA,0x0000,0x0000, 0x15FB,0x0000,0x0000, 0x15FC,0x0000,0x0000, -0x15FD,0x0000,0x0000, 0x15FE,0x0000,0x0000, 0x15FF,0x0000,0x0000, -0x1600,0x0000,0x0000, 0x1601,0x0000,0x0000, 0x1602,0x0000,0x0000, -0x1603,0x0000,0x0000, 0x1604,0x0000,0x0000, 0xFBC0,0x8A29,0x0000, -0x1605,0x0000,0x0000, 0x1606,0x0000,0x0000, 0x1607,0x0000,0x0000, -0x1608,0x0000,0x0000, 0x1609,0x0000,0x0000, 0x160A,0x0000,0x0000, -0x160B,0x0000,0x0000, 0xFBC0,0x8A31,0x0000, 0x160C,0x0000,0x0000, -0x160C,0x0000,0x0000, 0xFBC0,0x8A34,0x0000, 0x160D,0x0000,0x0000, -0x15EF,0x0000,0x0000, 0xFBC0,0x8A37,0x0000, 0x15EF,0x0000,0x0000, -0x15F0,0x0000,0x0000, 0xFBC0,0x8A3A,0x0000, 0xFBC0,0x8A3B,0x0000, -0x0000,0x0000,0x0000, 0xFBC0,0x8A3D,0x0000, 0x160F,0x0000,0x0000, -0x1610,0x0000,0x0000, 0x1611,0x0000,0x0000, 0x1612,0x0000,0x0000, -0x1613,0x0000,0x0000, 0xFBC0,0x8A43,0x0000, 0xFBC0,0x8A44,0x0000, -0xFBC0,0x8A45,0x0000, 0xFBC0,0x8A46,0x0000, 0x1614,0x0000,0x0000, -0x1615,0x0000,0x0000, 0xFBC0,0x8A49,0x0000, 0xFBC0,0x8A4A,0x0000, -0x1616,0x0000,0x0000, 0x1617,0x0000,0x0000, 0x1618,0x0000,0x0000, -0xFBC0,0x8A4E,0x0000, 0xFBC0,0x8A4F,0x0000, 0xFBC0,0x8A50,0x0000, -0xFBC0,0x8A51,0x0000, 0xFBC0,0x8A52,0x0000, 0xFBC0,0x8A53,0x0000, -0xFBC0,0x8A54,0x0000, 0xFBC0,0x8A55,0x0000, 0xFBC0,0x8A56,0x0000, -0xFBC0,0x8A57,0x0000, 0xFBC0,0x8A58,0x0000, 0x15F2,0x0000,0x0000, -0x15F3,0x0000,0x0000, 0x15F8,0x0000,0x0000, 0x160E,0x0000,0x0000, -0xFBC0,0x8A5D,0x0000, 0x1606,0x0000,0x0000, 0xFBC0,0x8A5F,0x0000, -0xFBC0,0x8A60,0x0000, 0xFBC0,0x8A61,0x0000, 0xFBC0,0x8A62,0x0000, -0xFBC0,0x8A63,0x0000, 0xFBC0,0x8A64,0x0000, 0xFBC0,0x8A65,0x0000, -0x0E29,0x0000,0x0000, 0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, -0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, -0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, -0x0E32,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x15EB,0x0000,0x0000, 0x15E3,0x0000,0x0000, 0x15E2,0x0000,0x0000, -0xFBC0,0x8A75,0x0000, 0xFBC0,0x8A76,0x0000, 0xFBC0,0x8A77,0x0000, -0xFBC0,0x8A78,0x0000, 0xFBC0,0x8A79,0x0000, 0xFBC0,0x8A7A,0x0000, -0xFBC0,0x8A7B,0x0000, 0xFBC0,0x8A7C,0x0000, 0xFBC0,0x8A7D,0x0000, -0xFBC0,0x8A7E,0x0000, 0xFBC0,0x8A7F,0x0000, 0xFBC0,0x8A80,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0xFBC0,0x8A84,0x0000, 0x161A,0x0000,0x0000, 0x161B,0x0000,0x0000, -0x161C,0x0000,0x0000, 0x161D,0x0000,0x0000, 0x161E,0x0000,0x0000, -0x161F,0x0000,0x0000, 0x1620,0x0000,0x0000, 0x1622,0x0000,0x0000, -0x1624,0x0000,0x0000, 0xFBC0,0x8A8E,0x0000, 0x1625,0x0000,0x0000, -0x1626,0x0000,0x0000, 0x1627,0x0000,0x0000, 0xFBC0,0x8A92,0x0000, -0x1628,0x0000,0x0000, 0x1629,0x0000,0x0000, 0x162A,0x0000,0x0000, -0x162B,0x0000,0x0000, 0x162C,0x0000,0x0000, 0x162D,0x0000,0x0000, -0x162E,0x0000,0x0000, 0x162F,0x0000,0x0000, 0x1630,0x0000,0x0000, -0x1631,0x0000,0x0000, 0x1632,0x0000,0x0000, 0x1633,0x0000,0x0000, -0x1634,0x0000,0x0000, 0x1635,0x0000,0x0000, 0x1636,0x0000,0x0000, -0x1637,0x0000,0x0000, 0x1638,0x0000,0x0000, 0x1639,0x0000,0x0000, -0x163A,0x0000,0x0000, 0x163B,0x0000,0x0000, 0x163C,0x0000,0x0000, -0x163D,0x0000,0x0000, 0xFBC0,0x8AA9,0x0000, 0x163E,0x0000,0x0000, -0x163F,0x0000,0x0000, 0x1640,0x0000,0x0000, 0x1641,0x0000,0x0000, -0x1642,0x0000,0x0000, 0x1643,0x0000,0x0000, 0x1644,0x0000,0x0000, -0xFBC0,0x8AB1,0x0000, 0x1645,0x0000,0x0000, 0x1646,0x0000,0x0000, -0xFBC0,0x8AB4,0x0000, 0x1647,0x0000,0x0000, 0x1648,0x0000,0x0000, -0x1649,0x0000,0x0000, 0x164A,0x0000,0x0000, 0x164B,0x0000,0x0000, -0xFBC0,0x8ABA,0x0000, 0xFBC0,0x8ABB,0x0000, 0x0000,0x0000,0x0000, -0x164C,0x0000,0x0000, 0x164D,0x0000,0x0000, 0x164E,0x0000,0x0000, -0x164F,0x0000,0x0000, 0x1650,0x0000,0x0000, 0x1651,0x0000,0x0000, -0x1652,0x0000,0x0000, 0x1653,0x0000,0x0000, 0x1656,0x0000,0x0000, -0xFBC0,0x8AC6,0x0000, 0x1657,0x0000,0x0000, 0x1658,0x0000,0x0000, -0x1659,0x0000,0x0000, 0xFBC0,0x8ACA,0x0000, 0x165A,0x0000,0x0000, -0x165B,0x0000,0x0000, 0x165C,0x0000,0x0000, 0xFBC0,0x8ACE,0x0000, -0xFBC0,0x8ACF,0x0000, 0x1619,0x0000,0x0000, 0xFBC0,0x8AD1,0x0000, -0xFBC0,0x8AD2,0x0000, 0xFBC0,0x8AD3,0x0000, 0xFBC0,0x8AD4,0x0000, -0xFBC0,0x8AD5,0x0000, 0xFBC0,0x8AD6,0x0000, 0xFBC0,0x8AD7,0x0000, -0xFBC0,0x8AD8,0x0000, 0xFBC0,0x8AD9,0x0000, 0xFBC0,0x8ADA,0x0000, -0xFBC0,0x8ADB,0x0000, 0xFBC0,0x8ADC,0x0000, 0xFBC0,0x8ADD,0x0000, -0xFBC0,0x8ADE,0x0000, 0xFBC0,0x8ADF,0x0000, 0x1621,0x0000,0x0000, -0x1623,0x0000,0x0000, 0x1654,0x0000,0x0000, 0x1655,0x0000,0x0000, -0xFBC0,0x8AE4,0x0000, 0xFBC0,0x8AE5,0x0000, 0x0E29,0x0000,0x0000, -0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, -0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, -0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, -0xFBC0,0x8AF0,0x0000, 0x0E14,0x0000,0x0000, 0xFBC0,0x8AF2,0x0000, -0xFBC0,0x8AF3,0x0000, 0xFBC0,0x8AF4,0x0000, 0xFBC0,0x8AF5,0x0000, -0xFBC0,0x8AF6,0x0000, 0xFBC0,0x8AF7,0x0000, 0xFBC0,0x8AF8,0x0000, -0xFBC0,0x8AF9,0x0000, 0xFBC0,0x8AFA,0x0000, 0xFBC0,0x8AFB,0x0000, -0xFBC0,0x8AFC,0x0000, 0xFBC0,0x8AFD,0x0000, 0xFBC0,0x8AFE,0x0000, -0xFBC0,0x8AFF,0x0000 }; - -uint16 page00Bdata[]= { /* 0B00 (3 weights per char) */ -0xFBC0,0x8B00,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0xFBC0,0x8B04,0x0000, 0x165D,0x0000,0x0000, -0x165E,0x0000,0x0000, 0x165F,0x0000,0x0000, 0x1660,0x0000,0x0000, -0x1661,0x0000,0x0000, 0x1662,0x0000,0x0000, 0x1663,0x0000,0x0000, -0x1665,0x0000,0x0000, 0xFBC0,0x8B0D,0x0000, 0xFBC0,0x8B0E,0x0000, -0x1667,0x0000,0x0000, 0x1668,0x0000,0x0000, 0xFBC0,0x8B11,0x0000, -0xFBC0,0x8B12,0x0000, 0x1669,0x0000,0x0000, 0x166A,0x0000,0x0000, -0x166B,0x0000,0x0000, 0x166C,0x0000,0x0000, 0x166D,0x0000,0x0000, -0x166E,0x0000,0x0000, 0x166F,0x0000,0x0000, 0x1670,0x0000,0x0000, -0x1671,0x0000,0x0000, 0x1672,0x0000,0x0000, 0x1673,0x0000,0x0000, -0x1674,0x0000,0x0000, 0x1675,0x0000,0x0000, 0x1676,0x0000,0x0000, -0x1677,0x0000,0x0000, 0x1678,0x0000,0x0000, 0x1679,0x0000,0x0000, -0x167A,0x0000,0x0000, 0x167B,0x0000,0x0000, 0x167C,0x0000,0x0000, -0x167D,0x0000,0x0000, 0x167E,0x0000,0x0000, 0xFBC0,0x8B29,0x0000, -0x167F,0x0000,0x0000, 0x1680,0x0000,0x0000, 0x1681,0x0000,0x0000, -0x1682,0x0000,0x0000, 0x1683,0x0000,0x0000, 0x1684,0x0000,0x0000, -0x1686,0x0000,0x0000, 0xFBC0,0x8B31,0x0000, 0x1687,0x0000,0x0000, -0x1688,0x0000,0x0000, 0xFBC0,0x8B34,0x0000, 0x1689,0x0000,0x0000, -0x168B,0x0000,0x0000, 0x168C,0x0000,0x0000, 0x168D,0x0000,0x0000, -0x168E,0x0000,0x0000, 0xFBC0,0x8B3A,0x0000, 0xFBC0,0x8B3B,0x0000, -0x0000,0x0000,0x0000, 0x168F,0x0000,0x0000, 0x1690,0x0000,0x0000, -0x1691,0x0000,0x0000, 0x1692,0x0000,0x0000, 0x1693,0x0000,0x0000, -0x1694,0x0000,0x0000, 0x1695,0x0000,0x0000, 0xFBC0,0x8B44,0x0000, -0xFBC0,0x8B45,0x0000, 0xFBC0,0x8B46,0x0000, 0x1696,0x0000,0x0000, -0x1697,0x0000,0x0000, 0xFBC0,0x8B49,0x0000, 0xFBC0,0x8B4A,0x0000, -0x1698,0x0000,0x0000, 0x1699,0x0000,0x0000, 0x169A,0x0000,0x0000, -0xFBC0,0x8B4E,0x0000, 0xFBC0,0x8B4F,0x0000, 0xFBC0,0x8B50,0x0000, -0xFBC0,0x8B51,0x0000, 0xFBC0,0x8B52,0x0000, 0xFBC0,0x8B53,0x0000, -0xFBC0,0x8B54,0x0000, 0xFBC0,0x8B55,0x0000, 0x169B,0x0000,0x0000, -0x169C,0x0000,0x0000, 0xFBC0,0x8B58,0x0000, 0xFBC0,0x8B59,0x0000, -0xFBC0,0x8B5A,0x0000, 0xFBC0,0x8B5B,0x0000, 0x1677,0x0000,0x0000, -0x1678,0x0000,0x0000, 0xFBC0,0x8B5E,0x0000, 0x1685,0x0000,0x0000, -0x1664,0x0000,0x0000, 0x1666,0x0000,0x0000, 0xFBC0,0x8B62,0x0000, -0xFBC0,0x8B63,0x0000, 0xFBC0,0x8B64,0x0000, 0xFBC0,0x8B65,0x0000, -0x0E29,0x0000,0x0000, 0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, -0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, -0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, -0x0E32,0x0000,0x0000, 0x0351,0x0000,0x0000, 0x168A,0x0000,0x0000, -0xFBC0,0x8B72,0x0000, 0xFBC0,0x8B73,0x0000, 0xFBC0,0x8B74,0x0000, -0xFBC0,0x8B75,0x0000, 0xFBC0,0x8B76,0x0000, 0xFBC0,0x8B77,0x0000, -0xFBC0,0x8B78,0x0000, 0xFBC0,0x8B79,0x0000, 0xFBC0,0x8B7A,0x0000, -0xFBC0,0x8B7B,0x0000, 0xFBC0,0x8B7C,0x0000, 0xFBC0,0x8B7D,0x0000, -0xFBC0,0x8B7E,0x0000, 0xFBC0,0x8B7F,0x0000, 0xFBC0,0x8B80,0x0000, -0xFBC0,0x8B81,0x0000, 0x0000,0x0000,0x0000, 0x169D,0x0000,0x0000, -0xFBC0,0x8B84,0x0000, 0x169E,0x0000,0x0000, 0x169F,0x0000,0x0000, -0x16A0,0x0000,0x0000, 0x16A1,0x0000,0x0000, 0x16A2,0x0000,0x0000, -0x16A3,0x0000,0x0000, 0xFBC0,0x8B8B,0x0000, 0xFBC0,0x8B8C,0x0000, -0xFBC0,0x8B8D,0x0000, 0x16A4,0x0000,0x0000, 0x16A5,0x0000,0x0000, -0x16A6,0x0000,0x0000, 0xFBC0,0x8B91,0x0000, 0x16A7,0x0000,0x0000, -0x16A8,0x0000,0x0000, 0x16A9,0x0000,0x0000, 0x16AA,0x0000,0x0000, -0xFBC0,0x8B96,0x0000, 0xFBC0,0x8B97,0x0000, 0xFBC0,0x8B98,0x0000, -0x16AB,0x0000,0x0000, 0x16AC,0x0000,0x0000, 0xFBC0,0x8B9B,0x0000, -0x16AD,0x0000,0x0000, 0xFBC0,0x8B9D,0x0000, 0x16AE,0x0000,0x0000, -0x16AF,0x0000,0x0000, 0xFBC0,0x8BA0,0x0000, 0xFBC0,0x8BA1,0x0000, -0xFBC0,0x8BA2,0x0000, 0x16B0,0x0000,0x0000, 0x16B1,0x0000,0x0000, -0xFBC0,0x8BA5,0x0000, 0xFBC0,0x8BA6,0x0000, 0xFBC0,0x8BA7,0x0000, -0x16B2,0x0000,0x0000, 0x16B3,0x0000,0x0000, 0x16B4,0x0000,0x0000, -0xFBC0,0x8BAB,0x0000, 0xFBC0,0x8BAC,0x0000, 0xFBC0,0x8BAD,0x0000, -0x16B5,0x0000,0x0000, 0x16B6,0x0000,0x0000, 0x16B7,0x0000,0x0000, -0x16B8,0x0000,0x0000, 0x16B9,0x0000,0x0000, 0x16BA,0x0000,0x0000, -0x16BB,0x0000,0x0000, 0x16BC,0x0000,0x0000, 0xFBC0,0x8BB6,0x0000, -0x16BD,0x0000,0x0000, 0x16BE,0x0000,0x0000, 0x16BF,0x0000,0x0000, -0xFBC0,0x8BBA,0x0000, 0xFBC0,0x8BBB,0x0000, 0xFBC0,0x8BBC,0x0000, -0xFBC0,0x8BBD,0x0000, 0x16C0,0x0000,0x0000, 0x16C1,0x0000,0x0000, -0x16C2,0x0000,0x0000, 0x16C3,0x0000,0x0000, 0x16C4,0x0000,0x0000, -0xFBC0,0x8BC3,0x0000, 0xFBC0,0x8BC4,0x0000, 0xFBC0,0x8BC5,0x0000, -0x16C5,0x0000,0x0000, 0x16C6,0x0000,0x0000, 0x16C7,0x0000,0x0000, -0xFBC0,0x8BC9,0x0000, 0x16C8,0x0000,0x0000, 0x16C9,0x0000,0x0000, -0x16CA,0x0000,0x0000, 0x16CB,0x0000,0x0000, 0xFBC0,0x8BCE,0x0000, -0xFBC0,0x8BCF,0x0000, 0xFBC0,0x8BD0,0x0000, 0xFBC0,0x8BD1,0x0000, -0xFBC0,0x8BD2,0x0000, 0xFBC0,0x8BD3,0x0000, 0xFBC0,0x8BD4,0x0000, -0xFBC0,0x8BD5,0x0000, 0xFBC0,0x8BD6,0x0000, 0x16CC,0x0000,0x0000, -0xFBC0,0x8BD8,0x0000, 0xFBC0,0x8BD9,0x0000, 0xFBC0,0x8BDA,0x0000, -0xFBC0,0x8BDB,0x0000, 0xFBC0,0x8BDC,0x0000, 0xFBC0,0x8BDD,0x0000, -0xFBC0,0x8BDE,0x0000, 0xFBC0,0x8BDF,0x0000, 0xFBC0,0x8BE0,0x0000, -0xFBC0,0x8BE1,0x0000, 0xFBC0,0x8BE2,0x0000, 0xFBC0,0x8BE3,0x0000, -0xFBC0,0x8BE4,0x0000, 0xFBC0,0x8BE5,0x0000, 0xFBC0,0x8BE6,0x0000, -0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, -0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, -0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, -0x0DC9,0x0000,0x0000, 0x0DCA,0x0000,0x0000, 0x0DCB,0x0000,0x0000, -0x0352,0x0000,0x0000, 0x0353,0x0000,0x0000, 0x0354,0x0000,0x0000, -0x0355,0x0000,0x0000, 0x0356,0x0000,0x0000, 0x0357,0x0000,0x0000, -0x0E15,0x0000,0x0000, 0x0358,0x0000,0x0000, 0xFBC0,0x8BFB,0x0000, -0xFBC0,0x8BFC,0x0000, 0xFBC0,0x8BFD,0x0000, 0xFBC0,0x8BFE,0x0000, -0xFBC0,0x8BFF,0x0000 }; - -uint16 page00Cdata[]= { /* 0C00 (3 weights per char) */ -0xFBC0,0x8C00,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0xFBC0,0x8C04,0x0000, 0x16CD,0x0000,0x0000, -0x16CE,0x0000,0x0000, 0x16CF,0x0000,0x0000, 0x16D0,0x0000,0x0000, -0x16D1,0x0000,0x0000, 0x16D2,0x0000,0x0000, 0x16D3,0x0000,0x0000, -0x16D5,0x0000,0x0000, 0xFBC0,0x8C0D,0x0000, 0x16D7,0x0000,0x0000, -0x16D8,0x0000,0x0000, 0x16D9,0x0000,0x0000, 0xFBC0,0x8C11,0x0000, -0x16DA,0x0000,0x0000, 0x16DB,0x0000,0x0000, 0x16DC,0x0000,0x0000, -0x16DD,0x0000,0x0000, 0x16DE,0x0000,0x0000, 0x16DF,0x0000,0x0000, -0x16E0,0x0000,0x0000, 0x16E1,0x0000,0x0000, 0x16E2,0x0000,0x0000, -0x16E3,0x0000,0x0000, 0x16E4,0x0000,0x0000, 0x16E5,0x0000,0x0000, -0x16E6,0x0000,0x0000, 0x16E7,0x0000,0x0000, 0x16E8,0x0000,0x0000, -0x16E9,0x0000,0x0000, 0x16EA,0x0000,0x0000, 0x16EB,0x0000,0x0000, -0x16EC,0x0000,0x0000, 0x16ED,0x0000,0x0000, 0x16EE,0x0000,0x0000, -0x16EF,0x0000,0x0000, 0x16F0,0x0000,0x0000, 0xFBC0,0x8C29,0x0000, -0x16F1,0x0000,0x0000, 0x16F2,0x0000,0x0000, 0x16F3,0x0000,0x0000, -0x16F4,0x0000,0x0000, 0x16F5,0x0000,0x0000, 0x16F6,0x0000,0x0000, -0x16F7,0x0000,0x0000, 0x16F8,0x0000,0x0000, 0x16F9,0x0000,0x0000, -0x16FA,0x0000,0x0000, 0xFBC0,0x8C34,0x0000, 0x16FB,0x0000,0x0000, -0x16FC,0x0000,0x0000, 0x16FD,0x0000,0x0000, 0x16FE,0x0000,0x0000, -0x16FF,0x0000,0x0000, 0xFBC0,0x8C3A,0x0000, 0xFBC0,0x8C3B,0x0000, -0xFBC0,0x8C3C,0x0000, 0xFBC0,0x8C3D,0x0000, 0x1700,0x0000,0x0000, -0x1701,0x0000,0x0000, 0x1702,0x0000,0x0000, 0x1703,0x0000,0x0000, -0x1704,0x0000,0x0000, 0x1705,0x0000,0x0000, 0x1706,0x0000,0x0000, -0xFBC0,0x8C45,0x0000, 0x1707,0x0000,0x0000, 0x1708,0x0000,0x0000, -0x1709,0x0000,0x0000, 0xFBC0,0x8C49,0x0000, 0x170A,0x0000,0x0000, -0x170B,0x0000,0x0000, 0x170C,0x0000,0x0000, 0x170D,0x0000,0x0000, -0xFBC0,0x8C4E,0x0000, 0xFBC0,0x8C4F,0x0000, 0xFBC0,0x8C50,0x0000, -0xFBC0,0x8C51,0x0000, 0xFBC0,0x8C52,0x0000, 0xFBC0,0x8C53,0x0000, -0xFBC0,0x8C54,0x0000, 0x170E,0x0000,0x0000, 0x170F,0x0000,0x0000, -0xFBC0,0x8C57,0x0000, 0xFBC0,0x8C58,0x0000, 0xFBC0,0x8C59,0x0000, -0xFBC0,0x8C5A,0x0000, 0xFBC0,0x8C5B,0x0000, 0xFBC0,0x8C5C,0x0000, -0xFBC0,0x8C5D,0x0000, 0xFBC0,0x8C5E,0x0000, 0xFBC0,0x8C5F,0x0000, -0x16D4,0x0000,0x0000, 0x16D6,0x0000,0x0000, 0xFBC0,0x8C62,0x0000, -0xFBC0,0x8C63,0x0000, 0xFBC0,0x8C64,0x0000, 0xFBC0,0x8C65,0x0000, -0x0E29,0x0000,0x0000, 0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, -0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, -0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, -0x0E32,0x0000,0x0000, 0xFBC0,0x8C70,0x0000, 0xFBC0,0x8C71,0x0000, -0xFBC0,0x8C72,0x0000, 0xFBC0,0x8C73,0x0000, 0xFBC0,0x8C74,0x0000, -0xFBC0,0x8C75,0x0000, 0xFBC0,0x8C76,0x0000, 0xFBC0,0x8C77,0x0000, -0xFBC0,0x8C78,0x0000, 0xFBC0,0x8C79,0x0000, 0xFBC0,0x8C7A,0x0000, -0xFBC0,0x8C7B,0x0000, 0xFBC0,0x8C7C,0x0000, 0xFBC0,0x8C7D,0x0000, -0xFBC0,0x8C7E,0x0000, 0xFBC0,0x8C7F,0x0000, 0xFBC0,0x8C80,0x0000, -0xFBC0,0x8C81,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0xFBC0,0x8C84,0x0000, 0x1710,0x0000,0x0000, 0x1711,0x0000,0x0000, -0x1712,0x0000,0x0000, 0x1713,0x0000,0x0000, 0x1714,0x0000,0x0000, -0x1715,0x0000,0x0000, 0x1716,0x0000,0x0000, 0x1718,0x0000,0x0000, -0xFBC0,0x8C8D,0x0000, 0x171A,0x0000,0x0000, 0x171B,0x0000,0x0000, -0x171C,0x0000,0x0000, 0xFBC0,0x8C91,0x0000, 0x171D,0x0000,0x0000, -0x171E,0x0000,0x0000, 0x171F,0x0000,0x0000, 0x1720,0x0000,0x0000, -0x1721,0x0000,0x0000, 0x1722,0x0000,0x0000, 0x1723,0x0000,0x0000, -0x1724,0x0000,0x0000, 0x1725,0x0000,0x0000, 0x1726,0x0000,0x0000, -0x1727,0x0000,0x0000, 0x1728,0x0000,0x0000, 0x1729,0x0000,0x0000, -0x172A,0x0000,0x0000, 0x172B,0x0000,0x0000, 0x172C,0x0000,0x0000, -0x172D,0x0000,0x0000, 0x172E,0x0000,0x0000, 0x172F,0x0000,0x0000, -0x1730,0x0000,0x0000, 0x1731,0x0000,0x0000, 0x1732,0x0000,0x0000, -0x1733,0x0000,0x0000, 0xFBC0,0x8CA9,0x0000, 0x1734,0x0000,0x0000, -0x1735,0x0000,0x0000, 0x1736,0x0000,0x0000, 0x1737,0x0000,0x0000, -0x1738,0x0000,0x0000, 0x1739,0x0000,0x0000, 0x173A,0x0000,0x0000, -0x173B,0x0000,0x0000, 0x173C,0x0000,0x0000, 0x1743,0x0000,0x0000, -0xFBC0,0x8CB4,0x0000, 0x173D,0x0000,0x0000, 0x173E,0x0000,0x0000, -0x173F,0x0000,0x0000, 0x1740,0x0000,0x0000, 0x1741,0x0000,0x0000, -0xFBC0,0x8CBA,0x0000, 0xFBC0,0x8CBB,0x0000, 0x0000,0x0000,0x0000, -0x1742,0x0000,0x0000, 0x1745,0x0000,0x0000, 0x1746,0x0000,0x0000, -0x1747,0x0000,0x0000, 0x1748,0x0000,0x0000, 0x1749,0x0000,0x0000, -0x174A,0x0000,0x0000, 0x174B,0x0000,0x0000, 0xFBC0,0x8CC5,0x0000, -0x174C,0x0000,0x0000, 0x174D,0x0000,0x0000, 0x174E,0x0000,0x0000, -0xFBC0,0x8CC9,0x0000, 0x174F,0x0000,0x0000, 0x1750,0x0000,0x0000, -0x1751,0x0000,0x0000, 0x1752,0x0000,0x0000, 0xFBC0,0x8CCE,0x0000, -0xFBC0,0x8CCF,0x0000, 0xFBC0,0x8CD0,0x0000, 0xFBC0,0x8CD1,0x0000, -0xFBC0,0x8CD2,0x0000, 0xFBC0,0x8CD3,0x0000, 0xFBC0,0x8CD4,0x0000, -0x1753,0x0000,0x0000, 0x1754,0x0000,0x0000, 0xFBC0,0x8CD7,0x0000, -0xFBC0,0x8CD8,0x0000, 0xFBC0,0x8CD9,0x0000, 0xFBC0,0x8CDA,0x0000, -0xFBC0,0x8CDB,0x0000, 0xFBC0,0x8CDC,0x0000, 0xFBC0,0x8CDD,0x0000, -0x1744,0x0000,0x0000, 0xFBC0,0x8CDF,0x0000, 0x1717,0x0000,0x0000, -0x1719,0x0000,0x0000, 0xFBC0,0x8CE2,0x0000, 0xFBC0,0x8CE3,0x0000, -0xFBC0,0x8CE4,0x0000, 0xFBC0,0x8CE5,0x0000, 0x0E29,0x0000,0x0000, -0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, -0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, -0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, -0xFBC0,0x8CF0,0x0000, 0xFBC0,0x8CF1,0x0000, 0xFBC0,0x8CF2,0x0000, -0xFBC0,0x8CF3,0x0000, 0xFBC0,0x8CF4,0x0000, 0xFBC0,0x8CF5,0x0000, -0xFBC0,0x8CF6,0x0000, 0xFBC0,0x8CF7,0x0000, 0xFBC0,0x8CF8,0x0000, -0xFBC0,0x8CF9,0x0000, 0xFBC0,0x8CFA,0x0000, 0xFBC0,0x8CFB,0x0000, -0xFBC0,0x8CFC,0x0000, 0xFBC0,0x8CFD,0x0000, 0xFBC0,0x8CFE,0x0000, -0xFBC0,0x8CFF,0x0000 }; - -uint16 page00Ddata[]= { /* 0D00 (3 weights per char) */ -0xFBC0,0x8D00,0x0000, 0xFBC0,0x8D01,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0xFBC0,0x8D04,0x0000, 0x1755,0x0000,0x0000, -0x1756,0x0000,0x0000, 0x1757,0x0000,0x0000, 0x1758,0x0000,0x0000, -0x1759,0x0000,0x0000, 0x175A,0x0000,0x0000, 0x175B,0x0000,0x0000, -0x175D,0x0000,0x0000, 0xFBC0,0x8D0D,0x0000, 0x175F,0x0000,0x0000, -0x1760,0x0000,0x0000, 0x1761,0x0000,0x0000, 0xFBC0,0x8D11,0x0000, -0x1762,0x0000,0x0000, 0x1763,0x0000,0x0000, 0x1764,0x0000,0x0000, -0x1765,0x0000,0x0000, 0x1766,0x0000,0x0000, 0x1767,0x0000,0x0000, -0x1768,0x0000,0x0000, 0x1769,0x0000,0x0000, 0x176A,0x0000,0x0000, -0x176B,0x0000,0x0000, 0x176C,0x0000,0x0000, 0x176D,0x0000,0x0000, -0x176E,0x0000,0x0000, 0x176F,0x0000,0x0000, 0x1770,0x0000,0x0000, -0x1771,0x0000,0x0000, 0x1772,0x0000,0x0000, 0x1773,0x0000,0x0000, -0x1774,0x0000,0x0000, 0x1775,0x0000,0x0000, 0x1776,0x0000,0x0000, -0x1777,0x0000,0x0000, 0x1778,0x0000,0x0000, 0xFBC0,0x8D29,0x0000, -0x1779,0x0000,0x0000, 0x177A,0x0000,0x0000, 0x177B,0x0000,0x0000, -0x177C,0x0000,0x0000, 0x177D,0x0000,0x0000, 0x177E,0x0000,0x0000, -0x177F,0x0000,0x0000, 0x1780,0x0000,0x0000, 0x1781,0x0000,0x0000, -0x1782,0x0000,0x0000, 0x1783,0x0000,0x0000, 0x1784,0x0000,0x0000, -0x1785,0x0000,0x0000, 0x1786,0x0000,0x0000, 0x1787,0x0000,0x0000, -0x1788,0x0000,0x0000, 0xFBC0,0x8D3A,0x0000, 0xFBC0,0x8D3B,0x0000, -0xFBC0,0x8D3C,0x0000, 0xFBC0,0x8D3D,0x0000, 0x1789,0x0000,0x0000, -0x178A,0x0000,0x0000, 0x178B,0x0000,0x0000, 0x178C,0x0000,0x0000, -0x178D,0x0000,0x0000, 0x178E,0x0000,0x0000, 0xFBC0,0x8D44,0x0000, -0xFBC0,0x8D45,0x0000, 0x178F,0x0000,0x0000, 0x1790,0x0000,0x0000, -0x1791,0x0000,0x0000, 0xFBC0,0x8D49,0x0000, 0x1792,0x0000,0x0000, -0x1793,0x0000,0x0000, 0x1794,0x0000,0x0000, 0x1795,0x0000,0x0000, -0xFBC0,0x8D4E,0x0000, 0xFBC0,0x8D4F,0x0000, 0xFBC0,0x8D50,0x0000, -0xFBC0,0x8D51,0x0000, 0xFBC0,0x8D52,0x0000, 0xFBC0,0x8D53,0x0000, -0xFBC0,0x8D54,0x0000, 0xFBC0,0x8D55,0x0000, 0xFBC0,0x8D56,0x0000, -0x1796,0x0000,0x0000, 0xFBC0,0x8D58,0x0000, 0xFBC0,0x8D59,0x0000, -0xFBC0,0x8D5A,0x0000, 0xFBC0,0x8D5B,0x0000, 0xFBC0,0x8D5C,0x0000, -0xFBC0,0x8D5D,0x0000, 0xFBC0,0x8D5E,0x0000, 0xFBC0,0x8D5F,0x0000, -0x175C,0x0000,0x0000, 0x175E,0x0000,0x0000, 0xFBC0,0x8D62,0x0000, -0xFBC0,0x8D63,0x0000, 0xFBC0,0x8D64,0x0000, 0xFBC0,0x8D65,0x0000, -0x0E29,0x0000,0x0000, 0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, -0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, -0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, -0x0E32,0x0000,0x0000, 0xFBC0,0x8D70,0x0000, 0xFBC0,0x8D71,0x0000, -0xFBC0,0x8D72,0x0000, 0xFBC0,0x8D73,0x0000, 0xFBC0,0x8D74,0x0000, -0xFBC0,0x8D75,0x0000, 0xFBC0,0x8D76,0x0000, 0xFBC0,0x8D77,0x0000, -0xFBC0,0x8D78,0x0000, 0xFBC0,0x8D79,0x0000, 0xFBC0,0x8D7A,0x0000, -0xFBC0,0x8D7B,0x0000, 0xFBC0,0x8D7C,0x0000, 0xFBC0,0x8D7D,0x0000, -0xFBC0,0x8D7E,0x0000, 0xFBC0,0x8D7F,0x0000, 0xFBC0,0x8D80,0x0000, -0xFBC0,0x8D81,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0xFBC0,0x8D84,0x0000, 0x1797,0x0000,0x0000, 0x1798,0x0000,0x0000, -0x1799,0x0000,0x0000, 0x179A,0x0000,0x0000, 0x179B,0x0000,0x0000, -0x179C,0x0000,0x0000, 0x179D,0x0000,0x0000, 0x179E,0x0000,0x0000, -0x179F,0x0000,0x0000, 0x17A0,0x0000,0x0000, 0x17A1,0x0000,0x0000, -0x17A2,0x0000,0x0000, 0x17A3,0x0000,0x0000, 0x17A4,0x0000,0x0000, -0x17A5,0x0000,0x0000, 0x17A6,0x0000,0x0000, 0x17A7,0x0000,0x0000, -0x17A8,0x0000,0x0000, 0xFBC0,0x8D97,0x0000, 0xFBC0,0x8D98,0x0000, -0xFBC0,0x8D99,0x0000, 0x17A9,0x0000,0x0000, 0x17AA,0x0000,0x0000, -0x17AB,0x0000,0x0000, 0x17AC,0x0000,0x0000, 0x17AD,0x0000,0x0000, -0x17AE,0x0000,0x0000, 0x17AF,0x0000,0x0000, 0x17B0,0x0000,0x0000, -0x17B1,0x0000,0x0000, 0x17B2,0x0000,0x0000, 0x17B3,0x0000,0x0000, -0x17B4,0x0000,0x0000, 0x17B5,0x0000,0x0000, 0x17B6,0x0000,0x0000, -0x17B7,0x0000,0x0000, 0x17B8,0x0000,0x0000, 0x17B9,0x0000,0x0000, -0x17BA,0x0000,0x0000, 0x17BB,0x0000,0x0000, 0x17BC,0x0000,0x0000, -0x17BD,0x0000,0x0000, 0x17BE,0x0000,0x0000, 0x17BF,0x0000,0x0000, -0x17C0,0x0000,0x0000, 0xFBC0,0x8DB2,0x0000, 0x17C1,0x0000,0x0000, -0x17C2,0x0000,0x0000, 0x17C3,0x0000,0x0000, 0x17C4,0x0000,0x0000, -0x17C5,0x0000,0x0000, 0x17C6,0x0000,0x0000, 0x17C7,0x0000,0x0000, -0x17C8,0x0000,0x0000, 0x17C9,0x0000,0x0000, 0xFBC0,0x8DBC,0x0000, -0x17CA,0x0000,0x0000, 0xFBC0,0x8DBE,0x0000, 0xFBC0,0x8DBF,0x0000, -0x17CB,0x0000,0x0000, 0x17CC,0x0000,0x0000, 0x17CD,0x0000,0x0000, -0x17CE,0x0000,0x0000, 0x17CF,0x0000,0x0000, 0x17D0,0x0000,0x0000, -0x17D1,0x0000,0x0000, 0xFBC0,0x8DC7,0x0000, 0xFBC0,0x8DC8,0x0000, -0xFBC0,0x8DC9,0x0000, 0x17D2,0x0000,0x0000, 0xFBC0,0x8DCB,0x0000, -0xFBC0,0x8DCC,0x0000, 0xFBC0,0x8DCD,0x0000, 0xFBC0,0x8DCE,0x0000, -0x17D3,0x0000,0x0000, 0x17D4,0x0000,0x0000, 0x17D5,0x0000,0x0000, -0x17D6,0x0000,0x0000, 0x17D7,0x0000,0x0000, 0x17D8,0x0000,0x0000, -0xFBC0,0x8DD5,0x0000, 0x17D9,0x0000,0x0000, 0xFBC0,0x8DD7,0x0000, -0x17DA,0x0000,0x0000, 0x17DB,0x0000,0x0000, 0x17DC,0x0000,0x0000, -0x17DD,0x0000,0x0000, 0x17DE,0x0000,0x0000, 0x17DF,0x0000,0x0000, -0x17E0,0x0000,0x0000, 0x17E1,0x0000,0x0000, 0xFBC0,0x8DE0,0x0000, -0xFBC0,0x8DE1,0x0000, 0xFBC0,0x8DE2,0x0000, 0xFBC0,0x8DE3,0x0000, -0xFBC0,0x8DE4,0x0000, 0xFBC0,0x8DE5,0x0000, 0xFBC0,0x8DE6,0x0000, -0xFBC0,0x8DE7,0x0000, 0xFBC0,0x8DE8,0x0000, 0xFBC0,0x8DE9,0x0000, -0xFBC0,0x8DEA,0x0000, 0xFBC0,0x8DEB,0x0000, 0xFBC0,0x8DEC,0x0000, -0xFBC0,0x8DED,0x0000, 0xFBC0,0x8DEE,0x0000, 0xFBC0,0x8DEF,0x0000, -0xFBC0,0x8DF0,0x0000, 0xFBC0,0x8DF1,0x0000, 0x17E2,0x0000,0x0000, -0x17E3,0x0000,0x0000, 0x02FB,0x0000,0x0000, 0xFBC0,0x8DF5,0x0000, -0xFBC0,0x8DF6,0x0000, 0xFBC0,0x8DF7,0x0000, 0xFBC0,0x8DF8,0x0000, -0xFBC0,0x8DF9,0x0000, 0xFBC0,0x8DFA,0x0000, 0xFBC0,0x8DFB,0x0000, -0xFBC0,0x8DFC,0x0000, 0xFBC0,0x8DFD,0x0000, 0xFBC0,0x8DFE,0x0000, -0xFBC0,0x8DFF,0x0000 }; - -uint16 page00Edata[]= { /* 0E00 (3 weights per char) */ -0xFBC0,0x8E00,0x0000, 0x17E4,0x0000,0x0000, 0x17E5,0x0000,0x0000, -0x17E6,0x0000,0x0000, 0x17E7,0x0000,0x0000, 0x17E8,0x0000,0x0000, -0x17E9,0x0000,0x0000, 0x17EA,0x0000,0x0000, 0x17EB,0x0000,0x0000, -0x17EC,0x0000,0x0000, 0x17ED,0x0000,0x0000, 0x17EE,0x0000,0x0000, -0x17EF,0x0000,0x0000, 0x17F0,0x0000,0x0000, 0x17F1,0x0000,0x0000, -0x17F2,0x0000,0x0000, 0x17F3,0x0000,0x0000, 0x17F4,0x0000,0x0000, -0x17F5,0x0000,0x0000, 0x17F6,0x0000,0x0000, 0x17F7,0x0000,0x0000, -0x17F8,0x0000,0x0000, 0x17F9,0x0000,0x0000, 0x17FA,0x0000,0x0000, -0x17FB,0x0000,0x0000, 0x17FC,0x0000,0x0000, 0x17FD,0x0000,0x0000, -0x17FE,0x0000,0x0000, 0x17FF,0x0000,0x0000, 0x1800,0x0000,0x0000, -0x1801,0x0000,0x0000, 0x1802,0x0000,0x0000, 0x1803,0x0000,0x0000, -0x1804,0x0000,0x0000, 0x1805,0x0000,0x0000, 0x1806,0x0000,0x0000, -0x1807,0x0000,0x0000, 0x1808,0x0000,0x0000, 0x1809,0x0000,0x0000, -0x180A,0x0000,0x0000, 0x180B,0x0000,0x0000, 0x180C,0x0000,0x0000, -0x180D,0x0000,0x0000, 0x180E,0x0000,0x0000, 0x180F,0x0000,0x0000, -0x1810,0x0000,0x0000, 0x1811,0x0000,0x0000, 0x1812,0x0000,0x0000, -0x1813,0x0000,0x0000, 0x1814,0x0000,0x0000, 0x1815,0x0000,0x0000, -0x1816,0x0000,0x0000, 0x1817,0x0000,0x0000, 0x1818,0x0000,0x0000, -0x1819,0x0000,0x0000, 0x181A,0x0000,0x0000, 0x181B,0x0000,0x0000, -0x181C,0x0000,0x0000, 0x181D,0x0000,0x0000, 0xFBC0,0x8E3B,0x0000, -0xFBC0,0x8E3C,0x0000, 0xFBC0,0x8E3D,0x0000, 0xFBC0,0x8E3E,0x0000, -0x0E16,0x0000,0x0000, 0x181E,0x0000,0x0000, 0x181F,0x0000,0x0000, -0x1820,0x0000,0x0000, 0x1821,0x0000,0x0000, 0x1822,0x0000,0x0000, -0x1823,0x0000,0x0000, 0x0E03,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x1824,0x0000,0x0000, 0x1825,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0359,0x0000,0x0000, 0x0E29,0x0000,0x0000, -0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, -0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, -0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, -0x02FC,0x0000,0x0000, 0x02FD,0x0000,0x0000, 0xFBC0,0x8E5C,0x0000, -0xFBC0,0x8E5D,0x0000, 0xFBC0,0x8E5E,0x0000, 0xFBC0,0x8E5F,0x0000, -0xFBC0,0x8E60,0x0000, 0xFBC0,0x8E61,0x0000, 0xFBC0,0x8E62,0x0000, -0xFBC0,0x8E63,0x0000, 0xFBC0,0x8E64,0x0000, 0xFBC0,0x8E65,0x0000, -0xFBC0,0x8E66,0x0000, 0xFBC0,0x8E67,0x0000, 0xFBC0,0x8E68,0x0000, -0xFBC0,0x8E69,0x0000, 0xFBC0,0x8E6A,0x0000, 0xFBC0,0x8E6B,0x0000, -0xFBC0,0x8E6C,0x0000, 0xFBC0,0x8E6D,0x0000, 0xFBC0,0x8E6E,0x0000, -0xFBC0,0x8E6F,0x0000, 0xFBC0,0x8E70,0x0000, 0xFBC0,0x8E71,0x0000, -0xFBC0,0x8E72,0x0000, 0xFBC0,0x8E73,0x0000, 0xFBC0,0x8E74,0x0000, -0xFBC0,0x8E75,0x0000, 0xFBC0,0x8E76,0x0000, 0xFBC0,0x8E77,0x0000, -0xFBC0,0x8E78,0x0000, 0xFBC0,0x8E79,0x0000, 0xFBC0,0x8E7A,0x0000, -0xFBC0,0x8E7B,0x0000, 0xFBC0,0x8E7C,0x0000, 0xFBC0,0x8E7D,0x0000, -0xFBC0,0x8E7E,0x0000, 0xFBC0,0x8E7F,0x0000, 0xFBC0,0x8E80,0x0000, -0x1826,0x0000,0x0000, 0x1827,0x0000,0x0000, 0xFBC0,0x8E83,0x0000, -0x1828,0x0000,0x0000, 0xFBC0,0x8E85,0x0000, 0xFBC0,0x8E86,0x0000, -0x1829,0x0000,0x0000, 0x182A,0x0000,0x0000, 0xFBC0,0x8E89,0x0000, -0x182B,0x0000,0x0000, 0xFBC0,0x8E8B,0x0000, 0xFBC0,0x8E8C,0x0000, -0x182C,0x0000,0x0000, 0xFBC0,0x8E8E,0x0000, 0xFBC0,0x8E8F,0x0000, -0xFBC0,0x8E90,0x0000, 0xFBC0,0x8E91,0x0000, 0xFBC0,0x8E92,0x0000, -0xFBC0,0x8E93,0x0000, 0x182D,0x0000,0x0000, 0x182E,0x0000,0x0000, -0x182F,0x0000,0x0000, 0x1830,0x0000,0x0000, 0xFBC0,0x8E98,0x0000, -0x1831,0x0000,0x0000, 0x1832,0x0000,0x0000, 0x1833,0x0000,0x0000, -0x1834,0x0000,0x0000, 0x1835,0x0000,0x0000, 0x1836,0x0000,0x0000, -0x1837,0x0000,0x0000, 0xFBC0,0x8EA0,0x0000, 0x1838,0x0000,0x0000, -0x1839,0x0000,0x0000, 0x183A,0x0000,0x0000, 0xFBC0,0x8EA4,0x0000, -0x183B,0x0000,0x0000, 0xFBC0,0x8EA6,0x0000, 0x183C,0x0000,0x0000, -0xFBC0,0x8EA8,0x0000, 0xFBC0,0x8EA9,0x0000, 0x183D,0x0000,0x0000, -0x183E,0x0000,0x0000, 0xFBC0,0x8EAC,0x0000, 0x183F,0x0000,0x0000, -0x1840,0x0000,0x0000, 0x1841,0x0000,0x0000, 0x1842,0x0000,0x0000, -0x1843,0x0000,0x0000, 0x1844,0x0000,0x0000, 0x1845,0x0000,0x0000, -0x1846,0x0000,0x0000, 0x1847,0x0000,0x0000, 0x1848,0x0000,0x0000, -0x1849,0x0000,0x0000, 0x184A,0x0000,0x0000, 0x184B,0x0000,0x0000, -0xFBC0,0x8EBA,0x0000, 0x184C,0x0000,0x0000, 0x184D,0x0000,0x0000, -0x184E,0x0000,0x0000, 0xFBC0,0x8EBE,0x0000, 0xFBC0,0x8EBF,0x0000, -0x184F,0x0000,0x0000, 0x1850,0x0000,0x0000, 0x1851,0x0000,0x0000, -0x1852,0x0000,0x0000, 0x1853,0x0000,0x0000, 0xFBC0,0x8EC5,0x0000, -0x0E04,0x0000,0x0000, 0xFBC0,0x8EC7,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x1854,0x0000,0x0000, 0x1855,0x0000,0x0000, 0xFBC0,0x8ECE,0x0000, -0xFBC0,0x8ECF,0x0000, 0x0E29,0x0000,0x0000, 0x0E2A,0x0000,0x0000, -0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, -0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, -0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, 0xFBC0,0x8EDA,0x0000, -0xFBC0,0x8EDB,0x0000, 0x183E,0x1831,0x0000, 0x183E,0x1838,0x0000, -0xFBC0,0x8EDE,0x0000, 0xFBC0,0x8EDF,0x0000, 0xFBC0,0x8EE0,0x0000, -0xFBC0,0x8EE1,0x0000, 0xFBC0,0x8EE2,0x0000, 0xFBC0,0x8EE3,0x0000, -0xFBC0,0x8EE4,0x0000, 0xFBC0,0x8EE5,0x0000, 0xFBC0,0x8EE6,0x0000, -0xFBC0,0x8EE7,0x0000, 0xFBC0,0x8EE8,0x0000, 0xFBC0,0x8EE9,0x0000, -0xFBC0,0x8EEA,0x0000, 0xFBC0,0x8EEB,0x0000, 0xFBC0,0x8EEC,0x0000, -0xFBC0,0x8EED,0x0000, 0xFBC0,0x8EEE,0x0000, 0xFBC0,0x8EEF,0x0000, -0xFBC0,0x8EF0,0x0000, 0xFBC0,0x8EF1,0x0000, 0xFBC0,0x8EF2,0x0000, -0xFBC0,0x8EF3,0x0000, 0xFBC0,0x8EF4,0x0000, 0xFBC0,0x8EF5,0x0000, -0xFBC0,0x8EF6,0x0000, 0xFBC0,0x8EF7,0x0000, 0xFBC0,0x8EF8,0x0000, -0xFBC0,0x8EF9,0x0000, 0xFBC0,0x8EFA,0x0000, 0xFBC0,0x8EFB,0x0000, -0xFBC0,0x8EFC,0x0000, 0xFBC0,0x8EFD,0x0000, 0xFBC0,0x8EFE,0x0000, -0xFBC0,0x8EFF,0x0000 }; - -uint16 page00Fdata[]= { /* 0F00 (3 weights per char) */ -0x189A,0x18AD,0x0000, 0x035A,0x0000,0x0000, 0x035B,0x0000,0x0000, -0x035C,0x0000,0x0000, 0x02FE,0x0000,0x0000, 0x02FF,0x0000,0x0000, -0x0300,0x0000,0x0000, 0x0301,0x0000,0x0000, 0x0302,0x0000,0x0000, -0x0303,0x0000,0x0000, 0x0304,0x0000,0x0000, 0x0305,0x0000,0x0000, -0x0305,0x0000,0x0000, 0x0306,0x0000,0x0000, 0x0307,0x0000,0x0000, -0x0308,0x0000,0x0000, 0x0309,0x0000,0x0000, 0x030A,0x0000,0x0000, -0x030B,0x0000,0x0000, 0x035D,0x0000,0x0000, 0x024C,0x0000,0x0000, -0x035E,0x0000,0x0000, 0x035F,0x0000,0x0000, 0x0360,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0361,0x0000,0x0000, -0x0362,0x0000,0x0000, 0x0363,0x0000,0x0000, 0x0364,0x0000,0x0000, -0x0365,0x0000,0x0000, 0x0366,0x0000,0x0000, 0x0E29,0x0000,0x0000, -0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, -0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, -0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, -0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, -0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, -0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, -0x0E29,0x0000,0x0000, 0x0367,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0368,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0369,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x028E,0x0000,0x0000, 0x028F,0x0000,0x0000, -0x0290,0x0000,0x0000, 0x0291,0x0000,0x0000, 0x036A,0x0000,0x0000, -0x036B,0x0000,0x0000, 0x1856,0x0000,0x0000, 0x1858,0x0000,0x0000, -0x185A,0x0000,0x0000, 0x185A,0x1899,0x0000, 0x185C,0x0000,0x0000, -0x185E,0x0000,0x0000, 0x1860,0x0000,0x0000, 0x1862,0x0000,0x0000, -0xFBC0,0x8F48,0x0000, 0x1864,0x0000,0x0000, 0x1866,0x0000,0x0000, -0x1868,0x0000,0x0000, 0x186A,0x0000,0x0000, 0x186A,0x1899,0x0000, -0x186C,0x0000,0x0000, 0x186E,0x0000,0x0000, 0x1870,0x0000,0x0000, -0x1872,0x0000,0x0000, 0x1872,0x1899,0x0000, 0x1874,0x0000,0x0000, -0x1876,0x0000,0x0000, 0x1878,0x0000,0x0000, 0x187A,0x0000,0x0000, -0x187A,0x1899,0x0000, 0x187C,0x0000,0x0000, 0x187E,0x0000,0x0000, -0x1880,0x0000,0x0000, 0x1882,0x0000,0x0000, 0x1882,0x1899,0x0000, -0x1884,0x0000,0x0000, 0x1886,0x0000,0x0000, 0x1888,0x0000,0x0000, -0x188A,0x0000,0x0000, 0x188C,0x0000,0x0000, 0x188E,0x0000,0x0000, -0x1890,0x0000,0x0000, 0x1892,0x0000,0x0000, 0x1894,0x0000,0x0000, -0x1896,0x0000,0x0000, 0x1898,0x0000,0x0000, 0x189A,0x0000,0x0000, -0x1856,0x1895,0x0000, 0x188E,0x0000,0x0000, 0xFBC0,0x8F6B,0x0000, -0xFBC0,0x8F6C,0x0000, 0xFBC0,0x8F6D,0x0000, 0xFBC0,0x8F6E,0x0000, -0xFBC0,0x8F6F,0x0000, 0xFBC0,0x8F70,0x0000, 0x18A0,0x0000,0x0000, -0x18A1,0x0000,0x0000, 0x18A2,0x0000,0x0000, 0x18A5,0x0000,0x0000, -0x18A6,0x0000,0x0000, 0x18A7,0x0000,0x0000, 0x18A8,0x0000,0x0000, -0x18A9,0x0000,0x0000, 0x18AA,0x0000,0x0000, 0x18AB,0x0000,0x0000, -0x18AC,0x0000,0x0000, 0x18AD,0x0000,0x0000, 0x18AE,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x18A3,0x0000,0x0000, -0x18A4,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x18AF,0x0000,0x0000, 0x030C,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x189C,0x0000,0x0000, 0x189D,0x0000,0x0000, -0x189E,0x0000,0x0000, 0x189F,0x0000,0x0000, 0xFBC0,0x8F8C,0x0000, -0xFBC0,0x8F8D,0x0000, 0xFBC0,0x8F8E,0x0000, 0xFBC0,0x8F8F,0x0000, -0x1857,0x0000,0x0000, 0x1859,0x0000,0x0000, 0x185B,0x0000,0x0000, -0x185B,0x1899,0x0000, 0x185D,0x0000,0x0000, 0x185F,0x0000,0x0000, -0x1861,0x0000,0x0000, 0x1863,0x0000,0x0000, 0xFBC0,0x8F98,0x0000, -0x1865,0x0000,0x0000, 0x1867,0x0000,0x0000, 0x1869,0x0000,0x0000, -0x186B,0x0000,0x0000, 0x186B,0x1899,0x0000, 0x186D,0x0000,0x0000, -0x186F,0x0000,0x0000, 0x1871,0x0000,0x0000, 0x1873,0x0000,0x0000, -0x1873,0x1899,0x0000, 0x1875,0x0000,0x0000, 0x1877,0x0000,0x0000, -0x1879,0x0000,0x0000, 0x187B,0x0000,0x0000, 0x187B,0x1899,0x0000, -0x187D,0x0000,0x0000, 0x187F,0x0000,0x0000, 0x1881,0x0000,0x0000, -0x1883,0x0000,0x0000, 0x1883,0x1899,0x0000, 0x1885,0x0000,0x0000, -0x1887,0x0000,0x0000, 0x1889,0x0000,0x0000, 0x188B,0x0000,0x0000, -0x188D,0x0000,0x0000, 0x188F,0x0000,0x0000, 0x1891,0x0000,0x0000, -0x1893,0x0000,0x0000, 0x1895,0x0000,0x0000, 0x1897,0x0000,0x0000, -0x1899,0x0000,0x0000, 0x189B,0x0000,0x0000, 0x1857,0x1895,0x0000, -0x1885,0x0000,0x0000, 0x188D,0x0000,0x0000, 0x188F,0x0000,0x0000, -0xFBC0,0x8FBD,0x0000, 0x036C,0x0000,0x0000, 0x036D,0x0000,0x0000, -0x036E,0x0000,0x0000, 0x036F,0x0000,0x0000, 0x0370,0x0000,0x0000, -0x0371,0x0000,0x0000, 0x0372,0x0000,0x0000, 0x0373,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0374,0x0000,0x0000, 0x0375,0x0000,0x0000, -0x0376,0x0000,0x0000, 0x0377,0x0000,0x0000, 0x0378,0x0000,0x0000, -0x0379,0x0000,0x0000, 0xFBC0,0x8FCD,0x0000, 0xFBC0,0x8FCE,0x0000, -0x037A,0x0000,0x0000, 0xFBC0,0x8FD0,0x0000, 0xFBC0,0x8FD1,0x0000, -0xFBC0,0x8FD2,0x0000, 0xFBC0,0x8FD3,0x0000, 0xFBC0,0x8FD4,0x0000, -0xFBC0,0x8FD5,0x0000, 0xFBC0,0x8FD6,0x0000, 0xFBC0,0x8FD7,0x0000, -0xFBC0,0x8FD8,0x0000, 0xFBC0,0x8FD9,0x0000, 0xFBC0,0x8FDA,0x0000, -0xFBC0,0x8FDB,0x0000, 0xFBC0,0x8FDC,0x0000, 0xFBC0,0x8FDD,0x0000, -0xFBC0,0x8FDE,0x0000, 0xFBC0,0x8FDF,0x0000, 0xFBC0,0x8FE0,0x0000, -0xFBC0,0x8FE1,0x0000, 0xFBC0,0x8FE2,0x0000, 0xFBC0,0x8FE3,0x0000, -0xFBC0,0x8FE4,0x0000, 0xFBC0,0x8FE5,0x0000, 0xFBC0,0x8FE6,0x0000, -0xFBC0,0x8FE7,0x0000, 0xFBC0,0x8FE8,0x0000, 0xFBC0,0x8FE9,0x0000, -0xFBC0,0x8FEA,0x0000, 0xFBC0,0x8FEB,0x0000, 0xFBC0,0x8FEC,0x0000, -0xFBC0,0x8FED,0x0000, 0xFBC0,0x8FEE,0x0000, 0xFBC0,0x8FEF,0x0000, -0xFBC0,0x8FF0,0x0000, 0xFBC0,0x8FF1,0x0000, 0xFBC0,0x8FF2,0x0000, -0xFBC0,0x8FF3,0x0000, 0xFBC0,0x8FF4,0x0000, 0xFBC0,0x8FF5,0x0000, -0xFBC0,0x8FF6,0x0000, 0xFBC0,0x8FF7,0x0000, 0xFBC0,0x8FF8,0x0000, -0xFBC0,0x8FF9,0x0000, 0xFBC0,0x8FFA,0x0000, 0xFBC0,0x8FFB,0x0000, -0xFBC0,0x8FFC,0x0000, 0xFBC0,0x8FFD,0x0000, 0xFBC0,0x8FFE,0x0000, -0xFBC0,0x8FFF,0x0000 }; - -uint16 page010data[]= { /* 1000 (3 weights per char) */ -0x1931,0x0000,0x0000, 0x1932,0x0000,0x0000, 0x1933,0x0000,0x0000, -0x1934,0x0000,0x0000, 0x1935,0x0000,0x0000, 0x1936,0x0000,0x0000, -0x1937,0x0000,0x0000, 0x1938,0x0000,0x0000, 0x1939,0x0000,0x0000, -0x193A,0x0000,0x0000, 0x193B,0x0000,0x0000, 0x193C,0x0000,0x0000, -0x193D,0x0000,0x0000, 0x193E,0x0000,0x0000, 0x193F,0x0000,0x0000, -0x1940,0x0000,0x0000, 0x1941,0x0000,0x0000, 0x1942,0x0000,0x0000, -0x1943,0x0000,0x0000, 0x1944,0x0000,0x0000, 0x1945,0x0000,0x0000, -0x1946,0x0000,0x0000, 0x1947,0x0000,0x0000, 0x1948,0x0000,0x0000, -0x1949,0x0000,0x0000, 0x194A,0x0000,0x0000, 0x194B,0x0000,0x0000, -0x194C,0x0000,0x0000, 0x194D,0x0000,0x0000, 0x194E,0x0000,0x0000, -0x1951,0x0000,0x0000, 0x1952,0x0000,0x0000, 0x1953,0x0000,0x0000, -0x1954,0x0000,0x0000, 0xFBC0,0x9022,0x0000, 0x1955,0x0000,0x0000, -0x1956,0x0000,0x0000, 0x1957,0x0000,0x0000, 0x1958,0x0000,0x0000, -0x1959,0x0000,0x0000, 0xFBC0,0x9028,0x0000, 0x195A,0x0000,0x0000, -0x195B,0x0000,0x0000, 0xFBC0,0x902B,0x0000, 0x1960,0x0000,0x0000, -0x1961,0x0000,0x0000, 0x1962,0x0000,0x0000, 0x1963,0x0000,0x0000, -0x1964,0x0000,0x0000, 0x1965,0x0000,0x0000, 0x1966,0x0000,0x0000, -0xFBC0,0x9033,0x0000, 0xFBC0,0x9034,0x0000, 0xFBC0,0x9035,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x196B,0x0000,0x0000, 0xFBC0,0x903A,0x0000, 0xFBC0,0x903B,0x0000, -0xFBC0,0x903C,0x0000, 0xFBC0,0x903D,0x0000, 0xFBC0,0x903E,0x0000, -0xFBC0,0x903F,0x0000, 0x0E29,0x0000,0x0000, 0x0E2A,0x0000,0x0000, -0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, -0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, -0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, 0x026C,0x0000,0x0000, -0x026D,0x0000,0x0000, 0x030E,0x0000,0x0000, 0x030F,0x0000,0x0000, -0x0310,0x0000,0x0000, 0x0311,0x0000,0x0000, 0x194F,0x0000,0x0000, -0x1950,0x0000,0x0000, 0x195C,0x0000,0x0000, 0x195D,0x0000,0x0000, -0x195E,0x0000,0x0000, 0x195F,0x0000,0x0000, 0x1967,0x0000,0x0000, -0x1968,0x0000,0x0000, 0x1969,0x0000,0x0000, 0x196A,0x0000,0x0000, -0xFBC0,0x905A,0x0000, 0xFBC0,0x905B,0x0000, 0xFBC0,0x905C,0x0000, -0xFBC0,0x905D,0x0000, 0xFBC0,0x905E,0x0000, 0xFBC0,0x905F,0x0000, -0xFBC0,0x9060,0x0000, 0xFBC0,0x9061,0x0000, 0xFBC0,0x9062,0x0000, -0xFBC0,0x9063,0x0000, 0xFBC0,0x9064,0x0000, 0xFBC0,0x9065,0x0000, -0xFBC0,0x9066,0x0000, 0xFBC0,0x9067,0x0000, 0xFBC0,0x9068,0x0000, -0xFBC0,0x9069,0x0000, 0xFBC0,0x906A,0x0000, 0xFBC0,0x906B,0x0000, -0xFBC0,0x906C,0x0000, 0xFBC0,0x906D,0x0000, 0xFBC0,0x906E,0x0000, -0xFBC0,0x906F,0x0000, 0xFBC0,0x9070,0x0000, 0xFBC0,0x9071,0x0000, -0xFBC0,0x9072,0x0000, 0xFBC0,0x9073,0x0000, 0xFBC0,0x9074,0x0000, -0xFBC0,0x9075,0x0000, 0xFBC0,0x9076,0x0000, 0xFBC0,0x9077,0x0000, -0xFBC0,0x9078,0x0000, 0xFBC0,0x9079,0x0000, 0xFBC0,0x907A,0x0000, -0xFBC0,0x907B,0x0000, 0xFBC0,0x907C,0x0000, 0xFBC0,0x907D,0x0000, -0xFBC0,0x907E,0x0000, 0xFBC0,0x907F,0x0000, 0xFBC0,0x9080,0x0000, -0xFBC0,0x9081,0x0000, 0xFBC0,0x9082,0x0000, 0xFBC0,0x9083,0x0000, -0xFBC0,0x9084,0x0000, 0xFBC0,0x9085,0x0000, 0xFBC0,0x9086,0x0000, -0xFBC0,0x9087,0x0000, 0xFBC0,0x9088,0x0000, 0xFBC0,0x9089,0x0000, -0xFBC0,0x908A,0x0000, 0xFBC0,0x908B,0x0000, 0xFBC0,0x908C,0x0000, -0xFBC0,0x908D,0x0000, 0xFBC0,0x908E,0x0000, 0xFBC0,0x908F,0x0000, -0xFBC0,0x9090,0x0000, 0xFBC0,0x9091,0x0000, 0xFBC0,0x9092,0x0000, -0xFBC0,0x9093,0x0000, 0xFBC0,0x9094,0x0000, 0xFBC0,0x9095,0x0000, -0xFBC0,0x9096,0x0000, 0xFBC0,0x9097,0x0000, 0xFBC0,0x9098,0x0000, -0xFBC0,0x9099,0x0000, 0xFBC0,0x909A,0x0000, 0xFBC0,0x909B,0x0000, -0xFBC0,0x909C,0x0000, 0xFBC0,0x909D,0x0000, 0xFBC0,0x909E,0x0000, -0xFBC0,0x909F,0x0000, 0x12E1,0x0000,0x0000, 0x12E2,0x0000,0x0000, -0x12E3,0x0000,0x0000, 0x12E4,0x0000,0x0000, 0x12E5,0x0000,0x0000, -0x12E6,0x0000,0x0000, 0x12E7,0x0000,0x0000, 0x12E9,0x0000,0x0000, -0x12EA,0x0000,0x0000, 0x12EB,0x0000,0x0000, 0x12EC,0x0000,0x0000, -0x12ED,0x0000,0x0000, 0x12EE,0x0000,0x0000, 0x12F0,0x0000,0x0000, -0x12F1,0x0000,0x0000, 0x12F2,0x0000,0x0000, 0x12F3,0x0000,0x0000, -0x12F4,0x0000,0x0000, 0x12F5,0x0000,0x0000, 0x12F7,0x0000,0x0000, -0x12F8,0x0000,0x0000, 0x12F9,0x0000,0x0000, 0x12FA,0x0000,0x0000, -0x12FB,0x0000,0x0000, 0x12FC,0x0000,0x0000, 0x12FD,0x0000,0x0000, -0x12FE,0x0000,0x0000, 0x12FF,0x0000,0x0000, 0x1300,0x0000,0x0000, -0x1301,0x0000,0x0000, 0x1302,0x0000,0x0000, 0x1304,0x0000,0x0000, -0x1305,0x0000,0x0000, 0x12E8,0x0000,0x0000, 0x12EF,0x0000,0x0000, -0x12F6,0x0000,0x0000, 0x1303,0x0000,0x0000, 0x1306,0x0000,0x0000, -0xFBC0,0x90C6,0x0000, 0xFBC0,0x90C7,0x0000, 0xFBC0,0x90C8,0x0000, -0xFBC0,0x90C9,0x0000, 0xFBC0,0x90CA,0x0000, 0xFBC0,0x90CB,0x0000, -0xFBC0,0x90CC,0x0000, 0xFBC0,0x90CD,0x0000, 0xFBC0,0x90CE,0x0000, -0xFBC0,0x90CF,0x0000, 0x12E1,0x0000,0x0000, 0x12E2,0x0000,0x0000, -0x12E3,0x0000,0x0000, 0x12E4,0x0000,0x0000, 0x12E5,0x0000,0x0000, -0x12E6,0x0000,0x0000, 0x12E7,0x0000,0x0000, 0x12E9,0x0000,0x0000, -0x12EA,0x0000,0x0000, 0x12EB,0x0000,0x0000, 0x12EC,0x0000,0x0000, -0x12ED,0x0000,0x0000, 0x12EE,0x0000,0x0000, 0x12F0,0x0000,0x0000, -0x12F1,0x0000,0x0000, 0x12F2,0x0000,0x0000, 0x12F3,0x0000,0x0000, -0x12F4,0x0000,0x0000, 0x12F5,0x0000,0x0000, 0x12F7,0x0000,0x0000, -0x12F8,0x0000,0x0000, 0x12F9,0x0000,0x0000, 0x12FA,0x0000,0x0000, -0x12FB,0x0000,0x0000, 0x12FC,0x0000,0x0000, 0x12FD,0x0000,0x0000, -0x12FE,0x0000,0x0000, 0x12FF,0x0000,0x0000, 0x1300,0x0000,0x0000, -0x1301,0x0000,0x0000, 0x1302,0x0000,0x0000, 0x1304,0x0000,0x0000, -0x1305,0x0000,0x0000, 0x12E8,0x0000,0x0000, 0x12EF,0x0000,0x0000, -0x12F6,0x0000,0x0000, 0x1303,0x0000,0x0000, 0x1306,0x0000,0x0000, -0x1307,0x0000,0x0000, 0x1308,0x0000,0x0000, 0x1309,0x0000,0x0000, -0xFBC0,0x90F9,0x0000, 0xFBC0,0x90FA,0x0000, 0x0271,0x0000,0x0000, -0xFBC0,0x90FC,0x0000, 0xFBC0,0x90FD,0x0000, 0xFBC0,0x90FE,0x0000, -0xFBC0,0x90FF,0x0000 }; - -uint16 page011data[]= { /* 1100 (3 weights per char) */ -0x1D62,0x0000,0x0000, 0x1D63,0x0000,0x0000, 0x1D64,0x0000,0x0000, -0x1D65,0x0000,0x0000, 0x1D66,0x0000,0x0000, 0x1D67,0x0000,0x0000, -0x1D68,0x0000,0x0000, 0x1D69,0x0000,0x0000, 0x1D6A,0x0000,0x0000, -0x1D6B,0x0000,0x0000, 0x1D6C,0x0000,0x0000, 0x1D6D,0x0000,0x0000, -0x1D6E,0x0000,0x0000, 0x1D6F,0x0000,0x0000, 0x1D70,0x0000,0x0000, -0x1D71,0x0000,0x0000, 0x1D72,0x0000,0x0000, 0x1D73,0x0000,0x0000, -0x1D74,0x0000,0x0000, 0x1D75,0x0000,0x0000, 0x1D76,0x0000,0x0000, -0x1D77,0x0000,0x0000, 0x1D78,0x0000,0x0000, 0x1D79,0x0000,0x0000, -0x1D7A,0x0000,0x0000, 0x1D7B,0x0000,0x0000, 0x1D7C,0x0000,0x0000, -0x1D7D,0x0000,0x0000, 0x1D7E,0x0000,0x0000, 0x1D7F,0x0000,0x0000, -0x1D80,0x0000,0x0000, 0x1D81,0x0000,0x0000, 0x1D82,0x0000,0x0000, -0x1D83,0x0000,0x0000, 0x1D84,0x0000,0x0000, 0x1D85,0x0000,0x0000, -0x1D86,0x0000,0x0000, 0x1D87,0x0000,0x0000, 0x1D88,0x0000,0x0000, -0x1D89,0x0000,0x0000, 0x1D8A,0x0000,0x0000, 0x1D8B,0x0000,0x0000, -0x1D8C,0x0000,0x0000, 0x1D8D,0x0000,0x0000, 0x1D8E,0x0000,0x0000, -0x1D8F,0x0000,0x0000, 0x1D90,0x0000,0x0000, 0x1D91,0x0000,0x0000, -0x1D92,0x0000,0x0000, 0x1D93,0x0000,0x0000, 0x1D94,0x0000,0x0000, -0x1D95,0x0000,0x0000, 0x1D96,0x0000,0x0000, 0x1D97,0x0000,0x0000, -0x1D98,0x0000,0x0000, 0x1D99,0x0000,0x0000, 0x1D9A,0x0000,0x0000, -0x1D9B,0x0000,0x0000, 0x1D9C,0x0000,0x0000, 0x1D9D,0x0000,0x0000, -0x1D9E,0x0000,0x0000, 0x1D9F,0x0000,0x0000, 0x1DA0,0x0000,0x0000, -0x1DA1,0x0000,0x0000, 0x1DA2,0x0000,0x0000, 0x1DA3,0x0000,0x0000, -0x1DA4,0x0000,0x0000, 0x1DA5,0x0000,0x0000, 0x1DA6,0x0000,0x0000, -0x1DA7,0x0000,0x0000, 0x1DA8,0x0000,0x0000, 0x1DA9,0x0000,0x0000, -0x1DAA,0x0000,0x0000, 0x1DAB,0x0000,0x0000, 0x1DAC,0x0000,0x0000, -0x1DAD,0x0000,0x0000, 0x1DAE,0x0000,0x0000, 0x1DAF,0x0000,0x0000, -0x1DB0,0x0000,0x0000, 0x1DB1,0x0000,0x0000, 0x1DB2,0x0000,0x0000, -0x1DB3,0x0000,0x0000, 0x1DB4,0x0000,0x0000, 0x1DB5,0x0000,0x0000, -0x1DB6,0x0000,0x0000, 0x1DB7,0x0000,0x0000, 0x1DB8,0x0000,0x0000, -0x1DB9,0x0000,0x0000, 0x1DBA,0x0000,0x0000, 0x1DBB,0x0000,0x0000, -0xFBC0,0x915A,0x0000, 0xFBC0,0x915B,0x0000, 0xFBC0,0x915C,0x0000, -0xFBC0,0x915D,0x0000, 0xFBC0,0x915E,0x0000, 0x1DBC,0x0000,0x0000, -0x1DBD,0x0000,0x0000, 0x1DBE,0x0000,0x0000, 0x1DBF,0x0000,0x0000, -0x1DC0,0x0000,0x0000, 0x1DC1,0x0000,0x0000, 0x1DC2,0x0000,0x0000, -0x1DC3,0x0000,0x0000, 0x1DC4,0x0000,0x0000, 0x1DC5,0x0000,0x0000, -0x1DC6,0x0000,0x0000, 0x1DC7,0x0000,0x0000, 0x1DC8,0x0000,0x0000, -0x1DC9,0x0000,0x0000, 0x1DCA,0x0000,0x0000, 0x1DCB,0x0000,0x0000, -0x1DCC,0x0000,0x0000, 0x1DCD,0x0000,0x0000, 0x1DCE,0x0000,0x0000, -0x1DCF,0x0000,0x0000, 0x1DD0,0x0000,0x0000, 0x1DD1,0x0000,0x0000, -0x1DD2,0x0000,0x0000, 0x1DD3,0x0000,0x0000, 0x1DD4,0x0000,0x0000, -0x1DD5,0x0000,0x0000, 0x1DD6,0x0000,0x0000, 0x1DD7,0x0000,0x0000, -0x1DD8,0x0000,0x0000, 0x1DD9,0x0000,0x0000, 0x1DDA,0x0000,0x0000, -0x1DDB,0x0000,0x0000, 0x1DDC,0x0000,0x0000, 0x1DDD,0x0000,0x0000, -0x1DDE,0x0000,0x0000, 0x1DDF,0x0000,0x0000, 0x1DE0,0x0000,0x0000, -0x1DE1,0x0000,0x0000, 0x1DE2,0x0000,0x0000, 0x1DE3,0x0000,0x0000, -0x1DE4,0x0000,0x0000, 0x1DE5,0x0000,0x0000, 0x1DE6,0x0000,0x0000, -0x1DE7,0x0000,0x0000, 0x1DE8,0x0000,0x0000, 0x1DE9,0x0000,0x0000, -0x1DEA,0x0000,0x0000, 0x1DEB,0x0000,0x0000, 0x1DEC,0x0000,0x0000, -0x1DED,0x0000,0x0000, 0x1DEE,0x0000,0x0000, 0x1DEF,0x0000,0x0000, -0x1DF0,0x0000,0x0000, 0x1DF1,0x0000,0x0000, 0x1DF2,0x0000,0x0000, -0x1DF3,0x0000,0x0000, 0x1DF4,0x0000,0x0000, 0x1DF5,0x0000,0x0000, -0x1DF6,0x0000,0x0000, 0x1DF7,0x0000,0x0000, 0x1DF8,0x0000,0x0000, -0x1DF9,0x0000,0x0000, 0x1DFA,0x0000,0x0000, 0x1DFB,0x0000,0x0000, -0x1DFC,0x0000,0x0000, 0x1DFD,0x0000,0x0000, 0x1DFE,0x0000,0x0000, -0x1DFF,0x0000,0x0000, 0xFBC0,0x91A3,0x0000, 0xFBC0,0x91A4,0x0000, -0xFBC0,0x91A5,0x0000, 0xFBC0,0x91A6,0x0000, 0xFBC0,0x91A7,0x0000, -0x1E00,0x0000,0x0000, 0x1E01,0x0000,0x0000, 0x1E02,0x0000,0x0000, -0x1E03,0x0000,0x0000, 0x1E04,0x0000,0x0000, 0x1E05,0x0000,0x0000, -0x1E06,0x0000,0x0000, 0x1E07,0x0000,0x0000, 0x1E08,0x0000,0x0000, -0x1E09,0x0000,0x0000, 0x1E0A,0x0000,0x0000, 0x1E0B,0x0000,0x0000, -0x1E0C,0x0000,0x0000, 0x1E0D,0x0000,0x0000, 0x1E0E,0x0000,0x0000, -0x1E0F,0x0000,0x0000, 0x1E10,0x0000,0x0000, 0x1E11,0x0000,0x0000, -0x1E12,0x0000,0x0000, 0x1E13,0x0000,0x0000, 0x1E14,0x0000,0x0000, -0x1E15,0x0000,0x0000, 0x1E16,0x0000,0x0000, 0x1E17,0x0000,0x0000, -0x1E18,0x0000,0x0000, 0x1E19,0x0000,0x0000, 0x1E1A,0x0000,0x0000, -0x1E1B,0x0000,0x0000, 0x1E1C,0x0000,0x0000, 0x1E1D,0x0000,0x0000, -0x1E1E,0x0000,0x0000, 0x1E1F,0x0000,0x0000, 0x1E20,0x0000,0x0000, -0x1E21,0x0000,0x0000, 0x1E22,0x0000,0x0000, 0x1E23,0x0000,0x0000, -0x1E24,0x0000,0x0000, 0x1E25,0x0000,0x0000, 0x1E26,0x0000,0x0000, -0x1E27,0x0000,0x0000, 0x1E28,0x0000,0x0000, 0x1E29,0x0000,0x0000, -0x1E2A,0x0000,0x0000, 0x1E2B,0x0000,0x0000, 0x1E2C,0x0000,0x0000, -0x1E2D,0x0000,0x0000, 0x1E2E,0x0000,0x0000, 0x1E2F,0x0000,0x0000, -0x1E30,0x0000,0x0000, 0x1E31,0x0000,0x0000, 0x1E32,0x0000,0x0000, -0x1E33,0x0000,0x0000, 0x1E34,0x0000,0x0000, 0x1E35,0x0000,0x0000, -0x1E36,0x0000,0x0000, 0x1E37,0x0000,0x0000, 0x1E38,0x0000,0x0000, -0x1E39,0x0000,0x0000, 0x1E3A,0x0000,0x0000, 0x1E3B,0x0000,0x0000, -0x1E3C,0x0000,0x0000, 0x1E3D,0x0000,0x0000, 0x1E3E,0x0000,0x0000, -0x1E3F,0x0000,0x0000, 0x1E40,0x0000,0x0000, 0x1E41,0x0000,0x0000, -0x1E42,0x0000,0x0000, 0x1E43,0x0000,0x0000, 0x1E44,0x0000,0x0000, -0x1E45,0x0000,0x0000, 0x1E46,0x0000,0x0000, 0x1E47,0x0000,0x0000, -0x1E48,0x0000,0x0000, 0x1E49,0x0000,0x0000, 0x1E4A,0x0000,0x0000, -0x1E4B,0x0000,0x0000, 0x1E4C,0x0000,0x0000, 0x1E4D,0x0000,0x0000, -0x1E4E,0x0000,0x0000, 0x1E4F,0x0000,0x0000, 0x1E50,0x0000,0x0000, -0x1E51,0x0000,0x0000, 0xFBC0,0x91FA,0x0000, 0xFBC0,0x91FB,0x0000, -0xFBC0,0x91FC,0x0000, 0xFBC0,0x91FD,0x0000, 0xFBC0,0x91FE,0x0000, -0xFBC0,0x91FF,0x0000 }; - -uint16 page012data[]= { /* 1200 (3 weights per char) */ -0x141C,0x0000,0x0000, 0x141D,0x0000,0x0000, 0x141E,0x0000,0x0000, -0x141F,0x0000,0x0000, 0x1420,0x0000,0x0000, 0x1421,0x0000,0x0000, -0x1422,0x0000,0x0000, 0xFBC0,0x9207,0x0000, 0x1423,0x0000,0x0000, -0x1424,0x0000,0x0000, 0x1425,0x0000,0x0000, 0x1426,0x0000,0x0000, -0x1427,0x0000,0x0000, 0x1428,0x0000,0x0000, 0x1429,0x0000,0x0000, -0x142A,0x0000,0x0000, 0x142B,0x0000,0x0000, 0x142C,0x0000,0x0000, -0x142D,0x0000,0x0000, 0x142E,0x0000,0x0000, 0x142F,0x0000,0x0000, -0x1430,0x0000,0x0000, 0x1431,0x0000,0x0000, 0x1432,0x0000,0x0000, -0x1433,0x0000,0x0000, 0x1434,0x0000,0x0000, 0x1435,0x0000,0x0000, -0x1436,0x0000,0x0000, 0x1437,0x0000,0x0000, 0x1438,0x0000,0x0000, -0x1439,0x0000,0x0000, 0x143A,0x0000,0x0000, 0x143B,0x0000,0x0000, -0x143C,0x0000,0x0000, 0x143D,0x0000,0x0000, 0x143E,0x0000,0x0000, -0x143F,0x0000,0x0000, 0x1440,0x0000,0x0000, 0x1441,0x0000,0x0000, -0x1442,0x0000,0x0000, 0x1443,0x0000,0x0000, 0x1444,0x0000,0x0000, -0x1445,0x0000,0x0000, 0x1446,0x0000,0x0000, 0x1447,0x0000,0x0000, -0x1448,0x0000,0x0000, 0x1449,0x0000,0x0000, 0x144A,0x0000,0x0000, -0x144B,0x0000,0x0000, 0x144C,0x0000,0x0000, 0x144D,0x0000,0x0000, -0x144E,0x0000,0x0000, 0x144F,0x0000,0x0000, 0x1450,0x0000,0x0000, -0x1451,0x0000,0x0000, 0x1452,0x0000,0x0000, 0x1453,0x0000,0x0000, -0x1454,0x0000,0x0000, 0x1455,0x0000,0x0000, 0x1456,0x0000,0x0000, -0x1457,0x0000,0x0000, 0x1458,0x0000,0x0000, 0x1459,0x0000,0x0000, -0x145A,0x0000,0x0000, 0x145B,0x0000,0x0000, 0x145C,0x0000,0x0000, -0x145D,0x0000,0x0000, 0x145E,0x0000,0x0000, 0x145F,0x0000,0x0000, -0x1460,0x0000,0x0000, 0x1461,0x0000,0x0000, 0xFBC0,0x9247,0x0000, -0x1462,0x0000,0x0000, 0xFBC0,0x9249,0x0000, 0x1463,0x0000,0x0000, -0x1464,0x0000,0x0000, 0x1465,0x0000,0x0000, 0x1466,0x0000,0x0000, -0xFBC0,0x924E,0x0000, 0xFBC0,0x924F,0x0000, 0x1467,0x0000,0x0000, -0x1468,0x0000,0x0000, 0x1469,0x0000,0x0000, 0x146A,0x0000,0x0000, -0x146B,0x0000,0x0000, 0x146C,0x0000,0x0000, 0x146D,0x0000,0x0000, -0xFBC0,0x9257,0x0000, 0x146E,0x0000,0x0000, 0xFBC0,0x9259,0x0000, -0x146F,0x0000,0x0000, 0x1470,0x0000,0x0000, 0x1471,0x0000,0x0000, -0x1472,0x0000,0x0000, 0xFBC0,0x925E,0x0000, 0xFBC0,0x925F,0x0000, -0x1473,0x0000,0x0000, 0x1474,0x0000,0x0000, 0x1475,0x0000,0x0000, -0x1476,0x0000,0x0000, 0x1477,0x0000,0x0000, 0x1478,0x0000,0x0000, -0x1479,0x0000,0x0000, 0x147A,0x0000,0x0000, 0x147B,0x0000,0x0000, -0x147C,0x0000,0x0000, 0x147D,0x0000,0x0000, 0x147E,0x0000,0x0000, -0x147F,0x0000,0x0000, 0x1480,0x0000,0x0000, 0x1481,0x0000,0x0000, -0x1482,0x0000,0x0000, 0x1483,0x0000,0x0000, 0x1484,0x0000,0x0000, -0x1485,0x0000,0x0000, 0x1486,0x0000,0x0000, 0x1487,0x0000,0x0000, -0x1488,0x0000,0x0000, 0x1489,0x0000,0x0000, 0x148A,0x0000,0x0000, -0x148B,0x0000,0x0000, 0x148C,0x0000,0x0000, 0x148D,0x0000,0x0000, -0x148E,0x0000,0x0000, 0x148F,0x0000,0x0000, 0x1490,0x0000,0x0000, -0x1491,0x0000,0x0000, 0x1492,0x0000,0x0000, 0x1493,0x0000,0x0000, -0x1494,0x0000,0x0000, 0x1495,0x0000,0x0000, 0x1496,0x0000,0x0000, -0x1497,0x0000,0x0000, 0x1498,0x0000,0x0000, 0x1499,0x0000,0x0000, -0xFBC0,0x9287,0x0000, 0x149A,0x0000,0x0000, 0xFBC0,0x9289,0x0000, -0x149B,0x0000,0x0000, 0x149C,0x0000,0x0000, 0x149D,0x0000,0x0000, -0x149E,0x0000,0x0000, 0xFBC0,0x928E,0x0000, 0xFBC0,0x928F,0x0000, -0x149F,0x0000,0x0000, 0x14A0,0x0000,0x0000, 0x14A1,0x0000,0x0000, -0x14A2,0x0000,0x0000, 0x14A3,0x0000,0x0000, 0x14A4,0x0000,0x0000, -0x14A5,0x0000,0x0000, 0x14A6,0x0000,0x0000, 0x14A7,0x0000,0x0000, -0x14A8,0x0000,0x0000, 0x14A9,0x0000,0x0000, 0x14AA,0x0000,0x0000, -0x14AB,0x0000,0x0000, 0x14AC,0x0000,0x0000, 0x14AD,0x0000,0x0000, -0x14AE,0x0000,0x0000, 0x14AF,0x0000,0x0000, 0x14B0,0x0000,0x0000, -0x14B1,0x0000,0x0000, 0x14B2,0x0000,0x0000, 0x14B3,0x0000,0x0000, -0x14B4,0x0000,0x0000, 0x14B5,0x0000,0x0000, 0x14B6,0x0000,0x0000, -0x14B7,0x0000,0x0000, 0x14B8,0x0000,0x0000, 0x14B9,0x0000,0x0000, -0x14BA,0x0000,0x0000, 0x14BB,0x0000,0x0000, 0x14BC,0x0000,0x0000, -0x14BD,0x0000,0x0000, 0xFBC0,0x92AF,0x0000, 0x14BE,0x0000,0x0000, -0xFBC0,0x92B1,0x0000, 0x14BF,0x0000,0x0000, 0x14C0,0x0000,0x0000, -0x14C1,0x0000,0x0000, 0x14C2,0x0000,0x0000, 0xFBC0,0x92B6,0x0000, -0xFBC0,0x92B7,0x0000, 0x14C3,0x0000,0x0000, 0x14C4,0x0000,0x0000, -0x14C5,0x0000,0x0000, 0x14C6,0x0000,0x0000, 0x14C7,0x0000,0x0000, -0x14C8,0x0000,0x0000, 0x14C9,0x0000,0x0000, 0xFBC0,0x92BF,0x0000, -0x14CA,0x0000,0x0000, 0xFBC0,0x92C1,0x0000, 0x14CB,0x0000,0x0000, -0x14CC,0x0000,0x0000, 0x14CD,0x0000,0x0000, 0x14CE,0x0000,0x0000, -0xFBC0,0x92C6,0x0000, 0xFBC0,0x92C7,0x0000, 0x14CF,0x0000,0x0000, -0x14D0,0x0000,0x0000, 0x14D1,0x0000,0x0000, 0x14D2,0x0000,0x0000, -0x14D3,0x0000,0x0000, 0x14D4,0x0000,0x0000, 0x14D5,0x0000,0x0000, -0xFBC0,0x92CF,0x0000, 0x14D6,0x0000,0x0000, 0x14D7,0x0000,0x0000, -0x14D8,0x0000,0x0000, 0x14D9,0x0000,0x0000, 0x14DA,0x0000,0x0000, -0x14DB,0x0000,0x0000, 0x14DC,0x0000,0x0000, 0xFBC0,0x92D7,0x0000, -0x14DD,0x0000,0x0000, 0x14DE,0x0000,0x0000, 0x14DF,0x0000,0x0000, -0x14E0,0x0000,0x0000, 0x14E1,0x0000,0x0000, 0x14E2,0x0000,0x0000, -0x14E3,0x0000,0x0000, 0x14E4,0x0000,0x0000, 0x14E5,0x0000,0x0000, -0x14E6,0x0000,0x0000, 0x14E7,0x0000,0x0000, 0x14E8,0x0000,0x0000, -0x14E9,0x0000,0x0000, 0x14EA,0x0000,0x0000, 0x14EB,0x0000,0x0000, -0x14EC,0x0000,0x0000, 0x14ED,0x0000,0x0000, 0x14EE,0x0000,0x0000, -0x14EF,0x0000,0x0000, 0x14F0,0x0000,0x0000, 0x14F1,0x0000,0x0000, -0x14F2,0x0000,0x0000, 0x14F3,0x0000,0x0000, 0xFBC0,0x92EF,0x0000, -0x14F4,0x0000,0x0000, 0x14F5,0x0000,0x0000, 0x14F6,0x0000,0x0000, -0x14F7,0x0000,0x0000, 0x14F8,0x0000,0x0000, 0x14F9,0x0000,0x0000, -0x14FA,0x0000,0x0000, 0x14FB,0x0000,0x0000, 0x14FC,0x0000,0x0000, -0x14FD,0x0000,0x0000, 0x14FE,0x0000,0x0000, 0x14FF,0x0000,0x0000, -0x1500,0x0000,0x0000, 0x1501,0x0000,0x0000, 0x1502,0x0000,0x0000, -0x1503,0x0000,0x0000 }; - -uint16 page013data[]= { /* 1300 (3 weights per char) */ -0x1504,0x0000,0x0000, 0x1505,0x0000,0x0000, 0x1506,0x0000,0x0000, -0x1507,0x0000,0x0000, 0x1508,0x0000,0x0000, 0x1509,0x0000,0x0000, -0x150A,0x0000,0x0000, 0x150B,0x0000,0x0000, 0x150C,0x0000,0x0000, -0x150D,0x0000,0x0000, 0x150E,0x0000,0x0000, 0x150F,0x0000,0x0000, -0x1510,0x0000,0x0000, 0x1511,0x0000,0x0000, 0x1512,0x0000,0x0000, -0xFBC0,0x930F,0x0000, 0x1513,0x0000,0x0000, 0xFBC0,0x9311,0x0000, -0x1514,0x0000,0x0000, 0x1515,0x0000,0x0000, 0x1516,0x0000,0x0000, -0x1517,0x0000,0x0000, 0xFBC0,0x9316,0x0000, 0xFBC0,0x9317,0x0000, -0x1518,0x0000,0x0000, 0x1519,0x0000,0x0000, 0x151A,0x0000,0x0000, -0x151B,0x0000,0x0000, 0x151C,0x0000,0x0000, 0x151D,0x0000,0x0000, -0x151E,0x0000,0x0000, 0xFBC0,0x931F,0x0000, 0x151F,0x0000,0x0000, -0x1520,0x0000,0x0000, 0x1521,0x0000,0x0000, 0x1522,0x0000,0x0000, -0x1523,0x0000,0x0000, 0x1524,0x0000,0x0000, 0x1525,0x0000,0x0000, -0x1526,0x0000,0x0000, 0x1527,0x0000,0x0000, 0x1528,0x0000,0x0000, -0x1529,0x0000,0x0000, 0x152A,0x0000,0x0000, 0x152B,0x0000,0x0000, -0x152C,0x0000,0x0000, 0x152D,0x0000,0x0000, 0x152E,0x0000,0x0000, -0x152F,0x0000,0x0000, 0x1530,0x0000,0x0000, 0x1531,0x0000,0x0000, -0x1532,0x0000,0x0000, 0x1533,0x0000,0x0000, 0x1534,0x0000,0x0000, -0x1535,0x0000,0x0000, 0x1536,0x0000,0x0000, 0x1537,0x0000,0x0000, -0x1538,0x0000,0x0000, 0x1539,0x0000,0x0000, 0x153A,0x0000,0x0000, -0x153B,0x0000,0x0000, 0x153C,0x0000,0x0000, 0x153D,0x0000,0x0000, -0x153E,0x0000,0x0000, 0x153F,0x0000,0x0000, 0x1540,0x0000,0x0000, -0x1541,0x0000,0x0000, 0x1542,0x0000,0x0000, 0x1543,0x0000,0x0000, -0x1544,0x0000,0x0000, 0x1545,0x0000,0x0000, 0xFBC0,0x9347,0x0000, -0x1546,0x0000,0x0000, 0x1547,0x0000,0x0000, 0x1548,0x0000,0x0000, -0x1549,0x0000,0x0000, 0x154A,0x0000,0x0000, 0x154B,0x0000,0x0000, -0x154C,0x0000,0x0000, 0x154D,0x0000,0x0000, 0x154E,0x0000,0x0000, -0x154F,0x0000,0x0000, 0x1550,0x0000,0x0000, 0x1551,0x0000,0x0000, -0x1552,0x0000,0x0000, 0x1553,0x0000,0x0000, 0x1554,0x0000,0x0000, -0x1555,0x0000,0x0000, 0x1556,0x0000,0x0000, 0x1557,0x0000,0x0000, -0x1558,0x0000,0x0000, 0xFBC0,0x935B,0x0000, 0xFBC0,0x935C,0x0000, -0xFBC0,0x935D,0x0000, 0xFBC0,0x935E,0x0000, 0xFBC0,0x935F,0x0000, -0xFBC0,0x9360,0x0000, 0x0245,0x0000,0x0000, 0x0262,0x0000,0x0000, -0x0246,0x0000,0x0000, 0x0247,0x0000,0x0000, 0x0248,0x0000,0x0000, -0x0249,0x0000,0x0000, 0x025A,0x0000,0x0000, 0x0272,0x0000,0x0000, -0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, -0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, -0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, -0x0DCC,0x0000,0x0000, 0x0DCD,0x0000,0x0000, 0x0DCE,0x0000,0x0000, -0x0DCF,0x0000,0x0000, 0x0DD0,0x0000,0x0000, 0x0DD1,0x0000,0x0000, -0x0DD2,0x0000,0x0000, 0x0DD3,0x0000,0x0000, 0x0DD4,0x0000,0x0000, -0x0DD5,0x0000,0x0000, 0x0DD6,0x0000,0x0000, 0xFBC0,0x937D,0x0000, -0xFBC0,0x937E,0x0000, 0xFBC0,0x937F,0x0000, 0xFBC0,0x9380,0x0000, -0xFBC0,0x9381,0x0000, 0xFBC0,0x9382,0x0000, 0xFBC0,0x9383,0x0000, -0xFBC0,0x9384,0x0000, 0xFBC0,0x9385,0x0000, 0xFBC0,0x9386,0x0000, -0xFBC0,0x9387,0x0000, 0xFBC0,0x9388,0x0000, 0xFBC0,0x9389,0x0000, -0xFBC0,0x938A,0x0000, 0xFBC0,0x938B,0x0000, 0xFBC0,0x938C,0x0000, -0xFBC0,0x938D,0x0000, 0xFBC0,0x938E,0x0000, 0xFBC0,0x938F,0x0000, -0xFBC0,0x9390,0x0000, 0xFBC0,0x9391,0x0000, 0xFBC0,0x9392,0x0000, -0xFBC0,0x9393,0x0000, 0xFBC0,0x9394,0x0000, 0xFBC0,0x9395,0x0000, -0xFBC0,0x9396,0x0000, 0xFBC0,0x9397,0x0000, 0xFBC0,0x9398,0x0000, -0xFBC0,0x9399,0x0000, 0xFBC0,0x939A,0x0000, 0xFBC0,0x939B,0x0000, -0xFBC0,0x939C,0x0000, 0xFBC0,0x939D,0x0000, 0xFBC0,0x939E,0x0000, -0xFBC0,0x939F,0x0000, 0x1A59,0x0000,0x0000, 0x1A5A,0x0000,0x0000, -0x1A5B,0x0000,0x0000, 0x1A5C,0x0000,0x0000, 0x1A5D,0x0000,0x0000, -0x1A5E,0x0000,0x0000, 0x1A5F,0x0000,0x0000, 0x1A60,0x0000,0x0000, -0x1A61,0x0000,0x0000, 0x1A62,0x0000,0x0000, 0x1A63,0x0000,0x0000, -0x1A64,0x0000,0x0000, 0x1A65,0x0000,0x0000, 0x1A66,0x0000,0x0000, -0x1A67,0x0000,0x0000, 0x1A68,0x0000,0x0000, 0x1A69,0x0000,0x0000, -0x1A6A,0x0000,0x0000, 0x1A6B,0x0000,0x0000, 0x1A6C,0x0000,0x0000, -0x1A6D,0x0000,0x0000, 0x1A6E,0x0000,0x0000, 0x1A6F,0x0000,0x0000, -0x1A70,0x0000,0x0000, 0x1A71,0x0000,0x0000, 0x1A72,0x0000,0x0000, -0x1A73,0x0000,0x0000, 0x1A74,0x0000,0x0000, 0x1A75,0x0000,0x0000, -0x1A76,0x0000,0x0000, 0x1A77,0x0000,0x0000, 0x1A78,0x0000,0x0000, -0x1A79,0x0000,0x0000, 0x1A7A,0x0000,0x0000, 0x1A7B,0x0000,0x0000, -0x1A7C,0x0000,0x0000, 0x1A7D,0x0000,0x0000, 0x1A7E,0x0000,0x0000, -0x1A7F,0x0000,0x0000, 0x1A80,0x0000,0x0000, 0x1A81,0x0000,0x0000, -0x1A82,0x0000,0x0000, 0x1A83,0x0000,0x0000, 0x1A84,0x0000,0x0000, -0x1A85,0x0000,0x0000, 0x1A86,0x0000,0x0000, 0x1A87,0x0000,0x0000, -0x1A88,0x0000,0x0000, 0x1A89,0x0000,0x0000, 0x1A8A,0x0000,0x0000, -0x1A8B,0x0000,0x0000, 0x1A8C,0x0000,0x0000, 0x1A8D,0x0000,0x0000, -0x1A8E,0x0000,0x0000, 0x1A8F,0x0000,0x0000, 0x1A90,0x0000,0x0000, -0x1A91,0x0000,0x0000, 0x1A92,0x0000,0x0000, 0x1A93,0x0000,0x0000, -0x1A94,0x0000,0x0000, 0x1A95,0x0000,0x0000, 0x1A96,0x0000,0x0000, -0x1A97,0x0000,0x0000, 0x1A98,0x0000,0x0000, 0x1A99,0x0000,0x0000, -0x1A9A,0x0000,0x0000, 0x1A9B,0x0000,0x0000, 0x1A9C,0x0000,0x0000, -0x1A9D,0x0000,0x0000, 0x1A9E,0x0000,0x0000, 0x1A9F,0x0000,0x0000, -0x1AA0,0x0000,0x0000, 0x1AA1,0x0000,0x0000, 0x1AA2,0x0000,0x0000, -0x1AA3,0x0000,0x0000, 0x1AA4,0x0000,0x0000, 0x1AA5,0x0000,0x0000, -0x1AA6,0x0000,0x0000, 0x1AA7,0x0000,0x0000, 0x1AA8,0x0000,0x0000, -0x1AA9,0x0000,0x0000, 0x1AAA,0x0000,0x0000, 0x1AAB,0x0000,0x0000, -0x1AAC,0x0000,0x0000, 0x1AAD,0x0000,0x0000, 0xFBC0,0x93F5,0x0000, -0xFBC0,0x93F6,0x0000, 0xFBC0,0x93F7,0x0000, 0xFBC0,0x93F8,0x0000, -0xFBC0,0x93F9,0x0000, 0xFBC0,0x93FA,0x0000, 0xFBC0,0x93FB,0x0000, -0xFBC0,0x93FC,0x0000, 0xFBC0,0x93FD,0x0000, 0xFBC0,0x93FE,0x0000, -0xFBC0,0x93FF,0x0000 }; - -uint16 page014data[]= { /* 1400 (3 weights per char) */ -0xFBC0,0x9400,0x0000, 0x1AAE,0x0000,0x0000, 0x1AAF,0x0000,0x0000, -0x1AB0,0x0000,0x0000, 0x1AB1,0x0000,0x0000, 0x1AB2,0x0000,0x0000, -0x1AB3,0x0000,0x0000, 0x1AB4,0x0000,0x0000, 0x1AB5,0x0000,0x0000, -0x1AB6,0x0000,0x0000, 0x1AB7,0x0000,0x0000, 0x1AB8,0x0000,0x0000, -0x1AB9,0x0000,0x0000, 0x1ABA,0x0000,0x0000, 0x1ABB,0x0000,0x0000, -0x1ABC,0x0000,0x0000, 0x1ABD,0x0000,0x0000, 0x1ABE,0x0000,0x0000, -0x1ABF,0x0000,0x0000, 0x1AC0,0x0000,0x0000, 0x1AC1,0x0000,0x0000, -0x1AC2,0x0000,0x0000, 0x1AC3,0x0000,0x0000, 0x1AC4,0x0000,0x0000, -0x1AC5,0x0000,0x0000, 0x1AC6,0x0000,0x0000, 0x1AC7,0x0000,0x0000, -0x1AC8,0x0000,0x0000, 0x1AC9,0x0000,0x0000, 0x1ACA,0x0000,0x0000, -0x1ACB,0x0000,0x0000, 0x1ACC,0x0000,0x0000, 0x1ACD,0x0000,0x0000, -0x1ACE,0x0000,0x0000, 0x1ACF,0x0000,0x0000, 0x1AD0,0x0000,0x0000, -0x1AD1,0x0000,0x0000, 0x1AD2,0x0000,0x0000, 0x1AD3,0x0000,0x0000, -0x1AD4,0x0000,0x0000, 0x1AD5,0x0000,0x0000, 0x1AD6,0x0000,0x0000, -0x1AD7,0x0000,0x0000, 0x1AD8,0x0000,0x0000, 0x1AD9,0x0000,0x0000, -0x1ADA,0x0000,0x0000, 0x1ADB,0x0000,0x0000, 0x1ADC,0x0000,0x0000, -0x1ADD,0x0000,0x0000, 0x1ADE,0x0000,0x0000, 0x1ADF,0x0000,0x0000, -0x1AE0,0x0000,0x0000, 0x1AE1,0x0000,0x0000, 0x1AE2,0x0000,0x0000, -0x1AE3,0x0000,0x0000, 0x1AE4,0x0000,0x0000, 0x1AE5,0x0000,0x0000, -0x1AE6,0x0000,0x0000, 0x1AE7,0x0000,0x0000, 0x1AE8,0x0000,0x0000, -0x1AE9,0x0000,0x0000, 0x1AEA,0x0000,0x0000, 0x1AEB,0x0000,0x0000, -0x1AEC,0x0000,0x0000, 0x1AED,0x0000,0x0000, 0x1AEE,0x0000,0x0000, -0x1AEF,0x0000,0x0000, 0x1AF0,0x0000,0x0000, 0x1AF1,0x0000,0x0000, -0x1AF2,0x0000,0x0000, 0x1AF3,0x0000,0x0000, 0x1AF4,0x0000,0x0000, -0x1AF5,0x0000,0x0000, 0x1AF6,0x0000,0x0000, 0x1AF7,0x0000,0x0000, -0x1AF8,0x0000,0x0000, 0x1AF9,0x0000,0x0000, 0x1AFA,0x0000,0x0000, -0x1AFB,0x0000,0x0000, 0x1AFC,0x0000,0x0000, 0x1AFD,0x0000,0x0000, -0x1AFE,0x0000,0x0000, 0x1AFF,0x0000,0x0000, 0x1B00,0x0000,0x0000, -0x1B01,0x0000,0x0000, 0x1B02,0x0000,0x0000, 0x1B03,0x0000,0x0000, -0x1B04,0x0000,0x0000, 0x1B05,0x0000,0x0000, 0x1B06,0x0000,0x0000, -0x1B07,0x0000,0x0000, 0x1B08,0x0000,0x0000, 0x1B09,0x0000,0x0000, -0x1B0A,0x0000,0x0000, 0x1B0B,0x0000,0x0000, 0x1B0C,0x0000,0x0000, -0x1B0D,0x0000,0x0000, 0x1B0E,0x0000,0x0000, 0x1B0F,0x0000,0x0000, -0x1B10,0x0000,0x0000, 0x1B11,0x0000,0x0000, 0x1B12,0x0000,0x0000, -0x1B13,0x0000,0x0000, 0x1B14,0x0000,0x0000, 0x1B15,0x0000,0x0000, -0x1B16,0x0000,0x0000, 0x1B17,0x0000,0x0000, 0x1B18,0x0000,0x0000, -0x1B19,0x0000,0x0000, 0x1B1A,0x0000,0x0000, 0x1B1B,0x0000,0x0000, -0x1B1C,0x0000,0x0000, 0x1B1D,0x0000,0x0000, 0x1B1E,0x0000,0x0000, -0x1B1F,0x0000,0x0000, 0x1B20,0x0000,0x0000, 0x1B21,0x0000,0x0000, -0x1B22,0x0000,0x0000, 0x1B23,0x0000,0x0000, 0x1B24,0x0000,0x0000, -0x1B25,0x0000,0x0000, 0x1B26,0x0000,0x0000, 0x1B27,0x0000,0x0000, -0x1B28,0x0000,0x0000, 0x1B29,0x0000,0x0000, 0x1B2A,0x0000,0x0000, -0x1B2B,0x0000,0x0000, 0x1B2C,0x0000,0x0000, 0x1B2D,0x0000,0x0000, -0x1B2E,0x0000,0x0000, 0x1B2F,0x0000,0x0000, 0x1B30,0x0000,0x0000, -0x1B31,0x0000,0x0000, 0x1B32,0x0000,0x0000, 0x1B33,0x0000,0x0000, -0x1B34,0x0000,0x0000, 0x1B35,0x0000,0x0000, 0x1B36,0x0000,0x0000, -0x1B37,0x0000,0x0000, 0x1B38,0x0000,0x0000, 0x1B39,0x0000,0x0000, -0x1B3A,0x0000,0x0000, 0x1B3B,0x0000,0x0000, 0x1B3C,0x0000,0x0000, -0x1B3D,0x0000,0x0000, 0x1B3E,0x0000,0x0000, 0x1B3F,0x0000,0x0000, -0x1B40,0x0000,0x0000, 0x1B41,0x0000,0x0000, 0x1B42,0x0000,0x0000, -0x1B43,0x0000,0x0000, 0x1B44,0x0000,0x0000, 0x1B45,0x0000,0x0000, -0x1B46,0x0000,0x0000, 0x1B47,0x0000,0x0000, 0x1B48,0x0000,0x0000, -0x1B49,0x0000,0x0000, 0x1B4A,0x0000,0x0000, 0x1B4B,0x0000,0x0000, -0x1B4C,0x0000,0x0000, 0x1B4D,0x0000,0x0000, 0x1B4E,0x0000,0x0000, -0x1B4F,0x0000,0x0000, 0x1B50,0x0000,0x0000, 0x1B51,0x0000,0x0000, -0x1B52,0x0000,0x0000, 0x1B53,0x0000,0x0000, 0x1B54,0x0000,0x0000, -0x1B55,0x0000,0x0000, 0x1B56,0x0000,0x0000, 0x1B57,0x0000,0x0000, -0x1B58,0x0000,0x0000, 0x1B59,0x0000,0x0000, 0x1B5A,0x0000,0x0000, -0x1B5B,0x0000,0x0000, 0x1B5C,0x0000,0x0000, 0x1B5D,0x0000,0x0000, -0x1B5E,0x0000,0x0000, 0x1B5F,0x0000,0x0000, 0x1B60,0x0000,0x0000, -0x1B61,0x0000,0x0000, 0x1B62,0x0000,0x0000, 0x1B63,0x0000,0x0000, -0x1B64,0x0000,0x0000, 0x1B65,0x0000,0x0000, 0x1B66,0x0000,0x0000, -0x1B67,0x0000,0x0000, 0x1B68,0x0000,0x0000, 0x1B69,0x0000,0x0000, -0x1B6A,0x0000,0x0000, 0x1B6B,0x0000,0x0000, 0x1B6C,0x0000,0x0000, -0x1B6D,0x0000,0x0000, 0x1B6E,0x0000,0x0000, 0x1B6F,0x0000,0x0000, -0x1B70,0x0000,0x0000, 0x1B71,0x0000,0x0000, 0x1B72,0x0000,0x0000, -0x1B73,0x0000,0x0000, 0x1B74,0x0000,0x0000, 0x1B75,0x0000,0x0000, -0x1B76,0x0000,0x0000, 0x1B77,0x0000,0x0000, 0x1B78,0x0000,0x0000, -0x1B79,0x0000,0x0000, 0x1B7A,0x0000,0x0000, 0x1B7B,0x0000,0x0000, -0x1B7C,0x0000,0x0000, 0x1B7D,0x0000,0x0000, 0x1B7E,0x0000,0x0000, -0x1B7F,0x0000,0x0000, 0x1B80,0x0000,0x0000, 0x1B81,0x0000,0x0000, -0x1B82,0x0000,0x0000, 0x1B83,0x0000,0x0000, 0x1B84,0x0000,0x0000, -0x1B85,0x0000,0x0000, 0x1B86,0x0000,0x0000, 0x1B87,0x0000,0x0000, -0x1B88,0x0000,0x0000, 0x1B89,0x0000,0x0000, 0x1B8A,0x0000,0x0000, -0x1B8B,0x0000,0x0000, 0x1B8C,0x0000,0x0000, 0x1B8D,0x0000,0x0000, -0x1B8E,0x0000,0x0000, 0x1B8F,0x0000,0x0000, 0x1B90,0x0000,0x0000, -0x1B91,0x0000,0x0000, 0x1B92,0x0000,0x0000, 0x1B93,0x0000,0x0000, -0x1B94,0x0000,0x0000, 0x1B95,0x0000,0x0000, 0x1B96,0x0000,0x0000, -0x1B97,0x0000,0x0000, 0x1B98,0x0000,0x0000, 0x1B99,0x0000,0x0000, -0x1B9A,0x0000,0x0000, 0x1B9B,0x0000,0x0000, 0x1B9C,0x0000,0x0000, -0x1B9D,0x0000,0x0000, 0x1B9E,0x0000,0x0000, 0x1B9F,0x0000,0x0000, -0x1BA0,0x0000,0x0000, 0x1BA1,0x0000,0x0000, 0x1BA2,0x0000,0x0000, -0x1BA3,0x0000,0x0000, 0x1BA4,0x0000,0x0000, 0x1BA5,0x0000,0x0000, -0x1BA6,0x0000,0x0000, 0x1BA7,0x0000,0x0000, 0x1BA8,0x0000,0x0000, -0x1BA9,0x0000,0x0000, 0x1BAA,0x0000,0x0000, 0x1BAB,0x0000,0x0000, -0x1BAC,0x0000,0x0000 }; - -uint16 page015data[]= { /* 1500 (2 weights per char) */ -0x1BAD,0x0000, 0x1BAE,0x0000, 0x1BAF,0x0000, 0x1BB0,0x0000, -0x1BB1,0x0000, 0x1BB2,0x0000, 0x1BB3,0x0000, 0x1BB4,0x0000, -0x1BB5,0x0000, 0x1BB6,0x0000, 0x1BB7,0x0000, 0x1BB8,0x0000, -0x1BB9,0x0000, 0x1BBA,0x0000, 0x1BBB,0x0000, 0x1BBC,0x0000, -0x1BBD,0x0000, 0x1BBE,0x0000, 0x1BBF,0x0000, 0x1BC0,0x0000, -0x1BC1,0x0000, 0x1BC2,0x0000, 0x1BC3,0x0000, 0x1BC4,0x0000, -0x1BC5,0x0000, 0x1BC6,0x0000, 0x1BC7,0x0000, 0x1BC8,0x0000, -0x1BC9,0x0000, 0x1BCA,0x0000, 0x1BCB,0x0000, 0x1BCC,0x0000, -0x1BCD,0x0000, 0x1BCE,0x0000, 0x1BCF,0x0000, 0x1BD0,0x0000, -0x1BD1,0x0000, 0x1BD2,0x0000, 0x1BD3,0x0000, 0x1BD4,0x0000, -0x1BD5,0x0000, 0x1BD6,0x0000, 0x1BD7,0x0000, 0x1BD8,0x0000, -0x1BD9,0x0000, 0x1BDA,0x0000, 0x1BDB,0x0000, 0x1BDC,0x0000, -0x1BDD,0x0000, 0x1BDE,0x0000, 0x1BDF,0x0000, 0x1BE0,0x0000, -0x1BE1,0x0000, 0x1BE2,0x0000, 0x1BE3,0x0000, 0x1BE4,0x0000, -0x1BE5,0x0000, 0x1BE6,0x0000, 0x1BE7,0x0000, 0x1BE8,0x0000, -0x1BE9,0x0000, 0x1BEA,0x0000, 0x1BEB,0x0000, 0x1BEC,0x0000, -0x1BED,0x0000, 0x1BEE,0x0000, 0x1BEF,0x0000, 0x1BF0,0x0000, -0x1BF1,0x0000, 0x1BF2,0x0000, 0x1BF3,0x0000, 0x1BF4,0x0000, -0x1BF5,0x0000, 0x1BF6,0x0000, 0x1BF7,0x0000, 0x1BF8,0x0000, -0x1BF9,0x0000, 0x1BFA,0x0000, 0x1BFB,0x0000, 0x1BFC,0x0000, -0x1BFD,0x0000, 0x1BFE,0x0000, 0x1BFF,0x0000, 0x1C00,0x0000, -0x1C01,0x0000, 0x1C02,0x0000, 0x1C03,0x0000, 0x1C04,0x0000, -0x1C05,0x0000, 0x1C06,0x0000, 0x1C07,0x0000, 0x1C08,0x0000, -0x1C09,0x0000, 0x1C0A,0x0000, 0x1C0B,0x0000, 0x1C0C,0x0000, -0x1C0D,0x0000, 0x1C0E,0x0000, 0x1C0F,0x0000, 0x1C10,0x0000, -0x1C11,0x0000, 0x1C12,0x0000, 0x1C13,0x0000, 0x1C14,0x0000, -0x1C15,0x0000, 0x1C16,0x0000, 0x1C17,0x0000, 0x1C18,0x0000, -0x1C19,0x0000, 0x1C1A,0x0000, 0x1C1B,0x0000, 0x1C1C,0x0000, -0x1C1D,0x0000, 0x1C1E,0x0000, 0x1C1F,0x0000, 0x1C20,0x0000, -0x1C21,0x0000, 0x1C22,0x0000, 0x1C23,0x0000, 0x1C24,0x0000, -0x1C25,0x0000, 0x1C26,0x0000, 0x1C27,0x0000, 0x1C28,0x0000, -0x1C5B,0x0000, 0x1C29,0x0000, 0x1C2B,0x0000, 0x1C2C,0x0000, -0x1C2D,0x0000, 0x1C2E,0x0000, 0x1C2F,0x0000, 0x1C30,0x0000, -0x1C31,0x0000, 0x1C32,0x0000, 0x1C33,0x0000, 0x1C34,0x0000, -0x1C35,0x0000, 0x1C36,0x0000, 0x1C37,0x0000, 0x1C38,0x0000, -0x1C39,0x0000, 0x1C3A,0x0000, 0x1C3C,0x0000, 0x1C3D,0x0000, -0x1C3E,0x0000, 0x1C3F,0x0000, 0x1C40,0x0000, 0x1C41,0x0000, -0x1C42,0x0000, 0x1C43,0x0000, 0x1C4A,0x0000, 0x1C4B,0x0000, -0x1C4C,0x0000, 0x1C4D,0x0000, 0x1C4E,0x0000, 0x1C4F,0x0000, -0x1C50,0x0000, 0x1C51,0x0000, 0x1C52,0x0000, 0x1C53,0x0000, -0x1C54,0x0000, 0x1C55,0x0000, 0x1C56,0x0000, 0x1C57,0x0000, -0x1C58,0x0000, 0x1C59,0x0000, 0x1C5A,0x0000, 0x1C5C,0x0000, -0x1C5D,0x0000, 0x1C5E,0x0000, 0x1C5F,0x0000, 0x1C60,0x0000, -0x1C61,0x0000, 0x1C62,0x0000, 0x1C63,0x0000, 0x1C64,0x0000, -0x1C65,0x0000, 0x1C66,0x0000, 0x1C67,0x0000, 0x1C68,0x0000, -0x1C69,0x0000, 0x1C6A,0x0000, 0x1C6B,0x0000, 0x1C6C,0x0000, -0x1C6D,0x0000, 0x1C6E,0x0000, 0x1C6F,0x0000, 0x1C70,0x0000, -0x1C71,0x0000, 0x1C72,0x0000, 0x1C73,0x0000, 0x1C74,0x0000, -0x1C75,0x0000, 0x1C76,0x0000, 0x1C77,0x0000, 0x1C78,0x0000, -0x1C79,0x0000, 0x1C7A,0x0000, 0x1C7B,0x0000, 0x1C7C,0x0000, -0x1C7D,0x0000, 0x1C7E,0x0000, 0x1C7F,0x0000, 0x1C80,0x0000, -0x1C81,0x0000, 0x1C82,0x0000, 0x1C83,0x0000, 0x1C84,0x0000, -0x1C85,0x0000, 0x1C86,0x0000, 0x1C87,0x0000, 0x1C88,0x0000, -0x1C89,0x0000, 0x1C8A,0x0000, 0x1C8B,0x0000, 0x1C8C,0x0000, -0x1C8D,0x0000, 0x1C8E,0x0000, 0x1C8F,0x0000, 0x1C90,0x0000, -0x1C91,0x0000, 0x1C92,0x0000, 0x1C93,0x0000, 0x1C94,0x0000, -0x1C95,0x0000, 0x1C96,0x0000, 0x1C97,0x0000, 0x1C98,0x0000, -0x1C99,0x0000, 0x1C9A,0x0000, 0x1C9B,0x0000, 0x1C9C,0x0000, -0x1C9D,0x0000, 0x1C9E,0x0000, 0x1C9F,0x0000, 0x1CA0,0x0000, -0x1CA1,0x0000, 0x1CA2,0x0000, 0x1CA3,0x0000, 0x1CA4,0x0000, -0x1CA5,0x0000, 0x1CA6,0x0000, 0x1CA7,0x0000, 0x1CA8,0x0000, -0x1CA9,0x0000, 0x1CAA,0x0000, 0x1CAB,0x0000, 0x1CAC,0x0000, -0x1CAD,0x0000, 0x1CAE,0x0000, 0x1CAF,0x0000, 0x1CB0,0x0000, -0x1CB1,0x0000, 0x1CB2,0x0000, 0x1CB3,0x0000, 0x1CB4,0x0000 -}; - -uint16 page016data[]= { /* 1600 (3 weights per char) */ -0x1CB5,0x0000,0x0000, 0x1CB6,0x0000,0x0000, 0x1CB7,0x0000,0x0000, -0x1CB8,0x0000,0x0000, 0x1CB9,0x0000,0x0000, 0x1CBA,0x0000,0x0000, -0x1CBB,0x0000,0x0000, 0x1CBC,0x0000,0x0000, 0x1CBD,0x0000,0x0000, -0x1CBE,0x0000,0x0000, 0x1CBF,0x0000,0x0000, 0x1CC0,0x0000,0x0000, -0x1CC1,0x0000,0x0000, 0x1CC2,0x0000,0x0000, 0x1CC3,0x0000,0x0000, -0x1CC4,0x0000,0x0000, 0x1CC5,0x0000,0x0000, 0x1CC6,0x0000,0x0000, -0x1CC7,0x0000,0x0000, 0x1CC8,0x0000,0x0000, 0x1CC9,0x0000,0x0000, -0x1CCA,0x0000,0x0000, 0x1CCB,0x0000,0x0000, 0x1CCC,0x0000,0x0000, -0x1CCD,0x0000,0x0000, 0x1CCE,0x0000,0x0000, 0x1CCF,0x0000,0x0000, -0x1CD0,0x0000,0x0000, 0x1CD1,0x0000,0x0000, 0x1CD2,0x0000,0x0000, -0x1CD3,0x0000,0x0000, 0x1CD4,0x0000,0x0000, 0x1CD5,0x0000,0x0000, -0x1CD6,0x0000,0x0000, 0x1CD7,0x0000,0x0000, 0x1CD8,0x0000,0x0000, -0x1CD9,0x0000,0x0000, 0x1CDA,0x0000,0x0000, 0x1CDB,0x0000,0x0000, -0x1CDC,0x0000,0x0000, 0x1CDD,0x0000,0x0000, 0x1CDE,0x0000,0x0000, -0x1CDF,0x0000,0x0000, 0x1CE0,0x0000,0x0000, 0x1CE1,0x0000,0x0000, -0x1CE2,0x0000,0x0000, 0x1CE3,0x0000,0x0000, 0x1CE4,0x0000,0x0000, -0x1CE5,0x0000,0x0000, 0x1CE6,0x0000,0x0000, 0x1CE7,0x0000,0x0000, -0x1CE8,0x0000,0x0000, 0x1CE9,0x0000,0x0000, 0x1CEA,0x0000,0x0000, -0x1CEB,0x0000,0x0000, 0x1CEC,0x0000,0x0000, 0x1CED,0x0000,0x0000, -0x1CEE,0x0000,0x0000, 0x1CEF,0x0000,0x0000, 0x1CF0,0x0000,0x0000, -0x1CF1,0x0000,0x0000, 0x1CF2,0x0000,0x0000, 0x1CF3,0x0000,0x0000, -0x1CF4,0x0000,0x0000, 0x1CF5,0x0000,0x0000, 0x1CF6,0x0000,0x0000, -0x1CF7,0x0000,0x0000, 0x1CF8,0x0000,0x0000, 0x1CF9,0x0000,0x0000, -0x1CFA,0x0000,0x0000, 0x1CFB,0x0000,0x0000, 0x1CFC,0x0000,0x0000, -0x1CFD,0x0000,0x0000, 0x1CFE,0x0000,0x0000, 0x1CFF,0x0000,0x0000, -0x1D00,0x0000,0x0000, 0x1D01,0x0000,0x0000, 0x1D02,0x0000,0x0000, -0x1D03,0x0000,0x0000, 0x1D04,0x0000,0x0000, 0x1D05,0x0000,0x0000, -0x1D06,0x0000,0x0000, 0x1D07,0x0000,0x0000, 0x1D08,0x0000,0x0000, -0x1D09,0x0000,0x0000, 0x1D0A,0x0000,0x0000, 0x1D0B,0x0000,0x0000, -0x1D0C,0x0000,0x0000, 0x1D0D,0x0000,0x0000, 0x1D0E,0x0000,0x0000, -0x1D0F,0x0000,0x0000, 0x1D10,0x0000,0x0000, 0x1D11,0x0000,0x0000, -0x1D12,0x0000,0x0000, 0x1D13,0x0000,0x0000, 0x1D14,0x0000,0x0000, -0x1D15,0x0000,0x0000, 0x1D16,0x0000,0x0000, 0x1D17,0x0000,0x0000, -0x1D18,0x0000,0x0000, 0x1D19,0x0000,0x0000, 0x1D1A,0x0000,0x0000, -0x1D1B,0x0000,0x0000, 0x1D1C,0x0000,0x0000, 0x1D1D,0x0000,0x0000, -0x1D1E,0x0000,0x0000, 0x1D1F,0x0000,0x0000, 0x1D20,0x0000,0x0000, -0x1D21,0x0000,0x0000, 0x0316,0x0000,0x0000, 0x0265,0x0000,0x0000, -0x1C2A,0x0000,0x0000, 0x1C3B,0x0000,0x0000, 0x1C44,0x0000,0x0000, -0x1C45,0x0000,0x0000, 0x1C46,0x0000,0x0000, 0x1C47,0x0000,0x0000, -0x1C48,0x0000,0x0000, 0x1C49,0x0000,0x0000, 0xFBC0,0x9677,0x0000, -0xFBC0,0x9678,0x0000, 0xFBC0,0x9679,0x0000, 0xFBC0,0x967A,0x0000, -0xFBC0,0x967B,0x0000, 0xFBC0,0x967C,0x0000, 0xFBC0,0x967D,0x0000, -0xFBC0,0x967E,0x0000, 0xFBC0,0x967F,0x0000, 0x020A,0x0000,0x0000, -0x1D22,0x0000,0x0000, 0x1D23,0x0000,0x0000, 0x1D24,0x0000,0x0000, -0x1D25,0x0000,0x0000, 0x1D26,0x0000,0x0000, 0x1D27,0x0000,0x0000, -0x1D28,0x0000,0x0000, 0x1D29,0x0000,0x0000, 0x1D2A,0x0000,0x0000, -0x1D2B,0x0000,0x0000, 0x1D2C,0x0000,0x0000, 0x1D2D,0x0000,0x0000, -0x1D2E,0x0000,0x0000, 0x1D2F,0x0000,0x0000, 0x1D30,0x0000,0x0000, -0x1D31,0x0000,0x0000, 0x1D32,0x0000,0x0000, 0x1D33,0x0000,0x0000, -0x1D34,0x0000,0x0000, 0x1D35,0x0000,0x0000, 0x1D36,0x0000,0x0000, -0x1D37,0x0000,0x0000, 0x1D38,0x0000,0x0000, 0x1D39,0x0000,0x0000, -0x1D3A,0x0000,0x0000, 0x1D3B,0x0000,0x0000, 0x0292,0x0000,0x0000, -0x0293,0x0000,0x0000, 0xFBC0,0x969D,0x0000, 0xFBC0,0x969E,0x0000, -0xFBC0,0x969F,0x0000, 0x1D3C,0x0000,0x0000, 0x1D3C,0x0000,0x0000, -0x1D3D,0x0000,0x0000, 0x1D59,0x0000,0x0000, 0x1D3D,0x0000,0x0000, -0x1D3D,0x0000,0x0000, 0x1D3E,0x0000,0x0000, 0x1D3E,0x0000,0x0000, -0x1D3F,0x0000,0x0000, 0x1D3F,0x0000,0x0000, 0x1D57,0x0000,0x0000, -0x1D58,0x0000,0x0000, 0x1D3F,0x0000,0x0000, 0x1D3F,0x0000,0x0000, -0x1D3F,0x0000,0x0000, 0x1D40,0x0000,0x0000, 0x1D41,0x0000,0x0000, -0x1D42,0x0000,0x0000, 0x1D43,0x0000,0x0000, 0x1D43,0x0000,0x0000, -0x1D43,0x0000,0x0000, 0x1D43,0x0000,0x0000, 0x1D43,0x0000,0x0000, -0x1D44,0x0000,0x0000, 0x1D5C,0x0000,0x0000, 0x1D45,0x0000,0x0000, -0x1D46,0x0000,0x0000, 0x1D46,0x0000,0x0000, 0x1D46,0x0000,0x0000, -0x1D46,0x0000,0x0000, 0x1D47,0x0000,0x0000, 0x1D47,0x0000,0x0000, -0x1D47,0x0000,0x0000, 0x1D48,0x0000,0x0000, 0x1D48,0x0000,0x0000, -0x1D49,0x0000,0x0000, 0x1D49,0x0000,0x0000, 0x1D4A,0x0000,0x0000, -0x1D4A,0x0000,0x0000, 0x1D4B,0x0000,0x0000, 0x1D4C,0x0000,0x0000, -0x1D4D,0x0000,0x0000, 0x1D4E,0x0000,0x0000, 0x1D4E,0x0000,0x0000, -0x1D4E,0x0000,0x0000, 0x1D4E,0x0000,0x0000, 0x1D4E,0x0000,0x0000, -0x1D4F,0x0000,0x0000, 0x1D4F,0x0000,0x0000, 0x1D4F,0x0000,0x0000, -0x1D50,0x0000,0x0000, 0x1D50,0x0000,0x0000, 0x1D50,0x0000,0x0000, -0x1D4C,0x0000,0x0000, 0x1D51,0x0000,0x0000, 0x1D52,0x0000,0x0000, -0x1D52,0x0000,0x0000, 0x1D52,0x0000,0x0000, 0x1D53,0x0000,0x0000, -0x1D53,0x0000,0x0000, 0x1D54,0x0000,0x0000, 0x1D54,0x0000,0x0000, -0x1D55,0x0000,0x0000, 0x1D56,0x0000,0x0000, 0x1D5A,0x0000,0x0000, -0x1D5E,0x0000,0x0000, 0x1D5F,0x0000,0x0000, 0x1D5B,0x0000,0x0000, -0x1D5D,0x0000,0x0000, 0x1D60,0x0000,0x0000, 0x1D61,0x0000,0x0000, -0x1D61,0x0000,0x0000, 0x1D61,0x0000,0x0000, 0x1D45,0x0000,0x0000, -0x1D4E,0x0000,0x0000, 0x024E,0x0000,0x0000, 0x024F,0x0000,0x0000, -0x0250,0x0000,0x0000, 0x1D4A,0x1D53,0x0000, 0x1D52,0x1D52,0x0000, -0x1D3E,0x1D3E,0x0000, 0xFBC0,0x96F1,0x0000, 0xFBC0,0x96F2,0x0000, -0xFBC0,0x96F3,0x0000, 0xFBC0,0x96F4,0x0000, 0xFBC0,0x96F5,0x0000, -0xFBC0,0x96F6,0x0000, 0xFBC0,0x96F7,0x0000, 0xFBC0,0x96F8,0x0000, -0xFBC0,0x96F9,0x0000, 0xFBC0,0x96FA,0x0000, 0xFBC0,0x96FB,0x0000, -0xFBC0,0x96FC,0x0000, 0xFBC0,0x96FD,0x0000, 0xFBC0,0x96FE,0x0000, -0xFBC0,0x96FF,0x0000 }; - -uint16 page017data[]= { /* 1700 (3 weights per char) */ -0x18E2,0x0000,0x0000, 0x18E3,0x0000,0x0000, 0x18E4,0x0000,0x0000, -0x18E5,0x0000,0x0000, 0x18E6,0x0000,0x0000, 0x18E7,0x0000,0x0000, -0x18E8,0x0000,0x0000, 0x18E9,0x0000,0x0000, 0x18EA,0x0000,0x0000, -0x18EB,0x0000,0x0000, 0x18EC,0x0000,0x0000, 0x18ED,0x0000,0x0000, -0x18EE,0x0000,0x0000, 0xFBC0,0x970D,0x0000, 0x18EF,0x0000,0x0000, -0x18F0,0x0000,0x0000, 0x18F1,0x0000,0x0000, 0x18F2,0x0000,0x0000, -0x18F3,0x0000,0x0000, 0x18F4,0x0000,0x0000, 0x18F5,0x0000,0x0000, -0xFBC0,0x9715,0x0000, 0xFBC0,0x9716,0x0000, 0xFBC0,0x9717,0x0000, -0xFBC0,0x9718,0x0000, 0xFBC0,0x9719,0x0000, 0xFBC0,0x971A,0x0000, -0xFBC0,0x971B,0x0000, 0xFBC0,0x971C,0x0000, 0xFBC0,0x971D,0x0000, -0xFBC0,0x971E,0x0000, 0xFBC0,0x971F,0x0000, 0x18F6,0x0000,0x0000, -0x18F7,0x0000,0x0000, 0x18F8,0x0000,0x0000, 0x18F9,0x0000,0x0000, -0x18FA,0x0000,0x0000, 0x18FB,0x0000,0x0000, 0x18FC,0x0000,0x0000, -0x18FD,0x0000,0x0000, 0x18FE,0x0000,0x0000, 0x18FF,0x0000,0x0000, -0x1900,0x0000,0x0000, 0x1901,0x0000,0x0000, 0x1902,0x0000,0x0000, -0x1903,0x0000,0x0000, 0x1904,0x0000,0x0000, 0x1905,0x0000,0x0000, -0x1906,0x0000,0x0000, 0x1907,0x0000,0x0000, 0x1908,0x0000,0x0000, -0x1909,0x0000,0x0000, 0x190A,0x0000,0x0000, 0x026A,0x0000,0x0000, -0x026B,0x0000,0x0000, 0xFBC0,0x9737,0x0000, 0xFBC0,0x9738,0x0000, -0xFBC0,0x9739,0x0000, 0xFBC0,0x973A,0x0000, 0xFBC0,0x973B,0x0000, -0xFBC0,0x973C,0x0000, 0xFBC0,0x973D,0x0000, 0xFBC0,0x973E,0x0000, -0xFBC0,0x973F,0x0000, 0x190B,0x0000,0x0000, 0x190C,0x0000,0x0000, -0x190D,0x0000,0x0000, 0x190E,0x0000,0x0000, 0x190F,0x0000,0x0000, -0x1910,0x0000,0x0000, 0x1911,0x0000,0x0000, 0x1912,0x0000,0x0000, -0x1913,0x0000,0x0000, 0x1914,0x0000,0x0000, 0x1915,0x0000,0x0000, -0x1916,0x0000,0x0000, 0x1917,0x0000,0x0000, 0x1918,0x0000,0x0000, -0x1919,0x0000,0x0000, 0x191A,0x0000,0x0000, 0x191B,0x0000,0x0000, -0x191C,0x0000,0x0000, 0x191D,0x0000,0x0000, 0x191E,0x0000,0x0000, -0xFBC0,0x9754,0x0000, 0xFBC0,0x9755,0x0000, 0xFBC0,0x9756,0x0000, -0xFBC0,0x9757,0x0000, 0xFBC0,0x9758,0x0000, 0xFBC0,0x9759,0x0000, -0xFBC0,0x975A,0x0000, 0xFBC0,0x975B,0x0000, 0xFBC0,0x975C,0x0000, -0xFBC0,0x975D,0x0000, 0xFBC0,0x975E,0x0000, 0xFBC0,0x975F,0x0000, -0x191F,0x0000,0x0000, 0x1920,0x0000,0x0000, 0x1921,0x0000,0x0000, -0x1922,0x0000,0x0000, 0x1923,0x0000,0x0000, 0x1924,0x0000,0x0000, -0x1925,0x0000,0x0000, 0x1926,0x0000,0x0000, 0x1927,0x0000,0x0000, -0x1928,0x0000,0x0000, 0x1929,0x0000,0x0000, 0x192A,0x0000,0x0000, -0x192B,0x0000,0x0000, 0xFBC0,0x976D,0x0000, 0x192C,0x0000,0x0000, -0x192D,0x0000,0x0000, 0x192E,0x0000,0x0000, 0xFBC0,0x9771,0x0000, -0x192F,0x0000,0x0000, 0x1930,0x0000,0x0000, 0xFBC0,0x9774,0x0000, -0xFBC0,0x9775,0x0000, 0xFBC0,0x9776,0x0000, 0xFBC0,0x9777,0x0000, -0xFBC0,0x9778,0x0000, 0xFBC0,0x9779,0x0000, 0xFBC0,0x977A,0x0000, -0xFBC0,0x977B,0x0000, 0xFBC0,0x977C,0x0000, 0xFBC0,0x977D,0x0000, -0xFBC0,0x977E,0x0000, 0xFBC0,0x977F,0x0000, 0x196C,0x0000,0x0000, -0x196D,0x0000,0x0000, 0x196E,0x0000,0x0000, 0x196F,0x0000,0x0000, -0x1970,0x0000,0x0000, 0x1971,0x0000,0x0000, 0x1972,0x0000,0x0000, -0x1973,0x0000,0x0000, 0x1974,0x0000,0x0000, 0x1975,0x0000,0x0000, -0x1976,0x0000,0x0000, 0x1977,0x0000,0x0000, 0x1978,0x0000,0x0000, -0x1979,0x0000,0x0000, 0x197A,0x0000,0x0000, 0x197B,0x0000,0x0000, -0x197C,0x0000,0x0000, 0x197D,0x0000,0x0000, 0x197E,0x0000,0x0000, -0x197F,0x0000,0x0000, 0x1980,0x0000,0x0000, 0x1981,0x0000,0x0000, -0x1982,0x0000,0x0000, 0x1983,0x0000,0x0000, 0x1984,0x0000,0x0000, -0x1985,0x0000,0x0000, 0x1986,0x0000,0x0000, 0x1987,0x0000,0x0000, -0x1988,0x0000,0x0000, 0x1989,0x0000,0x0000, 0x198A,0x0000,0x0000, -0x198B,0x0000,0x0000, 0x198C,0x0000,0x0000, 0x198D,0x0000,0x0000, -0x198E,0x0000,0x0000, 0x1990,0x0000,0x0000, 0x1991,0x0000,0x0000, -0x1992,0x0000,0x0000, 0x1993,0x0000,0x0000, 0x1994,0x0000,0x0000, -0x1995,0x0000,0x0000, 0x1996,0x0000,0x0000, 0x1997,0x0000,0x0000, -0x1998,0x0000,0x0000, 0x1999,0x0000,0x0000, 0x199A,0x0000,0x0000, -0x199B,0x0000,0x0000, 0x199C,0x0000,0x0000, 0x199D,0x0000,0x0000, -0x199E,0x0000,0x0000, 0x199F,0x0000,0x0000, 0x19A0,0x0000,0x0000, -0x19A1,0x0000,0x0000, 0x19A2,0x0000,0x0000, 0x19A3,0x0000,0x0000, -0x19A4,0x0000,0x0000, 0x19A5,0x0000,0x0000, 0x19A6,0x0000,0x0000, -0x19A7,0x0000,0x0000, 0x19A8,0x0000,0x0000, 0x19A9,0x0000,0x0000, -0x19AA,0x0000,0x0000, 0x19AB,0x0000,0x0000, 0x19AC,0x0000,0x0000, -0x19AD,0x0000,0x0000, 0x19AE,0x0000,0x0000, 0x19AF,0x0000,0x0000, -0x19B0,0x0000,0x0000, 0x19B1,0x0000,0x0000, 0x19B2,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x19B3,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x026E,0x0000,0x0000, -0x026F,0x0000,0x0000, 0x024D,0x0000,0x0000, 0x0312,0x0000,0x0000, -0x0313,0x0000,0x0000, 0x0314,0x0000,0x0000, 0x0315,0x0000,0x0000, -0x0E17,0x0000,0x0000, 0x198F,0x0000,0x0000, 0x0000,0x0000,0x0000, -0xFBC0,0x97DE,0x0000, 0xFBC0,0x97DF,0x0000, 0x0E29,0x0000,0x0000, -0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, -0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, -0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, -0xFBC0,0x97EA,0x0000, 0xFBC0,0x97EB,0x0000, 0xFBC0,0x97EC,0x0000, -0xFBC0,0x97ED,0x0000, 0xFBC0,0x97EE,0x0000, 0xFBC0,0x97EF,0x0000, -0x0E29,0x0000,0x0000, 0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, -0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, -0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, -0x0E32,0x0000,0x0000, 0xFBC0,0x97FA,0x0000, 0xFBC0,0x97FB,0x0000, -0xFBC0,0x97FC,0x0000, 0xFBC0,0x97FD,0x0000, 0xFBC0,0x97FE,0x0000, -0xFBC0,0x97FF,0x0000 }; - -uint16 page018data[]= { /* 1800 (3 weights per char) */ -0x02F8,0x0000,0x0000, 0x025E,0x0000,0x0000, 0x0235,0x0000,0x0000, -0x0263,0x0000,0x0000, 0x024A,0x0000,0x0000, 0x024B,0x0000,0x0000, -0x0223,0x0000,0x0000, 0x0224,0x0000,0x0000, 0x0236,0x0000,0x0000, -0x0264,0x0000,0x0000, 0x02F9,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0xFBC0,0x980F,0x0000, 0x0E29,0x0000,0x0000, 0x0E2A,0x0000,0x0000, -0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, -0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, -0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, 0xFBC0,0x981A,0x0000, -0xFBC0,0x981B,0x0000, 0xFBC0,0x981C,0x0000, 0xFBC0,0x981D,0x0000, -0xFBC0,0x981E,0x0000, 0xFBC0,0x981F,0x0000, 0x19DF,0x0000,0x0000, -0x19E1,0x0000,0x0000, 0x19E4,0x0000,0x0000, 0x19EA,0x0000,0x0000, -0x19EC,0x0000,0x0000, 0x19EF,0x0000,0x0000, 0x19F1,0x0000,0x0000, -0x19F4,0x0000,0x0000, 0x19F5,0x0000,0x0000, 0x19F6,0x0000,0x0000, -0x19FB,0x0000,0x0000, 0x19FD,0x0000,0x0000, 0x1A00,0x0000,0x0000, -0x1A02,0x0000,0x0000, 0x1A07,0x0000,0x0000, 0x1A09,0x0000,0x0000, -0x1A0A,0x0000,0x0000, 0x1A0B,0x0000,0x0000, 0x1A12,0x0000,0x0000, -0x1A15,0x0000,0x0000, 0x1A18,0x0000,0x0000, 0x1A1D,0x0000,0x0000, -0x1A21,0x0000,0x0000, 0x1A24,0x0000,0x0000, 0x1A26,0x0000,0x0000, -0x1A28,0x0000,0x0000, 0x1A2B,0x0000,0x0000, 0x1A30,0x0000,0x0000, -0x1A31,0x0000,0x0000, 0x1A34,0x0000,0x0000, 0x1A38,0x0000,0x0000, -0x1A3B,0x0000,0x0000, 0x1A3C,0x0000,0x0000, 0x1A3D,0x0000,0x0000, -0x1A3E,0x0000,0x0000, 0x19DE,0x0000,0x0000, 0x19E2,0x0000,0x0000, -0x19E5,0x0000,0x0000, 0x19EB,0x0000,0x0000, 0x19ED,0x0000,0x0000, -0x19F0,0x0000,0x0000, 0x19F2,0x0000,0x0000, 0x19F7,0x0000,0x0000, -0x19FC,0x0000,0x0000, 0x19FE,0x0000,0x0000, 0x1A01,0x0000,0x0000, -0x1A03,0x0000,0x0000, 0x1A08,0x0000,0x0000, 0x1A13,0x0000,0x0000, -0x1A16,0x0000,0x0000, 0x1A19,0x0000,0x0000, 0x1A1E,0x0000,0x0000, -0x1A32,0x0000,0x0000, 0x1A22,0x0000,0x0000, 0x1A27,0x0000,0x0000, -0x1A2C,0x0000,0x0000, 0x1A36,0x0000,0x0000, 0x1A39,0x0000,0x0000, -0x1A3F,0x0000,0x0000, 0x1A40,0x0000,0x0000, 0x1A1B,0x0000,0x0000, -0x19E3,0x0000,0x0000, 0x19E6,0x0000,0x0000, 0x19E9,0x0000,0x0000, -0x19F3,0x0000,0x0000, 0x19EE,0x0000,0x0000, 0x19F8,0x0000,0x0000, -0x1A2D,0x0000,0x0000, 0x1A04,0x0000,0x0000, 0x1A06,0x0000,0x0000, -0x19FF,0x0000,0x0000, 0x1A0C,0x0000,0x0000, 0x1A14,0x0000,0x0000, -0x1A17,0x0000,0x0000, 0x1A1F,0x0000,0x0000, 0x1A29,0x0000,0x0000, -0x1A37,0x0000,0x0000, 0x1A3A,0x0000,0x0000, 0x1A33,0x0000,0x0000, -0x1A35,0x0000,0x0000, 0x1A41,0x0000,0x0000, 0x1A1A,0x0000,0x0000, -0x1A23,0x0000,0x0000, 0x19E7,0x0000,0x0000, 0x1A2E,0x0000,0x0000, -0x1A25,0x0000,0x0000, 0x1A2A,0x0000,0x0000, 0x1A20,0x0000,0x0000, -0xFBC0,0x9878,0x0000, 0xFBC0,0x9879,0x0000, 0xFBC0,0x987A,0x0000, -0xFBC0,0x987B,0x0000, 0xFBC0,0x987C,0x0000, 0xFBC0,0x987D,0x0000, -0xFBC0,0x987E,0x0000, 0xFBC0,0x987F,0x0000, 0x19D7,0x0000,0x0000, -0x19D8,0x0000,0x0000, 0x19D9,0x0000,0x0000, 0x19DA,0x0000,0x0000, -0x19DB,0x0000,0x0000, 0x19DC,0x0000,0x0000, 0x19DD,0x0000,0x0000, -0x19E0,0x0000,0x0000, 0x19E8,0x0000,0x0000, 0x1A2F,0x0000,0x0000, -0x19F9,0x0000,0x0000, 0x1A1C,0x0000,0x0000, 0x1A42,0x0000,0x0000, -0x1A44,0x0000,0x0000, 0x1A45,0x0000,0x0000, 0x1A47,0x0000,0x0000, -0x1A48,0x0000,0x0000, 0x1A4B,0x0000,0x0000, 0x1A4D,0x0000,0x0000, -0x1A4E,0x0000,0x0000, 0x1A50,0x0000,0x0000, 0x1A52,0x0000,0x0000, -0x1A54,0x0000,0x0000, 0x1A55,0x0000,0x0000, 0x1A49,0x0000,0x0000, -0x1A53,0x0000,0x0000, 0x1A05,0x0000,0x0000, 0x19FA,0x0000,0x0000, -0x1A0D,0x0000,0x0000, 0x1A0E,0x0000,0x0000, 0x1A43,0x0000,0x0000, -0x1A46,0x0000,0x0000, 0x1A4A,0x0000,0x0000, 0x1A4C,0x0000,0x0000, -0x1A0F,0x0000,0x0000, 0x1A51,0x0000,0x0000, 0x1A10,0x0000,0x0000, -0x1A11,0x0000,0x0000, 0x1A56,0x0000,0x0000, 0x1A57,0x0000,0x0000, -0x1A4F,0x0000,0x0000, 0x1A58,0x0000,0x0000, 0xFBC0,0x98AA,0x0000, -0xFBC0,0x98AB,0x0000, 0xFBC0,0x98AC,0x0000, 0xFBC0,0x98AD,0x0000, -0xFBC0,0x98AE,0x0000, 0xFBC0,0x98AF,0x0000, 0xFBC0,0x98B0,0x0000, -0xFBC0,0x98B1,0x0000, 0xFBC0,0x98B2,0x0000, 0xFBC0,0x98B3,0x0000, -0xFBC0,0x98B4,0x0000, 0xFBC0,0x98B5,0x0000, 0xFBC0,0x98B6,0x0000, -0xFBC0,0x98B7,0x0000, 0xFBC0,0x98B8,0x0000, 0xFBC0,0x98B9,0x0000, -0xFBC0,0x98BA,0x0000, 0xFBC0,0x98BB,0x0000, 0xFBC0,0x98BC,0x0000, -0xFBC0,0x98BD,0x0000, 0xFBC0,0x98BE,0x0000, 0xFBC0,0x98BF,0x0000, -0xFBC0,0x98C0,0x0000, 0xFBC0,0x98C1,0x0000, 0xFBC0,0x98C2,0x0000, -0xFBC0,0x98C3,0x0000, 0xFBC0,0x98C4,0x0000, 0xFBC0,0x98C5,0x0000, -0xFBC0,0x98C6,0x0000, 0xFBC0,0x98C7,0x0000, 0xFBC0,0x98C8,0x0000, -0xFBC0,0x98C9,0x0000, 0xFBC0,0x98CA,0x0000, 0xFBC0,0x98CB,0x0000, -0xFBC0,0x98CC,0x0000, 0xFBC0,0x98CD,0x0000, 0xFBC0,0x98CE,0x0000, -0xFBC0,0x98CF,0x0000, 0xFBC0,0x98D0,0x0000, 0xFBC0,0x98D1,0x0000, -0xFBC0,0x98D2,0x0000, 0xFBC0,0x98D3,0x0000, 0xFBC0,0x98D4,0x0000, -0xFBC0,0x98D5,0x0000, 0xFBC0,0x98D6,0x0000, 0xFBC0,0x98D7,0x0000, -0xFBC0,0x98D8,0x0000, 0xFBC0,0x98D9,0x0000, 0xFBC0,0x98DA,0x0000, -0xFBC0,0x98DB,0x0000, 0xFBC0,0x98DC,0x0000, 0xFBC0,0x98DD,0x0000, -0xFBC0,0x98DE,0x0000, 0xFBC0,0x98DF,0x0000, 0xFBC0,0x98E0,0x0000, -0xFBC0,0x98E1,0x0000, 0xFBC0,0x98E2,0x0000, 0xFBC0,0x98E3,0x0000, -0xFBC0,0x98E4,0x0000, 0xFBC0,0x98E5,0x0000, 0xFBC0,0x98E6,0x0000, -0xFBC0,0x98E7,0x0000, 0xFBC0,0x98E8,0x0000, 0xFBC0,0x98E9,0x0000, -0xFBC0,0x98EA,0x0000, 0xFBC0,0x98EB,0x0000, 0xFBC0,0x98EC,0x0000, -0xFBC0,0x98ED,0x0000, 0xFBC0,0x98EE,0x0000, 0xFBC0,0x98EF,0x0000, -0xFBC0,0x98F0,0x0000, 0xFBC0,0x98F1,0x0000, 0xFBC0,0x98F2,0x0000, -0xFBC0,0x98F3,0x0000, 0xFBC0,0x98F4,0x0000, 0xFBC0,0x98F5,0x0000, -0xFBC0,0x98F6,0x0000, 0xFBC0,0x98F7,0x0000, 0xFBC0,0x98F8,0x0000, -0xFBC0,0x98F9,0x0000, 0xFBC0,0x98FA,0x0000, 0xFBC0,0x98FB,0x0000, -0xFBC0,0x98FC,0x0000, 0xFBC0,0x98FD,0x0000, 0xFBC0,0x98FE,0x0000, -0xFBC0,0x98FF,0x0000 }; - -uint16 page019data[]= { /* 1900 (3 weights per char) */ -0x18B0,0x0000,0x0000, 0x18B1,0x0000,0x0000, 0x18B2,0x0000,0x0000, -0x18B3,0x0000,0x0000, 0x18B4,0x0000,0x0000, 0x18B5,0x0000,0x0000, -0x18B6,0x0000,0x0000, 0x18B7,0x0000,0x0000, 0x18B8,0x0000,0x0000, -0x18B9,0x0000,0x0000, 0x18BA,0x0000,0x0000, 0x18BB,0x0000,0x0000, -0x18BC,0x0000,0x0000, 0x18BD,0x0000,0x0000, 0x18BE,0x0000,0x0000, -0x18BF,0x0000,0x0000, 0x18C0,0x0000,0x0000, 0x18C1,0x0000,0x0000, -0x18C2,0x0000,0x0000, 0x18C3,0x0000,0x0000, 0x18C4,0x0000,0x0000, -0x18C5,0x0000,0x0000, 0x18C6,0x0000,0x0000, 0x18C7,0x0000,0x0000, -0x18C8,0x0000,0x0000, 0x18C9,0x0000,0x0000, 0x18CA,0x0000,0x0000, -0x18CB,0x0000,0x0000, 0x18CC,0x0000,0x0000, 0xFBC0,0x991D,0x0000, -0xFBC0,0x991E,0x0000, 0xFBC0,0x991F,0x0000, 0x18CD,0x0000,0x0000, -0x18CE,0x0000,0x0000, 0x18CF,0x0000,0x0000, 0x18D0,0x0000,0x0000, -0x18D1,0x0000,0x0000, 0x18D2,0x0000,0x0000, 0x18D3,0x0000,0x0000, -0x18D4,0x0000,0x0000, 0x18D5,0x0000,0x0000, 0x18D6,0x0000,0x0000, -0x18D7,0x0000,0x0000, 0x18D8,0x0000,0x0000, 0xFBC0,0x992C,0x0000, -0xFBC0,0x992D,0x0000, 0xFBC0,0x992E,0x0000, 0xFBC0,0x992F,0x0000, -0x18D9,0x0000,0x0000, 0x18DA,0x0000,0x0000, 0x18DB,0x0000,0x0000, -0x18DC,0x0000,0x0000, 0x18DD,0x0000,0x0000, 0x18DE,0x0000,0x0000, -0x18DF,0x0000,0x0000, 0x18E0,0x0000,0x0000, 0x18E1,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0xFBC0,0x993C,0x0000, 0xFBC0,0x993D,0x0000, 0xFBC0,0x993E,0x0000, -0xFBC0,0x993F,0x0000, 0x030D,0x0000,0x0000, 0xFBC0,0x9941,0x0000, -0xFBC0,0x9942,0x0000, 0xFBC0,0x9943,0x0000, 0x0254,0x0000,0x0000, -0x025B,0x0000,0x0000, 0x0E29,0x0000,0x0000, 0x0E2A,0x0000,0x0000, -0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, -0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, -0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, 0x19B4,0x0000,0x0000, -0x19B5,0x0000,0x0000, 0x19B6,0x0000,0x0000, 0x19B7,0x0000,0x0000, -0x19B8,0x0000,0x0000, 0x19B9,0x0000,0x0000, 0x19BA,0x0000,0x0000, -0x19BB,0x0000,0x0000, 0x19BC,0x0000,0x0000, 0x19BD,0x0000,0x0000, -0x19BE,0x0000,0x0000, 0x19BF,0x0000,0x0000, 0x19C0,0x0000,0x0000, -0x19C1,0x0000,0x0000, 0x19C2,0x0000,0x0000, 0x19C3,0x0000,0x0000, -0x19C4,0x0000,0x0000, 0x19C5,0x0000,0x0000, 0x19C6,0x0000,0x0000, -0x19C7,0x0000,0x0000, 0x19C8,0x0000,0x0000, 0x19C9,0x0000,0x0000, -0x19CA,0x0000,0x0000, 0x19CB,0x0000,0x0000, 0x19CC,0x0000,0x0000, -0x19CD,0x0000,0x0000, 0x19CE,0x0000,0x0000, 0x19CF,0x0000,0x0000, -0x19D0,0x0000,0x0000, 0x19D1,0x0000,0x0000, 0xFBC0,0x996E,0x0000, -0xFBC0,0x996F,0x0000, 0x19D2,0x0000,0x0000, 0x19D3,0x0000,0x0000, -0x19D4,0x0000,0x0000, 0x19D5,0x0000,0x0000, 0x19D6,0x0000,0x0000, -0xFBC0,0x9975,0x0000, 0xFBC0,0x9976,0x0000, 0xFBC0,0x9977,0x0000, -0xFBC0,0x9978,0x0000, 0xFBC0,0x9979,0x0000, 0xFBC0,0x997A,0x0000, -0xFBC0,0x997B,0x0000, 0xFBC0,0x997C,0x0000, 0xFBC0,0x997D,0x0000, -0xFBC0,0x997E,0x0000, 0xFBC0,0x997F,0x0000, 0xFBC0,0x9980,0x0000, -0xFBC0,0x9981,0x0000, 0xFBC0,0x9982,0x0000, 0xFBC0,0x9983,0x0000, -0xFBC0,0x9984,0x0000, 0xFBC0,0x9985,0x0000, 0xFBC0,0x9986,0x0000, -0xFBC0,0x9987,0x0000, 0xFBC0,0x9988,0x0000, 0xFBC0,0x9989,0x0000, -0xFBC0,0x998A,0x0000, 0xFBC0,0x998B,0x0000, 0xFBC0,0x998C,0x0000, -0xFBC0,0x998D,0x0000, 0xFBC0,0x998E,0x0000, 0xFBC0,0x998F,0x0000, -0xFBC0,0x9990,0x0000, 0xFBC0,0x9991,0x0000, 0xFBC0,0x9992,0x0000, -0xFBC0,0x9993,0x0000, 0xFBC0,0x9994,0x0000, 0xFBC0,0x9995,0x0000, -0xFBC0,0x9996,0x0000, 0xFBC0,0x9997,0x0000, 0xFBC0,0x9998,0x0000, -0xFBC0,0x9999,0x0000, 0xFBC0,0x999A,0x0000, 0xFBC0,0x999B,0x0000, -0xFBC0,0x999C,0x0000, 0xFBC0,0x999D,0x0000, 0xFBC0,0x999E,0x0000, -0xFBC0,0x999F,0x0000, 0xFBC0,0x99A0,0x0000, 0xFBC0,0x99A1,0x0000, -0xFBC0,0x99A2,0x0000, 0xFBC0,0x99A3,0x0000, 0xFBC0,0x99A4,0x0000, -0xFBC0,0x99A5,0x0000, 0xFBC0,0x99A6,0x0000, 0xFBC0,0x99A7,0x0000, -0xFBC0,0x99A8,0x0000, 0xFBC0,0x99A9,0x0000, 0xFBC0,0x99AA,0x0000, -0xFBC0,0x99AB,0x0000, 0xFBC0,0x99AC,0x0000, 0xFBC0,0x99AD,0x0000, -0xFBC0,0x99AE,0x0000, 0xFBC0,0x99AF,0x0000, 0xFBC0,0x99B0,0x0000, -0xFBC0,0x99B1,0x0000, 0xFBC0,0x99B2,0x0000, 0xFBC0,0x99B3,0x0000, -0xFBC0,0x99B4,0x0000, 0xFBC0,0x99B5,0x0000, 0xFBC0,0x99B6,0x0000, -0xFBC0,0x99B7,0x0000, 0xFBC0,0x99B8,0x0000, 0xFBC0,0x99B9,0x0000, -0xFBC0,0x99BA,0x0000, 0xFBC0,0x99BB,0x0000, 0xFBC0,0x99BC,0x0000, -0xFBC0,0x99BD,0x0000, 0xFBC0,0x99BE,0x0000, 0xFBC0,0x99BF,0x0000, -0xFBC0,0x99C0,0x0000, 0xFBC0,0x99C1,0x0000, 0xFBC0,0x99C2,0x0000, -0xFBC0,0x99C3,0x0000, 0xFBC0,0x99C4,0x0000, 0xFBC0,0x99C5,0x0000, -0xFBC0,0x99C6,0x0000, 0xFBC0,0x99C7,0x0000, 0xFBC0,0x99C8,0x0000, -0xFBC0,0x99C9,0x0000, 0xFBC0,0x99CA,0x0000, 0xFBC0,0x99CB,0x0000, -0xFBC0,0x99CC,0x0000, 0xFBC0,0x99CD,0x0000, 0xFBC0,0x99CE,0x0000, -0xFBC0,0x99CF,0x0000, 0xFBC0,0x99D0,0x0000, 0xFBC0,0x99D1,0x0000, -0xFBC0,0x99D2,0x0000, 0xFBC0,0x99D3,0x0000, 0xFBC0,0x99D4,0x0000, -0xFBC0,0x99D5,0x0000, 0xFBC0,0x99D6,0x0000, 0xFBC0,0x99D7,0x0000, -0xFBC0,0x99D8,0x0000, 0xFBC0,0x99D9,0x0000, 0xFBC0,0x99DA,0x0000, -0xFBC0,0x99DB,0x0000, 0xFBC0,0x99DC,0x0000, 0xFBC0,0x99DD,0x0000, -0xFBC0,0x99DE,0x0000, 0xFBC0,0x99DF,0x0000, 0x037B,0x0000,0x0000, -0x037C,0x0000,0x0000, 0x037D,0x0000,0x0000, 0x037E,0x0000,0x0000, -0x037F,0x0000,0x0000, 0x0380,0x0000,0x0000, 0x0381,0x0000,0x0000, -0x0382,0x0000,0x0000, 0x0383,0x0000,0x0000, 0x0384,0x0000,0x0000, -0x0385,0x0000,0x0000, 0x0386,0x0000,0x0000, 0x0387,0x0000,0x0000, -0x0388,0x0000,0x0000, 0x0389,0x0000,0x0000, 0x038A,0x0000,0x0000, -0x038B,0x0000,0x0000, 0x038C,0x0000,0x0000, 0x038D,0x0000,0x0000, -0x038E,0x0000,0x0000, 0x038F,0x0000,0x0000, 0x0390,0x0000,0x0000, -0x0391,0x0000,0x0000, 0x0392,0x0000,0x0000, 0x0393,0x0000,0x0000, -0x0394,0x0000,0x0000, 0x0395,0x0000,0x0000, 0x0396,0x0000,0x0000, -0x0397,0x0000,0x0000, 0x0398,0x0000,0x0000, 0x0399,0x0000,0x0000, -0x039A,0x0000,0x0000 }; - -uint16 page01Ddata[]= { /* 1D00 (3 weights per char) */ -0x0E37,0x0000,0x0000, 0x0E3C,0x0000,0x0000, 0x0E3D,0x0000,0x0000, -0x0E57,0x0000,0x0000, 0x0E64,0x0000,0x0000, 0x0E71,0x0000,0x0000, -0x0E8A,0x0000,0x0000, 0x0E8F,0x0000,0x0000, 0x0EA8,0x0000,0x0000, -0x0F07,0x0000,0x0000, 0x0F14,0x0000,0x0000, 0x0F25,0x0000,0x0000, -0x0F3A,0x0000,0x0000, 0x0F5F,0x0000,0x0000, 0x0F6D,0x0000,0x0000, -0x0F86,0x0000,0x0000, 0x0F96,0x0000,0x0000, 0x0F87,0x0000,0x0000, -0x0F97,0x0000,0x0000, 0x0F91,0x0000,0x0000, 0x0F8C,0x0000,0x0000, -0x0FA6,0x0000,0x0000, 0x0F98,0x0000,0x0000, 0x0F99,0x0000,0x0000, -0x0FAB,0x0000,0x0000, 0x0FC8,0x0000,0x0000, 0x0FCD,0x0000,0x0000, -0x1006,0x0000,0x0000, 0x1023,0x0000,0x0000, 0x1024,0x0000,0x0000, -0x1025,0x0000,0x0000, 0x103B,0x0000,0x0000, 0x1048,0x0000,0x0000, -0x1055,0x0000,0x0000, 0x106E,0x0000,0x0000, 0x1083,0x0000,0x0000, -0x10BA,0x0000,0x0000, 0x10BB,0x0000,0x0000, 0x10EB,0x0000,0x0000, -0x10F7,0x0000,0x0000, 0x10FD,0x0000,0x0000, 0x1101,0x0000,0x0000, -0x1108,0x0000,0x0000, 0x11B4,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E38,0x0000,0x0000, 0x0E4A,0x0000,0x0000, 0x0E56,0x0000,0x0000, -0x0E6D,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E90,0x0000,0x0000, -0x0EC1,0x0000,0x0000, 0x0EE1,0x0000,0x0000, 0x0EFB,0x0000,0x0000, -0x0F10,0x0000,0x0000, 0x0F21,0x0000,0x0000, 0x0F2E,0x0000,0x0000, -0x0F5B,0x0000,0x0000, 0x0F64,0x0000,0x0000, 0x0F6C,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0FA2,0x0000,0x0000, 0x0FA7,0x0000,0x0000, -0x0FC0,0x0000,0x0000, 0x1002,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x1051,0x0000,0x0000, 0x0E33,0x0000,0x0000, 0x0E3E,0x0000,0x0000, -0x0E42,0x0000,0x0000, 0x0E3D,0x0000,0x0000, 0x0E4A,0x0000,0x0000, -0x0E6D,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E94,0x0000,0x0000, -0x0E98,0x0000,0x0000, 0x0EA8,0x0000,0x0000, 0x0EC1,0x0000,0x0000, -0x0F07,0x0000,0x0000, 0x0F21,0x0000,0x0000, 0x0F5B,0x0000,0x0000, -0x0F7E,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F92,0x0000,0x0000, -0x0F98,0x0000,0x0000, 0x0F99,0x0000,0x0000, 0x0FA7,0x0000,0x0000, -0x1002,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x1024,0x0000,0x0000, -0x1037,0x0000,0x0000, 0x1044,0x0000,0x0000, 0x10BB,0x0000,0x0000, -0x10E9,0x0000,0x0000, 0x10EA,0x0000,0x0000, 0x10EC,0x0000,0x0000, -0x1105,0x0000,0x0000, 0x1106,0x0000,0x0000, 0x0EFB,0x0000,0x0000, -0x0FC0,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x1044,0x0000,0x0000, -0x10E9,0x0000,0x0000, 0x10EA,0x0000,0x0000, 0x1100,0x0000,0x0000, -0x1105,0x0000,0x0000, 0x1106,0x0000,0x0000, 0x1026,0x0000,0x0000, -0xFBC0,0x9D6C,0x0000, 0xFBC0,0x9D6D,0x0000, 0xFBC0,0x9D6E,0x0000, -0xFBC0,0x9D6F,0x0000, 0xFBC0,0x9D70,0x0000, 0xFBC0,0x9D71,0x0000, -0xFBC0,0x9D72,0x0000, 0xFBC0,0x9D73,0x0000, 0xFBC0,0x9D74,0x0000, -0xFBC0,0x9D75,0x0000, 0xFBC0,0x9D76,0x0000, 0xFBC0,0x9D77,0x0000, -0xFBC0,0x9D78,0x0000, 0xFBC0,0x9D79,0x0000, 0xFBC0,0x9D7A,0x0000, -0xFBC0,0x9D7B,0x0000, 0xFBC0,0x9D7C,0x0000, 0xFBC0,0x9D7D,0x0000, -0xFBC0,0x9D7E,0x0000, 0xFBC0,0x9D7F,0x0000, 0xFBC0,0x9D80,0x0000, -0xFBC0,0x9D81,0x0000, 0xFBC0,0x9D82,0x0000, 0xFBC0,0x9D83,0x0000, -0xFBC0,0x9D84,0x0000, 0xFBC0,0x9D85,0x0000, 0xFBC0,0x9D86,0x0000, -0xFBC0,0x9D87,0x0000, 0xFBC0,0x9D88,0x0000, 0xFBC0,0x9D89,0x0000, -0xFBC0,0x9D8A,0x0000, 0xFBC0,0x9D8B,0x0000, 0xFBC0,0x9D8C,0x0000, -0xFBC0,0x9D8D,0x0000, 0xFBC0,0x9D8E,0x0000, 0xFBC0,0x9D8F,0x0000, -0xFBC0,0x9D90,0x0000, 0xFBC0,0x9D91,0x0000, 0xFBC0,0x9D92,0x0000, -0xFBC0,0x9D93,0x0000, 0xFBC0,0x9D94,0x0000, 0xFBC0,0x9D95,0x0000, -0xFBC0,0x9D96,0x0000, 0xFBC0,0x9D97,0x0000, 0xFBC0,0x9D98,0x0000, -0xFBC0,0x9D99,0x0000, 0xFBC0,0x9D9A,0x0000, 0xFBC0,0x9D9B,0x0000, -0xFBC0,0x9D9C,0x0000, 0xFBC0,0x9D9D,0x0000, 0xFBC0,0x9D9E,0x0000, -0xFBC0,0x9D9F,0x0000, 0xFBC0,0x9DA0,0x0000, 0xFBC0,0x9DA1,0x0000, -0xFBC0,0x9DA2,0x0000, 0xFBC0,0x9DA3,0x0000, 0xFBC0,0x9DA4,0x0000, -0xFBC0,0x9DA5,0x0000, 0xFBC0,0x9DA6,0x0000, 0xFBC0,0x9DA7,0x0000, -0xFBC0,0x9DA8,0x0000, 0xFBC0,0x9DA9,0x0000, 0xFBC0,0x9DAA,0x0000, -0xFBC0,0x9DAB,0x0000, 0xFBC0,0x9DAC,0x0000, 0xFBC0,0x9DAD,0x0000, -0xFBC0,0x9DAE,0x0000, 0xFBC0,0x9DAF,0x0000, 0xFBC0,0x9DB0,0x0000, -0xFBC0,0x9DB1,0x0000, 0xFBC0,0x9DB2,0x0000, 0xFBC0,0x9DB3,0x0000, -0xFBC0,0x9DB4,0x0000, 0xFBC0,0x9DB5,0x0000, 0xFBC0,0x9DB6,0x0000, -0xFBC0,0x9DB7,0x0000, 0xFBC0,0x9DB8,0x0000, 0xFBC0,0x9DB9,0x0000, -0xFBC0,0x9DBA,0x0000, 0xFBC0,0x9DBB,0x0000, 0xFBC0,0x9DBC,0x0000, -0xFBC0,0x9DBD,0x0000, 0xFBC0,0x9DBE,0x0000, 0xFBC0,0x9DBF,0x0000, -0xFBC0,0x9DC0,0x0000, 0xFBC0,0x9DC1,0x0000, 0xFBC0,0x9DC2,0x0000, -0xFBC0,0x9DC3,0x0000, 0xFBC0,0x9DC4,0x0000, 0xFBC0,0x9DC5,0x0000, -0xFBC0,0x9DC6,0x0000, 0xFBC0,0x9DC7,0x0000, 0xFBC0,0x9DC8,0x0000, -0xFBC0,0x9DC9,0x0000, 0xFBC0,0x9DCA,0x0000, 0xFBC0,0x9DCB,0x0000, -0xFBC0,0x9DCC,0x0000, 0xFBC0,0x9DCD,0x0000, 0xFBC0,0x9DCE,0x0000, -0xFBC0,0x9DCF,0x0000, 0xFBC0,0x9DD0,0x0000, 0xFBC0,0x9DD1,0x0000, -0xFBC0,0x9DD2,0x0000, 0xFBC0,0x9DD3,0x0000, 0xFBC0,0x9DD4,0x0000, -0xFBC0,0x9DD5,0x0000, 0xFBC0,0x9DD6,0x0000, 0xFBC0,0x9DD7,0x0000, -0xFBC0,0x9DD8,0x0000, 0xFBC0,0x9DD9,0x0000, 0xFBC0,0x9DDA,0x0000, -0xFBC0,0x9DDB,0x0000, 0xFBC0,0x9DDC,0x0000, 0xFBC0,0x9DDD,0x0000, -0xFBC0,0x9DDE,0x0000, 0xFBC0,0x9DDF,0x0000, 0xFBC0,0x9DE0,0x0000, -0xFBC0,0x9DE1,0x0000, 0xFBC0,0x9DE2,0x0000, 0xFBC0,0x9DE3,0x0000, -0xFBC0,0x9DE4,0x0000, 0xFBC0,0x9DE5,0x0000, 0xFBC0,0x9DE6,0x0000, -0xFBC0,0x9DE7,0x0000, 0xFBC0,0x9DE8,0x0000, 0xFBC0,0x9DE9,0x0000, -0xFBC0,0x9DEA,0x0000, 0xFBC0,0x9DEB,0x0000, 0xFBC0,0x9DEC,0x0000, -0xFBC0,0x9DED,0x0000, 0xFBC0,0x9DEE,0x0000, 0xFBC0,0x9DEF,0x0000, -0xFBC0,0x9DF0,0x0000, 0xFBC0,0x9DF1,0x0000, 0xFBC0,0x9DF2,0x0000, -0xFBC0,0x9DF3,0x0000, 0xFBC0,0x9DF4,0x0000, 0xFBC0,0x9DF5,0x0000, -0xFBC0,0x9DF6,0x0000, 0xFBC0,0x9DF7,0x0000, 0xFBC0,0x9DF8,0x0000, -0xFBC0,0x9DF9,0x0000, 0xFBC0,0x9DFA,0x0000, 0xFBC0,0x9DFB,0x0000, -0xFBC0,0x9DFC,0x0000, 0xFBC0,0x9DFD,0x0000, 0xFBC0,0x9DFE,0x0000, -0xFBC0,0x9DFF,0x0000 }; - -uint16 page01Edata[]= { /* 1E00 (3 weights per char) */ -0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, 0x0E4A,0x0000,0x0000, -0x0E4A,0x0000,0x0000, 0x0E4A,0x0000,0x0000, 0x0E4A,0x0000,0x0000, -0x0E4A,0x0000,0x0000, 0x0E4A,0x0000,0x0000, 0x0E60,0x0000,0x0000, -0x0E60,0x0000,0x0000, 0x0E6D,0x0000,0x0000, 0x0E6D,0x0000,0x0000, -0x0E6D,0x0000,0x0000, 0x0E6D,0x0000,0x0000, 0x0E6D,0x0000,0x0000, -0x0E6D,0x0000,0x0000, 0x0E6D,0x0000,0x0000, 0x0E6D,0x0000,0x0000, -0x0E6D,0x0000,0x0000, 0x0E6D,0x0000,0x0000, 0x0E8B,0x0000,0x0000, -0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, -0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, -0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, -0x0EB9,0x0000,0x0000, 0x0EB9,0x0000,0x0000, 0x0EC1,0x0000,0x0000, -0x0EC1,0x0000,0x0000, 0x0EE1,0x0000,0x0000, 0x0EE1,0x0000,0x0000, -0x0EE1,0x0000,0x0000, 0x0EE1,0x0000,0x0000, 0x0EE1,0x0000,0x0000, -0x0EE1,0x0000,0x0000, 0x0EE1,0x0000,0x0000, 0x0EE1,0x0000,0x0000, -0x0EE1,0x0000,0x0000, 0x0EE1,0x0000,0x0000, 0x0EFB,0x0000,0x0000, -0x0EFB,0x0000,0x0000, 0x0EFB,0x0000,0x0000, 0x0EFB,0x0000,0x0000, -0x0F21,0x0000,0x0000, 0x0F21,0x0000,0x0000, 0x0F21,0x0000,0x0000, -0x0F21,0x0000,0x0000, 0x0F21,0x0000,0x0000, 0x0F21,0x0000,0x0000, -0x0F2E,0x0000,0x0000, 0x0F2E,0x0000,0x0000, 0x0F2E,0x0000,0x0000, -0x0F2E,0x0000,0x0000, 0x0F2E,0x0000,0x0000, 0x0F2E,0x0000,0x0000, -0x0F2E,0x0000,0x0000, 0x0F2E,0x0000,0x0000, 0x0F5B,0x0000,0x0000, -0x0F5B,0x0000,0x0000, 0x0F5B,0x0000,0x0000, 0x0F5B,0x0000,0x0000, -0x0F5B,0x0000,0x0000, 0x0F5B,0x0000,0x0000, 0x0F64,0x0000,0x0000, -0x0F64,0x0000,0x0000, 0x0F64,0x0000,0x0000, 0x0F64,0x0000,0x0000, -0x0F64,0x0000,0x0000, 0x0F64,0x0000,0x0000, 0x0F64,0x0000,0x0000, -0x0F64,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0FA7,0x0000,0x0000, 0x0FA7,0x0000,0x0000, 0x0FA7,0x0000,0x0000, -0x0FA7,0x0000,0x0000, 0x0FC0,0x0000,0x0000, 0x0FC0,0x0000,0x0000, -0x0FC0,0x0000,0x0000, 0x0FC0,0x0000,0x0000, 0x0FC0,0x0000,0x0000, -0x0FC0,0x0000,0x0000, 0x0FC0,0x0000,0x0000, 0x0FC0,0x0000,0x0000, -0x0FEA,0x0000,0x0000, 0x0FEA,0x0000,0x0000, 0x0FEA,0x0000,0x0000, -0x0FEA,0x0000,0x0000, 0x0FEA,0x0000,0x0000, 0x0FEA,0x0000,0x0000, -0x0FEA,0x0000,0x0000, 0x0FEA,0x0000,0x0000, 0x0FEA,0x0000,0x0000, -0x0FEA,0x0000,0x0000, 0x1002,0x0000,0x0000, 0x1002,0x0000,0x0000, -0x1002,0x0000,0x0000, 0x1002,0x0000,0x0000, 0x1002,0x0000,0x0000, -0x1002,0x0000,0x0000, 0x1002,0x0000,0x0000, 0x1002,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x1044,0x0000,0x0000, 0x1044,0x0000,0x0000, -0x1044,0x0000,0x0000, 0x1044,0x0000,0x0000, 0x1051,0x0000,0x0000, -0x1051,0x0000,0x0000, 0x1051,0x0000,0x0000, 0x1051,0x0000,0x0000, -0x1051,0x0000,0x0000, 0x1051,0x0000,0x0000, 0x1051,0x0000,0x0000, -0x1051,0x0000,0x0000, 0x1051,0x0000,0x0000, 0x1051,0x0000,0x0000, -0x105A,0x0000,0x0000, 0x105A,0x0000,0x0000, 0x105A,0x0000,0x0000, -0x105A,0x0000,0x0000, 0x105E,0x0000,0x0000, 0x105E,0x0000,0x0000, -0x106A,0x0000,0x0000, 0x106A,0x0000,0x0000, 0x106A,0x0000,0x0000, -0x106A,0x0000,0x0000, 0x106A,0x0000,0x0000, 0x106A,0x0000,0x0000, -0x0EE1,0x0000,0x0000, 0x1002,0x0000,0x0000, 0x1051,0x0000,0x0000, -0x105E,0x0000,0x0000, 0x0E33,0x10B3,0x0000, 0x0FEA,0x0000,0x0000, -0xFBC0,0x9E9C,0x0000, 0xFBC0,0x9E9D,0x0000, 0xFBC0,0x9E9E,0x0000, -0xFBC0,0x9E9F,0x0000, 0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E33,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, -0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, -0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, -0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, -0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, -0x0E8B,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0EFB,0x0000,0x0000, -0x0EFB,0x0000,0x0000, 0x0EFB,0x0000,0x0000, 0x0EFB,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x101F,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x105E,0x0000,0x0000, -0x105E,0x0000,0x0000, 0x105E,0x0000,0x0000, 0x105E,0x0000,0x0000, -0x105E,0x0000,0x0000, 0x105E,0x0000,0x0000, 0x105E,0x0000,0x0000, -0x105E,0x0000,0x0000, 0xFBC0,0x9EFA,0x0000, 0xFBC0,0x9EFB,0x0000, -0xFBC0,0x9EFC,0x0000, 0xFBC0,0x9EFD,0x0000, 0xFBC0,0x9EFE,0x0000, -0xFBC0,0x9EFF,0x0000 }; - -uint16 page01Fdata[]= { /* 1F00 (3 weights per char) */ -0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x10E8,0x0000,0x0000, 0x10ED,0x0000,0x0000, 0x10ED,0x0000,0x0000, -0x10ED,0x0000,0x0000, 0x10ED,0x0000,0x0000, 0x10ED,0x0000,0x0000, -0x10ED,0x0000,0x0000, 0xFBC0,0x9F16,0x0000, 0xFBC0,0x9F17,0x0000, -0x10ED,0x0000,0x0000, 0x10ED,0x0000,0x0000, 0x10ED,0x0000,0x0000, -0x10ED,0x0000,0x0000, 0x10ED,0x0000,0x0000, 0x10ED,0x0000,0x0000, -0xFBC0,0x9F1E,0x0000, 0xFBC0,0x9F1F,0x0000, 0x10F1,0x0000,0x0000, -0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, -0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, -0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, -0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, -0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, -0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, -0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, -0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, -0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, -0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, -0x10F3,0x0000,0x0000, 0x10FB,0x0000,0x0000, 0x10FB,0x0000,0x0000, -0x10FB,0x0000,0x0000, 0x10FB,0x0000,0x0000, 0x10FB,0x0000,0x0000, -0x10FB,0x0000,0x0000, 0xFBC0,0x9F46,0x0000, 0xFBC0,0x9F47,0x0000, -0x10FB,0x0000,0x0000, 0x10FB,0x0000,0x0000, 0x10FB,0x0000,0x0000, -0x10FB,0x0000,0x0000, 0x10FB,0x0000,0x0000, 0x10FB,0x0000,0x0000, -0xFBC0,0x9F4E,0x0000, 0xFBC0,0x9F4F,0x0000, 0x1104,0x0000,0x0000, -0x1104,0x0000,0x0000, 0x1104,0x0000,0x0000, 0x1104,0x0000,0x0000, -0x1104,0x0000,0x0000, 0x1104,0x0000,0x0000, 0x1104,0x0000,0x0000, -0x1104,0x0000,0x0000, 0xFBC0,0x9F58,0x0000, 0x1104,0x0000,0x0000, -0xFBC0,0x9F5A,0x0000, 0x1104,0x0000,0x0000, 0xFBC0,0x9F5C,0x0000, -0x1104,0x0000,0x0000, 0xFBC0,0x9F5E,0x0000, 0x1104,0x0000,0x0000, -0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, -0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, -0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, -0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, -0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, -0x1109,0x0000,0x0000, 0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x10ED,0x0000,0x0000, 0x10ED,0x0000,0x0000, 0x10F1,0x0000,0x0000, -0x10F1,0x0000,0x0000, 0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, -0x10FB,0x0000,0x0000, 0x10FB,0x0000,0x0000, 0x1104,0x0000,0x0000, -0x1104,0x0000,0x0000, 0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, -0xFBC0,0x9F7E,0x0000, 0xFBC0,0x9F7F,0x0000, 0x10E8,0x0000,0x0000, -0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, -0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, -0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, -0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, -0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, -0x10F1,0x0000,0x0000, 0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, -0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, -0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, -0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, -0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, -0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x10E8,0x0000,0x0000, 0xFBC0,0x9FB5,0x0000, 0x10E8,0x0000,0x0000, -0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, 0x10E8,0x0000,0x0000, -0x0217,0x0000,0x0000, 0x10F3,0x0000,0x0000, 0x0217,0x0000,0x0000, -0x021D,0x0000,0x0000, 0x0214,0x0000,0x0000, 0x10F1,0x0000,0x0000, -0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, 0xFBC0,0x9FC5,0x0000, -0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, 0x10ED,0x0000,0x0000, -0x10ED,0x0000,0x0000, 0x10F1,0x0000,0x0000, 0x10F1,0x0000,0x0000, -0x10F1,0x0000,0x0000, 0x0217,0x0000,0x0000, 0x0217,0x0000,0x0000, -0x0217,0x0000,0x0000, 0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, -0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, 0xFBC0,0x9FD4,0x0000, -0xFBC0,0x9FD5,0x0000, 0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, -0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, 0x10F3,0x0000,0x0000, -0x10F3,0x0000,0x0000, 0xFBC0,0x9FDC,0x0000, 0x0218,0x0000,0x0000, -0x0218,0x0000,0x0000, 0x0218,0x0000,0x0000, 0x1104,0x0000,0x0000, -0x1104,0x0000,0x0000, 0x1104,0x0000,0x0000, 0x1104,0x0000,0x0000, -0x1100,0x0000,0x0000, 0x1100,0x0000,0x0000, 0x1104,0x0000,0x0000, -0x1104,0x0000,0x0000, 0x1104,0x0000,0x0000, 0x1104,0x0000,0x0000, -0x1104,0x0000,0x0000, 0x1104,0x0000,0x0000, 0x1100,0x0000,0x0000, -0x0214,0x0000,0x0000, 0x0214,0x0000,0x0000, 0x020C,0x0000,0x0000, -0xFBC0,0x9FF0,0x0000, 0xFBC0,0x9FF1,0x0000, 0x1109,0x0000,0x0000, -0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, 0xFBC0,0x9FF5,0x0000, -0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, 0x10FB,0x0000,0x0000, -0x10FB,0x0000,0x0000, 0x1109,0x0000,0x0000, 0x1109,0x0000,0x0000, -0x1109,0x0000,0x0000, 0x020D,0x0000,0x0000, 0x0218,0x0000,0x0000, -0xFBC0,0x9FFF,0x0000 }; - -uint16 page020data[]= { /* 2000 (5 weights per char) */ -0x0209,0x0000,0x0000,0x0000,0x0000, -0x0209,0x0000,0x0000,0x0000,0x0000, -0x0209,0x0000,0x0000,0x0000,0x0000, -0x0209,0x0000,0x0000,0x0000,0x0000, -0x0209,0x0000,0x0000,0x0000,0x0000, -0x0209,0x0000,0x0000,0x0000,0x0000, -0x0209,0x0000,0x0000,0x0000,0x0000, -0x0209,0x0000,0x0000,0x0000,0x0000, -0x0209,0x0000,0x0000,0x0000,0x0000, -0x0209,0x0000,0x0000,0x0000,0x0000, -0x0209,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0225,0x0000,0x0000,0x0000,0x0000, -0x0225,0x0000,0x0000,0x0000,0x0000, -0x0226,0x0000,0x0000,0x0000,0x0000, -0x0227,0x0000,0x0000,0x0000,0x0000, -0x0228,0x0000,0x0000,0x0000,0x0000, -0x0229,0x0000,0x0000,0x0000,0x0000, -0x0432,0x0000,0x0000,0x0000,0x0000, -0x021C,0x0000,0x0000,0x0000,0x0000, -0x0278,0x0000,0x0000,0x0000,0x0000, -0x0279,0x0000,0x0000,0x0000,0x0000, -0x027A,0x0000,0x0000,0x0000,0x0000, -0x027B,0x0000,0x0000,0x0000,0x0000, -0x027F,0x0000,0x0000,0x0000,0x0000, -0x0280,0x0000,0x0000,0x0000,0x0000, -0x0281,0x0000,0x0000,0x0000,0x0000, -0x0282,0x0000,0x0000,0x0000,0x0000, -0x02D8,0x0000,0x0000,0x0000,0x0000, -0x02D9,0x0000,0x0000,0x0000,0x0000, -0x02DA,0x0000,0x0000,0x0000,0x0000, -0x02DB,0x0000,0x0000,0x0000,0x0000, -0x025D,0x0000,0x0000,0x0000,0x0000, -0x025D,0x025D,0x0000,0x0000,0x0000, -0x025D,0x025D,0x025D,0x0000,0x0000, -0x02DC,0x0000,0x0000,0x0000,0x0000, -0x0207,0x0000,0x0000,0x0000,0x0000, -0x0208,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0209,0x0000,0x0000,0x0000,0x0000, -0x02D5,0x0000,0x0000,0x0000,0x0000, -0x02D6,0x0000,0x0000,0x0000,0x0000, -0x02E0,0x0000,0x0000,0x0000,0x0000, -0x02E0,0x02E0,0x0000,0x0000,0x0000, -0x02E0,0x02E0,0x02E0,0x0000,0x0000, -0x02E1,0x0000,0x0000,0x0000,0x0000, -0x02E1,0x02E1,0x0000,0x0000,0x0000, -0x02E1,0x02E1,0x02E1,0x0000,0x0000, -0x02E4,0x0000,0x0000,0x0000,0x0000, -0x027C,0x0000,0x0000,0x0000,0x0000, -0x027D,0x0000,0x0000,0x0000,0x0000, -0x02E5,0x0000,0x0000,0x0000,0x0000, -0x0251,0x0251,0x0000,0x0000,0x0000, -0x025C,0x0000,0x0000,0x0000,0x0000, -0x0211,0x0000,0x0000,0x0000,0x0000, -0x02E6,0x0000,0x0000,0x0000,0x0000, -0x02E8,0x0000,0x0000,0x0000,0x0000, -0x02EA,0x0000,0x0000,0x0000,0x0000, -0x02EB,0x0000,0x0000,0x0000,0x0000, -0x02DD,0x0000,0x0000,0x0000,0x0000, -0x02CD,0x0000,0x0000,0x0000,0x0000, -0x0294,0x0000,0x0000,0x0000,0x0000, -0x0295,0x0000,0x0000,0x0000,0x0000, -0x0255,0x0255,0x0000,0x0000,0x0000, -0x0255,0x0251,0x0000,0x0000,0x0000, -0x0251,0x0255,0x0000,0x0000,0x0000, -0x02D1,0x0000,0x0000,0x0000,0x0000, -0x02C4,0x0000,0x0000,0x0000,0x0000, -0x02DE,0x0000,0x0000,0x0000,0x0000, -0x02DF,0x0000,0x0000,0x0000,0x0000, -0x02C9,0x0000,0x0000,0x0000,0x0000, -0x023C,0x0000,0x0000,0x0000,0x0000, -0x02E9,0x0000,0x0000,0x0000,0x0000, -0x02CA,0x0000,0x0000,0x0000,0x0000, -0x02D7,0x0000,0x0000,0x0000,0x0000, -0x022A,0x0000,0x0000,0x0000,0x0000, -0x02E7,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xA055,0x0000,0x0000,0x0000, -0xFBC0,0xA056,0x0000,0x0000,0x0000, -0x02E0,0x02E0,0x02E0,0x02E0,0x0000, -0xFBC0,0xA058,0x0000,0x0000,0x0000, -0xFBC0,0xA059,0x0000,0x0000,0x0000, -0xFBC0,0xA05A,0x0000,0x0000,0x0000, -0xFBC0,0xA05B,0x0000,0x0000,0x0000, -0xFBC0,0xA05C,0x0000,0x0000,0x0000, -0xFBC0,0xA05D,0x0000,0x0000,0x0000, -0xFBC0,0xA05E,0x0000,0x0000,0x0000, -0x0209,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xA064,0x0000,0x0000,0x0000, -0xFBC0,0xA065,0x0000,0x0000,0x0000, -0xFBC0,0xA066,0x0000,0x0000,0x0000, -0xFBC0,0xA067,0x0000,0x0000,0x0000, -0xFBC0,0xA068,0x0000,0x0000,0x0000, -0xFBC0,0xA069,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E29,0x0000,0x0000,0x0000,0x0000, -0x0EFB,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xA072,0x0000,0x0000,0x0000, -0xFBC0,0xA073,0x0000,0x0000,0x0000, -0x0E2D,0x0000,0x0000,0x0000,0x0000, -0x0E2E,0x0000,0x0000,0x0000,0x0000, -0x0E2F,0x0000,0x0000,0x0000,0x0000, -0x0E30,0x0000,0x0000,0x0000,0x0000, -0x0E31,0x0000,0x0000,0x0000,0x0000, -0x0E32,0x0000,0x0000,0x0000,0x0000, -0x0428,0x0000,0x0000,0x0000,0x0000, -0x0434,0x0000,0x0000,0x0000,0x0000, -0x042D,0x0000,0x0000,0x0000,0x0000, -0x0288,0x0000,0x0000,0x0000,0x0000, -0x0289,0x0000,0x0000,0x0000,0x0000, -0x0F64,0x0000,0x0000,0x0000,0x0000, -0x0E29,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0x0000,0x0000,0x0000,0x0000, -0x0E2E,0x0000,0x0000,0x0000,0x0000, -0x0E2F,0x0000,0x0000,0x0000,0x0000, -0x0E30,0x0000,0x0000,0x0000,0x0000, -0x0E31,0x0000,0x0000,0x0000,0x0000, -0x0E32,0x0000,0x0000,0x0000,0x0000, -0x0428,0x0000,0x0000,0x0000,0x0000, -0x0434,0x0000,0x0000,0x0000,0x0000, -0x042D,0x0000,0x0000,0x0000,0x0000, -0x0288,0x0000,0x0000,0x0000,0x0000, -0x0289,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xA08F,0x0000,0x0000,0x0000, -0xFBC0,0xA090,0x0000,0x0000,0x0000, -0xFBC0,0xA091,0x0000,0x0000,0x0000, -0xFBC0,0xA092,0x0000,0x0000,0x0000, -0xFBC0,0xA093,0x0000,0x0000,0x0000, -0xFBC0,0xA094,0x0000,0x0000,0x0000, -0xFBC0,0xA095,0x0000,0x0000,0x0000, -0xFBC0,0xA096,0x0000,0x0000,0x0000, -0xFBC0,0xA097,0x0000,0x0000,0x0000, -0xFBC0,0xA098,0x0000,0x0000,0x0000, -0xFBC0,0xA099,0x0000,0x0000,0x0000, -0xFBC0,0xA09A,0x0000,0x0000,0x0000, -0xFBC0,0xA09B,0x0000,0x0000,0x0000, -0xFBC0,0xA09C,0x0000,0x0000,0x0000, -0xFBC0,0xA09D,0x0000,0x0000,0x0000, -0xFBC0,0xA09E,0x0000,0x0000,0x0000, -0xFBC0,0xA09F,0x0000,0x0000,0x0000, -0x0E18,0x0000,0x0000,0x0000,0x0000, -0x0E19,0x0000,0x0000,0x0000,0x0000, -0x0E1A,0x0000,0x0000,0x0000,0x0000, -0x0E1B,0x0000,0x0000,0x0000,0x0000, -0x0E1C,0x0000,0x0000,0x0000,0x0000, -0x0E1D,0x0000,0x0000,0x0000,0x0000, -0x0E1E,0x0000,0x0000,0x0000,0x0000, -0x0E1F,0x0000,0x0000,0x0000,0x0000, -0x0FC0,0x0FEA,0x0000,0x0000,0x0000, -0x0E20,0x0000,0x0000,0x0000,0x0000, -0x0E21,0x0000,0x0000,0x0000,0x0000, -0x0E22,0x0000,0x0000,0x0000,0x0000, -0x0E23,0x0000,0x0000,0x0000,0x0000, -0x0E24,0x0000,0x0000,0x0000,0x0000, -0x0E25,0x0000,0x0000,0x0000,0x0000, -0x0E26,0x0000,0x0000,0x0000,0x0000, -0x0E27,0x0000,0x0000,0x0000,0x0000, -0x0E28,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xA0B2,0x0000,0x0000,0x0000, -0xFBC0,0xA0B3,0x0000,0x0000,0x0000, -0xFBC0,0xA0B4,0x0000,0x0000,0x0000, -0xFBC0,0xA0B5,0x0000,0x0000,0x0000, -0xFBC0,0xA0B6,0x0000,0x0000,0x0000, -0xFBC0,0xA0B7,0x0000,0x0000,0x0000, -0xFBC0,0xA0B8,0x0000,0x0000,0x0000, -0xFBC0,0xA0B9,0x0000,0x0000,0x0000, -0xFBC0,0xA0BA,0x0000,0x0000,0x0000, -0xFBC0,0xA0BB,0x0000,0x0000,0x0000, -0xFBC0,0xA0BC,0x0000,0x0000,0x0000, -0xFBC0,0xA0BD,0x0000,0x0000,0x0000, -0xFBC0,0xA0BE,0x0000,0x0000,0x0000, -0xFBC0,0xA0BF,0x0000,0x0000,0x0000, -0xFBC0,0xA0C0,0x0000,0x0000,0x0000, -0xFBC0,0xA0C1,0x0000,0x0000,0x0000, -0xFBC0,0xA0C2,0x0000,0x0000,0x0000, -0xFBC0,0xA0C3,0x0000,0x0000,0x0000, -0xFBC0,0xA0C4,0x0000,0x0000,0x0000, -0xFBC0,0xA0C5,0x0000,0x0000,0x0000, -0xFBC0,0xA0C6,0x0000,0x0000,0x0000, -0xFBC0,0xA0C7,0x0000,0x0000,0x0000, -0xFBC0,0xA0C8,0x0000,0x0000,0x0000, -0xFBC0,0xA0C9,0x0000,0x0000,0x0000, -0xFBC0,0xA0CA,0x0000,0x0000,0x0000, -0xFBC0,0xA0CB,0x0000,0x0000,0x0000, -0xFBC0,0xA0CC,0x0000,0x0000,0x0000, -0xFBC0,0xA0CD,0x0000,0x0000,0x0000, -0xFBC0,0xA0CE,0x0000,0x0000,0x0000, -0xFBC0,0xA0CF,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xA0EB,0x0000,0x0000,0x0000, -0xFBC0,0xA0EC,0x0000,0x0000,0x0000, -0xFBC0,0xA0ED,0x0000,0x0000,0x0000, -0xFBC0,0xA0EE,0x0000,0x0000,0x0000, -0xFBC0,0xA0EF,0x0000,0x0000,0x0000, -0xFBC0,0xA0F0,0x0000,0x0000,0x0000, -0xFBC0,0xA0F1,0x0000,0x0000,0x0000, -0xFBC0,0xA0F2,0x0000,0x0000,0x0000, -0xFBC0,0xA0F3,0x0000,0x0000,0x0000, -0xFBC0,0xA0F4,0x0000,0x0000,0x0000, -0xFBC0,0xA0F5,0x0000,0x0000,0x0000, -0xFBC0,0xA0F6,0x0000,0x0000,0x0000, -0xFBC0,0xA0F7,0x0000,0x0000,0x0000, -0xFBC0,0xA0F8,0x0000,0x0000,0x0000, -0xFBC0,0xA0F9,0x0000,0x0000,0x0000, -0xFBC0,0xA0FA,0x0000,0x0000,0x0000, -0xFBC0,0xA0FB,0x0000,0x0000,0x0000, -0xFBC0,0xA0FC,0x0000,0x0000,0x0000, -0xFBC0,0xA0FD,0x0000,0x0000,0x0000, -0xFBC0,0xA0FE,0x0000,0x0000,0x0000, -0xFBC0,0xA0FF,0x0000,0x0000,0x0000 -}; - -uint16 page021data[]= { /* 2100 (5 weights per char) */ -0x0E33,0x02CC,0x0E60,0x0000,0x0000, -0x0E33,0x02CC,0x0FEA,0x0000,0x0000, -0x0E60,0x0000,0x0000,0x0000,0x0000, -0x034A,0x0E60,0x0000,0x0000,0x0000, -0x039B,0x0000,0x0000,0x0000,0x0000, -0x0E60,0x02CC,0x0F82,0x0000,0x0000, -0x0E60,0x02CC,0x101F,0x0000,0x0000, -0x0E98,0x0000,0x0000,0x0000,0x0000, -0x039C,0x0000,0x0000,0x0000,0x0000, -0x034A,0x0EB9,0x0000,0x0000,0x0000, -0x0EC1,0x0000,0x0000,0x0000,0x0000, -0x0EE1,0x0000,0x0000,0x0000,0x0000, -0x0EE1,0x0000,0x0000,0x0000,0x0000, -0x0EE1,0x0000,0x0000,0x0000,0x0000, -0x0EE1,0x0000,0x0000,0x0000,0x0000, -0x0EED,0x0000,0x0000,0x0000,0x0000, -0x0EFB,0x0000,0x0000,0x0000,0x0000, -0x0EFB,0x0000,0x0000,0x0000,0x0000, -0x0F2E,0x0000,0x0000,0x0000,0x0000, -0x0F2E,0x0000,0x0000,0x0000,0x0000, -0x039D,0x0000,0x0000,0x0000,0x0000, -0x0F64,0x0000,0x0000,0x0000,0x0000, -0x0F64,0x0F82,0x0000,0x0000,0x0000, -0x039E,0x0000,0x0000,0x0000,0x0000, -0x039F,0x0000,0x0000,0x0000,0x0000, -0x0FA7,0x0000,0x0000,0x0000,0x0000, -0x0FB4,0x0000,0x0000,0x0000,0x0000, -0x0FC0,0x0000,0x0000,0x0000,0x0000, -0x0FC0,0x0000,0x0000,0x0000,0x0000, -0x0FC0,0x0000,0x0000,0x0000,0x0000, -0x03A0,0x0000,0x0000,0x0000,0x0000, -0x03A1,0x0000,0x0000,0x0000,0x0000, -0x0FEA,0x0F5B,0x0000,0x0000,0x0000, -0x1002,0x0E8B,0x0F2E,0x0000,0x0000, -0x1002,0x0F5B,0x0000,0x0000,0x0000, -0x03A2,0x0000,0x0000,0x0000,0x0000, -0x106A,0x0000,0x0000,0x0000,0x0000, -0x03A3,0x0000,0x0000,0x0000,0x0000, -0x1109,0x0000,0x0000,0x0000,0x0000, -0x03A4,0x0000,0x0000,0x0000,0x0000, -0x106A,0x0000,0x0000,0x0000,0x0000, -0x03A5,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0000,0x0000,0x0000,0x0000, -0x0E33,0x0000,0x0000,0x0000,0x0000, -0x0E4A,0x0000,0x0000,0x0000,0x0000, -0x0E60,0x0000,0x0000,0x0000,0x0000, -0x03A6,0x0000,0x0000,0x0000,0x0000, -0x0E8B,0x0000,0x0000,0x0000,0x0000, -0x0E8B,0x0000,0x0000,0x0000,0x0000, -0x0EB9,0x0000,0x0000,0x0000,0x0000, -0x03A7,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0000,0x0000,0x0000,0x0000, -0x0F82,0x0000,0x0000,0x0000,0x0000, -0x1331,0x0000,0x0000,0x0000,0x0000, -0x1332,0x0000,0x0000,0x0000,0x0000, -0x1333,0x0000,0x0000,0x0000,0x0000, -0x1334,0x0000,0x0000,0x0000,0x0000, -0x0EFB,0x0000,0x0000,0x0000,0x0000, -0x03A8,0x0000,0x0000,0x0000,0x0000, -0x0EB9,0x0E33,0x105A,0x0000,0x0000, -0xFBC0,0xA13C,0x0000,0x0000,0x0000, -0x10EA,0x0000,0x0000,0x0000,0x0000, -0x10EA,0x0000,0x0000,0x0000,0x0000, -0x10FC,0x0000,0x0000,0x0000,0x0000, -0x0427,0x0000,0x0000,0x0000,0x0000, -0x03A9,0x0000,0x0000,0x0000,0x0000, -0x03AA,0x0000,0x0000,0x0000,0x0000, -0x03AB,0x0000,0x0000,0x0000,0x0000, -0x03AC,0x0000,0x0000,0x0000,0x0000, -0x0E6D,0x0000,0x0000,0x0000,0x0000, -0x0E6D,0x0000,0x0000,0x0000,0x0000, -0x0E8B,0x0000,0x0000,0x0000,0x0000, -0x0EFB,0x0000,0x0000,0x0000,0x0000, -0x0F10,0x0000,0x0000,0x0000,0x0000, -0x03AD,0x0000,0x0000,0x0000,0x0000, -0x02D0,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xA14C,0x0000,0x0000,0x0000, -0xFBC0,0xA14D,0x0000,0x0000,0x0000, -0xFBC0,0xA14E,0x0000,0x0000,0x0000, -0xFBC0,0xA14F,0x0000,0x0000,0x0000, -0xFBC0,0xA150,0x0000,0x0000,0x0000, -0xFBC0,0xA151,0x0000,0x0000,0x0000, -0xFBC0,0xA152,0x0000,0x0000,0x0000, -0x0E2A,0x02CD,0x0E2C,0x0000,0x0000, -0x0E2B,0x02CD,0x0E2C,0x0000,0x0000, -0x0E2A,0x02CD,0x0E2E,0x0000,0x0000, -0x0E2B,0x02CD,0x0E2E,0x0000,0x0000, -0x0E2C,0x02CD,0x0E2E,0x0000,0x0000, -0x0E2D,0x02CD,0x0E2E,0x0000,0x0000, -0x0E2A,0x02CD,0x0E2F,0x0000,0x0000, -0x0E2E,0x02CD,0x0E2F,0x0000,0x0000, -0x0E2A,0x02CD,0x0E31,0x0000,0x0000, -0x0E2C,0x02CD,0x0E31,0x0000,0x0000, -0x0E2E,0x02CD,0x0E31,0x0000,0x0000, -0x0E30,0x02CD,0x0E31,0x0000,0x0000, -0x0E2A,0x02CD,0x0000,0x0000,0x0000, -0x0EFB,0x0000,0x0000,0x0000,0x0000, -0x0EFB,0x0EFB,0x0000,0x0000,0x0000, -0x0EFB,0x0EFB,0x0EFB,0x0000,0x0000, -0x0EFB,0x1044,0x0000,0x0000,0x0000, -0x1044,0x0000,0x0000,0x0000,0x0000, -0x1044,0x0EFB,0x0000,0x0000,0x0000, -0x1044,0x0EFB,0x0EFB,0x0000,0x0000, -0x1044,0x0EFB,0x0EFB,0x0EFB,0x0000, -0x0EFB,0x105A,0x0000,0x0000,0x0000, -0x105A,0x0000,0x0000,0x0000,0x0000, -0x105A,0x0EFB,0x0000,0x0000,0x0000, -0x105A,0x0EFB,0x0EFB,0x0000,0x0000, -0x0F2E,0x0000,0x0000,0x0000,0x0000, -0x0E60,0x0000,0x0000,0x0000,0x0000, -0x0E6D,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0000,0x0000,0x0000,0x0000, -0x0EFB,0x0000,0x0000,0x0000,0x0000, -0x0EFB,0x0EFB,0x0000,0x0000,0x0000, -0x0EFB,0x0EFB,0x0EFB,0x0000,0x0000, -0x0EFB,0x1044,0x0000,0x0000,0x0000, -0x1044,0x0000,0x0000,0x0000,0x0000, -0x1044,0x0EFB,0x0000,0x0000,0x0000, -0x1044,0x0EFB,0x0EFB,0x0000,0x0000, -0x1044,0x0EFB,0x0EFB,0x0EFB,0x0000, -0x0EFB,0x105A,0x0000,0x0000,0x0000, -0x105A,0x0000,0x0000,0x0000,0x0000, -0x105A,0x0EFB,0x0000,0x0000,0x0000, -0x105A,0x0EFB,0x0EFB,0x0000,0x0000, -0x0F2E,0x0000,0x0000,0x0000,0x0000, -0x0E60,0x0000,0x0000,0x0000,0x0000, -0x0E6D,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0000,0x0000,0x0000,0x0000, -0x0DD7,0x0000,0x0000,0x0000,0x0000, -0x0DD8,0x0000,0x0000,0x0000,0x0000, -0x0DD9,0x0000,0x0000,0x0000,0x0000, -0x0DDA,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xA184,0x0000,0x0000,0x0000, -0xFBC0,0xA185,0x0000,0x0000,0x0000, -0xFBC0,0xA186,0x0000,0x0000,0x0000, -0xFBC0,0xA187,0x0000,0x0000,0x0000, -0xFBC0,0xA188,0x0000,0x0000,0x0000, -0xFBC0,0xA189,0x0000,0x0000,0x0000, -0xFBC0,0xA18A,0x0000,0x0000,0x0000, -0xFBC0,0xA18B,0x0000,0x0000,0x0000, -0xFBC0,0xA18C,0x0000,0x0000,0x0000, -0xFBC0,0xA18D,0x0000,0x0000,0x0000, -0xFBC0,0xA18E,0x0000,0x0000,0x0000, -0xFBC0,0xA18F,0x0000,0x0000,0x0000, -0x03AE,0x0000,0x0000,0x0000,0x0000, -0x03B0,0x0000,0x0000,0x0000,0x0000, -0x03AF,0x0000,0x0000,0x0000,0x0000, -0x03B1,0x0000,0x0000,0x0000,0x0000, -0x03B2,0x0000,0x0000,0x0000,0x0000, -0x03B3,0x0000,0x0000,0x0000,0x0000, -0x03B4,0x0000,0x0000,0x0000,0x0000, -0x03B5,0x0000,0x0000,0x0000,0x0000, -0x03B6,0x0000,0x0000,0x0000,0x0000, -0x03B7,0x0000,0x0000,0x0000,0x0000, -0x03AE,0x0000,0x0000,0x0000,0x0000, -0x03AF,0x0000,0x0000,0x0000,0x0000, -0x03B8,0x0000,0x0000,0x0000,0x0000, -0x03B9,0x0000,0x0000,0x0000,0x0000, -0x03BA,0x0000,0x0000,0x0000,0x0000, -0x03BB,0x0000,0x0000,0x0000,0x0000, -0x03BC,0x0000,0x0000,0x0000,0x0000, -0x03BD,0x0000,0x0000,0x0000,0x0000, -0x03BE,0x0000,0x0000,0x0000,0x0000, -0x03BF,0x0000,0x0000,0x0000,0x0000, -0x03C0,0x0000,0x0000,0x0000,0x0000, -0x03C1,0x0000,0x0000,0x0000,0x0000, -0x03C2,0x0000,0x0000,0x0000,0x0000, -0x03C3,0x0000,0x0000,0x0000,0x0000, -0x03C4,0x0000,0x0000,0x0000,0x0000, -0x03C5,0x0000,0x0000,0x0000,0x0000, -0x03C6,0x0000,0x0000,0x0000,0x0000, -0x03C7,0x0000,0x0000,0x0000,0x0000, -0x03C8,0x0000,0x0000,0x0000,0x0000, -0x03C9,0x0000,0x0000,0x0000,0x0000, -0x03B2,0x0000,0x0000,0x0000,0x0000, -0x03CA,0x0000,0x0000,0x0000,0x0000, -0x03CB,0x0000,0x0000,0x0000,0x0000, -0x03CC,0x0000,0x0000,0x0000,0x0000, -0x03CD,0x0000,0x0000,0x0000,0x0000, -0x03CE,0x0000,0x0000,0x0000,0x0000, -0x03CF,0x0000,0x0000,0x0000,0x0000, -0x03D0,0x0000,0x0000,0x0000,0x0000, -0x03D1,0x0000,0x0000,0x0000,0x0000, -0x03D2,0x0000,0x0000,0x0000,0x0000, -0x03D3,0x0000,0x0000,0x0000,0x0000, -0x03D4,0x0000,0x0000,0x0000,0x0000, -0x03D5,0x0000,0x0000,0x0000,0x0000, -0x03D6,0x0000,0x0000,0x0000,0x0000, -0x03D7,0x0000,0x0000,0x0000,0x0000, -0x03D8,0x0000,0x0000,0x0000,0x0000, -0x03D9,0x0000,0x0000,0x0000,0x0000, -0x03DA,0x0000,0x0000,0x0000,0x0000, -0x03DB,0x0000,0x0000,0x0000,0x0000, -0x03DC,0x0000,0x0000,0x0000,0x0000, -0x03DD,0x0000,0x0000,0x0000,0x0000, -0x03DE,0x0000,0x0000,0x0000,0x0000, -0x03DF,0x0000,0x0000,0x0000,0x0000, -0x03E0,0x0000,0x0000,0x0000,0x0000, -0x03E1,0x0000,0x0000,0x0000,0x0000, -0x03E2,0x0000,0x0000,0x0000,0x0000, -0x03E3,0x0000,0x0000,0x0000,0x0000, -0x03E4,0x0000,0x0000,0x0000,0x0000, -0x03E5,0x0000,0x0000,0x0000,0x0000, -0x03E6,0x0000,0x0000,0x0000,0x0000, -0x03E7,0x0000,0x0000,0x0000,0x0000, -0x03E8,0x0000,0x0000,0x0000,0x0000, -0x03EC,0x0000,0x0000,0x0000,0x0000, -0x03EA,0x0000,0x0000,0x0000,0x0000, -0x03E8,0x0000,0x0000,0x0000,0x0000, -0x03E9,0x0000,0x0000,0x0000,0x0000, -0x03EA,0x0000,0x0000,0x0000,0x0000, -0x03EB,0x0000,0x0000,0x0000,0x0000, -0x03EC,0x0000,0x0000,0x0000,0x0000, -0x03ED,0x0000,0x0000,0x0000,0x0000, -0x03EE,0x0000,0x0000,0x0000,0x0000, -0x03EF,0x0000,0x0000,0x0000,0x0000, -0x03F0,0x0000,0x0000,0x0000,0x0000, -0x03F1,0x0000,0x0000,0x0000,0x0000, -0x03F2,0x0000,0x0000,0x0000,0x0000, -0x03F3,0x0000,0x0000,0x0000,0x0000, -0x03F4,0x0000,0x0000,0x0000,0x0000, -0x03F5,0x0000,0x0000,0x0000,0x0000, -0x03F6,0x0000,0x0000,0x0000,0x0000, -0x03F7,0x0000,0x0000,0x0000,0x0000, -0x03F8,0x0000,0x0000,0x0000,0x0000, -0x03F9,0x0000,0x0000,0x0000,0x0000, -0x03FA,0x0000,0x0000,0x0000,0x0000, -0x03FB,0x0000,0x0000,0x0000,0x0000, -0x03FC,0x0000,0x0000,0x0000,0x0000, -0x03FD,0x0000,0x0000,0x0000,0x0000, -0x03FE,0x0000,0x0000,0x0000,0x0000, -0x03FF,0x0000,0x0000,0x0000,0x0000, -0x0400,0x0000,0x0000,0x0000,0x0000, -0x0401,0x0000,0x0000,0x0000,0x0000, -0x0402,0x0000,0x0000,0x0000,0x0000, -0x0403,0x0000,0x0000,0x0000,0x0000, -0x0404,0x0000,0x0000,0x0000,0x0000, -0x0405,0x0000,0x0000,0x0000,0x0000, -0x0406,0x0000,0x0000,0x0000,0x0000, -0x0407,0x0000,0x0000,0x0000,0x0000, -0x0408,0x0000,0x0000,0x0000,0x0000, -0x0409,0x0000,0x0000,0x0000,0x0000, -0x040A,0x0000,0x0000,0x0000,0x0000, -0x040B,0x0000,0x0000,0x0000,0x0000, -0x040C,0x0000,0x0000,0x0000,0x0000, -0x040D,0x0000,0x0000,0x0000,0x0000, -0x040E,0x0000,0x0000,0x0000,0x0000, -0x040F,0x0000,0x0000,0x0000,0x0000, -0x0410,0x0000,0x0000,0x0000,0x0000, -0x0411,0x0000,0x0000,0x0000,0x0000, -0x0412,0x0000,0x0000,0x0000,0x0000, -0x0413,0x0000,0x0000,0x0000,0x0000, -0x0414,0x0000,0x0000,0x0000,0x0000, -0x0415,0x0000,0x0000,0x0000,0x0000, -0x0416,0x0000,0x0000,0x0000,0x0000, -0x0417,0x0000,0x0000,0x0000,0x0000 -}; - -uint16 page022data[]= { /* 2200 (4 weights per char) */ -0x0418,0x0000,0x0000,0x0000, 0x0419,0x0000,0x0000,0x0000, -0x041A,0x0000,0x0000,0x0000, 0x041B,0x0000,0x0000,0x0000, -0x041B,0x0000,0x0000,0x0000, 0x041C,0x0000,0x0000,0x0000, -0x041D,0x0000,0x0000,0x0000, 0x041E,0x0000,0x0000,0x0000, -0x041F,0x0000,0x0000,0x0000, 0x041F,0x0000,0x0000,0x0000, -0x0420,0x0000,0x0000,0x0000, 0x0421,0x0000,0x0000,0x0000, -0x0421,0x0000,0x0000,0x0000, 0x0422,0x0000,0x0000,0x0000, -0x0424,0x0000,0x0000,0x0000, 0x0425,0x0000,0x0000,0x0000, -0x0426,0x0000,0x0000,0x0000, 0x0427,0x0000,0x0000,0x0000, -0x0434,0x0000,0x0000,0x0000, 0x0435,0x0000,0x0000,0x0000, -0x0436,0x0000,0x0000,0x0000, 0x0437,0x0000,0x0000,0x0000, -0x0438,0x0000,0x0000,0x0000, 0x0439,0x0000,0x0000,0x0000, -0x043A,0x0000,0x0000,0x0000, 0x043B,0x0000,0x0000,0x0000, -0x043C,0x0000,0x0000,0x0000, 0x043D,0x0000,0x0000,0x0000, -0x043E,0x0000,0x0000,0x0000, 0x043F,0x0000,0x0000,0x0000, -0x0440,0x0000,0x0000,0x0000, 0x0441,0x0000,0x0000,0x0000, -0x0442,0x0000,0x0000,0x0000, 0x0443,0x0000,0x0000,0x0000, -0x0444,0x0000,0x0000,0x0000, 0x0445,0x0000,0x0000,0x0000, -0x0445,0x0000,0x0000,0x0000, 0x0446,0x0000,0x0000,0x0000, -0x0446,0x0000,0x0000,0x0000, 0x0447,0x0000,0x0000,0x0000, -0x0448,0x0000,0x0000,0x0000, 0x0449,0x0000,0x0000,0x0000, -0x044A,0x0000,0x0000,0x0000, 0x044B,0x0000,0x0000,0x0000, -0x044B,0x044B,0x0000,0x0000, 0x044B,0x044B,0x044B,0x0000, -0x044C,0x0000,0x0000,0x0000, 0x044C,0x044C,0x0000,0x0000, -0x044C,0x044C,0x044C,0x0000, 0x044D,0x0000,0x0000,0x0000, -0x044E,0x0000,0x0000,0x0000, 0x044F,0x0000,0x0000,0x0000, -0x0450,0x0000,0x0000,0x0000, 0x0451,0x0000,0x0000,0x0000, -0x0452,0x0000,0x0000,0x0000, 0x0453,0x0000,0x0000,0x0000, -0x0454,0x0000,0x0000,0x0000, 0x0455,0x0000,0x0000,0x0000, -0x0456,0x0000,0x0000,0x0000, 0x0457,0x0000,0x0000,0x0000, -0x0458,0x0000,0x0000,0x0000, 0x0459,0x0000,0x0000,0x0000, -0x045A,0x0000,0x0000,0x0000, 0x045B,0x0000,0x0000,0x0000, -0x045C,0x0000,0x0000,0x0000, 0x0458,0x0000,0x0000,0x0000, -0x045D,0x0000,0x0000,0x0000, 0x045E,0x0000,0x0000,0x0000, -0x045E,0x0000,0x0000,0x0000, 0x045F,0x0000,0x0000,0x0000, -0x0460,0x0000,0x0000,0x0000, 0x045F,0x0000,0x0000,0x0000, -0x0461,0x0000,0x0000,0x0000, 0x0461,0x0000,0x0000,0x0000, -0x0462,0x0000,0x0000,0x0000, 0x0463,0x0000,0x0000,0x0000, -0x0464,0x0000,0x0000,0x0000, 0x0465,0x0000,0x0000,0x0000, -0x0466,0x0000,0x0000,0x0000, 0x0467,0x0000,0x0000,0x0000, -0x0468,0x0000,0x0000,0x0000, 0x0469,0x0000,0x0000,0x0000, -0x046A,0x0000,0x0000,0x0000, 0x046B,0x0000,0x0000,0x0000, -0x046C,0x0000,0x0000,0x0000, 0x046D,0x0000,0x0000,0x0000, -0x046E,0x0000,0x0000,0x0000, 0x046F,0x0000,0x0000,0x0000, -0x0470,0x0000,0x0000,0x0000, 0x0471,0x0000,0x0000,0x0000, -0x0472,0x0000,0x0000,0x0000, 0x0473,0x0000,0x0000,0x0000, -0x0474,0x0000,0x0000,0x0000, 0x0475,0x0000,0x0000,0x0000, -0x0476,0x0000,0x0000,0x0000, 0x0477,0x0000,0x0000,0x0000, -0x042D,0x0000,0x0000,0x0000, 0x0478,0x0000,0x0000,0x0000, -0x0478,0x0000,0x0000,0x0000, 0x0479,0x0000,0x0000,0x0000, -0x047A,0x0000,0x0000,0x0000, 0x047B,0x0000,0x0000,0x0000, -0x047C,0x0000,0x0000,0x0000, 0x047D,0x0000,0x0000,0x0000, -0x047E,0x0000,0x0000,0x0000, 0x047F,0x0000,0x0000,0x0000, -0x0480,0x0000,0x0000,0x0000, 0x0481,0x0000,0x0000,0x0000, -0x0482,0x0000,0x0000,0x0000, 0x0465,0x0000,0x0000,0x0000, -0x042C,0x0000,0x0000,0x0000, 0x042E,0x0000,0x0000,0x0000, -0x047A,0x0000,0x0000,0x0000, 0x047B,0x0000,0x0000,0x0000, -0x0483,0x0000,0x0000,0x0000, 0x0484,0x0000,0x0000,0x0000, -0x0483,0x0000,0x0000,0x0000, 0x0484,0x0000,0x0000,0x0000, -0x0485,0x0000,0x0000,0x0000, 0x0486,0x0000,0x0000,0x0000, -0x0485,0x0000,0x0000,0x0000, 0x0486,0x0000,0x0000,0x0000, -0x0487,0x0000,0x0000,0x0000, 0x0488,0x0000,0x0000,0x0000, -0x0489,0x0000,0x0000,0x0000, 0x048A,0x0000,0x0000,0x0000, -0x048B,0x0000,0x0000,0x0000, 0x048C,0x0000,0x0000,0x0000, -0x0487,0x0000,0x0000,0x0000, 0x0488,0x0000,0x0000,0x0000, -0x048D,0x0000,0x0000,0x0000, 0x048E,0x0000,0x0000,0x0000, -0x048D,0x0000,0x0000,0x0000, 0x048E,0x0000,0x0000,0x0000, -0x048F,0x0000,0x0000,0x0000, 0x0490,0x0000,0x0000,0x0000, -0x048F,0x0000,0x0000,0x0000, 0x0490,0x0000,0x0000,0x0000, -0x0491,0x0000,0x0000,0x0000, 0x0492,0x0000,0x0000,0x0000, -0x0493,0x0000,0x0000,0x0000, 0x0494,0x0000,0x0000,0x0000, -0x0495,0x0000,0x0000,0x0000, 0x0496,0x0000,0x0000,0x0000, -0x0497,0x0000,0x0000,0x0000, 0x0498,0x0000,0x0000,0x0000, -0x0499,0x0000,0x0000,0x0000, 0x049A,0x0000,0x0000,0x0000, -0x049B,0x0000,0x0000,0x0000, 0x049C,0x0000,0x0000,0x0000, -0x049D,0x0000,0x0000,0x0000, 0x049E,0x0000,0x0000,0x0000, -0x049F,0x0000,0x0000,0x0000, 0x04A0,0x0000,0x0000,0x0000, -0x04A1,0x0000,0x0000,0x0000, 0x04A2,0x0000,0x0000,0x0000, -0x04A3,0x0000,0x0000,0x0000, 0x04A4,0x0000,0x0000,0x0000, -0x04A5,0x0000,0x0000,0x0000, 0x04A6,0x0000,0x0000,0x0000, -0x04A7,0x0000,0x0000,0x0000, 0x04A8,0x0000,0x0000,0x0000, -0x04A9,0x0000,0x0000,0x0000, 0x04AA,0x0000,0x0000,0x0000, -0x04AB,0x0000,0x0000,0x0000, 0x04AC,0x0000,0x0000,0x0000, -0x04AD,0x0000,0x0000,0x0000, 0x04AE,0x0000,0x0000,0x0000, -0x04AF,0x0000,0x0000,0x0000, 0x04B0,0x0000,0x0000,0x0000, -0x04B1,0x0000,0x0000,0x0000, 0x04B2,0x0000,0x0000,0x0000, -0x04A9,0x0000,0x0000,0x0000, 0x04AF,0x0000,0x0000,0x0000, -0x04B0,0x0000,0x0000,0x0000, 0x04B2,0x0000,0x0000,0x0000, -0x04B3,0x0000,0x0000,0x0000, 0x04B4,0x0000,0x0000,0x0000, -0x04B5,0x0000,0x0000,0x0000, 0x04B6,0x0000,0x0000,0x0000, -0x04B7,0x0000,0x0000,0x0000, 0x04B8,0x0000,0x0000,0x0000, -0x04B9,0x0000,0x0000,0x0000, 0x04BA,0x0000,0x0000,0x0000, -0x04BB,0x0000,0x0000,0x0000, 0x04BC,0x0000,0x0000,0x0000, -0x04BD,0x0000,0x0000,0x0000, 0x04BE,0x0000,0x0000,0x0000, -0x04BF,0x0000,0x0000,0x0000, 0x04C0,0x0000,0x0000,0x0000, -0x04C1,0x0000,0x0000,0x0000, 0x04C2,0x0000,0x0000,0x0000, -0x04C3,0x0000,0x0000,0x0000, 0x04C4,0x0000,0x0000,0x0000, -0x04C5,0x0000,0x0000,0x0000, 0x04C6,0x0000,0x0000,0x0000, -0x04C7,0x0000,0x0000,0x0000, 0x04C8,0x0000,0x0000,0x0000, -0x04C9,0x0000,0x0000,0x0000, 0x04CA,0x0000,0x0000,0x0000, -0x04CB,0x0000,0x0000,0x0000, 0x04CC,0x0000,0x0000,0x0000, -0x04CD,0x0000,0x0000,0x0000, 0x04CE,0x0000,0x0000,0x0000, -0x04CF,0x0000,0x0000,0x0000, 0x04D0,0x0000,0x0000,0x0000, -0x04D1,0x0000,0x0000,0x0000, 0x04D2,0x0000,0x0000,0x0000, -0x04D3,0x0000,0x0000,0x0000, 0x04D4,0x0000,0x0000,0x0000, -0x04D5,0x0000,0x0000,0x0000, 0x04D6,0x0000,0x0000,0x0000, -0x04D7,0x0000,0x0000,0x0000, 0x04D8,0x0000,0x0000,0x0000, -0x04D9,0x0000,0x0000,0x0000, 0x04DA,0x0000,0x0000,0x0000, -0x04DB,0x0000,0x0000,0x0000, 0x04DC,0x0000,0x0000,0x0000, -0x04DD,0x0000,0x0000,0x0000, 0x04DE,0x0000,0x0000,0x0000, -0x04DF,0x0000,0x0000,0x0000, 0x04E0,0x0000,0x0000,0x0000, -0x04E1,0x0000,0x0000,0x0000, 0x04E2,0x0000,0x0000,0x0000, -0x0489,0x0000,0x0000,0x0000, 0x048A,0x0000,0x0000,0x0000, -0x0498,0x0000,0x0000,0x0000, 0x0499,0x0000,0x0000,0x0000, -0x04E3,0x0000,0x0000,0x0000, 0x04E4,0x0000,0x0000,0x0000, -0x04E5,0x0000,0x0000,0x0000, 0x04E6,0x0000,0x0000,0x0000, -0x04E7,0x0000,0x0000,0x0000, 0x04E8,0x0000,0x0000,0x0000, -0x04B5,0x0000,0x0000,0x0000, 0x04B6,0x0000,0x0000,0x0000, -0x04B7,0x0000,0x0000,0x0000, 0x04B8,0x0000,0x0000,0x0000, -0x04E9,0x0000,0x0000,0x0000, 0x04EA,0x0000,0x0000,0x0000, -0x04EB,0x0000,0x0000,0x0000, 0x04EC,0x0000,0x0000,0x0000, -0x04ED,0x0000,0x0000,0x0000, 0x04EE,0x0000,0x0000,0x0000, -0x04EF,0x0000,0x0000,0x0000, 0x04F0,0x0000,0x0000,0x0000, -0x04F1,0x0000,0x0000,0x0000, 0x04F2,0x0000,0x0000,0x0000, -0x04F3,0x0000,0x0000,0x0000, 0x04F4,0x0000,0x0000,0x0000, -0x04F5,0x0000,0x0000,0x0000, 0x04F6,0x0000,0x0000,0x0000, -0x04F7,0x0000,0x0000,0x0000, 0x04F8,0x0000,0x0000,0x0000, -0x04F9,0x0000,0x0000,0x0000, 0x04FA,0x0000,0x0000,0x0000 -}; - -uint16 page023data[]= { /* 2300 (3 weights per char) */ -0x04FB,0x0000,0x0000, 0x04FC,0x0000,0x0000, 0x04FD,0x0000,0x0000, -0x04FE,0x0000,0x0000, 0x04FF,0x0000,0x0000, 0x0500,0x0000,0x0000, -0x0501,0x0000,0x0000, 0x0502,0x0000,0x0000, 0x0503,0x0000,0x0000, -0x0504,0x0000,0x0000, 0x0505,0x0000,0x0000, 0x0506,0x0000,0x0000, -0x0507,0x0000,0x0000, 0x0508,0x0000,0x0000, 0x0509,0x0000,0x0000, -0x050A,0x0000,0x0000, 0x050B,0x0000,0x0000, 0x050C,0x0000,0x0000, -0x050D,0x0000,0x0000, 0x050E,0x0000,0x0000, 0x050F,0x0000,0x0000, -0x0510,0x0000,0x0000, 0x0511,0x0000,0x0000, 0x0512,0x0000,0x0000, -0x0513,0x0000,0x0000, 0x0514,0x0000,0x0000, 0x0515,0x0000,0x0000, -0x0516,0x0000,0x0000, 0x0517,0x0000,0x0000, 0x0518,0x0000,0x0000, -0x0519,0x0000,0x0000, 0x051A,0x0000,0x0000, 0x051B,0x0000,0x0000, -0x051C,0x0000,0x0000, 0x051D,0x0000,0x0000, 0x051E,0x0000,0x0000, -0x051F,0x0000,0x0000, 0x0520,0x0000,0x0000, 0x0521,0x0000,0x0000, -0x0522,0x0000,0x0000, 0x0523,0x0000,0x0000, 0x02AE,0x0000,0x0000, -0x02AF,0x0000,0x0000, 0x0524,0x0000,0x0000, 0x0525,0x0000,0x0000, -0x0526,0x0000,0x0000, 0x0527,0x0000,0x0000, 0x0528,0x0000,0x0000, -0x0529,0x0000,0x0000, 0x052A,0x0000,0x0000, 0x052B,0x0000,0x0000, -0x052C,0x0000,0x0000, 0x052D,0x0000,0x0000, 0x052E,0x0000,0x0000, -0x052F,0x0000,0x0000, 0x0530,0x0000,0x0000, 0x0531,0x0000,0x0000, -0x0532,0x0000,0x0000, 0x0533,0x0000,0x0000, 0x0534,0x0000,0x0000, -0x0535,0x0000,0x0000, 0x0536,0x0000,0x0000, 0x0537,0x0000,0x0000, -0x0538,0x0000,0x0000, 0x0539,0x0000,0x0000, 0x053A,0x0000,0x0000, -0x053B,0x0000,0x0000, 0x053C,0x0000,0x0000, 0x053D,0x0000,0x0000, -0x053E,0x0000,0x0000, 0x053F,0x0000,0x0000, 0x0540,0x0000,0x0000, -0x0541,0x0000,0x0000, 0x0542,0x0000,0x0000, 0x0543,0x0000,0x0000, -0x0544,0x0000,0x0000, 0x0545,0x0000,0x0000, 0x0546,0x0000,0x0000, -0x0547,0x0000,0x0000, 0x0548,0x0000,0x0000, 0x0549,0x0000,0x0000, -0x054A,0x0000,0x0000, 0x054B,0x0000,0x0000, 0x054C,0x0000,0x0000, -0x054D,0x0000,0x0000, 0x054E,0x0000,0x0000, 0x054F,0x0000,0x0000, -0x0550,0x0000,0x0000, 0x0551,0x0000,0x0000, 0x0552,0x0000,0x0000, -0x0553,0x0000,0x0000, 0x0554,0x0000,0x0000, 0x0555,0x0000,0x0000, -0x0556,0x0000,0x0000, 0x0557,0x0000,0x0000, 0x0558,0x0000,0x0000, -0x0559,0x0000,0x0000, 0x055A,0x0000,0x0000, 0x055B,0x0000,0x0000, -0x055C,0x0000,0x0000, 0x055D,0x0000,0x0000, 0x055E,0x0000,0x0000, -0x055F,0x0000,0x0000, 0x0560,0x0000,0x0000, 0x0561,0x0000,0x0000, -0x0562,0x0000,0x0000, 0x0563,0x0000,0x0000, 0x0564,0x0000,0x0000, -0x0565,0x0000,0x0000, 0x0566,0x0000,0x0000, 0x0567,0x0000,0x0000, -0x0568,0x0000,0x0000, 0x0569,0x0000,0x0000, 0x056A,0x0000,0x0000, -0x056B,0x0000,0x0000, 0x056C,0x0000,0x0000, 0x056D,0x0000,0x0000, -0x056E,0x0000,0x0000, 0x056F,0x0000,0x0000, 0x0570,0x0000,0x0000, -0x0571,0x0000,0x0000, 0x0572,0x0000,0x0000, 0x0573,0x0000,0x0000, -0x0574,0x0000,0x0000, 0x0575,0x0000,0x0000, 0x0576,0x0000,0x0000, -0x0577,0x0000,0x0000, 0x0578,0x0000,0x0000, 0x0579,0x0000,0x0000, -0x057A,0x0000,0x0000, 0x057B,0x0000,0x0000, 0x057C,0x0000,0x0000, -0x057D,0x0000,0x0000, 0x057E,0x0000,0x0000, 0x057F,0x0000,0x0000, -0x0580,0x0000,0x0000, 0x0581,0x0000,0x0000, 0x0582,0x0000,0x0000, -0x0583,0x0000,0x0000, 0x0584,0x0000,0x0000, 0x0585,0x0000,0x0000, -0x0586,0x0000,0x0000, 0x0587,0x0000,0x0000, 0x0588,0x0000,0x0000, -0x0589,0x0000,0x0000, 0x058A,0x0000,0x0000, 0x058B,0x0000,0x0000, -0x058C,0x0000,0x0000, 0x058D,0x0000,0x0000, 0x058E,0x0000,0x0000, -0x058F,0x0000,0x0000, 0x0590,0x0000,0x0000, 0x0591,0x0000,0x0000, -0x0592,0x0000,0x0000, 0x0593,0x0000,0x0000, 0x0594,0x0000,0x0000, -0x0595,0x0000,0x0000, 0x0596,0x0000,0x0000, 0x0597,0x0000,0x0000, -0x0598,0x0000,0x0000, 0x0599,0x0000,0x0000, 0x059A,0x0000,0x0000, -0x059B,0x0000,0x0000, 0x059C,0x0000,0x0000, 0x059D,0x0000,0x0000, -0x059E,0x0000,0x0000, 0x059F,0x0000,0x0000, 0x05A0,0x0000,0x0000, -0x05A1,0x0000,0x0000, 0x05A2,0x0000,0x0000, 0x05A3,0x0000,0x0000, -0x05A4,0x0000,0x0000, 0x05A5,0x0000,0x0000, 0x05A6,0x0000,0x0000, -0x05A7,0x0000,0x0000, 0x05A8,0x0000,0x0000, 0x05A9,0x0000,0x0000, -0x05AA,0x0000,0x0000, 0x05AB,0x0000,0x0000, 0x05AC,0x0000,0x0000, -0x05AD,0x0000,0x0000, 0x05AE,0x0000,0x0000, 0x05AF,0x0000,0x0000, -0x05B0,0x0000,0x0000, 0x05B1,0x0000,0x0000, 0x05B2,0x0000,0x0000, -0x05B3,0x0000,0x0000, 0x05B4,0x0000,0x0000, 0x05B5,0x0000,0x0000, -0x05B6,0x0000,0x0000, 0x05B7,0x0000,0x0000, 0x05B8,0x0000,0x0000, -0x05B9,0x0000,0x0000, 0x05BA,0x0000,0x0000, 0x05BB,0x0000,0x0000, -0x05BC,0x0000,0x0000, 0x05BD,0x0000,0x0000, 0x05BE,0x0000,0x0000, -0x05BF,0x0000,0x0000, 0x05C0,0x0000,0x0000, 0x05C1,0x0000,0x0000, -0x05C2,0x0000,0x0000, 0x05C3,0x0000,0x0000, 0x05C4,0x0000,0x0000, -0x05C5,0x0000,0x0000, 0x05C6,0x0000,0x0000, 0x05C7,0x0000,0x0000, -0x05C8,0x0000,0x0000, 0x05C9,0x0000,0x0000, 0xFBC0,0xA3D1,0x0000, -0xFBC0,0xA3D2,0x0000, 0xFBC0,0xA3D3,0x0000, 0xFBC0,0xA3D4,0x0000, -0xFBC0,0xA3D5,0x0000, 0xFBC0,0xA3D6,0x0000, 0xFBC0,0xA3D7,0x0000, -0xFBC0,0xA3D8,0x0000, 0xFBC0,0xA3D9,0x0000, 0xFBC0,0xA3DA,0x0000, -0xFBC0,0xA3DB,0x0000, 0xFBC0,0xA3DC,0x0000, 0xFBC0,0xA3DD,0x0000, -0xFBC0,0xA3DE,0x0000, 0xFBC0,0xA3DF,0x0000, 0xFBC0,0xA3E0,0x0000, -0xFBC0,0xA3E1,0x0000, 0xFBC0,0xA3E2,0x0000, 0xFBC0,0xA3E3,0x0000, -0xFBC0,0xA3E4,0x0000, 0xFBC0,0xA3E5,0x0000, 0xFBC0,0xA3E6,0x0000, -0xFBC0,0xA3E7,0x0000, 0xFBC0,0xA3E8,0x0000, 0xFBC0,0xA3E9,0x0000, -0xFBC0,0xA3EA,0x0000, 0xFBC0,0xA3EB,0x0000, 0xFBC0,0xA3EC,0x0000, -0xFBC0,0xA3ED,0x0000, 0xFBC0,0xA3EE,0x0000, 0xFBC0,0xA3EF,0x0000, -0xFBC0,0xA3F0,0x0000, 0xFBC0,0xA3F1,0x0000, 0xFBC0,0xA3F2,0x0000, -0xFBC0,0xA3F3,0x0000, 0xFBC0,0xA3F4,0x0000, 0xFBC0,0xA3F5,0x0000, -0xFBC0,0xA3F6,0x0000, 0xFBC0,0xA3F7,0x0000, 0xFBC0,0xA3F8,0x0000, -0xFBC0,0xA3F9,0x0000, 0xFBC0,0xA3FA,0x0000, 0xFBC0,0xA3FB,0x0000, -0xFBC0,0xA3FC,0x0000, 0xFBC0,0xA3FD,0x0000, 0xFBC0,0xA3FE,0x0000, -0xFBC0,0xA3FF,0x0000 }; - -uint16 page024data[]= { /* 2400 (5 weights per char) */ -0x05CA,0x0000,0x0000,0x0000,0x0000, -0x05CB,0x0000,0x0000,0x0000,0x0000, -0x05CC,0x0000,0x0000,0x0000,0x0000, -0x05CD,0x0000,0x0000,0x0000,0x0000, -0x05CE,0x0000,0x0000,0x0000,0x0000, -0x05CF,0x0000,0x0000,0x0000,0x0000, -0x05D0,0x0000,0x0000,0x0000,0x0000, -0x05D1,0x0000,0x0000,0x0000,0x0000, -0x05D2,0x0000,0x0000,0x0000,0x0000, -0x05D3,0x0000,0x0000,0x0000,0x0000, -0x05D4,0x0000,0x0000,0x0000,0x0000, -0x05D5,0x0000,0x0000,0x0000,0x0000, -0x05D6,0x0000,0x0000,0x0000,0x0000, -0x05D7,0x0000,0x0000,0x0000,0x0000, -0x05D8,0x0000,0x0000,0x0000,0x0000, -0x05D9,0x0000,0x0000,0x0000,0x0000, -0x05DA,0x0000,0x0000,0x0000,0x0000, -0x05DB,0x0000,0x0000,0x0000,0x0000, -0x05DC,0x0000,0x0000,0x0000,0x0000, -0x05DD,0x0000,0x0000,0x0000,0x0000, -0x05DE,0x0000,0x0000,0x0000,0x0000, -0x05DF,0x0000,0x0000,0x0000,0x0000, -0x05E0,0x0000,0x0000,0x0000,0x0000, -0x05E1,0x0000,0x0000,0x0000,0x0000, -0x05E2,0x0000,0x0000,0x0000,0x0000, -0x05E3,0x0000,0x0000,0x0000,0x0000, -0x05E4,0x0000,0x0000,0x0000,0x0000, -0x05E5,0x0000,0x0000,0x0000,0x0000, -0x05E6,0x0000,0x0000,0x0000,0x0000, -0x05E7,0x0000,0x0000,0x0000,0x0000, -0x05E8,0x0000,0x0000,0x0000,0x0000, -0x05E9,0x0000,0x0000,0x0000,0x0000, -0x05EA,0x0000,0x0000,0x0000,0x0000, -0x05EB,0x0000,0x0000,0x0000,0x0000, -0x05EC,0x0000,0x0000,0x0000,0x0000, -0x05ED,0x0000,0x0000,0x0000,0x0000, -0x05EE,0x0000,0x0000,0x0000,0x0000, -0x05EF,0x0000,0x0000,0x0000,0x0000, -0x05F0,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xA427,0x0000,0x0000,0x0000, -0xFBC0,0xA428,0x0000,0x0000,0x0000, -0xFBC0,0xA429,0x0000,0x0000,0x0000, -0xFBC0,0xA42A,0x0000,0x0000,0x0000, -0xFBC0,0xA42B,0x0000,0x0000,0x0000, -0xFBC0,0xA42C,0x0000,0x0000,0x0000, -0xFBC0,0xA42D,0x0000,0x0000,0x0000, -0xFBC0,0xA42E,0x0000,0x0000,0x0000, -0xFBC0,0xA42F,0x0000,0x0000,0x0000, -0xFBC0,0xA430,0x0000,0x0000,0x0000, -0xFBC0,0xA431,0x0000,0x0000,0x0000, -0xFBC0,0xA432,0x0000,0x0000,0x0000, -0xFBC0,0xA433,0x0000,0x0000,0x0000, -0xFBC0,0xA434,0x0000,0x0000,0x0000, -0xFBC0,0xA435,0x0000,0x0000,0x0000, -0xFBC0,0xA436,0x0000,0x0000,0x0000, -0xFBC0,0xA437,0x0000,0x0000,0x0000, -0xFBC0,0xA438,0x0000,0x0000,0x0000, -0xFBC0,0xA439,0x0000,0x0000,0x0000, -0xFBC0,0xA43A,0x0000,0x0000,0x0000, -0xFBC0,0xA43B,0x0000,0x0000,0x0000, -0xFBC0,0xA43C,0x0000,0x0000,0x0000, -0xFBC0,0xA43D,0x0000,0x0000,0x0000, -0xFBC0,0xA43E,0x0000,0x0000,0x0000, -0xFBC0,0xA43F,0x0000,0x0000,0x0000, -0x05F1,0x0000,0x0000,0x0000,0x0000, -0x05F2,0x0000,0x0000,0x0000,0x0000, -0x05F3,0x0000,0x0000,0x0000,0x0000, -0x05F4,0x0000,0x0000,0x0000,0x0000, -0x05F5,0x0000,0x0000,0x0000,0x0000, -0x05F6,0x0000,0x0000,0x0000,0x0000, -0x05F7,0x0000,0x0000,0x0000,0x0000, -0x05F8,0x0000,0x0000,0x0000,0x0000, -0x05F9,0x0000,0x0000,0x0000,0x0000, -0x05FA,0x0000,0x0000,0x0000,0x0000, -0x05FB,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xA44B,0x0000,0x0000,0x0000, -0xFBC0,0xA44C,0x0000,0x0000,0x0000, -0xFBC0,0xA44D,0x0000,0x0000,0x0000, -0xFBC0,0xA44E,0x0000,0x0000,0x0000, -0xFBC0,0xA44F,0x0000,0x0000,0x0000, -0xFBC0,0xA450,0x0000,0x0000,0x0000, -0xFBC0,0xA451,0x0000,0x0000,0x0000, -0xFBC0,0xA452,0x0000,0x0000,0x0000, -0xFBC0,0xA453,0x0000,0x0000,0x0000, -0xFBC0,0xA454,0x0000,0x0000,0x0000, -0xFBC0,0xA455,0x0000,0x0000,0x0000, -0xFBC0,0xA456,0x0000,0x0000,0x0000, -0xFBC0,0xA457,0x0000,0x0000,0x0000, -0xFBC0,0xA458,0x0000,0x0000,0x0000, -0xFBC0,0xA459,0x0000,0x0000,0x0000, -0xFBC0,0xA45A,0x0000,0x0000,0x0000, -0xFBC0,0xA45B,0x0000,0x0000,0x0000, -0xFBC0,0xA45C,0x0000,0x0000,0x0000, -0xFBC0,0xA45D,0x0000,0x0000,0x0000, -0xFBC0,0xA45E,0x0000,0x0000,0x0000, -0xFBC0,0xA45F,0x0000,0x0000,0x0000, -0x0E2A,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0x0000,0x0000,0x0000,0x0000, -0x0E2E,0x0000,0x0000,0x0000,0x0000, -0x0E2F,0x0000,0x0000,0x0000,0x0000, -0x0E30,0x0000,0x0000,0x0000,0x0000, -0x0E31,0x0000,0x0000,0x0000,0x0000, -0x0E32,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E29,0x0000,0x0000,0x0000, -0x0E2A,0x0E2A,0x0000,0x0000,0x0000, -0x0E2A,0x0E2B,0x0000,0x0000,0x0000, -0x0E2A,0x0E2C,0x0000,0x0000,0x0000, -0x0E2A,0x0E2D,0x0000,0x0000,0x0000, -0x0E2A,0x0E2E,0x0000,0x0000,0x0000, -0x0E2A,0x0E2F,0x0000,0x0000,0x0000, -0x0E2A,0x0E30,0x0000,0x0000,0x0000, -0x0E2A,0x0E31,0x0000,0x0000,0x0000, -0x0E2A,0x0E32,0x0000,0x0000,0x0000, -0x0E2B,0x0E29,0x0000,0x0000,0x0000, -0x0288,0x0E2A,0x0289,0x0000,0x0000, -0x0288,0x0E2B,0x0289,0x0000,0x0000, -0x0288,0x0E2C,0x0289,0x0000,0x0000, -0x0288,0x0E2D,0x0289,0x0000,0x0000, -0x0288,0x0E2E,0x0289,0x0000,0x0000, -0x0288,0x0E2F,0x0289,0x0000,0x0000, -0x0288,0x0E30,0x0289,0x0000,0x0000, -0x0288,0x0E31,0x0289,0x0000,0x0000, -0x0288,0x0E32,0x0289,0x0000,0x0000, -0x0288,0x0E2A,0x0E29,0x0289,0x0000, -0x0288,0x0E2A,0x0E2A,0x0289,0x0000, -0x0288,0x0E2A,0x0E2B,0x0289,0x0000, -0x0288,0x0E2A,0x0E2C,0x0289,0x0000, -0x0288,0x0E2A,0x0E2D,0x0289,0x0000, -0x0288,0x0E2A,0x0E2E,0x0289,0x0000, -0x0288,0x0E2A,0x0E2F,0x0289,0x0000, -0x0288,0x0E2A,0x0E30,0x0289,0x0000, -0x0288,0x0E2A,0x0E31,0x0289,0x0000, -0x0288,0x0E2A,0x0E32,0x0289,0x0000, -0x0288,0x0E2B,0x0E29,0x0289,0x0000, -0x0E2A,0x025D,0x0000,0x0000,0x0000, -0x0E2B,0x025D,0x0000,0x0000,0x0000, -0x0E2C,0x025D,0x0000,0x0000,0x0000, -0x0E2D,0x025D,0x0000,0x0000,0x0000, -0x0E2E,0x025D,0x0000,0x0000,0x0000, -0x0E2F,0x025D,0x0000,0x0000,0x0000, -0x0E30,0x025D,0x0000,0x0000,0x0000, -0x0E31,0x025D,0x0000,0x0000,0x0000, -0x0E32,0x025D,0x0000,0x0000,0x0000, -0x0E2A,0x0E29,0x025D,0x0000,0x0000, -0x0E2A,0x0E2A,0x025D,0x0000,0x0000, -0x0E2A,0x0E2B,0x025D,0x0000,0x0000, -0x0E2A,0x0E2C,0x025D,0x0000,0x0000, -0x0E2A,0x0E2D,0x025D,0x0000,0x0000, -0x0E2A,0x0E2E,0x025D,0x0000,0x0000, -0x0E2A,0x0E2F,0x025D,0x0000,0x0000, -0x0E2A,0x0E30,0x025D,0x0000,0x0000, -0x0E2A,0x0E31,0x025D,0x0000,0x0000, -0x0E2A,0x0E32,0x025D,0x0000,0x0000, -0x0E2B,0x0E29,0x025D,0x0000,0x0000, -0x0288,0x0E33,0x0289,0x0000,0x0000, -0x0288,0x0E4A,0x0289,0x0000,0x0000, -0x0288,0x0E60,0x0289,0x0000,0x0000, -0x0288,0x0E6D,0x0289,0x0000,0x0000, -0x0288,0x0E8B,0x0289,0x0000,0x0000, -0x0288,0x0EB9,0x0289,0x0000,0x0000, -0x0288,0x0EC1,0x0289,0x0000,0x0000, -0x0288,0x0EE1,0x0289,0x0000,0x0000, -0x0288,0x0EFB,0x0289,0x0000,0x0000, -0x0288,0x0F10,0x0289,0x0000,0x0000, -0x0288,0x0F21,0x0289,0x0000,0x0000, -0x0288,0x0F2E,0x0289,0x0000,0x0000, -0x0288,0x0F5B,0x0289,0x0000,0x0000, -0x0288,0x0F64,0x0289,0x0000,0x0000, -0x0288,0x0F82,0x0289,0x0000,0x0000, -0x0288,0x0FA7,0x0289,0x0000,0x0000, -0x0288,0x0FB4,0x0289,0x0000,0x0000, -0x0288,0x0FC0,0x0289,0x0000,0x0000, -0x0288,0x0FEA,0x0289,0x0000,0x0000, -0x0288,0x1002,0x0289,0x0000,0x0000, -0x0288,0x101F,0x0289,0x0000,0x0000, -0x0288,0x1044,0x0289,0x0000,0x0000, -0x0288,0x1051,0x0289,0x0000,0x0000, -0x0288,0x105A,0x0289,0x0000,0x0000, -0x0288,0x105E,0x0289,0x0000,0x0000, -0x0288,0x106A,0x0289,0x0000,0x0000, -0x0E33,0x0000,0x0000,0x0000,0x0000, -0x0E4A,0x0000,0x0000,0x0000,0x0000, -0x0E60,0x0000,0x0000,0x0000,0x0000, -0x0E6D,0x0000,0x0000,0x0000,0x0000, -0x0E8B,0x0000,0x0000,0x0000,0x0000, -0x0EB9,0x0000,0x0000,0x0000,0x0000, -0x0EC1,0x0000,0x0000,0x0000,0x0000, -0x0EE1,0x0000,0x0000,0x0000,0x0000, -0x0EFB,0x0000,0x0000,0x0000,0x0000, -0x0F10,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0000,0x0000,0x0000,0x0000, -0x0F2E,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0000,0x0000,0x0000,0x0000, -0x0F64,0x0000,0x0000,0x0000,0x0000, -0x0F82,0x0000,0x0000,0x0000,0x0000, -0x0FA7,0x0000,0x0000,0x0000,0x0000, -0x0FB4,0x0000,0x0000,0x0000,0x0000, -0x0FC0,0x0000,0x0000,0x0000,0x0000, -0x0FEA,0x0000,0x0000,0x0000,0x0000, -0x1002,0x0000,0x0000,0x0000,0x0000, -0x101F,0x0000,0x0000,0x0000,0x0000, -0x1044,0x0000,0x0000,0x0000,0x0000, -0x1051,0x0000,0x0000,0x0000,0x0000, -0x105A,0x0000,0x0000,0x0000,0x0000, -0x105E,0x0000,0x0000,0x0000,0x0000, -0x106A,0x0000,0x0000,0x0000,0x0000, -0x0E33,0x0000,0x0000,0x0000,0x0000, -0x0E4A,0x0000,0x0000,0x0000,0x0000, -0x0E60,0x0000,0x0000,0x0000,0x0000, -0x0E6D,0x0000,0x0000,0x0000,0x0000, -0x0E8B,0x0000,0x0000,0x0000,0x0000, -0x0EB9,0x0000,0x0000,0x0000,0x0000, -0x0EC1,0x0000,0x0000,0x0000,0x0000, -0x0EE1,0x0000,0x0000,0x0000,0x0000, -0x0EFB,0x0000,0x0000,0x0000,0x0000, -0x0F10,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0000,0x0000,0x0000,0x0000, -0x0F2E,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0000,0x0000,0x0000,0x0000, -0x0F64,0x0000,0x0000,0x0000,0x0000, -0x0F82,0x0000,0x0000,0x0000,0x0000, -0x0FA7,0x0000,0x0000,0x0000,0x0000, -0x0FB4,0x0000,0x0000,0x0000,0x0000, -0x0FC0,0x0000,0x0000,0x0000,0x0000, -0x0FEA,0x0000,0x0000,0x0000,0x0000, -0x1002,0x0000,0x0000,0x0000,0x0000, -0x101F,0x0000,0x0000,0x0000,0x0000, -0x1044,0x0000,0x0000,0x0000,0x0000, -0x1051,0x0000,0x0000,0x0000,0x0000, -0x105A,0x0000,0x0000,0x0000,0x0000, -0x105E,0x0000,0x0000,0x0000,0x0000, -0x106A,0x0000,0x0000,0x0000,0x0000, -0x0E29,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2A,0x0000,0x0000,0x0000, -0x0E2A,0x0E2B,0x0000,0x0000,0x0000, -0x0E2A,0x0E2C,0x0000,0x0000,0x0000, -0x0E2A,0x0E2D,0x0000,0x0000,0x0000, -0x0E2A,0x0E2E,0x0000,0x0000,0x0000, -0x0E2A,0x0E2F,0x0000,0x0000,0x0000, -0x0E2A,0x0E30,0x0000,0x0000,0x0000, -0x0E2A,0x0E31,0x0000,0x0000,0x0000, -0x0E2A,0x0E32,0x0000,0x0000,0x0000, -0x0E2B,0x0E29,0x0000,0x0000,0x0000, -0x0E2A,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0x0000,0x0000,0x0000,0x0000, -0x0E2E,0x0000,0x0000,0x0000,0x0000, -0x0E2F,0x0000,0x0000,0x0000,0x0000, -0x0E30,0x0000,0x0000,0x0000,0x0000, -0x0E31,0x0000,0x0000,0x0000,0x0000, -0x0E32,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E29,0x0000,0x0000,0x0000, -0x0E29,0x0000,0x0000,0x0000,0x0000 -}; - -uint16 page025data[]= { /* 2500 (2 weights per char) */ -0x05FC,0x0000, 0x05FD,0x0000, 0x05FE,0x0000, 0x05FF,0x0000, -0x0600,0x0000, 0x0601,0x0000, 0x0602,0x0000, 0x0603,0x0000, -0x0604,0x0000, 0x0605,0x0000, 0x0606,0x0000, 0x0607,0x0000, -0x0608,0x0000, 0x0609,0x0000, 0x060A,0x0000, 0x060B,0x0000, -0x060C,0x0000, 0x060D,0x0000, 0x060E,0x0000, 0x060F,0x0000, -0x0610,0x0000, 0x0611,0x0000, 0x0612,0x0000, 0x0613,0x0000, -0x0614,0x0000, 0x0615,0x0000, 0x0616,0x0000, 0x0617,0x0000, -0x0618,0x0000, 0x0619,0x0000, 0x061A,0x0000, 0x061B,0x0000, -0x061C,0x0000, 0x061D,0x0000, 0x061E,0x0000, 0x061F,0x0000, -0x0620,0x0000, 0x0621,0x0000, 0x0622,0x0000, 0x0623,0x0000, -0x0624,0x0000, 0x0625,0x0000, 0x0626,0x0000, 0x0627,0x0000, -0x0628,0x0000, 0x0629,0x0000, 0x062A,0x0000, 0x062B,0x0000, -0x062C,0x0000, 0x062D,0x0000, 0x062E,0x0000, 0x062F,0x0000, -0x0630,0x0000, 0x0631,0x0000, 0x0632,0x0000, 0x0633,0x0000, -0x0634,0x0000, 0x0635,0x0000, 0x0636,0x0000, 0x0637,0x0000, -0x0638,0x0000, 0x0639,0x0000, 0x063A,0x0000, 0x063B,0x0000, -0x063C,0x0000, 0x063D,0x0000, 0x063E,0x0000, 0x063F,0x0000, -0x0640,0x0000, 0x0641,0x0000, 0x0642,0x0000, 0x0643,0x0000, -0x0644,0x0000, 0x0645,0x0000, 0x0646,0x0000, 0x0647,0x0000, -0x0648,0x0000, 0x0649,0x0000, 0x064A,0x0000, 0x064B,0x0000, -0x064C,0x0000, 0x064D,0x0000, 0x064E,0x0000, 0x064F,0x0000, -0x0650,0x0000, 0x0651,0x0000, 0x0652,0x0000, 0x0653,0x0000, -0x0654,0x0000, 0x0655,0x0000, 0x0656,0x0000, 0x0657,0x0000, -0x0658,0x0000, 0x0659,0x0000, 0x065A,0x0000, 0x065B,0x0000, -0x065C,0x0000, 0x065D,0x0000, 0x065E,0x0000, 0x065F,0x0000, -0x0660,0x0000, 0x0661,0x0000, 0x0662,0x0000, 0x0663,0x0000, -0x0664,0x0000, 0x0665,0x0000, 0x0666,0x0000, 0x0667,0x0000, -0x0668,0x0000, 0x0669,0x0000, 0x066A,0x0000, 0x066B,0x0000, -0x066C,0x0000, 0x066D,0x0000, 0x066E,0x0000, 0x066F,0x0000, -0x0670,0x0000, 0x0671,0x0000, 0x0672,0x0000, 0x0673,0x0000, -0x0674,0x0000, 0x0675,0x0000, 0x0676,0x0000, 0x0677,0x0000, -0x0678,0x0000, 0x0679,0x0000, 0x067A,0x0000, 0x067B,0x0000, -0x067C,0x0000, 0x067D,0x0000, 0x067E,0x0000, 0x067F,0x0000, -0x0680,0x0000, 0x0681,0x0000, 0x0682,0x0000, 0x0683,0x0000, -0x0684,0x0000, 0x0685,0x0000, 0x0686,0x0000, 0x0687,0x0000, -0x0688,0x0000, 0x0689,0x0000, 0x068A,0x0000, 0x068B,0x0000, -0x068C,0x0000, 0x068D,0x0000, 0x068E,0x0000, 0x068F,0x0000, -0x0690,0x0000, 0x0691,0x0000, 0x0692,0x0000, 0x0693,0x0000, -0x0694,0x0000, 0x0695,0x0000, 0x0696,0x0000, 0x0697,0x0000, -0x0698,0x0000, 0x0699,0x0000, 0x069A,0x0000, 0x069B,0x0000, -0x069C,0x0000, 0x069D,0x0000, 0x069E,0x0000, 0x069F,0x0000, -0x06A0,0x0000, 0x06A1,0x0000, 0x06A2,0x0000, 0x06A3,0x0000, -0x06A4,0x0000, 0x06A5,0x0000, 0x06A6,0x0000, 0x06A7,0x0000, -0x06A8,0x0000, 0x06A9,0x0000, 0x06AA,0x0000, 0x06AB,0x0000, -0x06AC,0x0000, 0x06AD,0x0000, 0x06AE,0x0000, 0x06AF,0x0000, -0x06B0,0x0000, 0x06B1,0x0000, 0x06B2,0x0000, 0x06B3,0x0000, -0x06B4,0x0000, 0x06B5,0x0000, 0x06B6,0x0000, 0x06B7,0x0000, -0x06B8,0x0000, 0x06B9,0x0000, 0x06BA,0x0000, 0x06BB,0x0000, -0x06BC,0x0000, 0x06BD,0x0000, 0x06BE,0x0000, 0x06BF,0x0000, -0x06C0,0x0000, 0x06C1,0x0000, 0x06C2,0x0000, 0x06C3,0x0000, -0x06C4,0x0000, 0x06C5,0x0000, 0x06C6,0x0000, 0x06C7,0x0000, -0x06C8,0x0000, 0x06C9,0x0000, 0x06CA,0x0000, 0x06CB,0x0000, -0x06CC,0x0000, 0x06CD,0x0000, 0x06CE,0x0000, 0x06CF,0x0000, -0x06D0,0x0000, 0x06D1,0x0000, 0x06D2,0x0000, 0x06D3,0x0000, -0x06D4,0x0000, 0x06D5,0x0000, 0x06D6,0x0000, 0x06D7,0x0000, -0x06D8,0x0000, 0x06D9,0x0000, 0x06DA,0x0000, 0x06DB,0x0000, -0x06DC,0x0000, 0x06DD,0x0000, 0x06DE,0x0000, 0x06DF,0x0000, -0x06E0,0x0000, 0x06E1,0x0000, 0x06E2,0x0000, 0x06E3,0x0000, -0x06E4,0x0000, 0x06E5,0x0000, 0x06E6,0x0000, 0x06E7,0x0000, -0x06E8,0x0000, 0x06E9,0x0000, 0x06EA,0x0000, 0x06EB,0x0000, -0x06EC,0x0000, 0x06ED,0x0000, 0x06EE,0x0000, 0x06EF,0x0000, -0x06F0,0x0000, 0x06F1,0x0000, 0x06F2,0x0000, 0x06F3,0x0000, -0x06F4,0x0000, 0x06F5,0x0000, 0x06F6,0x0000, 0x06F7,0x0000, -0x06F8,0x0000, 0x06F9,0x0000, 0x06FA,0x0000, 0x06FB,0x0000 -}; - -uint16 page026data[]= { /* 2600 (3 weights per char) */ -0x06FC,0x0000,0x0000, 0x06FD,0x0000,0x0000, 0x06FE,0x0000,0x0000, -0x06FF,0x0000,0x0000, 0x0700,0x0000,0x0000, 0x0701,0x0000,0x0000, -0x0702,0x0000,0x0000, 0x0703,0x0000,0x0000, 0x0704,0x0000,0x0000, -0x0705,0x0000,0x0000, 0x0706,0x0000,0x0000, 0x0707,0x0000,0x0000, -0x0708,0x0000,0x0000, 0x0709,0x0000,0x0000, 0x070A,0x0000,0x0000, -0x070B,0x0000,0x0000, 0x070C,0x0000,0x0000, 0x070D,0x0000,0x0000, -0x070E,0x0000,0x0000, 0x070F,0x0000,0x0000, 0x0710,0x0000,0x0000, -0x0711,0x0000,0x0000, 0x0712,0x0000,0x0000, 0x0713,0x0000,0x0000, -0xFBC0,0xA618,0x0000, 0x0714,0x0000,0x0000, 0x0715,0x0000,0x0000, -0x0716,0x0000,0x0000, 0x0717,0x0000,0x0000, 0x0718,0x0000,0x0000, -0x0719,0x0000,0x0000, 0x071A,0x0000,0x0000, 0x071B,0x0000,0x0000, -0x071C,0x0000,0x0000, 0x071D,0x0000,0x0000, 0x071E,0x0000,0x0000, -0x071F,0x0000,0x0000, 0x0720,0x0000,0x0000, 0x0721,0x0000,0x0000, -0x0722,0x0000,0x0000, 0x0723,0x0000,0x0000, 0x0724,0x0000,0x0000, -0x0725,0x0000,0x0000, 0x0726,0x0000,0x0000, 0x0727,0x0000,0x0000, -0x0728,0x0000,0x0000, 0x0729,0x0000,0x0000, 0x072A,0x0000,0x0000, -0x0B2F,0x0000,0x0000, 0x0B30,0x0000,0x0000, 0x0B31,0x0000,0x0000, -0x0B32,0x0000,0x0000, 0x0B33,0x0000,0x0000, 0x0B34,0x0000,0x0000, -0x0B35,0x0000,0x0000, 0x0B36,0x0000,0x0000, 0x072B,0x0000,0x0000, -0x072C,0x0000,0x0000, 0x072D,0x0000,0x0000, 0x072E,0x0000,0x0000, -0x072F,0x0000,0x0000, 0x0730,0x0000,0x0000, 0x0731,0x0000,0x0000, -0x0732,0x0000,0x0000, 0x0733,0x0000,0x0000, 0x0734,0x0000,0x0000, -0x0735,0x0000,0x0000, 0x0736,0x0000,0x0000, 0x0737,0x0000,0x0000, -0x0738,0x0000,0x0000, 0x0739,0x0000,0x0000, 0x073A,0x0000,0x0000, -0x073B,0x0000,0x0000, 0x073C,0x0000,0x0000, 0x073D,0x0000,0x0000, -0x073E,0x0000,0x0000, 0x073F,0x0000,0x0000, 0x0740,0x0000,0x0000, -0x0741,0x0000,0x0000, 0x0742,0x0000,0x0000, 0x0743,0x0000,0x0000, -0x0744,0x0000,0x0000, 0x0745,0x0000,0x0000, 0x0746,0x0000,0x0000, -0x0747,0x0000,0x0000, 0x0748,0x0000,0x0000, 0x0749,0x0000,0x0000, -0x074A,0x0000,0x0000, 0x074B,0x0000,0x0000, 0x074C,0x0000,0x0000, -0x074D,0x0000,0x0000, 0x074E,0x0000,0x0000, 0x074F,0x0000,0x0000, -0x0750,0x0000,0x0000, 0x0751,0x0000,0x0000, 0x0752,0x0000,0x0000, -0x0753,0x0000,0x0000, 0x0754,0x0000,0x0000, 0x0755,0x0000,0x0000, -0x0756,0x0000,0x0000, 0x0757,0x0000,0x0000, 0x0758,0x0000,0x0000, -0x0759,0x0000,0x0000, 0x075A,0x0000,0x0000, 0x075B,0x0000,0x0000, -0x075C,0x0000,0x0000, 0x075D,0x0000,0x0000, 0x075E,0x0000,0x0000, -0x075F,0x0000,0x0000, 0x0D2B,0x0000,0x0000, 0x0D2C,0x0000,0x0000, -0x0D2D,0x0000,0x0000, 0x0760,0x0000,0x0000, 0x0761,0x0000,0x0000, -0x0762,0x0000,0x0000, 0x0763,0x0000,0x0000, 0x0764,0x0000,0x0000, -0x0765,0x0000,0x0000, 0x0766,0x0000,0x0000, 0x0767,0x0000,0x0000, -0x0768,0x0000,0x0000, 0x0769,0x0000,0x0000, 0x076A,0x0000,0x0000, -0x076B,0x0000,0x0000, 0x076C,0x0000,0x0000, 0x076D,0x0000,0x0000, -0xFBC0,0xA67E,0x0000, 0xFBC0,0xA67F,0x0000, 0x076E,0x0000,0x0000, -0x076F,0x0000,0x0000, 0x0770,0x0000,0x0000, 0x0771,0x0000,0x0000, -0x0772,0x0000,0x0000, 0x0773,0x0000,0x0000, 0x0774,0x0000,0x0000, -0x0775,0x0000,0x0000, 0x0776,0x0000,0x0000, 0x0777,0x0000,0x0000, -0x0B29,0x0000,0x0000, 0x0B2A,0x0000,0x0000, 0x0B2B,0x0000,0x0000, -0x0B2C,0x0000,0x0000, 0x0B2D,0x0000,0x0000, 0x0B2E,0x0000,0x0000, -0x0778,0x0000,0x0000, 0x0779,0x0000,0x0000, 0xFBC0,0xA692,0x0000, -0xFBC0,0xA693,0x0000, 0xFBC0,0xA694,0x0000, 0xFBC0,0xA695,0x0000, -0xFBC0,0xA696,0x0000, 0xFBC0,0xA697,0x0000, 0xFBC0,0xA698,0x0000, -0xFBC0,0xA699,0x0000, 0xFBC0,0xA69A,0x0000, 0xFBC0,0xA69B,0x0000, -0xFBC0,0xA69C,0x0000, 0xFBC0,0xA69D,0x0000, 0xFBC0,0xA69E,0x0000, -0xFBC0,0xA69F,0x0000, 0x077A,0x0000,0x0000, 0x077B,0x0000,0x0000, -0xFBC0,0xA6A2,0x0000, 0xFBC0,0xA6A3,0x0000, 0xFBC0,0xA6A4,0x0000, -0xFBC0,0xA6A5,0x0000, 0xFBC0,0xA6A6,0x0000, 0xFBC0,0xA6A7,0x0000, -0xFBC0,0xA6A8,0x0000, 0xFBC0,0xA6A9,0x0000, 0xFBC0,0xA6AA,0x0000, -0xFBC0,0xA6AB,0x0000, 0xFBC0,0xA6AC,0x0000, 0xFBC0,0xA6AD,0x0000, -0xFBC0,0xA6AE,0x0000, 0xFBC0,0xA6AF,0x0000, 0xFBC0,0xA6B0,0x0000, -0xFBC0,0xA6B1,0x0000, 0xFBC0,0xA6B2,0x0000, 0xFBC0,0xA6B3,0x0000, -0xFBC0,0xA6B4,0x0000, 0xFBC0,0xA6B5,0x0000, 0xFBC0,0xA6B6,0x0000, -0xFBC0,0xA6B7,0x0000, 0xFBC0,0xA6B8,0x0000, 0xFBC0,0xA6B9,0x0000, -0xFBC0,0xA6BA,0x0000, 0xFBC0,0xA6BB,0x0000, 0xFBC0,0xA6BC,0x0000, -0xFBC0,0xA6BD,0x0000, 0xFBC0,0xA6BE,0x0000, 0xFBC0,0xA6BF,0x0000, -0xFBC0,0xA6C0,0x0000, 0xFBC0,0xA6C1,0x0000, 0xFBC0,0xA6C2,0x0000, -0xFBC0,0xA6C3,0x0000, 0xFBC0,0xA6C4,0x0000, 0xFBC0,0xA6C5,0x0000, -0xFBC0,0xA6C6,0x0000, 0xFBC0,0xA6C7,0x0000, 0xFBC0,0xA6C8,0x0000, -0xFBC0,0xA6C9,0x0000, 0xFBC0,0xA6CA,0x0000, 0xFBC0,0xA6CB,0x0000, -0xFBC0,0xA6CC,0x0000, 0xFBC0,0xA6CD,0x0000, 0xFBC0,0xA6CE,0x0000, -0xFBC0,0xA6CF,0x0000, 0xFBC0,0xA6D0,0x0000, 0xFBC0,0xA6D1,0x0000, -0xFBC0,0xA6D2,0x0000, 0xFBC0,0xA6D3,0x0000, 0xFBC0,0xA6D4,0x0000, -0xFBC0,0xA6D5,0x0000, 0xFBC0,0xA6D6,0x0000, 0xFBC0,0xA6D7,0x0000, -0xFBC0,0xA6D8,0x0000, 0xFBC0,0xA6D9,0x0000, 0xFBC0,0xA6DA,0x0000, -0xFBC0,0xA6DB,0x0000, 0xFBC0,0xA6DC,0x0000, 0xFBC0,0xA6DD,0x0000, -0xFBC0,0xA6DE,0x0000, 0xFBC0,0xA6DF,0x0000, 0xFBC0,0xA6E0,0x0000, -0xFBC0,0xA6E1,0x0000, 0xFBC0,0xA6E2,0x0000, 0xFBC0,0xA6E3,0x0000, -0xFBC0,0xA6E4,0x0000, 0xFBC0,0xA6E5,0x0000, 0xFBC0,0xA6E6,0x0000, -0xFBC0,0xA6E7,0x0000, 0xFBC0,0xA6E8,0x0000, 0xFBC0,0xA6E9,0x0000, -0xFBC0,0xA6EA,0x0000, 0xFBC0,0xA6EB,0x0000, 0xFBC0,0xA6EC,0x0000, -0xFBC0,0xA6ED,0x0000, 0xFBC0,0xA6EE,0x0000, 0xFBC0,0xA6EF,0x0000, -0xFBC0,0xA6F0,0x0000, 0xFBC0,0xA6F1,0x0000, 0xFBC0,0xA6F2,0x0000, -0xFBC0,0xA6F3,0x0000, 0xFBC0,0xA6F4,0x0000, 0xFBC0,0xA6F5,0x0000, -0xFBC0,0xA6F6,0x0000, 0xFBC0,0xA6F7,0x0000, 0xFBC0,0xA6F8,0x0000, -0xFBC0,0xA6F9,0x0000, 0xFBC0,0xA6FA,0x0000, 0xFBC0,0xA6FB,0x0000, -0xFBC0,0xA6FC,0x0000, 0xFBC0,0xA6FD,0x0000, 0xFBC0,0xA6FE,0x0000, -0xFBC0,0xA6FF,0x0000 }; - -uint16 page027data[]= { /* 2700 (3 weights per char) */ -0xFBC0,0xA700,0x0000, 0x077C,0x0000,0x0000, 0x077D,0x0000,0x0000, -0x077E,0x0000,0x0000, 0x077F,0x0000,0x0000, 0xFBC0,0xA705,0x0000, -0x0780,0x0000,0x0000, 0x0781,0x0000,0x0000, 0x0782,0x0000,0x0000, -0x0783,0x0000,0x0000, 0xFBC0,0xA70A,0x0000, 0xFBC0,0xA70B,0x0000, -0x0784,0x0000,0x0000, 0x0785,0x0000,0x0000, 0x0786,0x0000,0x0000, -0x0787,0x0000,0x0000, 0x0788,0x0000,0x0000, 0x0789,0x0000,0x0000, -0x078A,0x0000,0x0000, 0x078B,0x0000,0x0000, 0x078C,0x0000,0x0000, -0x078D,0x0000,0x0000, 0x078E,0x0000,0x0000, 0x078F,0x0000,0x0000, -0x0790,0x0000,0x0000, 0x0791,0x0000,0x0000, 0x0792,0x0000,0x0000, -0x0793,0x0000,0x0000, 0x0794,0x0000,0x0000, 0x0795,0x0000,0x0000, -0x0796,0x0000,0x0000, 0x0797,0x0000,0x0000, 0x0798,0x0000,0x0000, -0x0799,0x0000,0x0000, 0x079A,0x0000,0x0000, 0x079B,0x0000,0x0000, -0x079C,0x0000,0x0000, 0x079D,0x0000,0x0000, 0x079E,0x0000,0x0000, -0x079F,0x0000,0x0000, 0xFBC0,0xA728,0x0000, 0x07A0,0x0000,0x0000, -0x07A1,0x0000,0x0000, 0x07A2,0x0000,0x0000, 0x07A3,0x0000,0x0000, -0x07A4,0x0000,0x0000, 0x07A5,0x0000,0x0000, 0x07A6,0x0000,0x0000, -0x07A7,0x0000,0x0000, 0x07A8,0x0000,0x0000, 0x07A9,0x0000,0x0000, -0x07AA,0x0000,0x0000, 0x07AB,0x0000,0x0000, 0x07AC,0x0000,0x0000, -0x07AD,0x0000,0x0000, 0x07AE,0x0000,0x0000, 0x07AF,0x0000,0x0000, -0x07B0,0x0000,0x0000, 0x07B1,0x0000,0x0000, 0x07B2,0x0000,0x0000, -0x07B3,0x0000,0x0000, 0x07B4,0x0000,0x0000, 0x07B5,0x0000,0x0000, -0x07B6,0x0000,0x0000, 0x07B7,0x0000,0x0000, 0x07B8,0x0000,0x0000, -0x07B9,0x0000,0x0000, 0x07BA,0x0000,0x0000, 0x07BB,0x0000,0x0000, -0x07BC,0x0000,0x0000, 0x07BD,0x0000,0x0000, 0x07BE,0x0000,0x0000, -0x07BF,0x0000,0x0000, 0x07C0,0x0000,0x0000, 0x07C1,0x0000,0x0000, -0x07C2,0x0000,0x0000, 0xFBC0,0xA74C,0x0000, 0x07C3,0x0000,0x0000, -0xFBC0,0xA74E,0x0000, 0x07C4,0x0000,0x0000, 0x07C5,0x0000,0x0000, -0x07C6,0x0000,0x0000, 0x07C7,0x0000,0x0000, 0xFBC0,0xA753,0x0000, -0xFBC0,0xA754,0x0000, 0xFBC0,0xA755,0x0000, 0x07C8,0x0000,0x0000, -0xFBC0,0xA757,0x0000, 0x07C9,0x0000,0x0000, 0x07CA,0x0000,0x0000, -0x07CB,0x0000,0x0000, 0x07CC,0x0000,0x0000, 0x07CD,0x0000,0x0000, -0x07CE,0x0000,0x0000, 0x07CF,0x0000,0x0000, 0xFBC0,0xA75F,0x0000, -0xFBC0,0xA760,0x0000, 0x07D0,0x0000,0x0000, 0x07D1,0x0000,0x0000, -0x07D2,0x0000,0x0000, 0x07D3,0x0000,0x0000, 0x07D4,0x0000,0x0000, -0x07D5,0x0000,0x0000, 0x07D6,0x0000,0x0000, 0x07D7,0x0000,0x0000, -0x07D8,0x0000,0x0000, 0x07D9,0x0000,0x0000, 0x07DA,0x0000,0x0000, -0x07DB,0x0000,0x0000, 0x07DC,0x0000,0x0000, 0x07DD,0x0000,0x0000, -0x07DE,0x0000,0x0000, 0x07DF,0x0000,0x0000, 0x07E0,0x0000,0x0000, -0x07E1,0x0000,0x0000, 0x07E2,0x0000,0x0000, 0x07E3,0x0000,0x0000, -0x07E4,0x0000,0x0000, 0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, -0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, -0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, -0x0E32,0x0000,0x0000, 0x0E2A,0x0E29,0x0000, 0x0E2A,0x0000,0x0000, -0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, -0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, -0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, 0x0E2A,0x0E29,0x0000, -0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, -0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, -0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, -0x0E2A,0x0E29,0x0000, 0x07E5,0x0000,0x0000, 0xFBC0,0xA795,0x0000, -0xFBC0,0xA796,0x0000, 0xFBC0,0xA797,0x0000, 0x07E6,0x0000,0x0000, -0x07E7,0x0000,0x0000, 0x07E8,0x0000,0x0000, 0x07E9,0x0000,0x0000, -0x07EA,0x0000,0x0000, 0x07EB,0x0000,0x0000, 0x07EC,0x0000,0x0000, -0x07ED,0x0000,0x0000, 0x07EE,0x0000,0x0000, 0x07EF,0x0000,0x0000, -0x07F0,0x0000,0x0000, 0x07F1,0x0000,0x0000, 0x07F2,0x0000,0x0000, -0x07F3,0x0000,0x0000, 0x07F4,0x0000,0x0000, 0x07F5,0x0000,0x0000, -0x07F6,0x0000,0x0000, 0x07F7,0x0000,0x0000, 0x07F8,0x0000,0x0000, -0x07F9,0x0000,0x0000, 0x07FA,0x0000,0x0000, 0x07FB,0x0000,0x0000, -0x07FC,0x0000,0x0000, 0x07FD,0x0000,0x0000, 0xFBC0,0xA7B0,0x0000, -0x07FE,0x0000,0x0000, 0x07FF,0x0000,0x0000, 0x0800,0x0000,0x0000, -0x0801,0x0000,0x0000, 0x0802,0x0000,0x0000, 0x0803,0x0000,0x0000, -0x0804,0x0000,0x0000, 0x0805,0x0000,0x0000, 0x0806,0x0000,0x0000, -0x0807,0x0000,0x0000, 0x0808,0x0000,0x0000, 0x0809,0x0000,0x0000, -0x080A,0x0000,0x0000, 0x080B,0x0000,0x0000, 0xFBC0,0xA7BF,0x0000, -0xFBC0,0xA7C0,0x0000, 0xFBC0,0xA7C1,0x0000, 0xFBC0,0xA7C2,0x0000, -0xFBC0,0xA7C3,0x0000, 0xFBC0,0xA7C4,0x0000, 0xFBC0,0xA7C5,0x0000, -0xFBC0,0xA7C6,0x0000, 0xFBC0,0xA7C7,0x0000, 0xFBC0,0xA7C8,0x0000, -0xFBC0,0xA7C9,0x0000, 0xFBC0,0xA7CA,0x0000, 0xFBC0,0xA7CB,0x0000, -0xFBC0,0xA7CC,0x0000, 0xFBC0,0xA7CD,0x0000, 0xFBC0,0xA7CE,0x0000, -0xFBC0,0xA7CF,0x0000, 0x080C,0x0000,0x0000, 0x080D,0x0000,0x0000, -0x080E,0x0000,0x0000, 0x080F,0x0000,0x0000, 0x0810,0x0000,0x0000, -0x0811,0x0000,0x0000, 0x0812,0x0000,0x0000, 0x0813,0x0000,0x0000, -0x0814,0x0000,0x0000, 0x0815,0x0000,0x0000, 0x0816,0x0000,0x0000, -0x0817,0x0000,0x0000, 0x0818,0x0000,0x0000, 0x0819,0x0000,0x0000, -0x081A,0x0000,0x0000, 0x081B,0x0000,0x0000, 0x081C,0x0000,0x0000, -0x081D,0x0000,0x0000, 0x081E,0x0000,0x0000, 0x081F,0x0000,0x0000, -0x0820,0x0000,0x0000, 0x0821,0x0000,0x0000, 0x0822,0x0000,0x0000, -0x0823,0x0000,0x0000, 0x0824,0x0000,0x0000, 0x0825,0x0000,0x0000, -0x0826,0x0000,0x0000, 0x0827,0x0000,0x0000, 0xFBC0,0xA7EC,0x0000, -0xFBC0,0xA7ED,0x0000, 0xFBC0,0xA7EE,0x0000, 0xFBC0,0xA7EF,0x0000, -0x0828,0x0000,0x0000, 0x0829,0x0000,0x0000, 0x082A,0x0000,0x0000, -0x082B,0x0000,0x0000, 0x082C,0x0000,0x0000, 0x082D,0x0000,0x0000, -0x082E,0x0000,0x0000, 0x082F,0x0000,0x0000, 0x0830,0x0000,0x0000, -0x0831,0x0000,0x0000, 0x0832,0x0000,0x0000, 0x0833,0x0000,0x0000, -0x0834,0x0000,0x0000, 0x0835,0x0000,0x0000, 0x0836,0x0000,0x0000, -0x0837,0x0000,0x0000 }; - -uint16 page028data[]= { /* 2800 (2 weights per char) */ -0x0A29,0x0000, 0x0A2A,0x0000, 0x0A2B,0x0000, 0x0A2C,0x0000, -0x0A2D,0x0000, 0x0A2E,0x0000, 0x0A2F,0x0000, 0x0A30,0x0000, -0x0A31,0x0000, 0x0A32,0x0000, 0x0A33,0x0000, 0x0A34,0x0000, -0x0A35,0x0000, 0x0A36,0x0000, 0x0A37,0x0000, 0x0A38,0x0000, -0x0A39,0x0000, 0x0A3A,0x0000, 0x0A3B,0x0000, 0x0A3C,0x0000, -0x0A3D,0x0000, 0x0A3E,0x0000, 0x0A3F,0x0000, 0x0A40,0x0000, -0x0A41,0x0000, 0x0A42,0x0000, 0x0A43,0x0000, 0x0A44,0x0000, -0x0A45,0x0000, 0x0A46,0x0000, 0x0A47,0x0000, 0x0A48,0x0000, -0x0A49,0x0000, 0x0A4A,0x0000, 0x0A4B,0x0000, 0x0A4C,0x0000, -0x0A4D,0x0000, 0x0A4E,0x0000, 0x0A4F,0x0000, 0x0A50,0x0000, -0x0A51,0x0000, 0x0A52,0x0000, 0x0A53,0x0000, 0x0A54,0x0000, -0x0A55,0x0000, 0x0A56,0x0000, 0x0A57,0x0000, 0x0A58,0x0000, -0x0A59,0x0000, 0x0A5A,0x0000, 0x0A5B,0x0000, 0x0A5C,0x0000, -0x0A5D,0x0000, 0x0A5E,0x0000, 0x0A5F,0x0000, 0x0A60,0x0000, -0x0A61,0x0000, 0x0A62,0x0000, 0x0A63,0x0000, 0x0A64,0x0000, -0x0A65,0x0000, 0x0A66,0x0000, 0x0A67,0x0000, 0x0A68,0x0000, -0x0A69,0x0000, 0x0A6A,0x0000, 0x0A6B,0x0000, 0x0A6C,0x0000, -0x0A6D,0x0000, 0x0A6E,0x0000, 0x0A6F,0x0000, 0x0A70,0x0000, -0x0A71,0x0000, 0x0A72,0x0000, 0x0A73,0x0000, 0x0A74,0x0000, -0x0A75,0x0000, 0x0A76,0x0000, 0x0A77,0x0000, 0x0A78,0x0000, -0x0A79,0x0000, 0x0A7A,0x0000, 0x0A7B,0x0000, 0x0A7C,0x0000, -0x0A7D,0x0000, 0x0A7E,0x0000, 0x0A7F,0x0000, 0x0A80,0x0000, -0x0A81,0x0000, 0x0A82,0x0000, 0x0A83,0x0000, 0x0A84,0x0000, -0x0A85,0x0000, 0x0A86,0x0000, 0x0A87,0x0000, 0x0A88,0x0000, -0x0A89,0x0000, 0x0A8A,0x0000, 0x0A8B,0x0000, 0x0A8C,0x0000, -0x0A8D,0x0000, 0x0A8E,0x0000, 0x0A8F,0x0000, 0x0A90,0x0000, -0x0A91,0x0000, 0x0A92,0x0000, 0x0A93,0x0000, 0x0A94,0x0000, -0x0A95,0x0000, 0x0A96,0x0000, 0x0A97,0x0000, 0x0A98,0x0000, -0x0A99,0x0000, 0x0A9A,0x0000, 0x0A9B,0x0000, 0x0A9C,0x0000, -0x0A9D,0x0000, 0x0A9E,0x0000, 0x0A9F,0x0000, 0x0AA0,0x0000, -0x0AA1,0x0000, 0x0AA2,0x0000, 0x0AA3,0x0000, 0x0AA4,0x0000, -0x0AA5,0x0000, 0x0AA6,0x0000, 0x0AA7,0x0000, 0x0AA8,0x0000, -0x0AA9,0x0000, 0x0AAA,0x0000, 0x0AAB,0x0000, 0x0AAC,0x0000, -0x0AAD,0x0000, 0x0AAE,0x0000, 0x0AAF,0x0000, 0x0AB0,0x0000, -0x0AB1,0x0000, 0x0AB2,0x0000, 0x0AB3,0x0000, 0x0AB4,0x0000, -0x0AB5,0x0000, 0x0AB6,0x0000, 0x0AB7,0x0000, 0x0AB8,0x0000, -0x0AB9,0x0000, 0x0ABA,0x0000, 0x0ABB,0x0000, 0x0ABC,0x0000, -0x0ABD,0x0000, 0x0ABE,0x0000, 0x0ABF,0x0000, 0x0AC0,0x0000, -0x0AC1,0x0000, 0x0AC2,0x0000, 0x0AC3,0x0000, 0x0AC4,0x0000, -0x0AC5,0x0000, 0x0AC6,0x0000, 0x0AC7,0x0000, 0x0AC8,0x0000, -0x0AC9,0x0000, 0x0ACA,0x0000, 0x0ACB,0x0000, 0x0ACC,0x0000, -0x0ACD,0x0000, 0x0ACE,0x0000, 0x0ACF,0x0000, 0x0AD0,0x0000, -0x0AD1,0x0000, 0x0AD2,0x0000, 0x0AD3,0x0000, 0x0AD4,0x0000, -0x0AD5,0x0000, 0x0AD6,0x0000, 0x0AD7,0x0000, 0x0AD8,0x0000, -0x0AD9,0x0000, 0x0ADA,0x0000, 0x0ADB,0x0000, 0x0ADC,0x0000, -0x0ADD,0x0000, 0x0ADE,0x0000, 0x0ADF,0x0000, 0x0AE0,0x0000, -0x0AE1,0x0000, 0x0AE2,0x0000, 0x0AE3,0x0000, 0x0AE4,0x0000, -0x0AE5,0x0000, 0x0AE6,0x0000, 0x0AE7,0x0000, 0x0AE8,0x0000, -0x0AE9,0x0000, 0x0AEA,0x0000, 0x0AEB,0x0000, 0x0AEC,0x0000, -0x0AED,0x0000, 0x0AEE,0x0000, 0x0AEF,0x0000, 0x0AF0,0x0000, -0x0AF1,0x0000, 0x0AF2,0x0000, 0x0AF3,0x0000, 0x0AF4,0x0000, -0x0AF5,0x0000, 0x0AF6,0x0000, 0x0AF7,0x0000, 0x0AF8,0x0000, -0x0AF9,0x0000, 0x0AFA,0x0000, 0x0AFB,0x0000, 0x0AFC,0x0000, -0x0AFD,0x0000, 0x0AFE,0x0000, 0x0AFF,0x0000, 0x0B00,0x0000, -0x0B01,0x0000, 0x0B02,0x0000, 0x0B03,0x0000, 0x0B04,0x0000, -0x0B05,0x0000, 0x0B06,0x0000, 0x0B07,0x0000, 0x0B08,0x0000, -0x0B09,0x0000, 0x0B0A,0x0000, 0x0B0B,0x0000, 0x0B0C,0x0000, -0x0B0D,0x0000, 0x0B0E,0x0000, 0x0B0F,0x0000, 0x0B10,0x0000, -0x0B11,0x0000, 0x0B12,0x0000, 0x0B13,0x0000, 0x0B14,0x0000, -0x0B15,0x0000, 0x0B16,0x0000, 0x0B17,0x0000, 0x0B18,0x0000, -0x0B19,0x0000, 0x0B1A,0x0000, 0x0B1B,0x0000, 0x0B1C,0x0000, -0x0B1D,0x0000, 0x0B1E,0x0000, 0x0B1F,0x0000, 0x0B20,0x0000, -0x0B21,0x0000, 0x0B22,0x0000, 0x0B23,0x0000, 0x0B24,0x0000, -0x0B25,0x0000, 0x0B26,0x0000, 0x0B27,0x0000, 0x0B28,0x0000 -}; - -uint16 page029data[]= { /* 2900 (2 weights per char) */ -0x0838,0x0000, 0x0839,0x0000, 0x083A,0x0000, 0x083B,0x0000, -0x083C,0x0000, 0x083D,0x0000, 0x083E,0x0000, 0x083F,0x0000, -0x0840,0x0000, 0x0841,0x0000, 0x0842,0x0000, 0x0843,0x0000, -0x0844,0x0000, 0x0845,0x0000, 0x0846,0x0000, 0x0847,0x0000, -0x0848,0x0000, 0x0849,0x0000, 0x084A,0x0000, 0x084B,0x0000, -0x084C,0x0000, 0x084D,0x0000, 0x084E,0x0000, 0x084F,0x0000, -0x0850,0x0000, 0x0851,0x0000, 0x0852,0x0000, 0x0853,0x0000, -0x0854,0x0000, 0x0855,0x0000, 0x0856,0x0000, 0x0857,0x0000, -0x0858,0x0000, 0x0859,0x0000, 0x085A,0x0000, 0x085B,0x0000, -0x085C,0x0000, 0x085D,0x0000, 0x085E,0x0000, 0x085F,0x0000, -0x0860,0x0000, 0x0861,0x0000, 0x0862,0x0000, 0x0863,0x0000, -0x0864,0x0000, 0x0865,0x0000, 0x0866,0x0000, 0x0867,0x0000, -0x0868,0x0000, 0x0869,0x0000, 0x086A,0x0000, 0x086B,0x0000, -0x086C,0x0000, 0x086D,0x0000, 0x086E,0x0000, 0x086F,0x0000, -0x0870,0x0000, 0x0871,0x0000, 0x0872,0x0000, 0x0873,0x0000, -0x0874,0x0000, 0x0875,0x0000, 0x0876,0x0000, 0x0877,0x0000, -0x0878,0x0000, 0x0879,0x0000, 0x087A,0x0000, 0x087B,0x0000, -0x087C,0x0000, 0x087D,0x0000, 0x087E,0x0000, 0x087F,0x0000, -0x0880,0x0000, 0x0881,0x0000, 0x0882,0x0000, 0x0883,0x0000, -0x0884,0x0000, 0x0885,0x0000, 0x0886,0x0000, 0x0887,0x0000, -0x0888,0x0000, 0x0889,0x0000, 0x088A,0x0000, 0x088B,0x0000, -0x088C,0x0000, 0x088D,0x0000, 0x088E,0x0000, 0x088F,0x0000, -0x0890,0x0000, 0x0891,0x0000, 0x0892,0x0000, 0x0893,0x0000, -0x0894,0x0000, 0x0895,0x0000, 0x0896,0x0000, 0x0897,0x0000, -0x0898,0x0000, 0x0899,0x0000, 0x089A,0x0000, 0x089B,0x0000, -0x089C,0x0000, 0x089D,0x0000, 0x089E,0x0000, 0x089F,0x0000, -0x08A0,0x0000, 0x08A1,0x0000, 0x08A2,0x0000, 0x08A3,0x0000, -0x08A4,0x0000, 0x08A5,0x0000, 0x08A6,0x0000, 0x08A7,0x0000, -0x08A8,0x0000, 0x08A9,0x0000, 0x08AA,0x0000, 0x08AB,0x0000, -0x08AC,0x0000, 0x08AD,0x0000, 0x08AE,0x0000, 0x08AF,0x0000, -0x08B0,0x0000, 0x08B1,0x0000, 0x08B2,0x0000, 0x08B3,0x0000, -0x08B4,0x0000, 0x08B5,0x0000, 0x08B6,0x0000, 0x08B7,0x0000, -0x08B8,0x0000, 0x08B9,0x0000, 0x08BA,0x0000, 0x0298,0x0000, -0x0299,0x0000, 0x029A,0x0000, 0x029B,0x0000, 0x029C,0x0000, -0x029D,0x0000, 0x029E,0x0000, 0x029F,0x0000, 0x02A0,0x0000, -0x02A1,0x0000, 0x02A2,0x0000, 0x02A3,0x0000, 0x02A4,0x0000, -0x02A5,0x0000, 0x02A6,0x0000, 0x02A7,0x0000, 0x02A8,0x0000, -0x02A9,0x0000, 0x02AA,0x0000, 0x02AB,0x0000, 0x02AC,0x0000, -0x02AD,0x0000, 0x08BB,0x0000, 0x08BC,0x0000, 0x08BD,0x0000, -0x08BE,0x0000, 0x08BF,0x0000, 0x08C0,0x0000, 0x08C1,0x0000, -0x08C2,0x0000, 0x08C3,0x0000, 0x08C4,0x0000, 0x08C5,0x0000, -0x08C6,0x0000, 0x08C7,0x0000, 0x08C8,0x0000, 0x08C9,0x0000, -0x08CA,0x0000, 0x08CB,0x0000, 0x08CC,0x0000, 0x08CD,0x0000, -0x08CE,0x0000, 0x08CF,0x0000, 0x08D0,0x0000, 0x08D1,0x0000, -0x08D2,0x0000, 0x08D3,0x0000, 0x08D4,0x0000, 0x08D5,0x0000, -0x08D6,0x0000, 0x08D7,0x0000, 0x08D8,0x0000, 0x08D9,0x0000, -0x08DA,0x0000, 0x08DB,0x0000, 0x08DC,0x0000, 0x08DD,0x0000, -0x08DE,0x0000, 0x08DF,0x0000, 0x08E0,0x0000, 0x08E1,0x0000, -0x08E2,0x0000, 0x08E3,0x0000, 0x08E4,0x0000, 0x08E5,0x0000, -0x08E6,0x0000, 0x08E7,0x0000, 0x08E8,0x0000, 0x08E9,0x0000, -0x08EA,0x0000, 0x08EB,0x0000, 0x08EC,0x0000, 0x08ED,0x0000, -0x08EE,0x0000, 0x08EF,0x0000, 0x08F0,0x0000, 0x08F1,0x0000, -0x08F2,0x0000, 0x08F3,0x0000, 0x08F4,0x0000, 0x08F5,0x0000, -0x08F6,0x0000, 0x08F7,0x0000, 0x08F8,0x0000, 0x08F9,0x0000, -0x08FA,0x0000, 0x08FB,0x0000, 0x08FC,0x0000, 0x08FD,0x0000, -0x08FE,0x0000, 0x08FF,0x0000, 0x0900,0x0000, 0x0901,0x0000, -0x0902,0x0000, 0x0903,0x0000, 0x0904,0x0000, 0x0905,0x0000, -0x0906,0x0000, 0x0907,0x0000, 0x0908,0x0000, 0x0909,0x0000, -0x090A,0x0000, 0x090B,0x0000, 0x090C,0x0000, 0x090D,0x0000, -0x090E,0x0000, 0x090F,0x0000, 0x0910,0x0000, 0x0911,0x0000, -0x0912,0x0000, 0x0913,0x0000, 0x0914,0x0000, 0x0915,0x0000, -0x0916,0x0000, 0x0917,0x0000, 0x0918,0x0000, 0x0919,0x0000, -0x091A,0x0000, 0x091B,0x0000, 0x091C,0x0000, 0x091D,0x0000, -0x0296,0x0000, 0x0297,0x0000, 0x091E,0x0000, 0x091F,0x0000 -}; - -uint16 page02Adata[]= { /* 2A00 (5 weights per char) */ -0x0920,0x0000,0x0000,0x0000,0x0000, -0x0921,0x0000,0x0000,0x0000,0x0000, -0x0922,0x0000,0x0000,0x0000,0x0000, -0x0923,0x0000,0x0000,0x0000,0x0000, -0x0924,0x0000,0x0000,0x0000,0x0000, -0x0925,0x0000,0x0000,0x0000,0x0000, -0x0926,0x0000,0x0000,0x0000,0x0000, -0x0927,0x0000,0x0000,0x0000,0x0000, -0x0928,0x0000,0x0000,0x0000,0x0000, -0x0929,0x0000,0x0000,0x0000,0x0000, -0x092A,0x0000,0x0000,0x0000,0x0000, -0x092B,0x0000,0x0000,0x0000,0x0000, -0x044B,0x044B,0x044B,0x044B,0x0000, -0x092C,0x0000,0x0000,0x0000,0x0000, -0x092D,0x0000,0x0000,0x0000,0x0000, -0x092E,0x0000,0x0000,0x0000,0x0000, -0x092F,0x0000,0x0000,0x0000,0x0000, -0x0930,0x0000,0x0000,0x0000,0x0000, -0x0931,0x0000,0x0000,0x0000,0x0000, -0x0932,0x0000,0x0000,0x0000,0x0000, -0x0933,0x0000,0x0000,0x0000,0x0000, -0x0934,0x0000,0x0000,0x0000,0x0000, -0x0935,0x0000,0x0000,0x0000,0x0000, -0x0936,0x0000,0x0000,0x0000,0x0000, -0x0937,0x0000,0x0000,0x0000,0x0000, -0x0938,0x0000,0x0000,0x0000,0x0000, -0x0939,0x0000,0x0000,0x0000,0x0000, -0x093A,0x0000,0x0000,0x0000,0x0000, -0x093B,0x0000,0x0000,0x0000,0x0000, -0x093C,0x0000,0x0000,0x0000,0x0000, -0x093D,0x0000,0x0000,0x0000,0x0000, -0x093E,0x0000,0x0000,0x0000,0x0000, -0x093F,0x0000,0x0000,0x0000,0x0000, -0x0940,0x0000,0x0000,0x0000,0x0000, -0x0941,0x0000,0x0000,0x0000,0x0000, -0x0942,0x0000,0x0000,0x0000,0x0000, -0x0943,0x0000,0x0000,0x0000,0x0000, -0x0944,0x0000,0x0000,0x0000,0x0000, -0x0945,0x0000,0x0000,0x0000,0x0000, -0x0946,0x0000,0x0000,0x0000,0x0000, -0x0947,0x0000,0x0000,0x0000,0x0000, -0x0948,0x0000,0x0000,0x0000,0x0000, -0x0949,0x0000,0x0000,0x0000,0x0000, -0x094A,0x0000,0x0000,0x0000,0x0000, -0x094B,0x0000,0x0000,0x0000,0x0000, -0x094C,0x0000,0x0000,0x0000,0x0000, -0x094D,0x0000,0x0000,0x0000,0x0000, -0x094E,0x0000,0x0000,0x0000,0x0000, -0x094F,0x0000,0x0000,0x0000,0x0000, -0x0950,0x0000,0x0000,0x0000,0x0000, -0x0951,0x0000,0x0000,0x0000,0x0000, -0x0952,0x0000,0x0000,0x0000,0x0000, -0x0953,0x0000,0x0000,0x0000,0x0000, -0x0954,0x0000,0x0000,0x0000,0x0000, -0x0955,0x0000,0x0000,0x0000,0x0000, -0x0956,0x0000,0x0000,0x0000,0x0000, -0x0957,0x0000,0x0000,0x0000,0x0000, -0x0958,0x0000,0x0000,0x0000,0x0000, -0x0959,0x0000,0x0000,0x0000,0x0000, -0x095A,0x0000,0x0000,0x0000,0x0000, -0x095B,0x0000,0x0000,0x0000,0x0000, -0x095C,0x0000,0x0000,0x0000,0x0000, -0x095D,0x0000,0x0000,0x0000,0x0000, -0x095E,0x0000,0x0000,0x0000,0x0000, -0x095F,0x0000,0x0000,0x0000,0x0000, -0x0960,0x0000,0x0000,0x0000,0x0000, -0x0961,0x0000,0x0000,0x0000,0x0000, -0x0962,0x0000,0x0000,0x0000,0x0000, -0x0963,0x0000,0x0000,0x0000,0x0000, -0x0964,0x0000,0x0000,0x0000,0x0000, -0x0965,0x0000,0x0000,0x0000,0x0000, -0x0966,0x0000,0x0000,0x0000,0x0000, -0x0967,0x0000,0x0000,0x0000,0x0000, -0x0968,0x0000,0x0000,0x0000,0x0000, -0x0969,0x0000,0x0000,0x0000,0x0000, -0x096A,0x0000,0x0000,0x0000,0x0000, -0x096B,0x0000,0x0000,0x0000,0x0000, -0x096C,0x0000,0x0000,0x0000,0x0000, -0x096D,0x0000,0x0000,0x0000,0x0000, -0x096E,0x0000,0x0000,0x0000,0x0000, -0x096F,0x0000,0x0000,0x0000,0x0000, -0x0970,0x0000,0x0000,0x0000,0x0000, -0x0971,0x0000,0x0000,0x0000,0x0000, -0x0972,0x0000,0x0000,0x0000,0x0000, -0x0973,0x0000,0x0000,0x0000,0x0000, -0x0974,0x0000,0x0000,0x0000,0x0000, -0x0975,0x0000,0x0000,0x0000,0x0000, -0x0976,0x0000,0x0000,0x0000,0x0000, -0x0977,0x0000,0x0000,0x0000,0x0000, -0x0978,0x0000,0x0000,0x0000,0x0000, -0x0979,0x0000,0x0000,0x0000,0x0000, -0x097A,0x0000,0x0000,0x0000,0x0000, -0x097B,0x0000,0x0000,0x0000,0x0000, -0x097C,0x0000,0x0000,0x0000,0x0000, -0x097D,0x0000,0x0000,0x0000,0x0000, -0x097E,0x0000,0x0000,0x0000,0x0000, -0x097F,0x0000,0x0000,0x0000,0x0000, -0x0980,0x0000,0x0000,0x0000,0x0000, -0x0981,0x0000,0x0000,0x0000,0x0000, -0x0982,0x0000,0x0000,0x0000,0x0000, -0x0983,0x0000,0x0000,0x0000,0x0000, -0x0984,0x0000,0x0000,0x0000,0x0000, -0x0985,0x0000,0x0000,0x0000,0x0000, -0x0986,0x0000,0x0000,0x0000,0x0000, -0x0987,0x0000,0x0000,0x0000,0x0000, -0x0988,0x0000,0x0000,0x0000,0x0000, -0x0989,0x0000,0x0000,0x0000,0x0000, -0x098A,0x0000,0x0000,0x0000,0x0000, -0x098B,0x0000,0x0000,0x0000,0x0000, -0x098C,0x0000,0x0000,0x0000,0x0000, -0x098D,0x0000,0x0000,0x0000,0x0000, -0x098E,0x0000,0x0000,0x0000,0x0000, -0x098F,0x0000,0x0000,0x0000,0x0000, -0x0990,0x0000,0x0000,0x0000,0x0000, -0x0991,0x0000,0x0000,0x0000,0x0000, -0x0992,0x0000,0x0000,0x0000,0x0000, -0x023D,0x023D,0x042D,0x0000,0x0000, -0x042D,0x042D,0x0000,0x0000,0x0000, -0x042D,0x042D,0x042D,0x0000,0x0000, -0x0993,0x0000,0x0000,0x0000,0x0000, -0x0994,0x0000,0x0000,0x0000,0x0000, -0x0995,0x0000,0x0000,0x0000,0x0000, -0x0996,0x0000,0x0000,0x0000,0x0000, -0x0997,0x0000,0x0000,0x0000,0x0000, -0x0998,0x0000,0x0000,0x0000,0x0000, -0x0999,0x0000,0x0000,0x0000,0x0000, -0x099A,0x0000,0x0000,0x0000,0x0000, -0x099B,0x0000,0x0000,0x0000,0x0000, -0x099C,0x0000,0x0000,0x0000,0x0000, -0x099D,0x0000,0x0000,0x0000,0x0000, -0x099E,0x0000,0x0000,0x0000,0x0000, -0x099F,0x0000,0x0000,0x0000,0x0000, -0x09A0,0x0000,0x0000,0x0000,0x0000, -0x09A1,0x0000,0x0000,0x0000,0x0000, -0x09A2,0x0000,0x0000,0x0000,0x0000, -0x09A3,0x0000,0x0000,0x0000,0x0000, -0x09A4,0x0000,0x0000,0x0000,0x0000, -0x09A5,0x0000,0x0000,0x0000,0x0000, -0x09A6,0x0000,0x0000,0x0000,0x0000, -0x09A7,0x0000,0x0000,0x0000,0x0000, -0x09A8,0x0000,0x0000,0x0000,0x0000, -0x09A9,0x0000,0x0000,0x0000,0x0000, -0x09AA,0x0000,0x0000,0x0000,0x0000, -0x09AB,0x0000,0x0000,0x0000,0x0000, -0x09AC,0x0000,0x0000,0x0000,0x0000, -0x09AD,0x0000,0x0000,0x0000,0x0000, -0x09AE,0x0000,0x0000,0x0000,0x0000, -0x09AF,0x0000,0x0000,0x0000,0x0000, -0x09B0,0x0000,0x0000,0x0000,0x0000, -0x09B1,0x0000,0x0000,0x0000,0x0000, -0x09B2,0x0000,0x0000,0x0000,0x0000, -0x09B3,0x0000,0x0000,0x0000,0x0000, -0x09B4,0x0000,0x0000,0x0000,0x0000, -0x09B5,0x0000,0x0000,0x0000,0x0000, -0x09B6,0x0000,0x0000,0x0000,0x0000, -0x09B7,0x0000,0x0000,0x0000,0x0000, -0x09B8,0x0000,0x0000,0x0000,0x0000, -0x09B9,0x0000,0x0000,0x0000,0x0000, -0x09BA,0x0000,0x0000,0x0000,0x0000, -0x09BB,0x0000,0x0000,0x0000,0x0000, -0x09BC,0x0000,0x0000,0x0000,0x0000, -0x09BD,0x0000,0x0000,0x0000,0x0000, -0x09BE,0x0000,0x0000,0x0000,0x0000, -0x09BF,0x0000,0x0000,0x0000,0x0000, -0x09C0,0x0000,0x0000,0x0000,0x0000, -0x09C1,0x0000,0x0000,0x0000,0x0000, -0x09C2,0x0000,0x0000,0x0000,0x0000, -0x09C3,0x0000,0x0000,0x0000,0x0000, -0x09C4,0x0000,0x0000,0x0000,0x0000, -0x09C5,0x0000,0x0000,0x0000,0x0000, -0x09C6,0x0000,0x0000,0x0000,0x0000, -0x09C7,0x0000,0x0000,0x0000,0x0000, -0x09C8,0x0000,0x0000,0x0000,0x0000, -0x09C9,0x0000,0x0000,0x0000,0x0000, -0x09CA,0x0000,0x0000,0x0000,0x0000, -0x09CB,0x0000,0x0000,0x0000,0x0000, -0x09CC,0x0000,0x0000,0x0000,0x0000, -0x09CD,0x0000,0x0000,0x0000,0x0000, -0x09CE,0x0000,0x0000,0x0000,0x0000, -0x09CF,0x0000,0x0000,0x0000,0x0000, -0x09D0,0x0000,0x0000,0x0000,0x0000, -0x09D1,0x0000,0x0000,0x0000,0x0000, -0x09D2,0x0000,0x0000,0x0000,0x0000, -0x09D3,0x0000,0x0000,0x0000,0x0000, -0x09D4,0x0000,0x0000,0x0000,0x0000, -0x09D5,0x0000,0x0000,0x0000,0x0000, -0x09D6,0x0000,0x0000,0x0000,0x0000, -0x09D7,0x0000,0x0000,0x0000,0x0000, -0x09D8,0x0000,0x0000,0x0000,0x0000, -0x09D9,0x0000,0x0000,0x0000,0x0000, -0x09DA,0x0000,0x0000,0x0000,0x0000, -0x09DB,0x0000,0x0000,0x0000,0x0000, -0x09DC,0x0000,0x0000,0x0000,0x0000, -0x09DD,0x0000,0x0000,0x0000,0x0000, -0x09DE,0x0000,0x0000,0x0000,0x0000, -0x09DF,0x0000,0x0000,0x0000,0x0000, -0x09E0,0x0000,0x0000,0x0000,0x0000, -0x09E1,0x0000,0x0000,0x0000,0x0000, -0x09E2,0x0000,0x0000,0x0000,0x0000, -0x09E3,0x0000,0x0000,0x0000,0x0000, -0x09E4,0x0000,0x0000,0x0000,0x0000, -0x09E5,0x0000,0x0000,0x0000,0x0000, -0x09E6,0x0000,0x0000,0x0000,0x0000, -0x09E7,0x0000,0x0000,0x0000,0x0000, -0x09E8,0x0000,0x0000,0x0000,0x0000, -0x09E9,0x0000,0x0000,0x0000,0x0000, -0x09EA,0x0000,0x0000,0x0000,0x0000, -0x09EB,0x0000,0x0000,0x0000,0x0000, -0x09EC,0x0000,0x0000,0x0000,0x0000, -0x09ED,0x0000,0x0000,0x0000,0x0000, -0x09EE,0x0000,0x0000,0x0000,0x0000, -0x09EF,0x0000,0x0000,0x0000,0x0000, -0x09F0,0x0000,0x0000,0x0000,0x0000, -0x09F1,0x0000,0x0000,0x0000,0x0000, -0x09F2,0x0000,0x0000,0x0000,0x0000, -0x09F3,0x0000,0x0000,0x0000,0x0000, -0x09F4,0x0000,0x0000,0x0000,0x0000, -0x09F5,0x0000,0x0000,0x0000,0x0000, -0x09F6,0x0000,0x0000,0x0000,0x0000, -0x09F7,0x0000,0x0000,0x0000,0x0000, -0x09F8,0x0000,0x0000,0x0000,0x0000, -0x09F8,0x0000,0x0000,0x0000,0x0000, -0x09F9,0x0000,0x0000,0x0000,0x0000, -0x09FA,0x0000,0x0000,0x0000,0x0000, -0x09FB,0x0000,0x0000,0x0000,0x0000, -0x09FC,0x0000,0x0000,0x0000,0x0000, -0x09FD,0x0000,0x0000,0x0000,0x0000, -0x09FE,0x0000,0x0000,0x0000,0x0000, -0x09FF,0x0000,0x0000,0x0000,0x0000, -0x0A00,0x0000,0x0000,0x0000,0x0000, -0x0A01,0x0000,0x0000,0x0000,0x0000, -0x0A02,0x0000,0x0000,0x0000,0x0000, -0x0A03,0x0000,0x0000,0x0000,0x0000, -0x0A04,0x0000,0x0000,0x0000,0x0000, -0x0A05,0x0000,0x0000,0x0000,0x0000, -0x0A06,0x0000,0x0000,0x0000,0x0000, -0x0A07,0x0000,0x0000,0x0000,0x0000, -0x0A08,0x0000,0x0000,0x0000,0x0000, -0x0A09,0x0000,0x0000,0x0000,0x0000, -0x0A0A,0x0000,0x0000,0x0000,0x0000, -0x0A0B,0x0000,0x0000,0x0000,0x0000, -0x0A0C,0x0000,0x0000,0x0000,0x0000, -0x0A0D,0x0000,0x0000,0x0000,0x0000, -0x0A0E,0x0000,0x0000,0x0000,0x0000, -0x0A0F,0x0000,0x0000,0x0000,0x0000, -0x0A10,0x0000,0x0000,0x0000,0x0000, -0x0A11,0x0000,0x0000,0x0000,0x0000, -0x0A12,0x0000,0x0000,0x0000,0x0000, -0x0A13,0x0000,0x0000,0x0000,0x0000, -0x0A14,0x0000,0x0000,0x0000,0x0000, -0x0A15,0x0000,0x0000,0x0000,0x0000, -0x0A16,0x0000,0x0000,0x0000,0x0000, -0x0A17,0x0000,0x0000,0x0000,0x0000, -0x0A18,0x0000,0x0000,0x0000,0x0000, -0x0A19,0x0000,0x0000,0x0000,0x0000, -0x0A1A,0x0000,0x0000,0x0000,0x0000 -}; - -uint16 page02Bdata[]= { /* 2B00 (3 weights per char) */ -0x0A1B,0x0000,0x0000, 0x0A1C,0x0000,0x0000, 0x0A1D,0x0000,0x0000, -0x0A1E,0x0000,0x0000, 0x0A1F,0x0000,0x0000, 0x0A20,0x0000,0x0000, -0x0A21,0x0000,0x0000, 0x0A22,0x0000,0x0000, 0x0A23,0x0000,0x0000, -0x0A24,0x0000,0x0000, 0x0A25,0x0000,0x0000, 0x0A26,0x0000,0x0000, -0x0A27,0x0000,0x0000, 0x0A28,0x0000,0x0000, 0xFBC0,0xAB0E,0x0000, -0xFBC0,0xAB0F,0x0000, 0xFBC0,0xAB10,0x0000, 0xFBC0,0xAB11,0x0000, -0xFBC0,0xAB12,0x0000, 0xFBC0,0xAB13,0x0000, 0xFBC0,0xAB14,0x0000, -0xFBC0,0xAB15,0x0000, 0xFBC0,0xAB16,0x0000, 0xFBC0,0xAB17,0x0000, -0xFBC0,0xAB18,0x0000, 0xFBC0,0xAB19,0x0000, 0xFBC0,0xAB1A,0x0000, -0xFBC0,0xAB1B,0x0000, 0xFBC0,0xAB1C,0x0000, 0xFBC0,0xAB1D,0x0000, -0xFBC0,0xAB1E,0x0000, 0xFBC0,0xAB1F,0x0000, 0xFBC0,0xAB20,0x0000, -0xFBC0,0xAB21,0x0000, 0xFBC0,0xAB22,0x0000, 0xFBC0,0xAB23,0x0000, -0xFBC0,0xAB24,0x0000, 0xFBC0,0xAB25,0x0000, 0xFBC0,0xAB26,0x0000, -0xFBC0,0xAB27,0x0000, 0xFBC0,0xAB28,0x0000, 0xFBC0,0xAB29,0x0000, -0xFBC0,0xAB2A,0x0000, 0xFBC0,0xAB2B,0x0000, 0xFBC0,0xAB2C,0x0000, -0xFBC0,0xAB2D,0x0000, 0xFBC0,0xAB2E,0x0000, 0xFBC0,0xAB2F,0x0000, -0xFBC0,0xAB30,0x0000, 0xFBC0,0xAB31,0x0000, 0xFBC0,0xAB32,0x0000, -0xFBC0,0xAB33,0x0000, 0xFBC0,0xAB34,0x0000, 0xFBC0,0xAB35,0x0000, -0xFBC0,0xAB36,0x0000, 0xFBC0,0xAB37,0x0000, 0xFBC0,0xAB38,0x0000, -0xFBC0,0xAB39,0x0000, 0xFBC0,0xAB3A,0x0000, 0xFBC0,0xAB3B,0x0000, -0xFBC0,0xAB3C,0x0000, 0xFBC0,0xAB3D,0x0000, 0xFBC0,0xAB3E,0x0000, -0xFBC0,0xAB3F,0x0000, 0xFBC0,0xAB40,0x0000, 0xFBC0,0xAB41,0x0000, -0xFBC0,0xAB42,0x0000, 0xFBC0,0xAB43,0x0000, 0xFBC0,0xAB44,0x0000, -0xFBC0,0xAB45,0x0000, 0xFBC0,0xAB46,0x0000, 0xFBC0,0xAB47,0x0000, -0xFBC0,0xAB48,0x0000, 0xFBC0,0xAB49,0x0000, 0xFBC0,0xAB4A,0x0000, -0xFBC0,0xAB4B,0x0000, 0xFBC0,0xAB4C,0x0000, 0xFBC0,0xAB4D,0x0000, -0xFBC0,0xAB4E,0x0000, 0xFBC0,0xAB4F,0x0000, 0xFBC0,0xAB50,0x0000, -0xFBC0,0xAB51,0x0000, 0xFBC0,0xAB52,0x0000, 0xFBC0,0xAB53,0x0000, -0xFBC0,0xAB54,0x0000, 0xFBC0,0xAB55,0x0000, 0xFBC0,0xAB56,0x0000, -0xFBC0,0xAB57,0x0000, 0xFBC0,0xAB58,0x0000, 0xFBC0,0xAB59,0x0000, -0xFBC0,0xAB5A,0x0000, 0xFBC0,0xAB5B,0x0000, 0xFBC0,0xAB5C,0x0000, -0xFBC0,0xAB5D,0x0000, 0xFBC0,0xAB5E,0x0000, 0xFBC0,0xAB5F,0x0000, -0xFBC0,0xAB60,0x0000, 0xFBC0,0xAB61,0x0000, 0xFBC0,0xAB62,0x0000, -0xFBC0,0xAB63,0x0000, 0xFBC0,0xAB64,0x0000, 0xFBC0,0xAB65,0x0000, -0xFBC0,0xAB66,0x0000, 0xFBC0,0xAB67,0x0000, 0xFBC0,0xAB68,0x0000, -0xFBC0,0xAB69,0x0000, 0xFBC0,0xAB6A,0x0000, 0xFBC0,0xAB6B,0x0000, -0xFBC0,0xAB6C,0x0000, 0xFBC0,0xAB6D,0x0000, 0xFBC0,0xAB6E,0x0000, -0xFBC0,0xAB6F,0x0000, 0xFBC0,0xAB70,0x0000, 0xFBC0,0xAB71,0x0000, -0xFBC0,0xAB72,0x0000, 0xFBC0,0xAB73,0x0000, 0xFBC0,0xAB74,0x0000, -0xFBC0,0xAB75,0x0000, 0xFBC0,0xAB76,0x0000, 0xFBC0,0xAB77,0x0000, -0xFBC0,0xAB78,0x0000, 0xFBC0,0xAB79,0x0000, 0xFBC0,0xAB7A,0x0000, -0xFBC0,0xAB7B,0x0000, 0xFBC0,0xAB7C,0x0000, 0xFBC0,0xAB7D,0x0000, -0xFBC0,0xAB7E,0x0000, 0xFBC0,0xAB7F,0x0000, 0xFBC0,0xAB80,0x0000, -0xFBC0,0xAB81,0x0000, 0xFBC0,0xAB82,0x0000, 0xFBC0,0xAB83,0x0000, -0xFBC0,0xAB84,0x0000, 0xFBC0,0xAB85,0x0000, 0xFBC0,0xAB86,0x0000, -0xFBC0,0xAB87,0x0000, 0xFBC0,0xAB88,0x0000, 0xFBC0,0xAB89,0x0000, -0xFBC0,0xAB8A,0x0000, 0xFBC0,0xAB8B,0x0000, 0xFBC0,0xAB8C,0x0000, -0xFBC0,0xAB8D,0x0000, 0xFBC0,0xAB8E,0x0000, 0xFBC0,0xAB8F,0x0000, -0xFBC0,0xAB90,0x0000, 0xFBC0,0xAB91,0x0000, 0xFBC0,0xAB92,0x0000, -0xFBC0,0xAB93,0x0000, 0xFBC0,0xAB94,0x0000, 0xFBC0,0xAB95,0x0000, -0xFBC0,0xAB96,0x0000, 0xFBC0,0xAB97,0x0000, 0xFBC0,0xAB98,0x0000, -0xFBC0,0xAB99,0x0000, 0xFBC0,0xAB9A,0x0000, 0xFBC0,0xAB9B,0x0000, -0xFBC0,0xAB9C,0x0000, 0xFBC0,0xAB9D,0x0000, 0xFBC0,0xAB9E,0x0000, -0xFBC0,0xAB9F,0x0000, 0xFBC0,0xABA0,0x0000, 0xFBC0,0xABA1,0x0000, -0xFBC0,0xABA2,0x0000, 0xFBC0,0xABA3,0x0000, 0xFBC0,0xABA4,0x0000, -0xFBC0,0xABA5,0x0000, 0xFBC0,0xABA6,0x0000, 0xFBC0,0xABA7,0x0000, -0xFBC0,0xABA8,0x0000, 0xFBC0,0xABA9,0x0000, 0xFBC0,0xABAA,0x0000, -0xFBC0,0xABAB,0x0000, 0xFBC0,0xABAC,0x0000, 0xFBC0,0xABAD,0x0000, -0xFBC0,0xABAE,0x0000, 0xFBC0,0xABAF,0x0000, 0xFBC0,0xABB0,0x0000, -0xFBC0,0xABB1,0x0000, 0xFBC0,0xABB2,0x0000, 0xFBC0,0xABB3,0x0000, -0xFBC0,0xABB4,0x0000, 0xFBC0,0xABB5,0x0000, 0xFBC0,0xABB6,0x0000, -0xFBC0,0xABB7,0x0000, 0xFBC0,0xABB8,0x0000, 0xFBC0,0xABB9,0x0000, -0xFBC0,0xABBA,0x0000, 0xFBC0,0xABBB,0x0000, 0xFBC0,0xABBC,0x0000, -0xFBC0,0xABBD,0x0000, 0xFBC0,0xABBE,0x0000, 0xFBC0,0xABBF,0x0000, -0xFBC0,0xABC0,0x0000, 0xFBC0,0xABC1,0x0000, 0xFBC0,0xABC2,0x0000, -0xFBC0,0xABC3,0x0000, 0xFBC0,0xABC4,0x0000, 0xFBC0,0xABC5,0x0000, -0xFBC0,0xABC6,0x0000, 0xFBC0,0xABC7,0x0000, 0xFBC0,0xABC8,0x0000, -0xFBC0,0xABC9,0x0000, 0xFBC0,0xABCA,0x0000, 0xFBC0,0xABCB,0x0000, -0xFBC0,0xABCC,0x0000, 0xFBC0,0xABCD,0x0000, 0xFBC0,0xABCE,0x0000, -0xFBC0,0xABCF,0x0000, 0xFBC0,0xABD0,0x0000, 0xFBC0,0xABD1,0x0000, -0xFBC0,0xABD2,0x0000, 0xFBC0,0xABD3,0x0000, 0xFBC0,0xABD4,0x0000, -0xFBC0,0xABD5,0x0000, 0xFBC0,0xABD6,0x0000, 0xFBC0,0xABD7,0x0000, -0xFBC0,0xABD8,0x0000, 0xFBC0,0xABD9,0x0000, 0xFBC0,0xABDA,0x0000, -0xFBC0,0xABDB,0x0000, 0xFBC0,0xABDC,0x0000, 0xFBC0,0xABDD,0x0000, -0xFBC0,0xABDE,0x0000, 0xFBC0,0xABDF,0x0000, 0xFBC0,0xABE0,0x0000, -0xFBC0,0xABE1,0x0000, 0xFBC0,0xABE2,0x0000, 0xFBC0,0xABE3,0x0000, -0xFBC0,0xABE4,0x0000, 0xFBC0,0xABE5,0x0000, 0xFBC0,0xABE6,0x0000, -0xFBC0,0xABE7,0x0000, 0xFBC0,0xABE8,0x0000, 0xFBC0,0xABE9,0x0000, -0xFBC0,0xABEA,0x0000, 0xFBC0,0xABEB,0x0000, 0xFBC0,0xABEC,0x0000, -0xFBC0,0xABED,0x0000, 0xFBC0,0xABEE,0x0000, 0xFBC0,0xABEF,0x0000, -0xFBC0,0xABF0,0x0000, 0xFBC0,0xABF1,0x0000, 0xFBC0,0xABF2,0x0000, -0xFBC0,0xABF3,0x0000, 0xFBC0,0xABF4,0x0000, 0xFBC0,0xABF5,0x0000, -0xFBC0,0xABF6,0x0000, 0xFBC0,0xABF7,0x0000, 0xFBC0,0xABF8,0x0000, -0xFBC0,0xABF9,0x0000, 0xFBC0,0xABFA,0x0000, 0xFBC0,0xABFB,0x0000, -0xFBC0,0xABFC,0x0000, 0xFBC0,0xABFD,0x0000, 0xFBC0,0xABFE,0x0000, -0xFBC0,0xABFF,0x0000 }; - -uint16 page02Edata[]= { /* 2E00 (3 weights per char) */ -0xFBC0,0xAE00,0x0000, 0xFBC0,0xAE01,0x0000, 0xFBC0,0xAE02,0x0000, -0xFBC0,0xAE03,0x0000, 0xFBC0,0xAE04,0x0000, 0xFBC0,0xAE05,0x0000, -0xFBC0,0xAE06,0x0000, 0xFBC0,0xAE07,0x0000, 0xFBC0,0xAE08,0x0000, -0xFBC0,0xAE09,0x0000, 0xFBC0,0xAE0A,0x0000, 0xFBC0,0xAE0B,0x0000, -0xFBC0,0xAE0C,0x0000, 0xFBC0,0xAE0D,0x0000, 0xFBC0,0xAE0E,0x0000, -0xFBC0,0xAE0F,0x0000, 0xFBC0,0xAE10,0x0000, 0xFBC0,0xAE11,0x0000, -0xFBC0,0xAE12,0x0000, 0xFBC0,0xAE13,0x0000, 0xFBC0,0xAE14,0x0000, -0xFBC0,0xAE15,0x0000, 0xFBC0,0xAE16,0x0000, 0xFBC0,0xAE17,0x0000, -0xFBC0,0xAE18,0x0000, 0xFBC0,0xAE19,0x0000, 0xFBC0,0xAE1A,0x0000, -0xFBC0,0xAE1B,0x0000, 0xFBC0,0xAE1C,0x0000, 0xFBC0,0xAE1D,0x0000, -0xFBC0,0xAE1E,0x0000, 0xFBC0,0xAE1F,0x0000, 0xFBC0,0xAE20,0x0000, -0xFBC0,0xAE21,0x0000, 0xFBC0,0xAE22,0x0000, 0xFBC0,0xAE23,0x0000, -0xFBC0,0xAE24,0x0000, 0xFBC0,0xAE25,0x0000, 0xFBC0,0xAE26,0x0000, -0xFBC0,0xAE27,0x0000, 0xFBC0,0xAE28,0x0000, 0xFBC0,0xAE29,0x0000, -0xFBC0,0xAE2A,0x0000, 0xFBC0,0xAE2B,0x0000, 0xFBC0,0xAE2C,0x0000, -0xFBC0,0xAE2D,0x0000, 0xFBC0,0xAE2E,0x0000, 0xFBC0,0xAE2F,0x0000, -0xFBC0,0xAE30,0x0000, 0xFBC0,0xAE31,0x0000, 0xFBC0,0xAE32,0x0000, -0xFBC0,0xAE33,0x0000, 0xFBC0,0xAE34,0x0000, 0xFBC0,0xAE35,0x0000, -0xFBC0,0xAE36,0x0000, 0xFBC0,0xAE37,0x0000, 0xFBC0,0xAE38,0x0000, -0xFBC0,0xAE39,0x0000, 0xFBC0,0xAE3A,0x0000, 0xFBC0,0xAE3B,0x0000, -0xFBC0,0xAE3C,0x0000, 0xFBC0,0xAE3D,0x0000, 0xFBC0,0xAE3E,0x0000, -0xFBC0,0xAE3F,0x0000, 0xFBC0,0xAE40,0x0000, 0xFBC0,0xAE41,0x0000, -0xFBC0,0xAE42,0x0000, 0xFBC0,0xAE43,0x0000, 0xFBC0,0xAE44,0x0000, -0xFBC0,0xAE45,0x0000, 0xFBC0,0xAE46,0x0000, 0xFBC0,0xAE47,0x0000, -0xFBC0,0xAE48,0x0000, 0xFBC0,0xAE49,0x0000, 0xFBC0,0xAE4A,0x0000, -0xFBC0,0xAE4B,0x0000, 0xFBC0,0xAE4C,0x0000, 0xFBC0,0xAE4D,0x0000, -0xFBC0,0xAE4E,0x0000, 0xFBC0,0xAE4F,0x0000, 0xFBC0,0xAE50,0x0000, -0xFBC0,0xAE51,0x0000, 0xFBC0,0xAE52,0x0000, 0xFBC0,0xAE53,0x0000, -0xFBC0,0xAE54,0x0000, 0xFBC0,0xAE55,0x0000, 0xFBC0,0xAE56,0x0000, -0xFBC0,0xAE57,0x0000, 0xFBC0,0xAE58,0x0000, 0xFBC0,0xAE59,0x0000, -0xFBC0,0xAE5A,0x0000, 0xFBC0,0xAE5B,0x0000, 0xFBC0,0xAE5C,0x0000, -0xFBC0,0xAE5D,0x0000, 0xFBC0,0xAE5E,0x0000, 0xFBC0,0xAE5F,0x0000, -0xFBC0,0xAE60,0x0000, 0xFBC0,0xAE61,0x0000, 0xFBC0,0xAE62,0x0000, -0xFBC0,0xAE63,0x0000, 0xFBC0,0xAE64,0x0000, 0xFBC0,0xAE65,0x0000, -0xFBC0,0xAE66,0x0000, 0xFBC0,0xAE67,0x0000, 0xFBC0,0xAE68,0x0000, -0xFBC0,0xAE69,0x0000, 0xFBC0,0xAE6A,0x0000, 0xFBC0,0xAE6B,0x0000, -0xFBC0,0xAE6C,0x0000, 0xFBC0,0xAE6D,0x0000, 0xFBC0,0xAE6E,0x0000, -0xFBC0,0xAE6F,0x0000, 0xFBC0,0xAE70,0x0000, 0xFBC0,0xAE71,0x0000, -0xFBC0,0xAE72,0x0000, 0xFBC0,0xAE73,0x0000, 0xFBC0,0xAE74,0x0000, -0xFBC0,0xAE75,0x0000, 0xFBC0,0xAE76,0x0000, 0xFBC0,0xAE77,0x0000, -0xFBC0,0xAE78,0x0000, 0xFBC0,0xAE79,0x0000, 0xFBC0,0xAE7A,0x0000, -0xFBC0,0xAE7B,0x0000, 0xFBC0,0xAE7C,0x0000, 0xFBC0,0xAE7D,0x0000, -0xFBC0,0xAE7E,0x0000, 0xFBC0,0xAE7F,0x0000, 0xFB40,0xCE36,0x0000, -0xFB40,0xD382,0x0000, 0xFB40,0xCE5B,0x0000, 0xFB40,0xCE5A,0x0000, -0xFB40,0xCE59,0x0000, 0xFB40,0xCEBB,0x0000, 0xFB40,0xD182,0x0000, -0xFB40,0xD1E0,0x0000, 0xFB40,0xD200,0x0000, 0xFB40,0xD202,0x0000, -0xFB40,0xD35C,0x0000, 0xFB40,0xD369,0x0000, 0xFB40,0xDC0F,0x0000, -0xFB40,0xDC0F,0x0000, 0xFB40,0xDC22,0x0000, 0xFB40,0xDC23,0x0000, -0xFB40,0xDC22,0x0000, 0xFB40,0xDC23,0x0000, 0xFB40,0xDDF3,0x0000, -0xFB40,0xDE7A,0x0000, 0xFB40,0xDF51,0x0000, 0xFB40,0xDF50,0x0000, -0xFB40,0xDFC4,0x0000, 0xFB40,0xDFC3,0x0000, 0xFB40,0xE24C,0x0000, -0xFB40,0xE535,0x0000, 0xFBC0,0xAE9A,0x0000, 0xFB40,0xE5E1,0x0000, -0xFB40,0xE5E5,0x0000, 0xFB40,0xE708,0x0000, 0xFB40,0xEB7A,0x0000, -0xFB40,0xEBCD,0x0000, 0xFB40,0xEC11,0x0000, 0xFB40,0xEC35,0x0000, -0xFB40,0xEC3A,0x0000, 0xFB40,0xF06C,0x0000, 0xFB40,0xF22B,0x0000, -0xFB40,0xF22B,0x0000, 0xFB40,0xCE2C,0x0000, 0xFB40,0xF25B,0x0000, -0xFB40,0xF2AD,0x0000, 0xFB40,0xF38B,0x0000, 0xFB40,0xF58B,0x0000, -0xFB40,0xF6EE,0x0000, 0xFB40,0xF93A,0x0000, 0xFB40,0xF93B,0x0000, -0xFB40,0xFAF9,0x0000, 0xFB40,0xFCF9,0x0000, 0xFB40,0xFE9F,0x0000, -0xFB40,0xFF53,0x0000, 0xFB40,0xFF52,0x0000, 0xFB40,0xFF53,0x0000, -0xFB40,0xFF53,0x0000, 0xFB40,0xFF52,0x0000, 0xFB40,0xFF8A,0x0000, -0xFB40,0xFF8A,0x0000, 0xFB40,0xFF8B,0x0000, 0xFB41,0x8002,0x0000, -0xFB41,0x8080,0x0000, 0xFB41,0x807F,0x0000, 0xFB41,0x8089,0x0000, -0xFB41,0x81FC,0x0000, 0xFB41,0x8279,0x0000, 0xFB41,0x8279,0x0000, -0xFB41,0x8279,0x0000, 0xFB41,0x864E,0x0000, 0xFB41,0x8864,0x0000, -0xFB41,0x8980,0x0000, 0xFB41,0x897F,0x0000, 0xFB41,0x89C1,0x0000, -0xFB41,0x89D2,0x0000, 0xFB41,0x89D2,0x0000, 0xFB41,0x8BA0,0x0000, -0xFB41,0x8D1D,0x0000, 0xFB41,0x8DB3,0x0000, 0xFB41,0x8F66,0x0000, -0xFB41,0x8FB6,0x0000, 0xFB41,0x8FB6,0x0000, 0xFB41,0x8FB6,0x0000, -0xFB41,0x9091,0x0000, 0xFB41,0x9485,0x0000, 0xFB41,0x9577,0x0000, -0xFB41,0x9578,0x0000, 0xFB41,0x957F,0x0000, 0xFB41,0x95E8,0x0000, -0xFB41,0x961C,0x0000, 0xFB41,0x961D,0x0000, 0xFB41,0x96E8,0x0000, -0xFB41,0x9752,0x0000, 0xFB41,0x97E6,0x0000, 0xFB41,0x9875,0x0000, -0xFB41,0x98CE,0x0000, 0xFB41,0x98DE,0x0000, 0xFB41,0x98DF,0x0000, -0xFB41,0x98E0,0x0000, 0xFB41,0x98E0,0x0000, 0xFB41,0x9963,0x0000, -0xFB41,0x9996,0x0000, 0xFB41,0x9A6C,0x0000, 0xFB41,0x9AA8,0x0000, -0xFB41,0x9B3C,0x0000, 0xFB41,0x9C7C,0x0000, 0xFB41,0x9E1F,0x0000, -0xFB41,0x9E75,0x0000, 0xFB41,0x9EA6,0x0000, 0xFB41,0x9EC4,0x0000, -0xFB41,0x9EFE,0x0000, 0xFB41,0x9F4A,0x0000, 0xFB41,0x9F50,0x0000, -0xFB41,0x9F52,0x0000, 0xFB41,0x9F7F,0x0000, 0xFB41,0x9F8D,0x0000, -0xFB41,0x9F99,0x0000, 0xFB41,0x9F9C,0x0000, 0xFB41,0x9F9C,0x0000, -0xFB41,0x9F9F,0x0000, 0xFBC0,0xAEF4,0x0000, 0xFBC0,0xAEF5,0x0000, -0xFBC0,0xAEF6,0x0000, 0xFBC0,0xAEF7,0x0000, 0xFBC0,0xAEF8,0x0000, -0xFBC0,0xAEF9,0x0000, 0xFBC0,0xAEFA,0x0000, 0xFBC0,0xAEFB,0x0000, -0xFBC0,0xAEFC,0x0000, 0xFBC0,0xAEFD,0x0000, 0xFBC0,0xAEFE,0x0000, -0xFBC0,0xAEFF,0x0000 }; - -uint16 page02Fdata[]= { /* 2F00 (3 weights per char) */ -0xFB40,0xCE00,0x0000, 0xFB40,0xCE28,0x0000, 0xFB40,0xCE36,0x0000, -0xFB40,0xCE3F,0x0000, 0xFB40,0xCE59,0x0000, 0xFB40,0xCE85,0x0000, -0xFB40,0xCE8C,0x0000, 0xFB40,0xCEA0,0x0000, 0xFB40,0xCEBA,0x0000, -0xFB40,0xD13F,0x0000, 0xFB40,0xD165,0x0000, 0xFB40,0xD16B,0x0000, -0xFB40,0xD182,0x0000, 0xFB40,0xD196,0x0000, 0xFB40,0xD1AB,0x0000, -0xFB40,0xD1E0,0x0000, 0xFB40,0xD1F5,0x0000, 0xFB40,0xD200,0x0000, -0xFB40,0xD29B,0x0000, 0xFB40,0xD2F9,0x0000, 0xFB40,0xD315,0x0000, -0xFB40,0xD31A,0x0000, 0xFB40,0xD338,0x0000, 0xFB40,0xD341,0x0000, -0xFB40,0xD35C,0x0000, 0xFB40,0xD369,0x0000, 0xFB40,0xD382,0x0000, -0xFB40,0xD3B6,0x0000, 0xFB40,0xD3C8,0x0000, 0xFB40,0xD3E3,0x0000, -0xFB40,0xD6D7,0x0000, 0xFB40,0xD71F,0x0000, 0xFB40,0xD8EB,0x0000, -0xFB40,0xD902,0x0000, 0xFB40,0xD90A,0x0000, 0xFB40,0xD915,0x0000, -0xFB40,0xD927,0x0000, 0xFB40,0xD973,0x0000, 0xFB40,0xDB50,0x0000, -0xFB40,0xDB80,0x0000, 0xFB40,0xDBF8,0x0000, 0xFB40,0xDC0F,0x0000, -0xFB40,0xDC22,0x0000, 0xFB40,0xDC38,0x0000, 0xFB40,0xDC6E,0x0000, -0xFB40,0xDC71,0x0000, 0xFB40,0xDDDB,0x0000, 0xFB40,0xDDE5,0x0000, -0xFB40,0xDDF1,0x0000, 0xFB40,0xDDFE,0x0000, 0xFB40,0xDE72,0x0000, -0xFB40,0xDE7A,0x0000, 0xFB40,0xDE7F,0x0000, 0xFB40,0xDEF4,0x0000, -0xFB40,0xDEFE,0x0000, 0xFB40,0xDF0B,0x0000, 0xFB40,0xDF13,0x0000, -0xFB40,0xDF50,0x0000, 0xFB40,0xDF61,0x0000, 0xFB40,0xDF73,0x0000, -0xFB40,0xDFC3,0x0000, 0xFB40,0xE208,0x0000, 0xFB40,0xE236,0x0000, -0xFB40,0xE24B,0x0000, 0xFB40,0xE52F,0x0000, 0xFB40,0xE534,0x0000, -0xFB40,0xE587,0x0000, 0xFB40,0xE597,0x0000, 0xFB40,0xE5A4,0x0000, -0xFB40,0xE5B9,0x0000, 0xFB40,0xE5E0,0x0000, 0xFB40,0xE5E5,0x0000, -0xFB40,0xE6F0,0x0000, 0xFB40,0xE708,0x0000, 0xFB40,0xE728,0x0000, -0xFB40,0xEB20,0x0000, 0xFB40,0xEB62,0x0000, 0xFB40,0xEB79,0x0000, -0xFB40,0xEBB3,0x0000, 0xFB40,0xEBCB,0x0000, 0xFB40,0xEBD4,0x0000, -0xFB40,0xEBDB,0x0000, 0xFB40,0xEC0F,0x0000, 0xFB40,0xEC14,0x0000, -0xFB40,0xEC34,0x0000, 0xFB40,0xF06B,0x0000, 0xFB40,0xF22A,0x0000, -0xFB40,0xF236,0x0000, 0xFB40,0xF23B,0x0000, 0xFB40,0xF23F,0x0000, -0xFB40,0xF247,0x0000, 0xFB40,0xF259,0x0000, 0xFB40,0xF25B,0x0000, -0xFB40,0xF2AC,0x0000, 0xFB40,0xF384,0x0000, 0xFB40,0xF389,0x0000, -0xFB40,0xF4DC,0x0000, 0xFB40,0xF4E6,0x0000, 0xFB40,0xF518,0x0000, -0xFB40,0xF51F,0x0000, 0xFB40,0xF528,0x0000, 0xFB40,0xF530,0x0000, -0xFB40,0xF58B,0x0000, 0xFB40,0xF592,0x0000, 0xFB40,0xF676,0x0000, -0xFB40,0xF67D,0x0000, 0xFB40,0xF6AE,0x0000, 0xFB40,0xF6BF,0x0000, -0xFB40,0xF6EE,0x0000, 0xFB40,0xF7DB,0x0000, 0xFB40,0xF7E2,0x0000, -0xFB40,0xF7F3,0x0000, 0xFB40,0xF93A,0x0000, 0xFB40,0xF9B8,0x0000, -0xFB40,0xF9BE,0x0000, 0xFB40,0xFA74,0x0000, 0xFB40,0xFACB,0x0000, -0xFB40,0xFAF9,0x0000, 0xFB40,0xFC73,0x0000, 0xFB40,0xFCF8,0x0000, -0xFB40,0xFF36,0x0000, 0xFB40,0xFF51,0x0000, 0xFB40,0xFF8A,0x0000, -0xFB40,0xFFBD,0x0000, 0xFB41,0x8001,0x0000, 0xFB41,0x800C,0x0000, -0xFB41,0x8012,0x0000, 0xFB41,0x8033,0x0000, 0xFB41,0x807F,0x0000, -0xFB41,0x8089,0x0000, 0xFB41,0x81E3,0x0000, 0xFB41,0x81EA,0x0000, -0xFB41,0x81F3,0x0000, 0xFB41,0x81FC,0x0000, 0xFB41,0x820C,0x0000, -0xFB41,0x821B,0x0000, 0xFB41,0x821F,0x0000, 0xFB41,0x826E,0x0000, -0xFB41,0x8272,0x0000, 0xFB41,0x8278,0x0000, 0xFB41,0x864D,0x0000, -0xFB41,0x866B,0x0000, 0xFB41,0x8840,0x0000, 0xFB41,0x884C,0x0000, -0xFB41,0x8863,0x0000, 0xFB41,0x897E,0x0000, 0xFB41,0x898B,0x0000, -0xFB41,0x89D2,0x0000, 0xFB41,0x8A00,0x0000, 0xFB41,0x8C37,0x0000, -0xFB41,0x8C46,0x0000, 0xFB41,0x8C55,0x0000, 0xFB41,0x8C78,0x0000, -0xFB41,0x8C9D,0x0000, 0xFB41,0x8D64,0x0000, 0xFB41,0x8D70,0x0000, -0xFB41,0x8DB3,0x0000, 0xFB41,0x8EAB,0x0000, 0xFB41,0x8ECA,0x0000, -0xFB41,0x8F9B,0x0000, 0xFB41,0x8FB0,0x0000, 0xFB41,0x8FB5,0x0000, -0xFB41,0x9091,0x0000, 0xFB41,0x9149,0x0000, 0xFB41,0x91C6,0x0000, -0xFB41,0x91CC,0x0000, 0xFB41,0x91D1,0x0000, 0xFB41,0x9577,0x0000, -0xFB41,0x9580,0x0000, 0xFB41,0x961C,0x0000, 0xFB41,0x96B6,0x0000, -0xFB41,0x96B9,0x0000, 0xFB41,0x96E8,0x0000, 0xFB41,0x9751,0x0000, -0xFB41,0x975E,0x0000, 0xFB41,0x9762,0x0000, 0xFB41,0x9769,0x0000, -0xFB41,0x97CB,0x0000, 0xFB41,0x97ED,0x0000, 0xFB41,0x97F3,0x0000, -0xFB41,0x9801,0x0000, 0xFB41,0x98A8,0x0000, 0xFB41,0x98DB,0x0000, -0xFB41,0x98DF,0x0000, 0xFB41,0x9996,0x0000, 0xFB41,0x9999,0x0000, -0xFB41,0x99AC,0x0000, 0xFB41,0x9AA8,0x0000, 0xFB41,0x9AD8,0x0000, -0xFB41,0x9ADF,0x0000, 0xFB41,0x9B25,0x0000, 0xFB41,0x9B2F,0x0000, -0xFB41,0x9B32,0x0000, 0xFB41,0x9B3C,0x0000, 0xFB41,0x9B5A,0x0000, -0xFB41,0x9CE5,0x0000, 0xFB41,0x9E75,0x0000, 0xFB41,0x9E7F,0x0000, -0xFB41,0x9EA5,0x0000, 0xFB41,0x9EBB,0x0000, 0xFB41,0x9EC3,0x0000, -0xFB41,0x9ECD,0x0000, 0xFB41,0x9ED1,0x0000, 0xFB41,0x9EF9,0x0000, -0xFB41,0x9EFD,0x0000, 0xFB41,0x9F0E,0x0000, 0xFB41,0x9F13,0x0000, -0xFB41,0x9F20,0x0000, 0xFB41,0x9F3B,0x0000, 0xFB41,0x9F4A,0x0000, -0xFB41,0x9F52,0x0000, 0xFB41,0x9F8D,0x0000, 0xFB41,0x9F9C,0x0000, -0xFB41,0x9FA0,0x0000, 0xFBC0,0xAFD6,0x0000, 0xFBC0,0xAFD7,0x0000, -0xFBC0,0xAFD8,0x0000, 0xFBC0,0xAFD9,0x0000, 0xFBC0,0xAFDA,0x0000, -0xFBC0,0xAFDB,0x0000, 0xFBC0,0xAFDC,0x0000, 0xFBC0,0xAFDD,0x0000, -0xFBC0,0xAFDE,0x0000, 0xFBC0,0xAFDF,0x0000, 0xFBC0,0xAFE0,0x0000, -0xFBC0,0xAFE1,0x0000, 0xFBC0,0xAFE2,0x0000, 0xFBC0,0xAFE3,0x0000, -0xFBC0,0xAFE4,0x0000, 0xFBC0,0xAFE5,0x0000, 0xFBC0,0xAFE6,0x0000, -0xFBC0,0xAFE7,0x0000, 0xFBC0,0xAFE8,0x0000, 0xFBC0,0xAFE9,0x0000, -0xFBC0,0xAFEA,0x0000, 0xFBC0,0xAFEB,0x0000, 0xFBC0,0xAFEC,0x0000, -0xFBC0,0xAFED,0x0000, 0xFBC0,0xAFEE,0x0000, 0xFBC0,0xAFEF,0x0000, -0x0DAF,0x0000,0x0000, 0x0DB0,0x0000,0x0000, 0x0DB1,0x0000,0x0000, -0x0DB2,0x0000,0x0000, 0x0DB3,0x0000,0x0000, 0x0DB4,0x0000,0x0000, -0x0DB5,0x0000,0x0000, 0x0DB6,0x0000,0x0000, 0x0DB7,0x0000,0x0000, -0x0DB8,0x0000,0x0000, 0x0DB9,0x0000,0x0000, 0x0DBA,0x0000,0x0000, -0xFBC0,0xAFFC,0x0000, 0xFBC0,0xAFFD,0x0000, 0xFBC0,0xAFFE,0x0000, -0xFBC0,0xAFFF,0x0000 }; - -uint16 page030data[]= { /* 3000 (3 weights per char) */ -0x0209,0x0000,0x0000, 0x0237,0x0000,0x0000, 0x0266,0x0000,0x0000, -0x02E2,0x0000,0x0000, 0x0DBB,0x0000,0x0000, 0x0E05,0x0000,0x0000, -0x1E5D,0x1E73,0x0000, 0x0E29,0x0000,0x0000, 0x02AE,0x0000,0x0000, -0x02AF,0x0000,0x0000, 0x02B0,0x0000,0x0000, 0x02B1,0x0000,0x0000, -0x02B2,0x0000,0x0000, 0x02B3,0x0000,0x0000, 0x02B4,0x0000,0x0000, -0x02B5,0x0000,0x0000, 0x02B6,0x0000,0x0000, 0x02B7,0x0000,0x0000, -0x0DBC,0x0000,0x0000, 0x0DBD,0x0000,0x0000, 0x02B8,0x0000,0x0000, -0x02B9,0x0000,0x0000, 0x02BA,0x0000,0x0000, 0x02BB,0x0000,0x0000, -0x02BC,0x0000,0x0000, 0x02BD,0x0000,0x0000, 0x02BE,0x0000,0x0000, -0x02BF,0x0000,0x0000, 0x022B,0x0000,0x0000, 0x0283,0x0000,0x0000, -0x0284,0x0000,0x0000, 0x0285,0x0000,0x0000, 0x0DBE,0x0000,0x0000, -0x0E2A,0x0000,0x0000, 0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, -0x0E2D,0x0000,0x0000, 0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, -0x0E30,0x0000,0x0000, 0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x022C,0x0000,0x0000, 0x0E07,0x0000,0x0000, 0x0E07,0x0000,0x0000, -0x0E08,0x0000,0x0000, 0x0E08,0x0000,0x0000, 0x0E09,0x0000,0x0000, -0x0DBC,0x0000,0x0000, 0x0DBF,0x0000,0x0000, 0xFB40,0xD341,0x0000, -0xFB40,0xD344,0x0000, 0xFB40,0xD345,0x0000, 0x0E06,0x0000,0x0000, -0x1E70,0x1E5E,0x0000, 0x02E3,0x0000,0x0000, 0x0DC0,0x0000,0x0000, -0x0DC1,0x0000,0x0000, 0xFBC0,0xB040,0x0000, 0x1E52,0x0000,0x0000, -0x1E52,0x0000,0x0000, 0x1E53,0x0000,0x0000, 0x1E53,0x0000,0x0000, -0x1E54,0x0000,0x0000, 0x1E54,0x0000,0x0000, 0x1E55,0x0000,0x0000, -0x1E55,0x0000,0x0000, 0x1E56,0x0000,0x0000, 0x1E56,0x0000,0x0000, -0x1E57,0x0000,0x0000, 0x1E57,0x0000,0x0000, 0x1E58,0x0000,0x0000, -0x1E58,0x0000,0x0000, 0x1E59,0x0000,0x0000, 0x1E59,0x0000,0x0000, -0x1E5A,0x0000,0x0000, 0x1E5A,0x0000,0x0000, 0x1E5B,0x0000,0x0000, -0x1E5B,0x0000,0x0000, 0x1E5C,0x0000,0x0000, 0x1E5C,0x0000,0x0000, -0x1E5D,0x0000,0x0000, 0x1E5D,0x0000,0x0000, 0x1E5E,0x0000,0x0000, -0x1E5E,0x0000,0x0000, 0x1E5F,0x0000,0x0000, 0x1E5F,0x0000,0x0000, -0x1E60,0x0000,0x0000, 0x1E60,0x0000,0x0000, 0x1E61,0x0000,0x0000, -0x1E61,0x0000,0x0000, 0x1E62,0x0000,0x0000, 0x1E62,0x0000,0x0000, -0x1E63,0x0000,0x0000, 0x1E63,0x0000,0x0000, 0x1E63,0x0000,0x0000, -0x1E64,0x0000,0x0000, 0x1E64,0x0000,0x0000, 0x1E65,0x0000,0x0000, -0x1E65,0x0000,0x0000, 0x1E66,0x0000,0x0000, 0x1E67,0x0000,0x0000, -0x1E68,0x0000,0x0000, 0x1E69,0x0000,0x0000, 0x1E6A,0x0000,0x0000, -0x1E6B,0x0000,0x0000, 0x1E6B,0x0000,0x0000, 0x1E6B,0x0000,0x0000, -0x1E6C,0x0000,0x0000, 0x1E6C,0x0000,0x0000, 0x1E6C,0x0000,0x0000, -0x1E6D,0x0000,0x0000, 0x1E6D,0x0000,0x0000, 0x1E6D,0x0000,0x0000, -0x1E6E,0x0000,0x0000, 0x1E6E,0x0000,0x0000, 0x1E6E,0x0000,0x0000, -0x1E6F,0x0000,0x0000, 0x1E6F,0x0000,0x0000, 0x1E6F,0x0000,0x0000, -0x1E70,0x0000,0x0000, 0x1E71,0x0000,0x0000, 0x1E72,0x0000,0x0000, -0x1E73,0x0000,0x0000, 0x1E74,0x0000,0x0000, 0x1E75,0x0000,0x0000, -0x1E75,0x0000,0x0000, 0x1E76,0x0000,0x0000, 0x1E76,0x0000,0x0000, -0x1E77,0x0000,0x0000, 0x1E77,0x0000,0x0000, 0x1E78,0x0000,0x0000, -0x1E79,0x0000,0x0000, 0x1E7A,0x0000,0x0000, 0x1E7B,0x0000,0x0000, -0x1E7C,0x0000,0x0000, 0x1E7D,0x0000,0x0000, 0x1E7D,0x0000,0x0000, -0x1E7E,0x0000,0x0000, 0x1E7F,0x0000,0x0000, 0x1E80,0x0000,0x0000, -0x1E81,0x0000,0x0000, 0x1E54,0x0000,0x0000, 0x1E57,0x0000,0x0000, -0x1E5A,0x0000,0x0000, 0xFBC0,0xB097,0x0000, 0xFBC0,0xB098,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x021E,0x0000,0x0000, -0x021F,0x0000,0x0000, 0x0E0A,0x0000,0x0000, 0x0E0A,0x0000,0x0000, -0x1E77,0x1E79,0x0000, 0x022D,0x0000,0x0000, 0x1E52,0x0000,0x0000, -0x1E52,0x0000,0x0000, 0x1E53,0x0000,0x0000, 0x1E53,0x0000,0x0000, -0x1E54,0x0000,0x0000, 0x1E54,0x0000,0x0000, 0x1E55,0x0000,0x0000, -0x1E55,0x0000,0x0000, 0x1E56,0x0000,0x0000, 0x1E56,0x0000,0x0000, -0x1E57,0x0000,0x0000, 0x1E57,0x0000,0x0000, 0x1E58,0x0000,0x0000, -0x1E58,0x0000,0x0000, 0x1E59,0x0000,0x0000, 0x1E59,0x0000,0x0000, -0x1E5A,0x0000,0x0000, 0x1E5A,0x0000,0x0000, 0x1E5B,0x0000,0x0000, -0x1E5B,0x0000,0x0000, 0x1E5C,0x0000,0x0000, 0x1E5C,0x0000,0x0000, -0x1E5D,0x0000,0x0000, 0x1E5D,0x0000,0x0000, 0x1E5E,0x0000,0x0000, -0x1E5E,0x0000,0x0000, 0x1E5F,0x0000,0x0000, 0x1E5F,0x0000,0x0000, -0x1E60,0x0000,0x0000, 0x1E60,0x0000,0x0000, 0x1E61,0x0000,0x0000, -0x1E61,0x0000,0x0000, 0x1E62,0x0000,0x0000, 0x1E62,0x0000,0x0000, -0x1E63,0x0000,0x0000, 0x1E63,0x0000,0x0000, 0x1E63,0x0000,0x0000, -0x1E64,0x0000,0x0000, 0x1E64,0x0000,0x0000, 0x1E65,0x0000,0x0000, -0x1E65,0x0000,0x0000, 0x1E66,0x0000,0x0000, 0x1E67,0x0000,0x0000, -0x1E68,0x0000,0x0000, 0x1E69,0x0000,0x0000, 0x1E6A,0x0000,0x0000, -0x1E6B,0x0000,0x0000, 0x1E6B,0x0000,0x0000, 0x1E6B,0x0000,0x0000, -0x1E6C,0x0000,0x0000, 0x1E6C,0x0000,0x0000, 0x1E6C,0x0000,0x0000, -0x1E6D,0x0000,0x0000, 0x1E6D,0x0000,0x0000, 0x1E6D,0x0000,0x0000, -0x1E6E,0x0000,0x0000, 0x1E6E,0x0000,0x0000, 0x1E6E,0x0000,0x0000, -0x1E6F,0x0000,0x0000, 0x1E6F,0x0000,0x0000, 0x1E6F,0x0000,0x0000, -0x1E70,0x0000,0x0000, 0x1E71,0x0000,0x0000, 0x1E72,0x0000,0x0000, -0x1E73,0x0000,0x0000, 0x1E74,0x0000,0x0000, 0x1E75,0x0000,0x0000, -0x1E75,0x0000,0x0000, 0x1E76,0x0000,0x0000, 0x1E76,0x0000,0x0000, -0x1E77,0x0000,0x0000, 0x1E77,0x0000,0x0000, 0x1E78,0x0000,0x0000, -0x1E79,0x0000,0x0000, 0x1E7A,0x0000,0x0000, 0x1E7B,0x0000,0x0000, -0x1E7C,0x0000,0x0000, 0x1E7D,0x0000,0x0000, 0x1E7D,0x0000,0x0000, -0x1E7E,0x0000,0x0000, 0x1E7F,0x0000,0x0000, 0x1E80,0x0000,0x0000, -0x1E81,0x0000,0x0000, 0x1E54,0x0000,0x0000, 0x1E57,0x0000,0x0000, -0x1E5A,0x0000,0x0000, 0x1E7D,0x0000,0x0000, 0x1E7E,0x0000,0x0000, -0x1E7F,0x0000,0x0000, 0x1E80,0x0000,0x0000, 0x022E,0x0000,0x0000, -0x0E0B,0x0000,0x0000, 0x0E0C,0x0000,0x0000, 0x0E0C,0x0000,0x0000, -0x1E5B,0x1E65,0x0000 }; - -uint16 page031data[]= { /* 3100 (3 weights per char) */ -0xFBC0,0xB100,0x0000, 0xFBC0,0xB101,0x0000, 0xFBC0,0xB102,0x0000, -0xFBC0,0xB103,0x0000, 0xFBC0,0xB104,0x0000, 0x1E82,0x0000,0x0000, -0x1E83,0x0000,0x0000, 0x1E84,0x0000,0x0000, 0x1E85,0x0000,0x0000, -0x1E87,0x0000,0x0000, 0x1E88,0x0000,0x0000, 0x1E89,0x0000,0x0000, -0x1E8A,0x0000,0x0000, 0x1E8B,0x0000,0x0000, 0x1E8C,0x0000,0x0000, -0x1E8F,0x0000,0x0000, 0x1E90,0x0000,0x0000, 0x1E91,0x0000,0x0000, -0x1E92,0x0000,0x0000, 0x1E94,0x0000,0x0000, 0x1E95,0x0000,0x0000, -0x1E96,0x0000,0x0000, 0x1E97,0x0000,0x0000, 0x1E98,0x0000,0x0000, -0x1E99,0x0000,0x0000, 0x1E9A,0x0000,0x0000, 0x1E9B,0x0000,0x0000, -0x1E9C,0x0000,0x0000, 0x1E9E,0x0000,0x0000, 0x1E9F,0x0000,0x0000, -0x1EA1,0x0000,0x0000, 0x1EA2,0x0000,0x0000, 0x1EA3,0x0000,0x0000, -0x1EA4,0x0000,0x0000, 0x1EA5,0x0000,0x0000, 0x1EA6,0x0000,0x0000, -0x1EA7,0x0000,0x0000, 0x1EA9,0x0000,0x0000, 0x1EAD,0x0000,0x0000, -0x1EAE,0x0000,0x0000, 0x1EAF,0x0000,0x0000, 0x1EB0,0x0000,0x0000, -0x1E86,0x0000,0x0000, 0x1E8D,0x0000,0x0000, 0x1E93,0x0000,0x0000, -0xFBC0,0xB12D,0x0000, 0xFBC0,0xB12E,0x0000, 0xFBC0,0xB12F,0x0000, -0xFBC0,0xB130,0x0000, 0x1D62,0x0000,0x0000, 0x1D63,0x0000,0x0000, -0x1E02,0x0000,0x0000, 0x1D64,0x0000,0x0000, 0x1E04,0x0000,0x0000, -0x1E05,0x0000,0x0000, 0x1D65,0x0000,0x0000, 0x1D66,0x0000,0x0000, -0x1D67,0x0000,0x0000, 0x1E08,0x0000,0x0000, 0x1E09,0x0000,0x0000, -0x1E0A,0x0000,0x0000, 0x1E0B,0x0000,0x0000, 0x1E0C,0x0000,0x0000, -0x1E0D,0x0000,0x0000, 0x1D7C,0x0000,0x0000, 0x1D68,0x0000,0x0000, -0x1D69,0x0000,0x0000, 0x1D6A,0x0000,0x0000, 0x1D83,0x0000,0x0000, -0x1D6B,0x0000,0x0000, 0x1D6C,0x0000,0x0000, 0x1D6D,0x0000,0x0000, -0x1D6E,0x0000,0x0000, 0x1D6F,0x0000,0x0000, 0x1D70,0x0000,0x0000, -0x1D71,0x0000,0x0000, 0x1D72,0x0000,0x0000, 0x1D73,0x0000,0x0000, -0x1D74,0x0000,0x0000, 0x1DBE,0x0000,0x0000, 0x1DBF,0x0000,0x0000, -0x1DC0,0x0000,0x0000, 0x1DC1,0x0000,0x0000, 0x1DC2,0x0000,0x0000, -0x1DC3,0x0000,0x0000, 0x1DC4,0x0000,0x0000, 0x1DC5,0x0000,0x0000, -0x1DC6,0x0000,0x0000, 0x1DC7,0x0000,0x0000, 0x1DC8,0x0000,0x0000, -0x1DC9,0x0000,0x0000, 0x1DCA,0x0000,0x0000, 0x1DCB,0x0000,0x0000, -0x1DCC,0x0000,0x0000, 0x1DCD,0x0000,0x0000, 0x1DCE,0x0000,0x0000, -0x1DCF,0x0000,0x0000, 0x1DD0,0x0000,0x0000, 0x1DD1,0x0000,0x0000, -0x1DD2,0x0000,0x0000, 0x1DBD,0x0000,0x0000, 0x1D76,0x0000,0x0000, -0x1D77,0x0000,0x0000, 0x1E1F,0x0000,0x0000, 0x1E20,0x0000,0x0000, -0x1E24,0x0000,0x0000, 0x1E26,0x0000,0x0000, 0x1E2B,0x0000,0x0000, -0x1E2F,0x0000,0x0000, 0x1E31,0x0000,0x0000, 0x1D7E,0x0000,0x0000, -0x1E35,0x0000,0x0000, 0x1E37,0x0000,0x0000, 0x1D7F,0x0000,0x0000, -0x1D80,0x0000,0x0000, 0x1D82,0x0000,0x0000, 0x1D84,0x0000,0x0000, -0x1D85,0x0000,0x0000, 0x1D89,0x0000,0x0000, 0x1D8B,0x0000,0x0000, -0x1D8D,0x0000,0x0000, 0x1D8E,0x0000,0x0000, 0x1D8F,0x0000,0x0000, -0x1D90,0x0000,0x0000, 0x1D91,0x0000,0x0000, 0x1D94,0x0000,0x0000, -0x1D98,0x0000,0x0000, 0x1DA2,0x0000,0x0000, 0x1DA9,0x0000,0x0000, -0x1DAE,0x0000,0x0000, 0x1E49,0x0000,0x0000, 0x1E4A,0x0000,0x0000, -0x1DB9,0x0000,0x0000, 0x1DBA,0x0000,0x0000, 0x1DBB,0x0000,0x0000, -0x1DE1,0x0000,0x0000, 0x1DE2,0x0000,0x0000, 0x1DE5,0x0000,0x0000, -0x1DEE,0x0000,0x0000, 0x1DEF,0x0000,0x0000, 0x1DF1,0x0000,0x0000, -0x1DFB,0x0000,0x0000, 0x1DFE,0x0000,0x0000, 0xFBC0,0xB18F,0x0000, -0x0DC2,0x0000,0x0000, 0x0DC3,0x0000,0x0000, 0xFB40,0xCE00,0x0000, -0xFB40,0xCE8C,0x0000, 0xFB40,0xCE09,0x0000, 0xFB40,0xD6DB,0x0000, -0xFB40,0xCE0A,0x0000, 0xFB40,0xCE2D,0x0000, 0xFB40,0xCE0B,0x0000, -0xFB40,0xF532,0x0000, 0xFB40,0xCE59,0x0000, 0xFB40,0xCE19,0x0000, -0xFB40,0xCE01,0x0000, 0xFB40,0xD929,0x0000, 0xFB40,0xD730,0x0000, -0xFB40,0xCEBA,0x0000, 0x1E82,0x0000,0x0000, 0x1E98,0x0000,0x0000, -0x1E90,0x0000,0x0000, 0x1E8B,0x0000,0x0000, 0x1EA0,0x0000,0x0000, -0x1EA0,0x0000,0x0000, 0x1E9D,0x0000,0x0000, 0x1E9C,0x0000,0x0000, -0x1EAF,0x0000,0x0000, 0x1E9B,0x0000,0x0000, 0x1EAE,0x0000,0x0000, -0x1EAF,0x0000,0x0000, 0x1EAC,0x0000,0x0000, 0x1E8E,0x0000,0x0000, -0x1EA1,0x0000,0x0000, 0x1EA3,0x0000,0x0000, 0x1EAA,0x0000,0x0000, -0x1EAB,0x0000,0x0000, 0x1EA8,0x0000,0x0000, 0x1EAE,0x0000,0x0000, -0x1E83,0x0000,0x0000, 0x1E88,0x0000,0x0000, 0x1E8C,0x0000,0x0000, -0x1E8F,0x0000,0x0000, 0xFBC0,0xB1B8,0x0000, 0xFBC0,0xB1B9,0x0000, -0xFBC0,0xB1BA,0x0000, 0xFBC0,0xB1BB,0x0000, 0xFBC0,0xB1BC,0x0000, -0xFBC0,0xB1BD,0x0000, 0xFBC0,0xB1BE,0x0000, 0xFBC0,0xB1BF,0x0000, -0xFBC0,0xB1C0,0x0000, 0xFBC0,0xB1C1,0x0000, 0xFBC0,0xB1C2,0x0000, -0xFBC0,0xB1C3,0x0000, 0xFBC0,0xB1C4,0x0000, 0xFBC0,0xB1C5,0x0000, -0xFBC0,0xB1C6,0x0000, 0xFBC0,0xB1C7,0x0000, 0xFBC0,0xB1C8,0x0000, -0xFBC0,0xB1C9,0x0000, 0xFBC0,0xB1CA,0x0000, 0xFBC0,0xB1CB,0x0000, -0xFBC0,0xB1CC,0x0000, 0xFBC0,0xB1CD,0x0000, 0xFBC0,0xB1CE,0x0000, -0xFBC0,0xB1CF,0x0000, 0xFBC0,0xB1D0,0x0000, 0xFBC0,0xB1D1,0x0000, -0xFBC0,0xB1D2,0x0000, 0xFBC0,0xB1D3,0x0000, 0xFBC0,0xB1D4,0x0000, -0xFBC0,0xB1D5,0x0000, 0xFBC0,0xB1D6,0x0000, 0xFBC0,0xB1D7,0x0000, -0xFBC0,0xB1D8,0x0000, 0xFBC0,0xB1D9,0x0000, 0xFBC0,0xB1DA,0x0000, -0xFBC0,0xB1DB,0x0000, 0xFBC0,0xB1DC,0x0000, 0xFBC0,0xB1DD,0x0000, -0xFBC0,0xB1DE,0x0000, 0xFBC0,0xB1DF,0x0000, 0xFBC0,0xB1E0,0x0000, -0xFBC0,0xB1E1,0x0000, 0xFBC0,0xB1E2,0x0000, 0xFBC0,0xB1E3,0x0000, -0xFBC0,0xB1E4,0x0000, 0xFBC0,0xB1E5,0x0000, 0xFBC0,0xB1E6,0x0000, -0xFBC0,0xB1E7,0x0000, 0xFBC0,0xB1E8,0x0000, 0xFBC0,0xB1E9,0x0000, -0xFBC0,0xB1EA,0x0000, 0xFBC0,0xB1EB,0x0000, 0xFBC0,0xB1EC,0x0000, -0xFBC0,0xB1ED,0x0000, 0xFBC0,0xB1EE,0x0000, 0xFBC0,0xB1EF,0x0000, -0x1E59,0x0000,0x0000, 0x1E5D,0x0000,0x0000, 0x1E5E,0x0000,0x0000, -0x1E65,0x0000,0x0000, 0x1E68,0x0000,0x0000, 0x1E6B,0x0000,0x0000, -0x1E6C,0x0000,0x0000, 0x1E6D,0x0000,0x0000, 0x1E6E,0x0000,0x0000, -0x1E6F,0x0000,0x0000, 0x1E72,0x0000,0x0000, 0x1E78,0x0000,0x0000, -0x1E79,0x0000,0x0000, 0x1E7A,0x0000,0x0000, 0x1E7B,0x0000,0x0000, -0x1E7C,0x0000,0x0000 }; - -uint16 page032data[]= { /* 3200 (8 weights per char) */ -0x0288,0x1D62,0x0289,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D64,0x0289,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D65,0x0289,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D67,0x0289,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D68,0x0289,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D69,0x0289,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D6B,0x0289,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D6D,0x0289,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D6E,0x0289,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D70,0x0289,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D71,0x0289,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D72,0x0289,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D73,0x0289,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D74,0x0289,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D62,0x1DBE,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D64,0x1DBE,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D65,0x1DBE,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D67,0x1DBE,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D68,0x1DBE,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D69,0x1DBE,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D6B,0x1DBE,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D6D,0x1DBE,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D6E,0x1DBE,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D70,0x1DBE,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D71,0x1DBE,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D72,0x1DBE,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D73,0x1DBE,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D74,0x1DBE,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D6E,0x1DCB,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0x1D6D,0x1DC6,0x1D6E,0x1DC2,0x1E03,0x0289,0x0000, -0x0288,0x1D6D,0x1DC6,0x1D74,0x1DCB,0x0289,0x0000,0x0000, -0xFBC0,0xB21F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xCE00,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xCE8C,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xCE09,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xD6DB,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xCE94,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xD16D,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xCE03,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xD16B,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xCE5D,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xD341,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xE708,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xF06B,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xEC34,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xE728,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB41,0x91D1,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xD71F,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xE5E5,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xE82A,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xE709,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xF93E,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xD40D,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xF279,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB41,0x8CA1,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xF95D,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xD2B4,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xCEE3,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xD47C,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xDB66,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xF6E3,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xCF01,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB41,0x8CC7,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xD354,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xF96D,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB40,0xCF11,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB41,0x81EA,0x0289,0x0000,0x0000,0x0000,0x0000, -0x0288,0xFB41,0x81F3,0x0289,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xB244,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xB245,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xB246,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xB247,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xB248,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xB249,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xB24A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xB24B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xB24C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xB24D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xB24E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xB24F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0FA7,0x1002,0x0E8B,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E31,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E32,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0E29,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0E2A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0E2B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0E2C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0E2D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0E2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D62,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D64,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D65,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D67,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D68,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D6B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D6D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D6E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D70,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D72,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D73,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D74,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D62,0x1DBE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D64,0x1DBE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D65,0x1DBE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D67,0x1DBE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D68,0x1DBE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D69,0x1DBE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D6B,0x1DBE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D6D,0x1DBE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D6E,0x1DBE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D70,0x1DBE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D71,0x1DBE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D72,0x1DBE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D73,0x1DBE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D74,0x1DBE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1D70,0x1DBE,0x1E0F,0x1D62,0x1DC6,0x0000,0x0000,0x0000, -0x1D6E,0x1DCB,0x1D6D,0x1DD1,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xB27E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0DC4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xCE00,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xCE8C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xCE09,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD6DB,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xCE94,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD16D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xCE03,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD16B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xCE5D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD341,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xE708,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xF06B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xEC34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xE728,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB41,0x91D1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD71F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xE82A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xE709,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xF93E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD40D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xF279,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB41,0x8CA1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xF95D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD2B4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xF9D8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xF537,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD973,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB41,0x9069,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD12A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD370,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xECE8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB41,0x9805,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xCF11,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD199,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xEB63,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xCE0A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xCE2D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xCE0B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xDDE6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD3F3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD33B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xDB97,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xDB66,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xF6E3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xCF01,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB41,0x8CC7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD354,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD91C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0E2F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0E30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0E31,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0E32,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0x0E29,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0x0E2A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0x0E2B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0x0E2C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0x0E2D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0x0E2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0x0E2F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0x0E30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0x0E31,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0x0E32,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2E,0x0E29,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0xFB40,0xE708,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0xFB40,0xE708,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0xFB40,0xE708,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0xFB40,0xE708,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2E,0xFB40,0xE708,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2F,0xFB40,0xE708,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E30,0xFB40,0xE708,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E31,0xFB40,0xE708,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E32,0xFB40,0xE708,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E29,0xFB40,0xE708,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2A,0xFB40,0xE708,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2B,0xFB40,0xE708,0x0000,0x0000,0x0000,0x0000, -0x0EE1,0x0EC1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E8B,0x0FC0,0x0EC1,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E8B,0x1044,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F2E,0x1002,0x0E6D,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E52,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E53,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E54,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E56,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E57,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E58,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E59,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E5A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E5B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E5C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E5D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E5E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E5F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E60,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E61,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E62,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E63,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E64,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E65,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E66,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E67,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E68,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E70,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E72,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E73,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E74,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E75,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E76,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E77,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E78,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E79,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E7A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E7B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E7C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E7D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E7E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E7F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E80,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC0,0xB2FF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 -}; - -uint16 page033data[]= { /* 3300 (9 weights per char) */ -0x1E52,0x1E6B,0x0E0B,0x1E65,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E52,0x1E7A,0x1E6D,0x1E52,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E52,0x1E81,0x1E6E,0x1E52,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E52,0x0E0B,0x1E7A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E53,0x1E67,0x1E81,0x1E59,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E53,0x1E81,0x1E62,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E54,0x1E56,0x1E81,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E55,0x1E5E,0x1E59,0x0E0B,0x1E65,0x0000,0x0000,0x0000,0x0000, -0x1E55,0x0E0B,0x1E57,0x0E0B,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E56,0x1E81,0x1E5E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E56,0x0E0B,0x1E72,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E57,0x1E53,0x1E79,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E57,0x1E78,0x1E63,0x1E65,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E57,0x1E7C,0x1E79,0x0E0B,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E57,0x1E7C,0x1E81,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E57,0x1E81,0x1E70,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E58,0x1E57,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E58,0x1E67,0x0E0B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E58,0x1E76,0x1E79,0x0E0B,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E58,0x1E7A,0x1E61,0x0E0B,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E58,0x1E7C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E58,0x1E7C,0x1E59,0x1E78,0x1E72,0x0000,0x0000,0x0000,0x0000, -0x1E58,0x1E7C,0x1E73,0x0E0B,0x1E65,0x1E7A,0x0000,0x0000,0x0000, -0x1E58,0x1E7C,0x1E7D,0x1E63,0x1E65,0x0000,0x0000,0x0000,0x0000, -0x1E59,0x1E78,0x1E72,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E59,0x1E78,0x1E72,0x1E65,0x1E81,0x0000,0x0000,0x0000,0x0000, -0x1E59,0x1E7A,0x1E5F,0x1E53,0x1E7C,0x0000,0x0000,0x0000,0x0000, -0x1E59,0x1E7C,0x0E0B,0x1E69,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E5A,0x0E0B,0x1E5E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E5B,0x1E7A,0x1E66,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E5B,0x0E0B,0x1E6F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E5C,0x1E53,0x1E59,0x1E7A,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E5C,0x1E81,0x1E62,0x0E0B,0x1E72,0x0000,0x0000,0x0000,0x0000, -0x1E5D,0x1E79,0x1E81,0x1E59,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E5F,0x1E81,0x1E62,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E5F,0x1E81,0x1E65,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E61,0x0E0B,0x1E5E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E64,0x1E5D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E65,0x1E7A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E65,0x1E81,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E66,0x1E6A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6A,0x1E63,0x1E65,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6B,0x1E53,0x1E63,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6B,0x0E0B,0x1E5F,0x1E81,0x1E65,0x0000,0x0000,0x0000,0x0000, -0x1E6B,0x0E0B,0x1E63,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6B,0x0E0B,0x1E7B,0x1E7A,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6C,0x1E52,0x1E5E,0x1E65,0x1E7A,0x0000,0x0000,0x0000,0x0000, -0x1E6C,0x1E59,0x1E7A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6C,0x1E5B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6C,0x1E7A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6D,0x1E52,0x1E78,0x1E63,0x1E65,0x0000,0x0000,0x0000,0x0000, -0x1E6D,0x1E53,0x0E0B,0x1E65,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6D,0x1E63,0x1E5D,0x1E55,0x1E7A,0x0000,0x0000,0x0000,0x0000, -0x1E6D,0x1E78,0x1E81,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6E,0x1E59,0x1E61,0x0E0B,0x1E7A,0x0000,0x0000,0x0000,0x0000, -0x1E6E,0x1E60,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6E,0x1E67,0x1E6C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6E,0x1E7A,0x1E63,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6E,0x1E81,0x1E5E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6E,0x0E0B,0x1E5D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6E,0x0E0B,0x1E61,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6F,0x1E53,0x1E81,0x1E65,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6F,0x1E7A,0x1E65,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6F,0x1E81,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6F,0x1E81,0x1E65,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6F,0x0E0B,0x1E7A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E6F,0x0E0B,0x1E81,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E70,0x1E53,0x1E59,0x1E7C,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E70,0x1E53,0x1E7A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E70,0x1E63,0x1E6B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E70,0x1E7A,0x1E59,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E70,0x1E81,0x1E5D,0x1E77,0x1E81,0x0000,0x0000,0x0000,0x0000, -0x1E71,0x1E59,0x1E7C,0x1E81,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E71,0x1E79,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E71,0x1E79,0x1E6B,0x0E0B,0x1E7A,0x0000,0x0000,0x0000,0x0000, -0x1E73,0x1E57,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E73,0x1E57,0x1E65,0x1E81,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E73,0x0E0B,0x1E65,0x1E7A,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E75,0x0E0B,0x1E65,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E75,0x0E0B,0x1E7A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E76,0x1E52,0x1E81,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E79,0x1E63,0x1E65,0x1E7A,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E79,0x1E78,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E7A,0x1E6C,0x0E0B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E7A,0x0E0B,0x1E6D,0x1E7A,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E7B,0x1E72,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1E7B,0x1E81,0x1E65,0x1E5A,0x1E81,0x0000,0x0000,0x0000,0x0000, -0x1E7D,0x1E63,0x1E65,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E29,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2E,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2F,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E30,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E31,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E32,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E29,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2A,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2B,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2C,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2D,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2E,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2F,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E30,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E31,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E32,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E29,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2A,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2B,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2C,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2D,0xFB40,0xF0B9,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0EE1,0x0FA7,0x0E33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E6D,0x0E33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E33,0x101F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E4A,0x0E33,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F82,0x1044,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0FA7,0x0E60,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E6D,0x0F5B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E6D,0x0F5B,0x0E2B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E6D,0x0F5B,0x0E2C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0EFB,0x101F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xDE73,0xFB40,0xE210,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xE62D,0xFB40,0xD48C,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xD927,0xFB40,0xEB63,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xE60E,0xFB40,0xECBB,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFB40,0xE82A,0xFB40,0xDF0F,0xFB40,0xCF1A,0xFB40,0xF93E,0x0000, -0x0FA7,0x0E33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F64,0x0E33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x10F8,0x0E33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0E33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0E33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0E4A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0E4A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0EC1,0x0E4A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E60,0x0E33,0x0F2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0E60,0x0E33,0x0F2E,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0FA7,0x0EB9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F64,0x0EB9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x10F8,0x0EB9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x10F8,0x0EC1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0EC1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0EC1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0EE1,0x106A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0EE1,0x106A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0EE1,0x106A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0EC1,0x0EE1,0x106A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1002,0x0EE1,0x106A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x10F8,0x0F2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0F2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E6D,0x0F2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0F2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0EB9,0x0F5B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F64,0x0F5B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x10F8,0x0F5B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0F5B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E60,0x0F5B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0F5B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0F5B,0x0E2B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E60,0x0F5B,0x0E2B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0E2B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0F5B,0x0E2B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0F5B,0x0E2C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E60,0x0F5B,0x0E2C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0E2C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0F5B,0x0E2C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0437,0x0FEA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0437,0x0FEA,0x0E2B,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0FA7,0x0E33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0FA7,0x0E33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0FA7,0x0E33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0EC1,0x0FA7,0x0E33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0FC0,0x0E33,0x0E6D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0FC0,0x0E33,0x0E6D,0x0437,0x0FEA,0x0000,0x0000,0x0000,0x0000, -0x0FC0,0x0E33,0x0E6D,0x0437,0x0FEA,0x0E2B,0x0000,0x0000,0x0000, -0x0FA7,0x0FEA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F64,0x0FEA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x10F8,0x0FEA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0FEA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0FA7,0x1044,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F64,0x1044,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x10F8,0x1044,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x1044,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x1044,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x1044,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0FA7,0x1051,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F64,0x1051,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x10F8,0x1051,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x1051,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x1051,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x1051,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x1109,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x1109,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E33,0x025D,0x0F5B,0x025D,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E4A,0x0FB4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E60,0x0E60,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E60,0x0E6D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E60,0x0437,0x0F21,0x0EC1,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E60,0x0F82,0x025D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E6D,0x0E4A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0EC1,0x105E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0EE1,0x0E33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0EE1,0x0FA7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0EFB,0x0F64,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0F21,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x0F5B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F21,0x1002,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F2E,0x0F5B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F2E,0x0F64,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F2E,0x0F82,0x0EC1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F2E,0x105A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0E4A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0EFB,0x0F2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0F5B,0x0F82,0x0F2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0FA7,0x0EE1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0FA7,0x025D,0x0F5B,0x025D,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0FA7,0x0FA7,0x0F5B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0FA7,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0FEA,0x0FC0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0FEA,0x1044,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1051,0x0E4A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1044,0x0437,0x0F5B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E33,0x0437,0x0F5B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2D,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2E,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2F,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E30,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E31,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E32,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E29,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2A,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2B,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2C,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2D,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2E,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E2F,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E30,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E31,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2A,0x0E32,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E29,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2A,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2B,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2C,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2D,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2E,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E2F,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E30,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E31,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2B,0x0E32,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0E29,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0E2C,0x0E2A,0xFB40,0xE5E5,0x0000,0x0000,0x0000,0x0000,0x0000, -0x0EC1,0x0E33,0x0F2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 -}; - -uint16 page04Ddata[]= { /* 4D00 (3 weights per char) */ -0xFB80,0xCD00,0x0000, 0xFB80,0xCD01,0x0000, 0xFB80,0xCD02,0x0000, -0xFB80,0xCD03,0x0000, 0xFB80,0xCD04,0x0000, 0xFB80,0xCD05,0x0000, -0xFB80,0xCD06,0x0000, 0xFB80,0xCD07,0x0000, 0xFB80,0xCD08,0x0000, -0xFB80,0xCD09,0x0000, 0xFB80,0xCD0A,0x0000, 0xFB80,0xCD0B,0x0000, -0xFB80,0xCD0C,0x0000, 0xFB80,0xCD0D,0x0000, 0xFB80,0xCD0E,0x0000, -0xFB80,0xCD0F,0x0000, 0xFB80,0xCD10,0x0000, 0xFB80,0xCD11,0x0000, -0xFB80,0xCD12,0x0000, 0xFB80,0xCD13,0x0000, 0xFB80,0xCD14,0x0000, -0xFB80,0xCD15,0x0000, 0xFB80,0xCD16,0x0000, 0xFB80,0xCD17,0x0000, -0xFB80,0xCD18,0x0000, 0xFB80,0xCD19,0x0000, 0xFB80,0xCD1A,0x0000, -0xFB80,0xCD1B,0x0000, 0xFB80,0xCD1C,0x0000, 0xFB80,0xCD1D,0x0000, -0xFB80,0xCD1E,0x0000, 0xFB80,0xCD1F,0x0000, 0xFB80,0xCD20,0x0000, -0xFB80,0xCD21,0x0000, 0xFB80,0xCD22,0x0000, 0xFB80,0xCD23,0x0000, -0xFB80,0xCD24,0x0000, 0xFB80,0xCD25,0x0000, 0xFB80,0xCD26,0x0000, -0xFB80,0xCD27,0x0000, 0xFB80,0xCD28,0x0000, 0xFB80,0xCD29,0x0000, -0xFB80,0xCD2A,0x0000, 0xFB80,0xCD2B,0x0000, 0xFB80,0xCD2C,0x0000, -0xFB80,0xCD2D,0x0000, 0xFB80,0xCD2E,0x0000, 0xFB80,0xCD2F,0x0000, -0xFB80,0xCD30,0x0000, 0xFB80,0xCD31,0x0000, 0xFB80,0xCD32,0x0000, -0xFB80,0xCD33,0x0000, 0xFB80,0xCD34,0x0000, 0xFB80,0xCD35,0x0000, -0xFB80,0xCD36,0x0000, 0xFB80,0xCD37,0x0000, 0xFB80,0xCD38,0x0000, -0xFB80,0xCD39,0x0000, 0xFB80,0xCD3A,0x0000, 0xFB80,0xCD3B,0x0000, -0xFB80,0xCD3C,0x0000, 0xFB80,0xCD3D,0x0000, 0xFB80,0xCD3E,0x0000, -0xFB80,0xCD3F,0x0000, 0xFB80,0xCD40,0x0000, 0xFB80,0xCD41,0x0000, -0xFB80,0xCD42,0x0000, 0xFB80,0xCD43,0x0000, 0xFB80,0xCD44,0x0000, -0xFB80,0xCD45,0x0000, 0xFB80,0xCD46,0x0000, 0xFB80,0xCD47,0x0000, -0xFB80,0xCD48,0x0000, 0xFB80,0xCD49,0x0000, 0xFB80,0xCD4A,0x0000, -0xFB80,0xCD4B,0x0000, 0xFB80,0xCD4C,0x0000, 0xFB80,0xCD4D,0x0000, -0xFB80,0xCD4E,0x0000, 0xFB80,0xCD4F,0x0000, 0xFB80,0xCD50,0x0000, -0xFB80,0xCD51,0x0000, 0xFB80,0xCD52,0x0000, 0xFB80,0xCD53,0x0000, -0xFB80,0xCD54,0x0000, 0xFB80,0xCD55,0x0000, 0xFB80,0xCD56,0x0000, -0xFB80,0xCD57,0x0000, 0xFB80,0xCD58,0x0000, 0xFB80,0xCD59,0x0000, -0xFB80,0xCD5A,0x0000, 0xFB80,0xCD5B,0x0000, 0xFB80,0xCD5C,0x0000, -0xFB80,0xCD5D,0x0000, 0xFB80,0xCD5E,0x0000, 0xFB80,0xCD5F,0x0000, -0xFB80,0xCD60,0x0000, 0xFB80,0xCD61,0x0000, 0xFB80,0xCD62,0x0000, -0xFB80,0xCD63,0x0000, 0xFB80,0xCD64,0x0000, 0xFB80,0xCD65,0x0000, -0xFB80,0xCD66,0x0000, 0xFB80,0xCD67,0x0000, 0xFB80,0xCD68,0x0000, -0xFB80,0xCD69,0x0000, 0xFB80,0xCD6A,0x0000, 0xFB80,0xCD6B,0x0000, -0xFB80,0xCD6C,0x0000, 0xFB80,0xCD6D,0x0000, 0xFB80,0xCD6E,0x0000, -0xFB80,0xCD6F,0x0000, 0xFB80,0xCD70,0x0000, 0xFB80,0xCD71,0x0000, -0xFB80,0xCD72,0x0000, 0xFB80,0xCD73,0x0000, 0xFB80,0xCD74,0x0000, -0xFB80,0xCD75,0x0000, 0xFB80,0xCD76,0x0000, 0xFB80,0xCD77,0x0000, -0xFB80,0xCD78,0x0000, 0xFB80,0xCD79,0x0000, 0xFB80,0xCD7A,0x0000, -0xFB80,0xCD7B,0x0000, 0xFB80,0xCD7C,0x0000, 0xFB80,0xCD7D,0x0000, -0xFB80,0xCD7E,0x0000, 0xFB80,0xCD7F,0x0000, 0xFB80,0xCD80,0x0000, -0xFB80,0xCD81,0x0000, 0xFB80,0xCD82,0x0000, 0xFB80,0xCD83,0x0000, -0xFB80,0xCD84,0x0000, 0xFB80,0xCD85,0x0000, 0xFB80,0xCD86,0x0000, -0xFB80,0xCD87,0x0000, 0xFB80,0xCD88,0x0000, 0xFB80,0xCD89,0x0000, -0xFB80,0xCD8A,0x0000, 0xFB80,0xCD8B,0x0000, 0xFB80,0xCD8C,0x0000, -0xFB80,0xCD8D,0x0000, 0xFB80,0xCD8E,0x0000, 0xFB80,0xCD8F,0x0000, -0xFB80,0xCD90,0x0000, 0xFB80,0xCD91,0x0000, 0xFB80,0xCD92,0x0000, -0xFB80,0xCD93,0x0000, 0xFB80,0xCD94,0x0000, 0xFB80,0xCD95,0x0000, -0xFB80,0xCD96,0x0000, 0xFB80,0xCD97,0x0000, 0xFB80,0xCD98,0x0000, -0xFB80,0xCD99,0x0000, 0xFB80,0xCD9A,0x0000, 0xFB80,0xCD9B,0x0000, -0xFB80,0xCD9C,0x0000, 0xFB80,0xCD9D,0x0000, 0xFB80,0xCD9E,0x0000, -0xFB80,0xCD9F,0x0000, 0xFB80,0xCDA0,0x0000, 0xFB80,0xCDA1,0x0000, -0xFB80,0xCDA2,0x0000, 0xFB80,0xCDA3,0x0000, 0xFB80,0xCDA4,0x0000, -0xFB80,0xCDA5,0x0000, 0xFB80,0xCDA6,0x0000, 0xFB80,0xCDA7,0x0000, -0xFB80,0xCDA8,0x0000, 0xFB80,0xCDA9,0x0000, 0xFB80,0xCDAA,0x0000, -0xFB80,0xCDAB,0x0000, 0xFB80,0xCDAC,0x0000, 0xFB80,0xCDAD,0x0000, -0xFB80,0xCDAE,0x0000, 0xFB80,0xCDAF,0x0000, 0xFB80,0xCDB0,0x0000, -0xFB80,0xCDB1,0x0000, 0xFB80,0xCDB2,0x0000, 0xFB80,0xCDB3,0x0000, -0xFB80,0xCDB4,0x0000, 0xFB80,0xCDB5,0x0000, 0xFBC0,0xCDB6,0x0000, -0xFBC0,0xCDB7,0x0000, 0xFBC0,0xCDB8,0x0000, 0xFBC0,0xCDB9,0x0000, -0xFBC0,0xCDBA,0x0000, 0xFBC0,0xCDBB,0x0000, 0xFBC0,0xCDBC,0x0000, -0xFBC0,0xCDBD,0x0000, 0xFBC0,0xCDBE,0x0000, 0xFBC0,0xCDBF,0x0000, -0x0B37,0x0000,0x0000, 0x0B38,0x0000,0x0000, 0x0B39,0x0000,0x0000, -0x0B3A,0x0000,0x0000, 0x0B3B,0x0000,0x0000, 0x0B3C,0x0000,0x0000, -0x0B3D,0x0000,0x0000, 0x0B3E,0x0000,0x0000, 0x0B3F,0x0000,0x0000, -0x0B40,0x0000,0x0000, 0x0B41,0x0000,0x0000, 0x0B42,0x0000,0x0000, -0x0B43,0x0000,0x0000, 0x0B44,0x0000,0x0000, 0x0B45,0x0000,0x0000, -0x0B46,0x0000,0x0000, 0x0B47,0x0000,0x0000, 0x0B48,0x0000,0x0000, -0x0B49,0x0000,0x0000, 0x0B4A,0x0000,0x0000, 0x0B4B,0x0000,0x0000, -0x0B4C,0x0000,0x0000, 0x0B4D,0x0000,0x0000, 0x0B4E,0x0000,0x0000, -0x0B4F,0x0000,0x0000, 0x0B50,0x0000,0x0000, 0x0B51,0x0000,0x0000, -0x0B52,0x0000,0x0000, 0x0B53,0x0000,0x0000, 0x0B54,0x0000,0x0000, -0x0B55,0x0000,0x0000, 0x0B56,0x0000,0x0000, 0x0B57,0x0000,0x0000, -0x0B58,0x0000,0x0000, 0x0B59,0x0000,0x0000, 0x0B5A,0x0000,0x0000, -0x0B5B,0x0000,0x0000, 0x0B5C,0x0000,0x0000, 0x0B5D,0x0000,0x0000, -0x0B5E,0x0000,0x0000, 0x0B5F,0x0000,0x0000, 0x0B60,0x0000,0x0000, -0x0B61,0x0000,0x0000, 0x0B62,0x0000,0x0000, 0x0B63,0x0000,0x0000, -0x0B64,0x0000,0x0000, 0x0B65,0x0000,0x0000, 0x0B66,0x0000,0x0000, -0x0B67,0x0000,0x0000, 0x0B68,0x0000,0x0000, 0x0B69,0x0000,0x0000, -0x0B6A,0x0000,0x0000, 0x0B6B,0x0000,0x0000, 0x0B6C,0x0000,0x0000, -0x0B6D,0x0000,0x0000, 0x0B6E,0x0000,0x0000, 0x0B6F,0x0000,0x0000, -0x0B70,0x0000,0x0000, 0x0B71,0x0000,0x0000, 0x0B72,0x0000,0x0000, -0x0B73,0x0000,0x0000, 0x0B74,0x0000,0x0000, 0x0B75,0x0000,0x0000, -0x0B76,0x0000,0x0000 }; - -uint16 page0A0data[]= { /* A000 (2 weights per char) */ -0x1EB1,0x0000, 0x1EB2,0x0000, 0x1EB3,0x0000, 0x1EB4,0x0000, -0x1EB5,0x0000, 0x1EB6,0x0000, 0x1EB7,0x0000, 0x1EB8,0x0000, -0x1EB9,0x0000, 0x1EBA,0x0000, 0x1EBB,0x0000, 0x1EBC,0x0000, -0x1EBD,0x0000, 0x1EBE,0x0000, 0x1EBF,0x0000, 0x1EC0,0x0000, -0x1EC1,0x0000, 0x1EC2,0x0000, 0x1EC3,0x0000, 0x1EC4,0x0000, -0x1EC5,0x0000, 0x1EC6,0x0000, 0x1EC7,0x0000, 0x1EC8,0x0000, -0x1EC9,0x0000, 0x1ECA,0x0000, 0x1ECB,0x0000, 0x1ECC,0x0000, -0x1ECD,0x0000, 0x1ECE,0x0000, 0x1ECF,0x0000, 0x1ED0,0x0000, -0x1ED1,0x0000, 0x1ED2,0x0000, 0x1ED3,0x0000, 0x1ED4,0x0000, -0x1ED5,0x0000, 0x1ED6,0x0000, 0x1ED7,0x0000, 0x1ED8,0x0000, -0x1ED9,0x0000, 0x1EDA,0x0000, 0x1EDB,0x0000, 0x1EDC,0x0000, -0x1EDD,0x0000, 0x1EDE,0x0000, 0x1EDF,0x0000, 0x1EE0,0x0000, -0x1EE1,0x0000, 0x1EE2,0x0000, 0x1EE3,0x0000, 0x1EE4,0x0000, -0x1EE5,0x0000, 0x1EE6,0x0000, 0x1EE7,0x0000, 0x1EE8,0x0000, -0x1EE9,0x0000, 0x1EEA,0x0000, 0x1EEB,0x0000, 0x1EEC,0x0000, -0x1EED,0x0000, 0x1EEE,0x0000, 0x1EEF,0x0000, 0x1EF0,0x0000, -0x1EF1,0x0000, 0x1EF2,0x0000, 0x1EF3,0x0000, 0x1EF4,0x0000, -0x1EF5,0x0000, 0x1EF6,0x0000, 0x1EF7,0x0000, 0x1EF8,0x0000, -0x1EF9,0x0000, 0x1EFA,0x0000, 0x1EFB,0x0000, 0x1EFC,0x0000, -0x1EFD,0x0000, 0x1EFE,0x0000, 0x1EFF,0x0000, 0x1F00,0x0000, -0x1F01,0x0000, 0x1F02,0x0000, 0x1F03,0x0000, 0x1F04,0x0000, -0x1F05,0x0000, 0x1F06,0x0000, 0x1F07,0x0000, 0x1F08,0x0000, -0x1F09,0x0000, 0x1F0A,0x0000, 0x1F0B,0x0000, 0x1F0C,0x0000, -0x1F0D,0x0000, 0x1F0E,0x0000, 0x1F0F,0x0000, 0x1F10,0x0000, -0x1F11,0x0000, 0x1F12,0x0000, 0x1F13,0x0000, 0x1F14,0x0000, -0x1F15,0x0000, 0x1F16,0x0000, 0x1F17,0x0000, 0x1F18,0x0000, -0x1F19,0x0000, 0x1F1A,0x0000, 0x1F1B,0x0000, 0x1F1C,0x0000, -0x1F1D,0x0000, 0x1F1E,0x0000, 0x1F1F,0x0000, 0x1F20,0x0000, -0x1F21,0x0000, 0x1F22,0x0000, 0x1F23,0x0000, 0x1F24,0x0000, -0x1F25,0x0000, 0x1F26,0x0000, 0x1F27,0x0000, 0x1F28,0x0000, -0x1F29,0x0000, 0x1F2A,0x0000, 0x1F2B,0x0000, 0x1F2C,0x0000, -0x1F2D,0x0000, 0x1F2E,0x0000, 0x1F2F,0x0000, 0x1F30,0x0000, -0x1F31,0x0000, 0x1F32,0x0000, 0x1F33,0x0000, 0x1F34,0x0000, -0x1F35,0x0000, 0x1F36,0x0000, 0x1F37,0x0000, 0x1F38,0x0000, -0x1F39,0x0000, 0x1F3A,0x0000, 0x1F3B,0x0000, 0x1F3C,0x0000, -0x1F3D,0x0000, 0x1F3E,0x0000, 0x1F3F,0x0000, 0x1F40,0x0000, -0x1F41,0x0000, 0x1F42,0x0000, 0x1F43,0x0000, 0x1F44,0x0000, -0x1F45,0x0000, 0x1F46,0x0000, 0x1F47,0x0000, 0x1F48,0x0000, -0x1F49,0x0000, 0x1F4A,0x0000, 0x1F4B,0x0000, 0x1F4C,0x0000, -0x1F4D,0x0000, 0x1F4E,0x0000, 0x1F4F,0x0000, 0x1F50,0x0000, -0x1F51,0x0000, 0x1F52,0x0000, 0x1F53,0x0000, 0x1F54,0x0000, -0x1F55,0x0000, 0x1F56,0x0000, 0x1F57,0x0000, 0x1F58,0x0000, -0x1F59,0x0000, 0x1F5A,0x0000, 0x1F5B,0x0000, 0x1F5C,0x0000, -0x1F5D,0x0000, 0x1F5E,0x0000, 0x1F5F,0x0000, 0x1F60,0x0000, -0x1F61,0x0000, 0x1F62,0x0000, 0x1F63,0x0000, 0x1F64,0x0000, -0x1F65,0x0000, 0x1F66,0x0000, 0x1F67,0x0000, 0x1F68,0x0000, -0x1F69,0x0000, 0x1F6A,0x0000, 0x1F6B,0x0000, 0x1F6C,0x0000, -0x1F6D,0x0000, 0x1F6E,0x0000, 0x1F6F,0x0000, 0x1F70,0x0000, -0x1F71,0x0000, 0x1F72,0x0000, 0x1F73,0x0000, 0x1F74,0x0000, -0x1F75,0x0000, 0x1F76,0x0000, 0x1F77,0x0000, 0x1F78,0x0000, -0x1F79,0x0000, 0x1F7A,0x0000, 0x1F7B,0x0000, 0x1F7C,0x0000, -0x1F7D,0x0000, 0x1F7E,0x0000, 0x1F7F,0x0000, 0x1F80,0x0000, -0x1F81,0x0000, 0x1F82,0x0000, 0x1F83,0x0000, 0x1F84,0x0000, -0x1F85,0x0000, 0x1F86,0x0000, 0x1F87,0x0000, 0x1F88,0x0000, -0x1F89,0x0000, 0x1F8A,0x0000, 0x1F8B,0x0000, 0x1F8C,0x0000, -0x1F8D,0x0000, 0x1F8E,0x0000, 0x1F8F,0x0000, 0x1F90,0x0000, -0x1F91,0x0000, 0x1F92,0x0000, 0x1F93,0x0000, 0x1F94,0x0000, -0x1F95,0x0000, 0x1F96,0x0000, 0x1F97,0x0000, 0x1F98,0x0000, -0x1F99,0x0000, 0x1F9A,0x0000, 0x1F9B,0x0000, 0x1F9C,0x0000, -0x1F9D,0x0000, 0x1F9E,0x0000, 0x1F9F,0x0000, 0x1FA0,0x0000, -0x1FA1,0x0000, 0x1FA2,0x0000, 0x1FA3,0x0000, 0x1FA4,0x0000, -0x1FA5,0x0000, 0x1FA6,0x0000, 0x1FA7,0x0000, 0x1FA8,0x0000, -0x1FA9,0x0000, 0x1FAA,0x0000, 0x1FAB,0x0000, 0x1FAC,0x0000, -0x1FAD,0x0000, 0x1FAE,0x0000, 0x1FAF,0x0000, 0x1FB0,0x0000 -}; - -uint16 page0A1data[]= { /* A100 (2 weights per char) */ -0x1FB1,0x0000, 0x1FB2,0x0000, 0x1FB3,0x0000, 0x1FB4,0x0000, -0x1FB5,0x0000, 0x1FB6,0x0000, 0x1FB7,0x0000, 0x1FB8,0x0000, -0x1FB9,0x0000, 0x1FBA,0x0000, 0x1FBB,0x0000, 0x1FBC,0x0000, -0x1FBD,0x0000, 0x1FBE,0x0000, 0x1FBF,0x0000, 0x1FC0,0x0000, -0x1FC1,0x0000, 0x1FC2,0x0000, 0x1FC3,0x0000, 0x1FC4,0x0000, -0x1FC5,0x0000, 0x1FC6,0x0000, 0x1FC7,0x0000, 0x1FC8,0x0000, -0x1FC9,0x0000, 0x1FCA,0x0000, 0x1FCB,0x0000, 0x1FCC,0x0000, -0x1FCD,0x0000, 0x1FCE,0x0000, 0x1FCF,0x0000, 0x1FD0,0x0000, -0x1FD1,0x0000, 0x1FD2,0x0000, 0x1FD3,0x0000, 0x1FD4,0x0000, -0x1FD5,0x0000, 0x1FD6,0x0000, 0x1FD7,0x0000, 0x1FD8,0x0000, -0x1FD9,0x0000, 0x1FDA,0x0000, 0x1FDB,0x0000, 0x1FDC,0x0000, -0x1FDD,0x0000, 0x1FDE,0x0000, 0x1FDF,0x0000, 0x1FE0,0x0000, -0x1FE1,0x0000, 0x1FE2,0x0000, 0x1FE3,0x0000, 0x1FE4,0x0000, -0x1FE5,0x0000, 0x1FE6,0x0000, 0x1FE7,0x0000, 0x1FE8,0x0000, -0x1FE9,0x0000, 0x1FEA,0x0000, 0x1FEB,0x0000, 0x1FEC,0x0000, -0x1FED,0x0000, 0x1FEE,0x0000, 0x1FEF,0x0000, 0x1FF0,0x0000, -0x1FF1,0x0000, 0x1FF2,0x0000, 0x1FF3,0x0000, 0x1FF4,0x0000, -0x1FF5,0x0000, 0x1FF6,0x0000, 0x1FF7,0x0000, 0x1FF8,0x0000, -0x1FF9,0x0000, 0x1FFA,0x0000, 0x1FFB,0x0000, 0x1FFC,0x0000, -0x1FFD,0x0000, 0x1FFE,0x0000, 0x1FFF,0x0000, 0x2000,0x0000, -0x2001,0x0000, 0x2002,0x0000, 0x2003,0x0000, 0x2004,0x0000, -0x2005,0x0000, 0x2006,0x0000, 0x2007,0x0000, 0x2008,0x0000, -0x2009,0x0000, 0x200A,0x0000, 0x200B,0x0000, 0x200C,0x0000, -0x200D,0x0000, 0x200E,0x0000, 0x200F,0x0000, 0x2010,0x0000, -0x2011,0x0000, 0x2012,0x0000, 0x2013,0x0000, 0x2014,0x0000, -0x2015,0x0000, 0x2016,0x0000, 0x2017,0x0000, 0x2018,0x0000, -0x2019,0x0000, 0x201A,0x0000, 0x201B,0x0000, 0x201C,0x0000, -0x201D,0x0000, 0x201E,0x0000, 0x201F,0x0000, 0x2020,0x0000, -0x2021,0x0000, 0x2022,0x0000, 0x2023,0x0000, 0x2024,0x0000, -0x2025,0x0000, 0x2026,0x0000, 0x2027,0x0000, 0x2028,0x0000, -0x2029,0x0000, 0x202A,0x0000, 0x202B,0x0000, 0x202C,0x0000, -0x202D,0x0000, 0x202E,0x0000, 0x202F,0x0000, 0x2030,0x0000, -0x2031,0x0000, 0x2032,0x0000, 0x2033,0x0000, 0x2034,0x0000, -0x2035,0x0000, 0x2036,0x0000, 0x2037,0x0000, 0x2038,0x0000, -0x2039,0x0000, 0x203A,0x0000, 0x203B,0x0000, 0x203C,0x0000, -0x203D,0x0000, 0x203E,0x0000, 0x203F,0x0000, 0x2040,0x0000, -0x2041,0x0000, 0x2042,0x0000, 0x2043,0x0000, 0x2044,0x0000, -0x2045,0x0000, 0x2046,0x0000, 0x2047,0x0000, 0x2048,0x0000, -0x2049,0x0000, 0x204A,0x0000, 0x204B,0x0000, 0x204C,0x0000, -0x204D,0x0000, 0x204E,0x0000, 0x204F,0x0000, 0x2050,0x0000, -0x2051,0x0000, 0x2052,0x0000, 0x2053,0x0000, 0x2054,0x0000, -0x2055,0x0000, 0x2056,0x0000, 0x2057,0x0000, 0x2058,0x0000, -0x2059,0x0000, 0x205A,0x0000, 0x205B,0x0000, 0x205C,0x0000, -0x205D,0x0000, 0x205E,0x0000, 0x205F,0x0000, 0x2060,0x0000, -0x2061,0x0000, 0x2062,0x0000, 0x2063,0x0000, 0x2064,0x0000, -0x2065,0x0000, 0x2066,0x0000, 0x2067,0x0000, 0x2068,0x0000, -0x2069,0x0000, 0x206A,0x0000, 0x206B,0x0000, 0x206C,0x0000, -0x206D,0x0000, 0x206E,0x0000, 0x206F,0x0000, 0x2070,0x0000, -0x2071,0x0000, 0x2072,0x0000, 0x2073,0x0000, 0x2074,0x0000, -0x2075,0x0000, 0x2076,0x0000, 0x2077,0x0000, 0x2078,0x0000, -0x2079,0x0000, 0x207A,0x0000, 0x207B,0x0000, 0x207C,0x0000, -0x207D,0x0000, 0x207E,0x0000, 0x207F,0x0000, 0x2080,0x0000, -0x2081,0x0000, 0x2082,0x0000, 0x2083,0x0000, 0x2084,0x0000, -0x2085,0x0000, 0x2086,0x0000, 0x2087,0x0000, 0x2088,0x0000, -0x2089,0x0000, 0x208A,0x0000, 0x208B,0x0000, 0x208C,0x0000, -0x208D,0x0000, 0x208E,0x0000, 0x208F,0x0000, 0x2090,0x0000, -0x2091,0x0000, 0x2092,0x0000, 0x2093,0x0000, 0x2094,0x0000, -0x2095,0x0000, 0x2096,0x0000, 0x2097,0x0000, 0x2098,0x0000, -0x2099,0x0000, 0x209A,0x0000, 0x209B,0x0000, 0x209C,0x0000, -0x209D,0x0000, 0x209E,0x0000, 0x209F,0x0000, 0x20A0,0x0000, -0x20A1,0x0000, 0x20A2,0x0000, 0x20A3,0x0000, 0x20A4,0x0000, -0x20A5,0x0000, 0x20A6,0x0000, 0x20A7,0x0000, 0x20A8,0x0000, -0x20A9,0x0000, 0x20AA,0x0000, 0x20AB,0x0000, 0x20AC,0x0000, -0x20AD,0x0000, 0x20AE,0x0000, 0x20AF,0x0000, 0x20B0,0x0000 -}; - -uint16 page0A2data[]= { /* A200 (2 weights per char) */ -0x20B1,0x0000, 0x20B2,0x0000, 0x20B3,0x0000, 0x20B4,0x0000, -0x20B5,0x0000, 0x20B6,0x0000, 0x20B7,0x0000, 0x20B8,0x0000, -0x20B9,0x0000, 0x20BA,0x0000, 0x20BB,0x0000, 0x20BC,0x0000, -0x20BD,0x0000, 0x20BE,0x0000, 0x20BF,0x0000, 0x20C0,0x0000, -0x20C1,0x0000, 0x20C2,0x0000, 0x20C3,0x0000, 0x20C4,0x0000, -0x20C5,0x0000, 0x20C6,0x0000, 0x20C7,0x0000, 0x20C8,0x0000, -0x20C9,0x0000, 0x20CA,0x0000, 0x20CB,0x0000, 0x20CC,0x0000, -0x20CD,0x0000, 0x20CE,0x0000, 0x20CF,0x0000, 0x20D0,0x0000, -0x20D1,0x0000, 0x20D2,0x0000, 0x20D3,0x0000, 0x20D4,0x0000, -0x20D5,0x0000, 0x20D6,0x0000, 0x20D7,0x0000, 0x20D8,0x0000, -0x20D9,0x0000, 0x20DA,0x0000, 0x20DB,0x0000, 0x20DC,0x0000, -0x20DD,0x0000, 0x20DE,0x0000, 0x20DF,0x0000, 0x20E0,0x0000, -0x20E1,0x0000, 0x20E2,0x0000, 0x20E3,0x0000, 0x20E4,0x0000, -0x20E5,0x0000, 0x20E6,0x0000, 0x20E7,0x0000, 0x20E8,0x0000, -0x20E9,0x0000, 0x20EA,0x0000, 0x20EB,0x0000, 0x20EC,0x0000, -0x20ED,0x0000, 0x20EE,0x0000, 0x20EF,0x0000, 0x20F0,0x0000, -0x20F1,0x0000, 0x20F2,0x0000, 0x20F3,0x0000, 0x20F4,0x0000, -0x20F5,0x0000, 0x20F6,0x0000, 0x20F7,0x0000, 0x20F8,0x0000, -0x20F9,0x0000, 0x20FA,0x0000, 0x20FB,0x0000, 0x20FC,0x0000, -0x20FD,0x0000, 0x20FE,0x0000, 0x20FF,0x0000, 0x2100,0x0000, -0x2101,0x0000, 0x2102,0x0000, 0x2103,0x0000, 0x2104,0x0000, -0x2105,0x0000, 0x2106,0x0000, 0x2107,0x0000, 0x2108,0x0000, -0x2109,0x0000, 0x210A,0x0000, 0x210B,0x0000, 0x210C,0x0000, -0x210D,0x0000, 0x210E,0x0000, 0x210F,0x0000, 0x2110,0x0000, -0x2111,0x0000, 0x2112,0x0000, 0x2113,0x0000, 0x2114,0x0000, -0x2115,0x0000, 0x2116,0x0000, 0x2117,0x0000, 0x2118,0x0000, -0x2119,0x0000, 0x211A,0x0000, 0x211B,0x0000, 0x211C,0x0000, -0x211D,0x0000, 0x211E,0x0000, 0x211F,0x0000, 0x2120,0x0000, -0x2121,0x0000, 0x2122,0x0000, 0x2123,0x0000, 0x2124,0x0000, -0x2125,0x0000, 0x2126,0x0000, 0x2127,0x0000, 0x2128,0x0000, -0x2129,0x0000, 0x212A,0x0000, 0x212B,0x0000, 0x212C,0x0000, -0x212D,0x0000, 0x212E,0x0000, 0x212F,0x0000, 0x2130,0x0000, -0x2131,0x0000, 0x2132,0x0000, 0x2133,0x0000, 0x2134,0x0000, -0x2135,0x0000, 0x2136,0x0000, 0x2137,0x0000, 0x2138,0x0000, -0x2139,0x0000, 0x213A,0x0000, 0x213B,0x0000, 0x213C,0x0000, -0x213D,0x0000, 0x213E,0x0000, 0x213F,0x0000, 0x2140,0x0000, -0x2141,0x0000, 0x2142,0x0000, 0x2143,0x0000, 0x2144,0x0000, -0x2145,0x0000, 0x2146,0x0000, 0x2147,0x0000, 0x2148,0x0000, -0x2149,0x0000, 0x214A,0x0000, 0x214B,0x0000, 0x214C,0x0000, -0x214D,0x0000, 0x214E,0x0000, 0x214F,0x0000, 0x2150,0x0000, -0x2151,0x0000, 0x2152,0x0000, 0x2153,0x0000, 0x2154,0x0000, -0x2155,0x0000, 0x2156,0x0000, 0x2157,0x0000, 0x2158,0x0000, -0x2159,0x0000, 0x215A,0x0000, 0x215B,0x0000, 0x215C,0x0000, -0x215D,0x0000, 0x215E,0x0000, 0x215F,0x0000, 0x2160,0x0000, -0x2161,0x0000, 0x2162,0x0000, 0x2163,0x0000, 0x2164,0x0000, -0x2165,0x0000, 0x2166,0x0000, 0x2167,0x0000, 0x2168,0x0000, -0x2169,0x0000, 0x216A,0x0000, 0x216B,0x0000, 0x216C,0x0000, -0x216D,0x0000, 0x216E,0x0000, 0x216F,0x0000, 0x2170,0x0000, -0x2171,0x0000, 0x2172,0x0000, 0x2173,0x0000, 0x2174,0x0000, -0x2175,0x0000, 0x2176,0x0000, 0x2177,0x0000, 0x2178,0x0000, -0x2179,0x0000, 0x217A,0x0000, 0x217B,0x0000, 0x217C,0x0000, -0x217D,0x0000, 0x217E,0x0000, 0x217F,0x0000, 0x2180,0x0000, -0x2181,0x0000, 0x2182,0x0000, 0x2183,0x0000, 0x2184,0x0000, -0x2185,0x0000, 0x2186,0x0000, 0x2187,0x0000, 0x2188,0x0000, -0x2189,0x0000, 0x218A,0x0000, 0x218B,0x0000, 0x218C,0x0000, -0x218D,0x0000, 0x218E,0x0000, 0x218F,0x0000, 0x2190,0x0000, -0x2191,0x0000, 0x2192,0x0000, 0x2193,0x0000, 0x2194,0x0000, -0x2195,0x0000, 0x2196,0x0000, 0x2197,0x0000, 0x2198,0x0000, -0x2199,0x0000, 0x219A,0x0000, 0x219B,0x0000, 0x219C,0x0000, -0x219D,0x0000, 0x219E,0x0000, 0x219F,0x0000, 0x21A0,0x0000, -0x21A1,0x0000, 0x21A2,0x0000, 0x21A3,0x0000, 0x21A4,0x0000, -0x21A5,0x0000, 0x21A6,0x0000, 0x21A7,0x0000, 0x21A8,0x0000, -0x21A9,0x0000, 0x21AA,0x0000, 0x21AB,0x0000, 0x21AC,0x0000, -0x21AD,0x0000, 0x21AE,0x0000, 0x21AF,0x0000, 0x21B0,0x0000 -}; - -uint16 page0A3data[]= { /* A300 (2 weights per char) */ -0x21B1,0x0000, 0x21B2,0x0000, 0x21B3,0x0000, 0x21B4,0x0000, -0x21B5,0x0000, 0x21B6,0x0000, 0x21B7,0x0000, 0x21B8,0x0000, -0x21B9,0x0000, 0x21BA,0x0000, 0x21BB,0x0000, 0x21BC,0x0000, -0x21BD,0x0000, 0x21BE,0x0000, 0x21BF,0x0000, 0x21C0,0x0000, -0x21C1,0x0000, 0x21C2,0x0000, 0x21C3,0x0000, 0x21C4,0x0000, -0x21C5,0x0000, 0x21C6,0x0000, 0x21C7,0x0000, 0x21C8,0x0000, -0x21C9,0x0000, 0x21CA,0x0000, 0x21CB,0x0000, 0x21CC,0x0000, -0x21CD,0x0000, 0x21CE,0x0000, 0x21CF,0x0000, 0x21D0,0x0000, -0x21D1,0x0000, 0x21D2,0x0000, 0x21D3,0x0000, 0x21D4,0x0000, -0x21D5,0x0000, 0x21D6,0x0000, 0x21D7,0x0000, 0x21D8,0x0000, -0x21D9,0x0000, 0x21DA,0x0000, 0x21DB,0x0000, 0x21DC,0x0000, -0x21DD,0x0000, 0x21DE,0x0000, 0x21DF,0x0000, 0x21E0,0x0000, -0x21E1,0x0000, 0x21E2,0x0000, 0x21E3,0x0000, 0x21E4,0x0000, -0x21E5,0x0000, 0x21E6,0x0000, 0x21E7,0x0000, 0x21E8,0x0000, -0x21E9,0x0000, 0x21EA,0x0000, 0x21EB,0x0000, 0x21EC,0x0000, -0x21ED,0x0000, 0x21EE,0x0000, 0x21EF,0x0000, 0x21F0,0x0000, -0x21F1,0x0000, 0x21F2,0x0000, 0x21F3,0x0000, 0x21F4,0x0000, -0x21F5,0x0000, 0x21F6,0x0000, 0x21F7,0x0000, 0x21F8,0x0000, -0x21F9,0x0000, 0x21FA,0x0000, 0x21FB,0x0000, 0x21FC,0x0000, -0x21FD,0x0000, 0x21FE,0x0000, 0x21FF,0x0000, 0x2200,0x0000, -0x2201,0x0000, 0x2202,0x0000, 0x2203,0x0000, 0x2204,0x0000, -0x2205,0x0000, 0x2206,0x0000, 0x2207,0x0000, 0x2208,0x0000, -0x2209,0x0000, 0x220A,0x0000, 0x220B,0x0000, 0x220C,0x0000, -0x220D,0x0000, 0x220E,0x0000, 0x220F,0x0000, 0x2210,0x0000, -0x2211,0x0000, 0x2212,0x0000, 0x2213,0x0000, 0x2214,0x0000, -0x2215,0x0000, 0x2216,0x0000, 0x2217,0x0000, 0x2218,0x0000, -0x2219,0x0000, 0x221A,0x0000, 0x221B,0x0000, 0x221C,0x0000, -0x221D,0x0000, 0x221E,0x0000, 0x221F,0x0000, 0x2220,0x0000, -0x2221,0x0000, 0x2222,0x0000, 0x2223,0x0000, 0x2224,0x0000, -0x2225,0x0000, 0x2226,0x0000, 0x2227,0x0000, 0x2228,0x0000, -0x2229,0x0000, 0x222A,0x0000, 0x222B,0x0000, 0x222C,0x0000, -0x222D,0x0000, 0x222E,0x0000, 0x222F,0x0000, 0x2230,0x0000, -0x2231,0x0000, 0x2232,0x0000, 0x2233,0x0000, 0x2234,0x0000, -0x2235,0x0000, 0x2236,0x0000, 0x2237,0x0000, 0x2238,0x0000, -0x2239,0x0000, 0x223A,0x0000, 0x223B,0x0000, 0x223C,0x0000, -0x223D,0x0000, 0x223E,0x0000, 0x223F,0x0000, 0x2240,0x0000, -0x2241,0x0000, 0x2242,0x0000, 0x2243,0x0000, 0x2244,0x0000, -0x2245,0x0000, 0x2246,0x0000, 0x2247,0x0000, 0x2248,0x0000, -0x2249,0x0000, 0x224A,0x0000, 0x224B,0x0000, 0x224C,0x0000, -0x224D,0x0000, 0x224E,0x0000, 0x224F,0x0000, 0x2250,0x0000, -0x2251,0x0000, 0x2252,0x0000, 0x2253,0x0000, 0x2254,0x0000, -0x2255,0x0000, 0x2256,0x0000, 0x2257,0x0000, 0x2258,0x0000, -0x2259,0x0000, 0x225A,0x0000, 0x225B,0x0000, 0x225C,0x0000, -0x225D,0x0000, 0x225E,0x0000, 0x225F,0x0000, 0x2260,0x0000, -0x2261,0x0000, 0x2262,0x0000, 0x2263,0x0000, 0x2264,0x0000, -0x2265,0x0000, 0x2266,0x0000, 0x2267,0x0000, 0x2268,0x0000, -0x2269,0x0000, 0x226A,0x0000, 0x226B,0x0000, 0x226C,0x0000, -0x226D,0x0000, 0x226E,0x0000, 0x226F,0x0000, 0x2270,0x0000, -0x2271,0x0000, 0x2272,0x0000, 0x2273,0x0000, 0x2274,0x0000, -0x2275,0x0000, 0x2276,0x0000, 0x2277,0x0000, 0x2278,0x0000, -0x2279,0x0000, 0x227A,0x0000, 0x227B,0x0000, 0x227C,0x0000, -0x227D,0x0000, 0x227E,0x0000, 0x227F,0x0000, 0x2280,0x0000, -0x2281,0x0000, 0x2282,0x0000, 0x2283,0x0000, 0x2284,0x0000, -0x2285,0x0000, 0x2286,0x0000, 0x2287,0x0000, 0x2288,0x0000, -0x2289,0x0000, 0x228A,0x0000, 0x228B,0x0000, 0x228C,0x0000, -0x228D,0x0000, 0x228E,0x0000, 0x228F,0x0000, 0x2290,0x0000, -0x2291,0x0000, 0x2292,0x0000, 0x2293,0x0000, 0x2294,0x0000, -0x2295,0x0000, 0x2296,0x0000, 0x2297,0x0000, 0x2298,0x0000, -0x2299,0x0000, 0x229A,0x0000, 0x229B,0x0000, 0x229C,0x0000, -0x229D,0x0000, 0x229E,0x0000, 0x229F,0x0000, 0x22A0,0x0000, -0x22A1,0x0000, 0x22A2,0x0000, 0x22A3,0x0000, 0x22A4,0x0000, -0x22A5,0x0000, 0x22A6,0x0000, 0x22A7,0x0000, 0x22A8,0x0000, -0x22A9,0x0000, 0x22AA,0x0000, 0x22AB,0x0000, 0x22AC,0x0000, -0x22AD,0x0000, 0x22AE,0x0000, 0x22AF,0x0000, 0x22B0,0x0000 -}; - -uint16 page0A4data[]= { /* A400 (3 weights per char) */ -0x22B1,0x0000,0x0000, 0x22B2,0x0000,0x0000, 0x22B3,0x0000,0x0000, -0x22B4,0x0000,0x0000, 0x22B5,0x0000,0x0000, 0x22B6,0x0000,0x0000, -0x22B7,0x0000,0x0000, 0x22B8,0x0000,0x0000, 0x22B9,0x0000,0x0000, -0x22BA,0x0000,0x0000, 0x22BB,0x0000,0x0000, 0x22BC,0x0000,0x0000, -0x22BD,0x0000,0x0000, 0x22BE,0x0000,0x0000, 0x22BF,0x0000,0x0000, -0x22C0,0x0000,0x0000, 0x22C1,0x0000,0x0000, 0x22C2,0x0000,0x0000, -0x22C3,0x0000,0x0000, 0x22C4,0x0000,0x0000, 0x22C5,0x0000,0x0000, -0x22C6,0x0000,0x0000, 0x22C7,0x0000,0x0000, 0x22C8,0x0000,0x0000, -0x22C9,0x0000,0x0000, 0x22CA,0x0000,0x0000, 0x22CB,0x0000,0x0000, -0x22CC,0x0000,0x0000, 0x22CD,0x0000,0x0000, 0x22CE,0x0000,0x0000, -0x22CF,0x0000,0x0000, 0x22D0,0x0000,0x0000, 0x22D1,0x0000,0x0000, -0x22D2,0x0000,0x0000, 0x22D3,0x0000,0x0000, 0x22D4,0x0000,0x0000, -0x22D5,0x0000,0x0000, 0x22D6,0x0000,0x0000, 0x22D7,0x0000,0x0000, -0x22D8,0x0000,0x0000, 0x22D9,0x0000,0x0000, 0x22DA,0x0000,0x0000, -0x22DB,0x0000,0x0000, 0x22DC,0x0000,0x0000, 0x22DD,0x0000,0x0000, -0x22DE,0x0000,0x0000, 0x22DF,0x0000,0x0000, 0x22E0,0x0000,0x0000, -0x22E1,0x0000,0x0000, 0x22E2,0x0000,0x0000, 0x22E3,0x0000,0x0000, -0x22E4,0x0000,0x0000, 0x22E5,0x0000,0x0000, 0x22E6,0x0000,0x0000, -0x22E7,0x0000,0x0000, 0x22E8,0x0000,0x0000, 0x22E9,0x0000,0x0000, -0x22EA,0x0000,0x0000, 0x22EB,0x0000,0x0000, 0x22EC,0x0000,0x0000, -0x22ED,0x0000,0x0000, 0x22EE,0x0000,0x0000, 0x22EF,0x0000,0x0000, -0x22F0,0x0000,0x0000, 0x22F1,0x0000,0x0000, 0x22F2,0x0000,0x0000, -0x22F3,0x0000,0x0000, 0x22F4,0x0000,0x0000, 0x22F5,0x0000,0x0000, -0x22F6,0x0000,0x0000, 0x22F7,0x0000,0x0000, 0x22F8,0x0000,0x0000, -0x22F9,0x0000,0x0000, 0x22FA,0x0000,0x0000, 0x22FB,0x0000,0x0000, -0x22FC,0x0000,0x0000, 0x22FD,0x0000,0x0000, 0x22FE,0x0000,0x0000, -0x22FF,0x0000,0x0000, 0x2300,0x0000,0x0000, 0x2301,0x0000,0x0000, -0x2302,0x0000,0x0000, 0x2303,0x0000,0x0000, 0x2304,0x0000,0x0000, -0x2305,0x0000,0x0000, 0x2306,0x0000,0x0000, 0x2307,0x0000,0x0000, -0x2308,0x0000,0x0000, 0x2309,0x0000,0x0000, 0x230A,0x0000,0x0000, -0x230B,0x0000,0x0000, 0x230C,0x0000,0x0000, 0x230D,0x0000,0x0000, -0x230E,0x0000,0x0000, 0x230F,0x0000,0x0000, 0x2310,0x0000,0x0000, -0x2311,0x0000,0x0000, 0x2312,0x0000,0x0000, 0x2313,0x0000,0x0000, -0x2314,0x0000,0x0000, 0x2315,0x0000,0x0000, 0x2316,0x0000,0x0000, -0x2317,0x0000,0x0000, 0x2318,0x0000,0x0000, 0x2319,0x0000,0x0000, -0x231A,0x0000,0x0000, 0x231B,0x0000,0x0000, 0x231C,0x0000,0x0000, -0x231D,0x0000,0x0000, 0x231E,0x0000,0x0000, 0x231F,0x0000,0x0000, -0x2320,0x0000,0x0000, 0x2321,0x0000,0x0000, 0x2322,0x0000,0x0000, -0x2323,0x0000,0x0000, 0x2324,0x0000,0x0000, 0x2325,0x0000,0x0000, -0x2326,0x0000,0x0000, 0x2327,0x0000,0x0000, 0x2328,0x0000,0x0000, -0x2329,0x0000,0x0000, 0x232A,0x0000,0x0000, 0x232B,0x0000,0x0000, -0x232C,0x0000,0x0000, 0x232D,0x0000,0x0000, 0x232E,0x0000,0x0000, -0x232F,0x0000,0x0000, 0x2330,0x0000,0x0000, 0x2331,0x0000,0x0000, -0x2332,0x0000,0x0000, 0x2333,0x0000,0x0000, 0x2334,0x0000,0x0000, -0x2335,0x0000,0x0000, 0x2336,0x0000,0x0000, 0x2337,0x0000,0x0000, -0x2338,0x0000,0x0000, 0x2339,0x0000,0x0000, 0x233A,0x0000,0x0000, -0x233B,0x0000,0x0000, 0x233C,0x0000,0x0000, 0x233D,0x0000,0x0000, -0xFBC1,0xA48D,0x0000, 0xFBC1,0xA48E,0x0000, 0xFBC1,0xA48F,0x0000, -0x0BCE,0x0000,0x0000, 0x0BCF,0x0000,0x0000, 0x0BD0,0x0000,0x0000, -0x0BD1,0x0000,0x0000, 0x0BD2,0x0000,0x0000, 0x0BD3,0x0000,0x0000, -0x0BD4,0x0000,0x0000, 0x0BD5,0x0000,0x0000, 0x0BD6,0x0000,0x0000, -0x0BD7,0x0000,0x0000, 0x0BD8,0x0000,0x0000, 0x0BD9,0x0000,0x0000, -0x0BDA,0x0000,0x0000, 0x0BDB,0x0000,0x0000, 0x0BDC,0x0000,0x0000, -0x0BDD,0x0000,0x0000, 0x0BDE,0x0000,0x0000, 0x0BDF,0x0000,0x0000, -0x0BE0,0x0000,0x0000, 0x0BE1,0x0000,0x0000, 0x0BE2,0x0000,0x0000, -0x0BE3,0x0000,0x0000, 0x0BE4,0x0000,0x0000, 0x0BE5,0x0000,0x0000, -0x0BE6,0x0000,0x0000, 0x0BE7,0x0000,0x0000, 0x0BE8,0x0000,0x0000, -0x0BE9,0x0000,0x0000, 0x0BEA,0x0000,0x0000, 0x0BEB,0x0000,0x0000, -0x0BEC,0x0000,0x0000, 0x0BED,0x0000,0x0000, 0x0BEE,0x0000,0x0000, -0x0BEF,0x0000,0x0000, 0x0BF0,0x0000,0x0000, 0x0BF1,0x0000,0x0000, -0x0BF2,0x0000,0x0000, 0x0BF3,0x0000,0x0000, 0x0BF4,0x0000,0x0000, -0x0BF5,0x0000,0x0000, 0x0BF6,0x0000,0x0000, 0x0BF7,0x0000,0x0000, -0x0BF8,0x0000,0x0000, 0x0BF9,0x0000,0x0000, 0x0BFA,0x0000,0x0000, -0x0BFB,0x0000,0x0000, 0x0BFC,0x0000,0x0000, 0x0BFD,0x0000,0x0000, -0x0BFE,0x0000,0x0000, 0x0BFF,0x0000,0x0000, 0x0C00,0x0000,0x0000, -0x0C01,0x0000,0x0000, 0x0C02,0x0000,0x0000, 0x0C03,0x0000,0x0000, -0x0C04,0x0000,0x0000, 0xFBC1,0xA4C7,0x0000, 0xFBC1,0xA4C8,0x0000, -0xFBC1,0xA4C9,0x0000, 0xFBC1,0xA4CA,0x0000, 0xFBC1,0xA4CB,0x0000, -0xFBC1,0xA4CC,0x0000, 0xFBC1,0xA4CD,0x0000, 0xFBC1,0xA4CE,0x0000, -0xFBC1,0xA4CF,0x0000, 0xFBC1,0xA4D0,0x0000, 0xFBC1,0xA4D1,0x0000, -0xFBC1,0xA4D2,0x0000, 0xFBC1,0xA4D3,0x0000, 0xFBC1,0xA4D4,0x0000, -0xFBC1,0xA4D5,0x0000, 0xFBC1,0xA4D6,0x0000, 0xFBC1,0xA4D7,0x0000, -0xFBC1,0xA4D8,0x0000, 0xFBC1,0xA4D9,0x0000, 0xFBC1,0xA4DA,0x0000, -0xFBC1,0xA4DB,0x0000, 0xFBC1,0xA4DC,0x0000, 0xFBC1,0xA4DD,0x0000, -0xFBC1,0xA4DE,0x0000, 0xFBC1,0xA4DF,0x0000, 0xFBC1,0xA4E0,0x0000, -0xFBC1,0xA4E1,0x0000, 0xFBC1,0xA4E2,0x0000, 0xFBC1,0xA4E3,0x0000, -0xFBC1,0xA4E4,0x0000, 0xFBC1,0xA4E5,0x0000, 0xFBC1,0xA4E6,0x0000, -0xFBC1,0xA4E7,0x0000, 0xFBC1,0xA4E8,0x0000, 0xFBC1,0xA4E9,0x0000, -0xFBC1,0xA4EA,0x0000, 0xFBC1,0xA4EB,0x0000, 0xFBC1,0xA4EC,0x0000, -0xFBC1,0xA4ED,0x0000, 0xFBC1,0xA4EE,0x0000, 0xFBC1,0xA4EF,0x0000, -0xFBC1,0xA4F0,0x0000, 0xFBC1,0xA4F1,0x0000, 0xFBC1,0xA4F2,0x0000, -0xFBC1,0xA4F3,0x0000, 0xFBC1,0xA4F4,0x0000, 0xFBC1,0xA4F5,0x0000, -0xFBC1,0xA4F6,0x0000, 0xFBC1,0xA4F7,0x0000, 0xFBC1,0xA4F8,0x0000, -0xFBC1,0xA4F9,0x0000, 0xFBC1,0xA4FA,0x0000, 0xFBC1,0xA4FB,0x0000, -0xFBC1,0xA4FC,0x0000, 0xFBC1,0xA4FD,0x0000, 0xFBC1,0xA4FE,0x0000, -0xFBC1,0xA4FF,0x0000 }; - -uint16 page0F9data[]= { /* F900 (3 weights per char) */ -0xFB41,0x8C48,0x0000, 0xFB40,0xE6F4,0x0000, 0xFB41,0x8ECA,0x0000, -0xFB41,0x8CC8,0x0000, 0xFB40,0xEED1,0x0000, 0xFB40,0xCE32,0x0000, -0xFB40,0xD3E5,0x0000, 0xFB41,0x9F9C,0x0000, 0xFB41,0x9F9C,0x0000, -0xFB40,0xD951,0x0000, 0xFB41,0x91D1,0x0000, 0xFB40,0xD587,0x0000, -0xFB40,0xD948,0x0000, 0xFB40,0xE1F6,0x0000, 0xFB40,0xF669,0x0000, -0xFB40,0xFF85,0x0000, 0xFB41,0x863F,0x0000, 0xFB41,0x87BA,0x0000, -0xFB41,0x88F8,0x0000, 0xFB41,0x908F,0x0000, 0xFB40,0xEA02,0x0000, -0xFB40,0xED1B,0x0000, 0xFB40,0xF0D9,0x0000, 0xFB40,0xF3DE,0x0000, -0xFB41,0x843D,0x0000, 0xFB41,0x916A,0x0000, 0xFB41,0x99F1,0x0000, -0xFB40,0xCE82,0x0000, 0xFB40,0xD375,0x0000, 0xFB40,0xEB04,0x0000, -0xFB40,0xF21B,0x0000, 0xFB41,0x862D,0x0000, 0xFB41,0x9E1E,0x0000, -0xFB40,0xDD50,0x0000, 0xFB40,0xEFEB,0x0000, 0xFB41,0x85CD,0x0000, -0xFB41,0x8964,0x0000, 0xFB40,0xE2C9,0x0000, 0xFB41,0x81D8,0x0000, -0xFB41,0x881F,0x0000, 0xFB40,0xDECA,0x0000, 0xFB40,0xE717,0x0000, -0xFB40,0xED6A,0x0000, 0xFB40,0xF2FC,0x0000, 0xFB41,0x90CE,0x0000, -0xFB40,0xCF86,0x0000, 0xFB40,0xD1B7,0x0000, 0xFB40,0xD2DE,0x0000, -0xFB40,0xE4C4,0x0000, 0xFB40,0xEAD3,0x0000, 0xFB40,0xF210,0x0000, -0xFB40,0xF6E7,0x0000, 0xFB41,0x8001,0x0000, 0xFB41,0x8606,0x0000, -0xFB41,0x865C,0x0000, 0xFB41,0x8DEF,0x0000, 0xFB41,0x9732,0x0000, -0xFB41,0x9B6F,0x0000, 0xFB41,0x9DFA,0x0000, 0xFB40,0xF88C,0x0000, -0xFB40,0xF97F,0x0000, 0xFB40,0xFDA0,0x0000, 0xFB41,0x83C9,0x0000, -0xFB41,0x9304,0x0000, 0xFB41,0x9E7F,0x0000, 0xFB41,0x8AD6,0x0000, -0xFB40,0xD8DF,0x0000, 0xFB40,0xDF04,0x0000, 0xFB40,0xFC60,0x0000, -0xFB41,0x807E,0x0000, 0xFB40,0xF262,0x0000, 0xFB40,0xF8CA,0x0000, -0xFB41,0x8CC2,0x0000, 0xFB41,0x96F7,0x0000, 0xFB40,0xD8D8,0x0000, -0xFB40,0xDC62,0x0000, 0xFB40,0xEA13,0x0000, 0xFB40,0xEDDA,0x0000, -0xFB40,0xEF0F,0x0000, 0xFB40,0xFD2F,0x0000, 0xFB40,0xFE37,0x0000, -0xFB41,0x964B,0x0000, 0xFB40,0xD2D2,0x0000, 0xFB41,0x808B,0x0000, -0xFB40,0xD1DC,0x0000, 0xFB40,0xD1CC,0x0000, 0xFB40,0xFA1C,0x0000, -0xFB40,0xFDBE,0x0000, 0xFB41,0x83F1,0x0000, 0xFB41,0x9675,0x0000, -0xFB41,0x8B80,0x0000, 0xFB40,0xE2CF,0x0000, 0xFB40,0xEA02,0x0000, -0xFB41,0x8AFE,0x0000, 0xFB40,0xCE39,0x0000, 0xFB40,0xDBE7,0x0000, -0xFB40,0xE012,0x0000, 0xFB40,0xF387,0x0000, 0xFB40,0xF570,0x0000, -0xFB40,0xD317,0x0000, 0xFB40,0xF8FB,0x0000, 0xFB40,0xCFBF,0x0000, -0xFB40,0xDFA9,0x0000, 0xFB40,0xCE0D,0x0000, 0xFB40,0xECCC,0x0000, -0xFB40,0xE578,0x0000, 0xFB40,0xFD22,0x0000, 0xFB40,0xD3C3,0x0000, -0xFB40,0xD85E,0x0000, 0xFB40,0xF701,0x0000, 0xFB41,0x8449,0x0000, -0xFB41,0x8AAA,0x0000, 0xFB40,0xEBBA,0x0000, 0xFB41,0x8FB0,0x0000, -0xFB40,0xEC88,0x0000, 0xFB40,0xE2FE,0x0000, 0xFB41,0x82E5,0x0000, -0xFB40,0xE3A0,0x0000, 0xFB40,0xF565,0x0000, 0xFB40,0xCEAE,0x0000, -0xFB40,0xD169,0x0000, 0xFB40,0xD1C9,0x0000, 0xFB40,0xE881,0x0000, -0xFB40,0xFCE7,0x0000, 0xFB41,0x826F,0x0000, 0xFB41,0x8AD2,0x0000, -0xFB41,0x91CF,0x0000, 0xFB40,0xD2F5,0x0000, 0xFB40,0xD442,0x0000, -0xFB40,0xD973,0x0000, 0xFB40,0xDEEC,0x0000, 0xFB40,0xE5C5,0x0000, -0xFB40,0xEFFE,0x0000, 0xFB40,0xF92A,0x0000, 0xFB41,0x95AD,0x0000, -0xFB41,0x9A6A,0x0000, 0xFB41,0x9E97,0x0000, 0xFB41,0x9ECE,0x0000, -0xFB40,0xD29B,0x0000, 0xFB40,0xE6C6,0x0000, 0xFB40,0xEB77,0x0000, -0xFB41,0x8F62,0x0000, 0xFB40,0xDE74,0x0000, 0xFB40,0xE190,0x0000, -0xFB40,0xE200,0x0000, 0xFB40,0xE49A,0x0000, 0xFB40,0xEF23,0x0000, -0xFB40,0xF149,0x0000, 0xFB40,0xF489,0x0000, 0xFB40,0xF9CA,0x0000, -0xFB40,0xFDF4,0x0000, 0xFB41,0x806F,0x0000, 0xFB41,0x8F26,0x0000, -0xFB41,0x84EE,0x0000, 0xFB41,0x9023,0x0000, 0xFB41,0x934A,0x0000, -0xFB40,0xD217,0x0000, 0xFB40,0xD2A3,0x0000, 0xFB40,0xD4BD,0x0000, -0xFB40,0xF0C8,0x0000, 0xFB41,0x88C2,0x0000, 0xFB41,0x8AAA,0x0000, -0xFB40,0xDEC9,0x0000, 0xFB40,0xDFF5,0x0000, 0xFB40,0xE37B,0x0000, -0xFB40,0xEBAE,0x0000, 0xFB40,0xFC3E,0x0000, 0xFB40,0xF375,0x0000, -0xFB40,0xCEE4,0x0000, 0xFB40,0xD6F9,0x0000, 0xFB40,0xDBE7,0x0000, -0xFB40,0xDDBA,0x0000, 0xFB40,0xE01C,0x0000, 0xFB40,0xF3B2,0x0000, -0xFB40,0xF469,0x0000, 0xFB40,0xFF9A,0x0000, 0xFB41,0x8046,0x0000, -0xFB41,0x9234,0x0000, 0xFB41,0x96F6,0x0000, 0xFB41,0x9748,0x0000, -0xFB41,0x9818,0x0000, 0xFB40,0xCF8B,0x0000, 0xFB40,0xF9AE,0x0000, -0xFB41,0x91B4,0x0000, 0xFB41,0x96B8,0x0000, 0xFB40,0xE0E1,0x0000, -0xFB40,0xCE86,0x0000, 0xFB40,0xD0DA,0x0000, 0xFB40,0xDBEE,0x0000, -0xFB40,0xDC3F,0x0000, 0xFB40,0xE599,0x0000, 0xFB40,0xEA02,0x0000, -0xFB40,0xF1CE,0x0000, 0xFB40,0xF642,0x0000, 0xFB41,0x84FC,0x0000, -0xFB41,0x907C,0x0000, 0xFB41,0x9F8D,0x0000, 0xFB40,0xE688,0x0000, -0xFB41,0x962E,0x0000, 0xFB40,0xD289,0x0000, 0xFB40,0xE77B,0x0000, -0xFB40,0xE7F3,0x0000, 0xFB40,0xED41,0x0000, 0xFB40,0xEE9C,0x0000, -0xFB40,0xF409,0x0000, 0xFB40,0xF559,0x0000, 0xFB40,0xF86B,0x0000, -0xFB40,0xFD10,0x0000, 0xFB41,0x985E,0x0000, 0xFB40,0xD16D,0x0000, -0xFB40,0xE22E,0x0000, 0xFB41,0x9678,0x0000, 0xFB40,0xD02B,0x0000, -0xFB40,0xDD19,0x0000, 0xFB40,0xEDEA,0x0000, 0xFB41,0x8F2A,0x0000, -0xFB40,0xDF8B,0x0000, 0xFB40,0xE144,0x0000, 0xFB40,0xE817,0x0000, -0xFB40,0xF387,0x0000, 0xFB41,0x9686,0x0000, 0xFB40,0xD229,0x0000, -0xFB40,0xD40F,0x0000, 0xFB40,0xDC65,0x0000, 0xFB40,0xE613,0x0000, -0xFB40,0xE74E,0x0000, 0xFB40,0xE8A8,0x0000, 0xFB40,0xECE5,0x0000, -0xFB40,0xF406,0x0000, 0xFB40,0xF5E2,0x0000, 0xFB40,0xFF79,0x0000, -0xFB41,0x88CF,0x0000, 0xFB41,0x88E1,0x0000, 0xFB41,0x91CC,0x0000, -0xFB41,0x96E2,0x0000, 0xFB40,0xD33F,0x0000, 0xFB40,0xEEBA,0x0000, -0xFB40,0xD41D,0x0000, 0xFB40,0xF1D0,0x0000, 0xFB40,0xF498,0x0000, -0xFB41,0x85FA,0x0000, 0xFB41,0x96A3,0x0000, 0xFB41,0x9C57,0x0000, -0xFB41,0x9E9F,0x0000, 0xFB40,0xE797,0x0000, 0xFB40,0xEDCB,0x0000, -0xFB41,0x81E8,0x0000, 0xFB40,0xFACB,0x0000, 0xFB40,0xFB20,0x0000, -0xFB40,0xFC92,0x0000, 0xFB40,0xF2C0,0x0000, 0xFB40,0xF099,0x0000, -0xFB41,0x8B58,0x0000, 0xFB40,0xCEC0,0x0000, 0xFB41,0x8336,0x0000, -0xFB40,0xD23A,0x0000 }; - -uint16 page0FAdata[]= { /* FA00 (3 weights per char) */ -0xFB40,0xD207,0x0000, 0xFB40,0xDEA6,0x0000, 0xFB40,0xE2D3,0x0000, -0xFB40,0xFCD6,0x0000, 0xFB40,0xDB85,0x0000, 0xFB40,0xED1E,0x0000, -0xFB40,0xE6B4,0x0000, 0xFB41,0x8F3B,0x0000, 0xFB41,0x884C,0x0000, -0xFB41,0x964D,0x0000, 0xFB41,0x898B,0x0000, 0xFB40,0xDED3,0x0000, -0xFB40,0xD140,0x0000, 0xFB40,0xD5C0,0x0000, 0xFB41,0xFA0E,0x0000, -0xFB41,0xFA0F,0x0000, 0xFB40,0xD85A,0x0000, 0xFB41,0xFA11,0x0000, -0xFB40,0xE674,0x0000, 0xFB41,0xFA13,0x0000, 0xFB41,0xFA14,0x0000, -0xFB40,0xD1DE,0x0000, 0xFB40,0xF32A,0x0000, 0xFB40,0xF6CA,0x0000, -0xFB40,0xF93C,0x0000, 0xFB40,0xF95E,0x0000, 0xFB40,0xF965,0x0000, -0xFB40,0xF98F,0x0000, 0xFB41,0x9756,0x0000, 0xFB40,0xFCBE,0x0000, -0xFB40,0xFFBD,0x0000, 0xFB41,0xFA1F,0x0000, 0xFB41,0x8612,0x0000, -0xFB41,0xFA21,0x0000, 0xFB41,0x8AF8,0x0000, 0xFB41,0xFA23,0x0000, -0xFB41,0xFA24,0x0000, 0xFB41,0x9038,0x0000, 0xFB41,0x90FD,0x0000, -0xFB41,0xFA27,0x0000, 0xFB41,0xFA28,0x0000, 0xFB41,0xFA29,0x0000, -0xFB41,0x98EF,0x0000, 0xFB41,0x98FC,0x0000, 0xFB41,0x9928,0x0000, -0xFB41,0x9DB4,0x0000, 0xFBC1,0xFA2E,0x0000, 0xFBC1,0xFA2F,0x0000, -0xFB40,0xCFAE,0x0000, 0xFB40,0xD0E7,0x0000, 0xFB40,0xD14D,0x0000, -0xFB40,0xD2C9,0x0000, 0xFB40,0xD2E4,0x0000, 0xFB40,0xD351,0x0000, -0xFB40,0xD59D,0x0000, 0xFB40,0xD606,0x0000, 0xFB40,0xD668,0x0000, -0xFB40,0xD840,0x0000, 0xFB40,0xD8A8,0x0000, 0xFB40,0xDC64,0x0000, -0xFB40,0xDC6E,0x0000, 0xFB40,0xE094,0x0000, 0xFB40,0xE168,0x0000, -0xFB40,0xE18E,0x0000, 0xFB40,0xE1F2,0x0000, 0xFB40,0xE54F,0x0000, -0xFB40,0xE5E2,0x0000, 0xFB40,0xE691,0x0000, 0xFB40,0xE885,0x0000, -0xFB40,0xED77,0x0000, 0xFB40,0xEE1A,0x0000, 0xFB40,0xEF22,0x0000, -0xFB40,0xF16E,0x0000, 0xFB40,0xF22B,0x0000, 0xFB40,0xF422,0x0000, -0xFB40,0xF891,0x0000, 0xFB40,0xF93E,0x0000, 0xFB40,0xF949,0x0000, -0xFB40,0xF948,0x0000, 0xFB40,0xF950,0x0000, 0xFB40,0xF956,0x0000, -0xFB40,0xF95D,0x0000, 0xFB40,0xF98D,0x0000, 0xFB40,0xF98E,0x0000, -0xFB40,0xFA40,0x0000, 0xFB40,0xFA81,0x0000, 0xFB40,0xFBC0,0x0000, -0xFB40,0xFDF4,0x0000, 0xFB40,0xFE09,0x0000, 0xFB40,0xFE41,0x0000, -0xFB40,0xFF72,0x0000, 0xFB41,0x8005,0x0000, 0xFB41,0x81ED,0x0000, -0xFB41,0x8279,0x0000, 0xFB41,0x8279,0x0000, 0xFB41,0x8457,0x0000, -0xFB41,0x8910,0x0000, 0xFB41,0x8996,0x0000, 0xFB41,0x8B01,0x0000, -0xFB41,0x8B39,0x0000, 0xFB41,0x8CD3,0x0000, 0xFB41,0x8D08,0x0000, -0xFB41,0x8FB6,0x0000, 0xFB41,0x9038,0x0000, 0xFB41,0x96E3,0x0000, -0xFB41,0x97FF,0x0000, 0xFB41,0x983B,0x0000, 0xFBC1,0xFA6B,0x0000, -0xFBC1,0xFA6C,0x0000, 0xFBC1,0xFA6D,0x0000, 0xFBC1,0xFA6E,0x0000, -0xFBC1,0xFA6F,0x0000, 0xFBC1,0xFA70,0x0000, 0xFBC1,0xFA71,0x0000, -0xFBC1,0xFA72,0x0000, 0xFBC1,0xFA73,0x0000, 0xFBC1,0xFA74,0x0000, -0xFBC1,0xFA75,0x0000, 0xFBC1,0xFA76,0x0000, 0xFBC1,0xFA77,0x0000, -0xFBC1,0xFA78,0x0000, 0xFBC1,0xFA79,0x0000, 0xFBC1,0xFA7A,0x0000, -0xFBC1,0xFA7B,0x0000, 0xFBC1,0xFA7C,0x0000, 0xFBC1,0xFA7D,0x0000, -0xFBC1,0xFA7E,0x0000, 0xFBC1,0xFA7F,0x0000, 0xFBC1,0xFA80,0x0000, -0xFBC1,0xFA81,0x0000, 0xFBC1,0xFA82,0x0000, 0xFBC1,0xFA83,0x0000, -0xFBC1,0xFA84,0x0000, 0xFBC1,0xFA85,0x0000, 0xFBC1,0xFA86,0x0000, -0xFBC1,0xFA87,0x0000, 0xFBC1,0xFA88,0x0000, 0xFBC1,0xFA89,0x0000, -0xFBC1,0xFA8A,0x0000, 0xFBC1,0xFA8B,0x0000, 0xFBC1,0xFA8C,0x0000, -0xFBC1,0xFA8D,0x0000, 0xFBC1,0xFA8E,0x0000, 0xFBC1,0xFA8F,0x0000, -0xFBC1,0xFA90,0x0000, 0xFBC1,0xFA91,0x0000, 0xFBC1,0xFA92,0x0000, -0xFBC1,0xFA93,0x0000, 0xFBC1,0xFA94,0x0000, 0xFBC1,0xFA95,0x0000, -0xFBC1,0xFA96,0x0000, 0xFBC1,0xFA97,0x0000, 0xFBC1,0xFA98,0x0000, -0xFBC1,0xFA99,0x0000, 0xFBC1,0xFA9A,0x0000, 0xFBC1,0xFA9B,0x0000, -0xFBC1,0xFA9C,0x0000, 0xFBC1,0xFA9D,0x0000, 0xFBC1,0xFA9E,0x0000, -0xFBC1,0xFA9F,0x0000, 0xFBC1,0xFAA0,0x0000, 0xFBC1,0xFAA1,0x0000, -0xFBC1,0xFAA2,0x0000, 0xFBC1,0xFAA3,0x0000, 0xFBC1,0xFAA4,0x0000, -0xFBC1,0xFAA5,0x0000, 0xFBC1,0xFAA6,0x0000, 0xFBC1,0xFAA7,0x0000, -0xFBC1,0xFAA8,0x0000, 0xFBC1,0xFAA9,0x0000, 0xFBC1,0xFAAA,0x0000, -0xFBC1,0xFAAB,0x0000, 0xFBC1,0xFAAC,0x0000, 0xFBC1,0xFAAD,0x0000, -0xFBC1,0xFAAE,0x0000, 0xFBC1,0xFAAF,0x0000, 0xFBC1,0xFAB0,0x0000, -0xFBC1,0xFAB1,0x0000, 0xFBC1,0xFAB2,0x0000, 0xFBC1,0xFAB3,0x0000, -0xFBC1,0xFAB4,0x0000, 0xFBC1,0xFAB5,0x0000, 0xFBC1,0xFAB6,0x0000, -0xFBC1,0xFAB7,0x0000, 0xFBC1,0xFAB8,0x0000, 0xFBC1,0xFAB9,0x0000, -0xFBC1,0xFABA,0x0000, 0xFBC1,0xFABB,0x0000, 0xFBC1,0xFABC,0x0000, -0xFBC1,0xFABD,0x0000, 0xFBC1,0xFABE,0x0000, 0xFBC1,0xFABF,0x0000, -0xFBC1,0xFAC0,0x0000, 0xFBC1,0xFAC1,0x0000, 0xFBC1,0xFAC2,0x0000, -0xFBC1,0xFAC3,0x0000, 0xFBC1,0xFAC4,0x0000, 0xFBC1,0xFAC5,0x0000, -0xFBC1,0xFAC6,0x0000, 0xFBC1,0xFAC7,0x0000, 0xFBC1,0xFAC8,0x0000, -0xFBC1,0xFAC9,0x0000, 0xFBC1,0xFACA,0x0000, 0xFBC1,0xFACB,0x0000, -0xFBC1,0xFACC,0x0000, 0xFBC1,0xFACD,0x0000, 0xFBC1,0xFACE,0x0000, -0xFBC1,0xFACF,0x0000, 0xFBC1,0xFAD0,0x0000, 0xFBC1,0xFAD1,0x0000, -0xFBC1,0xFAD2,0x0000, 0xFBC1,0xFAD3,0x0000, 0xFBC1,0xFAD4,0x0000, -0xFBC1,0xFAD5,0x0000, 0xFBC1,0xFAD6,0x0000, 0xFBC1,0xFAD7,0x0000, -0xFBC1,0xFAD8,0x0000, 0xFBC1,0xFAD9,0x0000, 0xFBC1,0xFADA,0x0000, -0xFBC1,0xFADB,0x0000, 0xFBC1,0xFADC,0x0000, 0xFBC1,0xFADD,0x0000, -0xFBC1,0xFADE,0x0000, 0xFBC1,0xFADF,0x0000, 0xFBC1,0xFAE0,0x0000, -0xFBC1,0xFAE1,0x0000, 0xFBC1,0xFAE2,0x0000, 0xFBC1,0xFAE3,0x0000, -0xFBC1,0xFAE4,0x0000, 0xFBC1,0xFAE5,0x0000, 0xFBC1,0xFAE6,0x0000, -0xFBC1,0xFAE7,0x0000, 0xFBC1,0xFAE8,0x0000, 0xFBC1,0xFAE9,0x0000, -0xFBC1,0xFAEA,0x0000, 0xFBC1,0xFAEB,0x0000, 0xFBC1,0xFAEC,0x0000, -0xFBC1,0xFAED,0x0000, 0xFBC1,0xFAEE,0x0000, 0xFBC1,0xFAEF,0x0000, -0xFBC1,0xFAF0,0x0000, 0xFBC1,0xFAF1,0x0000, 0xFBC1,0xFAF2,0x0000, -0xFBC1,0xFAF3,0x0000, 0xFBC1,0xFAF4,0x0000, 0xFBC1,0xFAF5,0x0000, -0xFBC1,0xFAF6,0x0000, 0xFBC1,0xFAF7,0x0000, 0xFBC1,0xFAF8,0x0000, -0xFBC1,0xFAF9,0x0000, 0xFBC1,0xFAFA,0x0000, 0xFBC1,0xFAFB,0x0000, -0xFBC1,0xFAFC,0x0000, 0xFBC1,0xFAFD,0x0000, 0xFBC1,0xFAFE,0x0000, -0xFBC1,0xFAFF,0x0000 }; - -uint16 page0FBdata[]= { /* FB00 (4 weights per char) */ -0x0EB9,0x0EB9,0x0000,0x0000, 0x0EB9,0x0EFB,0x0000,0x0000, -0x0EB9,0x0F2E,0x0000,0x0000, 0x0EB9,0x0EB9,0x0EFB,0x0000, -0x0EB9,0x0EB9,0x0F2E,0x0000, 0x0FEA,0x1002,0x0000,0x0000, -0x0FEA,0x1002,0x0000,0x0000, 0xFBC1,0xFB07,0x0000,0x0000, -0xFBC1,0xFB08,0x0000,0x0000, 0xFBC1,0xFB09,0x0000,0x0000, -0xFBC1,0xFB0A,0x0000,0x0000, 0xFBC1,0xFB0B,0x0000,0x0000, -0xFBC1,0xFB0C,0x0000,0x0000, 0xFBC1,0xFB0D,0x0000,0x0000, -0xFBC1,0xFB0E,0x0000,0x0000, 0xFBC1,0xFB0F,0x0000,0x0000, -0xFBC1,0xFB10,0x0000,0x0000, 0xFBC1,0xFB11,0x0000,0x0000, -0xFBC1,0xFB12,0x0000,0x0000, 0x131D,0x131F,0x0000,0x0000, -0x131D,0x130E,0x0000,0x0000, 0x131D,0x1314,0x0000,0x0000, -0x1327,0x131F,0x0000,0x0000, 0x131D,0x1316,0x0000,0x0000, -0xFBC1,0xFB18,0x0000,0x0000, 0xFBC1,0xFB19,0x0000,0x0000, -0xFBC1,0xFB1A,0x0000,0x0000, 0xFBC1,0xFB1B,0x0000,0x0000, -0xFBC1,0xFB1C,0x0000,0x0000, 0x133A,0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000,0x0000, 0x133A,0x133A,0x0000,0x0000, -0x1340,0x0000,0x0000,0x0000, 0x1331,0x0000,0x0000,0x0000, -0x1334,0x0000,0x0000,0x0000, 0x1335,0x0000,0x0000,0x0000, -0x133B,0x0000,0x0000,0x0000, 0x133C,0x0000,0x0000,0x0000, -0x133D,0x0000,0x0000,0x0000, 0x1344,0x0000,0x0000,0x0000, -0x1346,0x0000,0x0000,0x0000, 0x0428,0x0000,0x0000,0x0000, -0x1345,0x0000,0x0000,0x0000, 0x1345,0x0000,0x0000,0x0000, -0x1345,0x0000,0x0000,0x0000, 0x1345,0x0000,0x0000,0x0000, -0x1331,0x0000,0x0000,0x0000, 0x1331,0x0000,0x0000,0x0000, -0x1331,0x0000,0x0000,0x0000, 0x1332,0x0000,0x0000,0x0000, -0x1333,0x0000,0x0000,0x0000, 0x1334,0x0000,0x0000,0x0000, -0x1335,0x0000,0x0000,0x0000, 0x1336,0x0000,0x0000,0x0000, -0x1337,0x0000,0x0000,0x0000, 0xFBC1,0xFB37,0x0000,0x0000, -0x1339,0x0000,0x0000,0x0000, 0x133A,0x0000,0x0000,0x0000, -0x133B,0x0000,0x0000,0x0000, 0x133B,0x0000,0x0000,0x0000, -0x133C,0x0000,0x0000,0x0000, 0xFBC1,0xFB3D,0x0000,0x0000, -0x133D,0x0000,0x0000,0x0000, 0xFBC1,0xFB3F,0x0000,0x0000, -0x133E,0x0000,0x0000,0x0000, 0x133F,0x0000,0x0000,0x0000, -0xFBC1,0xFB42,0x0000,0x0000, 0x1341,0x0000,0x0000,0x0000, -0x1341,0x0000,0x0000,0x0000, 0xFBC1,0xFB45,0x0000,0x0000, -0x1342,0x0000,0x0000,0x0000, 0x1343,0x0000,0x0000,0x0000, -0x1344,0x0000,0x0000,0x0000, 0x1345,0x0000,0x0000,0x0000, -0x1346,0x0000,0x0000,0x0000, 0x1336,0x0000,0x0000,0x0000, -0x1332,0x0000,0x0000,0x0000, 0x133B,0x0000,0x0000,0x0000, -0x1341,0x0000,0x0000,0x0000, 0x1331,0x133C,0x0000,0x0000, -0x134B,0x0000,0x0000,0x0000, 0x134B,0x0000,0x0000,0x0000, -0x1353,0x0000,0x0000,0x0000, 0x1353,0x0000,0x0000,0x0000, -0x1353,0x0000,0x0000,0x0000, 0x1353,0x0000,0x0000,0x0000, -0x1354,0x0000,0x0000,0x0000, 0x1354,0x0000,0x0000,0x0000, -0x1354,0x0000,0x0000,0x0000, 0x1354,0x0000,0x0000,0x0000, -0x1355,0x0000,0x0000,0x0000, 0x1355,0x0000,0x0000,0x0000, -0x1355,0x0000,0x0000,0x0000, 0x1355,0x0000,0x0000,0x0000, -0x135A,0x0000,0x0000,0x0000, 0x135A,0x0000,0x0000,0x0000, -0x135A,0x0000,0x0000,0x0000, 0x135A,0x0000,0x0000,0x0000, -0x135D,0x0000,0x0000,0x0000, 0x135D,0x0000,0x0000,0x0000, -0x135D,0x0000,0x0000,0x0000, 0x135D,0x0000,0x0000,0x0000, -0x1359,0x0000,0x0000,0x0000, 0x1359,0x0000,0x0000,0x0000, -0x1359,0x0000,0x0000,0x0000, 0x1359,0x0000,0x0000,0x0000, -0x1397,0x0000,0x0000,0x0000, 0x1397,0x0000,0x0000,0x0000, -0x1397,0x0000,0x0000,0x0000, 0x1397,0x0000,0x0000,0x0000, -0x1399,0x0000,0x0000,0x0000, 0x1399,0x0000,0x0000,0x0000, -0x1399,0x0000,0x0000,0x0000, 0x1399,0x0000,0x0000,0x0000, -0x1360,0x0000,0x0000,0x0000, 0x1360,0x0000,0x0000,0x0000, -0x1360,0x0000,0x0000,0x0000, 0x1360,0x0000,0x0000,0x0000, -0x135F,0x0000,0x0000,0x0000, 0x135F,0x0000,0x0000,0x0000, -0x135F,0x0000,0x0000,0x0000, 0x135F,0x0000,0x0000,0x0000, -0x1361,0x0000,0x0000,0x0000, 0x1361,0x0000,0x0000,0x0000, -0x1361,0x0000,0x0000,0x0000, 0x1361,0x0000,0x0000,0x0000, -0x1363,0x0000,0x0000,0x0000, 0x1363,0x0000,0x0000,0x0000, -0x1363,0x0000,0x0000,0x0000, 0x1363,0x0000,0x0000,0x0000, -0x1370,0x0000,0x0000,0x0000, 0x1370,0x0000,0x0000,0x0000, -0x136F,0x0000,0x0000,0x0000, 0x136F,0x0000,0x0000,0x0000, -0x1371,0x0000,0x0000,0x0000, 0x1371,0x0000,0x0000,0x0000, -0x136B,0x0000,0x0000,0x0000, 0x136B,0x0000,0x0000,0x0000, -0x137E,0x0000,0x0000,0x0000, 0x137E,0x0000,0x0000,0x0000, -0x1377,0x0000,0x0000,0x0000, 0x1377,0x0000,0x0000,0x0000, -0x139F,0x0000,0x0000,0x0000, 0x139F,0x0000,0x0000,0x0000, -0x139F,0x0000,0x0000,0x0000, 0x139F,0x0000,0x0000,0x0000, -0x13A5,0x0000,0x0000,0x0000, 0x13A5,0x0000,0x0000,0x0000, -0x13A5,0x0000,0x0000,0x0000, 0x13A5,0x0000,0x0000,0x0000, -0x13A9,0x0000,0x0000,0x0000, 0x13A9,0x0000,0x0000,0x0000, -0x13A9,0x0000,0x0000,0x0000, 0x13A9,0x0000,0x0000,0x0000, -0x13A7,0x0000,0x0000,0x0000, 0x13A7,0x0000,0x0000,0x0000, -0x13A7,0x0000,0x0000,0x0000, 0x13A7,0x0000,0x0000,0x0000, -0x13B2,0x0000,0x0000,0x0000, 0x13B2,0x0000,0x0000,0x0000, -0x13B3,0x0000,0x0000,0x0000, 0x13B3,0x0000,0x0000,0x0000, -0x13B3,0x0000,0x0000,0x0000, 0x13B3,0x0000,0x0000,0x0000, -0x13BC,0x0000,0x0000,0x0000, 0x13BC,0x0000,0x0000,0x0000, -0x13B9,0x0000,0x0000,0x0000, 0x13B9,0x0000,0x0000,0x0000, -0x13B9,0x0000,0x0000,0x0000, 0x13B9,0x0000,0x0000,0x0000, -0x13B8,0x0000,0x0000,0x0000, 0x13B8,0x0000,0x0000,0x0000, -0x13B8,0x0000,0x0000,0x0000, 0x13B8,0x0000,0x0000,0x0000, -0x13CE,0x0000,0x0000,0x0000, 0x13CE,0x0000,0x0000,0x0000, -0x13CE,0x0000,0x0000,0x0000, 0x13CE,0x0000,0x0000,0x0000, -0xFBC1,0xFBB2,0x0000,0x0000, 0xFBC1,0xFBB3,0x0000,0x0000, -0xFBC1,0xFBB4,0x0000,0x0000, 0xFBC1,0xFBB5,0x0000,0x0000, -0xFBC1,0xFBB6,0x0000,0x0000, 0xFBC1,0xFBB7,0x0000,0x0000, -0xFBC1,0xFBB8,0x0000,0x0000, 0xFBC1,0xFBB9,0x0000,0x0000, -0xFBC1,0xFBBA,0x0000,0x0000, 0xFBC1,0xFBBB,0x0000,0x0000, -0xFBC1,0xFBBC,0x0000,0x0000, 0xFBC1,0xFBBD,0x0000,0x0000, -0xFBC1,0xFBBE,0x0000,0x0000, 0xFBC1,0xFBBF,0x0000,0x0000, -0xFBC1,0xFBC0,0x0000,0x0000, 0xFBC1,0xFBC1,0x0000,0x0000, -0xFBC1,0xFBC2,0x0000,0x0000, 0xFBC1,0xFBC3,0x0000,0x0000, -0xFBC1,0xFBC4,0x0000,0x0000, 0xFBC1,0xFBC5,0x0000,0x0000, -0xFBC1,0xFBC6,0x0000,0x0000, 0xFBC1,0xFBC7,0x0000,0x0000, -0xFBC1,0xFBC8,0x0000,0x0000, 0xFBC1,0xFBC9,0x0000,0x0000, -0xFBC1,0xFBCA,0x0000,0x0000, 0xFBC1,0xFBCB,0x0000,0x0000, -0xFBC1,0xFBCC,0x0000,0x0000, 0xFBC1,0xFBCD,0x0000,0x0000, -0xFBC1,0xFBCE,0x0000,0x0000, 0xFBC1,0xFBCF,0x0000,0x0000, -0xFBC1,0xFBD0,0x0000,0x0000, 0xFBC1,0xFBD1,0x0000,0x0000, -0xFBC1,0xFBD2,0x0000,0x0000, 0x13A3,0x0000,0x0000,0x0000, -0x13A3,0x0000,0x0000,0x0000, 0x13A3,0x0000,0x0000,0x0000, -0x13A3,0x0000,0x0000,0x0000, 0x13C1,0x0000,0x0000,0x0000, -0x13C1,0x0000,0x0000,0x0000, 0x13C0,0x0000,0x0000,0x0000, -0x13C0,0x0000,0x0000,0x0000, 0x13C2,0x0000,0x0000,0x0000, -0x13C2,0x0000,0x0000,0x0000, 0x13C1,0x1347,0x0000,0x0000, -0x13C5,0x0000,0x0000,0x0000, 0x13C5,0x0000,0x0000,0x0000, -0x13BF,0x0000,0x0000,0x0000, 0x13BF,0x0000,0x0000,0x0000, -0x13C3,0x0000,0x0000,0x0000, 0x13C3,0x0000,0x0000,0x0000, -0x13CC,0x0000,0x0000,0x0000, 0x13CC,0x0000,0x0000,0x0000, -0x13CC,0x0000,0x0000,0x0000, 0x13CC,0x0000,0x0000,0x0000, -0x13C7,0x0000,0x0000,0x0000, 0x13C7,0x0000,0x0000,0x0000, -0x134F,0x1350,0x0000,0x0000, 0x134F,0x1350,0x0000,0x0000, -0x134F,0x13BC,0x0000,0x0000, 0x134F,0x13BC,0x0000,0x0000, -0x134F,0x13BD,0x0000,0x0000, 0x134F,0x13BD,0x0000,0x0000, -0x134F,0x13C1,0x0000,0x0000, 0x134F,0x13C1,0x0000,0x0000, -0x134F,0x13C0,0x0000,0x0000, 0x134F,0x13C0,0x0000,0x0000, -0x134F,0x13C2,0x0000,0x0000, 0x134F,0x13C2,0x0000,0x0000, -0x134F,0x13CC,0x0000,0x0000, 0x134F,0x13CC,0x0000,0x0000, -0x134F,0x13CC,0x0000,0x0000, 0x134F,0x13C7,0x0000,0x0000, -0x134F,0x13C7,0x0000,0x0000, 0x134F,0x13C7,0x0000,0x0000, -0x13C9,0x0000,0x0000,0x0000, 0x13C9,0x0000,0x0000,0x0000, -0x13C9,0x0000,0x0000,0x0000, 0x13C9,0x0000,0x0000,0x0000 -}; - -uint16 page0FCdata[]= { /* FC00 (3 weights per char) */ -0x134F,0x135E,0x0000, 0x134F,0x1364,0x0000, 0x134F,0x13B0,0x0000, -0x134F,0x13C7,0x0000, 0x134F,0x13C8,0x0000, 0x1352,0x135E,0x0000, -0x1352,0x1364,0x0000, 0x1352,0x1365,0x0000, 0x1352,0x13B0,0x0000, -0x1352,0x13C7,0x0000, 0x1352,0x13C8,0x0000, 0x1357,0x135E,0x0000, -0x1357,0x1364,0x0000, 0x1357,0x1365,0x0000, 0x1357,0x13B0,0x0000, -0x1357,0x13C7,0x0000, 0x1357,0x13C8,0x0000, 0x1358,0x135E,0x0000, -0x1358,0x13B0,0x0000, 0x1358,0x13C7,0x0000, 0x1358,0x13C8,0x0000, -0x135E,0x1364,0x0000, 0x135E,0x13B0,0x0000, 0x1364,0x135E,0x0000, -0x1364,0x13B0,0x0000, 0x1365,0x135E,0x0000, 0x1365,0x1364,0x0000, -0x1365,0x13B0,0x0000, 0x1381,0x135E,0x0000, 0x1381,0x1364,0x0000, -0x1381,0x1365,0x0000, 0x1381,0x13B0,0x0000, 0x1387,0x1364,0x0000, -0x1387,0x13B0,0x0000, 0x1388,0x135E,0x0000, 0x1388,0x1364,0x0000, -0x1388,0x1365,0x0000, 0x1388,0x13B0,0x0000, 0x138C,0x1364,0x0000, -0x138C,0x13B0,0x0000, 0x138D,0x13B0,0x0000, 0x138F,0x135E,0x0000, -0x138F,0x13B0,0x0000, 0x1390,0x135E,0x0000, 0x1390,0x13B0,0x0000, -0x1393,0x135E,0x0000, 0x1393,0x1364,0x0000, 0x1393,0x1365,0x0000, -0x1393,0x13B0,0x0000, 0x1393,0x13C7,0x0000, 0x1393,0x13C8,0x0000, -0x139B,0x1364,0x0000, 0x139B,0x13B0,0x0000, 0x139B,0x13C7,0x0000, -0x139B,0x13C8,0x0000, 0x139E,0x1350,0x0000, 0x139E,0x135E,0x0000, -0x139E,0x1364,0x0000, 0x139E,0x1365,0x0000, 0x139E,0x13AB,0x0000, -0x139E,0x13B0,0x0000, 0x139E,0x13C7,0x0000, 0x139E,0x13C8,0x0000, -0x13AB,0x135E,0x0000, 0x13AB,0x1364,0x0000, 0x13AB,0x1365,0x0000, -0x13AB,0x13B0,0x0000, 0x13AB,0x13C7,0x0000, 0x13AB,0x13C8,0x0000, -0x13B0,0x135E,0x0000, 0x13B0,0x1364,0x0000, 0x13B0,0x1365,0x0000, -0x13B0,0x13B0,0x0000, 0x13B0,0x13C7,0x0000, 0x13B0,0x13C8,0x0000, -0x13B1,0x135E,0x0000, 0x13B1,0x1364,0x0000, 0x13B1,0x1365,0x0000, -0x13B1,0x13B0,0x0000, 0x13B1,0x13C7,0x0000, 0x13B1,0x13C8,0x0000, -0x13B7,0x135E,0x0000, 0x13B7,0x13B0,0x0000, 0x13B7,0x13C7,0x0000, -0x13B7,0x13C8,0x0000, 0x13C8,0x135E,0x0000, 0x13C8,0x1364,0x0000, -0x13C8,0x1365,0x0000, 0x13C8,0x13B0,0x0000, 0x13C8,0x13C7,0x0000, -0x13C8,0x13C8,0x0000, 0x136A,0x0000,0x0000, 0x1375,0x0000,0x0000, -0x13C7,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x134F,0x1375,0x0000, 0x134F,0x1376,0x0000, -0x134F,0x13B0,0x0000, 0x134F,0x13B1,0x0000, 0x134F,0x13C7,0x0000, -0x134F,0x13C8,0x0000, 0x1352,0x1375,0x0000, 0x1352,0x1376,0x0000, -0x1352,0x13B0,0x0000, 0x1352,0x13B1,0x0000, 0x1352,0x13C7,0x0000, -0x1352,0x13C8,0x0000, 0x1357,0x1375,0x0000, 0x1357,0x1376,0x0000, -0x1357,0x13B0,0x0000, 0x1357,0x13B1,0x0000, 0x1357,0x13C7,0x0000, -0x1357,0x13C8,0x0000, 0x1358,0x1375,0x0000, 0x1358,0x1376,0x0000, -0x1358,0x13B0,0x0000, 0x1358,0x13B1,0x0000, 0x1358,0x13C7,0x0000, -0x1358,0x13C8,0x0000, 0x1393,0x13C7,0x0000, 0x1393,0x13C8,0x0000, -0x139B,0x13C7,0x0000, 0x139B,0x13C8,0x0000, 0x139E,0x1350,0x0000, -0x139E,0x13AB,0x0000, 0x139E,0x13B0,0x0000, 0x139E,0x13C7,0x0000, -0x139E,0x13C8,0x0000, 0x13AB,0x13B0,0x0000, 0x13AB,0x13C7,0x0000, -0x13AB,0x13C8,0x0000, 0x13B0,0x1350,0x0000, 0x13B0,0x13B0,0x0000, -0x13B1,0x1375,0x0000, 0x13B1,0x1376,0x0000, 0x13B1,0x13B0,0x0000, -0x13B1,0x13B1,0x0000, 0x13B1,0x13C7,0x0000, 0x13B1,0x13C8,0x0000, -0x13C7,0x0000,0x0000, 0x13C8,0x1375,0x0000, 0x13C8,0x1376,0x0000, -0x13C8,0x13B0,0x0000, 0x13C8,0x13B1,0x0000, 0x13C8,0x13C7,0x0000, -0x13C8,0x13C8,0x0000, 0x134F,0x135E,0x0000, 0x134F,0x1364,0x0000, -0x134F,0x1365,0x0000, 0x134F,0x13B0,0x0000, 0x134F,0x13B7,0x0000, -0x1352,0x135E,0x0000, 0x1352,0x1364,0x0000, 0x1352,0x1365,0x0000, -0x1352,0x13B0,0x0000, 0x1352,0x13B7,0x0000, 0x1357,0x135E,0x0000, -0x1357,0x1364,0x0000, 0x1357,0x1365,0x0000, 0x1357,0x13B0,0x0000, -0x1357,0x13B7,0x0000, 0x1358,0x13B0,0x0000, 0x135E,0x1364,0x0000, -0x135E,0x13B0,0x0000, 0x1364,0x135E,0x0000, 0x1364,0x13B0,0x0000, -0x1365,0x135E,0x0000, 0x1365,0x13B0,0x0000, 0x1381,0x135E,0x0000, -0x1381,0x1364,0x0000, 0x1381,0x1365,0x0000, 0x1381,0x13B0,0x0000, -0x1387,0x1364,0x0000, 0x1387,0x1365,0x0000, 0x1387,0x13B0,0x0000, -0x1388,0x135E,0x0000, 0x1388,0x1364,0x0000, 0x1388,0x1365,0x0000, -0x1388,0x13B0,0x0000, 0x138C,0x1364,0x0000, 0x138D,0x13B0,0x0000, -0x138F,0x135E,0x0000, 0x138F,0x13B0,0x0000, 0x1390,0x135E,0x0000, -0x1390,0x13B0,0x0000, 0x1393,0x135E,0x0000, 0x1393,0x1364,0x0000, -0x1393,0x1365,0x0000, 0x1393,0x13B0,0x0000, 0x139B,0x1364,0x0000, -0x139B,0x13B0,0x0000, 0x139E,0x135E,0x0000, 0x139E,0x1364,0x0000, -0x139E,0x1365,0x0000, 0x139E,0x13AB,0x0000, 0x139E,0x13B0,0x0000, -0x13AB,0x135E,0x0000, 0x13AB,0x1364,0x0000, 0x13AB,0x1365,0x0000, -0x13AB,0x13B0,0x0000, 0x13AB,0x13B7,0x0000, 0x13B0,0x135E,0x0000, -0x13B0,0x1364,0x0000, 0x13B0,0x1365,0x0000, 0x13B0,0x13B0,0x0000, -0x13B1,0x135E,0x0000, 0x13B1,0x1364,0x0000, 0x13B1,0x1365,0x0000, -0x13B1,0x13B0,0x0000, 0x13B1,0x13B7,0x0000, 0x13B7,0x135E,0x0000, -0x13B7,0x13B0,0x0000, 0x13B7,0x0000,0x0000, 0x13C8,0x135E,0x0000, -0x13C8,0x1364,0x0000, 0x13C8,0x1365,0x0000, 0x13C8,0x13B0,0x0000, -0x13C8,0x13B7,0x0000, 0x134F,0x13B0,0x0000, 0x134F,0x13B7,0x0000, -0x1352,0x13B0,0x0000, 0x1352,0x13B7,0x0000, 0x1357,0x13B0,0x0000, -0x1357,0x13B7,0x0000, 0x1358,0x13B0,0x0000, 0x1358,0x13B7,0x0000, -0x1381,0x13B0,0x0000, 0x1381,0x13B7,0x0000, 0x1382,0x13B0,0x0000, -0x1382,0x13B7,0x0000, 0x139E,0x13AB,0x0000, 0x139E,0x13B0,0x0000, -0x13AB,0x13B0,0x0000, 0x13B1,0x13B0,0x0000, 0x13B1,0x13B7,0x0000, -0x13C8,0x13B0,0x0000, 0x13C8,0x13B7,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x138C,0x13C7,0x0000, -0x138C,0x13C8,0x0000, 0x138F,0x13C7,0x0000, 0x138F,0x13C8,0x0000, -0x1390,0x13C7,0x0000, 0x1390,0x13C8,0x0000, 0x1381,0x13C7,0x0000, -0x1381,0x13C8,0x0000, 0x1382,0x13C7,0x0000, 0x1382,0x13C8,0x0000, -0x1364,0x13C7,0x0000 }; - -uint16 page0FDdata[]= { /* FD00 (9 weights per char) */ -0x1364,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x135E,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x135E,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1365,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1365,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1387,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1387,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1388,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1388,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x1365,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x1375,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x1375,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1387,0x1375,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1388,0x1375,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138C,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138C,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138F,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138F,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1390,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1390,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1364,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1364,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x135E,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x135E,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1365,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1365,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1387,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1387,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1388,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1388,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x1365,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x1375,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x1375,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1387,0x1375,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1388,0x1375,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x1365,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x13B7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x13B7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138C,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x1365,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x1365,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138C,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138D,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1350,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1350,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x02C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x02C1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD40,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD41,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD42,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD43,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD44,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD45,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD46,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD47,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD48,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD4A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD4B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD4C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD4D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD4E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD4F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1357,0x135E,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1357,0x1364,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1357,0x1364,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1357,0x1364,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1357,0x1365,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1357,0x13B0,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1357,0x13B0,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1357,0x13B0,0x1365,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x135E,0x13B0,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x135E,0x13B0,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1364,0x13B0,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1364,0x13B0,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x1364,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x135E,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x135E,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x13B0,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x13B0,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x13B0,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1387,0x1364,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1387,0x1364,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1387,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x1364,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x1364,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x135E,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x13B0,0x1365,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x13B0,0x1365,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1388,0x1364,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1388,0x1365,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1388,0x1365,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138C,0x13B0,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138C,0x13B0,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138C,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138C,0x13B0,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138F,0x135E,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138F,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138F,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138F,0x13B0,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1390,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1390,0x13B0,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1390,0x13B0,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1393,0x1365,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1393,0x1365,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x139B,0x13B0,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x139B,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13AB,0x1364,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13AB,0x1364,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13AB,0x1364,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13AB,0x135E,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13AB,0x135E,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13AB,0x1365,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13AB,0x1365,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13AB,0x13B0,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13AB,0x13B0,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B0,0x1364,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B0,0x1364,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B0,0x1364,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B0,0x135E,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B0,0x135E,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B0,0x1365,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B0,0x1365,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD90,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFD91,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B0,0x135E,0x1365,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B7,0x13B0,0x135E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B7,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B1,0x1364,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B1,0x1364,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B1,0x135E,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B1,0x135E,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B1,0x135E,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B1,0x13B0,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B1,0x13B0,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13C8,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13C8,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1352,0x1365,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1357,0x135E,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1357,0x135E,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1357,0x1365,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1357,0x1365,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1357,0x13B0,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1357,0x13B0,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x135E,0x13B0,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x135E,0x1364,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x135E,0x13B0,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x1365,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1387,0x1364,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1382,0x1364,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1388,0x1364,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13AB,0x135E,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13AB,0x13B0,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13C8,0x1364,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13C8,0x135E,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13C8,0x13B0,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B0,0x13B0,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x139B,0x13B0,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B1,0x1364,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x139B,0x13B0,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13AB,0x1364,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138F,0x13B0,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x139E,0x13B0,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B1,0x135E,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B0,0x1365,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13AB,0x135E,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x139E,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13AB,0x135E,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B1,0x135E,0x1364,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x135E,0x1364,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1364,0x135E,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B0,0x135E,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1393,0x13B0,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1352,0x1364,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x139E,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138F,0x135E,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1387,0x13B0,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1381,0x1365,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B1,0x135E,0x13C8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDC8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDC9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDCA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDCB,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDCC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDCD,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDCE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDCF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDD0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDD1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDD2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDD3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDD4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDD5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDD6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDD7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDD8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDD9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDDA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDDB,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDDC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDDD,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDDE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDDF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDE0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDE1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDE2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDE3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDE4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDE5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDE6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDE7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDE8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDE9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDEA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDEB,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDEC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDED,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDEE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDEF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1387,0x13AB,0x13CE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x139B,0x13AB,0x13CE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1350,0x13AB,0x13AB,0x13B7,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1350,0x139E,0x1352,0x1375,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13B0,0x1364,0x13B0,0x1369,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1387,0x13AB,0x138F,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1375,0x1381,0x13BD,0x13AB,0x0000,0x0000,0x0000,0x0000,0x0000, -0x138F,0x13AB,0x13C8,0x13B7,0x0000,0x0000,0x0000,0x0000,0x0000, -0x13BD,0x1381,0x13AB,0x13B0,0x0000,0x0000,0x0000,0x0000,0x0000, -0x1387,0x13AB,0x13C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDFA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0x135E,0x13AB,0x0209,0x135E,0x13AB,0x1350,0x13AB,0x13B7,0x0000, -0x1375,0x13C9,0x1350,0x13AB,0x0000,0x0000,0x0000,0x0000,0x0000, -0x034F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDFE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, -0xFBC1,0xFDFF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 -}; - -uint16 page0FEdata[]= { /* FE00 (3 weights per char) */ -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0xFBC1,0xFE10,0x0000, 0xFBC1,0xFE11,0x0000, -0xFBC1,0xFE12,0x0000, 0xFBC1,0xFE13,0x0000, 0xFBC1,0xFE14,0x0000, -0xFBC1,0xFE15,0x0000, 0xFBC1,0xFE16,0x0000, 0xFBC1,0xFE17,0x0000, -0xFBC1,0xFE18,0x0000, 0xFBC1,0xFE19,0x0000, 0xFBC1,0xFE1A,0x0000, -0xFBC1,0xFE1B,0x0000, 0xFBC1,0xFE1C,0x0000, 0xFBC1,0xFE1D,0x0000, -0xFBC1,0xFE1E,0x0000, 0xFBC1,0xFE1F,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0xFBC1,0xFE24,0x0000, 0xFBC1,0xFE25,0x0000, 0xFBC1,0xFE26,0x0000, -0xFBC1,0xFE27,0x0000, 0xFBC1,0xFE28,0x0000, 0xFBC1,0xFE29,0x0000, -0xFBC1,0xFE2A,0x0000, 0xFBC1,0xFE2B,0x0000, 0xFBC1,0xFE2C,0x0000, -0xFBC1,0xFE2D,0x0000, 0xFBC1,0xFE2E,0x0000, 0xFBC1,0xFE2F,0x0000, -0x025D,0x025D,0x0000, 0x0228,0x0000,0x0000, 0x0227,0x0000,0x0000, -0x021B,0x0000,0x0000, 0x021B,0x0000,0x0000, 0x0288,0x0000,0x0000, -0x0289,0x0000,0x0000, 0x028C,0x0000,0x0000, 0x028D,0x0000,0x0000, -0x02B8,0x0000,0x0000, 0x02B9,0x0000,0x0000, 0x02B6,0x0000,0x0000, -0x02B7,0x0000,0x0000, 0x02B0,0x0000,0x0000, 0x02B1,0x0000,0x0000, -0x02AE,0x0000,0x0000, 0x02AF,0x0000,0x0000, 0x02B2,0x0000,0x0000, -0x02B3,0x0000,0x0000, 0x02B4,0x0000,0x0000, 0x02B5,0x0000,0x0000, -0x0238,0x0000,0x0000, 0x0239,0x0000,0x0000, 0x028A,0x0000,0x0000, -0x028B,0x0000,0x0000, 0x0211,0x0000,0x0000, 0x0211,0x0000,0x0000, -0x0211,0x0000,0x0000, 0x0211,0x0000,0x0000, 0x021B,0x0000,0x0000, -0x021B,0x0000,0x0000, 0x021B,0x0000,0x0000, 0x022F,0x0000,0x0000, -0x0237,0x0000,0x0000, 0x025D,0x0000,0x0000, 0xFBC1,0xFE53,0x0000, -0x023A,0x0000,0x0000, 0x023D,0x0000,0x0000, 0x0255,0x0000,0x0000, -0x0251,0x0000,0x0000, 0x0228,0x0000,0x0000, 0x0288,0x0000,0x0000, -0x0289,0x0000,0x0000, 0x028C,0x0000,0x0000, 0x028D,0x0000,0x0000, -0x02B8,0x0000,0x0000, 0x02B9,0x0000,0x0000, 0x02D2,0x0000,0x0000, -0x02CF,0x0000,0x0000, 0x02C8,0x0000,0x0000, 0x0428,0x0000,0x0000, -0x0221,0x0000,0x0000, 0x042C,0x0000,0x0000, 0x042E,0x0000,0x0000, -0x042D,0x0000,0x0000, 0xFBC1,0xFE67,0x0000, 0x02CE,0x0000,0x0000, -0x0E0F,0x0000,0x0000, 0x02D3,0x0000,0x0000, 0x02C7,0x0000,0x0000, -0xFBC1,0xFE6C,0x0000, 0xFBC1,0xFE6D,0x0000, 0xFBC1,0xFE6E,0x0000, -0xFBC1,0xFE6F,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0xFBC1,0xFE75,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x1347,0x0000,0x0000, -0x1348,0x0000,0x0000, 0x1348,0x0000,0x0000, 0x1349,0x0000,0x0000, -0x1349,0x0000,0x0000, 0x134C,0x0000,0x0000, 0x134C,0x0000,0x0000, -0x134D,0x0000,0x0000, 0x134D,0x0000,0x0000, 0x134F,0x0000,0x0000, -0x134F,0x0000,0x0000, 0x134F,0x0000,0x0000, 0x134F,0x0000,0x0000, -0x1350,0x0000,0x0000, 0x1350,0x0000,0x0000, 0x1352,0x0000,0x0000, -0x1352,0x0000,0x0000, 0x1352,0x0000,0x0000, 0x1352,0x0000,0x0000, -0x1356,0x0000,0x0000, 0x1356,0x0000,0x0000, 0x1357,0x0000,0x0000, -0x1357,0x0000,0x0000, 0x1357,0x0000,0x0000, 0x1357,0x0000,0x0000, -0x1358,0x0000,0x0000, 0x1358,0x0000,0x0000, 0x1358,0x0000,0x0000, -0x1358,0x0000,0x0000, 0x135E,0x0000,0x0000, 0x135E,0x0000,0x0000, -0x135E,0x0000,0x0000, 0x135E,0x0000,0x0000, 0x1364,0x0000,0x0000, -0x1364,0x0000,0x0000, 0x1364,0x0000,0x0000, 0x1364,0x0000,0x0000, -0x1365,0x0000,0x0000, 0x1365,0x0000,0x0000, 0x1365,0x0000,0x0000, -0x1365,0x0000,0x0000, 0x1369,0x0000,0x0000, 0x1369,0x0000,0x0000, -0x136A,0x0000,0x0000, 0x136A,0x0000,0x0000, 0x1375,0x0000,0x0000, -0x1375,0x0000,0x0000, 0x1376,0x0000,0x0000, 0x1376,0x0000,0x0000, -0x1381,0x0000,0x0000, 0x1381,0x0000,0x0000, 0x1381,0x0000,0x0000, -0x1381,0x0000,0x0000, 0x1382,0x0000,0x0000, 0x1382,0x0000,0x0000, -0x1382,0x0000,0x0000, 0x1382,0x0000,0x0000, 0x1387,0x0000,0x0000, -0x1387,0x0000,0x0000, 0x1387,0x0000,0x0000, 0x1387,0x0000,0x0000, -0x1388,0x0000,0x0000, 0x1388,0x0000,0x0000, 0x1388,0x0000,0x0000, -0x1388,0x0000,0x0000, 0x138C,0x0000,0x0000, 0x138C,0x0000,0x0000, -0x138C,0x0000,0x0000, 0x138C,0x0000,0x0000, 0x138D,0x0000,0x0000, -0x138D,0x0000,0x0000, 0x138D,0x0000,0x0000, 0x138D,0x0000,0x0000, -0x138F,0x0000,0x0000, 0x138F,0x0000,0x0000, 0x138F,0x0000,0x0000, -0x138F,0x0000,0x0000, 0x1390,0x0000,0x0000, 0x1390,0x0000,0x0000, -0x1390,0x0000,0x0000, 0x1390,0x0000,0x0000, 0x1393,0x0000,0x0000, -0x1393,0x0000,0x0000, 0x1393,0x0000,0x0000, 0x1393,0x0000,0x0000, -0x139B,0x0000,0x0000, 0x139B,0x0000,0x0000, 0x139B,0x0000,0x0000, -0x139B,0x0000,0x0000, 0x139E,0x0000,0x0000, 0x139E,0x0000,0x0000, -0x139E,0x0000,0x0000, 0x139E,0x0000,0x0000, 0x13AB,0x0000,0x0000, -0x13AB,0x0000,0x0000, 0x13AB,0x0000,0x0000, 0x13AB,0x0000,0x0000, -0x13B0,0x0000,0x0000, 0x13B0,0x0000,0x0000, 0x13B0,0x0000,0x0000, -0x13B0,0x0000,0x0000, 0x13B1,0x0000,0x0000, 0x13B1,0x0000,0x0000, -0x13B1,0x0000,0x0000, 0x13B1,0x0000,0x0000, 0x13B7,0x0000,0x0000, -0x13B7,0x0000,0x0000, 0x13B7,0x0000,0x0000, 0x13B7,0x0000,0x0000, -0x13BD,0x0000,0x0000, 0x13BD,0x0000,0x0000, 0x13C7,0x0000,0x0000, -0x13C7,0x0000,0x0000, 0x13C8,0x0000,0x0000, 0x13C8,0x0000,0x0000, -0x13C8,0x0000,0x0000, 0x13C8,0x0000,0x0000, 0x13AB,0x1348,0x0000, -0x13AB,0x1348,0x0000, 0x13AB,0x1349,0x0000, 0x13AB,0x1349,0x0000, -0x13AB,0x134D,0x0000, 0x13AB,0x134D,0x0000, 0x13AB,0x1350,0x0000, -0x13AB,0x1350,0x0000, 0xFBC1,0xFEFD,0x0000, 0xFBC1,0xFEFE,0x0000, -0x0000,0x0000,0x0000 }; - -uint16 page0FFdata[]= { /* FF00 (3 weights per char) */ -0xFBC1,0xFF00,0x0000, 0x0251,0x0000,0x0000, 0x027E,0x0000,0x0000, -0x02D2,0x0000,0x0000, 0x0E0F,0x0000,0x0000, 0x02D3,0x0000,0x0000, -0x02CF,0x0000,0x0000, 0x0277,0x0000,0x0000, 0x0288,0x0000,0x0000, -0x0289,0x0000,0x0000, 0x02C8,0x0000,0x0000, 0x0428,0x0000,0x0000, -0x022F,0x0000,0x0000, 0x0221,0x0000,0x0000, 0x025D,0x0000,0x0000, -0x02CC,0x0000,0x0000, 0x0E29,0x0000,0x0000, 0x0E2A,0x0000,0x0000, -0x0E2B,0x0000,0x0000, 0x0E2C,0x0000,0x0000, 0x0E2D,0x0000,0x0000, -0x0E2E,0x0000,0x0000, 0x0E2F,0x0000,0x0000, 0x0E30,0x0000,0x0000, -0x0E31,0x0000,0x0000, 0x0E32,0x0000,0x0000, 0x023D,0x0000,0x0000, -0x023A,0x0000,0x0000, 0x042C,0x0000,0x0000, 0x042D,0x0000,0x0000, -0x042E,0x0000,0x0000, 0x0255,0x0000,0x0000, 0x02C7,0x0000,0x0000, -0x0E33,0x0000,0x0000, 0x0E4A,0x0000,0x0000, 0x0E60,0x0000,0x0000, -0x0E6D,0x0000,0x0000, 0x0E8B,0x0000,0x0000, 0x0EB9,0x0000,0x0000, -0x0EC1,0x0000,0x0000, 0x0EE1,0x0000,0x0000, 0x0EFB,0x0000,0x0000, -0x0F10,0x0000,0x0000, 0x0F21,0x0000,0x0000, 0x0F2E,0x0000,0x0000, -0x0F5B,0x0000,0x0000, 0x0F64,0x0000,0x0000, 0x0F82,0x0000,0x0000, -0x0FA7,0x0000,0x0000, 0x0FB4,0x0000,0x0000, 0x0FC0,0x0000,0x0000, -0x0FEA,0x0000,0x0000, 0x1002,0x0000,0x0000, 0x101F,0x0000,0x0000, -0x1044,0x0000,0x0000, 0x1051,0x0000,0x0000, 0x105A,0x0000,0x0000, -0x105E,0x0000,0x0000, 0x106A,0x0000,0x0000, 0x028A,0x0000,0x0000, -0x02CE,0x0000,0x0000, 0x028B,0x0000,0x0000, 0x020F,0x0000,0x0000, -0x021B,0x0000,0x0000, 0x020C,0x0000,0x0000, 0x0E33,0x0000,0x0000, -0x0E4A,0x0000,0x0000, 0x0E60,0x0000,0x0000, 0x0E6D,0x0000,0x0000, -0x0E8B,0x0000,0x0000, 0x0EB9,0x0000,0x0000, 0x0EC1,0x0000,0x0000, -0x0EE1,0x0000,0x0000, 0x0EFB,0x0000,0x0000, 0x0F10,0x0000,0x0000, -0x0F21,0x0000,0x0000, 0x0F2E,0x0000,0x0000, 0x0F5B,0x0000,0x0000, -0x0F64,0x0000,0x0000, 0x0F82,0x0000,0x0000, 0x0FA7,0x0000,0x0000, -0x0FB4,0x0000,0x0000, 0x0FC0,0x0000,0x0000, 0x0FEA,0x0000,0x0000, -0x1002,0x0000,0x0000, 0x101F,0x0000,0x0000, 0x1044,0x0000,0x0000, -0x1051,0x0000,0x0000, 0x105A,0x0000,0x0000, 0x105E,0x0000,0x0000, -0x106A,0x0000,0x0000, 0x028C,0x0000,0x0000, 0x0430,0x0000,0x0000, -0x028D,0x0000,0x0000, 0x0433,0x0000,0x0000, 0x029A,0x0000,0x0000, -0x029B,0x0000,0x0000, 0x0266,0x0000,0x0000, 0x02B2,0x0000,0x0000, -0x02B3,0x0000,0x0000, 0x0237,0x0000,0x0000, 0x022E,0x0000,0x0000, -0x1E80,0x0000,0x0000, 0x1E52,0x0000,0x0000, 0x1E53,0x0000,0x0000, -0x1E54,0x0000,0x0000, 0x1E55,0x0000,0x0000, 0x1E56,0x0000,0x0000, -0x1E75,0x0000,0x0000, 0x1E76,0x0000,0x0000, 0x1E77,0x0000,0x0000, -0x1E63,0x0000,0x0000, 0x0E0B,0x0000,0x0000, 0x1E52,0x0000,0x0000, -0x1E53,0x0000,0x0000, 0x1E54,0x0000,0x0000, 0x1E55,0x0000,0x0000, -0x1E56,0x0000,0x0000, 0x1E57,0x0000,0x0000, 0x1E58,0x0000,0x0000, -0x1E59,0x0000,0x0000, 0x1E5A,0x0000,0x0000, 0x1E5B,0x0000,0x0000, -0x1E5C,0x0000,0x0000, 0x1E5D,0x0000,0x0000, 0x1E5E,0x0000,0x0000, -0x1E5F,0x0000,0x0000, 0x1E60,0x0000,0x0000, 0x1E61,0x0000,0x0000, -0x1E62,0x0000,0x0000, 0x1E63,0x0000,0x0000, 0x1E64,0x0000,0x0000, -0x1E65,0x0000,0x0000, 0x1E66,0x0000,0x0000, 0x1E67,0x0000,0x0000, -0x1E68,0x0000,0x0000, 0x1E69,0x0000,0x0000, 0x1E6A,0x0000,0x0000, -0x1E6B,0x0000,0x0000, 0x1E6C,0x0000,0x0000, 0x1E6D,0x0000,0x0000, -0x1E6E,0x0000,0x0000, 0x1E6F,0x0000,0x0000, 0x1E70,0x0000,0x0000, -0x1E71,0x0000,0x0000, 0x1E72,0x0000,0x0000, 0x1E73,0x0000,0x0000, -0x1E74,0x0000,0x0000, 0x1E75,0x0000,0x0000, 0x1E76,0x0000,0x0000, -0x1E77,0x0000,0x0000, 0x1E78,0x0000,0x0000, 0x1E79,0x0000,0x0000, -0x1E7A,0x0000,0x0000, 0x1E7B,0x0000,0x0000, 0x1E7C,0x0000,0x0000, -0x1E7D,0x0000,0x0000, 0x1E81,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0000,0x0000,0x0000, 0x1DBD,0x0000,0x0000, 0x1D62,0x0000,0x0000, -0x1D63,0x0000,0x0000, 0x1E02,0x0000,0x0000, 0x1D64,0x0000,0x0000, -0x1E04,0x0000,0x0000, 0x1E05,0x0000,0x0000, 0x1D65,0x0000,0x0000, -0x1D66,0x0000,0x0000, 0x1D67,0x0000,0x0000, 0x1E08,0x0000,0x0000, -0x1E09,0x0000,0x0000, 0x1E0A,0x0000,0x0000, 0x1E0B,0x0000,0x0000, -0x1E0C,0x0000,0x0000, 0x1E0D,0x0000,0x0000, 0x1D7C,0x0000,0x0000, -0x1D68,0x0000,0x0000, 0x1D69,0x0000,0x0000, 0x1D6A,0x0000,0x0000, -0x1D83,0x0000,0x0000, 0x1D6B,0x0000,0x0000, 0x1D6C,0x0000,0x0000, -0x1D6D,0x0000,0x0000, 0x1D6E,0x0000,0x0000, 0x1D6F,0x0000,0x0000, -0x1D70,0x0000,0x0000, 0x1D71,0x0000,0x0000, 0x1D72,0x0000,0x0000, -0x1D73,0x0000,0x0000, 0x1D74,0x0000,0x0000, 0xFBC1,0xFFBF,0x0000, -0xFBC1,0xFFC0,0x0000, 0xFBC1,0xFFC1,0x0000, 0x1DBE,0x0000,0x0000, -0x1DBF,0x0000,0x0000, 0x1DC0,0x0000,0x0000, 0x1DC1,0x0000,0x0000, -0x1DC2,0x0000,0x0000, 0x1DC3,0x0000,0x0000, 0xFBC1,0xFFC8,0x0000, -0xFBC1,0xFFC9,0x0000, 0x1DC4,0x0000,0x0000, 0x1DC5,0x0000,0x0000, -0x1DC6,0x0000,0x0000, 0x1DC7,0x0000,0x0000, 0x1DC8,0x0000,0x0000, -0x1DC9,0x0000,0x0000, 0xFBC1,0xFFD0,0x0000, 0xFBC1,0xFFD1,0x0000, -0x1DCA,0x0000,0x0000, 0x1DCB,0x0000,0x0000, 0x1DCC,0x0000,0x0000, -0x1DCD,0x0000,0x0000, 0x1DCE,0x0000,0x0000, 0x1DCF,0x0000,0x0000, -0xFBC1,0xFFD8,0x0000, 0xFBC1,0xFFD9,0x0000, 0x1DD0,0x0000,0x0000, -0x1DD1,0x0000,0x0000, 0x1DD2,0x0000,0x0000, 0xFBC1,0xFFDD,0x0000, -0xFBC1,0xFFDE,0x0000, 0xFBC1,0xFFDF,0x0000, 0x0E0E,0x0000,0x0000, -0x0E10,0x0000,0x0000, 0x042F,0x0000,0x0000, 0x0210,0x0000,0x0000, -0x0431,0x0000,0x0000, 0x0E11,0x0000,0x0000, 0x0E20,0x0000,0x0000, -0xFBC1,0xFFE7,0x0000, 0x05FE,0x0000,0x0000, 0x03AE,0x0000,0x0000, -0x03B0,0x0000,0x0000, 0x03AF,0x0000,0x0000, 0x03B1,0x0000,0x0000, -0x069C,0x0000,0x0000, 0x06C7,0x0000,0x0000, 0xFBC1,0xFFEF,0x0000, -0xFBC1,0xFFF0,0x0000, 0xFBC1,0xFFF1,0x0000, 0xFBC1,0xFFF2,0x0000, -0xFBC1,0xFFF3,0x0000, 0xFBC1,0xFFF4,0x0000, 0xFBC1,0xFFF5,0x0000, -0xFBC1,0xFFF6,0x0000, 0xFBC1,0xFFF7,0x0000, 0xFBC1,0xFFF8,0x0000, -0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, -0x0DC5,0x0000,0x0000, 0x0DC6,0x0000,0x0000, 0xFBC1,0xFFFE,0x0000, -0xFBC1,0xFFFF,0x0000 }; - -uchar uca_length[256]={ -4,3,3,4,3,3,3,3,0,3,3,3,3,3,3,3, -3,3,3,3,3,2,3,3,3,3,0,0,0,3,3,3, -5,5,4,3,5,2,3,3,2,2,5,3,0,0,3,3, -3,3,8,9,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,3,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,3,3,4,3,9,3,3 -}; -uint16 *uca_weight[256]={ -page000data,page001data,page002data,page003data, -page004data,page005data,page006data,page007data, -NULL ,page009data,page00Adata,page00Bdata, -page00Cdata,page00Ddata,page00Edata,page00Fdata, -page010data,page011data,page012data,page013data, -page014data,page015data,page016data,page017data, -page018data,page019data,NULL ,NULL , -NULL ,page01Ddata,page01Edata,page01Fdata, -page020data,page021data,page022data,page023data, -page024data,page025data,page026data,page027data, -page028data,page029data,page02Adata,page02Bdata, -NULL ,NULL ,page02Edata,page02Fdata, -page030data,page031data,page032data,page033data, -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,page04Ddata,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -page0A0data,page0A1data,page0A2data,page0A3data, -page0A4data,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,page0F9data,page0FAdata,page0FBdata, -page0FCdata,page0FDdata,page0FEdata,page0FFdata -}; - -/* - Some sources treat LETTER A WITH DIARESIS (00E4,00C4) - secondary greater than LETTER AE (00E6,00C6). - http://www.evertype.com/alphabets/icelandic.pdf - http://developer.mimer.com/collations/charts/icelandic.htm - - Other sources do not provide any special rules - for LETTER A WITH DIARESIS: - http://www.omniglot.com/writing/icelandic.htm - http://en.wikipedia.org/wiki/Icelandic_alphabet - http://oss.software.ibm.com/icu/charts/collation/is.html - - Let's go the first way. -*/ - -static const char icelandic[]= - "& A < \\u00E1 <<< \\u00C1 " - "& D < \\u00F0 <<< \\u00D0 " - "& E < \\u00E9 <<< \\u00C9 " - "& I < \\u00ED <<< \\u00CD " - "& O < \\u00F3 <<< \\u00D3 " - "& U < \\u00FA <<< \\u00DA " - "& Y < \\u00FD <<< \\u00DD " - "& Z < \\u00FE <<< \\u00DE " - "< \\u00E6 <<< \\u00C6 << \\u00E4 <<< \\u00C4 " - "< \\u00F6 <<< \\u00D6 << \\u00F8 <<< \\u00D8 " - "< \\u00E5 <<< \\u00C5 "; - -/* - Some sources treat I and Y primary different. - Other sources treat I and Y the same on primary level. - We'll go the first way. -*/ - -static const char latvian[]= - "& C < \\u010D <<< \\u010C " - "& G < \\u0123 <<< \\u0122 " - "& I < \\u0079 <<< \\u0059 " - "& K < \\u0137 <<< \\u0136 " - "& L < \\u013C <<< \\u013B " - "& N < \\u0146 <<< \\u0145 " - "& R < \\u0157 <<< \\u0156 " - "& S < \\u0161 <<< \\u0160 " - "& Z < \\u017E <<< \\u017D "; - - -static const char romanian[]= - "& A < \\u0103 <<< \\u0102 < \\u00E2 <<< \\u00C2 " - "& I < \\u00EE <<< \\u00CE " - "& S < \\u0219 <<< \\u0218 << \\u015F <<< \\u015E " - "& T < \\u021B <<< \\u021A << \\u0163 <<< \\u0162 "; - -static const char slovenian[]= - "& C < \\u010D <<< \\u010C " - "& S < \\u0161 <<< \\u0160 " - "& Z < \\u017E <<< \\u017D "; - - -static const char polish[]= - "& A < \\u0105 <<< \\u0104 " - "& C < \\u0107 <<< \\u0106 " - "& E < \\u0119 <<< \\u0118 " - "& L < \\u0142 <<< \\u0141 " - "& N < \\u0144 <<< \\u0143 " - "& O < \\u00F3 <<< \\u00D3 " - "& S < \\u015B <<< \\u015A " - "& Z < \\u017A <<< \\u0179 < \\u017C <<< \\u017B"; - -static const char estonian[]= - "& S < \\u0161 <<< \\u0160 " - " < \\u007A <<< \\u005A " - " < \\u017E <<< \\u017D " - "& W < \\u00F5 <<< \\u00D5 " - "< \\u00E4 <<< \\u00C4 " - "< \\u00F6 <<< \\u00D6 " - "< \\u00FC <<< \\u00DC "; - -static const char spanish[]= "& N < \\u00F1 <<< \\u00D1 "; - -/* - Some sources treat V and W as similar on primary level. - We'll treat V and W as different on primary level. -*/ - -static const char swedish[]= - "& Y <<\\u00FC <<< \\u00DC " - "& Z < \\u00E5 <<< \\u00C5 " - "< \\u00E4 <<< \\u00C4 << \\u00E6 <<< \\u00C6 " - "< \\u00F6 <<< \\u00D6 << \\u00F8 <<< \\u00D8 "; - -static const char turkish[]= - "& C < \\u00E7 <<< \\u00C7 " - "& G < \\u011F <<< \\u011E " - "& H < \\u0131 <<< \\u0049 " - "& O < \\u00F6 <<< \\u00D6 " - "& S < \\u015F <<< \\u015E " - "& U < \\u00FC <<< \\u00DC "; - - -static const char czech[]= - "& C < \\u010D <<< \\u010C " - "& H < ch <<< Ch <<< CH" - "& R < \\u0159 <<< \\u0158" - "& S < \\u0161 <<< \\u0160" - "& Z < \\u017E <<< \\u017D"; - -static const char danish[]= /* Also good for Norwegian */ - "& Y << \\u00FC <<< \\u00DC << \\u0171 <<< \\u0170" - "& Z < \\u00E6 <<< \\u00C6 << \\u00E4 <<< \\u00C4" - " < \\u00F8 <<< \\u00D8 << \\u00F6 <<< \\u00D6 << \\u0151 <<< \\u0150" - " < \\u00E5 <<< \\u00C5 << aa <<< Aa <<< AA"; - -static const char lithuanian[]= - "& C << ch <<< Ch <<< CH< \\u010D <<< \\u010C" - "& E << \\u0119 <<< \\u0118 << \\u0117 <<< \\u0116" - "& I << y <<< Y" - "& S < \\u0161 <<< \\u0160" - "& Z < \\u017E <<< \\u017D"; - -static const char slovak[]= - "& A < \\u00E4 <<< \\u00C4" - "& C < \\u010D <<< \\u010C" - "& H < ch <<< Ch <<< CH" - "& O < \\u00F4 <<< \\u00D4" - "& S < \\u0161 <<< \\u0160" - "& Z < \\u017E <<< \\u017D"; - -static const char spanish2[]= /* Also good for Asturian and Galician */ - "&C < ch <<< Ch <<< CH" - "&L < ll <<< Ll <<< LL" - "&N < \\u00F1 <<< \\u00D1"; - -static const char roman[]= /* i.e. Classical Latin */ - "& I << j <<< J " - "& V << u <<< U "; - -/* - Persian collation support was provided by - Jody McIntyre - - To: internals@lists.mysql.com - Subject: Persian UTF8 collation support - Date: 17.08.2004 - - Contraction is not implemented. Some implementations do perform - contraction but others do not, and it is able to sort all my test - strings correctly. - - Jody. -*/ -static const char persian[]= - "& \\u066D < \\u064E < \\uFE76 < \\uFE77 < \\u0650 < \\uFE7A < \\uFE7B" - " < \\u064F < \\uFE78 < \\uFE79 < \\u064B < \\uFE70 < \\uFE71" - " < \\u064D < \\uFE74 < \\u064C < \\uFE72" - "& \\uFE7F < \\u0653 < \\u0654 < \\u0655 < \\u0670" - "& \\u0669 < \\u0622 < \\u0627 < \\u0671 < \\u0621 < \\u0623 < \\u0625" - " < \\u0624 < \\u0626" - "& \\u0642 < \\u06A9 < \\u0643" - "& \\u0648 < \\u0647 < \\u0629 < \\u06C0 < \\u06CC < \\u0649 < \\u064A" - "& \\uFE80 < \\uFE81 < \\uFE82 < \\uFE8D < \\uFE8E < \\uFB50 < \\uFB51" - " < \\uFE80 < \\uFE83 < \\uFE84 < \\uFE87 < \\uFE88 < \\uFE85" - " < \\uFE86 < \\u0689 < \\u068A" - "& \\uFEAE < \\uFDFC" - "& \\uFED8 < \\uFB8E < \\uFB8F < \\uFB90 < \\uFB91 < \\uFED9 < \\uFEDA" - " < \\uFEDB < \\uFEDC" - "& \\uFEEE < \\uFEE9 < \\uFEEA < \\uFEEB < \\uFEEC < \\uFE93 < \\uFE94" - " < \\uFBA4 < \\uFBA5 < \\uFBFC < \\uFBFD < \\uFBFE < \\uFBFF" - " < \\uFEEF < \\uFEF0 < \\uFEF1 < \\uFEF2 < \\uFEF3 < \\uFEF4" - " < \\uFEF5 < \\uFEF6 < \\uFEF7 < \\uFEF8 < \\uFEF9 < \\uFEFA" - " < \\uFEFB < \\uFEFC"; - -/* - Esperanto tailoring. - Contributed by Bertilo Wennergren - September 1, 2005 -*/ -static const char esperanto[]= - "& C < \\u0109 <<< \\u0108" - "& G < \\u011D <<< \\u011C" - "& H < \\u0125 <<< \\u0124" - "& J < \\u0135 <<< \\u0134" - "& S < \\u015d <<< \\u015c" - "& U < \\u016d <<< \\u016c"; - -/* - A simplified version of Hungarian, without consonant contractions. -*/ -static const char hungarian[]= - "&O < \\u00F6 <<< \\u00D6 << \\u0151 <<< \\u0150" - "&U < \\u00FC <<< \\u00DC << \\u0171 <<< \\u0170"; - -/* - SCCII Part 1 : Collation Sequence (SLS1134) - 2006/11/24 - Harshula Jayasuriya - Language Technology Research Lab, University of Colombo / ICTA -*/ -#if 0 -static const char sinhala[]= - "& \\u0D96 < \\u0D82 < \\u0D83" - "& \\u0DA5 < \\u0DA4" - "& \\u0DD8 < \\u0DF2 < \\u0DDF < \\u0DF3" - "& \\u0DDE < \\u0DCA"; -#else -static const char sinhala[]= - "& \\u0D96 < \\u0D82 < \\u0D83 < \\u0D9A < \\u0D9B < \\u0D9C < \\u0D9D" - "< \\u0D9E < \\u0D9F < \\u0DA0 < \\u0DA1 < \\u0DA2 < \\u0DA3" - "< \\u0DA5 < \\u0DA4 < \\u0DA6" - "< \\u0DA7 < \\u0DA8 < \\u0DA9 < \\u0DAA < \\u0DAB < \\u0DAC" - "< \\u0DAD < \\u0DAE < \\u0DAF < \\u0DB0 < \\u0DB1" - "< \\u0DB3 < \\u0DB4 < \\u0DB5 < \\u0DB6 < \\u0DB7 < \\u0DB8" - "< \\u0DB9 < \\u0DBA < \\u0DBB < \\u0DBD < \\u0DC0 < \\u0DC1" - "< \\u0DC2 < \\u0DC3 < \\u0DC4 < \\u0DC5 < \\u0DC6" - "< \\u0DCF" - "< \\u0DD0 < \\u0DD1 < \\u0DD2 < \\u0DD3 < \\u0DD4 < \\u0DD6" - "< \\u0DD8 < \\u0DF2 < \\u0DDF < \\u0DF3 < \\u0DD9 < \\u0DDA" - "< \\u0DDB < \\u0DDC < \\u0DDD < \\u0DDE < \\u0DCA"; -#endif - - -/* - Unicode Collation Algorithm: - Collation element (weight) scanner, - for consequent scan of collations - weights from a string. -*/ -typedef struct my_uca_scanner_st -{ - const uint16 *wbeg; /* Beginning of the current weight string */ - const uchar *sbeg; /* Beginning of the input string */ - const uchar *send; /* End of the input string */ - uchar *uca_length; - uint16 **uca_weight; - uint16 *contractions; - uint16 implicit[2]; - int page; - int code; - CHARSET_INFO *cs; -} my_uca_scanner; - -/* - Charset dependent scanner part, to optimize - some character sets. -*/ -typedef struct my_uca_scanner_handler_st -{ - void (*init)(my_uca_scanner *scanner, CHARSET_INFO *cs, - const uchar *str, size_t length); - int (*next)(my_uca_scanner *scanner); -} my_uca_scanner_handler; - -static uint16 nochar[]= {0,0}; - - -#ifdef HAVE_CHARSET_ucs2 -/* - Initialize collation weight scanner - - SYNOPSIS: - my_uca_scanner_init() - scanner Pointer to an initialized scanner structure - cs Character set + collation information - str Beginning of the string - length Length of the string. - - NOTES: - Optimized for UCS2 - - RETURN - N/A -*/ - -static void my_uca_scanner_init_ucs2(my_uca_scanner *scanner, - CHARSET_INFO *cs __attribute__((unused)), - const uchar *str, size_t length) -{ - scanner->wbeg= nochar; - if (length) - { - scanner->sbeg= str; - scanner->send= str + length - 2; - scanner->uca_length= cs->sort_order; - scanner->uca_weight= cs->sort_order_big; - scanner->contractions= cs->contractions; - return; - } - - /* - Sometimes this function is called with - str=NULL and length=0, which should be - considered as an empty string. - - The above initialization is unsafe for such cases, - because scanner->send is initialized to (NULL-2), which is 0xFFFFFFFE. - Then we fall into an endless loop in my_uca_scanner_next_ucs2(). - - Do special initialization for the case when length=0. - Initialize scanner->sbeg to an address greater than scanner->send. - Next call of my_uca_scanner_next_ucs2() will correctly return with -1. - */ - scanner->sbeg= (uchar*) &nochar[1]; - scanner->send= (uchar*) &nochar[0]; -} - - -/* - Read next collation element (weight), i.e. converts - a stream of characters into a stream of their weights. - - SYNOPSIS: - my_uca_scanner_next() - scanner Address of a previously initialized scanner strucuture - - NOTES: - Optimized for UCS2 - - Checks if the current character's weight string has been fully scanned, - if no, then returns the next weight for this character, - else scans the next character and returns its first weight. - - Each character can have number weights from 0 to 8. - - Some characters do not have weights at all, 0 weights. - It means they are ignored during comparison. - - Examples: - 1. 0x0001 START OF HEADING, has no weights, ignored, does - not produce any weights. - 2. 0x0061 LATIN SMALL LETTER A, has one weight. - 0x0E33 will be returned - 3. 0x00DF LATIN SMALL LETTER SHARP S, aka SZ ligature, - has two weights. It will return 0x0FEA twice for two - consequent calls. - 4. 0x247D PATENTHESIZED NUMBER TEN, has four weights, - this function will return these numbers in four - consequent calls: 0x0288, 0x0E2A, 0x0E29, 0x0289 - 5. A string consisting of the above characters: - 0x0001 0x0061 0x00DF 0x247D - will return the following weights, one weight per call: - 0x0E33 0x0FEA 0x0FEA 0x0288, 0x0E2A, 0x0E29, 0x0289 - - RETURN - Next weight, a number between 0x0000 and 0xFFFF - Or -1 on error (END-OF-STRING or ILLEGAL MULTIBYTE SEQUENCE) -*/ - -static int my_uca_scanner_next_ucs2(my_uca_scanner *scanner) -{ - - /* - Check if the weights for the previous character have been - already fully scanned. If yes, then get the next character and - initialize wbeg and wlength to its weight string. - */ - - if (scanner->wbeg[0]) - return *scanner->wbeg++; - - do - { - uint16 **ucaw= scanner->uca_weight; - uchar *ucal= scanner->uca_length; - - if (scanner->sbeg > scanner->send) - return -1; - - scanner->page= (uchar)scanner->sbeg[0]; - scanner->code= (uchar)scanner->sbeg[1]; - scanner->sbeg+= 2; - - if (scanner->contractions && (scanner->sbeg <= scanner->send)) - { - int cweight; - - if (!scanner->page && !scanner->sbeg[0] && - (scanner->sbeg[1] > 0x40) && (scanner->sbeg[1] < 0x80) && - (scanner->code > 0x40) && (scanner->code < 0x80) && - (cweight= scanner->contractions[(scanner->code-0x40)*0x40+scanner->sbeg[1]-0x40])) - { - scanner->implicit[0]= 0; - scanner->wbeg= scanner->implicit; - scanner->sbeg+=2; - return cweight; - } - } - - if (!ucaw[scanner->page]) - goto implicit; - scanner->wbeg= ucaw[scanner->page] + scanner->code * ucal[scanner->page]; - } while (!scanner->wbeg[0]); - - return *scanner->wbeg++; - -implicit: - - scanner->code= (scanner->page << 8) + scanner->code; - scanner->implicit[0]= (scanner->code & 0x7FFF) | 0x8000; - scanner->implicit[1]= 0; - scanner->wbeg= scanner->implicit; - - scanner->page= scanner->page >> 7; - - if (scanner->code >= 0x3400 && scanner->code <= 0x4DB5) - scanner->page+= 0xFB80; - else if (scanner->code >= 0x4E00 && scanner->code <= 0x9FA5) - scanner->page+= 0xFB40; - else - scanner->page+= 0xFBC0; - - return scanner->page; -} - -static my_uca_scanner_handler my_ucs2_uca_scanner_handler= -{ - my_uca_scanner_init_ucs2, - my_uca_scanner_next_ucs2 -}; - -#endif - - -/* - The same two functions for any character set -*/ -static void my_uca_scanner_init_any(my_uca_scanner *scanner, - CHARSET_INFO *cs __attribute__((unused)), - const uchar *str, size_t length) -{ - /* Note, no needs to initialize scanner->wbeg */ - scanner->sbeg= str; - scanner->send= str + length; - scanner->wbeg= nochar; - scanner->uca_length= cs->sort_order; - scanner->uca_weight= cs->sort_order_big; - scanner->contractions= cs->contractions; - scanner->cs= cs; -} - -static int my_uca_scanner_next_any(my_uca_scanner *scanner) -{ - - /* - Check if the weights for the previous character have been - already fully scanned. If yes, then get the next character and - initialize wbeg and wlength to its weight string. - */ - - if (scanner->wbeg[0]) - return *scanner->wbeg++; - - do - { - uint16 **ucaw= scanner->uca_weight; - uchar *ucal= scanner->uca_length; - my_wc_t wc; - int mb_len; - - if (((mb_len= scanner->cs->cset->mb_wc(scanner->cs, &wc, - scanner->sbeg, - scanner->send)) <= 0)) - return -1; - - scanner->sbeg+= mb_len; - if (wc > 0xFFFF) - { - /* Return 0xFFFD as weight for all characters outside BMP */ - scanner->wbeg= nochar; - return 0xFFFD; - } - else - { - scanner->page= wc >> 8; - scanner->code= wc & 0xFF; - } - - if (scanner->contractions && !scanner->page && - (scanner->code > 0x40) && (scanner->code < 0x80)) - { - uint page1, code1, cweight; - - if (((mb_len= scanner->cs->cset->mb_wc(scanner->cs, &wc, - scanner->sbeg, - scanner->send)) >=0) && - (!(page1= (wc >> 8))) && - ((code1= (wc & 0xFF)) > 0x40) && - (code1 < 0x80) && - (cweight= scanner->contractions[(scanner->code-0x40)*0x40 + code1-0x40])) - { - scanner->implicit[0]= 0; - scanner->wbeg= scanner->implicit; - scanner->sbeg+= mb_len; - return cweight; - } - } - - if (!ucaw[scanner->page]) - goto implicit; - scanner->wbeg= ucaw[scanner->page] + scanner->code * ucal[scanner->page]; - } while (!scanner->wbeg[0]); - - return *scanner->wbeg++; - -implicit: - - scanner->code= (scanner->page << 8) + scanner->code; - scanner->implicit[0]= (scanner->code & 0x7FFF) | 0x8000; - scanner->implicit[1]= 0; - scanner->wbeg= scanner->implicit; - - scanner->page= scanner->page >> 7; - - if (scanner->code >= 0x3400 && scanner->code <= 0x4DB5) - scanner->page+= 0xFB80; - else if (scanner->code >= 0x4E00 && scanner->code <= 0x9FA5) - scanner->page+= 0xFB40; - else - scanner->page+= 0xFBC0; - - return scanner->page; -} - - -static my_uca_scanner_handler my_any_uca_scanner_handler= -{ - my_uca_scanner_init_any, - my_uca_scanner_next_any -}; - -/* - Compares two strings according to the collation - - SYNOPSIS: - my_strnncoll_uca() - cs Character set information - s First string - slen First string length - t Second string - tlen Seconf string length - - NOTES: - Initializes two weight scanners and gets weights - corresponding to two strings in a loop. If weights are not - the same at some step then returns their difference. - - In the while() comparison these situations are possible: - 1. (s_res>0) and (t_res>0) and (s_res == t_res) - Weights are the same so far, continue comparison - 2. (s_res>0) and (t_res>0) and (s_res!=t_res) - A difference has been found, return. - 3. (s_res>0) and (t_res<0) - We have reached the end of the second string, or found - an illegal multibyte sequence in the second string. - Return a positive number, i.e. the first string is bigger. - 4. (s_res<0) and (t_res>0) - We have reached the end of the first string, or found - an illegal multibyte sequence in the first string. - Return a negative number, i.e. the second string is bigger. - 5. (s_res<0) and (t_res<0) - Both scanners returned -1. It means we have riched - the end-of-string of illegal-sequence in both strings - at the same time. Return 0, strings are equal. - - RETURN - Difference between two strings, according to the collation: - 0 - means strings are equal - negative number - means the first string is smaller - positive number - means the first string is bigger -*/ - -static int my_strnncoll_uca(CHARSET_INFO *cs, - my_uca_scanner_handler *scanner_handler, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - my_uca_scanner sscanner; - my_uca_scanner tscanner; - int s_res; - int t_res; - - scanner_handler->init(&sscanner, cs, s, slen); - scanner_handler->init(&tscanner, cs, t, tlen); - - do - { - s_res= scanner_handler->next(&sscanner); - t_res= scanner_handler->next(&tscanner); - } while ( s_res == t_res && s_res >0); - - return (t_is_prefix && t_res < 0) ? 0 : (s_res - t_res); -} - -/* - Compares two strings according to the collation, - ignoring trailing spaces. - - SYNOPSIS: - my_strnncollsp_uca() - cs Character set information - s First string - slen First string length - t Second string - tlen Seconf string length - diff_if_only_endspace_difference - Set to 1 if the strings should be regarded as different - if they only difference in end space - - NOTES: - Works exactly the same with my_strnncoll_uca(), - but ignores trailing spaces. - - In the while() comparison these situations are possible: - 1. (s_res>0) and (t_res>0) and (s_res == t_res) - Weights are the same so far, continue comparison - 2. (s_res>0) and (t_res>0) and (s_res!=t_res) - A difference has been found, return. - 3. (s_res>0) and (t_res<0) - We have reached the end of the second string, or found - an illegal multibyte sequence in the second string. - Compare the first string to an infinite array of - space characters until difference is found, or until - the end of the first string. - 4. (s_res<0) and (t_res>0) - We have reached the end of the first string, or found - an illegal multibyte sequence in the first string. - Compare the second string to an infinite array of - space characters until difference is found or until - the end of the second steing. - 5. (s_res<0) and (t_res<0) - Both scanners returned -1. It means we have riched - the end-of-string of illegal-sequence in both strings - at the same time. Return 0, strings are equal. - - RETURN - Difference between two strings, according to the collation: - 0 - means strings are equal - negative number - means the first string is smaller - positive number - means the first string is bigger -*/ - -static int my_strnncollsp_uca(CHARSET_INFO *cs, - my_uca_scanner_handler *scanner_handler, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference) -{ - my_uca_scanner sscanner, tscanner; - int s_res, t_res; - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= 0; -#endif - - scanner_handler->init(&sscanner, cs, s, slen); - scanner_handler->init(&tscanner, cs, t, tlen); - - do - { - s_res= scanner_handler->next(&sscanner); - t_res= scanner_handler->next(&tscanner); - } while ( s_res == t_res && s_res >0); - - if (s_res > 0 && t_res < 0) - { - /* Calculate weight for SPACE character */ - t_res= cs->sort_order_big[0][0x20 * cs->sort_order[0]]; - - /* compare the first string to spaces */ - do - { - if (s_res != t_res) - return (s_res - t_res); - s_res= scanner_handler->next(&sscanner); - } while (s_res > 0); - return diff_if_only_endspace_difference ? 1 : 0; - } - - if (s_res < 0 && t_res > 0) - { - /* Calculate weight for SPACE character */ - s_res= cs->sort_order_big[0][0x20 * cs->sort_order[0]]; - - /* compare the second string to spaces */ - do - { - if (s_res != t_res) - return (s_res - t_res); - t_res= scanner_handler->next(&tscanner); - } while (t_res > 0); - return diff_if_only_endspace_difference ? -1 : 0; - } - - return ( s_res - t_res ); -} - -/* - Calculates hash value for the given string, - according to the collation, and ignoring trailing spaces. - - SYNOPSIS: - my_hash_sort_uca() - cs Character set information - s String - slen String's length - n1 First hash parameter - n2 Second hash parameter - - NOTES: - Scans consequently weights and updates - hash parameters n1 and n2. In a case insensitive collation, - upper and lower case of the same letter will return the same - weight sequence, and thus will produce the same hash values - in n1 and n2. - - RETURN - N/A -*/ - -static void my_hash_sort_uca(CHARSET_INFO *cs, - my_uca_scanner_handler *scanner_handler, - const uchar *s, size_t slen, - ulong *n1, ulong *n2) -{ - int s_res; - my_uca_scanner scanner; - - slen= cs->cset->lengthsp(cs, (char*) s, slen); - scanner_handler->init(&scanner, cs, s, slen); - - while ((s_res= scanner_handler->next(&scanner)) >0) - { - n1[0]^= (((n1[0] & 63)+n2[0])*(s_res >> 8))+ (n1[0] << 8); - n2[0]+=3; - n1[0]^= (((n1[0] & 63)+n2[0])*(s_res & 0xFF))+ (n1[0] << 8); - n2[0]+=3; - } -} - - -/* - For the given string creates its "binary image", suitable - to be used in binary comparison, i.e. in memcmp(). - - SYNOPSIS: - my_strnxfrm_uca() - cs Character set information - dst Where to write the image - dstlen Space available for the image, in bytes - src The source string - srclen Length of the source string, in bytes - - NOTES: - In a loop, scans weights from the source string and writes - them into the binary image. In a case insensitive collation, - upper and lower cases of the same letter will produce the - same image subsequences. When we have reached the end-of-string - or found an illegal multibyte sequence, the loop stops. - - It is impossible to restore the original string using its - binary image. - - Binary images are used for bulk comparison purposes, - e.g. in ORDER BY, when it is more efficient to create - a binary image and use it instead of weight scanner - for the original strings for every comparison. - - RETURN - Number of bytes that have been written into the binary image. -*/ - -static size_t my_strnxfrm_uca(CHARSET_INFO *cs, - my_uca_scanner_handler *scanner_handler, - uchar *dst, size_t dstlen, - const uchar *src, size_t srclen) -{ - uchar *de= dst + (dstlen & (size_t) ~1); /* add even length for easier code */ - int s_res; - my_uca_scanner scanner; - scanner_handler->init(&scanner, cs, src, srclen); - - while (dst < de && (s_res= scanner_handler->next(&scanner)) >0) - { - dst[0]= s_res >> 8; - dst[1]= s_res & 0xFF; - dst+= 2; - } - s_res= cs->sort_order_big[0][0x20 * cs->sort_order[0]]; - while (dst < de) - { - dst[0]= s_res >> 8; - dst[1]= s_res & 0xFF; - dst+= 2; - } - if (dstlen & 1) /* if odd number then fill the last char */ - *dst= '\0'; - - return dstlen; -} - - - -/* - This function compares if two characters are the same. - The sign +1 or -1 does not matter. The only - important thing is that the result is 0 or not 0. - This fact allows us to use memcmp() safely, on both - little-endian and big-endian machines. -*/ - -static int my_uca_charcmp(CHARSET_INFO *cs, my_wc_t wc1, my_wc_t wc2) -{ - size_t page1= wc1 >> MY_UCA_PSHIFT; - size_t page2= wc2 >> MY_UCA_PSHIFT; - uchar *ucal= cs->sort_order; - uint16 **ucaw= cs->sort_order_big; - size_t length1= ucal[page1]; - size_t length2= ucal[page2]; - uint16 *weight1= ucaw[page1] + (wc1 & MY_UCA_CMASK) * ucal[page1]; - uint16 *weight2= ucaw[page2] + (wc2 & MY_UCA_CMASK) * ucal[page2]; - - if (!weight1 || !weight2) - return wc1 != wc2; - - if (length1 > length2) - return memcmp((const void*)weight1, (const void*)weight2, length2*2) ? - 1: weight1[length2]; - - if (length1 < length2) - return memcmp((const void*)weight1, (const void*)weight2, length1*2) ? - 1 : weight2[length1]; - - return memcmp((const void*)weight1, (const void*)weight2, length1*2); -} - -/* -** Compare string against string with wildcard -** 0 if matched -** -1 if not matched with wildcard -** 1 if matched with wildcard -*/ - -static -int my_wildcmp_uca(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many) -{ - int result= -1; /* Not found, using wildcards */ - my_wc_t s_wc, w_wc; - int scan; - int (*mb_wc)(struct charset_info_st *, my_wc_t *, - const uchar *, const uchar *); - mb_wc= cs->cset->mb_wc; - - while (wildstr != wildend) - { - while (1) - { - my_bool escaped= 0; - if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, - (const uchar*)wildend)) <= 0) - return 1; - - if (w_wc == (my_wc_t)w_many) - { - result= 1; /* Found an anchor char */ - break; - } - - wildstr+= scan; - if (w_wc == (my_wc_t)escape) - { - if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, - (const uchar*)wildend)) <= 0) - return 1; - wildstr+= scan; - escaped= 1; - } - - if ((scan= mb_wc(cs, &s_wc, (const uchar*)str, - (const uchar*)str_end)) <= 0) - return 1; - str+= scan; - - if (!escaped && w_wc == (my_wc_t)w_one) - { - result= 1; /* Found an anchor char */ - } - else - { - if (my_uca_charcmp(cs,s_wc,w_wc)) - return 1; - } - if (wildstr == wildend) - return (str != str_end); /* Match if both are at end */ - } - - - if (w_wc == (my_wc_t)w_many) - { /* Found w_many */ - - /* Remove any '%' and '_' from the wild search string */ - for ( ; wildstr != wildend ; ) - { - if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, - (const uchar*)wildend)) <= 0) - return 1; - - if (w_wc == (my_wc_t)w_many) - { - wildstr+= scan; - continue; - } - - if (w_wc == (my_wc_t)w_one) - { - wildstr+= scan; - if ((scan= mb_wc(cs, &s_wc, (const uchar*)str, - (const uchar*)str_end)) <= 0) - return 1; - str+= scan; - continue; - } - break; /* Not a wild character */ - } - - if (wildstr == wildend) - return 0; /* Ok if w_many is last */ - - if (str == str_end) - return -1; - - if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, - (const uchar*)wildend)) <= 0) - return 1; - - if (w_wc == (my_wc_t)escape) - { - wildstr+= scan; - if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, - (const uchar*)wildend)) <= 0) - return 1; - } - - while (1) - { - /* Skip until the first character from wildstr is found */ - while (str != str_end) - { - if ((scan= mb_wc(cs, &s_wc, (const uchar*)str, - (const uchar*)str_end)) <= 0) - return 1; - - if (!my_uca_charcmp(cs,s_wc,w_wc)) - break; - str+= scan; - } - if (str == str_end) - return -1; - - result= my_wildcmp_uca(cs, str, str_end, wildstr, wildend, - escape, w_one, w_many); - - if (result <= 0) - return result; - - str+= scan; - } - } - } - return (str != str_end ? 1 : 0); -} - - -/* - Collation language is implemented according to - subset of ICU Collation Customization (tailorings): - http://oss.software.ibm.com/icu/userguide/Collate_Customization.html - - Collation language elements: - Delimiters: - space - skipped - - := A-Z | a-z | \uXXXX - - Shift command: - := & - reset at this letter. - - Diff command: - := < - Identifies a primary difference. - := << - Identifies a secondary difference. - := <<< - Idenfifies a tertiary difference. - - - Collation rules: - := { } - - := - | - | - | - - := [ ] - - An example, Polish collation: - - &A < \u0105 <<< \u0104 - &C < \u0107 <<< \u0106 - &E < \u0119 <<< \u0118 - &L < \u0142 <<< \u0141 - &N < \u0144 <<< \u0143 - &O < \u00F3 <<< \u00D3 - &S < \u015B <<< \u015A - &Z < \u017A <<< \u017B -*/ - - -typedef enum my_coll_lexem_num_en -{ - MY_COLL_LEXEM_EOF = 0, - MY_COLL_LEXEM_DIFF = 1, - MY_COLL_LEXEM_SHIFT = 4, - MY_COLL_LEXEM_CHAR = 5, - MY_COLL_LEXEM_ERROR = 6 -} my_coll_lexem_num; - - -typedef struct my_coll_lexem_st -{ - const char *beg; - const char *end; - const char *prev; - int diff; - int code; -} MY_COLL_LEXEM; - - -/* - Initialize collation rule lexical anilizer - - SYNOPSIS - my_coll_lexem_init - lexem Lex analizer to init - str Const string to parse - str_end End of the string - USAGE - - RETURN VALUES - N/A -*/ - -static void my_coll_lexem_init(MY_COLL_LEXEM *lexem, - const char *str, const char *str_end) -{ - lexem->beg= str; - lexem->prev= str; - lexem->end= str_end; - lexem->diff= 0; - lexem->code= 0; -} - - -/* - Print collation customization expression parse error, with context. - - SYNOPSIS - my_coll_lexem_print_error - lexem Lex analizer to take context from - errstr sting to write error to - errsize errstr size - txt error message - USAGE - - RETURN VALUES - N/A -*/ - -static void my_coll_lexem_print_error(MY_COLL_LEXEM *lexem, - char *errstr, size_t errsize, - const char *txt) -{ - char tail[30]; - size_t len= lexem->end - lexem->prev; - strmake (tail, lexem->prev, (size_t) min(len, sizeof(tail)-1)); - errstr[errsize-1]= '\0'; - my_snprintf(errstr,errsize-1,"%s at '%s'", txt, tail); -} - - -/* - Convert a hex digit into its numeric value - - SYNOPSIS - ch2x - ch hex digit to convert - USAGE - - RETURN VALUES - an integer value in the range 0..15 - -1 on error -*/ - -static int ch2x(int ch) -{ - if (ch >= '0' && ch <= '9') - return ch - '0'; - - if (ch >= 'a' && ch <= 'f') - return 10 + ch - 'a'; - - if (ch >= 'A' && ch <= 'F') - return 10 + ch - 'A'; - - return -1; -} - - -/* - Collation language lexical parser: - Scans the next lexem. - - SYNOPSIS - my_coll_lexem_next - lexem Lex analizer, previously initialized by - my_coll_lexem_init. - USAGE - Call this function in a loop - - RETURN VALUES - Lexem number: eof, diff, shift, char or error. -*/ - -static my_coll_lexem_num my_coll_lexem_next(MY_COLL_LEXEM *lexem) -{ - const char *beg; - my_coll_lexem_num rc; - - for (beg= lexem->beg ; beg < lexem->end ; beg++) - { - if (*beg == ' ' || *beg == '\t' || *beg == '\r' || *beg == '\n') - continue; - - if (*beg == '&') - { - beg++; - rc= MY_COLL_LEXEM_SHIFT; - goto ex; - } - - if (beg[0] == '=') - { - beg++; - rc= MY_COLL_LEXEM_DIFF; - goto ex; - } - - if (beg[0] == '<') - { - for (beg++, lexem->diff= 1; - (beg < lexem->end) && - (*beg == '<') && (lexem->diff<3); - beg++, lexem->diff++); - rc= MY_COLL_LEXEM_DIFF; - goto ex; - } - - if ((*beg >= 'a' && *beg <= 'z') || (*beg >= 'A' && *beg <= 'Z')) - { - lexem->code= *beg++; - rc= MY_COLL_LEXEM_CHAR; - goto ex; - } - - if ((*beg == '\\') && (beg+2 < lexem->end) && (beg[1] == 'u')) - { - int ch; - - beg+= 2; - lexem->code= 0; - while ((beg < lexem->end) && ((ch= ch2x(beg[0])) >= 0)) - { - lexem->code= (lexem->code << 4) + ch; - beg++; - } - rc= MY_COLL_LEXEM_CHAR; - goto ex; - } - - rc= MY_COLL_LEXEM_ERROR; - goto ex; - } - rc= MY_COLL_LEXEM_EOF; - -ex: - lexem->prev= lexem->beg; - lexem->beg= beg; - return rc; -} - - -/* - Collation rule item -*/ - -typedef struct my_coll_rule_item_st -{ - uint base; /* Base character */ - uint curr[2]; /* Current character */ - int diff[3]; /* Primary, Secondary and Tertiary difference */ -} MY_COLL_RULE; - - -/* - Collation language syntax parser. - Uses lexical parser. - - SYNOPSIS - my_coll_rule_parse - rule Collation rule list to load to. - str A string containin collation language expression. - str_end End of the string. - USAGE - - RETURN VALUES - A positive number means the number of rules loaded. - -1 means ERROR, e.g. too many items, syntax error, etc. -*/ - -static int my_coll_rule_parse(MY_COLL_RULE *rule, size_t mitems, - const char *str, const char *str_end, - char *errstr, size_t errsize) -{ - MY_COLL_LEXEM lexem; - my_coll_lexem_num lexnum; - my_coll_lexem_num prevlexnum= MY_COLL_LEXEM_ERROR; - MY_COLL_RULE item; - int state= 0; - size_t nitems= 0; - - /* Init all variables */ - errstr[0]= '\0'; - bzero(&item, sizeof(item)); - my_coll_lexem_init(&lexem, str, str_end); - - while ((lexnum= my_coll_lexem_next(&lexem))) - { - if (lexnum == MY_COLL_LEXEM_ERROR) - { - my_coll_lexem_print_error(&lexem,errstr,errsize-1,"Unknown character"); - return -1; - } - - switch (state) { - case 0: - if (lexnum != MY_COLL_LEXEM_SHIFT) - { - my_coll_lexem_print_error(&lexem,errstr,errsize-1,"& expected"); - return -1; - } - prevlexnum= lexnum; - state= 2; - continue; - - case 1: - if (lexnum != MY_COLL_LEXEM_SHIFT && lexnum != MY_COLL_LEXEM_DIFF) - { - my_coll_lexem_print_error(&lexem,errstr,errsize-1,"& or < expected"); - return -1; - } - prevlexnum= lexnum; - state= 2; - continue; - - case 2: - if (lexnum != MY_COLL_LEXEM_CHAR) - { - my_coll_lexem_print_error(&lexem,errstr,errsize-1,"character expected"); - return -1; - } - - if (prevlexnum == MY_COLL_LEXEM_SHIFT) - { - item.base= lexem.code; - item.diff[0]= 0; - item.diff[1]= 0; - item.diff[2]= 0; - } - else if (prevlexnum == MY_COLL_LEXEM_DIFF) - { - MY_COLL_LEXEM savlex; - savlex= lexem; - item.curr[0]= lexem.code; - if ((lexnum= my_coll_lexem_next(&lexem)) == MY_COLL_LEXEM_CHAR) - { - item.curr[1]= lexem.code; - } - else - { - item.curr[1]= 0; - lexem=savlex; /* Restore previous parser state */ - } - if (lexem.diff == 3) - { - item.diff[2]++; - } - else if (lexem.diff == 2) - { - item.diff[1]++; - item.diff[2]= 0; - } - else if (lexem.diff == 1) - { - item.diff[0]++; - item.diff[1]= 0; - item.diff[2]= 0; - } - else if (lexem.diff == 0) - { - item.diff[0]= item.diff[1]= item.diff[2]= 0; - } - if (nitems >= mitems) - { - my_coll_lexem_print_error(&lexem,errstr,errsize-1,"Too many rules"); - return -1; - } - rule[nitems++]= item; - } - else - { - my_coll_lexem_print_error(&lexem,errstr,errsize-1,"Should never happen"); - return -1; - } - state= 1; - continue; - } - } - return (int) nitems; -} - -#define MY_MAX_COLL_RULE 128 - -/* - This function copies an UCS2 collation from - the default Unicode Collation Algorithm (UCA) - weights applying tailorings, i.e. a set of - alternative weights for some characters. - - The default UCA weights are stored in uca_weight/uca_length. - They consist of 256 pages, 256 character each. - - If a page is not overwritten by tailoring rules, - it is copies as is from UCA as is. - - If a page contains some overwritten characters, it is - allocated. Untouched characters are copied from the - default weights. -*/ - -static my_bool create_tailoring(CHARSET_INFO *cs, void *(*alloc)(size_t)) -{ - MY_COLL_RULE rule[MY_MAX_COLL_RULE]; - char errstr[128]; - uchar *newlengths; - uint16 **newweights; - const uchar *deflengths= uca_length; - uint16 **defweights= uca_weight; - int rc, i; - int ncontractions= 0; - - if (!cs->tailoring) - return 1; - - /* Parse ICU Collation Customization expression */ - if ((rc= my_coll_rule_parse(rule, MY_MAX_COLL_RULE, - cs->tailoring, - cs->tailoring + strlen(cs->tailoring), - errstr, sizeof(errstr))) < 0) - { - /* - TODO: add error message reporting. - printf("Error: %d '%s'\n", rc, errstr); - */ - return 1; - } - - if (!cs->caseinfo) - cs->caseinfo= my_unicase_default; - - if (!(newweights= (uint16**) (*alloc)(256*sizeof(uint16*)))) - return 1; - bzero(newweights, 256*sizeof(uint16*)); - - if (!(newlengths= (uchar*) (*alloc)(256))) - return 1; - - memcpy(newlengths, deflengths, 256); - - /* - Calculate maximum lenghts for the pages - which will be overwritten. - */ - for (i=0; i < rc; i++) - { - if (!rule[i].curr[1]) /* If not a contraction */ - { - uint pageb= (rule[i].base >> 8) & 0xFF; - uint pagec= (rule[i].curr[0] >> 8) & 0xFF; - - if (newlengths[pagec] < deflengths[pageb]) - newlengths[pagec]= deflengths[pageb]; - } - else - ncontractions++; - } - - for (i=0; i < rc; i++) - { - uint pageb= (rule[i].base >> 8) & 0xFF; - uint pagec= (rule[i].curr[0] >> 8) & 0xFF; - uint chb, chc; - - if (rule[i].curr[1]) /* Skip contraction */ - continue; - - if (!newweights[pagec]) - { - /* Alloc new page and copy the default UCA weights */ - uint size= 256*newlengths[pagec]*sizeof(uint16); - - if (!(newweights[pagec]= (uint16*) (*alloc)(size))) - return 1; - bzero((void*) newweights[pagec], size); - - for (chc=0 ; chc < 256; chc++) - { - memcpy(newweights[pagec] + chc*newlengths[pagec], - defweights[pagec] + chc*deflengths[pagec], - deflengths[pagec]*sizeof(uint16)); - } - } - - /* - Aply the alternative rule: - shift to the base character and primary difference. - */ - chc= rule[i].curr[0] & 0xFF; - chb= rule[i].base & 0xFF; - memcpy(newweights[pagec] + chc*newlengths[pagec], - defweights[pageb] + chb*deflengths[pageb], - deflengths[pageb]*sizeof(uint16)); - /* Apply primary difference */ - newweights[pagec][chc*newlengths[pagec]]+= rule[i].diff[0]; - } - - /* Copy non-overwritten pages from the default UCA weights */ - for (i= 0; i < 256 ; i++) - { - if (!newweights[i]) - newweights[i]= defweights[i]; - } - - cs->sort_order= newlengths; - cs->sort_order_big= newweights; - cs->contractions= NULL; - - /* Now process contractions */ - if (ncontractions) - { - /* - 8K for weights for basic latin letter pairs, - plus 256 bytes for "is contraction part" flags. - */ - uint size= 0x40*0x40*sizeof(uint16) + 256; - char *contraction_flags; - if (!(cs->contractions= (uint16*) (*alloc)(size))) - return 1; - bzero((void*)cs->contractions, size); - contraction_flags= ((char*) cs->contractions) + 0x40*0x40; - for (i=0; i < rc; i++) - { - if (rule[i].curr[1]) - { - uint pageb= (rule[i].base >> 8) & 0xFF; - uint chb= rule[i].base & 0xFF; - uint16 *offsb= defweights[pageb] + chb*deflengths[pageb]; - uint offsc; - - if (offsb[1] || - rule[i].curr[0] < 0x40 || rule[i].curr[0] > 0x7f || - rule[i].curr[1] < 0x40 || rule[i].curr[1] > 0x7f) - { - /* - TODO: add error reporting; - We support only basic latin letters contractions at this point. - Also, We don't support contractions with weight longer than one. - Otherwise, we'd need much more memory. - */ - return 1; - } - offsc= (rule[i].curr[0]-0x40)*0x40+(rule[i].curr[1]-0x40); - - /* Copy base weight applying primary difference */ - cs->contractions[offsc]= offsb[0] + rule[i].diff[0]; - /* Mark both letters as "is contraction part */ - contraction_flags[rule[i].curr[0]]= 1; - contraction_flags[rule[i].curr[1]]= 1; - } - } - } - return 0; -} - - -/* - Universal CHARSET_INFO compatible wrappers - for the above internal functions. - Should work for any character set. -*/ - -static my_bool my_coll_init_uca(CHARSET_INFO *cs, void *(*alloc)(size_t)) -{ - cs->pad_char= ' '; - cs->ctype= my_charset_utf8_unicode_ci.ctype; - return create_tailoring(cs, alloc); -} - -static int my_strnncoll_any_uca(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - return my_strnncoll_uca(cs, &my_any_uca_scanner_handler, - s, slen, t, tlen, t_is_prefix); -} - -static int my_strnncollsp_any_uca(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference) -{ - return my_strnncollsp_uca(cs, &my_any_uca_scanner_handler, - s, slen, t, tlen, - diff_if_only_endspace_difference); -} - -static void my_hash_sort_any_uca(CHARSET_INFO *cs, - const uchar *s, size_t slen, - ulong *n1, ulong *n2) -{ - my_hash_sort_uca(cs, &my_any_uca_scanner_handler, s, slen, n1, n2); -} - -static size_t my_strnxfrm_any_uca(CHARSET_INFO *cs, - uchar *dst, size_t dstlen, - const uchar *src, size_t srclen) -{ - return my_strnxfrm_uca(cs, &my_any_uca_scanner_handler, - dst, dstlen, src, srclen); -} - - -#ifdef HAVE_CHARSET_ucs2 -/* - UCS2 optimized CHARSET_INFO compatible wrappers. -*/ -static int my_strnncoll_ucs2_uca(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - return my_strnncoll_uca(cs, &my_ucs2_uca_scanner_handler, - s, slen, t, tlen, t_is_prefix); -} - -static int my_strnncollsp_ucs2_uca(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference) -{ - return my_strnncollsp_uca(cs, &my_ucs2_uca_scanner_handler, - s, slen, t, tlen, - diff_if_only_endspace_difference); -} - -static void my_hash_sort_ucs2_uca(CHARSET_INFO *cs, - const uchar *s, size_t slen, - ulong *n1, ulong *n2) -{ - my_hash_sort_uca(cs, &my_ucs2_uca_scanner_handler, s, slen, n1, n2); -} - -static size_t my_strnxfrm_ucs2_uca(CHARSET_INFO *cs, - uchar *dst, size_t dstlen, - const uchar *src, size_t srclen) -{ - return my_strnxfrm_uca(cs, &my_ucs2_uca_scanner_handler, - dst, dstlen, src, srclen); -} - -MY_COLLATION_HANDLER my_collation_ucs2_uca_handler = -{ - my_coll_init_uca, /* init */ - my_strnncoll_ucs2_uca, - my_strnncollsp_ucs2_uca, - my_strnxfrm_ucs2_uca, - my_strnxfrmlen_simple, - my_like_range_generic, - my_wildcmp_uca, - NULL, - my_instr_mb, - my_hash_sort_ucs2_uca, - my_propagate_complex -}; - -CHARSET_INFO my_charset_ucs2_unicode_ci= -{ - 128,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_unicode_ci", /* name */ - "", /* comment */ - "", /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - uca_length, /* sort_order */ - NULL, /* contractions */ - uca_weight, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - -CHARSET_INFO my_charset_ucs2_icelandic_uca_ci= -{ - 129,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_icelandic_ci",/* name */ - "", /* comment */ - icelandic, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - -CHARSET_INFO my_charset_ucs2_latvian_uca_ci= -{ - 130,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_latvian_ci", /* name */ - "", /* comment */ - latvian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - -CHARSET_INFO my_charset_ucs2_romanian_uca_ci= -{ - 131,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_romanian_ci", /* name */ - "", /* comment */ - romanian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - -CHARSET_INFO my_charset_ucs2_slovenian_uca_ci= -{ - 132,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_slovenian_ci",/* name */ - "", /* comment */ - slovenian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - -CHARSET_INFO my_charset_ucs2_polish_uca_ci= -{ - 133,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_polish_ci", /* name */ - "", /* comment */ - polish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - -CHARSET_INFO my_charset_ucs2_estonian_uca_ci= -{ - 134,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_estonian_ci", /* name */ - "", /* comment */ - estonian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - -CHARSET_INFO my_charset_ucs2_spanish_uca_ci= -{ - 135,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_spanish_ci", /* name */ - "", /* comment */ - spanish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - -CHARSET_INFO my_charset_ucs2_swedish_uca_ci= -{ - 136,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_swedish_ci", /* name */ - "", /* comment */ - swedish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - -CHARSET_INFO my_charset_ucs2_turkish_uca_ci= -{ - 137,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_turkish_ci", /* name */ - "", /* comment */ - turkish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_turkish, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - -CHARSET_INFO my_charset_ucs2_czech_uca_ci= -{ - 138,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_czech_ci", /* name */ - "", /* comment */ - czech, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - - -CHARSET_INFO my_charset_ucs2_danish_uca_ci= -{ - 139,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_danish_ci", /* name */ - "", /* comment */ - danish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - -CHARSET_INFO my_charset_ucs2_lithuanian_uca_ci= -{ - 140,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_lithuanian_ci",/* name */ - "", /* comment */ - lithuanian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - -CHARSET_INFO my_charset_ucs2_slovak_uca_ci= -{ - 141,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_slovak_ci", /* name */ - "", /* comment */ - slovak, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - -CHARSET_INFO my_charset_ucs2_spanish2_uca_ci= -{ - 142,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_spanish2_ci", /* name */ - "", /* comment */ - spanish2, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - - -CHARSET_INFO my_charset_ucs2_roman_uca_ci= -{ - 143,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_roman_ci", /* name */ - "", /* comment */ - roman, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - - -CHARSET_INFO my_charset_ucs2_persian_uca_ci= -{ - 144,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_persian_ci", /* name */ - "", /* comment */ - persian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - - -CHARSET_INFO my_charset_ucs2_esperanto_uca_ci= -{ - 145,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_esperanto_ci",/* name */ - "", /* comment */ - esperanto, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - - -CHARSET_INFO my_charset_ucs2_hungarian_uca_ci= -{ - 146,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_hungarian_ci",/* name */ - "", /* comment */ - hungarian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - - -CHARSET_INFO my_charset_ucs2_sinhala_uca_ci= -{ - 147,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE, - "ucs2", /* csname */ - "ucs2_sinhala_ci", /* name */ - "", /* comment */ - sinhala, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_uca_handler -}; - - -#endif - - -#ifdef HAVE_CHARSET_utf8 -MY_COLLATION_HANDLER my_collation_any_uca_handler = -{ - my_coll_init_uca, /* init */ - my_strnncoll_any_uca, - my_strnncollsp_any_uca, - my_strnxfrm_any_uca, - my_strnxfrmlen_simple, - my_like_range_mb, - my_wildcmp_uca, - NULL, - my_instr_mb, - my_hash_sort_any_uca, - my_propagate_complex -}; - -/* - We consider bytes with code more than 127 as a letter. - This garantees that word boundaries work fine with regular - expressions. Note, there is no need to mark byte 255 as a - letter, it is illegal byte in UTF8. -*/ -static uchar ctype_utf8[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0 -}; - -extern MY_CHARSET_HANDLER my_charset_utf8_handler; - -CHARSET_INFO my_charset_utf8_unicode_ci= -{ - 192,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_unicode_ci", /* name */ - "", /* comment */ - "", /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - uca_length, /* sort_order */ - NULL, /* contractions */ - uca_weight, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - - -CHARSET_INFO my_charset_utf8_icelandic_uca_ci= -{ - 193,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_icelandic_ci",/* name */ - "", /* comment */ - icelandic, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_latvian_uca_ci= -{ - 194,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_latvian_ci", /* name */ - "", /* comment */ - latvian, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_romanian_uca_ci= -{ - 195,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_romanian_ci", /* name */ - "", /* comment */ - romanian, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_slovenian_uca_ci= -{ - 196,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_slovenian_ci",/* name */ - "", /* comment */ - slovenian, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_polish_uca_ci= -{ - 197,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_polish_ci", /* name */ - "", /* comment */ - polish, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_estonian_uca_ci= -{ - 198,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_estonian_ci", /* name */ - "", /* comment */ - estonian, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_spanish_uca_ci= -{ - 199,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_spanish_ci", /* name */ - "", /* comment */ - spanish, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_swedish_uca_ci= -{ - 200,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_swedish_ci", /* name */ - "", /* comment */ - swedish, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_turkish_uca_ci= -{ - 201,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_turkish_ci", /* name */ - "", /* comment */ - turkish, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_turkish, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 2, /* caseup_multiply */ - 2, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_czech_uca_ci= -{ - 202,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_czech_ci", /* name */ - "", /* comment */ - czech, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - - -CHARSET_INFO my_charset_utf8_danish_uca_ci= -{ - 203,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_danish_ci", /* name */ - "", /* comment */ - danish, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_lithuanian_uca_ci= -{ - 204,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_lithuanian_ci",/* name */ - "", /* comment */ - lithuanian, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_slovak_uca_ci= -{ - 205,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_slovak_ci", /* name */ - "", /* comment */ - slovak, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_spanish2_uca_ci= -{ - 206,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_spanish2_ci", /* name */ - "", /* comment */ - spanish2, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_roman_uca_ci= -{ - 207,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_roman_ci", /* name */ - "", /* comment */ - roman, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_persian_uca_ci= -{ - 208,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_persian_ci", /* name */ - "", /* comment */ - persian, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_esperanto_uca_ci= -{ - 209,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_esperanto_ci",/* name */ - "", /* comment */ - esperanto, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_hungarian_uca_ci= -{ - 210,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf8", /* cs name */ - "utf8_hungarian_ci",/* name */ - "", /* comment */ - hungarian, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8_sinhala_uca_ci= -{ - 211,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE, - "utf8", /* cs name */ - "utf8_sinhala_ci", /* name */ - "", /* comment */ - sinhala, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_any_uca_handler -}; - -#endif /* HAVE_CHARSET_utf8 */ - - -#ifdef HAVE_CHARSET_utf8mb4 - -extern MY_CHARSET_HANDLER my_charset_utf8mb4_handler; - -#define MY_CS_UTF8MB4_UCA_FLAGS (MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_UNICODE_SUPPLEMENT) - -CHARSET_INFO my_charset_utf8mb4_unicode_ci= -{ - 224,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_unicode_ci",/* name */ - "", /* comment */ - "", /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - uca_length, /* sort_order */ - NULL, /* contractions */ - uca_weight, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - - -CHARSET_INFO my_charset_utf8mb4_icelandic_uca_ci= -{ - 225,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_icelandic_ci",/* name */ - "", /* comment */ - icelandic, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_latvian_uca_ci= -{ - 226,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_latvian_ci", /* name */ - "", /* comment */ - latvian, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_romanian_uca_ci= -{ - 227,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_romanian_ci", /* name */ - "", /* comment */ - romanian, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_slovenian_uca_ci= -{ - 228,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_slovenian_ci",/* name */ - "", /* comment */ - slovenian, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_polish_uca_ci= -{ - 229,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_polish_ci", /* name */ - "", /* comment */ - polish, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_estonian_uca_ci= -{ - 230,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_estonian_ci", /* name */ - "", /* comment */ - estonian, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_spanish_uca_ci= -{ - 231,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_spanish_ci", /* name */ - "", /* comment */ - spanish, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_swedish_uca_ci= -{ - 232,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_swedish_ci", /* name */ - "", /* comment */ - swedish, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_turkish_uca_ci= -{ - 233,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_turkish_ci", /* name */ - "", /* comment */ - turkish, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_turkish, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 2, /* caseup_multiply */ - 2, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_czech_uca_ci= -{ - 234,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_czech_ci", /* name */ - "", /* comment */ - czech, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - - -CHARSET_INFO my_charset_utf8mb4_danish_uca_ci= -{ - 235,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_danish_ci", /* name */ - "", /* comment */ - danish, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_lithuanian_uca_ci= -{ - 236,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_lithuanian_ci",/* name */ - "", /* comment */ - lithuanian, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_slovak_uca_ci= -{ - 237,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_slovak_ci", /* name */ - "", /* comment */ - slovak, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_spanish2_uca_ci= -{ - 238,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_spanish2_ci", /* name */ - "", /* comment */ - spanish2, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_roman_uca_ci= -{ - 239,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_roman_ci", /* name */ - "", /* comment */ - roman, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_persian_uca_ci= -{ - 240,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_persian_ci", /* name */ - "", /* comment */ - persian, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_esperanto_uca_ci= -{ - 241,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_esperanto_ci",/* name */ - "", /* comment */ - esperanto, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_hungarian_uca_ci= -{ - 242,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_hungarian_ci",/* name */ - "", /* comment */ - hungarian, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -CHARSET_INFO my_charset_utf8mb4_sinhala_uca_ci= -{ - 243,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_sinhala_ci",/* name */ - "", /* comment */ - sinhala, /* tailoring */ - ctype_utf8, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_any_uca_handler -}; - -#endif /* HAVE_CHARSET_utf8mb4 */ - - -#ifdef HAVE_CHARSET_utf32 - -MY_COLLATION_HANDLER my_collation_utf32_uca_handler = -{ - my_coll_init_uca, /* init */ - my_strnncoll_any_uca, - my_strnncollsp_any_uca, - my_strnxfrm_any_uca, - my_strnxfrmlen_simple, - my_like_range_generic, - my_wildcmp_uca, - NULL, - my_instr_mb, - my_hash_sort_any_uca, - my_propagate_complex -}; - -extern MY_CHARSET_HANDLER my_charset_utf32_handler; - -#define MY_CS_UTF32_UCA_FLAGS (MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII) - -CHARSET_INFO my_charset_utf32_unicode_ci= -{ - 160,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_unicode_ci", /* name */ - "", /* comment */ - "", /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - uca_length, /* sort_order */ - NULL, /* contractions */ - uca_weight, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - - -CHARSET_INFO my_charset_utf32_icelandic_uca_ci= -{ - 161,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_icelandic_ci",/* name */ - "", /* comment */ - icelandic, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_latvian_uca_ci= -{ - 162,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_latvian_ci", /* name */ - "", /* comment */ - latvian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_romanian_uca_ci= -{ - 163,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_romanian_ci", /* name */ - "", /* comment */ - romanian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_slovenian_uca_ci= -{ - 164,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_slovenian_ci",/* name */ - "", /* comment */ - slovenian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_polish_uca_ci= -{ - 165,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_polish_ci", /* name */ - "", /* comment */ - polish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_estonian_uca_ci= -{ - 166,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_estonian_ci", /* name */ - "", /* comment */ - estonian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_spanish_uca_ci= -{ - 167,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_spanish_ci", /* name */ - "", /* comment */ - spanish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_swedish_uca_ci= -{ - 168,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_swedish_ci", /* name */ - "", /* comment */ - swedish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_turkish_uca_ci= -{ - 169,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_turkish_ci", /* name */ - "", /* comment */ - turkish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_turkish, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_czech_uca_ci= -{ - 170,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_czech_ci", /* name */ - "", /* comment */ - czech, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - - -CHARSET_INFO my_charset_utf32_danish_uca_ci= -{ - 171,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_danish_ci", /* name */ - "", /* comment */ - danish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_lithuanian_uca_ci= -{ - 172,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_lithuanian_ci",/* name */ - "", /* comment */ - lithuanian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_slovak_uca_ci= -{ - 173,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_slovak_ci", /* name */ - "", /* comment */ - slovak, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_spanish2_uca_ci= -{ - 174,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_spanish2_ci", /* name */ - "", /* comment */ - spanish2, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_roman_uca_ci= -{ - 175,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_roman_ci", /* name */ - "", /* comment */ - roman, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_persian_uca_ci= -{ - 176,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_persian_ci", /* name */ - "", /* comment */ - persian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_esperanto_uca_ci= -{ - 177,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_esperanto_ci",/* name */ - "", /* comment */ - esperanto, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_hungarian_uca_ci= -{ - 178,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_hungarian_ci",/* name */ - "", /* comment */ - hungarian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -CHARSET_INFO my_charset_utf32_sinhala_uca_ci= -{ - 179,0,0, /* number */ - MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ - "utf32_sinhala_ci", /* name */ - "", /* comment */ - sinhala, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_uca_handler -}; - -#endif /* HAVE_CHARSET_utf32 */ - - -#ifdef HAVE_CHARSET_utf16 - - -MY_COLLATION_HANDLER my_collation_utf16_uca_handler = -{ - my_coll_init_uca, /* init */ - my_strnncoll_any_uca, - my_strnncollsp_any_uca, - my_strnxfrm_any_uca, - my_strnxfrmlen_simple, - my_like_range_generic, - my_wildcmp_uca, - NULL, - my_instr_mb, - my_hash_sort_any_uca, - my_propagate_complex -}; - -extern MY_CHARSET_HANDLER my_charset_utf16_handler; - -#define MY_CS_UTF16_UCA_FLAGS (MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII) - -CHARSET_INFO my_charset_utf16_unicode_ci= -{ - 101,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* csname */ - "utf16_unicode_ci", /* name */ - "", /* comment */ - "", /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - uca_length, /* sort_order */ - NULL, /* contractions */ - uca_weight, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - - -CHARSET_INFO my_charset_utf16_icelandic_uca_ci= -{ - 102,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* csname */ - "utf16_icelandic_ci",/* name */ - "", /* comment */ - icelandic, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_latvian_uca_ci= -{ - 103,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_latvian_ci", /* name */ - "", /* comment */ - latvian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_romanian_uca_ci= -{ - 104,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_romanian_ci", /* name */ - "", /* comment */ - romanian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_slovenian_uca_ci= -{ - 105,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_slovenian_ci",/* name */ - "", /* comment */ - slovenian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_polish_uca_ci= -{ - 106,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_polish_ci", /* name */ - "", /* comment */ - polish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_estonian_uca_ci= -{ - 107,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_estonian_ci", /* name */ - "", /* comment */ - estonian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_spanish_uca_ci= -{ - 108,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_spanish_ci", /* name */ - "", /* comment */ - spanish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_swedish_uca_ci= -{ - 109,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_swedish_ci", /* name */ - "", /* comment */ - swedish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_turkish_uca_ci= -{ - 110,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_turkish_ci", /* name */ - "", /* comment */ - turkish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_turkish, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_czech_uca_ci= -{ - 111,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_czech_ci", /* name */ - "", /* comment */ - czech, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - - -CHARSET_INFO my_charset_utf16_danish_uca_ci= -{ - 112,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_danish_ci", /* name */ - "", /* comment */ - danish, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_lithuanian_uca_ci= -{ - 113,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_lithuanian_ci",/* name */ - "", /* comment */ - lithuanian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_slovak_uca_ci= -{ - 114,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_slovak_ci", /* name */ - "", /* comment */ - slovak, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_spanish2_uca_ci= -{ - 115,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_spanish2_ci",/* name */ - "", /* comment */ - spanish2, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_roman_uca_ci= -{ - 116,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_roman_ci", /* name */ - "", /* comment */ - roman, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_persian_uca_ci= -{ - 117,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_persian_ci", /* name */ - "", /* comment */ - persian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_esperanto_uca_ci= -{ - 118,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_esperanto_ci",/* name */ - "", /* comment */ - esperanto, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_hungarian_uca_ci= -{ - 119,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_hungarian_ci",/* name */ - "", /* comment */ - hungarian, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default,/* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -CHARSET_INFO my_charset_utf16_sinhala_uca_ci= -{ - 120,0,0, /* number */ - MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ - "utf16_sinhala_ci",/* name */ - "", /* comment */ - sinhala, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default,/* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 8, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 9, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_uca_handler -}; - -#endif /* HAVE_CHARSET_utf16 */ - - - -#endif /* HAVE_UCA_COLLATIONS */ diff --git a/deps/mysqllite/strings/ctype-ucs2.c b/deps/mysqllite/strings/ctype-ucs2.c deleted file mode 100644 index 67be793c3dc250..00000000000000 --- a/deps/mysqllite/strings/ctype-ucs2.c +++ /dev/null @@ -1,3190 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; version 2 - of the License. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -/* UCS2 support. Written by Alexander Barkov */ - -#include -#include -#include "m_string.h" -#include "m_ctype.h" -#include -#include - - -#if defined(HAVE_CHARSET_utf16) || defined(HAVE_CHARSET_ucs2) -#define HAVE_CHARSET_mb2 -#endif - - -#if defined(HAVE_CHARSET_mb2) || defined(HAVE_CHARSET_utf32) -#define HAVE_CHARSET_mb2_or_mb4 -#endif - - -#ifndef EILSEQ -#define EILSEQ ENOENT -#endif - -#undef ULONGLONG_MAX -#define ULONGLONG_MAX (~(ulonglong) 0) -#define MAX_NEGATIVE_NUMBER ((ulonglong) LL(0x8000000000000000)) -#define INIT_CNT 9 -#define LFACTOR ULL(1000000000) -#define LFACTOR1 ULL(10000000000) -#define LFACTOR2 ULL(100000000000) - -static unsigned long lfactor[9]= -{ 1L, 10L, 100L, 1000L, 10000L, 100000L, 1000000L, 10000000L, 100000000L }; - - - -#ifdef HAVE_CHARSET_mb2_or_mb4 -static inline int -my_bincmp(const uchar *s, const uchar *se, - const uchar *t, const uchar *te) -{ - int slen= (int) (se - s), tlen= (int) (te - t); - int len= min(slen, tlen); - int cmp= memcmp(s, t, len); - return cmp ? cmp : slen - tlen; -} - - -static size_t -my_caseup_str_mb2_or_mb4(CHARSET_INFO * cs __attribute__((unused)), - char * s __attribute__((unused))) -{ - DBUG_ASSERT(0); - return 0; -} - - -static size_t -my_casedn_str_mb2_or_mb4(CHARSET_INFO *cs __attribute__((unused)), - char * s __attribute__((unused))) -{ - DBUG_ASSERT(0); - return 0; -} - - -static int -my_strcasecmp_mb2_or_mb4(CHARSET_INFO *cs __attribute__((unused)), - const char *s __attribute__((unused)), - const char *t __attribute__((unused))) -{ - DBUG_ASSERT(0); - return 0; -} - - -static long -my_strntol_mb2_or_mb4(CHARSET_INFO *cs, - const char *nptr, size_t l, int base, - char **endptr, int *err) -{ - int negative= 0; - int overflow; - int cnv; - my_wc_t wc; - register unsigned int cutlim; - register uint32 cutoff; - register uint32 res; - register const uchar *s= (const uchar*) nptr; - register const uchar *e= (const uchar*) nptr+l; - const uchar *save; - - *err= 0; - do - { - if ((cnv= cs->cset->mb_wc(cs, &wc, s, e))>0) - { - switch (wc) - { - case ' ' : break; - case '\t': break; - case '-' : negative= !negative; break; - case '+' : break; - default : goto bs; - } - } - else /* No more characters or bad multibyte sequence */ - { - if (endptr != NULL ) - *endptr= (char*) s; - err[0]= (cnv==MY_CS_ILSEQ) ? EILSEQ : EDOM; - return 0; - } - s+= cnv; - } while (1); - -bs: - - overflow= 0; - res= 0; - save= s; - cutoff= ((uint32)~0L) / (uint32) base; - cutlim= (uint) (((uint32)~0L) % (uint32) base); - - do { - if ((cnv= cs->cset->mb_wc(cs, &wc, s, e)) > 0) - { - s+= cnv; - if (wc >= '0' && wc <= '9') - wc-= '0'; - else if (wc >= 'A' && wc <= 'Z') - wc= wc - 'A' + 10; - else if (wc >= 'a' && wc <= 'z') - wc= wc - 'a' + 10; - else - break; - if ((int)wc >= base) - break; - if (res > cutoff || (res == cutoff && wc > cutlim)) - overflow= 1; - else - { - res*= (uint32) base; - res+= wc; - } - } - else if (cnv == MY_CS_ILSEQ) - { - if (endptr !=NULL ) - *endptr = (char*) s; - err[0]= EILSEQ; - return 0; - } - else - { - /* No more characters */ - break; - } - } while(1); - - if (endptr != NULL) - *endptr = (char *) s; - - if (s == save) - { - err[0]= EDOM; - return 0L; - } - - if (negative) - { - if (res > (uint32) INT_MIN32) - overflow= 1; - } - else if (res > INT_MAX32) - overflow= 1; - - if (overflow) - { - err[0]= ERANGE; - return negative ? INT_MIN32 : INT_MAX32; - } - - return (negative ? -((long) res) : (long) res); -} - - -static ulong -my_strntoul_mb2_or_mb4(CHARSET_INFO *cs, - const char *nptr, size_t l, int base, - char **endptr, int *err) -{ - int negative= 0; - int overflow; - int cnv; - my_wc_t wc; - register unsigned int cutlim; - register uint32 cutoff; - register uint32 res; - register const uchar *s= (const uchar*) nptr; - register const uchar *e= (const uchar*) nptr + l; - const uchar *save; - - *err= 0; - do - { - if ((cnv= cs->cset->mb_wc(cs, &wc, s, e)) > 0) - { - switch (wc) - { - case ' ' : break; - case '\t': break; - case '-' : negative= !negative; break; - case '+' : break; - default : goto bs; - } - } - else /* No more characters or bad multibyte sequence */ - { - if (endptr !=NULL ) - *endptr= (char*)s; - err[0]= (cnv == MY_CS_ILSEQ) ? EILSEQ : EDOM; - return 0; - } - s+= cnv; - } while (1); - -bs: - - overflow= 0; - res= 0; - save= s; - cutoff= ((uint32)~0L) / (uint32) base; - cutlim= (uint) (((uint32)~0L) % (uint32) base); - - do - { - if ((cnv= cs->cset->mb_wc(cs, &wc, s, e)) > 0) - { - s+= cnv; - if (wc >= '0' && wc <= '9') - wc-= '0'; - else if (wc >= 'A' && wc <= 'Z') - wc= wc - 'A' + 10; - else if (wc >= 'a' && wc <= 'z') - wc= wc - 'a' + 10; - else - break; - if ((int) wc >= base) - break; - if (res > cutoff || (res == cutoff && wc > cutlim)) - overflow = 1; - else - { - res*= (uint32) base; - res+= wc; - } - } - else if (cnv == MY_CS_ILSEQ) - { - if (endptr != NULL ) - *endptr= (char*)s; - err[0]= EILSEQ; - return 0; - } - else - { - /* No more characters */ - break; - } - } while(1); - - if (endptr != NULL) - *endptr= (char *) s; - - if (s == save) - { - err[0]= EDOM; - return 0L; - } - - if (overflow) - { - err[0]= (ERANGE); - return (~(uint32) 0); - } - - return (negative ? -((long) res) : (long) res); -} - - -static longlong -my_strntoll_mb2_or_mb4(CHARSET_INFO *cs, - const char *nptr, size_t l, int base, - char **endptr, int *err) -{ - int negative=0; - int overflow; - int cnv; - my_wc_t wc; - register ulonglong cutoff; - register unsigned int cutlim; - register ulonglong res; - register const uchar *s= (const uchar*) nptr; - register const uchar *e= (const uchar*) nptr+l; - const uchar *save; - - *err= 0; - do - { - if ((cnv=cs->cset->mb_wc(cs,&wc,s,e))>0) - { - switch (wc) - { - case ' ' : break; - case '\t': break; - case '-' : negative= !negative; break; - case '+' : break; - default : goto bs; - } - } - else /* No more characters or bad multibyte sequence */ - { - if (endptr !=NULL ) - *endptr = (char*)s; - err[0] = (cnv==MY_CS_ILSEQ) ? EILSEQ : EDOM; - return 0; - } - s+=cnv; - } while (1); - -bs: - - overflow = 0; - res = 0; - save = s; - cutoff = (~(ulonglong) 0) / (unsigned long int) base; - cutlim = (uint) ((~(ulonglong) 0) % (unsigned long int) base); - - do { - if ((cnv=cs->cset->mb_wc(cs,&wc,s,e))>0) - { - s+=cnv; - if ( wc>='0' && wc<='9') - wc -= '0'; - else if ( wc>='A' && wc<='Z') - wc = wc - 'A' + 10; - else if ( wc>='a' && wc<='z') - wc = wc - 'a' + 10; - else - break; - if ((int)wc >= base) - break; - if (res > cutoff || (res == cutoff && wc > cutlim)) - overflow = 1; - else - { - res *= (ulonglong) base; - res += wc; - } - } - else if (cnv==MY_CS_ILSEQ) - { - if (endptr !=NULL ) - *endptr = (char*)s; - err[0]=EILSEQ; - return 0; - } - else - { - /* No more characters */ - break; - } - } while(1); - - if (endptr != NULL) - *endptr = (char *) s; - - if (s == save) - { - err[0]=EDOM; - return 0L; - } - - if (negative) - { - if (res > (ulonglong) LONGLONG_MIN) - overflow = 1; - } - else if (res > (ulonglong) LONGLONG_MAX) - overflow = 1; - - if (overflow) - { - err[0]=ERANGE; - return negative ? LONGLONG_MIN : LONGLONG_MAX; - } - - return (negative ? -((longlong)res) : (longlong)res); -} - - -static ulonglong -my_strntoull_mb2_or_mb4(CHARSET_INFO *cs, - const char *nptr, size_t l, int base, - char **endptr, int *err) -{ - int negative= 0; - int overflow; - int cnv; - my_wc_t wc; - register ulonglong cutoff; - register unsigned int cutlim; - register ulonglong res; - register const uchar *s= (const uchar*) nptr; - register const uchar *e= (const uchar*) nptr + l; - const uchar *save; - - *err= 0; - do - { - if ((cnv= cs->cset->mb_wc(cs,&wc,s,e)) > 0) - { - switch (wc) - { - case ' ' : break; - case '\t': break; - case '-' : negative= !negative; break; - case '+' : break; - default : goto bs; - } - } - else /* No more characters or bad multibyte sequence */ - { - if (endptr !=NULL ) - *endptr = (char*)s; - err[0]= (cnv==MY_CS_ILSEQ) ? EILSEQ : EDOM; - return 0; - } - s+=cnv; - } while (1); - -bs: - - overflow = 0; - res = 0; - save = s; - cutoff = (~(ulonglong) 0) / (unsigned long int) base; - cutlim = (uint) ((~(ulonglong) 0) % (unsigned long int) base); - - do - { - if ((cnv=cs->cset->mb_wc(cs,&wc,s,e))>0) - { - s+=cnv; - if ( wc>='0' && wc<='9') - wc -= '0'; - else if ( wc>='A' && wc<='Z') - wc = wc - 'A' + 10; - else if ( wc>='a' && wc<='z') - wc = wc - 'a' + 10; - else - break; - if ((int)wc >= base) - break; - if (res > cutoff || (res == cutoff && wc > cutlim)) - overflow = 1; - else - { - res *= (ulonglong) base; - res += wc; - } - } - else if (cnv==MY_CS_ILSEQ) - { - if (endptr !=NULL ) - *endptr = (char*)s; - err[0]= EILSEQ; - return 0; - } - else - { - /* No more characters */ - break; - } - } while(1); - - if (endptr != NULL) - *endptr = (char *) s; - - if (s == save) - { - err[0]= EDOM; - return 0L; - } - - if (overflow) - { - err[0]= ERANGE; - return (~(ulonglong) 0); - } - - return (negative ? -((longlong) res) : (longlong) res); -} - - -static double -my_strntod_mb2_or_mb4(CHARSET_INFO *cs, - char *nptr, size_t length, - char **endptr, int *err) -{ - char buf[256]; - double res; - register char *b= buf; - register const uchar *s= (const uchar*) nptr; - const uchar *end; - my_wc_t wc; - int cnv; - - *err= 0; - /* Cut too long strings */ - if (length >= sizeof(buf)) - length= sizeof(buf) - 1; - end= s + length; - - while ((cnv= cs->cset->mb_wc(cs,&wc,s,end)) > 0) - { - s+= cnv; - if (wc > (int) (uchar) 'e' || !wc) - break; /* Can't be part of double */ - *b++= (char) wc; - } - - *endptr= b; - res= my_strtod(buf, endptr, err); - *endptr= nptr + cs->mbminlen * (size_t) (*endptr - buf); - return res; -} - - -static ulonglong -my_strntoull10rnd_mb2_or_mb4(CHARSET_INFO *cs, - const char *nptr, size_t length, - int unsign_fl, - char **endptr, int *err) -{ - char buf[256], *b= buf; - ulonglong res; - const uchar *end, *s= (const uchar*) nptr; - my_wc_t wc; - int cnv; - - /* Cut too long strings */ - if (length >= sizeof(buf)) - length= sizeof(buf)-1; - end= s + length; - - while ((cnv= cs->cset->mb_wc(cs,&wc,s,end)) > 0) - { - s+= cnv; - if (wc > (int) (uchar) 'e' || !wc) - break; /* Can't be a number part */ - *b++= (char) wc; - } - - res= my_strntoull10rnd_8bit(cs, buf, b - buf, unsign_fl, endptr, err); - *endptr= (char*) nptr + cs->mbminlen * (size_t) (*endptr - buf); - return res; -} - - -/* - This is a fast version optimized for the case of radix 10 / -10 -*/ - -static size_t -my_l10tostr_mb2_or_mb4(CHARSET_INFO *cs, - char *dst, size_t len, int radix, long int val) -{ - char buffer[66]; - register char *p, *db, *de; - long int new_val; - int sl= 0; - unsigned long int uval = (unsigned long int) val; - - p= &buffer[sizeof(buffer) - 1]; - *p= '\0'; - - if (radix < 0) - { - if (val < 0) - { - sl= 1; - /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */ - uval = (unsigned long int)0 - uval; - } - } - - new_val = (long) (uval / 10); - *--p = '0'+ (char) (uval - (unsigned long) new_val * 10); - val= new_val; - - while (val != 0) - { - new_val= val / 10; - *--p= '0' + (char) (val - new_val * 10); - val= new_val; - } - - if (sl) - { - *--p= '-'; - } - - for ( db= dst, de= dst + len ; (dst < de) && *p ; p++) - { - int cnvres= cs->cset->wc_mb(cs,(my_wc_t)p[0],(uchar*) dst, (uchar*) de); - if (cnvres > 0) - dst+= cnvres; - else - break; - } - return (int) (dst - db); -} - - -static size_t -my_ll10tostr_mb2_or_mb4(CHARSET_INFO *cs, - char *dst, size_t len, int radix, longlong val) -{ - char buffer[65]; - register char *p, *db, *de; - long long_val; - int sl= 0; - ulonglong uval= (ulonglong) val; - - if (radix < 0) - { - if (val < 0) - { - sl= 1; - /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */ - uval = (ulonglong)0 - uval; - } - } - - p= &buffer[sizeof(buffer)-1]; - *p='\0'; - - if (uval == 0) - { - *--p= '0'; - goto cnv; - } - - while (uval > (ulonglong) LONG_MAX) - { - ulonglong quo= uval/(uint) 10; - uint rem= (uint) (uval- quo* (uint) 10); - *--p= '0' + rem; - uval= quo; - } - - long_val= (long) uval; - while (long_val != 0) - { - long quo= long_val/10; - *--p= (char) ('0' + (long_val - quo*10)); - long_val= quo; - } - -cnv: - if (sl) - { - *--p= '-'; - } - - for ( db= dst, de= dst + len ; (dst < de) && *p ; p++) - { - int cnvres= cs->cset->wc_mb(cs, (my_wc_t) p[0], (uchar*) dst, (uchar*) de); - if (cnvres > 0) - dst+= cnvres; - else - break; - } - return (int) (dst -db); -} - -#endif /* HAVE_CHARSET_mb2_or_mb4 */ - - -#ifdef HAVE_CHARSET_mb2 -static longlong -my_strtoll10_mb2(CHARSET_INFO *cs __attribute__((unused)), - const char *nptr, char **endptr, int *error) -{ - const char *s, *end, *start, *n_end, *true_end; - uchar c; - unsigned long i, j, k; - ulonglong li; - int negative; - ulong cutoff, cutoff2, cutoff3; - - s= nptr; - /* If fixed length string */ - if (endptr) - { - /* Make sure string length is even */ - end= s + ((*endptr - s) / 2) * 2; - while (s < end && !s[0] && (s[1] == ' ' || s[1] == '\t')) - s+= 2; - if (s == end) - goto no_conv; - } - else - { - /* We don't support null terminated strings in UCS2 */ - goto no_conv; - } - - /* Check for a sign. */ - negative= 0; - if (!s[0] && s[1] == '-') - { - *error= -1; /* Mark as negative number */ - negative= 1; - s+= 2; - if (s == end) - goto no_conv; - cutoff= MAX_NEGATIVE_NUMBER / LFACTOR2; - cutoff2= (MAX_NEGATIVE_NUMBER % LFACTOR2) / 100; - cutoff3= MAX_NEGATIVE_NUMBER % 100; - } - else - { - *error= 0; - if (!s[0] && s[1] == '+') - { - s+= 2; - if (s == end) - goto no_conv; - } - cutoff= ULONGLONG_MAX / LFACTOR2; - cutoff2= ULONGLONG_MAX % LFACTOR2 / 100; - cutoff3= ULONGLONG_MAX % 100; - } - - /* Handle case where we have a lot of pre-zero */ - if (!s[0] && s[1] == '0') - { - i= 0; - do - { - s+= 2; - if (s == end) - goto end_i; /* Return 0 */ - } - while (!s[0] && s[1] == '0'); - n_end= s + 2 * INIT_CNT; - } - else - { - /* Read first digit to check that it's a valid number */ - if (s[0] || (c= (s[1]-'0')) > 9) - goto no_conv; - i= c; - s+= 2; - n_end= s + 2 * (INIT_CNT-1); - } - - /* Handle first 9 digits and store them in i */ - if (n_end > end) - n_end= end; - for (; s != n_end ; s+= 2) - { - if (s[0] || (c= (s[1]-'0')) > 9) - goto end_i; - i= i*10+c; - } - if (s == end) - goto end_i; - - /* Handle next 9 digits and store them in j */ - j= 0; - start= s; /* Used to know how much to shift i */ - n_end= true_end= s + 2 * INIT_CNT; - if (n_end > end) - n_end= end; - do - { - if (s[0] || (c= (s[1]-'0')) > 9) - goto end_i_and_j; - j= j*10+c; - s+= 2; - } while (s != n_end); - if (s == end) - { - if (s != true_end) - goto end_i_and_j; - goto end3; - } - if (s[0] || (c= (s[1]-'0')) > 9) - goto end3; - - /* Handle the next 1 or 2 digits and store them in k */ - k=c; - s+= 2; - if (s == end || s[0] || (c= (s[1]-'0')) > 9) - goto end4; - k= k*10+c; - s+= 2; - *endptr= (char*) s; - - /* number string should have ended here */ - if (s != end && !s[0] && (c= (s[1]-'0')) <= 9) - goto overflow; - - /* Check that we didn't get an overflow with the last digit */ - if (i > cutoff || (i == cutoff && ((j > cutoff2 || j == cutoff2) && - k > cutoff3))) - goto overflow; - li=i*LFACTOR2+ (ulonglong) j*100 + k; - return (longlong) li; - -overflow: /* *endptr is set here */ - *error= MY_ERRNO_ERANGE; - return negative ? LONGLONG_MIN : (longlong) ULONGLONG_MAX; - -end_i: - *endptr= (char*) s; - return (negative ? ((longlong) -(long) i) : (longlong) i); - -end_i_and_j: - li= (ulonglong) i * lfactor[(size_t) (s-start) / 2] + j; - *endptr= (char*) s; - return (negative ? -((longlong) li) : (longlong) li); - -end3: - li=(ulonglong) i*LFACTOR+ (ulonglong) j; - *endptr= (char*) s; - return (negative ? -((longlong) li) : (longlong) li); - -end4: - li=(ulonglong) i*LFACTOR1+ (ulonglong) j * 10 + k; - *endptr= (char*) s; - if (negative) - { - if (li > MAX_NEGATIVE_NUMBER) - goto overflow; - return -((longlong) li); - } - return (longlong) li; - -no_conv: - /* There was no number to convert. */ - *error= MY_ERRNO_EDOM; - *endptr= (char *) nptr; - return 0; -} - - -static size_t -my_scan_mb2(CHARSET_INFO *cs __attribute__((unused)), - const char *str, const char *end, int sequence_type) -{ - const char *str0= str; - end--; /* for easier loop condition, because of two bytes per character */ - - switch (sequence_type) - { - case MY_SEQ_SPACES: - for ( ; str < end; str+= 2) - { - if (str[0] != '\0' || str[1] != ' ') - break; - } - return (size_t) (str - str0); - default: - return 0; - } -} - - -static void -my_fill_mb2(CHARSET_INFO *cs __attribute__((unused)), - char *s, size_t l, int fill) -{ - DBUG_ASSERT(fill <= 0xFFFF); - for ( ; l >= 2; s[0]= (fill >> 8), s[1]= (fill & 0xFF), s+= 2, l-= 2); -} - - -static int -my_vsnprintf_mb2(char *dst, size_t n, const char* fmt, va_list ap) -{ - char *start=dst, *end= dst + n - 1; - for (; *fmt ; fmt++) - { - if (fmt[0] != '%') - { - if (dst == end) /* End of buffer */ - break; - - *dst++='\0'; - *dst++= *fmt; /* Copy ordinary char */ - continue; - } - - fmt++; - - /* Skip if max size is used (to be compatible with printf) */ - while ( (*fmt >= '0' && *fmt <= '9') || *fmt == '.' || *fmt == '-') - fmt++; - - if (*fmt == 'l') - fmt++; - - if (*fmt == 's') /* String parameter */ - { - char *par= va_arg(ap, char *); - size_t plen; - size_t left_len= (size_t)(end-dst); - if (!par) - par= (char*) "(null)"; - plen= strlen(par); - if (left_len <= plen * 2) - plen = left_len / 2 - 1; - - for ( ; plen ; plen--, dst+=2, par++) - { - dst[0]= '\0'; - dst[1]= par[0]; - } - continue; - } - else if (*fmt == 'd' || *fmt == 'u') /* Integer parameter */ - { - int iarg; - char nbuf[16]; - char *pbuf= nbuf; - - if ((size_t) (end - dst) < 32) - break; - iarg= va_arg(ap, int); - if (*fmt == 'd') - int10_to_str((long) iarg, nbuf, -10); - else - int10_to_str((long) (uint) iarg, nbuf,10); - - for (; pbuf[0]; pbuf++) - { - *dst++= '\0'; - *dst++= *pbuf; - } - continue; - } - - /* We come here on '%%', unknown code or too long parameter */ - if (dst == end) - break; - *dst++= '\0'; - *dst++= '%'; /* % used as % or unknown code */ - } - - DBUG_ASSERT(dst <= end); - *dst='\0'; /* End of errmessage */ - return (size_t) (dst - start); -} - - -static size_t -my_snprintf_mb2(CHARSET_INFO *cs __attribute__((unused)), - char* to, size_t n, const char* fmt, ...) -{ - va_list args; - va_start(args,fmt); - return my_vsnprintf_mb2(to, n, fmt, args); -} - - -static size_t -my_lengthsp_mb2(CHARSET_INFO *cs __attribute__((unused)), - const char *ptr, size_t length) -{ - const char *end= ptr + length; - while (end > ptr + 1 && end[-1] == ' ' && end[-2] == '\0') - end-= 2; - return (size_t) (end - ptr); -} - -#endif /* HAVE_CHARSET_mb2*/ - - - - -#ifdef HAVE_CHARSET_utf16 - -/* - D800..DB7F - Non-provate surrogate high (896 pages) - DB80..DBFF - Private surrogate high (128 pages) - DC00..DFFF - Surrogate low (1024 codes in a page) -*/ - -#define MY_UTF16_HIGH_HEAD(x) ((((uchar) (x)) & 0xFC) == 0xD8) -#define MY_UTF16_LOW_HEAD(x) ((((uchar) (x)) & 0xFC) == 0xDC) -#define MY_UTF16_SURROGATE(x) (((x) & 0xF800) == 0xD800) - -static int -my_utf16_uni(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t *pwc, const uchar *s, const uchar *e) -{ - if (s + 2 > e) - return MY_CS_TOOSMALL2; - - /* - High bytes: 0xD[89AB] = B'110110??' - Low bytes: 0xD[CDEF] = B'110111??' - Surrogate mask: 0xFC = B'11111100' - */ - - if (MY_UTF16_HIGH_HEAD(*s)) /* Surrogate head */ - { - if (s + 4 > e) - return MY_CS_TOOSMALL4; - - if (!MY_UTF16_LOW_HEAD(s[2])) /* Broken surrigate pair */ - return MY_CS_ILSEQ; - - /* - s[0]= 110110?? (<< 18) - s[1]= ???????? (<< 10) - s[2]= 110111?? (<< 8) - s[3]= ???????? (<< 0) - */ - - *pwc= ((s[0] & 3) << 18) + (s[1] << 10) + - ((s[2] & 3) << 8) + s[3] + 0x10000; - - return 4; - } - - if (MY_UTF16_LOW_HEAD(*s)) /* Low surrogate part without high part */ - return MY_CS_ILSEQ; - - *pwc= (s[0] << 8) + s[1]; - return 2; -} - - -static int -my_uni_utf16(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, uchar *s, uchar *e) -{ - if (wc <= 0xFFFF) - { - if (s + 2 > e) - return MY_CS_TOOSMALL2; - if (MY_UTF16_SURROGATE(wc)) - return MY_CS_ILUNI; - *s++= (uchar) (wc >> 8); - *s= (uchar) (wc & 0xFF); - return 2; - } - - if (wc <= 0x10FFFF) - { - if (s + 4 > e) - return MY_CS_TOOSMALL4; - *s++= (uchar) ((wc-= 0x10000) >> 18) | 0xD8; - *s++= (uchar) (wc >> 10) & 0xFF; - *s++= (uchar) ((wc >> 8) & 3) | 0xDC; - *s= (uchar) wc & 0xFF; - return 4; - } - - return MY_CS_ILUNI; -} - - -static inline void -my_tolower_utf16(MY_UNICASE_INFO **uni_plane, my_wc_t *wc) -{ - int page= *wc >> 8; - if (page < 256 && uni_plane[page]) - *wc= uni_plane[page][*wc & 0xFF].tolower; -} - - -static inline void -my_toupper_utf16(MY_UNICASE_INFO **uni_plane, my_wc_t *wc) -{ - int page= *wc >> 8; - if (page < 256 && uni_plane[page]) - *wc= uni_plane[page][*wc & 0xFF].toupper; -} - - -static inline void -my_tosort_utf16(MY_UNICASE_INFO **uni_plane, my_wc_t *wc) -{ - int page= *wc >> 8; - if (page < 256) - { - if (uni_plane[page]) - *wc= uni_plane[page][*wc & 0xFF].sort; - } - else - { - *wc= MY_CS_REPLACEMENT_CHARACTER; - } -} - - -static size_t -my_caseup_utf16(CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) -{ - my_wc_t wc; - int res; - char *srcend= src + srclen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - DBUG_ASSERT(src == dst && srclen == dstlen); - - while ((src < srcend) && - (res= my_utf16_uni(cs, &wc, (uchar *)src, (uchar*) srcend)) > 0) - { - my_toupper_utf16(uni_plane, &wc); - if (res != my_uni_utf16(cs, wc, (uchar*) src, (uchar*) srcend)) - break; - src+= res; - } - return srclen; -} - - -static void -my_hash_sort_utf16(CHARSET_INFO *cs, const uchar *s, size_t slen, - ulong *n1, ulong *n2) -{ - my_wc_t wc; - int res; - const uchar *e= s+slen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - - while (e > s + 1 && e[-1] == ' ' && e[-2] == '\0') - e-= 2; - - while ((s < e) && (res= my_utf16_uni(cs, &wc, (uchar *)s, (uchar*)e)) > 0) - { - my_tosort_utf16(uni_plane, &wc); - n1[0]^= (((n1[0] & 63) + n2[0]) * (wc & 0xFF)) + (n1[0] << 8); - n2[0]+= 3; - n1[0]^= (((n1[0] & 63) + n2[0]) * (wc >> 8)) + (n1[0] << 8); - n2[0]+= 3; - s+= res; - } -} - - -static size_t -my_casedn_utf16(CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) -{ - my_wc_t wc; - int res; - char *srcend= src + srclen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - DBUG_ASSERT(src == dst && srclen == dstlen); - - while ((src < srcend) && - (res= my_utf16_uni(cs, &wc, (uchar*) src, (uchar*) srcend)) > 0) - { - my_tolower_utf16(uni_plane, &wc); - if (res != my_uni_utf16(cs, wc, (uchar*) src, (uchar*) srcend)) - break; - src+= res; - } - return srclen; -} - - -static int -my_strnncoll_utf16(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - int s_res, t_res; - my_wc_t UNINIT_VAR(s_wc), UNINIT_VAR(t_wc); - const uchar *se= s + slen; - const uchar *te= t + tlen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - - while (s < se && t < te) - { - s_res= my_utf16_uni(cs, &s_wc, s, se); - t_res= my_utf16_uni(cs, &t_wc, t, te); - - if (s_res <= 0 || t_res <= 0) - { - /* Incorrect string, compare by char value */ - return my_bincmp(s, se, t, te); - } - - my_tosort_utf16(uni_plane, &s_wc); - my_tosort_utf16(uni_plane, &t_wc); - - if (s_wc != t_wc) - { - return s_wc > t_wc ? 1 : -1; - } - - s+= s_res; - t+= t_res; - } - return (int) (t_is_prefix ? (t - te) : ((se - s) - (te - t))); -} - - -/** - Compare strings, discarding end space - - If one string is shorter as the other, then we space extend the other - so that the strings have equal length. - - This will ensure that the following things hold: - - "a" == "a " - "a\0" < "a" - "a\0" < "a " - - @param cs Character set pinter. - @param a First string to compare. - @param a_length Length of 'a'. - @param b Second string to compare. - @param b_length Length of 'b'. - - IMPLEMENTATION - - @return Comparison result. - @retval Negative number, if a less than b. - @retval 0, if a is equal to b - @retval Positive number, if a > b -*/ - -static int -my_strnncollsp_utf16(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference) -{ - int res; - my_wc_t UNINIT_VAR(s_wc), UNINIT_VAR(t_wc); - const uchar *se= s + slen, *te= t + tlen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - - DBUG_ASSERT((slen % 2) == 0); - DBUG_ASSERT((tlen % 2) == 0); - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= FALSE; -#endif - - while (s < se && t < te) - { - int s_res= my_utf16_uni(cs, &s_wc, s, se); - int t_res= my_utf16_uni(cs, &t_wc, t, te); - - if (s_res <= 0 || t_res <= 0) - { - /* Incorrect string, compare bytewise */ - return my_bincmp(s, se, t, te); - } - - my_tosort_utf16(uni_plane, &s_wc); - my_tosort_utf16(uni_plane, &t_wc); - - if (s_wc != t_wc) - { - return s_wc > t_wc ? 1 : -1; - } - - s+= s_res; - t+= t_res; - } - - slen= (size_t) (se - s); - tlen= (size_t) (te - t); - res= 0; - - if (slen != tlen) - { - int s_res, swap= 1; - if (diff_if_only_endspace_difference) - res= 1; /* Assume 's' is bigger */ - if (slen < tlen) - { - slen= tlen; - s= t; - se= te; - swap= -1; - res= -res; - } - - for ( ; s < se; s+= s_res) - { - if ((s_res= my_utf16_uni(cs, &s_wc, s, se)) < 0) - { - DBUG_ASSERT(0); - return 0; - } - if (s_wc != ' ') - return (s_wc < ' ') ? -swap : swap; - } - } - return res; -} - - -static uint -my_ismbchar_utf16(CHARSET_INFO *cs __attribute__((unused)), - const char *b __attribute__((unused)), - const char *e __attribute__((unused))) -{ - if (b + 2 > e) - return 0; - - if (MY_UTF16_HIGH_HEAD(*b)) - { - return (b + 4 <= e) && MY_UTF16_LOW_HEAD(b[2]) ? 4 : 0; - } - - if (MY_UTF16_LOW_HEAD(*b)) - return 0; - - return 2; -} - - -static uint -my_mbcharlen_utf16(CHARSET_INFO *cs __attribute__((unused)), - uint c __attribute__((unused))) -{ - return MY_UTF16_HIGH_HEAD(c) ? 4 : 2; -} - - -static size_t -my_numchars_utf16(CHARSET_INFO *cs, - const char *b, const char *e) -{ - size_t nchars= 0; - for ( ; ; nchars++) - { - size_t charlen= my_ismbchar_utf16(cs, b, e); - if (!charlen) - break; - b+= charlen; - } - return nchars; -} - - -static size_t -my_charpos_utf16(CHARSET_INFO *cs, - const char *b, const char *e, size_t pos) -{ - const char *b0= b; - uint charlen; - - for ( ; pos; b+= charlen, pos--) - { - if (!(charlen= my_ismbchar(cs, b, e))) - return (e + 2 - b0); /* Error, return pos outside the string */ - } - return (size_t) (pos ? (e + 2 - b0) : (b - b0)); -} - - -static size_t -my_well_formed_len_utf16(CHARSET_INFO *cs, - const char *b, const char *e, - size_t nchars, int *error) -{ - const char *b0= b; - uint charlen; - *error= 0; - - for ( ; nchars; b+= charlen, nchars--) - { - if (!(charlen= my_ismbchar(cs, b, e))) - { - *error= b < e ? 1 : 0; - break; - } - } - return (size_t) (b - b0); -} - - -static int -my_wildcmp_utf16_ci(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many) -{ - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - return my_wildcmp_unicode(cs, str, str_end, wildstr, wildend, - escape, w_one, w_many, uni_plane); -} - - -static int -my_wildcmp_utf16_bin(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many) -{ - return my_wildcmp_unicode(cs, str, str_end, wildstr, wildend, - escape, w_one, w_many, NULL); -} - - -static int -my_strnncoll_utf16_bin(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - int s_res,t_res; - my_wc_t UNINIT_VAR(s_wc), UNINIT_VAR(t_wc); - const uchar *se=s+slen; - const uchar *te=t+tlen; - - while ( s < se && t < te ) - { - s_res= my_utf16_uni(cs,&s_wc, s, se); - t_res= my_utf16_uni(cs,&t_wc, t, te); - - if (s_res <= 0 || t_res <= 0) - { - /* Incorrect string, compare by char value */ - return my_bincmp(s, se, t, te); - } - if (s_wc != t_wc) - { - return s_wc > t_wc ? 1 : -1; - } - - s+= s_res; - t+= t_res; - } - return (int) (t_is_prefix ? (t - te) : ((se - s) - (te - t))); -} - - -static int -my_strnncollsp_utf16_bin(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference) -{ - int res; - my_wc_t UNINIT_VAR(s_wc), UNINIT_VAR(t_wc); - const uchar *se= s + slen, *te= t + tlen; - - DBUG_ASSERT((slen % 2) == 0); - DBUG_ASSERT((tlen % 2) == 0); - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= FALSE; -#endif - - while (s < se && t < te) - { - int s_res= my_utf16_uni(cs, &s_wc, s, se); - int t_res= my_utf16_uni(cs, &t_wc, t, te); - - if (s_res <= 0 || t_res <= 0) - { - /* Incorrect string, compare bytewise */ - return my_bincmp(s, se, t, te); - } - - if (s_wc != t_wc) - { - return s_wc > t_wc ? 1 : -1; - } - - s+= s_res; - t+= t_res; - } - - slen= (size_t) (se - s); - tlen= (size_t) (te - t); - res= 0; - - if (slen != tlen) - { - int s_res, swap= 1; - if (diff_if_only_endspace_difference) - res= 1; /* Assume 's' is bigger */ - if (slen < tlen) - { - slen= tlen; - s= t; - se= te; - swap= -1; - res= -res; - } - - for ( ; s < se; s+= s_res) - { - if ((s_res= my_utf16_uni(cs, &s_wc, s, se)) < 0) - { - DBUG_ASSERT(0); - return 0; - } - if (s_wc != ' ') - return (s_wc < ' ') ? -swap : swap; - } - } - return res; -} - - -static void -my_hash_sort_utf16_bin(CHARSET_INFO *cs __attribute__((unused)), - const uchar *key, size_t len,ulong *nr1, ulong *nr2) -{ - const uchar *pos = key; - - key+= len; - - while (key > pos + 1 && key[-1] == ' ' && key[-2] == '\0') - key-= 2; - - for (; pos < (uchar*) key ; pos++) - { - nr1[0]^= (ulong) ((((uint) nr1[0] & 63) + nr2[0]) * - ((uint)*pos)) + (nr1[0] << 8); - nr2[0]+= 3; - } -} - - -static MY_COLLATION_HANDLER my_collation_utf16_general_ci_handler = -{ - NULL, /* init */ - my_strnncoll_utf16, - my_strnncollsp_utf16, - my_strnxfrm_unicode, - my_strnxfrmlen_simple, - my_like_range_generic, - my_wildcmp_utf16_ci, - my_strcasecmp_mb2_or_mb4, - my_instr_mb, - my_hash_sort_utf16, - my_propagate_simple -}; - - -static MY_COLLATION_HANDLER my_collation_utf16_bin_handler = -{ - NULL, /* init */ - my_strnncoll_utf16_bin, - my_strnncollsp_utf16_bin, - my_strnxfrm_unicode_full_bin, - my_strnxfrmlen_unicode_full_bin, - my_like_range_generic, - my_wildcmp_utf16_bin, - my_strcasecmp_mb2_or_mb4, - my_instr_mb, - my_hash_sort_utf16_bin, - my_propagate_simple -}; - - -MY_CHARSET_HANDLER my_charset_utf16_handler= -{ - NULL, /* init */ - my_ismbchar_utf16, /* ismbchar */ - my_mbcharlen_utf16, /* mbcharlen */ - my_numchars_utf16, - my_charpos_utf16, - my_well_formed_len_utf16, - my_lengthsp_mb2, - my_numcells_mb, - my_utf16_uni, /* mb_wc */ - my_uni_utf16, /* wc_mb */ - my_mb_ctype_mb, - my_caseup_str_mb2_or_mb4, - my_casedn_str_mb2_or_mb4, - my_caseup_utf16, - my_casedn_utf16, - my_snprintf_mb2, - my_l10tostr_mb2_or_mb4, - my_ll10tostr_mb2_or_mb4, - my_fill_mb2, - my_strntol_mb2_or_mb4, - my_strntoul_mb2_or_mb4, - my_strntoll_mb2_or_mb4, - my_strntoull_mb2_or_mb4, - my_strntod_mb2_or_mb4, - my_strtoll10_mb2, - my_strntoull10rnd_mb2_or_mb4, - my_scan_mb2 -}; - - -CHARSET_INFO my_charset_utf16_general_ci= -{ - 54,0,0, /* number */ - MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf16", /* cs name */ - "utf16_general_ci", /* name */ - "UTF-16 Unicode", /* comment */ - NULL, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_general_ci_handler -}; - - -CHARSET_INFO my_charset_utf16_bin= -{ - 55,0,0, /* number */ - MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_UNICODE|MY_CS_NONASCII, - "utf16", /* cs name */ - "utf16_bin", /* name */ - "UTF-16 Unicode", /* comment */ - NULL, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 4, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf16_handler, - &my_collation_utf16_bin_handler -}; - -#endif /* HAVE_CHARSET_utf16 */ - - -#ifdef HAVE_CHARSET_utf32 - -static int -my_utf32_uni(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t *pwc, const uchar *s, const uchar *e) -{ - if (s + 4 > e) - return MY_CS_TOOSMALL4; - *pwc= (s[0] << 24) + (s[1] << 16) + (s[2] << 8) + (s[3]); - return 4; -} - - -static int -my_uni_utf32(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, uchar *s, uchar *e) -{ - if (s + 4 > e) - return MY_CS_TOOSMALL4; - - s[0]= (uchar) (wc >> 24); - s[1]= (uchar) (wc >> 16) & 0xFF; - s[2]= (uchar) (wc >> 8) & 0xFF; - s[3]= (uchar) wc & 0xFF; - return 4; -} - - -static inline void -my_tolower_utf32(MY_UNICASE_INFO **uni_plane, my_wc_t *wc) -{ - int page= *wc >> 8; - if (page < 256 && uni_plane[page]) - *wc= uni_plane[page][*wc & 0xFF].tolower; -} - - -static inline void -my_toupper_utf32(MY_UNICASE_INFO **uni_plane, my_wc_t *wc) -{ - int page= *wc >> 8; - if (page < 256 && uni_plane[page]) - *wc= uni_plane[page][*wc & 0xFF].toupper; -} - - -static inline void -my_tosort_utf32(MY_UNICASE_INFO **uni_plane, my_wc_t *wc) -{ - int page= *wc >> 8; - if (page < 256) - { - if (uni_plane[page]) - *wc= uni_plane[page][*wc & 0xFF].sort; - } - else - { - *wc= MY_CS_REPLACEMENT_CHARACTER; - } -} - - -static size_t -my_caseup_utf32(CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) -{ - my_wc_t wc; - int res; - char *srcend= src + srclen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - DBUG_ASSERT(src == dst && srclen == dstlen); - - while ((src < srcend) && - (res= my_utf32_uni(cs, &wc, (uchar *)src, (uchar*) srcend)) > 0) - { - my_toupper_utf32(uni_plane, &wc); - if (res != my_uni_utf32(cs, wc, (uchar*) src, (uchar*) srcend)) - break; - src+= res; - } - return srclen; -} - - -static inline void -my_hash_add(ulong *n1, ulong *n2, uint ch) -{ - n1[0]^= (((n1[0] & 63) + n2[0]) * (ch)) + (n1[0] << 8); - n2[0]+= 3; -} - - -static void -my_hash_sort_utf32(CHARSET_INFO *cs, const uchar *s, size_t slen, - ulong *n1, ulong *n2) -{ - my_wc_t wc; - int res; - const uchar *e= s + slen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - - /* Skip trailing spaces */ - while (e > s + 3 && e[-1] == ' ' && !e[-2] && !e[-3] && !e[-4]) - e-= 4; - - while ((res= my_utf32_uni(cs, &wc, (uchar*) s, (uchar*) e)) > 0) - { - my_tosort_utf32(uni_plane, &wc); - my_hash_add(n1, n2, (uint) (wc >> 24)); - my_hash_add(n1, n2, (uint) (wc >> 16) & 0xFF); - my_hash_add(n1, n2, (uint) (wc >> 8) & 0xFF); - my_hash_add(n1, n2, (uint) (wc & 0xFF)); - s+= res; - } -} - - -static size_t -my_casedn_utf32(CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) -{ - my_wc_t wc; - int res; - char *srcend= src + srclen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - DBUG_ASSERT(src == dst && srclen == dstlen); - - while ((res= my_utf32_uni(cs, &wc, (uchar*) src, (uchar*) srcend)) > 0) - { - my_tolower_utf32(uni_plane,&wc); - if (res != my_uni_utf32(cs, wc, (uchar*) src, (uchar*) srcend)) - break; - src+= res; - } - return srclen; -} - - -static int -my_strnncoll_utf32(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - my_wc_t UNINIT_VAR(s_wc),UNINIT_VAR(t_wc); - const uchar *se= s + slen; - const uchar *te= t + tlen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - - while (s < se && t < te) - { - int s_res= my_utf32_uni(cs, &s_wc, s, se); - int t_res= my_utf32_uni(cs, &t_wc, t, te); - - if ( s_res <= 0 || t_res <= 0) - { - /* Incorrect string, compare by char value */ - return my_bincmp(s, se, t, te); - } - - my_tosort_utf32(uni_plane, &s_wc); - my_tosort_utf32(uni_plane, &t_wc); - - if (s_wc != t_wc) - { - return s_wc > t_wc ? 1 : -1; - } - - s+= s_res; - t+= t_res; - } - return (int) (t_is_prefix ? (t - te) : ((se - s) - (te - t))); -} - - -/** - Compare strings, discarding end space - - If one string is shorter as the other, then we space extend the other - so that the strings have equal length. - - This will ensure that the following things hold: - - "a" == "a " - "a\0" < "a" - "a\0" < "a " - - @param cs Character set pinter. - @param a First string to compare. - @param a_length Length of 'a'. - @param b Second string to compare. - @param b_length Length of 'b'. - - IMPLEMENTATION - - @return Comparison result. - @retval Negative number, if a less than b. - @retval 0, if a is equal to b - @retval Positive number, if a > b -*/ - - -static int -my_strnncollsp_utf32(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference) -{ - int res; - my_wc_t UNINIT_VAR(s_wc), UNINIT_VAR(t_wc); - const uchar *se= s + slen, *te= t + tlen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - - DBUG_ASSERT((slen % 4) == 0); - DBUG_ASSERT((tlen % 4) == 0); - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= FALSE; -#endif - - while ( s < se && t < te ) - { - int s_res= my_utf32_uni(cs, &s_wc, s, se); - int t_res= my_utf32_uni(cs, &t_wc, t, te); - - if ( s_res <= 0 || t_res <= 0 ) - { - /* Incorrect string, compare bytewise */ - return my_bincmp(s, se, t, te); - } - - my_tosort_utf32(uni_plane, &s_wc); - my_tosort_utf32(uni_plane, &t_wc); - - if ( s_wc != t_wc ) - { - return s_wc > t_wc ? 1 : -1; - } - - s+= s_res; - t+= t_res; - } - - slen= (size_t) (se - s); - tlen= (size_t) (te - t); - res= 0; - - if (slen != tlen) - { - int s_res, swap= 1; - if (diff_if_only_endspace_difference) - res= 1; /* Assume 's' is bigger */ - if (slen < tlen) - { - slen= tlen; - s= t; - se= te; - swap= -1; - res= -res; - } - - for ( ; s < se; s+= s_res) - { - if ((s_res= my_utf32_uni(cs, &s_wc, s, se)) < 0) - { - DBUG_ASSERT(0); - return 0; - } - if (s_wc != ' ') - return (s_wc < ' ') ? -swap : swap; - } - } - return res; -} - - -static size_t -my_strnxfrmlen_utf32(CHARSET_INFO *cs __attribute__((unused)), size_t len) -{ - return len / 2; -} - - -static uint -my_ismbchar_utf32(CHARSET_INFO *cs __attribute__((unused)), - const char *b __attribute__((unused)), - const char *e __attribute__((unused))) -{ - return 4; -} - - -static uint -my_mbcharlen_utf32(CHARSET_INFO *cs __attribute__((unused)) , - uint c __attribute__((unused))) -{ - return 4; -} - - -static int -my_vsnprintf_utf32(char *dst, size_t n, const char* fmt, va_list ap) -{ - char *start= dst, *end= dst + n; - DBUG_ASSERT((n % 4) == 0); - for (; *fmt ; fmt++) - { - if (fmt[0] != '%') - { - if (dst >= end) /* End of buffer */ - break; - - *dst++= '\0'; - *dst++= '\0'; - *dst++= '\0'; - *dst++= *fmt; /* Copy ordinary char */ - continue; - } - - fmt++; - - /* Skip if max size is used (to be compatible with printf) */ - while ( (*fmt>='0' && *fmt<='9') || *fmt == '.' || *fmt == '-') - fmt++; - - if (*fmt == 'l') - fmt++; - - if (*fmt == 's') /* String parameter */ - { - reg2 char *par= va_arg(ap, char *); - size_t plen; - size_t left_len= (size_t)(end - dst); - if (!par) par= (char*)"(null)"; - plen= strlen(par); - if (left_len <= plen*4) - plen= left_len / 4 - 1; - - for ( ; plen ; plen--, dst+= 4, par++) - { - dst[0]= '\0'; - dst[1]= '\0'; - dst[2]= '\0'; - dst[3]= par[0]; - } - continue; - } - else if (*fmt == 'd' || *fmt == 'u') /* Integer parameter */ - { - register int iarg; - char nbuf[16]; - char *pbuf= nbuf; - - if ((size_t) (end - dst) < 64) - break; - iarg= va_arg(ap, int); - if (*fmt == 'd') - int10_to_str((long) iarg, nbuf, -10); - else - int10_to_str((long) (uint) iarg,nbuf,10); - - for (; pbuf[0]; pbuf++) - { - *dst++= '\0'; - *dst++= '\0'; - *dst++= '\0'; - *dst++= *pbuf; - } - continue; - } - - /* We come here on '%%', unknown code or too long parameter */ - if (dst == end) - break; - *dst++= '\0'; - *dst++= '\0'; - *dst++= '\0'; - *dst++= '%'; /* % used as % or unknown code */ - } - - DBUG_ASSERT(dst < end); - *dst++= '\0'; - *dst++= '\0'; - *dst++= '\0'; - *dst++= '\0'; /* End of errmessage */ - return (size_t) (dst - start - 4); -} - - -static size_t -my_snprintf_utf32(CHARSET_INFO *cs __attribute__((unused)), - char* to, size_t n, const char* fmt, ...) -{ - va_list args; - va_start(args,fmt); - return my_vsnprintf_utf32(to, n, fmt, args); -} - - -static longlong -my_strtoll10_utf32(CHARSET_INFO *cs __attribute__((unused)), - const char *nptr, char **endptr, int *error) -{ - const char *s, *end, *start, *n_end, *true_end; - uchar c; - unsigned long i, j, k; - ulonglong li; - int negative; - ulong cutoff, cutoff2, cutoff3; - - s= nptr; - /* If fixed length string */ - if (endptr) - { - /* Make sure string length is even */ - end= s + ((*endptr - s) / 4) * 4; - while (s < end && !s[0] && !s[1] && !s[2] && - (s[3] == ' ' || s[3] == '\t')) - s+= 4; - if (s == end) - goto no_conv; - } - else - { - /* We don't support null terminated strings in UCS2 */ - goto no_conv; - } - - /* Check for a sign. */ - negative= 0; - if (!s[0] && !s[1] && !s[2] && s[3] == '-') - { - *error= -1; /* Mark as negative number */ - negative= 1; - s+= 4; - if (s == end) - goto no_conv; - cutoff= MAX_NEGATIVE_NUMBER / LFACTOR2; - cutoff2= (MAX_NEGATIVE_NUMBER % LFACTOR2) / 100; - cutoff3= MAX_NEGATIVE_NUMBER % 100; - } - else - { - *error= 0; - if (!s[0] && !s[1] && !s[2] && s[3] == '+') - { - s+= 4; - if (s == end) - goto no_conv; - } - cutoff= ULONGLONG_MAX / LFACTOR2; - cutoff2= ULONGLONG_MAX % LFACTOR2 / 100; - cutoff3= ULONGLONG_MAX % 100; - } - - /* Handle case where we have a lot of pre-zero */ - if (!s[0] && !s[1] && !s[2] && s[3] == '0') - { - i= 0; - do - { - s+= 4; - if (s == end) - goto end_i; /* Return 0 */ - } - while (!s[0] && !s[1] && !s[2] && s[3] == '0'); - n_end= s + 4 * INIT_CNT; - } - else - { - /* Read first digit to check that it's a valid number */ - if (s[0] || s[1] || s[2] || (c= (s[3]-'0')) > 9) - goto no_conv; - i= c; - s+= 4; - n_end= s + 4 * (INIT_CNT-1); - } - - /* Handle first 9 digits and store them in i */ - if (n_end > end) - n_end= end; - for (; s != n_end ; s+= 4) - { - if (s[0] || s[1] || s[2] || (c= (s[3] - '0')) > 9) - goto end_i; - i= i * 10 + c; - } - if (s == end) - goto end_i; - - /* Handle next 9 digits and store them in j */ - j= 0; - start= s; /* Used to know how much to shift i */ - n_end= true_end= s + 4 * INIT_CNT; - if (n_end > end) - n_end= end; - do - { - if (s[0] || s[1] || s[2] || (c= (s[3] - '0')) > 9) - goto end_i_and_j; - j= j * 10 + c; - s+= 4; - } while (s != n_end); - if (s == end) - { - if (s != true_end) - goto end_i_and_j; - goto end3; - } - if (s[0] || s[1] || s[2] || (c= (s[3] - '0')) > 9) - goto end3; - - /* Handle the next 1 or 2 digits and store them in k */ - k=c; - s+= 4; - if (s == end || s[0] || s[1] || s[2] || (c= (s[3]-'0')) > 9) - goto end4; - k= k * 10 + c; - s+= 2; - *endptr= (char*) s; - - /* number string should have ended here */ - if (s != end && !s[0] && !s[1] && !s[2] && (c= (s[3] - '0')) <= 9) - goto overflow; - - /* Check that we didn't get an overflow with the last digit */ - if (i > cutoff || (i == cutoff && ((j > cutoff2 || j == cutoff2) && - k > cutoff3))) - goto overflow; - li= i * LFACTOR2+ (ulonglong) j * 100 + k; - return (longlong) li; - -overflow: /* *endptr is set here */ - *error= MY_ERRNO_ERANGE; - return negative ? LONGLONG_MIN : (longlong) ULONGLONG_MAX; - -end_i: - *endptr= (char*) s; - return (negative ? ((longlong) -(long) i) : (longlong) i); - -end_i_and_j: - li= (ulonglong) i * lfactor[(size_t) (s-start) / 4] + j; - *endptr= (char*) s; - return (negative ? -((longlong) li) : (longlong) li); - -end3: - li= (ulonglong) i*LFACTOR+ (ulonglong) j; - *endptr= (char*) s; - return (negative ? -((longlong) li) : (longlong) li); - -end4: - li= (ulonglong) i*LFACTOR1+ (ulonglong) j * 10 + k; - *endptr= (char*) s; - if (negative) - { - if (li > MAX_NEGATIVE_NUMBER) - goto overflow; - return -((longlong) li); - } - return (longlong) li; - -no_conv: - /* There was no number to convert. */ - *error= MY_ERRNO_EDOM; - *endptr= (char *) nptr; - return 0; -} - - -static size_t -my_numchars_utf32(CHARSET_INFO *cs __attribute__((unused)), - const char *b, const char *e) -{ - return (size_t) (e - b) / 4; -} - - -static size_t -my_charpos_utf32(CHARSET_INFO *cs __attribute__((unused)), - const char *b, const char *e, size_t pos) -{ - size_t string_length= (size_t) (e - b); - return pos * 4 > string_length ? string_length + 4 : pos * 4; -} - - -static size_t -my_well_formed_len_utf32(CHARSET_INFO *cs __attribute__((unused)), - const char *b, const char *e, - size_t nchars, int *error) -{ - /* Ensure string length is divisible by 4 */ - const char *b0= b; - size_t length= e - b; - DBUG_ASSERT((length % 4) == 0); - *error= 0; - nchars*= 4; - if (length > nchars) - { - length= nchars; - e= b + nchars; - } - for (; b < e; b+= 4) - { - /* Don't accept characters greater than U+10FFFF */ - if (b[0] || (uchar) b[1] > 0x10) - { - *error= 1; - return b - b0; - } - } - return length; -} - - -static -void my_fill_utf32(CHARSET_INFO *cs, - char *s, size_t slen, int fill) -{ - char buf[10]; - uint buflen; - char *e= s + slen; - - DBUG_ASSERT((slen % 4) == 0); - - buflen= cs->cset->wc_mb(cs, (my_wc_t) fill, (uchar*) buf, - (uchar*) buf + sizeof(buf)); - DBUG_ASSERT(buflen == 4); - while (s < e) - { - memcpy(s, buf, 4); - s+= 4; - } -} - - -static size_t -my_lengthsp_utf32(CHARSET_INFO *cs __attribute__((unused)), - const char *ptr, size_t length) -{ - const char *end= ptr + length; - DBUG_ASSERT((length % 4) == 0); - while (end > ptr + 3 && end[-1] == ' ' && !end[-2] && !end[-3] && !end[-4]) - end-= 4; - return (size_t) (end - ptr); -} - - -static int -my_wildcmp_utf32_ci(CHARSET_INFO *cs, - const char *str, const char *str_end, - const char *wildstr, const char *wildend, - int escape, int w_one, int w_many) -{ - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - return my_wildcmp_unicode(cs, str, str_end, wildstr, wildend, - escape, w_one, w_many, uni_plane); -} - - -static int -my_wildcmp_utf32_bin(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many) -{ - return my_wildcmp_unicode(cs, str, str_end, wildstr, wildend, - escape, w_one, w_many, NULL); -} - - -static int -my_strnncoll_utf32_bin(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - my_wc_t UNINIT_VAR(s_wc), UNINIT_VAR(t_wc); - const uchar *se= s + slen; - const uchar *te= t + tlen; - - while (s < se && t < te) - { - int s_res= my_utf32_uni(cs, &s_wc, s, se); - int t_res= my_utf32_uni(cs, &t_wc, t, te); - - if (s_res <= 0 || t_res <= 0) - { - /* Incorrect string, compare by char value */ - return my_bincmp(s, se, t, te); - } - if (s_wc != t_wc) - { - return s_wc > t_wc ? 1 : -1; - } - - s+= s_res; - t+= t_res; - } - return (int) (t_is_prefix ? (t-te) : ((se - s) - (te - t))); -} - - -static inline my_wc_t -my_utf32_get(const uchar *s) -{ - return - ((my_wc_t) s[0] << 24) + - ((my_wc_t) s[1] << 16) + - ((my_wc_t) s[2] << 8) + - s[3]; -} - - -static int -my_strnncollsp_utf32_bin(CHARSET_INFO *cs __attribute__((unused)), - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference - __attribute__((unused))) -{ - const uchar *se, *te; - size_t minlen; - - DBUG_ASSERT((slen % 4) == 0); - DBUG_ASSERT((tlen % 4) == 0); - - se= s + slen; - te= t + tlen; - - for (minlen= min(slen, tlen); minlen; minlen-= 4) - { - my_wc_t s_wc= my_utf32_get(s); - my_wc_t t_wc= my_utf32_get(t); - if (s_wc != t_wc) - return s_wc > t_wc ? 1 : -1; - - s+= 4; - t+= 4; - } - - if (slen != tlen) - { - int swap= 1; - if (slen < tlen) - { - s= t; - se= te; - swap= -1; - } - - for ( ; s < se ; s+= 4) - { - my_wc_t s_wc= my_utf32_get(s); - if (s_wc != ' ') - return (s_wc < ' ') ? -swap : swap; - } - } - return 0; -} - - -static size_t -my_scan_utf32(CHARSET_INFO *cs, - const char *str, const char *end, int sequence_type) -{ - const char *str0= str; - - switch (sequence_type) - { - case MY_SEQ_SPACES: - for ( ; str < end; ) - { - my_wc_t wc; - int res= my_utf32_uni(cs, &wc, (uchar*) str, (uchar*) end); - if (res < 0 || wc != ' ') - break; - str+= res; - } - return (size_t) (str - str0); - default: - return 0; - } -} - - -static MY_COLLATION_HANDLER my_collation_utf32_general_ci_handler = -{ - NULL, /* init */ - my_strnncoll_utf32, - my_strnncollsp_utf32, - my_strnxfrm_unicode, - my_strnxfrmlen_utf32, - my_like_range_generic, - my_wildcmp_utf32_ci, - my_strcasecmp_mb2_or_mb4, - my_instr_mb, - my_hash_sort_utf32, - my_propagate_simple -}; - - -static MY_COLLATION_HANDLER my_collation_utf32_bin_handler = -{ - NULL, /* init */ - my_strnncoll_utf32_bin, - my_strnncollsp_utf32_bin, - my_strnxfrm_unicode_full_bin, - my_strnxfrmlen_unicode_full_bin, - my_like_range_generic, - my_wildcmp_utf32_bin, - my_strcasecmp_mb2_or_mb4, - my_instr_mb, - my_hash_sort_utf32, - my_propagate_simple -}; - - -MY_CHARSET_HANDLER my_charset_utf32_handler= -{ - NULL, /* init */ - my_ismbchar_utf32, - my_mbcharlen_utf32, - my_numchars_utf32, - my_charpos_utf32, - my_well_formed_len_utf32, - my_lengthsp_utf32, - my_numcells_mb, - my_utf32_uni, - my_uni_utf32, - my_mb_ctype_mb, - my_caseup_str_mb2_or_mb4, - my_casedn_str_mb2_or_mb4, - my_caseup_utf32, - my_casedn_utf32, - my_snprintf_utf32, - my_l10tostr_mb2_or_mb4, - my_ll10tostr_mb2_or_mb4, - my_fill_utf32, - my_strntol_mb2_or_mb4, - my_strntoul_mb2_or_mb4, - my_strntoll_mb2_or_mb4, - my_strntoull_mb2_or_mb4, - my_strntod_mb2_or_mb4, - my_strtoll10_utf32, - my_strntoull10rnd_mb2_or_mb4, - my_scan_utf32 -}; - - -CHARSET_INFO my_charset_utf32_general_ci= -{ - 60,0,0, /* number */ - MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf32", /* cs name */ - "utf32_general_ci", /* name */ - "UTF-32 Unicode", /* comment */ - NULL, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_general_ci_handler -}; - - -CHARSET_INFO my_charset_utf32_bin= -{ - 61,0,0, /* number */ - MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_UNICODE|MY_CS_NONASCII, - "utf32", /* cs name */ - "utf32_bin", /* name */ - "UTF-32 Unicode", /* comment */ - NULL, /* tailoring */ - NULL, /* ctype */ - NULL, /* to_lower */ - NULL, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 4, /* mbminlen */ - 4, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf32_handler, - &my_collation_utf32_bin_handler -}; - - -#endif /* HAVE_CHARSET_utf32 */ - - -#ifdef HAVE_CHARSET_ucs2 - -static uchar ctype_ucs2[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static uchar to_lower_ucs2[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_ucs2[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - - -static int my_ucs2_uni(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t * pwc, const uchar *s, const uchar *e) -{ - if (s+2 > e) /* Need 2 characters */ - return MY_CS_TOOSMALL2; - - *pwc= ((uchar)s[0]) * 256 + ((uchar)s[1]); - return 2; -} - -static int my_uni_ucs2(CHARSET_INFO *cs __attribute__((unused)) , - my_wc_t wc, uchar *r, uchar *e) -{ - if ( r+2 > e ) - return MY_CS_TOOSMALL2; - - if (wc > 0xFFFF) /* UCS2 does not support characters outside BMP */ - return MY_CS_ILUNI; - - r[0]= (uchar) (wc >> 8); - r[1]= (uchar) (wc & 0xFF); - return 2; -} - - -static size_t my_caseup_ucs2(CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) -{ - my_wc_t wc; - int res; - char *srcend= src + srclen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - DBUG_ASSERT(src == dst && srclen == dstlen); - - while ((src < srcend) && - (res= my_ucs2_uni(cs, &wc, (uchar *)src, (uchar*) srcend)) > 0) - { - int plane= (wc>>8) & 0xFF; - wc= uni_plane[plane] ? uni_plane[plane][wc & 0xFF].toupper : wc; - if (res != my_uni_ucs2(cs, wc, (uchar*) src, (uchar*) srcend)) - break; - src+= res; - } - return srclen; -} - - -static void my_hash_sort_ucs2(CHARSET_INFO *cs, const uchar *s, size_t slen, - ulong *n1, ulong *n2) -{ - my_wc_t wc; - int res; - const uchar *e=s+slen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - - while (e > s+1 && e[-1] == ' ' && e[-2] == '\0') - e-= 2; - - while ((s < e) && (res=my_ucs2_uni(cs,&wc, (uchar *)s, (uchar*)e)) >0) - { - int plane = (wc>>8) & 0xFF; - wc = uni_plane[plane] ? uni_plane[plane][wc & 0xFF].sort : wc; - n1[0]^= (((n1[0] & 63)+n2[0])*(wc & 0xFF))+ (n1[0] << 8); - n2[0]+=3; - n1[0]^= (((n1[0] & 63)+n2[0])*(wc >> 8))+ (n1[0] << 8); - n2[0]+=3; - s+=res; - } -} - - -static size_t my_casedn_ucs2(CHARSET_INFO *cs, char *src, size_t srclen, - char *dst __attribute__((unused)), - size_t dstlen __attribute__((unused))) -{ - my_wc_t wc; - int res; - char *srcend= src + srclen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - DBUG_ASSERT(src == dst && srclen == dstlen); - - while ((src < srcend) && - (res= my_ucs2_uni(cs, &wc, (uchar*) src, (uchar*) srcend)) > 0) - { - int plane= (wc>>8) & 0xFF; - wc= uni_plane[plane] ? uni_plane[plane][wc & 0xFF].tolower : wc; - if (res != my_uni_ucs2(cs, wc, (uchar*) src, (uchar*) srcend)) - break; - src+= res; - } - return srclen; -} - - -static int my_strnncoll_ucs2(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - int s_res,t_res; - my_wc_t UNINIT_VAR(s_wc),UNINIT_VAR(t_wc); - const uchar *se=s+slen; - const uchar *te=t+tlen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - - while ( s < se && t < te ) - { - int plane; - s_res=my_ucs2_uni(cs,&s_wc, s, se); - t_res=my_ucs2_uni(cs,&t_wc, t, te); - - if ( s_res <= 0 || t_res <= 0 ) - { - /* Incorrect string, compare by char value */ - return ((int)s[0]-(int)t[0]); - } - - plane=(s_wc>>8) & 0xFF; - s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].sort : s_wc; - plane=(t_wc>>8) & 0xFF; - t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].sort : t_wc; - if ( s_wc != t_wc ) - { - return s_wc > t_wc ? 1 : -1; - } - - s+=s_res; - t+=t_res; - } - return (int) (t_is_prefix ? t-te : ((se-s) - (te-t))); -} - -/* - Compare strings, discarding end space - - SYNOPSIS - my_strnncollsp_ucs2() - cs character set handler - a First string to compare - a_length Length of 'a' - b Second string to compare - b_length Length of 'b' - - IMPLEMENTATION - If one string is shorter as the other, then we space extend the other - so that the strings have equal length. - - This will ensure that the following things hold: - - "a" == "a " - "a\0" < "a" - "a\0" < "a " - - RETURN - < 0 a < b - = 0 a == b - > 0 a > b -*/ - -static int my_strnncollsp_ucs2(CHARSET_INFO *cs __attribute__((unused)), - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference - __attribute__((unused))) -{ - const uchar *se, *te; - size_t minlen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - - /* extra safety to make sure the lengths are even numbers */ - slen&= ~1; - tlen&= ~1; - - se= s + slen; - te= t + tlen; - - for (minlen= min(slen, tlen); minlen; minlen-= 2) - { - int s_wc = uni_plane[s[0]] ? (int) uni_plane[s[0]][s[1]].sort : - (((int) s[0]) << 8) + (int) s[1]; - - int t_wc = uni_plane[t[0]] ? (int) uni_plane[t[0]][t[1]].sort : - (((int) t[0]) << 8) + (int) t[1]; - if ( s_wc != t_wc ) - return s_wc > t_wc ? 1 : -1; - - s+= 2; - t+= 2; - } - - if (slen != tlen) - { - int swap= 1; - if (slen < tlen) - { - s= t; - se= te; - swap= -1; - } - - for ( ; s < se ; s+= 2) - { - if (s[0] || s[1] != ' ') - return (s[0] == 0 && s[1] < ' ') ? -swap : swap; - } - } - return 0; -} - - -static uint my_ismbchar_ucs2(CHARSET_INFO *cs __attribute__((unused)), - const char *b __attribute__((unused)), - const char *e __attribute__((unused))) -{ - return 2; -} - - -static uint my_mbcharlen_ucs2(CHARSET_INFO *cs __attribute__((unused)) , - uint c __attribute__((unused))) -{ - return 2; -} - - -static -size_t my_numchars_ucs2(CHARSET_INFO *cs __attribute__((unused)), - const char *b, const char *e) -{ - return (size_t) (e-b)/2; -} - - -static -size_t my_charpos_ucs2(CHARSET_INFO *cs __attribute__((unused)), - const char *b __attribute__((unused)), - const char *e __attribute__((unused)), - size_t pos) -{ - size_t string_length= (size_t) (e - b); - return pos > string_length ? string_length + 2 : pos * 2; -} - - -static -size_t my_well_formed_len_ucs2(CHARSET_INFO *cs __attribute__((unused)), - const char *b, const char *e, - size_t nchars, int *error) -{ - /* Ensure string length is dividable with 2 */ - size_t nbytes= ((size_t) (e-b)) & ~(size_t) 1; - *error= 0; - nchars*= 2; - return min(nbytes, nchars); -} - - -static -int my_wildcmp_ucs2_ci(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many) -{ - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - return my_wildcmp_unicode(cs,str,str_end,wildstr,wildend, - escape,w_one,w_many,uni_plane); -} - - -static -int my_wildcmp_ucs2_bin(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many) -{ - return my_wildcmp_unicode(cs,str,str_end,wildstr,wildend, - escape,w_one,w_many,NULL); -} - - -static -int my_strnncoll_ucs2_bin(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - int s_res,t_res; - my_wc_t UNINIT_VAR(s_wc),UNINIT_VAR(t_wc); - const uchar *se=s+slen; - const uchar *te=t+tlen; - - while ( s < se && t < te ) - { - s_res=my_ucs2_uni(cs,&s_wc, s, se); - t_res=my_ucs2_uni(cs,&t_wc, t, te); - - if ( s_res <= 0 || t_res <= 0 ) - { - /* Incorrect string, compare by char value */ - return ((int)s[0]-(int)t[0]); - } - if ( s_wc != t_wc ) - { - return s_wc > t_wc ? 1 : -1; - } - - s+=s_res; - t+=t_res; - } - return (int) (t_is_prefix ? t-te : ((se-s) - (te-t))); -} - -static int my_strnncollsp_ucs2_bin(CHARSET_INFO *cs __attribute__((unused)), - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference - __attribute__((unused))) -{ - const uchar *se, *te; - size_t minlen; - - /* extra safety to make sure the lengths are even numbers */ - slen= (slen >> 1) << 1; - tlen= (tlen >> 1) << 1; - - se= s + slen; - te= t + tlen; - - for (minlen= min(slen, tlen); minlen; minlen-= 2) - { - int s_wc= s[0] * 256 + s[1]; - int t_wc= t[0] * 256 + t[1]; - if ( s_wc != t_wc ) - return s_wc > t_wc ? 1 : -1; - - s+= 2; - t+= 2; - } - - if (slen != tlen) - { - int swap= 1; - if (slen < tlen) - { - s= t; - se= te; - swap= -1; - } - - for ( ; s < se ; s+= 2) - { - if (s[0] || s[1] != ' ') - return (s[0] == 0 && s[1] < ' ') ? -swap : swap; - } - } - return 0; -} - - -static -void my_hash_sort_ucs2_bin(CHARSET_INFO *cs __attribute__((unused)), - const uchar *key, size_t len,ulong *nr1, ulong *nr2) -{ - const uchar *pos = key; - - key+= len; - - while (key > pos+1 && key[-1] == ' ' && key[-2] == '\0') - key-= 2; - - for (; pos < (uchar*) key ; pos++) - { - nr1[0]^=(ulong) ((((uint) nr1[0] & 63)+nr2[0]) * - ((uint)*pos)) + (nr1[0] << 8); - nr2[0]+=3; - } -} - - -static MY_COLLATION_HANDLER my_collation_ucs2_general_ci_handler = -{ - NULL, /* init */ - my_strnncoll_ucs2, - my_strnncollsp_ucs2, - my_strnxfrm_unicode, - my_strnxfrmlen_simple, - my_like_range_generic, - my_wildcmp_ucs2_ci, - my_strcasecmp_mb2_or_mb4, - my_instr_mb, - my_hash_sort_ucs2, - my_propagate_simple -}; - - -static MY_COLLATION_HANDLER my_collation_ucs2_bin_handler = -{ - NULL, /* init */ - my_strnncoll_ucs2_bin, - my_strnncollsp_ucs2_bin, - my_strnxfrm_unicode, - my_strnxfrmlen_simple, - my_like_range_generic, - my_wildcmp_ucs2_bin, - my_strcasecmp_mb2_or_mb4, - my_instr_mb, - my_hash_sort_ucs2_bin, - my_propagate_simple -}; - - -MY_CHARSET_HANDLER my_charset_ucs2_handler= -{ - NULL, /* init */ - my_ismbchar_ucs2, /* ismbchar */ - my_mbcharlen_ucs2, /* mbcharlen */ - my_numchars_ucs2, - my_charpos_ucs2, - my_well_formed_len_ucs2, - my_lengthsp_mb2, - my_numcells_mb, - my_ucs2_uni, /* mb_wc */ - my_uni_ucs2, /* wc_mb */ - my_mb_ctype_mb, - my_caseup_str_mb2_or_mb4, - my_casedn_str_mb2_or_mb4, - my_caseup_ucs2, - my_casedn_ucs2, - my_snprintf_mb2, - my_l10tostr_mb2_or_mb4, - my_ll10tostr_mb2_or_mb4, - my_fill_mb2, - my_strntol_mb2_or_mb4, - my_strntoul_mb2_or_mb4, - my_strntoll_mb2_or_mb4, - my_strntoull_mb2_or_mb4, - my_strntod_mb2_or_mb4, - my_strtoll10_mb2, - my_strntoull10rnd_mb2_or_mb4, - my_scan_mb2 -}; - - -CHARSET_INFO my_charset_ucs2_general_ci= -{ - 35,0,0, /* number */ - MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_general_ci", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_ucs2, /* ctype */ - to_lower_ucs2, /* to_lower */ - to_upper_ucs2, /* to_upper */ - to_upper_ucs2, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_general_ci_handler -}; - -CHARSET_INFO my_charset_ucs2_bin= -{ - 90,0,0, /* number */ - MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ - "ucs2_bin", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_ucs2, /* ctype */ - to_lower_ucs2, /* to_lower */ - to_upper_ucs2, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 2, /* mbminlen */ - 2, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_ucs2_handler, - &my_collation_ucs2_bin_handler -}; - - -#endif /* HAVE_CHARSET_ucs2 */ diff --git a/deps/mysqllite/strings/ctype-utf8.c b/deps/mysqllite/strings/ctype-utf8.c deleted file mode 100644 index 324f6b9aafbf7b..00000000000000 --- a/deps/mysqllite/strings/ctype-utf8.c +++ /dev/null @@ -1,5238 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; version 2 - of the License. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -/* UTF8 according RFC 2279 */ -/* Written by Alexander Barkov */ - -#include -#include "m_string.h" -#include "m_ctype.h" -#include - -#ifndef EILSEQ -#define EILSEQ ENOENT -#endif - - -#define MY_UTF8MB3_GENERAL_CI MY_UTF8MB3 "_general_ci" -#define MY_UTF8MB3_GENERAL_CS MY_UTF8MB3 "_general_cs" -#define MY_UTF8MB3_BIN MY_UTF8MB3 "_bin" -#define MY_UTF8MB4_GENERAL_CI MY_UTF8MB4 "_general_ci" -#define MY_UTF8MB4_GENERAL_CS MY_UTF8MB4 "_general_cs" -#define MY_UTF8MB4_BIN MY_UTF8MB4 "_bin" - - - -#ifndef HAVE_CHARSET_utf8 -#define HAVE_CHARSET_utf8 -#endif - -#ifdef HAVE_CHARSET_utf8 -#define HAVE_UNIDATA -#endif - -#ifdef HAVE_CHARSET_ucs2 -#define HAVE_UNIDATA -#endif - -#ifdef HAVE_CHARSET_utf16 -#define HAVE_UNIDATA -#endif - -#ifdef HAVE_CHARSET_utf32 -#define HAVE_UNIDATA -#endif - -#ifdef HAVE_UNIDATA - -#include "my_uctype.h" - -static MY_UNICASE_INFO plane00[]={ - {0x0000,0x0000,0x0000}, {0x0001,0x0001,0x0001}, - {0x0002,0x0002,0x0002}, {0x0003,0x0003,0x0003}, - {0x0004,0x0004,0x0004}, {0x0005,0x0005,0x0005}, - {0x0006,0x0006,0x0006}, {0x0007,0x0007,0x0007}, - {0x0008,0x0008,0x0008}, {0x0009,0x0009,0x0009}, - {0x000A,0x000A,0x000A}, {0x000B,0x000B,0x000B}, - {0x000C,0x000C,0x000C}, {0x000D,0x000D,0x000D}, - {0x000E,0x000E,0x000E}, {0x000F,0x000F,0x000F}, - {0x0010,0x0010,0x0010}, {0x0011,0x0011,0x0011}, - {0x0012,0x0012,0x0012}, {0x0013,0x0013,0x0013}, - {0x0014,0x0014,0x0014}, {0x0015,0x0015,0x0015}, - {0x0016,0x0016,0x0016}, {0x0017,0x0017,0x0017}, - {0x0018,0x0018,0x0018}, {0x0019,0x0019,0x0019}, - {0x001A,0x001A,0x001A}, {0x001B,0x001B,0x001B}, - {0x001C,0x001C,0x001C}, {0x001D,0x001D,0x001D}, - {0x001E,0x001E,0x001E}, {0x001F,0x001F,0x001F}, - {0x0020,0x0020,0x0020}, {0x0021,0x0021,0x0021}, - {0x0022,0x0022,0x0022}, {0x0023,0x0023,0x0023}, - {0x0024,0x0024,0x0024}, {0x0025,0x0025,0x0025}, - {0x0026,0x0026,0x0026}, {0x0027,0x0027,0x0027}, - {0x0028,0x0028,0x0028}, {0x0029,0x0029,0x0029}, - {0x002A,0x002A,0x002A}, {0x002B,0x002B,0x002B}, - {0x002C,0x002C,0x002C}, {0x002D,0x002D,0x002D}, - {0x002E,0x002E,0x002E}, {0x002F,0x002F,0x002F}, - {0x0030,0x0030,0x0030}, {0x0031,0x0031,0x0031}, - {0x0032,0x0032,0x0032}, {0x0033,0x0033,0x0033}, - {0x0034,0x0034,0x0034}, {0x0035,0x0035,0x0035}, - {0x0036,0x0036,0x0036}, {0x0037,0x0037,0x0037}, - {0x0038,0x0038,0x0038}, {0x0039,0x0039,0x0039}, - {0x003A,0x003A,0x003A}, {0x003B,0x003B,0x003B}, - {0x003C,0x003C,0x003C}, {0x003D,0x003D,0x003D}, - {0x003E,0x003E,0x003E}, {0x003F,0x003F,0x003F}, - {0x0040,0x0040,0x0040}, {0x0041,0x0061,0x0041}, - {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043}, - {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045}, - {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047}, - {0x0048,0x0068,0x0048}, {0x0049,0x0069,0x0049}, - {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B}, - {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D}, - {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F}, - {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051}, - {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053}, - {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055}, - {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057}, - {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059}, - {0x005A,0x007A,0x005A}, {0x005B,0x005B,0x005B}, - {0x005C,0x005C,0x005C}, {0x005D,0x005D,0x005D}, - {0x005E,0x005E,0x005E}, {0x005F,0x005F,0x005F}, - {0x0060,0x0060,0x0060}, {0x0041,0x0061,0x0041}, - {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043}, - {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045}, - {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047}, - {0x0048,0x0068,0x0048}, {0x0049,0x0069,0x0049}, - {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B}, - {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D}, - {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F}, - {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051}, - {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053}, - {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055}, - {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057}, - {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059}, - {0x005A,0x007A,0x005A}, {0x007B,0x007B,0x007B}, - {0x007C,0x007C,0x007C}, {0x007D,0x007D,0x007D}, - {0x007E,0x007E,0x007E}, {0x007F,0x007F,0x007F}, - {0x0080,0x0080,0x0080}, {0x0081,0x0081,0x0081}, - {0x0082,0x0082,0x0082}, {0x0083,0x0083,0x0083}, - {0x0084,0x0084,0x0084}, {0x0085,0x0085,0x0085}, - {0x0086,0x0086,0x0086}, {0x0087,0x0087,0x0087}, - {0x0088,0x0088,0x0088}, {0x0089,0x0089,0x0089}, - {0x008A,0x008A,0x008A}, {0x008B,0x008B,0x008B}, - {0x008C,0x008C,0x008C}, {0x008D,0x008D,0x008D}, - {0x008E,0x008E,0x008E}, {0x008F,0x008F,0x008F}, - {0x0090,0x0090,0x0090}, {0x0091,0x0091,0x0091}, - {0x0092,0x0092,0x0092}, {0x0093,0x0093,0x0093}, - {0x0094,0x0094,0x0094}, {0x0095,0x0095,0x0095}, - {0x0096,0x0096,0x0096}, {0x0097,0x0097,0x0097}, - {0x0098,0x0098,0x0098}, {0x0099,0x0099,0x0099}, - {0x009A,0x009A,0x009A}, {0x009B,0x009B,0x009B}, - {0x009C,0x009C,0x009C}, {0x009D,0x009D,0x009D}, - {0x009E,0x009E,0x009E}, {0x009F,0x009F,0x009F}, - {0x00A0,0x00A0,0x00A0}, {0x00A1,0x00A1,0x00A1}, - {0x00A2,0x00A2,0x00A2}, {0x00A3,0x00A3,0x00A3}, - {0x00A4,0x00A4,0x00A4}, {0x00A5,0x00A5,0x00A5}, - {0x00A6,0x00A6,0x00A6}, {0x00A7,0x00A7,0x00A7}, - {0x00A8,0x00A8,0x00A8}, {0x00A9,0x00A9,0x00A9}, - {0x00AA,0x00AA,0x00AA}, {0x00AB,0x00AB,0x00AB}, - {0x00AC,0x00AC,0x00AC}, {0x00AD,0x00AD,0x00AD}, - {0x00AE,0x00AE,0x00AE}, {0x00AF,0x00AF,0x00AF}, - {0x00B0,0x00B0,0x00B0}, {0x00B1,0x00B1,0x00B1}, - {0x00B2,0x00B2,0x00B2}, {0x00B3,0x00B3,0x00B3}, - {0x00B4,0x00B4,0x00B4}, {0x039C,0x00B5,0x039C}, - {0x00B6,0x00B6,0x00B6}, {0x00B7,0x00B7,0x00B7}, - {0x00B8,0x00B8,0x00B8}, {0x00B9,0x00B9,0x00B9}, - {0x00BA,0x00BA,0x00BA}, {0x00BB,0x00BB,0x00BB}, - {0x00BC,0x00BC,0x00BC}, {0x00BD,0x00BD,0x00BD}, - {0x00BE,0x00BE,0x00BE}, {0x00BF,0x00BF,0x00BF}, - {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041}, - {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041}, - {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041}, - {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043}, - {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045}, - {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045}, - {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049}, - {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049}, - {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E}, - {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F}, - {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F}, - {0x00D6,0x00F6,0x004F}, {0x00D7,0x00D7,0x00D7}, - {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055}, - {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055}, - {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059}, - {0x00DE,0x00FE,0x00DE}, {0x00DF,0x00DF,0x0053}, - {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041}, - {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041}, - {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041}, - {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043}, - {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045}, - {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045}, - {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049}, - {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049}, - {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E}, - {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F}, - {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F}, - {0x00D6,0x00F6,0x004F}, {0x00F7,0x00F7,0x00F7}, - {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055}, - {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055}, - {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059}, - {0x00DE,0x00FE,0x00DE}, {0x0178,0x00FF,0x0059} -}; - - - -static MY_UNICASE_INFO plane01[]={ - {0x0100,0x0101,0x0041}, {0x0100,0x0101,0x0041}, - {0x0102,0x0103,0x0041}, {0x0102,0x0103,0x0041}, - {0x0104,0x0105,0x0041}, {0x0104,0x0105,0x0041}, - {0x0106,0x0107,0x0043}, {0x0106,0x0107,0x0043}, - {0x0108,0x0109,0x0043}, {0x0108,0x0109,0x0043}, - {0x010A,0x010B,0x0043}, {0x010A,0x010B,0x0043}, - {0x010C,0x010D,0x0043}, {0x010C,0x010D,0x0043}, - {0x010E,0x010F,0x0044}, {0x010E,0x010F,0x0044}, - {0x0110,0x0111,0x0110}, {0x0110,0x0111,0x0110}, - {0x0112,0x0113,0x0045}, {0x0112,0x0113,0x0045}, - {0x0114,0x0115,0x0045}, {0x0114,0x0115,0x0045}, - {0x0116,0x0117,0x0045}, {0x0116,0x0117,0x0045}, - {0x0118,0x0119,0x0045}, {0x0118,0x0119,0x0045}, - {0x011A,0x011B,0x0045}, {0x011A,0x011B,0x0045}, - {0x011C,0x011D,0x0047}, {0x011C,0x011D,0x0047}, - {0x011E,0x011F,0x0047}, {0x011E,0x011F,0x0047}, - {0x0120,0x0121,0x0047}, {0x0120,0x0121,0x0047}, - {0x0122,0x0123,0x0047}, {0x0122,0x0123,0x0047}, - {0x0124,0x0125,0x0048}, {0x0124,0x0125,0x0048}, - {0x0126,0x0127,0x0126}, {0x0126,0x0127,0x0126}, - {0x0128,0x0129,0x0049}, {0x0128,0x0129,0x0049}, - {0x012A,0x012B,0x0049}, {0x012A,0x012B,0x0049}, - {0x012C,0x012D,0x0049}, {0x012C,0x012D,0x0049}, - {0x012E,0x012F,0x0049}, {0x012E,0x012F,0x0049}, - {0x0130,0x0069,0x0049}, {0x0049,0x0131,0x0049}, - {0x0132,0x0133,0x0132}, {0x0132,0x0133,0x0132}, - {0x0134,0x0135,0x004A}, {0x0134,0x0135,0x004A}, - {0x0136,0x0137,0x004B}, {0x0136,0x0137,0x004B}, - {0x0138,0x0138,0x0138}, {0x0139,0x013A,0x004C}, - {0x0139,0x013A,0x004C}, {0x013B,0x013C,0x004C}, - {0x013B,0x013C,0x004C}, {0x013D,0x013E,0x004C}, - {0x013D,0x013E,0x004C}, {0x013F,0x0140,0x013F}, - {0x013F,0x0140,0x013F}, {0x0141,0x0142,0x0141}, - {0x0141,0x0142,0x0141}, {0x0143,0x0144,0x004E}, - {0x0143,0x0144,0x004E}, {0x0145,0x0146,0x004E}, - {0x0145,0x0146,0x004E}, {0x0147,0x0148,0x004E}, - {0x0147,0x0148,0x004E}, {0x0149,0x0149,0x0149}, - {0x014A,0x014B,0x014A}, {0x014A,0x014B,0x014A}, - {0x014C,0x014D,0x004F}, {0x014C,0x014D,0x004F}, - {0x014E,0x014F,0x004F}, {0x014E,0x014F,0x004F}, - {0x0150,0x0151,0x004F}, {0x0150,0x0151,0x004F}, - {0x0152,0x0153,0x0152}, {0x0152,0x0153,0x0152}, - {0x0154,0x0155,0x0052}, {0x0154,0x0155,0x0052}, - {0x0156,0x0157,0x0052}, {0x0156,0x0157,0x0052}, - {0x0158,0x0159,0x0052}, {0x0158,0x0159,0x0052}, - {0x015A,0x015B,0x0053}, {0x015A,0x015B,0x0053}, - {0x015C,0x015D,0x0053}, {0x015C,0x015D,0x0053}, - {0x015E,0x015F,0x0053}, {0x015E,0x015F,0x0053}, - {0x0160,0x0161,0x0053}, {0x0160,0x0161,0x0053}, - {0x0162,0x0163,0x0054}, {0x0162,0x0163,0x0054}, - {0x0164,0x0165,0x0054}, {0x0164,0x0165,0x0054}, - {0x0166,0x0167,0x0166}, {0x0166,0x0167,0x0166}, - {0x0168,0x0169,0x0055}, {0x0168,0x0169,0x0055}, - {0x016A,0x016B,0x0055}, {0x016A,0x016B,0x0055}, - {0x016C,0x016D,0x0055}, {0x016C,0x016D,0x0055}, - {0x016E,0x016F,0x0055}, {0x016E,0x016F,0x0055}, - {0x0170,0x0171,0x0055}, {0x0170,0x0171,0x0055}, - {0x0172,0x0173,0x0055}, {0x0172,0x0173,0x0055}, - {0x0174,0x0175,0x0057}, {0x0174,0x0175,0x0057}, - {0x0176,0x0177,0x0059}, {0x0176,0x0177,0x0059}, - {0x0178,0x00FF,0x0059}, {0x0179,0x017A,0x005A}, - {0x0179,0x017A,0x005A}, {0x017B,0x017C,0x005A}, - {0x017B,0x017C,0x005A}, {0x017D,0x017E,0x005A}, - {0x017D,0x017E,0x005A}, {0x0053,0x017F,0x0053}, - {0x0180,0x0180,0x0180}, {0x0181,0x0253,0x0181}, - {0x0182,0x0183,0x0182}, {0x0182,0x0183,0x0182}, - {0x0184,0x0185,0x0184}, {0x0184,0x0185,0x0184}, - {0x0186,0x0254,0x0186}, {0x0187,0x0188,0x0187}, - {0x0187,0x0188,0x0187}, {0x0189,0x0256,0x0189}, - {0x018A,0x0257,0x018A}, {0x018B,0x018C,0x018B}, - {0x018B,0x018C,0x018B}, {0x018D,0x018D,0x018D}, - {0x018E,0x01DD,0x018E}, {0x018F,0x0259,0x018F}, - {0x0190,0x025B,0x0190}, {0x0191,0x0192,0x0191}, - {0x0191,0x0192,0x0191}, {0x0193,0x0260,0x0193}, - {0x0194,0x0263,0x0194}, {0x01F6,0x0195,0x01F6}, - {0x0196,0x0269,0x0196}, {0x0197,0x0268,0x0197}, - {0x0198,0x0199,0x0198}, {0x0198,0x0199,0x0198}, - {0x019A,0x019A,0x019A}, {0x019B,0x019B,0x019B}, - {0x019C,0x026F,0x019C}, {0x019D,0x0272,0x019D}, - {0x019E,0x019E,0x019E}, {0x019F,0x0275,0x019F}, - {0x01A0,0x01A1,0x004F}, {0x01A0,0x01A1,0x004F}, - {0x01A2,0x01A3,0x01A2}, {0x01A2,0x01A3,0x01A2}, - {0x01A4,0x01A5,0x01A4}, {0x01A4,0x01A5,0x01A4}, - {0x01A6,0x0280,0x01A6}, {0x01A7,0x01A8,0x01A7}, - {0x01A7,0x01A8,0x01A7}, {0x01A9,0x0283,0x01A9}, - {0x01AA,0x01AA,0x01AA}, {0x01AB,0x01AB,0x01AB}, - {0x01AC,0x01AD,0x01AC}, {0x01AC,0x01AD,0x01AC}, - {0x01AE,0x0288,0x01AE}, {0x01AF,0x01B0,0x0055}, - {0x01AF,0x01B0,0x0055}, {0x01B1,0x028A,0x01B1}, - {0x01B2,0x028B,0x01B2}, {0x01B3,0x01B4,0x01B3}, - {0x01B3,0x01B4,0x01B3}, {0x01B5,0x01B6,0x01B5}, - {0x01B5,0x01B6,0x01B5}, {0x01B7,0x0292,0x01B7}, - {0x01B8,0x01B9,0x01B8}, {0x01B8,0x01B9,0x01B8}, - {0x01BA,0x01BA,0x01BA}, {0x01BB,0x01BB,0x01BB}, - {0x01BC,0x01BD,0x01BC}, {0x01BC,0x01BD,0x01BC}, - {0x01BE,0x01BE,0x01BE}, {0x01F7,0x01BF,0x01F7}, - {0x01C0,0x01C0,0x01C0}, {0x01C1,0x01C1,0x01C1}, - {0x01C2,0x01C2,0x01C2}, {0x01C3,0x01C3,0x01C3}, - {0x01C4,0x01C6,0x01C4}, {0x01C4,0x01C6,0x01C4}, - {0x01C4,0x01C6,0x01C4}, {0x01C7,0x01C9,0x01C7}, - {0x01C7,0x01C9,0x01C7}, {0x01C7,0x01C9,0x01C7}, - {0x01CA,0x01CC,0x01CA}, {0x01CA,0x01CC,0x01CA}, - {0x01CA,0x01CC,0x01CA}, {0x01CD,0x01CE,0x0041}, - {0x01CD,0x01CE,0x0041}, {0x01CF,0x01D0,0x0049}, - {0x01CF,0x01D0,0x0049}, {0x01D1,0x01D2,0x004F}, - {0x01D1,0x01D2,0x004F}, {0x01D3,0x01D4,0x0055}, - {0x01D3,0x01D4,0x0055}, {0x01D5,0x01D6,0x0055}, - {0x01D5,0x01D6,0x0055}, {0x01D7,0x01D8,0x0055}, - {0x01D7,0x01D8,0x0055}, {0x01D9,0x01DA,0x0055}, - {0x01D9,0x01DA,0x0055}, {0x01DB,0x01DC,0x0055}, - {0x01DB,0x01DC,0x0055}, {0x018E,0x01DD,0x018E}, - {0x01DE,0x01DF,0x0041}, {0x01DE,0x01DF,0x0041}, - {0x01E0,0x01E1,0x0041}, {0x01E0,0x01E1,0x0041}, - {0x01E2,0x01E3,0x00C6}, {0x01E2,0x01E3,0x00C6}, - {0x01E4,0x01E5,0x01E4}, {0x01E4,0x01E5,0x01E4}, - {0x01E6,0x01E7,0x0047}, {0x01E6,0x01E7,0x0047}, - {0x01E8,0x01E9,0x004B}, {0x01E8,0x01E9,0x004B}, - {0x01EA,0x01EB,0x004F}, {0x01EA,0x01EB,0x004F}, - {0x01EC,0x01ED,0x004F}, {0x01EC,0x01ED,0x004F}, - {0x01EE,0x01EF,0x01B7}, {0x01EE,0x01EF,0x01B7}, - {0x01F0,0x01F0,0x004A}, {0x01F1,0x01F3,0x01F1}, - {0x01F1,0x01F3,0x01F1}, {0x01F1,0x01F3,0x01F1}, - {0x01F4,0x01F5,0x0047}, {0x01F4,0x01F5,0x0047}, - {0x01F6,0x0195,0x01F6}, {0x01F7,0x01BF,0x01F7}, - {0x01F8,0x01F9,0x004E}, {0x01F8,0x01F9,0x004E}, - {0x01FA,0x01FB,0x0041}, {0x01FA,0x01FB,0x0041}, - {0x01FC,0x01FD,0x00C6}, {0x01FC,0x01FD,0x00C6}, - {0x01FE,0x01FF,0x00D8}, {0x01FE,0x01FF,0x00D8} -}; - -static MY_UNICASE_INFO plane02[]={ - {0x0200,0x0201,0x0041}, {0x0200,0x0201,0x0041}, - {0x0202,0x0203,0x0041}, {0x0202,0x0203,0x0041}, - {0x0204,0x0205,0x0045}, {0x0204,0x0205,0x0045}, - {0x0206,0x0207,0x0045}, {0x0206,0x0207,0x0045}, - {0x0208,0x0209,0x0049}, {0x0208,0x0209,0x0049}, - {0x020A,0x020B,0x0049}, {0x020A,0x020B,0x0049}, - {0x020C,0x020D,0x004F}, {0x020C,0x020D,0x004F}, - {0x020E,0x020F,0x004F}, {0x020E,0x020F,0x004F}, - {0x0210,0x0211,0x0052}, {0x0210,0x0211,0x0052}, - {0x0212,0x0213,0x0052}, {0x0212,0x0213,0x0052}, - {0x0214,0x0215,0x0055}, {0x0214,0x0215,0x0055}, - {0x0216,0x0217,0x0055}, {0x0216,0x0217,0x0055}, - {0x0218,0x0219,0x0053}, {0x0218,0x0219,0x0053}, - {0x021A,0x021B,0x0054}, {0x021A,0x021B,0x0054}, - {0x021C,0x021D,0x021C}, {0x021C,0x021D,0x021C}, - {0x021E,0x021F,0x0048}, {0x021E,0x021F,0x0048}, - {0x0220,0x0220,0x0220}, {0x0221,0x0221,0x0221}, - {0x0222,0x0223,0x0222}, {0x0222,0x0223,0x0222}, - {0x0224,0x0225,0x0224}, {0x0224,0x0225,0x0224}, - {0x0226,0x0227,0x0041}, {0x0226,0x0227,0x0041}, - {0x0228,0x0229,0x0045}, {0x0228,0x0229,0x0045}, - {0x022A,0x022B,0x004F}, {0x022A,0x022B,0x004F}, - {0x022C,0x022D,0x004F}, {0x022C,0x022D,0x004F}, - {0x022E,0x022F,0x004F}, {0x022E,0x022F,0x004F}, - {0x0230,0x0231,0x004F}, {0x0230,0x0231,0x004F}, - {0x0232,0x0233,0x0059}, {0x0232,0x0233,0x0059}, - {0x0234,0x0234,0x0234}, {0x0235,0x0235,0x0235}, - {0x0236,0x0236,0x0236}, {0x0237,0x0237,0x0237}, - {0x0238,0x0238,0x0238}, {0x0239,0x0239,0x0239}, - {0x023A,0x023A,0x023A}, {0x023B,0x023B,0x023B}, - {0x023C,0x023C,0x023C}, {0x023D,0x023D,0x023D}, - {0x023E,0x023E,0x023E}, {0x023F,0x023F,0x023F}, - {0x0240,0x0240,0x0240}, {0x0241,0x0241,0x0241}, - {0x0242,0x0242,0x0242}, {0x0243,0x0243,0x0243}, - {0x0244,0x0244,0x0244}, {0x0245,0x0245,0x0245}, - {0x0246,0x0246,0x0246}, {0x0247,0x0247,0x0247}, - {0x0248,0x0248,0x0248}, {0x0249,0x0249,0x0249}, - {0x024A,0x024A,0x024A}, {0x024B,0x024B,0x024B}, - {0x024C,0x024C,0x024C}, {0x024D,0x024D,0x024D}, - {0x024E,0x024E,0x024E}, {0x024F,0x024F,0x024F}, - {0x0250,0x0250,0x0250}, {0x0251,0x0251,0x0251}, - {0x0252,0x0252,0x0252}, {0x0181,0x0253,0x0181}, - {0x0186,0x0254,0x0186}, {0x0255,0x0255,0x0255}, - {0x0189,0x0256,0x0189}, {0x018A,0x0257,0x018A}, - {0x0258,0x0258,0x0258}, {0x018F,0x0259,0x018F}, - {0x025A,0x025A,0x025A}, {0x0190,0x025B,0x0190}, - {0x025C,0x025C,0x025C}, {0x025D,0x025D,0x025D}, - {0x025E,0x025E,0x025E}, {0x025F,0x025F,0x025F}, - {0x0193,0x0260,0x0193}, {0x0261,0x0261,0x0261}, - {0x0262,0x0262,0x0262}, {0x0194,0x0263,0x0194}, - {0x0264,0x0264,0x0264}, {0x0265,0x0265,0x0265}, - {0x0266,0x0266,0x0266}, {0x0267,0x0267,0x0267}, - {0x0197,0x0268,0x0197}, {0x0196,0x0269,0x0196}, - {0x026A,0x026A,0x026A}, {0x026B,0x026B,0x026B}, - {0x026C,0x026C,0x026C}, {0x026D,0x026D,0x026D}, - {0x026E,0x026E,0x026E}, {0x019C,0x026F,0x019C}, - {0x0270,0x0270,0x0270}, {0x0271,0x0271,0x0271}, - {0x019D,0x0272,0x019D}, {0x0273,0x0273,0x0273}, - {0x0274,0x0274,0x0274}, {0x019F,0x0275,0x019F}, - {0x0276,0x0276,0x0276}, {0x0277,0x0277,0x0277}, - {0x0278,0x0278,0x0278}, {0x0279,0x0279,0x0279}, - {0x027A,0x027A,0x027A}, {0x027B,0x027B,0x027B}, - {0x027C,0x027C,0x027C}, {0x027D,0x027D,0x027D}, - {0x027E,0x027E,0x027E}, {0x027F,0x027F,0x027F}, - {0x01A6,0x0280,0x01A6}, {0x0281,0x0281,0x0281}, - {0x0282,0x0282,0x0282}, {0x01A9,0x0283,0x01A9}, - {0x0284,0x0284,0x0284}, {0x0285,0x0285,0x0285}, - {0x0286,0x0286,0x0286}, {0x0287,0x0287,0x0287}, - {0x01AE,0x0288,0x01AE}, {0x0289,0x0289,0x0289}, - {0x01B1,0x028A,0x01B1}, {0x01B2,0x028B,0x01B2}, - {0x028C,0x028C,0x028C}, {0x028D,0x028D,0x028D}, - {0x028E,0x028E,0x028E}, {0x028F,0x028F,0x028F}, - {0x0290,0x0290,0x0290}, {0x0291,0x0291,0x0291}, - {0x01B7,0x0292,0x01B7}, {0x0293,0x0293,0x0293}, - {0x0294,0x0294,0x0294}, {0x0295,0x0295,0x0295}, - {0x0296,0x0296,0x0296}, {0x0297,0x0297,0x0297}, - {0x0298,0x0298,0x0298}, {0x0299,0x0299,0x0299}, - {0x029A,0x029A,0x029A}, {0x029B,0x029B,0x029B}, - {0x029C,0x029C,0x029C}, {0x029D,0x029D,0x029D}, - {0x029E,0x029E,0x029E}, {0x029F,0x029F,0x029F}, - {0x02A0,0x02A0,0x02A0}, {0x02A1,0x02A1,0x02A1}, - {0x02A2,0x02A2,0x02A2}, {0x02A3,0x02A3,0x02A3}, - {0x02A4,0x02A4,0x02A4}, {0x02A5,0x02A5,0x02A5}, - {0x02A6,0x02A6,0x02A6}, {0x02A7,0x02A7,0x02A7}, - {0x02A8,0x02A8,0x02A8}, {0x02A9,0x02A9,0x02A9}, - {0x02AA,0x02AA,0x02AA}, {0x02AB,0x02AB,0x02AB}, - {0x02AC,0x02AC,0x02AC}, {0x02AD,0x02AD,0x02AD}, - {0x02AE,0x02AE,0x02AE}, {0x02AF,0x02AF,0x02AF}, - {0x02B0,0x02B0,0x02B0}, {0x02B1,0x02B1,0x02B1}, - {0x02B2,0x02B2,0x02B2}, {0x02B3,0x02B3,0x02B3}, - {0x02B4,0x02B4,0x02B4}, {0x02B5,0x02B5,0x02B5}, - {0x02B6,0x02B6,0x02B6}, {0x02B7,0x02B7,0x02B7}, - {0x02B8,0x02B8,0x02B8}, {0x02B9,0x02B9,0x02B9}, - {0x02BA,0x02BA,0x02BA}, {0x02BB,0x02BB,0x02BB}, - {0x02BC,0x02BC,0x02BC}, {0x02BD,0x02BD,0x02BD}, - {0x02BE,0x02BE,0x02BE}, {0x02BF,0x02BF,0x02BF}, - {0x02C0,0x02C0,0x02C0}, {0x02C1,0x02C1,0x02C1}, - {0x02C2,0x02C2,0x02C2}, {0x02C3,0x02C3,0x02C3}, - {0x02C4,0x02C4,0x02C4}, {0x02C5,0x02C5,0x02C5}, - {0x02C6,0x02C6,0x02C6}, {0x02C7,0x02C7,0x02C7}, - {0x02C8,0x02C8,0x02C8}, {0x02C9,0x02C9,0x02C9}, - {0x02CA,0x02CA,0x02CA}, {0x02CB,0x02CB,0x02CB}, - {0x02CC,0x02CC,0x02CC}, {0x02CD,0x02CD,0x02CD}, - {0x02CE,0x02CE,0x02CE}, {0x02CF,0x02CF,0x02CF}, - {0x02D0,0x02D0,0x02D0}, {0x02D1,0x02D1,0x02D1}, - {0x02D2,0x02D2,0x02D2}, {0x02D3,0x02D3,0x02D3}, - {0x02D4,0x02D4,0x02D4}, {0x02D5,0x02D5,0x02D5}, - {0x02D6,0x02D6,0x02D6}, {0x02D7,0x02D7,0x02D7}, - {0x02D8,0x02D8,0x02D8}, {0x02D9,0x02D9,0x02D9}, - {0x02DA,0x02DA,0x02DA}, {0x02DB,0x02DB,0x02DB}, - {0x02DC,0x02DC,0x02DC}, {0x02DD,0x02DD,0x02DD}, - {0x02DE,0x02DE,0x02DE}, {0x02DF,0x02DF,0x02DF}, - {0x02E0,0x02E0,0x02E0}, {0x02E1,0x02E1,0x02E1}, - {0x02E2,0x02E2,0x02E2}, {0x02E3,0x02E3,0x02E3}, - {0x02E4,0x02E4,0x02E4}, {0x02E5,0x02E5,0x02E5}, - {0x02E6,0x02E6,0x02E6}, {0x02E7,0x02E7,0x02E7}, - {0x02E8,0x02E8,0x02E8}, {0x02E9,0x02E9,0x02E9}, - {0x02EA,0x02EA,0x02EA}, {0x02EB,0x02EB,0x02EB}, - {0x02EC,0x02EC,0x02EC}, {0x02ED,0x02ED,0x02ED}, - {0x02EE,0x02EE,0x02EE}, {0x02EF,0x02EF,0x02EF}, - {0x02F0,0x02F0,0x02F0}, {0x02F1,0x02F1,0x02F1}, - {0x02F2,0x02F2,0x02F2}, {0x02F3,0x02F3,0x02F3}, - {0x02F4,0x02F4,0x02F4}, {0x02F5,0x02F5,0x02F5}, - {0x02F6,0x02F6,0x02F6}, {0x02F7,0x02F7,0x02F7}, - {0x02F8,0x02F8,0x02F8}, {0x02F9,0x02F9,0x02F9}, - {0x02FA,0x02FA,0x02FA}, {0x02FB,0x02FB,0x02FB}, - {0x02FC,0x02FC,0x02FC}, {0x02FD,0x02FD,0x02FD}, - {0x02FE,0x02FE,0x02FE}, {0x02FF,0x02FF,0x02FF} -}; - -static MY_UNICASE_INFO plane03[]={ - {0x0300,0x0300,0x0300}, {0x0301,0x0301,0x0301}, - {0x0302,0x0302,0x0302}, {0x0303,0x0303,0x0303}, - {0x0304,0x0304,0x0304}, {0x0305,0x0305,0x0305}, - {0x0306,0x0306,0x0306}, {0x0307,0x0307,0x0307}, - {0x0308,0x0308,0x0308}, {0x0309,0x0309,0x0309}, - {0x030A,0x030A,0x030A}, {0x030B,0x030B,0x030B}, - {0x030C,0x030C,0x030C}, {0x030D,0x030D,0x030D}, - {0x030E,0x030E,0x030E}, {0x030F,0x030F,0x030F}, - {0x0310,0x0310,0x0310}, {0x0311,0x0311,0x0311}, - {0x0312,0x0312,0x0312}, {0x0313,0x0313,0x0313}, - {0x0314,0x0314,0x0314}, {0x0315,0x0315,0x0315}, - {0x0316,0x0316,0x0316}, {0x0317,0x0317,0x0317}, - {0x0318,0x0318,0x0318}, {0x0319,0x0319,0x0319}, - {0x031A,0x031A,0x031A}, {0x031B,0x031B,0x031B}, - {0x031C,0x031C,0x031C}, {0x031D,0x031D,0x031D}, - {0x031E,0x031E,0x031E}, {0x031F,0x031F,0x031F}, - {0x0320,0x0320,0x0320}, {0x0321,0x0321,0x0321}, - {0x0322,0x0322,0x0322}, {0x0323,0x0323,0x0323}, - {0x0324,0x0324,0x0324}, {0x0325,0x0325,0x0325}, - {0x0326,0x0326,0x0326}, {0x0327,0x0327,0x0327}, - {0x0328,0x0328,0x0328}, {0x0329,0x0329,0x0329}, - {0x032A,0x032A,0x032A}, {0x032B,0x032B,0x032B}, - {0x032C,0x032C,0x032C}, {0x032D,0x032D,0x032D}, - {0x032E,0x032E,0x032E}, {0x032F,0x032F,0x032F}, - {0x0330,0x0330,0x0330}, {0x0331,0x0331,0x0331}, - {0x0332,0x0332,0x0332}, {0x0333,0x0333,0x0333}, - {0x0334,0x0334,0x0334}, {0x0335,0x0335,0x0335}, - {0x0336,0x0336,0x0336}, {0x0337,0x0337,0x0337}, - {0x0338,0x0338,0x0338}, {0x0339,0x0339,0x0339}, - {0x033A,0x033A,0x033A}, {0x033B,0x033B,0x033B}, - {0x033C,0x033C,0x033C}, {0x033D,0x033D,0x033D}, - {0x033E,0x033E,0x033E}, {0x033F,0x033F,0x033F}, - {0x0340,0x0340,0x0340}, {0x0341,0x0341,0x0341}, - {0x0342,0x0342,0x0342}, {0x0343,0x0343,0x0343}, - {0x0344,0x0344,0x0344}, {0x0399,0x0345,0x0399}, - {0x0346,0x0346,0x0346}, {0x0347,0x0347,0x0347}, - {0x0348,0x0348,0x0348}, {0x0349,0x0349,0x0349}, - {0x034A,0x034A,0x034A}, {0x034B,0x034B,0x034B}, - {0x034C,0x034C,0x034C}, {0x034D,0x034D,0x034D}, - {0x034E,0x034E,0x034E}, {0x034F,0x034F,0x034F}, - {0x0350,0x0350,0x0350}, {0x0351,0x0351,0x0351}, - {0x0352,0x0352,0x0352}, {0x0353,0x0353,0x0353}, - {0x0354,0x0354,0x0354}, {0x0355,0x0355,0x0355}, - {0x0356,0x0356,0x0356}, {0x0357,0x0357,0x0357}, - {0x0358,0x0358,0x0358}, {0x0359,0x0359,0x0359}, - {0x035A,0x035A,0x035A}, {0x035B,0x035B,0x035B}, - {0x035C,0x035C,0x035C}, {0x035D,0x035D,0x035D}, - {0x035E,0x035E,0x035E}, {0x035F,0x035F,0x035F}, - {0x0360,0x0360,0x0360}, {0x0361,0x0361,0x0361}, - {0x0362,0x0362,0x0362}, {0x0363,0x0363,0x0363}, - {0x0364,0x0364,0x0364}, {0x0365,0x0365,0x0365}, - {0x0366,0x0366,0x0366}, {0x0367,0x0367,0x0367}, - {0x0368,0x0368,0x0368}, {0x0369,0x0369,0x0369}, - {0x036A,0x036A,0x036A}, {0x036B,0x036B,0x036B}, - {0x036C,0x036C,0x036C}, {0x036D,0x036D,0x036D}, - {0x036E,0x036E,0x036E}, {0x036F,0x036F,0x036F}, - {0x0370,0x0370,0x0370}, {0x0371,0x0371,0x0371}, - {0x0372,0x0372,0x0372}, {0x0373,0x0373,0x0373}, - {0x0374,0x0374,0x0374}, {0x0375,0x0375,0x0375}, - {0x0376,0x0376,0x0376}, {0x0377,0x0377,0x0377}, - {0x0378,0x0378,0x0378}, {0x0379,0x0379,0x0379}, - {0x037A,0x037A,0x037A}, {0x037B,0x037B,0x037B}, - {0x037C,0x037C,0x037C}, {0x037D,0x037D,0x037D}, - {0x037E,0x037E,0x037E}, {0x037F,0x037F,0x037F}, - {0x0380,0x0380,0x0380}, {0x0381,0x0381,0x0381}, - {0x0382,0x0382,0x0382}, {0x0383,0x0383,0x0383}, - {0x0384,0x0384,0x0384}, {0x0385,0x0385,0x0385}, - {0x0386,0x03AC,0x0391}, {0x0387,0x0387,0x0387}, - {0x0388,0x03AD,0x0395}, {0x0389,0x03AE,0x0397}, - {0x038A,0x03AF,0x0399}, {0x038B,0x038B,0x038B}, - {0x038C,0x03CC,0x039F}, {0x038D,0x038D,0x038D}, - {0x038E,0x03CD,0x03A5}, {0x038F,0x03CE,0x03A9}, - {0x0390,0x0390,0x0399}, {0x0391,0x03B1,0x0391}, - {0x0392,0x03B2,0x0392}, {0x0393,0x03B3,0x0393}, - {0x0394,0x03B4,0x0394}, {0x0395,0x03B5,0x0395}, - {0x0396,0x03B6,0x0396}, {0x0397,0x03B7,0x0397}, - {0x0398,0x03B8,0x0398}, {0x0399,0x03B9,0x0399}, - {0x039A,0x03BA,0x039A}, {0x039B,0x03BB,0x039B}, - {0x039C,0x03BC,0x039C}, {0x039D,0x03BD,0x039D}, - {0x039E,0x03BE,0x039E}, {0x039F,0x03BF,0x039F}, - {0x03A0,0x03C0,0x03A0}, {0x03A1,0x03C1,0x03A1}, - {0x03A2,0x03A2,0x03A2}, {0x03A3,0x03C3,0x03A3}, - {0x03A4,0x03C4,0x03A4}, {0x03A5,0x03C5,0x03A5}, - {0x03A6,0x03C6,0x03A6}, {0x03A7,0x03C7,0x03A7}, - {0x03A8,0x03C8,0x03A8}, {0x03A9,0x03C9,0x03A9}, - {0x03AA,0x03CA,0x0399}, {0x03AB,0x03CB,0x03A5}, - {0x0386,0x03AC,0x0391}, {0x0388,0x03AD,0x0395}, - {0x0389,0x03AE,0x0397}, {0x038A,0x03AF,0x0399}, - {0x03B0,0x03B0,0x03A5}, {0x0391,0x03B1,0x0391}, - {0x0392,0x03B2,0x0392}, {0x0393,0x03B3,0x0393}, - {0x0394,0x03B4,0x0394}, {0x0395,0x03B5,0x0395}, - {0x0396,0x03B6,0x0396}, {0x0397,0x03B7,0x0397}, - {0x0398,0x03B8,0x0398}, {0x0399,0x03B9,0x0399}, - {0x039A,0x03BA,0x039A}, {0x039B,0x03BB,0x039B}, - {0x039C,0x03BC,0x039C}, {0x039D,0x03BD,0x039D}, - {0x039E,0x03BE,0x039E}, {0x039F,0x03BF,0x039F}, - {0x03A0,0x03C0,0x03A0}, {0x03A1,0x03C1,0x03A1}, - {0x03A3,0x03C2,0x03A3}, {0x03A3,0x03C3,0x03A3}, - {0x03A4,0x03C4,0x03A4}, {0x03A5,0x03C5,0x03A5}, - {0x03A6,0x03C6,0x03A6}, {0x03A7,0x03C7,0x03A7}, - {0x03A8,0x03C8,0x03A8}, {0x03A9,0x03C9,0x03A9}, - {0x03AA,0x03CA,0x0399}, {0x03AB,0x03CB,0x03A5}, - {0x038C,0x03CC,0x039F}, {0x038E,0x03CD,0x03A5}, - {0x038F,0x03CE,0x03A9}, {0x03CF,0x03CF,0x03CF}, - {0x0392,0x03D0,0x0392}, {0x0398,0x03D1,0x0398}, - {0x03D2,0x03D2,0x03D2}, {0x03D3,0x03D3,0x03D2}, - {0x03D4,0x03D4,0x03D2}, {0x03A6,0x03D5,0x03A6}, - {0x03A0,0x03D6,0x03A0}, {0x03D7,0x03D7,0x03D7}, - {0x03D8,0x03D8,0x03D8}, {0x03D9,0x03D9,0x03D9}, - {0x03DA,0x03DB,0x03DA}, {0x03DA,0x03DB,0x03DA}, - {0x03DC,0x03DD,0x03DC}, {0x03DC,0x03DD,0x03DC}, - {0x03DE,0x03DF,0x03DE}, {0x03DE,0x03DF,0x03DE}, - {0x03E0,0x03E1,0x03E0}, {0x03E0,0x03E1,0x03E0}, - {0x03E2,0x03E3,0x03E2}, {0x03E2,0x03E3,0x03E2}, - {0x03E4,0x03E5,0x03E4}, {0x03E4,0x03E5,0x03E4}, - {0x03E6,0x03E7,0x03E6}, {0x03E6,0x03E7,0x03E6}, - {0x03E8,0x03E9,0x03E8}, {0x03E8,0x03E9,0x03E8}, - {0x03EA,0x03EB,0x03EA}, {0x03EA,0x03EB,0x03EA}, - {0x03EC,0x03ED,0x03EC}, {0x03EC,0x03ED,0x03EC}, - {0x03EE,0x03EF,0x03EE}, {0x03EE,0x03EF,0x03EE}, - {0x039A,0x03F0,0x039A}, {0x03A1,0x03F1,0x03A1}, - {0x03A3,0x03F2,0x03A3}, {0x03F3,0x03F3,0x03F3}, - {0x03F4,0x03F4,0x03F4}, {0x03F5,0x03F5,0x03F5}, - {0x03F6,0x03F6,0x03F6}, {0x03F7,0x03F7,0x03F7}, - {0x03F8,0x03F8,0x03F8}, {0x03F9,0x03F9,0x03F9}, - {0x03FA,0x03FA,0x03FA}, {0x03FB,0x03FB,0x03FB}, - {0x03FC,0x03FC,0x03FC}, {0x03FD,0x03FD,0x03FD}, - {0x03FE,0x03FE,0x03FE}, {0x03FF,0x03FF,0x03FF} -}; - -static MY_UNICASE_INFO plane04[]={ - {0x0400,0x0450,0x0415}, {0x0401,0x0451,0x0415}, - {0x0402,0x0452,0x0402}, {0x0403,0x0453,0x0413}, - {0x0404,0x0454,0x0404}, {0x0405,0x0455,0x0405}, - {0x0406,0x0456,0x0406}, {0x0407,0x0457,0x0406}, - {0x0408,0x0458,0x0408}, {0x0409,0x0459,0x0409}, - {0x040A,0x045A,0x040A}, {0x040B,0x045B,0x040B}, - {0x040C,0x045C,0x041A}, {0x040D,0x045D,0x0418}, - {0x040E,0x045E,0x0423}, {0x040F,0x045F,0x040F}, - {0x0410,0x0430,0x0410}, {0x0411,0x0431,0x0411}, - {0x0412,0x0432,0x0412}, {0x0413,0x0433,0x0413}, - {0x0414,0x0434,0x0414}, {0x0415,0x0435,0x0415}, - {0x0416,0x0436,0x0416}, {0x0417,0x0437,0x0417}, - {0x0418,0x0438,0x0418}, {0x0419,0x0439,0x0419}, - {0x041A,0x043A,0x041A}, {0x041B,0x043B,0x041B}, - {0x041C,0x043C,0x041C}, {0x041D,0x043D,0x041D}, - {0x041E,0x043E,0x041E}, {0x041F,0x043F,0x041F}, - {0x0420,0x0440,0x0420}, {0x0421,0x0441,0x0421}, - {0x0422,0x0442,0x0422}, {0x0423,0x0443,0x0423}, - {0x0424,0x0444,0x0424}, {0x0425,0x0445,0x0425}, - {0x0426,0x0446,0x0426}, {0x0427,0x0447,0x0427}, - {0x0428,0x0448,0x0428}, {0x0429,0x0449,0x0429}, - {0x042A,0x044A,0x042A}, {0x042B,0x044B,0x042B}, - {0x042C,0x044C,0x042C}, {0x042D,0x044D,0x042D}, - {0x042E,0x044E,0x042E}, {0x042F,0x044F,0x042F}, - {0x0410,0x0430,0x0410}, {0x0411,0x0431,0x0411}, - {0x0412,0x0432,0x0412}, {0x0413,0x0433,0x0413}, - {0x0414,0x0434,0x0414}, {0x0415,0x0435,0x0415}, - {0x0416,0x0436,0x0416}, {0x0417,0x0437,0x0417}, - {0x0418,0x0438,0x0418}, {0x0419,0x0439,0x0419}, - {0x041A,0x043A,0x041A}, {0x041B,0x043B,0x041B}, - {0x041C,0x043C,0x041C}, {0x041D,0x043D,0x041D}, - {0x041E,0x043E,0x041E}, {0x041F,0x043F,0x041F}, - {0x0420,0x0440,0x0420}, {0x0421,0x0441,0x0421}, - {0x0422,0x0442,0x0422}, {0x0423,0x0443,0x0423}, - {0x0424,0x0444,0x0424}, {0x0425,0x0445,0x0425}, - {0x0426,0x0446,0x0426}, {0x0427,0x0447,0x0427}, - {0x0428,0x0448,0x0428}, {0x0429,0x0449,0x0429}, - {0x042A,0x044A,0x042A}, {0x042B,0x044B,0x042B}, - {0x042C,0x044C,0x042C}, {0x042D,0x044D,0x042D}, - {0x042E,0x044E,0x042E}, {0x042F,0x044F,0x042F}, - {0x0400,0x0450,0x0415}, {0x0401,0x0451,0x0415}, - {0x0402,0x0452,0x0402}, {0x0403,0x0453,0x0413}, - {0x0404,0x0454,0x0404}, {0x0405,0x0455,0x0405}, - {0x0406,0x0456,0x0406}, {0x0407,0x0457,0x0406}, - {0x0408,0x0458,0x0408}, {0x0409,0x0459,0x0409}, - {0x040A,0x045A,0x040A}, {0x040B,0x045B,0x040B}, - {0x040C,0x045C,0x041A}, {0x040D,0x045D,0x0418}, - {0x040E,0x045E,0x0423}, {0x040F,0x045F,0x040F}, - {0x0460,0x0461,0x0460}, {0x0460,0x0461,0x0460}, - {0x0462,0x0463,0x0462}, {0x0462,0x0463,0x0462}, - {0x0464,0x0465,0x0464}, {0x0464,0x0465,0x0464}, - {0x0466,0x0467,0x0466}, {0x0466,0x0467,0x0466}, - {0x0468,0x0469,0x0468}, {0x0468,0x0469,0x0468}, - {0x046A,0x046B,0x046A}, {0x046A,0x046B,0x046A}, - {0x046C,0x046D,0x046C}, {0x046C,0x046D,0x046C}, - {0x046E,0x046F,0x046E}, {0x046E,0x046F,0x046E}, - {0x0470,0x0471,0x0470}, {0x0470,0x0471,0x0470}, - {0x0472,0x0473,0x0472}, {0x0472,0x0473,0x0472}, - {0x0474,0x0475,0x0474}, {0x0474,0x0475,0x0474}, - {0x0476,0x0477,0x0474}, {0x0476,0x0477,0x0474}, - {0x0478,0x0479,0x0478}, {0x0478,0x0479,0x0478}, - {0x047A,0x047B,0x047A}, {0x047A,0x047B,0x047A}, - {0x047C,0x047D,0x047C}, {0x047C,0x047D,0x047C}, - {0x047E,0x047F,0x047E}, {0x047E,0x047F,0x047E}, - {0x0480,0x0481,0x0480}, {0x0480,0x0481,0x0480}, - {0x0482,0x0482,0x0482}, {0x0483,0x0483,0x0483}, - {0x0484,0x0484,0x0484}, {0x0485,0x0485,0x0485}, - {0x0486,0x0486,0x0486}, {0x0487,0x0487,0x0487}, - {0x0488,0x0488,0x0488}, {0x0489,0x0489,0x0489}, - {0x048A,0x048A,0x048A}, {0x048B,0x048B,0x048B}, - {0x048C,0x048D,0x048C}, {0x048C,0x048D,0x048C}, - {0x048E,0x048F,0x048E}, {0x048E,0x048F,0x048E}, - {0x0490,0x0491,0x0490}, {0x0490,0x0491,0x0490}, - {0x0492,0x0493,0x0492}, {0x0492,0x0493,0x0492}, - {0x0494,0x0495,0x0494}, {0x0494,0x0495,0x0494}, - {0x0496,0x0497,0x0496}, {0x0496,0x0497,0x0496}, - {0x0498,0x0499,0x0498}, {0x0498,0x0499,0x0498}, - {0x049A,0x049B,0x049A}, {0x049A,0x049B,0x049A}, - {0x049C,0x049D,0x049C}, {0x049C,0x049D,0x049C}, - {0x049E,0x049F,0x049E}, {0x049E,0x049F,0x049E}, - {0x04A0,0x04A1,0x04A0}, {0x04A0,0x04A1,0x04A0}, - {0x04A2,0x04A3,0x04A2}, {0x04A2,0x04A3,0x04A2}, - {0x04A4,0x04A5,0x04A4}, {0x04A4,0x04A5,0x04A4}, - {0x04A6,0x04A7,0x04A6}, {0x04A6,0x04A7,0x04A6}, - {0x04A8,0x04A9,0x04A8}, {0x04A8,0x04A9,0x04A8}, - {0x04AA,0x04AB,0x04AA}, {0x04AA,0x04AB,0x04AA}, - {0x04AC,0x04AD,0x04AC}, {0x04AC,0x04AD,0x04AC}, - {0x04AE,0x04AF,0x04AE}, {0x04AE,0x04AF,0x04AE}, - {0x04B0,0x04B1,0x04B0}, {0x04B0,0x04B1,0x04B0}, - {0x04B2,0x04B3,0x04B2}, {0x04B2,0x04B3,0x04B2}, - {0x04B4,0x04B5,0x04B4}, {0x04B4,0x04B5,0x04B4}, - {0x04B6,0x04B7,0x04B6}, {0x04B6,0x04B7,0x04B6}, - {0x04B8,0x04B9,0x04B8}, {0x04B8,0x04B9,0x04B8}, - {0x04BA,0x04BB,0x04BA}, {0x04BA,0x04BB,0x04BA}, - {0x04BC,0x04BD,0x04BC}, {0x04BC,0x04BD,0x04BC}, - {0x04BE,0x04BF,0x04BE}, {0x04BE,0x04BF,0x04BE}, - {0x04C0,0x04C0,0x04C0}, {0x04C1,0x04C2,0x0416}, - {0x04C1,0x04C2,0x0416}, {0x04C3,0x04C4,0x04C3}, - {0x04C3,0x04C4,0x04C3}, {0x04C5,0x04C5,0x04C5}, - {0x04C6,0x04C6,0x04C6}, {0x04C7,0x04C8,0x04C7}, - {0x04C7,0x04C8,0x04C7}, {0x04C9,0x04C9,0x04C9}, - {0x04CA,0x04CA,0x04CA}, {0x04CB,0x04CC,0x04CB}, - {0x04CB,0x04CC,0x04CB}, {0x04CD,0x04CD,0x04CD}, - {0x04CE,0x04CE,0x04CE}, {0x04CF,0x04CF,0x04CF}, - {0x04D0,0x04D1,0x0410}, {0x04D0,0x04D1,0x0410}, - {0x04D2,0x04D3,0x0410}, {0x04D2,0x04D3,0x0410}, - {0x04D4,0x04D5,0x04D4}, {0x04D4,0x04D5,0x04D4}, - {0x04D6,0x04D7,0x0415}, {0x04D6,0x04D7,0x0415}, - {0x04D8,0x04D9,0x04D8}, {0x04D8,0x04D9,0x04D8}, - {0x04DA,0x04DB,0x04D8}, {0x04DA,0x04DB,0x04D8}, - {0x04DC,0x04DD,0x0416}, {0x04DC,0x04DD,0x0416}, - {0x04DE,0x04DF,0x0417}, {0x04DE,0x04DF,0x0417}, - {0x04E0,0x04E1,0x04E0}, {0x04E0,0x04E1,0x04E0}, - {0x04E2,0x04E3,0x0418}, {0x04E2,0x04E3,0x0418}, - {0x04E4,0x04E5,0x0418}, {0x04E4,0x04E5,0x0418}, - {0x04E6,0x04E7,0x041E}, {0x04E6,0x04E7,0x041E}, - {0x04E8,0x04E9,0x04E8}, {0x04E8,0x04E9,0x04E8}, - {0x04EA,0x04EB,0x04E8}, {0x04EA,0x04EB,0x04E8}, - {0x04EC,0x04ED,0x042D}, {0x04EC,0x04ED,0x042D}, - {0x04EE,0x04EF,0x0423}, {0x04EE,0x04EF,0x0423}, - {0x04F0,0x04F1,0x0423}, {0x04F0,0x04F1,0x0423}, - {0x04F2,0x04F3,0x0423}, {0x04F2,0x04F3,0x0423}, - {0x04F4,0x04F5,0x0427}, {0x04F4,0x04F5,0x0427}, - {0x04F6,0x04F6,0x04F6}, {0x04F7,0x04F7,0x04F7}, - {0x04F8,0x04F9,0x042B}, {0x04F8,0x04F9,0x042B}, - {0x04FA,0x04FA,0x04FA}, {0x04FB,0x04FB,0x04FB}, - {0x04FC,0x04FC,0x04FC}, {0x04FD,0x04FD,0x04FD}, - {0x04FE,0x04FE,0x04FE}, {0x04FF,0x04FF,0x04FF} -}; - -static MY_UNICASE_INFO plane05[]={ - {0x0500,0x0500,0x0500}, {0x0501,0x0501,0x0501}, - {0x0502,0x0502,0x0502}, {0x0503,0x0503,0x0503}, - {0x0504,0x0504,0x0504}, {0x0505,0x0505,0x0505}, - {0x0506,0x0506,0x0506}, {0x0507,0x0507,0x0507}, - {0x0508,0x0508,0x0508}, {0x0509,0x0509,0x0509}, - {0x050A,0x050A,0x050A}, {0x050B,0x050B,0x050B}, - {0x050C,0x050C,0x050C}, {0x050D,0x050D,0x050D}, - {0x050E,0x050E,0x050E}, {0x050F,0x050F,0x050F}, - {0x0510,0x0510,0x0510}, {0x0511,0x0511,0x0511}, - {0x0512,0x0512,0x0512}, {0x0513,0x0513,0x0513}, - {0x0514,0x0514,0x0514}, {0x0515,0x0515,0x0515}, - {0x0516,0x0516,0x0516}, {0x0517,0x0517,0x0517}, - {0x0518,0x0518,0x0518}, {0x0519,0x0519,0x0519}, - {0x051A,0x051A,0x051A}, {0x051B,0x051B,0x051B}, - {0x051C,0x051C,0x051C}, {0x051D,0x051D,0x051D}, - {0x051E,0x051E,0x051E}, {0x051F,0x051F,0x051F}, - {0x0520,0x0520,0x0520}, {0x0521,0x0521,0x0521}, - {0x0522,0x0522,0x0522}, {0x0523,0x0523,0x0523}, - {0x0524,0x0524,0x0524}, {0x0525,0x0525,0x0525}, - {0x0526,0x0526,0x0526}, {0x0527,0x0527,0x0527}, - {0x0528,0x0528,0x0528}, {0x0529,0x0529,0x0529}, - {0x052A,0x052A,0x052A}, {0x052B,0x052B,0x052B}, - {0x052C,0x052C,0x052C}, {0x052D,0x052D,0x052D}, - {0x052E,0x052E,0x052E}, {0x052F,0x052F,0x052F}, - {0x0530,0x0530,0x0530}, {0x0531,0x0561,0x0531}, - {0x0532,0x0562,0x0532}, {0x0533,0x0563,0x0533}, - {0x0534,0x0564,0x0534}, {0x0535,0x0565,0x0535}, - {0x0536,0x0566,0x0536}, {0x0537,0x0567,0x0537}, - {0x0538,0x0568,0x0538}, {0x0539,0x0569,0x0539}, - {0x053A,0x056A,0x053A}, {0x053B,0x056B,0x053B}, - {0x053C,0x056C,0x053C}, {0x053D,0x056D,0x053D}, - {0x053E,0x056E,0x053E}, {0x053F,0x056F,0x053F}, - {0x0540,0x0570,0x0540}, {0x0541,0x0571,0x0541}, - {0x0542,0x0572,0x0542}, {0x0543,0x0573,0x0543}, - {0x0544,0x0574,0x0544}, {0x0545,0x0575,0x0545}, - {0x0546,0x0576,0x0546}, {0x0547,0x0577,0x0547}, - {0x0548,0x0578,0x0548}, {0x0549,0x0579,0x0549}, - {0x054A,0x057A,0x054A}, {0x054B,0x057B,0x054B}, - {0x054C,0x057C,0x054C}, {0x054D,0x057D,0x054D}, - {0x054E,0x057E,0x054E}, {0x054F,0x057F,0x054F}, - {0x0550,0x0580,0x0550}, {0x0551,0x0581,0x0551}, - {0x0552,0x0582,0x0552}, {0x0553,0x0583,0x0553}, - {0x0554,0x0584,0x0554}, {0x0555,0x0585,0x0555}, - {0x0556,0x0586,0x0556}, {0x0557,0x0557,0x0557}, - {0x0558,0x0558,0x0558}, {0x0559,0x0559,0x0559}, - {0x055A,0x055A,0x055A}, {0x055B,0x055B,0x055B}, - {0x055C,0x055C,0x055C}, {0x055D,0x055D,0x055D}, - {0x055E,0x055E,0x055E}, {0x055F,0x055F,0x055F}, - {0x0560,0x0560,0x0560}, {0x0531,0x0561,0x0531}, - {0x0532,0x0562,0x0532}, {0x0533,0x0563,0x0533}, - {0x0534,0x0564,0x0534}, {0x0535,0x0565,0x0535}, - {0x0536,0x0566,0x0536}, {0x0537,0x0567,0x0537}, - {0x0538,0x0568,0x0538}, {0x0539,0x0569,0x0539}, - {0x053A,0x056A,0x053A}, {0x053B,0x056B,0x053B}, - {0x053C,0x056C,0x053C}, {0x053D,0x056D,0x053D}, - {0x053E,0x056E,0x053E}, {0x053F,0x056F,0x053F}, - {0x0540,0x0570,0x0540}, {0x0541,0x0571,0x0541}, - {0x0542,0x0572,0x0542}, {0x0543,0x0573,0x0543}, - {0x0544,0x0574,0x0544}, {0x0545,0x0575,0x0545}, - {0x0546,0x0576,0x0546}, {0x0547,0x0577,0x0547}, - {0x0548,0x0578,0x0548}, {0x0549,0x0579,0x0549}, - {0x054A,0x057A,0x054A}, {0x054B,0x057B,0x054B}, - {0x054C,0x057C,0x054C}, {0x054D,0x057D,0x054D}, - {0x054E,0x057E,0x054E}, {0x054F,0x057F,0x054F}, - {0x0550,0x0580,0x0550}, {0x0551,0x0581,0x0551}, - {0x0552,0x0582,0x0552}, {0x0553,0x0583,0x0553}, - {0x0554,0x0584,0x0554}, {0x0555,0x0585,0x0555}, - {0x0556,0x0586,0x0556}, {0x0587,0x0587,0x0587}, - {0x0588,0x0588,0x0588}, {0x0589,0x0589,0x0589}, - {0x058A,0x058A,0x058A}, {0x058B,0x058B,0x058B}, - {0x058C,0x058C,0x058C}, {0x058D,0x058D,0x058D}, - {0x058E,0x058E,0x058E}, {0x058F,0x058F,0x058F}, - {0x0590,0x0590,0x0590}, {0x0591,0x0591,0x0591}, - {0x0592,0x0592,0x0592}, {0x0593,0x0593,0x0593}, - {0x0594,0x0594,0x0594}, {0x0595,0x0595,0x0595}, - {0x0596,0x0596,0x0596}, {0x0597,0x0597,0x0597}, - {0x0598,0x0598,0x0598}, {0x0599,0x0599,0x0599}, - {0x059A,0x059A,0x059A}, {0x059B,0x059B,0x059B}, - {0x059C,0x059C,0x059C}, {0x059D,0x059D,0x059D}, - {0x059E,0x059E,0x059E}, {0x059F,0x059F,0x059F}, - {0x05A0,0x05A0,0x05A0}, {0x05A1,0x05A1,0x05A1}, - {0x05A2,0x05A2,0x05A2}, {0x05A3,0x05A3,0x05A3}, - {0x05A4,0x05A4,0x05A4}, {0x05A5,0x05A5,0x05A5}, - {0x05A6,0x05A6,0x05A6}, {0x05A7,0x05A7,0x05A7}, - {0x05A8,0x05A8,0x05A8}, {0x05A9,0x05A9,0x05A9}, - {0x05AA,0x05AA,0x05AA}, {0x05AB,0x05AB,0x05AB}, - {0x05AC,0x05AC,0x05AC}, {0x05AD,0x05AD,0x05AD}, - {0x05AE,0x05AE,0x05AE}, {0x05AF,0x05AF,0x05AF}, - {0x05B0,0x05B0,0x05B0}, {0x05B1,0x05B1,0x05B1}, - {0x05B2,0x05B2,0x05B2}, {0x05B3,0x05B3,0x05B3}, - {0x05B4,0x05B4,0x05B4}, {0x05B5,0x05B5,0x05B5}, - {0x05B6,0x05B6,0x05B6}, {0x05B7,0x05B7,0x05B7}, - {0x05B8,0x05B8,0x05B8}, {0x05B9,0x05B9,0x05B9}, - {0x05BA,0x05BA,0x05BA}, {0x05BB,0x05BB,0x05BB}, - {0x05BC,0x05BC,0x05BC}, {0x05BD,0x05BD,0x05BD}, - {0x05BE,0x05BE,0x05BE}, {0x05BF,0x05BF,0x05BF}, - {0x05C0,0x05C0,0x05C0}, {0x05C1,0x05C1,0x05C1}, - {0x05C2,0x05C2,0x05C2}, {0x05C3,0x05C3,0x05C3}, - {0x05C4,0x05C4,0x05C4}, {0x05C5,0x05C5,0x05C5}, - {0x05C6,0x05C6,0x05C6}, {0x05C7,0x05C7,0x05C7}, - {0x05C8,0x05C8,0x05C8}, {0x05C9,0x05C9,0x05C9}, - {0x05CA,0x05CA,0x05CA}, {0x05CB,0x05CB,0x05CB}, - {0x05CC,0x05CC,0x05CC}, {0x05CD,0x05CD,0x05CD}, - {0x05CE,0x05CE,0x05CE}, {0x05CF,0x05CF,0x05CF}, - {0x05D0,0x05D0,0x05D0}, {0x05D1,0x05D1,0x05D1}, - {0x05D2,0x05D2,0x05D2}, {0x05D3,0x05D3,0x05D3}, - {0x05D4,0x05D4,0x05D4}, {0x05D5,0x05D5,0x05D5}, - {0x05D6,0x05D6,0x05D6}, {0x05D7,0x05D7,0x05D7}, - {0x05D8,0x05D8,0x05D8}, {0x05D9,0x05D9,0x05D9}, - {0x05DA,0x05DA,0x05DA}, {0x05DB,0x05DB,0x05DB}, - {0x05DC,0x05DC,0x05DC}, {0x05DD,0x05DD,0x05DD}, - {0x05DE,0x05DE,0x05DE}, {0x05DF,0x05DF,0x05DF}, - {0x05E0,0x05E0,0x05E0}, {0x05E1,0x05E1,0x05E1}, - {0x05E2,0x05E2,0x05E2}, {0x05E3,0x05E3,0x05E3}, - {0x05E4,0x05E4,0x05E4}, {0x05E5,0x05E5,0x05E5}, - {0x05E6,0x05E6,0x05E6}, {0x05E7,0x05E7,0x05E7}, - {0x05E8,0x05E8,0x05E8}, {0x05E9,0x05E9,0x05E9}, - {0x05EA,0x05EA,0x05EA}, {0x05EB,0x05EB,0x05EB}, - {0x05EC,0x05EC,0x05EC}, {0x05ED,0x05ED,0x05ED}, - {0x05EE,0x05EE,0x05EE}, {0x05EF,0x05EF,0x05EF}, - {0x05F0,0x05F0,0x05F0}, {0x05F1,0x05F1,0x05F1}, - {0x05F2,0x05F2,0x05F2}, {0x05F3,0x05F3,0x05F3}, - {0x05F4,0x05F4,0x05F4}, {0x05F5,0x05F5,0x05F5}, - {0x05F6,0x05F6,0x05F6}, {0x05F7,0x05F7,0x05F7}, - {0x05F8,0x05F8,0x05F8}, {0x05F9,0x05F9,0x05F9}, - {0x05FA,0x05FA,0x05FA}, {0x05FB,0x05FB,0x05FB}, - {0x05FC,0x05FC,0x05FC}, {0x05FD,0x05FD,0x05FD}, - {0x05FE,0x05FE,0x05FE}, {0x05FF,0x05FF,0x05FF} -}; - -static MY_UNICASE_INFO plane1E[]={ - {0x1E00,0x1E01,0x0041}, {0x1E00,0x1E01,0x0041}, - {0x1E02,0x1E03,0x0042}, {0x1E02,0x1E03,0x0042}, - {0x1E04,0x1E05,0x0042}, {0x1E04,0x1E05,0x0042}, - {0x1E06,0x1E07,0x0042}, {0x1E06,0x1E07,0x0042}, - {0x1E08,0x1E09,0x0043}, {0x1E08,0x1E09,0x0043}, - {0x1E0A,0x1E0B,0x0044}, {0x1E0A,0x1E0B,0x0044}, - {0x1E0C,0x1E0D,0x0044}, {0x1E0C,0x1E0D,0x0044}, - {0x1E0E,0x1E0F,0x0044}, {0x1E0E,0x1E0F,0x0044}, - {0x1E10,0x1E11,0x0044}, {0x1E10,0x1E11,0x0044}, - {0x1E12,0x1E13,0x0044}, {0x1E12,0x1E13,0x0044}, - {0x1E14,0x1E15,0x0045}, {0x1E14,0x1E15,0x0045}, - {0x1E16,0x1E17,0x0045}, {0x1E16,0x1E17,0x0045}, - {0x1E18,0x1E19,0x0045}, {0x1E18,0x1E19,0x0045}, - {0x1E1A,0x1E1B,0x0045}, {0x1E1A,0x1E1B,0x0045}, - {0x1E1C,0x1E1D,0x0045}, {0x1E1C,0x1E1D,0x0045}, - {0x1E1E,0x1E1F,0x0046}, {0x1E1E,0x1E1F,0x0046}, - {0x1E20,0x1E21,0x0047}, {0x1E20,0x1E21,0x0047}, - {0x1E22,0x1E23,0x0048}, {0x1E22,0x1E23,0x0048}, - {0x1E24,0x1E25,0x0048}, {0x1E24,0x1E25,0x0048}, - {0x1E26,0x1E27,0x0048}, {0x1E26,0x1E27,0x0048}, - {0x1E28,0x1E29,0x0048}, {0x1E28,0x1E29,0x0048}, - {0x1E2A,0x1E2B,0x0048}, {0x1E2A,0x1E2B,0x0048}, - {0x1E2C,0x1E2D,0x0049}, {0x1E2C,0x1E2D,0x0049}, - {0x1E2E,0x1E2F,0x0049}, {0x1E2E,0x1E2F,0x0049}, - {0x1E30,0x1E31,0x004B}, {0x1E30,0x1E31,0x004B}, - {0x1E32,0x1E33,0x004B}, {0x1E32,0x1E33,0x004B}, - {0x1E34,0x1E35,0x004B}, {0x1E34,0x1E35,0x004B}, - {0x1E36,0x1E37,0x004C}, {0x1E36,0x1E37,0x004C}, - {0x1E38,0x1E39,0x004C}, {0x1E38,0x1E39,0x004C}, - {0x1E3A,0x1E3B,0x004C}, {0x1E3A,0x1E3B,0x004C}, - {0x1E3C,0x1E3D,0x004C}, {0x1E3C,0x1E3D,0x004C}, - {0x1E3E,0x1E3F,0x004D}, {0x1E3E,0x1E3F,0x004D}, - {0x1E40,0x1E41,0x004D}, {0x1E40,0x1E41,0x004D}, - {0x1E42,0x1E43,0x004D}, {0x1E42,0x1E43,0x004D}, - {0x1E44,0x1E45,0x004E}, {0x1E44,0x1E45,0x004E}, - {0x1E46,0x1E47,0x004E}, {0x1E46,0x1E47,0x004E}, - {0x1E48,0x1E49,0x004E}, {0x1E48,0x1E49,0x004E}, - {0x1E4A,0x1E4B,0x004E}, {0x1E4A,0x1E4B,0x004E}, - {0x1E4C,0x1E4D,0x004F}, {0x1E4C,0x1E4D,0x004F}, - {0x1E4E,0x1E4F,0x004F}, {0x1E4E,0x1E4F,0x004F}, - {0x1E50,0x1E51,0x004F}, {0x1E50,0x1E51,0x004F}, - {0x1E52,0x1E53,0x004F}, {0x1E52,0x1E53,0x004F}, - {0x1E54,0x1E55,0x0050}, {0x1E54,0x1E55,0x0050}, - {0x1E56,0x1E57,0x0050}, {0x1E56,0x1E57,0x0050}, - {0x1E58,0x1E59,0x0052}, {0x1E58,0x1E59,0x0052}, - {0x1E5A,0x1E5B,0x0052}, {0x1E5A,0x1E5B,0x0052}, - {0x1E5C,0x1E5D,0x0052}, {0x1E5C,0x1E5D,0x0052}, - {0x1E5E,0x1E5F,0x0052}, {0x1E5E,0x1E5F,0x0052}, - {0x1E60,0x1E61,0x0053}, {0x1E60,0x1E61,0x0053}, - {0x1E62,0x1E63,0x0053}, {0x1E62,0x1E63,0x0053}, - {0x1E64,0x1E65,0x0053}, {0x1E64,0x1E65,0x0053}, - {0x1E66,0x1E67,0x0053}, {0x1E66,0x1E67,0x0053}, - {0x1E68,0x1E69,0x0053}, {0x1E68,0x1E69,0x0053}, - {0x1E6A,0x1E6B,0x0054}, {0x1E6A,0x1E6B,0x0054}, - {0x1E6C,0x1E6D,0x0054}, {0x1E6C,0x1E6D,0x0054}, - {0x1E6E,0x1E6F,0x0054}, {0x1E6E,0x1E6F,0x0054}, - {0x1E70,0x1E71,0x0054}, {0x1E70,0x1E71,0x0054}, - {0x1E72,0x1E73,0x0055}, {0x1E72,0x1E73,0x0055}, - {0x1E74,0x1E75,0x0055}, {0x1E74,0x1E75,0x0055}, - {0x1E76,0x1E77,0x0055}, {0x1E76,0x1E77,0x0055}, - {0x1E78,0x1E79,0x0055}, {0x1E78,0x1E79,0x0055}, - {0x1E7A,0x1E7B,0x0055}, {0x1E7A,0x1E7B,0x0055}, - {0x1E7C,0x1E7D,0x0056}, {0x1E7C,0x1E7D,0x0056}, - {0x1E7E,0x1E7F,0x0056}, {0x1E7E,0x1E7F,0x0056}, - {0x1E80,0x1E81,0x0057}, {0x1E80,0x1E81,0x0057}, - {0x1E82,0x1E83,0x0057}, {0x1E82,0x1E83,0x0057}, - {0x1E84,0x1E85,0x0057}, {0x1E84,0x1E85,0x0057}, - {0x1E86,0x1E87,0x0057}, {0x1E86,0x1E87,0x0057}, - {0x1E88,0x1E89,0x0057}, {0x1E88,0x1E89,0x0057}, - {0x1E8A,0x1E8B,0x0058}, {0x1E8A,0x1E8B,0x0058}, - {0x1E8C,0x1E8D,0x0058}, {0x1E8C,0x1E8D,0x0058}, - {0x1E8E,0x1E8F,0x0059}, {0x1E8E,0x1E8F,0x0059}, - {0x1E90,0x1E91,0x005A}, {0x1E90,0x1E91,0x005A}, - {0x1E92,0x1E93,0x005A}, {0x1E92,0x1E93,0x005A}, - {0x1E94,0x1E95,0x005A}, {0x1E94,0x1E95,0x005A}, - {0x1E96,0x1E96,0x0048}, {0x1E97,0x1E97,0x0054}, - {0x1E98,0x1E98,0x0057}, {0x1E99,0x1E99,0x0059}, - {0x1E9A,0x1E9A,0x1E9A}, {0x1E60,0x1E9B,0x0053}, - {0x1E9C,0x1E9C,0x1E9C}, {0x1E9D,0x1E9D,0x1E9D}, - {0x1E9E,0x1E9E,0x1E9E}, {0x1E9F,0x1E9F,0x1E9F}, - {0x1EA0,0x1EA1,0x0041}, {0x1EA0,0x1EA1,0x0041}, - {0x1EA2,0x1EA3,0x0041}, {0x1EA2,0x1EA3,0x0041}, - {0x1EA4,0x1EA5,0x0041}, {0x1EA4,0x1EA5,0x0041}, - {0x1EA6,0x1EA7,0x0041}, {0x1EA6,0x1EA7,0x0041}, - {0x1EA8,0x1EA9,0x0041}, {0x1EA8,0x1EA9,0x0041}, - {0x1EAA,0x1EAB,0x0041}, {0x1EAA,0x1EAB,0x0041}, - {0x1EAC,0x1EAD,0x0041}, {0x1EAC,0x1EAD,0x0041}, - {0x1EAE,0x1EAF,0x0041}, {0x1EAE,0x1EAF,0x0041}, - {0x1EB0,0x1EB1,0x0041}, {0x1EB0,0x1EB1,0x0041}, - {0x1EB2,0x1EB3,0x0041}, {0x1EB2,0x1EB3,0x0041}, - {0x1EB4,0x1EB5,0x0041}, {0x1EB4,0x1EB5,0x0041}, - {0x1EB6,0x1EB7,0x0041}, {0x1EB6,0x1EB7,0x0041}, - {0x1EB8,0x1EB9,0x0045}, {0x1EB8,0x1EB9,0x0045}, - {0x1EBA,0x1EBB,0x0045}, {0x1EBA,0x1EBB,0x0045}, - {0x1EBC,0x1EBD,0x0045}, {0x1EBC,0x1EBD,0x0045}, - {0x1EBE,0x1EBF,0x0045}, {0x1EBE,0x1EBF,0x0045}, - {0x1EC0,0x1EC1,0x0045}, {0x1EC0,0x1EC1,0x0045}, - {0x1EC2,0x1EC3,0x0045}, {0x1EC2,0x1EC3,0x0045}, - {0x1EC4,0x1EC5,0x0045}, {0x1EC4,0x1EC5,0x0045}, - {0x1EC6,0x1EC7,0x0045}, {0x1EC6,0x1EC7,0x0045}, - {0x1EC8,0x1EC9,0x0049}, {0x1EC8,0x1EC9,0x0049}, - {0x1ECA,0x1ECB,0x0049}, {0x1ECA,0x1ECB,0x0049}, - {0x1ECC,0x1ECD,0x004F}, {0x1ECC,0x1ECD,0x004F}, - {0x1ECE,0x1ECF,0x004F}, {0x1ECE,0x1ECF,0x004F}, - {0x1ED0,0x1ED1,0x004F}, {0x1ED0,0x1ED1,0x004F}, - {0x1ED2,0x1ED3,0x004F}, {0x1ED2,0x1ED3,0x004F}, - {0x1ED4,0x1ED5,0x004F}, {0x1ED4,0x1ED5,0x004F}, - {0x1ED6,0x1ED7,0x004F}, {0x1ED6,0x1ED7,0x004F}, - {0x1ED8,0x1ED9,0x004F}, {0x1ED8,0x1ED9,0x004F}, - {0x1EDA,0x1EDB,0x004F}, {0x1EDA,0x1EDB,0x004F}, - {0x1EDC,0x1EDD,0x004F}, {0x1EDC,0x1EDD,0x004F}, - {0x1EDE,0x1EDF,0x004F}, {0x1EDE,0x1EDF,0x004F}, - {0x1EE0,0x1EE1,0x004F}, {0x1EE0,0x1EE1,0x004F}, - {0x1EE2,0x1EE3,0x004F}, {0x1EE2,0x1EE3,0x004F}, - {0x1EE4,0x1EE5,0x0055}, {0x1EE4,0x1EE5,0x0055}, - {0x1EE6,0x1EE7,0x0055}, {0x1EE6,0x1EE7,0x0055}, - {0x1EE8,0x1EE9,0x0055}, {0x1EE8,0x1EE9,0x0055}, - {0x1EEA,0x1EEB,0x0055}, {0x1EEA,0x1EEB,0x0055}, - {0x1EEC,0x1EED,0x0055}, {0x1EEC,0x1EED,0x0055}, - {0x1EEE,0x1EEF,0x0055}, {0x1EEE,0x1EEF,0x0055}, - {0x1EF0,0x1EF1,0x0055}, {0x1EF0,0x1EF1,0x0055}, - {0x1EF2,0x1EF3,0x0059}, {0x1EF2,0x1EF3,0x0059}, - {0x1EF4,0x1EF5,0x0059}, {0x1EF4,0x1EF5,0x0059}, - {0x1EF6,0x1EF7,0x0059}, {0x1EF6,0x1EF7,0x0059}, - {0x1EF8,0x1EF9,0x0059}, {0x1EF8,0x1EF9,0x0059}, - {0x1EFA,0x1EFA,0x1EFA}, {0x1EFB,0x1EFB,0x1EFB}, - {0x1EFC,0x1EFC,0x1EFC}, {0x1EFD,0x1EFD,0x1EFD}, - {0x1EFE,0x1EFE,0x1EFE}, {0x1EFF,0x1EFF,0x1EFF} -}; - -static MY_UNICASE_INFO plane1F[]={ - {0x1F08,0x1F00,0x0391}, {0x1F09,0x1F01,0x0391}, - {0x1F0A,0x1F02,0x0391}, {0x1F0B,0x1F03,0x0391}, - {0x1F0C,0x1F04,0x0391}, {0x1F0D,0x1F05,0x0391}, - {0x1F0E,0x1F06,0x0391}, {0x1F0F,0x1F07,0x0391}, - {0x1F08,0x1F00,0x0391}, {0x1F09,0x1F01,0x0391}, - {0x1F0A,0x1F02,0x0391}, {0x1F0B,0x1F03,0x0391}, - {0x1F0C,0x1F04,0x0391}, {0x1F0D,0x1F05,0x0391}, - {0x1F0E,0x1F06,0x0391}, {0x1F0F,0x1F07,0x0391}, - {0x1F18,0x1F10,0x0395}, {0x1F19,0x1F11,0x0395}, - {0x1F1A,0x1F12,0x0395}, {0x1F1B,0x1F13,0x0395}, - {0x1F1C,0x1F14,0x0395}, {0x1F1D,0x1F15,0x0395}, - {0x1F16,0x1F16,0x1F16}, {0x1F17,0x1F17,0x1F17}, - {0x1F18,0x1F10,0x0395}, {0x1F19,0x1F11,0x0395}, - {0x1F1A,0x1F12,0x0395}, {0x1F1B,0x1F13,0x0395}, - {0x1F1C,0x1F14,0x0395}, {0x1F1D,0x1F15,0x0395}, - {0x1F1E,0x1F1E,0x1F1E}, {0x1F1F,0x1F1F,0x1F1F}, - {0x1F28,0x1F20,0x0397}, {0x1F29,0x1F21,0x0397}, - {0x1F2A,0x1F22,0x0397}, {0x1F2B,0x1F23,0x0397}, - {0x1F2C,0x1F24,0x0397}, {0x1F2D,0x1F25,0x0397}, - {0x1F2E,0x1F26,0x0397}, {0x1F2F,0x1F27,0x0397}, - {0x1F28,0x1F20,0x0397}, {0x1F29,0x1F21,0x0397}, - {0x1F2A,0x1F22,0x0397}, {0x1F2B,0x1F23,0x0397}, - {0x1F2C,0x1F24,0x0397}, {0x1F2D,0x1F25,0x0397}, - {0x1F2E,0x1F26,0x0397}, {0x1F2F,0x1F27,0x0397}, - {0x1F38,0x1F30,0x0399}, {0x1F39,0x1F31,0x0399}, - {0x1F3A,0x1F32,0x0399}, {0x1F3B,0x1F33,0x0399}, - {0x1F3C,0x1F34,0x0399}, {0x1F3D,0x1F35,0x0399}, - {0x1F3E,0x1F36,0x0399}, {0x1F3F,0x1F37,0x0399}, - {0x1F38,0x1F30,0x0399}, {0x1F39,0x1F31,0x0399}, - {0x1F3A,0x1F32,0x0399}, {0x1F3B,0x1F33,0x0399}, - {0x1F3C,0x1F34,0x0399}, {0x1F3D,0x1F35,0x0399}, - {0x1F3E,0x1F36,0x0399}, {0x1F3F,0x1F37,0x0399}, - {0x1F48,0x1F40,0x039F}, {0x1F49,0x1F41,0x039F}, - {0x1F4A,0x1F42,0x039F}, {0x1F4B,0x1F43,0x039F}, - {0x1F4C,0x1F44,0x039F}, {0x1F4D,0x1F45,0x039F}, - {0x1F46,0x1F46,0x1F46}, {0x1F47,0x1F47,0x1F47}, - {0x1F48,0x1F40,0x039F}, {0x1F49,0x1F41,0x039F}, - {0x1F4A,0x1F42,0x039F}, {0x1F4B,0x1F43,0x039F}, - {0x1F4C,0x1F44,0x039F}, {0x1F4D,0x1F45,0x039F}, - {0x1F4E,0x1F4E,0x1F4E}, {0x1F4F,0x1F4F,0x1F4F}, - {0x1F50,0x1F50,0x03A5}, {0x1F59,0x1F51,0x03A5}, - {0x1F52,0x1F52,0x03A5}, {0x1F5B,0x1F53,0x03A5}, - {0x1F54,0x1F54,0x03A5}, {0x1F5D,0x1F55,0x03A5}, - {0x1F56,0x1F56,0x03A5}, {0x1F5F,0x1F57,0x03A5}, - {0x1F58,0x1F58,0x1F58}, {0x1F59,0x1F51,0x03A5}, - {0x1F5A,0x1F5A,0x1F5A}, {0x1F5B,0x1F53,0x03A5}, - {0x1F5C,0x1F5C,0x1F5C}, {0x1F5D,0x1F55,0x03A5}, - {0x1F5E,0x1F5E,0x1F5E}, {0x1F5F,0x1F57,0x03A5}, - {0x1F68,0x1F60,0x03A9}, {0x1F69,0x1F61,0x03A9}, - {0x1F6A,0x1F62,0x03A9}, {0x1F6B,0x1F63,0x03A9}, - {0x1F6C,0x1F64,0x03A9}, {0x1F6D,0x1F65,0x03A9}, - {0x1F6E,0x1F66,0x03A9}, {0x1F6F,0x1F67,0x03A9}, - {0x1F68,0x1F60,0x03A9}, {0x1F69,0x1F61,0x03A9}, - {0x1F6A,0x1F62,0x03A9}, {0x1F6B,0x1F63,0x03A9}, - {0x1F6C,0x1F64,0x03A9}, {0x1F6D,0x1F65,0x03A9}, - {0x1F6E,0x1F66,0x03A9}, {0x1F6F,0x1F67,0x03A9}, - {0x1FBA,0x1F70,0x0391}, {0x1FBB,0x1F71,0x1FBB}, - {0x1FC8,0x1F72,0x0395}, {0x1FC9,0x1F73,0x1FC9}, - {0x1FCA,0x1F74,0x0397}, {0x1FCB,0x1F75,0x1FCB}, - {0x1FDA,0x1F76,0x0399}, {0x1FDB,0x1F77,0x1FDB}, - {0x1FF8,0x1F78,0x039F}, {0x1FF9,0x1F79,0x1FF9}, - {0x1FEA,0x1F7A,0x03A5}, {0x1FEB,0x1F7B,0x1FEB}, - {0x1FFA,0x1F7C,0x03A9}, {0x1FFB,0x1F7D,0x1FFB}, - {0x1F7E,0x1F7E,0x1F7E}, {0x1F7F,0x1F7F,0x1F7F}, - {0x1F88,0x1F80,0x0391}, {0x1F89,0x1F81,0x0391}, - {0x1F8A,0x1F82,0x0391}, {0x1F8B,0x1F83,0x0391}, - {0x1F8C,0x1F84,0x0391}, {0x1F8D,0x1F85,0x0391}, - {0x1F8E,0x1F86,0x0391}, {0x1F8F,0x1F87,0x0391}, - {0x1F88,0x1F80,0x0391}, {0x1F89,0x1F81,0x0391}, - {0x1F8A,0x1F82,0x0391}, {0x1F8B,0x1F83,0x0391}, - {0x1F8C,0x1F84,0x0391}, {0x1F8D,0x1F85,0x0391}, - {0x1F8E,0x1F86,0x0391}, {0x1F8F,0x1F87,0x0391}, - {0x1F98,0x1F90,0x0397}, {0x1F99,0x1F91,0x0397}, - {0x1F9A,0x1F92,0x0397}, {0x1F9B,0x1F93,0x0397}, - {0x1F9C,0x1F94,0x0397}, {0x1F9D,0x1F95,0x0397}, - {0x1F9E,0x1F96,0x0397}, {0x1F9F,0x1F97,0x0397}, - {0x1F98,0x1F90,0x0397}, {0x1F99,0x1F91,0x0397}, - {0x1F9A,0x1F92,0x0397}, {0x1F9B,0x1F93,0x0397}, - {0x1F9C,0x1F94,0x0397}, {0x1F9D,0x1F95,0x0397}, - {0x1F9E,0x1F96,0x0397}, {0x1F9F,0x1F97,0x0397}, - {0x1FA8,0x1FA0,0x03A9}, {0x1FA9,0x1FA1,0x03A9}, - {0x1FAA,0x1FA2,0x03A9}, {0x1FAB,0x1FA3,0x03A9}, - {0x1FAC,0x1FA4,0x03A9}, {0x1FAD,0x1FA5,0x03A9}, - {0x1FAE,0x1FA6,0x03A9}, {0x1FAF,0x1FA7,0x03A9}, - {0x1FA8,0x1FA0,0x03A9}, {0x1FA9,0x1FA1,0x03A9}, - {0x1FAA,0x1FA2,0x03A9}, {0x1FAB,0x1FA3,0x03A9}, - {0x1FAC,0x1FA4,0x03A9}, {0x1FAD,0x1FA5,0x03A9}, - {0x1FAE,0x1FA6,0x03A9}, {0x1FAF,0x1FA7,0x03A9}, - {0x1FB8,0x1FB0,0x0391}, {0x1FB9,0x1FB1,0x0391}, - {0x1FB2,0x1FB2,0x0391}, {0x1FBC,0x1FB3,0x0391}, - {0x1FB4,0x1FB4,0x0391}, {0x1FB5,0x1FB5,0x1FB5}, - {0x1FB6,0x1FB6,0x0391}, {0x1FB7,0x1FB7,0x0391}, - {0x1FB8,0x1FB0,0x0391}, {0x1FB9,0x1FB1,0x0391}, - {0x1FBA,0x1F70,0x0391}, {0x1FBB,0x1F71,0x1FBB}, - {0x1FBC,0x1FB3,0x0391}, {0x1FBD,0x1FBD,0x1FBD}, - {0x0399,0x1FBE,0x0399}, {0x1FBF,0x1FBF,0x1FBF}, - {0x1FC0,0x1FC0,0x1FC0}, {0x1FC1,0x1FC1,0x1FC1}, - {0x1FC2,0x1FC2,0x0397}, {0x1FCC,0x1FC3,0x0397}, - {0x1FC4,0x1FC4,0x0397}, {0x1FC5,0x1FC5,0x1FC5}, - {0x1FC6,0x1FC6,0x0397}, {0x1FC7,0x1FC7,0x0397}, - {0x1FC8,0x1F72,0x0395}, {0x1FC9,0x1F73,0x1FC9}, - {0x1FCA,0x1F74,0x0397}, {0x1FCB,0x1F75,0x1FCB}, - {0x1FCC,0x1FC3,0x0397}, {0x1FCD,0x1FCD,0x1FCD}, - {0x1FCE,0x1FCE,0x1FCE}, {0x1FCF,0x1FCF,0x1FCF}, - {0x1FD8,0x1FD0,0x0399}, {0x1FD9,0x1FD1,0x0399}, - {0x1FD2,0x1FD2,0x0399}, {0x1FD3,0x1FD3,0x1FD3}, - {0x1FD4,0x1FD4,0x1FD4}, {0x1FD5,0x1FD5,0x1FD5}, - {0x1FD6,0x1FD6,0x0399}, {0x1FD7,0x1FD7,0x0399}, - {0x1FD8,0x1FD0,0x0399}, {0x1FD9,0x1FD1,0x0399}, - {0x1FDA,0x1F76,0x0399}, {0x1FDB,0x1F77,0x1FDB}, - {0x1FDC,0x1FDC,0x1FDC}, {0x1FDD,0x1FDD,0x1FDD}, - {0x1FDE,0x1FDE,0x1FDE}, {0x1FDF,0x1FDF,0x1FDF}, - {0x1FE8,0x1FE0,0x03A5}, {0x1FE9,0x1FE1,0x03A5}, - {0x1FE2,0x1FE2,0x03A5}, {0x1FE3,0x1FE3,0x1FE3}, - {0x1FE4,0x1FE4,0x03A1}, {0x1FEC,0x1FE5,0x03A1}, - {0x1FE6,0x1FE6,0x03A5}, {0x1FE7,0x1FE7,0x03A5}, - {0x1FE8,0x1FE0,0x03A5}, {0x1FE9,0x1FE1,0x03A5}, - {0x1FEA,0x1F7A,0x03A5}, {0x1FEB,0x1F7B,0x1FEB}, - {0x1FEC,0x1FE5,0x03A1}, {0x1FED,0x1FED,0x1FED}, - {0x1FEE,0x1FEE,0x1FEE}, {0x1FEF,0x1FEF,0x1FEF}, - {0x1FF0,0x1FF0,0x1FF0}, {0x1FF1,0x1FF1,0x1FF1}, - {0x1FF2,0x1FF2,0x03A9}, {0x1FFC,0x1FF3,0x03A9}, - {0x1FF4,0x1FF4,0x03A9}, {0x1FF5,0x1FF5,0x1FF5}, - {0x1FF6,0x1FF6,0x03A9}, {0x1FF7,0x1FF7,0x03A9}, - {0x1FF8,0x1F78,0x039F}, {0x1FF9,0x1F79,0x1FF9}, - {0x1FFA,0x1F7C,0x03A9}, {0x1FFB,0x1F7D,0x1FFB}, - {0x1FFC,0x1FF3,0x03A9}, {0x1FFD,0x1FFD,0x1FFD}, - {0x1FFE,0x1FFE,0x1FFE}, {0x1FFF,0x1FFF,0x1FFF} -}; - -static MY_UNICASE_INFO plane21[]={ - {0x2100,0x2100,0x2100}, {0x2101,0x2101,0x2101}, - {0x2102,0x2102,0x2102}, {0x2103,0x2103,0x2103}, - {0x2104,0x2104,0x2104}, {0x2105,0x2105,0x2105}, - {0x2106,0x2106,0x2106}, {0x2107,0x2107,0x2107}, - {0x2108,0x2108,0x2108}, {0x2109,0x2109,0x2109}, - {0x210A,0x210A,0x210A}, {0x210B,0x210B,0x210B}, - {0x210C,0x210C,0x210C}, {0x210D,0x210D,0x210D}, - {0x210E,0x210E,0x210E}, {0x210F,0x210F,0x210F}, - {0x2110,0x2110,0x2110}, {0x2111,0x2111,0x2111}, - {0x2112,0x2112,0x2112}, {0x2113,0x2113,0x2113}, - {0x2114,0x2114,0x2114}, {0x2115,0x2115,0x2115}, - {0x2116,0x2116,0x2116}, {0x2117,0x2117,0x2117}, - {0x2118,0x2118,0x2118}, {0x2119,0x2119,0x2119}, - {0x211A,0x211A,0x211A}, {0x211B,0x211B,0x211B}, - {0x211C,0x211C,0x211C}, {0x211D,0x211D,0x211D}, - {0x211E,0x211E,0x211E}, {0x211F,0x211F,0x211F}, - {0x2120,0x2120,0x2120}, {0x2121,0x2121,0x2121}, - {0x2122,0x2122,0x2122}, {0x2123,0x2123,0x2123}, - {0x2124,0x2124,0x2124}, {0x2125,0x2125,0x2125}, - {0x2126,0x03C9,0x2126}, {0x2127,0x2127,0x2127}, - {0x2128,0x2128,0x2128}, {0x2129,0x2129,0x2129}, - {0x212A,0x006B,0x212A}, {0x212B,0x00E5,0x212B}, - {0x212C,0x212C,0x212C}, {0x212D,0x212D,0x212D}, - {0x212E,0x212E,0x212E}, {0x212F,0x212F,0x212F}, - {0x2130,0x2130,0x2130}, {0x2131,0x2131,0x2131}, - {0x2132,0x2132,0x2132}, {0x2133,0x2133,0x2133}, - {0x2134,0x2134,0x2134}, {0x2135,0x2135,0x2135}, - {0x2136,0x2136,0x2136}, {0x2137,0x2137,0x2137}, - {0x2138,0x2138,0x2138}, {0x2139,0x2139,0x2139}, - {0x213A,0x213A,0x213A}, {0x213B,0x213B,0x213B}, - {0x213C,0x213C,0x213C}, {0x213D,0x213D,0x213D}, - {0x213E,0x213E,0x213E}, {0x213F,0x213F,0x213F}, - {0x2140,0x2140,0x2140}, {0x2141,0x2141,0x2141}, - {0x2142,0x2142,0x2142}, {0x2143,0x2143,0x2143}, - {0x2144,0x2144,0x2144}, {0x2145,0x2145,0x2145}, - {0x2146,0x2146,0x2146}, {0x2147,0x2147,0x2147}, - {0x2148,0x2148,0x2148}, {0x2149,0x2149,0x2149}, - {0x214A,0x214A,0x214A}, {0x214B,0x214B,0x214B}, - {0x214C,0x214C,0x214C}, {0x214D,0x214D,0x214D}, - {0x214E,0x214E,0x214E}, {0x214F,0x214F,0x214F}, - {0x2150,0x2150,0x2150}, {0x2151,0x2151,0x2151}, - {0x2152,0x2152,0x2152}, {0x2153,0x2153,0x2153}, - {0x2154,0x2154,0x2154}, {0x2155,0x2155,0x2155}, - {0x2156,0x2156,0x2156}, {0x2157,0x2157,0x2157}, - {0x2158,0x2158,0x2158}, {0x2159,0x2159,0x2159}, - {0x215A,0x215A,0x215A}, {0x215B,0x215B,0x215B}, - {0x215C,0x215C,0x215C}, {0x215D,0x215D,0x215D}, - {0x215E,0x215E,0x215E}, {0x215F,0x215F,0x215F}, - {0x2160,0x2170,0x2160}, {0x2161,0x2171,0x2161}, - {0x2162,0x2172,0x2162}, {0x2163,0x2173,0x2163}, - {0x2164,0x2174,0x2164}, {0x2165,0x2175,0x2165}, - {0x2166,0x2176,0x2166}, {0x2167,0x2177,0x2167}, - {0x2168,0x2178,0x2168}, {0x2169,0x2179,0x2169}, - {0x216A,0x217A,0x216A}, {0x216B,0x217B,0x216B}, - {0x216C,0x217C,0x216C}, {0x216D,0x217D,0x216D}, - {0x216E,0x217E,0x216E}, {0x216F,0x217F,0x216F}, - {0x2160,0x2170,0x2160}, {0x2161,0x2171,0x2161}, - {0x2162,0x2172,0x2162}, {0x2163,0x2173,0x2163}, - {0x2164,0x2174,0x2164}, {0x2165,0x2175,0x2165}, - {0x2166,0x2176,0x2166}, {0x2167,0x2177,0x2167}, - {0x2168,0x2178,0x2168}, {0x2169,0x2179,0x2169}, - {0x216A,0x217A,0x216A}, {0x216B,0x217B,0x216B}, - {0x216C,0x217C,0x216C}, {0x216D,0x217D,0x216D}, - {0x216E,0x217E,0x216E}, {0x216F,0x217F,0x216F}, - {0x2180,0x2180,0x2180}, {0x2181,0x2181,0x2181}, - {0x2182,0x2182,0x2182}, {0x2183,0x2183,0x2183}, - {0x2184,0x2184,0x2184}, {0x2185,0x2185,0x2185}, - {0x2186,0x2186,0x2186}, {0x2187,0x2187,0x2187}, - {0x2188,0x2188,0x2188}, {0x2189,0x2189,0x2189}, - {0x218A,0x218A,0x218A}, {0x218B,0x218B,0x218B}, - {0x218C,0x218C,0x218C}, {0x218D,0x218D,0x218D}, - {0x218E,0x218E,0x218E}, {0x218F,0x218F,0x218F}, - {0x2190,0x2190,0x2190}, {0x2191,0x2191,0x2191}, - {0x2192,0x2192,0x2192}, {0x2193,0x2193,0x2193}, - {0x2194,0x2194,0x2194}, {0x2195,0x2195,0x2195}, - {0x2196,0x2196,0x2196}, {0x2197,0x2197,0x2197}, - {0x2198,0x2198,0x2198}, {0x2199,0x2199,0x2199}, - {0x219A,0x219A,0x219A}, {0x219B,0x219B,0x219B}, - {0x219C,0x219C,0x219C}, {0x219D,0x219D,0x219D}, - {0x219E,0x219E,0x219E}, {0x219F,0x219F,0x219F}, - {0x21A0,0x21A0,0x21A0}, {0x21A1,0x21A1,0x21A1}, - {0x21A2,0x21A2,0x21A2}, {0x21A3,0x21A3,0x21A3}, - {0x21A4,0x21A4,0x21A4}, {0x21A5,0x21A5,0x21A5}, - {0x21A6,0x21A6,0x21A6}, {0x21A7,0x21A7,0x21A7}, - {0x21A8,0x21A8,0x21A8}, {0x21A9,0x21A9,0x21A9}, - {0x21AA,0x21AA,0x21AA}, {0x21AB,0x21AB,0x21AB}, - {0x21AC,0x21AC,0x21AC}, {0x21AD,0x21AD,0x21AD}, - {0x21AE,0x21AE,0x21AE}, {0x21AF,0x21AF,0x21AF}, - {0x21B0,0x21B0,0x21B0}, {0x21B1,0x21B1,0x21B1}, - {0x21B2,0x21B2,0x21B2}, {0x21B3,0x21B3,0x21B3}, - {0x21B4,0x21B4,0x21B4}, {0x21B5,0x21B5,0x21B5}, - {0x21B6,0x21B6,0x21B6}, {0x21B7,0x21B7,0x21B7}, - {0x21B8,0x21B8,0x21B8}, {0x21B9,0x21B9,0x21B9}, - {0x21BA,0x21BA,0x21BA}, {0x21BB,0x21BB,0x21BB}, - {0x21BC,0x21BC,0x21BC}, {0x21BD,0x21BD,0x21BD}, - {0x21BE,0x21BE,0x21BE}, {0x21BF,0x21BF,0x21BF}, - {0x21C0,0x21C0,0x21C0}, {0x21C1,0x21C1,0x21C1}, - {0x21C2,0x21C2,0x21C2}, {0x21C3,0x21C3,0x21C3}, - {0x21C4,0x21C4,0x21C4}, {0x21C5,0x21C5,0x21C5}, - {0x21C6,0x21C6,0x21C6}, {0x21C7,0x21C7,0x21C7}, - {0x21C8,0x21C8,0x21C8}, {0x21C9,0x21C9,0x21C9}, - {0x21CA,0x21CA,0x21CA}, {0x21CB,0x21CB,0x21CB}, - {0x21CC,0x21CC,0x21CC}, {0x21CD,0x21CD,0x21CD}, - {0x21CE,0x21CE,0x21CE}, {0x21CF,0x21CF,0x21CF}, - {0x21D0,0x21D0,0x21D0}, {0x21D1,0x21D1,0x21D1}, - {0x21D2,0x21D2,0x21D2}, {0x21D3,0x21D3,0x21D3}, - {0x21D4,0x21D4,0x21D4}, {0x21D5,0x21D5,0x21D5}, - {0x21D6,0x21D6,0x21D6}, {0x21D7,0x21D7,0x21D7}, - {0x21D8,0x21D8,0x21D8}, {0x21D9,0x21D9,0x21D9}, - {0x21DA,0x21DA,0x21DA}, {0x21DB,0x21DB,0x21DB}, - {0x21DC,0x21DC,0x21DC}, {0x21DD,0x21DD,0x21DD}, - {0x21DE,0x21DE,0x21DE}, {0x21DF,0x21DF,0x21DF}, - {0x21E0,0x21E0,0x21E0}, {0x21E1,0x21E1,0x21E1}, - {0x21E2,0x21E2,0x21E2}, {0x21E3,0x21E3,0x21E3}, - {0x21E4,0x21E4,0x21E4}, {0x21E5,0x21E5,0x21E5}, - {0x21E6,0x21E6,0x21E6}, {0x21E7,0x21E7,0x21E7}, - {0x21E8,0x21E8,0x21E8}, {0x21E9,0x21E9,0x21E9}, - {0x21EA,0x21EA,0x21EA}, {0x21EB,0x21EB,0x21EB}, - {0x21EC,0x21EC,0x21EC}, {0x21ED,0x21ED,0x21ED}, - {0x21EE,0x21EE,0x21EE}, {0x21EF,0x21EF,0x21EF}, - {0x21F0,0x21F0,0x21F0}, {0x21F1,0x21F1,0x21F1}, - {0x21F2,0x21F2,0x21F2}, {0x21F3,0x21F3,0x21F3}, - {0x21F4,0x21F4,0x21F4}, {0x21F5,0x21F5,0x21F5}, - {0x21F6,0x21F6,0x21F6}, {0x21F7,0x21F7,0x21F7}, - {0x21F8,0x21F8,0x21F8}, {0x21F9,0x21F9,0x21F9}, - {0x21FA,0x21FA,0x21FA}, {0x21FB,0x21FB,0x21FB}, - {0x21FC,0x21FC,0x21FC}, {0x21FD,0x21FD,0x21FD}, - {0x21FE,0x21FE,0x21FE}, {0x21FF,0x21FF,0x21FF} -}; - -static MY_UNICASE_INFO plane24[]={ - {0x2400,0x2400,0x2400}, {0x2401,0x2401,0x2401}, - {0x2402,0x2402,0x2402}, {0x2403,0x2403,0x2403}, - {0x2404,0x2404,0x2404}, {0x2405,0x2405,0x2405}, - {0x2406,0x2406,0x2406}, {0x2407,0x2407,0x2407}, - {0x2408,0x2408,0x2408}, {0x2409,0x2409,0x2409}, - {0x240A,0x240A,0x240A}, {0x240B,0x240B,0x240B}, - {0x240C,0x240C,0x240C}, {0x240D,0x240D,0x240D}, - {0x240E,0x240E,0x240E}, {0x240F,0x240F,0x240F}, - {0x2410,0x2410,0x2410}, {0x2411,0x2411,0x2411}, - {0x2412,0x2412,0x2412}, {0x2413,0x2413,0x2413}, - {0x2414,0x2414,0x2414}, {0x2415,0x2415,0x2415}, - {0x2416,0x2416,0x2416}, {0x2417,0x2417,0x2417}, - {0x2418,0x2418,0x2418}, {0x2419,0x2419,0x2419}, - {0x241A,0x241A,0x241A}, {0x241B,0x241B,0x241B}, - {0x241C,0x241C,0x241C}, {0x241D,0x241D,0x241D}, - {0x241E,0x241E,0x241E}, {0x241F,0x241F,0x241F}, - {0x2420,0x2420,0x2420}, {0x2421,0x2421,0x2421}, - {0x2422,0x2422,0x2422}, {0x2423,0x2423,0x2423}, - {0x2424,0x2424,0x2424}, {0x2425,0x2425,0x2425}, - {0x2426,0x2426,0x2426}, {0x2427,0x2427,0x2427}, - {0x2428,0x2428,0x2428}, {0x2429,0x2429,0x2429}, - {0x242A,0x242A,0x242A}, {0x242B,0x242B,0x242B}, - {0x242C,0x242C,0x242C}, {0x242D,0x242D,0x242D}, - {0x242E,0x242E,0x242E}, {0x242F,0x242F,0x242F}, - {0x2430,0x2430,0x2430}, {0x2431,0x2431,0x2431}, - {0x2432,0x2432,0x2432}, {0x2433,0x2433,0x2433}, - {0x2434,0x2434,0x2434}, {0x2435,0x2435,0x2435}, - {0x2436,0x2436,0x2436}, {0x2437,0x2437,0x2437}, - {0x2438,0x2438,0x2438}, {0x2439,0x2439,0x2439}, - {0x243A,0x243A,0x243A}, {0x243B,0x243B,0x243B}, - {0x243C,0x243C,0x243C}, {0x243D,0x243D,0x243D}, - {0x243E,0x243E,0x243E}, {0x243F,0x243F,0x243F}, - {0x2440,0x2440,0x2440}, {0x2441,0x2441,0x2441}, - {0x2442,0x2442,0x2442}, {0x2443,0x2443,0x2443}, - {0x2444,0x2444,0x2444}, {0x2445,0x2445,0x2445}, - {0x2446,0x2446,0x2446}, {0x2447,0x2447,0x2447}, - {0x2448,0x2448,0x2448}, {0x2449,0x2449,0x2449}, - {0x244A,0x244A,0x244A}, {0x244B,0x244B,0x244B}, - {0x244C,0x244C,0x244C}, {0x244D,0x244D,0x244D}, - {0x244E,0x244E,0x244E}, {0x244F,0x244F,0x244F}, - {0x2450,0x2450,0x2450}, {0x2451,0x2451,0x2451}, - {0x2452,0x2452,0x2452}, {0x2453,0x2453,0x2453}, - {0x2454,0x2454,0x2454}, {0x2455,0x2455,0x2455}, - {0x2456,0x2456,0x2456}, {0x2457,0x2457,0x2457}, - {0x2458,0x2458,0x2458}, {0x2459,0x2459,0x2459}, - {0x245A,0x245A,0x245A}, {0x245B,0x245B,0x245B}, - {0x245C,0x245C,0x245C}, {0x245D,0x245D,0x245D}, - {0x245E,0x245E,0x245E}, {0x245F,0x245F,0x245F}, - {0x2460,0x2460,0x2460}, {0x2461,0x2461,0x2461}, - {0x2462,0x2462,0x2462}, {0x2463,0x2463,0x2463}, - {0x2464,0x2464,0x2464}, {0x2465,0x2465,0x2465}, - {0x2466,0x2466,0x2466}, {0x2467,0x2467,0x2467}, - {0x2468,0x2468,0x2468}, {0x2469,0x2469,0x2469}, - {0x246A,0x246A,0x246A}, {0x246B,0x246B,0x246B}, - {0x246C,0x246C,0x246C}, {0x246D,0x246D,0x246D}, - {0x246E,0x246E,0x246E}, {0x246F,0x246F,0x246F}, - {0x2470,0x2470,0x2470}, {0x2471,0x2471,0x2471}, - {0x2472,0x2472,0x2472}, {0x2473,0x2473,0x2473}, - {0x2474,0x2474,0x2474}, {0x2475,0x2475,0x2475}, - {0x2476,0x2476,0x2476}, {0x2477,0x2477,0x2477}, - {0x2478,0x2478,0x2478}, {0x2479,0x2479,0x2479}, - {0x247A,0x247A,0x247A}, {0x247B,0x247B,0x247B}, - {0x247C,0x247C,0x247C}, {0x247D,0x247D,0x247D}, - {0x247E,0x247E,0x247E}, {0x247F,0x247F,0x247F}, - {0x2480,0x2480,0x2480}, {0x2481,0x2481,0x2481}, - {0x2482,0x2482,0x2482}, {0x2483,0x2483,0x2483}, - {0x2484,0x2484,0x2484}, {0x2485,0x2485,0x2485}, - {0x2486,0x2486,0x2486}, {0x2487,0x2487,0x2487}, - {0x2488,0x2488,0x2488}, {0x2489,0x2489,0x2489}, - {0x248A,0x248A,0x248A}, {0x248B,0x248B,0x248B}, - {0x248C,0x248C,0x248C}, {0x248D,0x248D,0x248D}, - {0x248E,0x248E,0x248E}, {0x248F,0x248F,0x248F}, - {0x2490,0x2490,0x2490}, {0x2491,0x2491,0x2491}, - {0x2492,0x2492,0x2492}, {0x2493,0x2493,0x2493}, - {0x2494,0x2494,0x2494}, {0x2495,0x2495,0x2495}, - {0x2496,0x2496,0x2496}, {0x2497,0x2497,0x2497}, - {0x2498,0x2498,0x2498}, {0x2499,0x2499,0x2499}, - {0x249A,0x249A,0x249A}, {0x249B,0x249B,0x249B}, - {0x249C,0x249C,0x249C}, {0x249D,0x249D,0x249D}, - {0x249E,0x249E,0x249E}, {0x249F,0x249F,0x249F}, - {0x24A0,0x24A0,0x24A0}, {0x24A1,0x24A1,0x24A1}, - {0x24A2,0x24A2,0x24A2}, {0x24A3,0x24A3,0x24A3}, - {0x24A4,0x24A4,0x24A4}, {0x24A5,0x24A5,0x24A5}, - {0x24A6,0x24A6,0x24A6}, {0x24A7,0x24A7,0x24A7}, - {0x24A8,0x24A8,0x24A8}, {0x24A9,0x24A9,0x24A9}, - {0x24AA,0x24AA,0x24AA}, {0x24AB,0x24AB,0x24AB}, - {0x24AC,0x24AC,0x24AC}, {0x24AD,0x24AD,0x24AD}, - {0x24AE,0x24AE,0x24AE}, {0x24AF,0x24AF,0x24AF}, - {0x24B0,0x24B0,0x24B0}, {0x24B1,0x24B1,0x24B1}, - {0x24B2,0x24B2,0x24B2}, {0x24B3,0x24B3,0x24B3}, - {0x24B4,0x24B4,0x24B4}, {0x24B5,0x24B5,0x24B5}, - {0x24B6,0x24D0,0x24B6}, {0x24B7,0x24D1,0x24B7}, - {0x24B8,0x24D2,0x24B8}, {0x24B9,0x24D3,0x24B9}, - {0x24BA,0x24D4,0x24BA}, {0x24BB,0x24D5,0x24BB}, - {0x24BC,0x24D6,0x24BC}, {0x24BD,0x24D7,0x24BD}, - {0x24BE,0x24D8,0x24BE}, {0x24BF,0x24D9,0x24BF}, - {0x24C0,0x24DA,0x24C0}, {0x24C1,0x24DB,0x24C1}, - {0x24C2,0x24DC,0x24C2}, {0x24C3,0x24DD,0x24C3}, - {0x24C4,0x24DE,0x24C4}, {0x24C5,0x24DF,0x24C5}, - {0x24C6,0x24E0,0x24C6}, {0x24C7,0x24E1,0x24C7}, - {0x24C8,0x24E2,0x24C8}, {0x24C9,0x24E3,0x24C9}, - {0x24CA,0x24E4,0x24CA}, {0x24CB,0x24E5,0x24CB}, - {0x24CC,0x24E6,0x24CC}, {0x24CD,0x24E7,0x24CD}, - {0x24CE,0x24E8,0x24CE}, {0x24CF,0x24E9,0x24CF}, - {0x24B6,0x24D0,0x24B6}, {0x24B7,0x24D1,0x24B7}, - {0x24B8,0x24D2,0x24B8}, {0x24B9,0x24D3,0x24B9}, - {0x24BA,0x24D4,0x24BA}, {0x24BB,0x24D5,0x24BB}, - {0x24BC,0x24D6,0x24BC}, {0x24BD,0x24D7,0x24BD}, - {0x24BE,0x24D8,0x24BE}, {0x24BF,0x24D9,0x24BF}, - {0x24C0,0x24DA,0x24C0}, {0x24C1,0x24DB,0x24C1}, - {0x24C2,0x24DC,0x24C2}, {0x24C3,0x24DD,0x24C3}, - {0x24C4,0x24DE,0x24C4}, {0x24C5,0x24DF,0x24C5}, - {0x24C6,0x24E0,0x24C6}, {0x24C7,0x24E1,0x24C7}, - {0x24C8,0x24E2,0x24C8}, {0x24C9,0x24E3,0x24C9}, - {0x24CA,0x24E4,0x24CA}, {0x24CB,0x24E5,0x24CB}, - {0x24CC,0x24E6,0x24CC}, {0x24CD,0x24E7,0x24CD}, - {0x24CE,0x24E8,0x24CE}, {0x24CF,0x24E9,0x24CF}, - {0x24EA,0x24EA,0x24EA}, {0x24EB,0x24EB,0x24EB}, - {0x24EC,0x24EC,0x24EC}, {0x24ED,0x24ED,0x24ED}, - {0x24EE,0x24EE,0x24EE}, {0x24EF,0x24EF,0x24EF}, - {0x24F0,0x24F0,0x24F0}, {0x24F1,0x24F1,0x24F1}, - {0x24F2,0x24F2,0x24F2}, {0x24F3,0x24F3,0x24F3}, - {0x24F4,0x24F4,0x24F4}, {0x24F5,0x24F5,0x24F5}, - {0x24F6,0x24F6,0x24F6}, {0x24F7,0x24F7,0x24F7}, - {0x24F8,0x24F8,0x24F8}, {0x24F9,0x24F9,0x24F9}, - {0x24FA,0x24FA,0x24FA}, {0x24FB,0x24FB,0x24FB}, - {0x24FC,0x24FC,0x24FC}, {0x24FD,0x24FD,0x24FD}, - {0x24FE,0x24FE,0x24FE}, {0x24FF,0x24FF,0x24FF} -}; - -static MY_UNICASE_INFO planeFF[]={ - {0xFF00,0xFF00,0xFF00}, {0xFF01,0xFF01,0xFF01}, - {0xFF02,0xFF02,0xFF02}, {0xFF03,0xFF03,0xFF03}, - {0xFF04,0xFF04,0xFF04}, {0xFF05,0xFF05,0xFF05}, - {0xFF06,0xFF06,0xFF06}, {0xFF07,0xFF07,0xFF07}, - {0xFF08,0xFF08,0xFF08}, {0xFF09,0xFF09,0xFF09}, - {0xFF0A,0xFF0A,0xFF0A}, {0xFF0B,0xFF0B,0xFF0B}, - {0xFF0C,0xFF0C,0xFF0C}, {0xFF0D,0xFF0D,0xFF0D}, - {0xFF0E,0xFF0E,0xFF0E}, {0xFF0F,0xFF0F,0xFF0F}, - {0xFF10,0xFF10,0xFF10}, {0xFF11,0xFF11,0xFF11}, - {0xFF12,0xFF12,0xFF12}, {0xFF13,0xFF13,0xFF13}, - {0xFF14,0xFF14,0xFF14}, {0xFF15,0xFF15,0xFF15}, - {0xFF16,0xFF16,0xFF16}, {0xFF17,0xFF17,0xFF17}, - {0xFF18,0xFF18,0xFF18}, {0xFF19,0xFF19,0xFF19}, - {0xFF1A,0xFF1A,0xFF1A}, {0xFF1B,0xFF1B,0xFF1B}, - {0xFF1C,0xFF1C,0xFF1C}, {0xFF1D,0xFF1D,0xFF1D}, - {0xFF1E,0xFF1E,0xFF1E}, {0xFF1F,0xFF1F,0xFF1F}, - {0xFF20,0xFF20,0xFF20}, {0xFF21,0xFF41,0xFF21}, - {0xFF22,0xFF42,0xFF22}, {0xFF23,0xFF43,0xFF23}, - {0xFF24,0xFF44,0xFF24}, {0xFF25,0xFF45,0xFF25}, - {0xFF26,0xFF46,0xFF26}, {0xFF27,0xFF47,0xFF27}, - {0xFF28,0xFF48,0xFF28}, {0xFF29,0xFF49,0xFF29}, - {0xFF2A,0xFF4A,0xFF2A}, {0xFF2B,0xFF4B,0xFF2B}, - {0xFF2C,0xFF4C,0xFF2C}, {0xFF2D,0xFF4D,0xFF2D}, - {0xFF2E,0xFF4E,0xFF2E}, {0xFF2F,0xFF4F,0xFF2F}, - {0xFF30,0xFF50,0xFF30}, {0xFF31,0xFF51,0xFF31}, - {0xFF32,0xFF52,0xFF32}, {0xFF33,0xFF53,0xFF33}, - {0xFF34,0xFF54,0xFF34}, {0xFF35,0xFF55,0xFF35}, - {0xFF36,0xFF56,0xFF36}, {0xFF37,0xFF57,0xFF37}, - {0xFF38,0xFF58,0xFF38}, {0xFF39,0xFF59,0xFF39}, - {0xFF3A,0xFF5A,0xFF3A}, {0xFF3B,0xFF3B,0xFF3B}, - {0xFF3C,0xFF3C,0xFF3C}, {0xFF3D,0xFF3D,0xFF3D}, - {0xFF3E,0xFF3E,0xFF3E}, {0xFF3F,0xFF3F,0xFF3F}, - {0xFF40,0xFF40,0xFF40}, {0xFF21,0xFF41,0xFF21}, - {0xFF22,0xFF42,0xFF22}, {0xFF23,0xFF43,0xFF23}, - {0xFF24,0xFF44,0xFF24}, {0xFF25,0xFF45,0xFF25}, - {0xFF26,0xFF46,0xFF26}, {0xFF27,0xFF47,0xFF27}, - {0xFF28,0xFF48,0xFF28}, {0xFF29,0xFF49,0xFF29}, - {0xFF2A,0xFF4A,0xFF2A}, {0xFF2B,0xFF4B,0xFF2B}, - {0xFF2C,0xFF4C,0xFF2C}, {0xFF2D,0xFF4D,0xFF2D}, - {0xFF2E,0xFF4E,0xFF2E}, {0xFF2F,0xFF4F,0xFF2F}, - {0xFF30,0xFF50,0xFF30}, {0xFF31,0xFF51,0xFF31}, - {0xFF32,0xFF52,0xFF32}, {0xFF33,0xFF53,0xFF33}, - {0xFF34,0xFF54,0xFF34}, {0xFF35,0xFF55,0xFF35}, - {0xFF36,0xFF56,0xFF36}, {0xFF37,0xFF57,0xFF37}, - {0xFF38,0xFF58,0xFF38}, {0xFF39,0xFF59,0xFF39}, - {0xFF3A,0xFF5A,0xFF3A}, {0xFF5B,0xFF5B,0xFF5B}, - {0xFF5C,0xFF5C,0xFF5C}, {0xFF5D,0xFF5D,0xFF5D}, - {0xFF5E,0xFF5E,0xFF5E}, {0xFF5F,0xFF5F,0xFF5F}, - {0xFF60,0xFF60,0xFF60}, {0xFF61,0xFF61,0xFF61}, - {0xFF62,0xFF62,0xFF62}, {0xFF63,0xFF63,0xFF63}, - {0xFF64,0xFF64,0xFF64}, {0xFF65,0xFF65,0xFF65}, - {0xFF66,0xFF66,0xFF66}, {0xFF67,0xFF67,0xFF67}, - {0xFF68,0xFF68,0xFF68}, {0xFF69,0xFF69,0xFF69}, - {0xFF6A,0xFF6A,0xFF6A}, {0xFF6B,0xFF6B,0xFF6B}, - {0xFF6C,0xFF6C,0xFF6C}, {0xFF6D,0xFF6D,0xFF6D}, - {0xFF6E,0xFF6E,0xFF6E}, {0xFF6F,0xFF6F,0xFF6F}, - {0xFF70,0xFF70,0xFF70}, {0xFF71,0xFF71,0xFF71}, - {0xFF72,0xFF72,0xFF72}, {0xFF73,0xFF73,0xFF73}, - {0xFF74,0xFF74,0xFF74}, {0xFF75,0xFF75,0xFF75}, - {0xFF76,0xFF76,0xFF76}, {0xFF77,0xFF77,0xFF77}, - {0xFF78,0xFF78,0xFF78}, {0xFF79,0xFF79,0xFF79}, - {0xFF7A,0xFF7A,0xFF7A}, {0xFF7B,0xFF7B,0xFF7B}, - {0xFF7C,0xFF7C,0xFF7C}, {0xFF7D,0xFF7D,0xFF7D}, - {0xFF7E,0xFF7E,0xFF7E}, {0xFF7F,0xFF7F,0xFF7F}, - {0xFF80,0xFF80,0xFF80}, {0xFF81,0xFF81,0xFF81}, - {0xFF82,0xFF82,0xFF82}, {0xFF83,0xFF83,0xFF83}, - {0xFF84,0xFF84,0xFF84}, {0xFF85,0xFF85,0xFF85}, - {0xFF86,0xFF86,0xFF86}, {0xFF87,0xFF87,0xFF87}, - {0xFF88,0xFF88,0xFF88}, {0xFF89,0xFF89,0xFF89}, - {0xFF8A,0xFF8A,0xFF8A}, {0xFF8B,0xFF8B,0xFF8B}, - {0xFF8C,0xFF8C,0xFF8C}, {0xFF8D,0xFF8D,0xFF8D}, - {0xFF8E,0xFF8E,0xFF8E}, {0xFF8F,0xFF8F,0xFF8F}, - {0xFF90,0xFF90,0xFF90}, {0xFF91,0xFF91,0xFF91}, - {0xFF92,0xFF92,0xFF92}, {0xFF93,0xFF93,0xFF93}, - {0xFF94,0xFF94,0xFF94}, {0xFF95,0xFF95,0xFF95}, - {0xFF96,0xFF96,0xFF96}, {0xFF97,0xFF97,0xFF97}, - {0xFF98,0xFF98,0xFF98}, {0xFF99,0xFF99,0xFF99}, - {0xFF9A,0xFF9A,0xFF9A}, {0xFF9B,0xFF9B,0xFF9B}, - {0xFF9C,0xFF9C,0xFF9C}, {0xFF9D,0xFF9D,0xFF9D}, - {0xFF9E,0xFF9E,0xFF9E}, {0xFF9F,0xFF9F,0xFF9F}, - {0xFFA0,0xFFA0,0xFFA0}, {0xFFA1,0xFFA1,0xFFA1}, - {0xFFA2,0xFFA2,0xFFA2}, {0xFFA3,0xFFA3,0xFFA3}, - {0xFFA4,0xFFA4,0xFFA4}, {0xFFA5,0xFFA5,0xFFA5}, - {0xFFA6,0xFFA6,0xFFA6}, {0xFFA7,0xFFA7,0xFFA7}, - {0xFFA8,0xFFA8,0xFFA8}, {0xFFA9,0xFFA9,0xFFA9}, - {0xFFAA,0xFFAA,0xFFAA}, {0xFFAB,0xFFAB,0xFFAB}, - {0xFFAC,0xFFAC,0xFFAC}, {0xFFAD,0xFFAD,0xFFAD}, - {0xFFAE,0xFFAE,0xFFAE}, {0xFFAF,0xFFAF,0xFFAF}, - {0xFFB0,0xFFB0,0xFFB0}, {0xFFB1,0xFFB1,0xFFB1}, - {0xFFB2,0xFFB2,0xFFB2}, {0xFFB3,0xFFB3,0xFFB3}, - {0xFFB4,0xFFB4,0xFFB4}, {0xFFB5,0xFFB5,0xFFB5}, - {0xFFB6,0xFFB6,0xFFB6}, {0xFFB7,0xFFB7,0xFFB7}, - {0xFFB8,0xFFB8,0xFFB8}, {0xFFB9,0xFFB9,0xFFB9}, - {0xFFBA,0xFFBA,0xFFBA}, {0xFFBB,0xFFBB,0xFFBB}, - {0xFFBC,0xFFBC,0xFFBC}, {0xFFBD,0xFFBD,0xFFBD}, - {0xFFBE,0xFFBE,0xFFBE}, {0xFFBF,0xFFBF,0xFFBF}, - {0xFFC0,0xFFC0,0xFFC0}, {0xFFC1,0xFFC1,0xFFC1}, - {0xFFC2,0xFFC2,0xFFC2}, {0xFFC3,0xFFC3,0xFFC3}, - {0xFFC4,0xFFC4,0xFFC4}, {0xFFC5,0xFFC5,0xFFC5}, - {0xFFC6,0xFFC6,0xFFC6}, {0xFFC7,0xFFC7,0xFFC7}, - {0xFFC8,0xFFC8,0xFFC8}, {0xFFC9,0xFFC9,0xFFC9}, - {0xFFCA,0xFFCA,0xFFCA}, {0xFFCB,0xFFCB,0xFFCB}, - {0xFFCC,0xFFCC,0xFFCC}, {0xFFCD,0xFFCD,0xFFCD}, - {0xFFCE,0xFFCE,0xFFCE}, {0xFFCF,0xFFCF,0xFFCF}, - {0xFFD0,0xFFD0,0xFFD0}, {0xFFD1,0xFFD1,0xFFD1}, - {0xFFD2,0xFFD2,0xFFD2}, {0xFFD3,0xFFD3,0xFFD3}, - {0xFFD4,0xFFD4,0xFFD4}, {0xFFD5,0xFFD5,0xFFD5}, - {0xFFD6,0xFFD6,0xFFD6}, {0xFFD7,0xFFD7,0xFFD7}, - {0xFFD8,0xFFD8,0xFFD8}, {0xFFD9,0xFFD9,0xFFD9}, - {0xFFDA,0xFFDA,0xFFDA}, {0xFFDB,0xFFDB,0xFFDB}, - {0xFFDC,0xFFDC,0xFFDC}, {0xFFDD,0xFFDD,0xFFDD}, - {0xFFDE,0xFFDE,0xFFDE}, {0xFFDF,0xFFDF,0xFFDF}, - {0xFFE0,0xFFE0,0xFFE0}, {0xFFE1,0xFFE1,0xFFE1}, - {0xFFE2,0xFFE2,0xFFE2}, {0xFFE3,0xFFE3,0xFFE3}, - {0xFFE4,0xFFE4,0xFFE4}, {0xFFE5,0xFFE5,0xFFE5}, - {0xFFE6,0xFFE6,0xFFE6}, {0xFFE7,0xFFE7,0xFFE7}, - {0xFFE8,0xFFE8,0xFFE8}, {0xFFE9,0xFFE9,0xFFE9}, - {0xFFEA,0xFFEA,0xFFEA}, {0xFFEB,0xFFEB,0xFFEB}, - {0xFFEC,0xFFEC,0xFFEC}, {0xFFED,0xFFED,0xFFED}, - {0xFFEE,0xFFEE,0xFFEE}, {0xFFEF,0xFFEF,0xFFEF}, - {0xFFF0,0xFFF0,0xFFF0}, {0xFFF1,0xFFF1,0xFFF1}, - {0xFFF2,0xFFF2,0xFFF2}, {0xFFF3,0xFFF3,0xFFF3}, - {0xFFF4,0xFFF4,0xFFF4}, {0xFFF5,0xFFF5,0xFFF5}, - {0xFFF6,0xFFF6,0xFFF6}, {0xFFF7,0xFFF7,0xFFF7}, - {0xFFF8,0xFFF8,0xFFF8}, {0xFFF9,0xFFF9,0xFFF9}, - {0xFFFA,0xFFFA,0xFFFA}, {0xFFFB,0xFFFB,0xFFFB}, - {0xFFFC,0xFFFC,0xFFFC}, {0xFFFD,0xFFFD,0xFFFD}, - {0xFFFE,0xFFFE,0xFFFE}, {0xFFFF,0xFFFF,0xFFFF} -}; - -MY_UNICASE_INFO *my_unicase_default[256]={ - plane00, plane01, plane02, plane03, plane04, plane05, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, plane1E, plane1F, - NULL, plane21, NULL, NULL, plane24, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, planeFF - -}; - - -/* - Turkish lower/upper mapping: - 1. LOWER(0x0049 LATIN CAPITAL LETTER I) -> - 0x0131 LATIN SMALL LETTER DOTLESS I - 2. UPPER(0x0069 LATIN SMALL LETTER I) -> - 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE -*/ - -static MY_UNICASE_INFO turk00[]= -{ - {0x0000,0x0000,0x0000}, {0x0001,0x0001,0x0001}, - {0x0002,0x0002,0x0002}, {0x0003,0x0003,0x0003}, - {0x0004,0x0004,0x0004}, {0x0005,0x0005,0x0005}, - {0x0006,0x0006,0x0006}, {0x0007,0x0007,0x0007}, - {0x0008,0x0008,0x0008}, {0x0009,0x0009,0x0009}, - {0x000A,0x000A,0x000A}, {0x000B,0x000B,0x000B}, - {0x000C,0x000C,0x000C}, {0x000D,0x000D,0x000D}, - {0x000E,0x000E,0x000E}, {0x000F,0x000F,0x000F}, - {0x0010,0x0010,0x0010}, {0x0011,0x0011,0x0011}, - {0x0012,0x0012,0x0012}, {0x0013,0x0013,0x0013}, - {0x0014,0x0014,0x0014}, {0x0015,0x0015,0x0015}, - {0x0016,0x0016,0x0016}, {0x0017,0x0017,0x0017}, - {0x0018,0x0018,0x0018}, {0x0019,0x0019,0x0019}, - {0x001A,0x001A,0x001A}, {0x001B,0x001B,0x001B}, - {0x001C,0x001C,0x001C}, {0x001D,0x001D,0x001D}, - {0x001E,0x001E,0x001E}, {0x001F,0x001F,0x001F}, - {0x0020,0x0020,0x0020}, {0x0021,0x0021,0x0021}, - {0x0022,0x0022,0x0022}, {0x0023,0x0023,0x0023}, - {0x0024,0x0024,0x0024}, {0x0025,0x0025,0x0025}, - {0x0026,0x0026,0x0026}, {0x0027,0x0027,0x0027}, - {0x0028,0x0028,0x0028}, {0x0029,0x0029,0x0029}, - {0x002A,0x002A,0x002A}, {0x002B,0x002B,0x002B}, - {0x002C,0x002C,0x002C}, {0x002D,0x002D,0x002D}, - {0x002E,0x002E,0x002E}, {0x002F,0x002F,0x002F}, - {0x0030,0x0030,0x0030}, {0x0031,0x0031,0x0031}, - {0x0032,0x0032,0x0032}, {0x0033,0x0033,0x0033}, - {0x0034,0x0034,0x0034}, {0x0035,0x0035,0x0035}, - {0x0036,0x0036,0x0036}, {0x0037,0x0037,0x0037}, - {0x0038,0x0038,0x0038}, {0x0039,0x0039,0x0039}, - {0x003A,0x003A,0x003A}, {0x003B,0x003B,0x003B}, - {0x003C,0x003C,0x003C}, {0x003D,0x003D,0x003D}, - {0x003E,0x003E,0x003E}, {0x003F,0x003F,0x003F}, - {0x0040,0x0040,0x0040}, {0x0041,0x0061,0x0041}, - {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043}, - {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045}, - {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047}, - {0x0048,0x0068,0x0048}, {0x0049,0x0131,0x0049}, - {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B}, - {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D}, - {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F}, - {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051}, - {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053}, - {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055}, - {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057}, - {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059}, - {0x005A,0x007A,0x005A}, {0x005B,0x005B,0x005B}, - {0x005C,0x005C,0x005C}, {0x005D,0x005D,0x005D}, - {0x005E,0x005E,0x005E}, {0x005F,0x005F,0x005F}, - {0x0060,0x0060,0x0060}, {0x0041,0x0061,0x0041}, - {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043}, - {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045}, - {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047}, - {0x0048,0x0068,0x0048}, {0x0130,0x0069,0x0049}, - {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B}, - {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D}, - {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F}, - {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051}, - {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053}, - {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055}, - {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057}, - {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059}, - {0x005A,0x007A,0x005A}, {0x007B,0x007B,0x007B}, - {0x007C,0x007C,0x007C}, {0x007D,0x007D,0x007D}, - {0x007E,0x007E,0x007E}, {0x007F,0x007F,0x007F}, - {0x0080,0x0080,0x0080}, {0x0081,0x0081,0x0081}, - {0x0082,0x0082,0x0082}, {0x0083,0x0083,0x0083}, - {0x0084,0x0084,0x0084}, {0x0085,0x0085,0x0085}, - {0x0086,0x0086,0x0086}, {0x0087,0x0087,0x0087}, - {0x0088,0x0088,0x0088}, {0x0089,0x0089,0x0089}, - {0x008A,0x008A,0x008A}, {0x008B,0x008B,0x008B}, - {0x008C,0x008C,0x008C}, {0x008D,0x008D,0x008D}, - {0x008E,0x008E,0x008E}, {0x008F,0x008F,0x008F}, - {0x0090,0x0090,0x0090}, {0x0091,0x0091,0x0091}, - {0x0092,0x0092,0x0092}, {0x0093,0x0093,0x0093}, - {0x0094,0x0094,0x0094}, {0x0095,0x0095,0x0095}, - {0x0096,0x0096,0x0096}, {0x0097,0x0097,0x0097}, - {0x0098,0x0098,0x0098}, {0x0099,0x0099,0x0099}, - {0x009A,0x009A,0x009A}, {0x009B,0x009B,0x009B}, - {0x009C,0x009C,0x009C}, {0x009D,0x009D,0x009D}, - {0x009E,0x009E,0x009E}, {0x009F,0x009F,0x009F}, - {0x00A0,0x00A0,0x00A0}, {0x00A1,0x00A1,0x00A1}, - {0x00A2,0x00A2,0x00A2}, {0x00A3,0x00A3,0x00A3}, - {0x00A4,0x00A4,0x00A4}, {0x00A5,0x00A5,0x00A5}, - {0x00A6,0x00A6,0x00A6}, {0x00A7,0x00A7,0x00A7}, - {0x00A8,0x00A8,0x00A8}, {0x00A9,0x00A9,0x00A9}, - {0x00AA,0x00AA,0x00AA}, {0x00AB,0x00AB,0x00AB}, - {0x00AC,0x00AC,0x00AC}, {0x00AD,0x00AD,0x00AD}, - {0x00AE,0x00AE,0x00AE}, {0x00AF,0x00AF,0x00AF}, - {0x00B0,0x00B0,0x00B0}, {0x00B1,0x00B1,0x00B1}, - {0x00B2,0x00B2,0x00B2}, {0x00B3,0x00B3,0x00B3}, - {0x00B4,0x00B4,0x00B4}, {0x039C,0x00B5,0x039C}, - {0x00B6,0x00B6,0x00B6}, {0x00B7,0x00B7,0x00B7}, - {0x00B8,0x00B8,0x00B8}, {0x00B9,0x00B9,0x00B9}, - {0x00BA,0x00BA,0x00BA}, {0x00BB,0x00BB,0x00BB}, - {0x00BC,0x00BC,0x00BC}, {0x00BD,0x00BD,0x00BD}, - {0x00BE,0x00BE,0x00BE}, {0x00BF,0x00BF,0x00BF}, - {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041}, - {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041}, - {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041}, - {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043}, - {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045}, - {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045}, - {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049}, - {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049}, - {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E}, - {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F}, - {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F}, - {0x00D6,0x00F6,0x004F}, {0x00D7,0x00D7,0x00D7}, - {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055}, - {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055}, - {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059}, - {0x00DE,0x00FE,0x00DE}, {0x00DF,0x00DF,0x00DF}, - {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041}, - {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041}, - {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041}, - {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043}, - {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045}, - {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045}, - {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049}, - {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049}, - {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E}, - {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F}, - {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F}, - {0x00D6,0x00F6,0x004F}, {0x00F7,0x00F7,0x00F7}, - {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055}, - {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055}, - {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059}, - {0x00DE,0x00FE,0x00DE}, {0x0178,0x00FF,0x0059} -}; - - - -MY_UNICASE_INFO *my_unicase_turkish[256]= -{ - turk00, plane01, plane02, plane03, plane04, plane05, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, plane1E, plane1F, - NULL, plane21, NULL, NULL, plane24, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, planeFF -}; - - -static inline void -my_tosort_unicode(MY_UNICASE_INFO **uni_plane, my_wc_t *wc) -{ - int page= *wc >> 8; - if (page < 256) - { - if (uni_plane[page]) - *wc= uni_plane[page][*wc & 0xFF].sort; - } - else - { - *wc= MY_CS_REPLACEMENT_CHARACTER; - } -} - - -/* -** Compare string against string with wildcard -** This function is used in UTF8 and UCS2 -** -** 0 if matched -** -1 if not matched with wildcard -** 1 if matched with wildcard -*/ - -int -my_wildcmp_unicode(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many, - MY_UNICASE_INFO **weights) -{ - int result= -1; /* Not found, using wildcards */ - my_wc_t s_wc, w_wc; - int scan; - int (*mb_wc)(struct charset_info_st *, my_wc_t *, - const uchar *, const uchar *); - mb_wc= cs->cset->mb_wc; - - while (wildstr != wildend) - { - while (1) - { - my_bool escaped= 0; - if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, - (const uchar*)wildend)) <= 0) - return 1; - - if (w_wc == (my_wc_t) w_many) - { - result= 1; /* Found an anchor char */ - break; - } - - wildstr+= scan; - if (w_wc == (my_wc_t) escape && wildstr < wildend) - { - if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, - (const uchar*)wildend)) <= 0) - return 1; - wildstr+= scan; - escaped= 1; - } - - if ((scan= mb_wc(cs, &s_wc, (const uchar*)str, - (const uchar*)str_end)) <= 0) - return 1; - str+= scan; - - if (!escaped && w_wc == (my_wc_t) w_one) - { - result= 1; /* Found an anchor char */ - } - else - { - if (weights) - { - my_tosort_unicode(weights, &s_wc); - my_tosort_unicode(weights, &w_wc); - } - if (s_wc != w_wc) - return 1; /* No match */ - } - if (wildstr == wildend) - return (str != str_end); /* Match if both are at end */ - } - - - if (w_wc == (my_wc_t) w_many) - { /* Found w_many */ - - /* Remove any '%' and '_' from the wild search string */ - for ( ; wildstr != wildend ; ) - { - if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, - (const uchar*)wildend)) <= 0) - return 1; - - if (w_wc == (my_wc_t)w_many) - { - wildstr+= scan; - continue; - } - - if (w_wc == (my_wc_t)w_one) - { - wildstr+= scan; - if ((scan= mb_wc(cs, &s_wc, (const uchar*)str, - (const uchar*)str_end)) <=0) - return 1; - str+= scan; - continue; - } - break; /* Not a wild character */ - } - - if (wildstr == wildend) - return 0; /* Ok if w_many is last */ - - if (str == str_end) - return -1; - - if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, - (const uchar*)wildend)) <=0) - return 1; - wildstr+= scan; - - if (w_wc == (my_wc_t)escape) - { - if (wildstr < wildend) - { - if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, - (const uchar*)wildend)) <=0) - return 1; - wildstr+= scan; - } - } - - while (1) - { - /* Skip until the first character from wildstr is found */ - while (str != str_end) - { - if ((scan= mb_wc(cs, &s_wc, (const uchar*)str, - (const uchar*)str_end)) <=0) - return 1; - if (weights) - { - my_tosort_unicode(weights, &s_wc); - my_tosort_unicode(weights, &w_wc); - } - - if (s_wc == w_wc) - break; - str+= scan; - } - if (str == str_end) - return -1; - - str+= scan; - result= my_wildcmp_unicode(cs, str, str_end, wildstr, wildend, - escape, w_one, w_many, - weights); - if (result <= 0) - return result; - } - } - } - return (str != str_end ? 1 : 0); -} - - -/* - Store sorting weights using 2 bytes per character. - - This function is shared between - - utf8mb3_general_ci, utf8_bin, ucs2_general_ci, ucs2_bin - which support BMP only (U+0000..U+FFFF). - - utf8mb4_general_ci, utf16_general_ci, utf32_general_ci, - which map all supplementary characters to weight 0xFFFD. -*/ -size_t -my_strnxfrm_unicode(CHARSET_INFO *cs, - uchar *dst, size_t dstlen, - const uchar *src, size_t srclen) -{ - my_wc_t wc; - int res; - uchar *de= dst + dstlen; - uchar *de_beg= de - 1; - const uchar *se = src + srclen; - MY_UNICASE_INFO **uni_plane= (cs->state & MY_CS_BINSORT) ? - NULL : cs->caseinfo; - LINT_INIT(wc); - DBUG_ASSERT(src); - - while (dst < de_beg) - { - if ((res= cs->cset->mb_wc(cs,&wc, src, se)) <= 0) - break; - src+=res; - - if (uni_plane) - my_tosort_unicode(uni_plane, &wc); - - *dst++= (uchar) (wc >> 8); - if (dst < de) - *dst++= (uchar) (wc & 0xFF); - } - - while (dst < de_beg) /* Fill the tail with keys for space character */ - { - *dst++= 0x00; - *dst++= 0x20; - } - - if (dst < de) /* Clear the last byte, if "dstlen" was an odd number */ - *dst= 0x00; - - return dstlen; -} - - -/* - Store sorting weights using 3 bytes per character. - This function is shared between utf8mb4_bin, utf16_bin, utf32_bin. -*/ -size_t -my_strnxfrm_unicode_full_bin(CHARSET_INFO *cs, - uchar *dst, size_t dstlen, - const uchar *src, size_t srclen) -{ - my_wc_t wc; - uchar *de= dst + dstlen; - uchar *de_beg= de - 2; /* The beginning of the last chunk */ - const uchar *se = src + srclen; - - LINT_INIT(wc); - DBUG_ASSERT(src); - DBUG_ASSERT(cs->state & MY_CS_BINSORT); - - while (dst < de_beg) - { - int res; - if ((res= cs->cset->mb_wc(cs, &wc, src, se)) <= 0) - break; - src+= res; - *dst++= (uchar) (wc >> 16); - *dst++= (uchar) ((wc >> 8) & 0xFF); - *dst++= (uchar) (wc & 0xFF); - } - - while (dst < de_beg) /* Fill the tail with keys for space character */ - { - *dst++= 0x00; - *dst++= 0x00; - *dst++= 0x20; - } - - /* Clear the last one or two bytes, if "dstlen" was not divisible by 3 */ - if (dst < de) - { - *dst++= 0x00; - if (dst < de) - *dst= 0x00; - } - - return dstlen; -} - - -size_t -my_strnxfrmlen_unicode_full_bin(CHARSET_INFO *cs, size_t len) -{ - return ((len + 3) / cs->mbmaxlen) * 3; -} -#endif /* HAVE_UNIDATA */ - - -#ifdef HAVE_CHARSET_utf8 - -/* - We consider bytes with code more than 127 as a letter. - This garantees that word boundaries work fine with regular - expressions. Note, there is no need to mark byte 255 as a - letter, it is illegal byte in UTF8. -*/ -static uchar ctype_utf8[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0 -}; - -/* The below are taken from usa7 implementation */ - -static uchar to_lower_utf8[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_utf8[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static inline int bincmp(const uchar *s, const uchar *se, - const uchar *t, const uchar *te) -{ - int slen= (int) (se-s), tlen= (int) (te-t); - int len=min(slen,tlen); - int cmp= memcmp(s,t,len); - return cmp ? cmp : slen-tlen; -} - - -static int my_utf8_uni(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t * pwc, const uchar *s, const uchar *e) -{ - uchar c; - - if (s >= e) - return MY_CS_TOOSMALL; - - c= s[0]; - if (c < 0x80) - { - *pwc = c; - return 1; - } - else if (c < 0xc2) - return MY_CS_ILSEQ; - else if (c < 0xe0) - { - if (s+2 > e) /* We need 2 characters */ - return MY_CS_TOOSMALL2; - - if (!((s[1] ^ 0x80) < 0x40)) - return MY_CS_ILSEQ; - - *pwc = ((my_wc_t) (c & 0x1f) << 6) | (my_wc_t) (s[1] ^ 0x80); - return 2; - } - else if (c < 0xf0) - { - if (s+3 > e) /* We need 3 characters */ - return MY_CS_TOOSMALL3; - - if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && - (c >= 0xe1 || s[1] >= 0xa0))) - return MY_CS_ILSEQ; - - *pwc = ((my_wc_t) (c & 0x0f) << 12) | - ((my_wc_t) (s[1] ^ 0x80) << 6) | - (my_wc_t) (s[2] ^ 0x80); - - return 3; - } -#ifdef UNICODE_32BIT - else if (c < 0xf8 && sizeof(my_wc_t)*8 >= 32) - { - if (s+4 > e) /* We need 4 characters */ - return MY_CS_TOOSMALL4; - - if (!((s[1] ^ 0x80) < 0x40 && - (s[2] ^ 0x80) < 0x40 && - (s[3] ^ 0x80) < 0x40 && - (c >= 0xf1 || s[1] >= 0x90))) - return MY_CS_ILSEQ; - - *pwc = ((my_wc_t) (c & 0x07) << 18) | - ((my_wc_t) (s[1] ^ 0x80) << 12) | - ((my_wc_t) (s[2] ^ 0x80) << 6) | - (my_wc_t) (s[3] ^ 0x80); - - return 4; - } - else if (c < 0xfc && sizeof(my_wc_t)*8 >= 32) - { - if (s+5 >e) /* We need 5 characters */ - return MY_CS_TOOSMALL5; - - if (!((s[1] ^ 0x80) < 0x40 && - (s[2] ^ 0x80) < 0x40 && - (s[3] ^ 0x80) < 0x40 && - (s[4] ^ 0x80) < 0x40 && - (c >= 0xf9 || s[1] >= 0x88))) - return MY_CS_ILSEQ; - - *pwc = ((my_wc_t) (c & 0x03) << 24) | - ((my_wc_t) (s[1] ^ 0x80) << 18) | - ((my_wc_t) (s[2] ^ 0x80) << 12) | - ((my_wc_t) (s[3] ^ 0x80) << 6) | - (my_wc_t) (s[4] ^ 0x80); - return 5; - } - else if (c < 0xfe && sizeof(my_wc_t)*8 >= 32) - { - if ( s+6 >e ) /* We need 6 characters */ - return MY_CS_TOOSMALL6; - - if (!((s[1] ^ 0x80) < 0x40 && - (s[2] ^ 0x80) < 0x40 && - (s[3] ^ 0x80) < 0x40 && - (s[4] ^ 0x80) < 0x40 && - (s[5] ^ 0x80) < 0x40 && - (c >= 0xfd || s[1] >= 0x84))) - return MY_CS_ILSEQ; - - *pwc = ((my_wc_t) (c & 0x01) << 30) - | ((my_wc_t) (s[1] ^ 0x80) << 24) - | ((my_wc_t) (s[2] ^ 0x80) << 18) - | ((my_wc_t) (s[3] ^ 0x80) << 12) - | ((my_wc_t) (s[4] ^ 0x80) << 6) - | (my_wc_t) (s[5] ^ 0x80); - return 6; - } -#endif - return MY_CS_ILSEQ; -} - - -/* - The same as above, but without range check - for example, for a null-terminated string -*/ -static int my_utf8_uni_no_range(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t * pwc, const uchar *s) -{ - uchar c; - - c= s[0]; - if (c < 0x80) - { - *pwc = c; - return 1; - } - - if (c < 0xc2) - return MY_CS_ILSEQ; - - if (c < 0xe0) - { - if (!((s[1] ^ 0x80) < 0x40)) - return MY_CS_ILSEQ; - - *pwc = ((my_wc_t) (c & 0x1f) << 6) | (my_wc_t) (s[1] ^ 0x80); - return 2; - } - - if (c < 0xf0) - { - if (!((s[1] ^ 0x80) < 0x40 && - (s[2] ^ 0x80) < 0x40 && - (c >= 0xe1 || s[1] >= 0xa0))) - return MY_CS_ILSEQ; - - *pwc= ((my_wc_t) (c & 0x0f) << 12) | - ((my_wc_t) (s[1] ^ 0x80) << 6) | - (my_wc_t) (s[2] ^ 0x80); - - return 3; - } - return MY_CS_ILSEQ; -} - - -static int my_uni_utf8 (CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, uchar *r, uchar *e) -{ - int count; - - if (r >= e) - return MY_CS_TOOSMALL; - - if (wc < 0x80) - count = 1; - else if (wc < 0x800) - count = 2; - else if (wc < 0x10000) - count = 3; -#ifdef UNICODE_32BIT - else if (wc < 0x200000) - count = 4; - else if (wc < 0x4000000) - count = 5; - else if (wc <= 0x7fffffff) - count = 6; -#endif - else return MY_CS_ILUNI; - - /* - e is a character after the string r, not the last character of it. - Because of it (r+count > e), not (r+count-1 >e ) - */ - if ( r+count > e ) - return MY_CS_TOOSMALLN(count); - - switch (count) { - /* Fall through all cases!!! */ -#ifdef UNICODE_32BIT - case 6: r[5] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x4000000; - case 5: r[4] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x200000; - case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000; -#endif - case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; - case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0; - case 1: r[0] = (uchar) wc; - } - return count; -} - - -/* - The same as above, but without range check. -*/ -static int my_uni_utf8_no_range(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, uchar *r) -{ - int count; - - if (wc < 0x80) - count= 1; - else if (wc < 0x800) - count= 2; - else if (wc < 0x10000) - count= 3; - else - return MY_CS_ILUNI; - - switch (count) - { - /* Fall through all cases!!! */ - case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; - case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0; - case 1: r[0]= (uchar) wc; - } - return count; -} - - -static size_t my_caseup_utf8(CHARSET_INFO *cs, char *src, size_t srclen, - char *dst, size_t dstlen) -{ - my_wc_t wc; - int srcres, dstres; - char *srcend= src + srclen, *dstend= dst + dstlen, *dst0= dst; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - DBUG_ASSERT(src != dst || cs->caseup_multiply == 1); - - while ((src < srcend) && - (srcres= my_utf8_uni(cs, &wc, (uchar *) src, (uchar*) srcend)) > 0) - { - int plane= (wc>>8) & 0xFF; - wc= uni_plane[plane] ? uni_plane[plane][wc & 0xFF].toupper : wc; - if ((dstres= my_uni_utf8(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0) - break; - src+= srcres; - dst+= dstres; - } - return (size_t) (dst - dst0); -} - - -static void my_hash_sort_utf8(CHARSET_INFO *cs, const uchar *s, size_t slen, - ulong *n1, ulong *n2) -{ - my_wc_t wc; - int res; - const uchar *e=s+slen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - - /* - Remove end space. We have to do this to be able to compare - 'A ' and 'A' as identical - */ - while (e > s && e[-1] == ' ') - e--; - - while ((s < e) && (res=my_utf8_uni(cs,&wc, (uchar *)s, (uchar*)e))>0 ) - { - int plane = (wc>>8) & 0xFF; - wc = uni_plane[plane] ? uni_plane[plane][wc & 0xFF].sort : wc; - n1[0]^= (((n1[0] & 63)+n2[0])*(wc & 0xFF))+ (n1[0] << 8); - n2[0]+=3; - n1[0]^= (((n1[0] & 63)+n2[0])*(wc >> 8))+ (n1[0] << 8); - n2[0]+=3; - s+=res; - } -} - - -static size_t my_caseup_str_utf8(CHARSET_INFO *cs, char *src) -{ - my_wc_t wc; - int srcres, dstres; - char *dst= src, *dst0= src; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - DBUG_ASSERT(cs->caseup_multiply == 1); - - while (*src && - (srcres= my_utf8_uni_no_range(cs, &wc, (uchar *) src)) > 0) - { - int plane= (wc>>8) & 0xFF; - wc= uni_plane[plane] ? uni_plane[plane][wc & 0xFF].toupper : wc; - if ((dstres= my_uni_utf8_no_range(cs, wc, (uchar*) dst)) <= 0) - break; - src+= srcres; - dst+= dstres; - } - *dst= '\0'; - return (size_t) (dst - dst0); -} - - -static size_t my_casedn_utf8(CHARSET_INFO *cs, char *src, size_t srclen, - char *dst, size_t dstlen) -{ - my_wc_t wc; - int srcres, dstres; - char *srcend= src + srclen, *dstend= dst + dstlen, *dst0= dst; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - DBUG_ASSERT(src != dst || cs->casedn_multiply == 1); - - while ((src < srcend) && - (srcres= my_utf8_uni(cs, &wc, (uchar*) src, (uchar*)srcend)) > 0) - { - int plane= (wc>>8) & 0xFF; - wc= uni_plane[plane] ? uni_plane[plane][wc & 0xFF].tolower : wc; - if ((dstres= my_uni_utf8(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0) - break; - src+= srcres; - dst+= dstres; - } - return (size_t) (dst - dst0); -} - - -static size_t my_casedn_str_utf8(CHARSET_INFO *cs, char *src) -{ - my_wc_t wc; - int srcres, dstres; - char *dst= src, *dst0= src; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - DBUG_ASSERT(cs->casedn_multiply == 1); - - while (*src && - (srcres= my_utf8_uni_no_range(cs, &wc, (uchar *) src)) > 0) - { - int plane= (wc>>8) & 0xFF; - wc= uni_plane[plane] ? uni_plane[plane][wc & 0xFF].tolower : wc; - if ((dstres= my_uni_utf8_no_range(cs, wc, (uchar*) dst)) <= 0) - break; - src+= srcres; - dst+= dstres; - } - - /* - In rare cases lower string can be shorter than - the original string, for example: - - "U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE" - (which is 0xC4B0 in utf8, i.e. two bytes) - - is converted into - - "U+0069 LATIN SMALL LETTER I" - (which is 0x69 in utf8, i.e. one byte) - - So, we need to put '\0' terminator after converting. - */ - - *dst= '\0'; - return (size_t) (dst - dst0); -} - - -static int my_strnncoll_utf8(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - int s_res,t_res; - my_wc_t UNINIT_VAR(s_wc), t_wc; - const uchar *se=s+slen; - const uchar *te=t+tlen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - - while ( s < se && t < te ) - { - int plane; - s_res=my_utf8_uni(cs,&s_wc, s, se); - t_res=my_utf8_uni(cs,&t_wc, t, te); - - if ( s_res <= 0 || t_res <= 0 ) - { - /* Incorrect string, compare byte by byte value */ - return bincmp(s, se, t, te); - } - - plane=(s_wc>>8) & 0xFF; - s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].sort : s_wc; - plane=(t_wc>>8) & 0xFF; - t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].sort : t_wc; - if ( s_wc != t_wc ) - { - return s_wc > t_wc ? 1 : -1; - } - - s+=s_res; - t+=t_res; - } - return (int) (t_is_prefix ? t-te : ((se-s) - (te-t))); -} - - - -/* - Compare strings, discarding end space - - SYNOPSIS - my_strnncollsp_utf8() - cs character set handler - a First string to compare - a_length Length of 'a' - b Second string to compare - b_length Length of 'b' - diff_if_only_endspace_difference - Set to 1 if the strings should be regarded as different - if they only difference in end space - - IMPLEMENTATION - If one string is shorter as the other, then we space extend the other - so that the strings have equal length. - - This will ensure that the following things hold: - - "a" == "a " - "a\0" < "a" - "a\0" < "a " - - RETURN - < 0 a < b - = 0 a == b - > 0 a > b -*/ - -static int my_strnncollsp_utf8(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference) -{ - int s_res, t_res, res; - my_wc_t UNINIT_VAR(s_wc),t_wc; - const uchar *se= s+slen, *te= t+tlen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= 0; -#endif - - while ( s < se && t < te ) - { - int plane; - s_res=my_utf8_uni(cs,&s_wc, s, se); - t_res=my_utf8_uni(cs,&t_wc, t, te); - - if ( s_res <= 0 || t_res <= 0 ) - { - /* Incorrect string, compare byte by byte value */ - return bincmp(s, se, t, te); - } - - plane=(s_wc>>8) & 0xFF; - s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].sort : s_wc; - plane=(t_wc>>8) & 0xFF; - t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].sort : t_wc; - if ( s_wc != t_wc ) - { - return s_wc > t_wc ? 1 : -1; - } - - s+=s_res; - t+=t_res; - } - - slen= (size_t) (se-s); - tlen= (size_t) (te-t); - res= 0; - - if (slen != tlen) - { - int swap= 1; - if (diff_if_only_endspace_difference) - res= 1; /* Assume 'a' is bigger */ - if (slen < tlen) - { - slen= tlen; - s= t; - se= te; - swap= -1; - res= -res; - } - /* - This following loop uses the fact that in UTF-8 - all multibyte characters are greater than space, - and all multibyte head characters are greater than - space. It means if we meet a character greater - than space, it always means that the longer string - is greater. So we can reuse the same loop from the - 8bit version, without having to process full multibute - sequences. - */ - for ( ; s < se; s++) - { - if (*s != ' ') - return (*s < ' ') ? -swap : swap; - } - } - return res; -} - - -/* - Compare 0-terminated UTF8 strings. - - SYNOPSIS - my_strcasecmp_utf8() - cs character set handler - s First 0-terminated string to compare - t Second 0-terminated string to compare - - IMPLEMENTATION - - RETURN - - negative number if s < t - - positive number if s > t - - 0 is the strings are equal -*/ - -static -int my_strcasecmp_utf8(CHARSET_INFO *cs, const char *s, const char *t) -{ - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - while (s[0] && t[0]) - { - my_wc_t s_wc,t_wc; - - if ((uchar) s[0] < 128) - { - /* - s[0] is between 0 and 127. - It represents a single byte character. - Convert it into weight according to collation. - */ - s_wc= plane00[(uchar) s[0]].tolower; - s++; - } - else - { - int plane, res; - - /* - Scan a multibyte character. - - In the future it is worth to write a special version of my_utf8_uni() - for 0-terminated strings which will not take in account length. Now - we call the regular version of my_utf8_uni() with s+3 in the - last argument. s+3 is enough to scan any multibyte sequence. - - Calling the regular version of my_utf8_uni is safe for 0-terminated - strings: we will never lose the end of the string: - If we have 0 character in the middle of a multibyte sequence, - then my_utf8_uni will always return a negative number, so the - loop with finish. - */ - - res= my_utf8_uni(cs,&s_wc, (const uchar*)s, (const uchar*) s + 3); - - /* - In the case of wrong multibyte sequence we will - call strcmp() for byte-to-byte comparison. - */ - if (res <= 0) - return strcmp(s, t); - s+= res; - - /* Convert Unicode code into weight according to collation */ - plane=(s_wc>>8) & 0xFF; - s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].tolower : s_wc; - } - - - /* Do the same for the second string */ - - if ((uchar) t[0] < 128) - { - /* Convert single byte character into weight */ - t_wc= plane00[(uchar) t[0]].tolower; - t++; - } - else - { - int plane; - int res=my_utf8_uni(cs,&t_wc, (const uchar*)t, (const uchar*) t + 3); - if (res <= 0) - return strcmp(s, t); - t+= res; - - /* Convert code into weight */ - plane=(t_wc>>8) & 0xFF; - t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].tolower : t_wc; - } - - /* Now we have two weights, let's compare them */ - if ( s_wc != t_wc ) - return ((int) s_wc) - ((int) t_wc); - } - return ((int)(uchar)s[0]) - ((int) (uchar) t[0]); -} - - -static -int my_wildcmp_utf8(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many) -{ - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - return my_wildcmp_unicode(cs,str,str_end,wildstr,wildend, - escape,w_one,w_many,uni_plane); -} - - -static -size_t my_strnxfrmlen_utf8(CHARSET_INFO *cs __attribute__((unused)), - size_t len) -{ - return (len * 2 + 2) / 3; -} - - -static uint my_ismbchar_utf8(CHARSET_INFO *cs,const char *b, const char *e) -{ - my_wc_t wc; - int res= my_utf8_uni(cs,&wc, (const uchar*)b, (const uchar*)e); - return (res>1) ? res : 0; -} - -static uint my_mbcharlen_utf8(CHARSET_INFO *cs __attribute__((unused)), - uint c) -{ - if (c < 0x80) - return 1; - else if (c < 0xc2) - return 0; /* Illegal mb head */ - else if (c < 0xe0) - return 2; - else if (c < 0xf0) - return 3; -#ifdef UNICODE_32BIT - else if (c < 0xf8) - return 4; - else if (c < 0xfc) - return 5; - else if (c < 0xfe) - return 6; -#endif - return 0; /* Illegal mb head */; -} - - -static MY_COLLATION_HANDLER my_collation_ci_handler = -{ - NULL, /* init */ - my_strnncoll_utf8, - my_strnncollsp_utf8, - my_strnxfrm_unicode, - my_strnxfrmlen_utf8, - my_like_range_mb, - my_wildcmp_utf8, - my_strcasecmp_utf8, - my_instr_mb, - my_hash_sort_utf8, - my_propagate_complex -}; - -MY_CHARSET_HANDLER my_charset_utf8_handler= -{ - NULL, /* init */ - my_ismbchar_utf8, - my_mbcharlen_utf8, - my_numchars_mb, - my_charpos_mb, - my_well_formed_len_mb, - my_lengthsp_8bit, - my_numcells_mb, - my_utf8_uni, - my_uni_utf8, - my_mb_ctype_mb, - my_caseup_str_utf8, - my_casedn_str_utf8, - my_caseup_utf8, - my_casedn_utf8, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_strtoll10_8bit, - my_strntoull10rnd_8bit, - my_scan_8bit -}; - - - -CHARSET_INFO my_charset_utf8_general_ci= -{ - 33,0,0, /* number */ - MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE, /* state */ - "utf8", /* cs name */ - "utf8_general_ci", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_utf8, /* ctype */ - to_lower_utf8, /* to_lower */ - to_upper_utf8, /* to_upper */ - to_upper_utf8, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_ci_handler -}; - - -CHARSET_INFO my_charset_utf8_bin= -{ - 83,0,0, /* number */ - MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_UNICODE, /* state */ - "utf8", /* cs name */ - "utf8_bin", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_utf8, /* ctype */ - to_lower_utf8, /* to_lower */ - to_upper_utf8, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_mb_bin_handler -}; - -#ifdef HAVE_UTF8_GENERAL_CS - -/* - * These functions bacically do the same as their original, except - * that they return 0 only when two comparing unicode strings are - * strictly the same in case-sensitive way. See "save_diff" local - * variable to what they actually do. - */ - -static int my_strnncoll_utf8_cs(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - int s_res,t_res; - my_wc_t s_wc,t_wc; - const uchar *se=s+slen; - const uchar *te=t+tlen; - int save_diff = 0; - int diff; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - - while ( s < se && t < te ) - { - int plane; - s_res=my_utf8_uni(cs,&s_wc, s, se); - t_res=my_utf8_uni(cs,&t_wc, t, te); - - if ( s_res <= 0 || t_res <= 0 ) - - { - /* Incorrect string, compare by char value */ - return ((int)s[0]-(int)t[0]); - } - - if ( save_diff == 0 ) - { - save_diff = ((int)s_wc) - ((int)t_wc); - } - plane=(s_wc>>8) & 0xFF; - s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].sort : s_wc; - plane=(t_wc>>8) & 0xFF; - t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].sort : t_wc; - if ( s_wc != t_wc ) - { - return ((int) s_wc) - ((int) t_wc); - } - - s+=s_res; - t+=t_res; - } - diff = ( (se-s) - (te-t) ); - return t_is_prefix ? t-te : ((diff == 0) ? save_diff : diff); -} - -static int my_strnncollsp_utf8_cs(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference) -{ - int s_res, t_res, res; - my_wc_t s_wc, t_wc; - const uchar *se= s + slen; - const uchar *te= t + tlen; - int save_diff= 0; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= 0; -#endif - - while ( s < se && t < te ) - { - int plane; - s_res=my_utf8_uni(cs,&s_wc, s, se); - t_res=my_utf8_uni(cs,&t_wc, t, te); - - if ( s_res <= 0 || t_res <= 0 ) - { - /* Incorrect string, compare by char value */ - return ((int)s[0]-(int)t[0]); - } - - if ( save_diff == 0 ) - { - save_diff = ((int)s_wc) - ((int)t_wc); - } - plane=(s_wc>>8) & 0xFF; - s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].sort : s_wc; - plane=(t_wc>>8) & 0xFF; - t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].sort : t_wc; - if ( s_wc != t_wc ) - { - return ((int) s_wc) - ((int) t_wc); - } - - s+=s_res; - t+=t_res; - } - - slen= se-s; - tlen= te-t; - res= 0; - - if (slen != tlen) - { - int swap= 1; - if (diff_if_only_endspace_difference) - res= 1; /* Assume 'a' is bigger */ - if (slen < tlen) - { - slen= tlen; - s= t; - se= te; - swap= -1; - res= -res; - } - /* - This following loop uses the fact that in UTF-8 - all multibyte characters are greater than space, - and all multibyte head characters are greater than - space. It means if we meet a character greater - than space, it always means that the longer string - is greater. So we can reuse the same loop from the - 8bit version, without having to process full multibute - sequences. - */ - for ( ; s < se; s++) - { - if (*s != (uchar) ' ') - return (*s < (uchar) ' ') ? -swap : swap; - } - } - return save_diff; -} - -static MY_COLLATION_HANDLER my_collation_cs_handler = -{ - NULL, /* init */ - my_strnncoll_utf8_cs, - my_strnncollsp_utf8_cs, - my_strnxfrm_unicode, - my_strnxfrmlen_utf8, - my_like_range_simple, - my_wildcmp_mb, - my_strcasecmp_utf8, - my_instr_mb, - my_hash_sort_utf8, - my_propagate_simple -}; - -CHARSET_INFO my_charset_utf8_general_cs= -{ - 254,0,0, /* number */ - MY_CS_COMPILED|MY_CS_UNICODE, /* state */ - "utf8", /* cs name */ - "utf8_general_cs", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_utf8, /* ctype */ - to_lower_utf8, /* to_lower */ - to_upper_utf8, /* to_upper */ - to_upper_utf8, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 3, /* mbmaxlen */ - 0, /* min_sort_char */ - 255, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8_handler, - &my_collation_cs_handler -}; -#endif /* Cybozu Hack */ - - -/* - File system encoding components: - -Code range Pattern Number Used Unused Blocks ------------------------------------------------------------------------------ -00C0..017F [.][0..4][g..z] 5*20= 100 97 3 Latin1 Supplement + Ext A -0370..03FF [.][5..9][g..z] 5*20= 100 88 12 Greek + Coptic -0400..052F [.][g..z][0..6] 20*7= 140 140 137 Cyrillic -0530..058F [.][g..z][7..8] 20*2= 40 38 2 Armenian -2160..217F [.][g..z][9] 20*1= 20 16 4 Number Forms -0180..02AF [.][g..z][a..k] 28*11=220 203 17 Latin Ext B + IPA -1E00..0EFF [.][g..z][l..r] 20*7= 140 136 4 Latin Additional Extended -1F00..1FFF [.][g..z][s..z] 20*8= 160 144 16 Greek Extended -.... .... [.][a..f][g..z] 6*20= 120 0 120 RESERVED -24B6..24E9 [.][@][a..z] 26 26 0 Enclosed Alphanumerics -FF21..FF5A [.][a..z][@] 26 26 0 Full Width forms - -All other characters are encoded using five bytes: - -[.][0..9a..z][0..9a..z][0..9a..z][0..9a..z] - -*/ - - -static uint16 touni[5994]= -{ - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00C0, - 0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,0x00C8, - 0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,0x00D0, - 0x00D1,0x00D2,0x00D3,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00E0, - 0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,0x00E8, - 0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,0x00F0, - 0x00F1,0x00F2,0x00F3,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00D4, - 0x00D5,0x00D6,0x0000,0x00D8,0x00D9,0x00DA,0x00DB,0x00DC, - 0x00DD,0x00DE,0x0178,0x0100,0x0102,0x0104,0x0106,0x0108, - 0x010A,0x010C,0x010E,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00F4, - 0x00F5,0x00F6,0x00DF,0x00F8,0x00F9,0x00FA,0x00FB,0x00FC, - 0x00FD,0x00FE,0x00FF,0x0101,0x0103,0x0105,0x0107,0x0109, - 0x010B,0x010D,0x010F,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0110, - 0x0112,0x0114,0x0116,0x0118,0x011A,0x011C,0x011E,0x0120, - 0x0122,0x0124,0x0126,0x0128,0x012A,0x012C,0x012E,0x0000, - 0x0132,0x0134,0x0136,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0111, - 0x0113,0x0115,0x0117,0x0119,0x011B,0x011D,0x011F,0x0121, - 0x0123,0x0125,0x0127,0x0129,0x012B,0x012D,0x012F,0x0131, - 0x0133,0x0135,0x0137,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0139,0x013B,0x013D,0x013F,0x0141,0x0143,0x0145,0x0147, - 0x0000,0x014A,0x014C,0x014E,0x0150,0x0152,0x0154,0x0156, - 0x0158,0x015A,0x015C,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0138, - 0x013A,0x013C,0x013E,0x0140,0x0142,0x0144,0x0146,0x0148, - 0x0149,0x014B,0x014D,0x014F,0x0151,0x0153,0x0155,0x0157, - 0x0159,0x015B,0x015D,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x015E, - 0x0160,0x0162,0x0164,0x0166,0x0168,0x016A,0x016C,0x016E, - 0x0170,0x0172,0x0174,0x0176,0x0179,0x017B,0x017D,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x015F, - 0x0161,0x0163,0x0165,0x0167,0x0169,0x016B,0x016D,0x016F, - 0x0171,0x0173,0x0175,0x0177,0x017A,0x017C,0x017E,0x017F, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0390,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0386, - 0x0388,0x0389,0x038A,0x0000,0x0391,0x0000,0x0393,0x0394, - 0x0395,0x0396,0x0397,0x0000,0x0399,0x0000,0x039B,0x039C, - 0x039D,0x039E,0x039F,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03AC, - 0x03AD,0x03AE,0x03AF,0x03B0,0x03B1,0x03B2,0x03B3,0x03B4, - 0x03B5,0x03B6,0x03B7,0x03B8,0x03B9,0x03BA,0x03BB,0x03BC, - 0x03BD,0x03BE,0x03BF,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x03A1,0x0000,0x0000,0x03A4,0x03A5,0x0000,0x03A7,0x03A8, - 0x03A9,0x03AA,0x03AB,0x038C,0x038E,0x038F,0x0000,0x0392, - 0x0398,0x03D2,0x03D3,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03C0, - 0x03C1,0x03C2,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8, - 0x03C9,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,0x0000,0x03D0, - 0x03D1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03D4, - 0x03A6,0x03A0,0x0000,0x0000,0x03DA,0x03DC,0x03DE,0x03E0, - 0x03E2,0x03E4,0x03E6,0x03E8,0x03EA,0x03EC,0x03EE,0x039A, - 0x0000,0x03A3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x03D5,0x03D6,0x03D7,0x03D9,0x03DB,0x03DD,0x03DF,0x03E1, - 0x03E3,0x03E5,0x03E7,0x03E9,0x03EB,0x03ED,0x03EF,0x03F0, - 0x03F1,0x03F2,0x03F3,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x03FD,0x03FE,0x03FF,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03F5, - 0x03F6,0x03F8,0x03FB,0x03FC,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x24B6,0x24B7,0x24B8,0x24B9,0x24BA,0x24BB,0x24BC, - 0x24BD,0x24BE,0x24BF,0x24C0,0x24C1,0x24C2,0x24C3,0x24C4, - 0x24C5,0x24C6,0x24C7,0x24C8,0x24C9,0x24CA,0x24CB,0x24CC, - 0x24CD,0x24CE,0x24CF,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x24D0,0x24D1,0x24D2,0x24D3,0x24D4,0x24D5,0x24D6, - 0x24D7,0x24D8,0x24D9,0x24DA,0x24DB,0x24DC,0x24DD,0x24DE, - 0x24DF,0x24E0,0x24E1,0x24E2,0x24E3,0x24E4,0x24E5,0x24E6, - 0x24E7,0x24E8,0x24E9,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF21,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF22,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF23,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF24,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF25,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF26,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0410,0x0424,0x0408,0x0478,0x04A6,0x04CD,0x04F4,0x0000, - 0x0544,0x2160,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF27,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x01B3,0x01DE,0x0208,0x0230,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x1E00,0x1E28,0x1E50,0x1E78, - 0x1E60,0x1EBE,0x1EE6,0x1F08,0x1F2A,0x0000,0x1F6C,0x1F88, - 0x1FAC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0411,0x0425,0x0409,0x047A,0x04A8,0x0000,0x04F6,0x0531, - 0x0545,0x2161,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF28,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0182,0x01B5,0x01E0,0x020A,0x0232,0x0000,0x0000, - 0x019D,0x0000,0x0000,0x0000,0x1E02,0x1E2A,0x1E52,0x1E7A, - 0x0000,0x1EC0,0x1EE8,0x1F09,0x1F2B,0x0000,0x1F6D,0x1F89, - 0x1FAD,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0412,0x0426,0x040A,0x047C,0x04AA,0x04D0,0x04F8,0x0532, - 0x0546,0x2162,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF29,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0184,0x01B8,0x01E2,0x020C,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x1E04,0x1E2C,0x1E54,0x1E7C, - 0x0000,0x1EC2,0x1EEA,0x1F0A,0x1F2C,0x0000,0x1F6E,0x1F8A, - 0x1FAE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0413,0x0427,0x040B,0x047E,0x04AC,0x04D2,0x0000,0x0533, - 0x0547,0x2163,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF2A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0187,0x0000,0x01E4,0x020E,0x0000,0x0000,0x0193, - 0x0000,0x01AE,0x0000,0x0000,0x1E06,0x1E2E,0x1E56,0x1E7E, - 0x0000,0x1EC4,0x1EEC,0x1F0B,0x1F2D,0x0000,0x1F6F,0x1F8B, - 0x1FAF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0414,0x0428,0x040C,0x0480,0x04AE,0x04D4,0x0000,0x0534, - 0x0548,0x2164,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF2B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x018B,0x0000,0x01E6,0x0210,0x0000,0x0000,0x0000, - 0x019F,0x0000,0x0000,0x0000,0x1E08,0x1E30,0x1E58,0x1E80, - 0x0000,0x1EC6,0x1EEE,0x1F0C,0x1F2E,0x0000,0x1FBA,0x1F8C, - 0x1FB8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0415,0x0429,0x040D,0x0000,0x04B0,0x04D6,0x0000,0x0535, - 0x0549,0x2165,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF2C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x01E8,0x0212,0x0000,0x0000,0x0000, - 0x0000,0x01B1,0x0000,0x0000,0x1E0A,0x1E32,0x1E5A,0x1E82, - 0x1EA0,0x1EC8,0x1EF0,0x1F0D,0x1F2F,0x1F59,0x1FBB,0x1F8D, - 0x1FB9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0416,0x042A,0x040E,0x048A,0x04B2,0x04D8,0x0000,0x0536, - 0x054A,0x2166,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF2D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0191,0x0000,0x01EA,0x0214,0x0000,0x0000,0x0194, - 0x0000,0x01B2,0x0000,0x0000,0x1E0C,0x1E34,0x1E5C,0x1E84, - 0x1EA2,0x1ECA,0x1EF2,0x1F0E,0x1F38,0x0000,0x1FC8,0x1F8E, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0417,0x042B,0x040F,0x048C,0x04B4,0x04DA,0x0000,0x0537, - 0x054B,0x2167,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01F6,0x01BC,0x01EC,0x0216,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x1E0E,0x1E36,0x1E5E,0x1E86, - 0x1EA4,0x1ECC,0x1EF4,0x1F0F,0x1F39,0x1F5B,0x1FC9,0x1F8F, - 0x1FBC,0x1FE8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0418,0x042C,0x0460,0x048E,0x04B6,0x04DC,0x0000,0x0538, - 0x054C,0x2168,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF2F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0198,0x01C4,0x01EE,0x0218,0x023A,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x1E10,0x1E38,0x0000,0x1E88, - 0x1EA6,0x1ECE,0x1EF6,0x1F18,0x1F3A,0x0000,0x1FCA,0x1F98, - 0x0000,0x1FE9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0419,0x042D,0x0462,0x0490,0x04B8,0x04DE,0x0500,0x0539, - 0x054D,0x2169,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x023D,0x01C7,0x0000,0x021A,0x023B,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x1E12,0x1E3A,0x1E62,0x1E8A, - 0x1EA8,0x1ED0,0x1EF8,0x1F19,0x1F3B,0x1F5D,0x1FCB,0x1F99, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x041A,0x042E,0x0464,0x0492,0x04BA,0x04E0,0x0502,0x053A, - 0x054E,0x216A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF31,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x01CA,0x01F1,0x021C,0x023E,0x0181,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x1E14,0x1E3C,0x1E64,0x1E8C, - 0x1EAA,0x1ED2,0x0000,0x1F1A,0x1F3C,0x0000,0x1FDA,0x1F9A, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x041B,0x042F,0x0466,0x0494,0x04BC,0x04E2,0x0504,0x053B, - 0x054F,0x216B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF32,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0220,0x01CD,0x01F4,0x021E,0x0000,0x0186,0x0197, - 0x0000,0x0000,0x0000,0x0000,0x1E16,0x1E3E,0x1E66,0x1E8E, - 0x1EAC,0x1ED4,0x0000,0x1F1B,0x1F3D,0x1F5F,0x1FDB,0x1F9B, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x041C,0x0400,0x0468,0x0496,0x04BE,0x04E4,0x0506,0x053C, - 0x0550,0x216C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01A0,0x01CF,0x01F8,0x0000,0x0000,0x0000,0x0196, - 0x0000,0x0000,0x0000,0x0000,0x1E18,0x1E40,0x1E68,0x1E90, - 0x1EAE,0x1ED6,0x0000,0x1F1C,0x1F3E,0x0000,0x1FF8,0x1F9C, - 0x0000,0x1FEC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x041D,0x0401,0x046A,0x0498,0x04C0,0x04E6,0x0508,0x053D, - 0x0551,0x216D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01A2,0x01D1,0x01FA,0x0222,0x0000,0x0189,0x0000, - 0x0000,0x01B7,0x0000,0x0000,0x1E1A,0x1E42,0x1E6A,0x1E92, - 0x1EB0,0x1ED8,0x0000,0x1F1D,0x1F3F,0x0000,0x1FF9,0x1F9D, - 0x1FCC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x041E,0x0402,0x046C,0x049A,0x04C1,0x04E8,0x050A,0x053E, - 0x0552,0x216E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF35,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01A4,0x01D3,0x01FC,0x0224,0x0000,0x018A,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x1E1C,0x1E44,0x1E6C,0x1E94, - 0x1EB2,0x1EDA,0x0000,0x0000,0x1F48,0x0000,0x1FEA,0x1F9E, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x041F,0x0403,0x046E,0x049C,0x04C3,0x04EA,0x050C,0x053F, - 0x0553,0x216F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF36,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01A7,0x01D5,0x01FE,0x0226,0x0000,0x0000,0x0000, - 0x01A6,0x0241,0x0000,0x0000,0x1E1E,0x1E46,0x1E6E,0x0000, - 0x1EB4,0x1EDC,0x0000,0x0000,0x1F49,0x0000,0x1FEB,0x1F9F, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0420,0x0404,0x0470,0x049E,0x04C5,0x04EC,0x050E,0x0540, - 0x0554,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF37,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x01D7,0x0200,0x0228,0x0000,0x018F,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x1E20,0x1E48,0x1E70,0x0000, - 0x1EB6,0x1EDE,0x0000,0x0000,0x1F4A,0x1F68,0x1FFA,0x1FA8, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0421,0x0405,0x0472,0x04A0,0x04C7,0x04EE,0x0000,0x0541, - 0x0555,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF38,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x01D9,0x0202,0x022A,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x1E22,0x1E4A,0x1E72,0x0000, - 0x1EB8,0x1EE0,0x0000,0x0000,0x1F4B,0x1F69,0x1FFB,0x1FA9, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0422,0x0406,0x0474,0x04A2,0x04C9,0x04F0,0x0000,0x0542, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF39,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01AC,0x01DB,0x0204,0x022C,0x0000,0x0190,0x019C, - 0x01A9,0x0000,0x0000,0x0000,0x1E24,0x1E4C,0x1E74,0x0000, - 0x1EBA,0x1EE2,0x0000,0x1F28,0x1F4C,0x1F6A,0x0000,0x1FAA, - 0x1FD8,0x1FFC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0423,0x0407,0x0476,0x04A4,0x04CB,0x04F2,0x0000,0x0543, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF3A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01AF,0x018E,0x0206,0x022E,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x1E26,0x1E4E,0x1E76,0x0000, - 0x1EBC,0x1EE4,0x0000,0x1F29,0x1F4D,0x1F6B,0x0000,0x1FAB, - 0x1FD9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF41,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF42,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF43,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF44,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF45,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF46,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0430,0x0444,0x0458,0x0479,0x04A7,0x04CE,0x04F5,0x0000, - 0x0574,0x2170,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF47,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0180,0x01B4,0x01DF,0x0209,0x0231,0x0000,0x025D, - 0x0271,0x0285,0x0299,0x02AD,0x1E01,0x1E29,0x1E51,0x1E79, - 0x1E9B,0x1EBF,0x1EE7,0x1F00,0x1F22,0x0000,0x1F64,0x1F80, - 0x1FA4,0x1FD2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0431,0x0445,0x0459,0x047B,0x04A9,0x0000,0x04F7,0x0561, - 0x0575,0x2171,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF48,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0183,0x01B6,0x01E1,0x020B,0x0233,0x0000,0x025E, - 0x0272,0x0286,0x029A,0x02AE,0x1E03,0x1E2B,0x1E53,0x1E7B, - 0x0000,0x1EC1,0x1EE9,0x1F01,0x1F23,0x0000,0x1F65,0x1F81, - 0x1FA5,0x1FD3,0x1FF6,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0432,0x0446,0x045A,0x047D,0x04AB,0x04D1,0x04F9,0x0562, - 0x0576,0x2172,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0185,0x01B9,0x01E3,0x020D,0x0234,0x0000,0x025F, - 0x0273,0x0287,0x029B,0x02AF,0x1E05,0x1E2D,0x1E55,0x1E7D, - 0x0000,0x1EC3,0x1EEB,0x1F02,0x1F24,0x0000,0x1F66,0x1F82, - 0x1FA6,0x0000,0x1FF7,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0433,0x0447,0x045B,0x047F,0x04AD,0x04D3,0x0000,0x0563, - 0x0577,0x2173,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF4A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0188,0x01BA,0x01E5,0x020F,0x0235,0x0000,0x0260, - 0x0274,0x0288,0x029C,0x0000,0x1E07,0x1E2F,0x1E57,0x1E7F, - 0x0000,0x1EC5,0x1EED,0x1F03,0x1F25,0x0000,0x1F67,0x1F83, - 0x1FA7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0434,0x0448,0x045C,0x0481,0x04AF,0x04D5,0x0000,0x0564, - 0x0578,0x2174,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF4B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x018C,0x01BB,0x01E7,0x0211,0x0236,0x0000,0x0261, - 0x0275,0x0289,0x029D,0x0000,0x1E09,0x1E31,0x1E59,0x1E81, - 0x0000,0x1EC7,0x1EEF,0x1F04,0x1F26,0x1F50,0x1F70,0x1F84, - 0x1FB0,0x1FD6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0435,0x0449,0x045D,0x0000,0x04B1,0x04D7,0x0000,0x0565, - 0x0579,0x2175,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF4C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x018D,0x0000,0x01E9,0x0213,0x0237,0x0000,0x0262, - 0x0276,0x028A,0x029E,0x0000,0x1E0B,0x1E33,0x1E5B,0x1E83, - 0x1EA1,0x1EC9,0x1EF1,0x1F05,0x1F27,0x1F51,0x1F71,0x1F85, - 0x1FB1,0x1FD7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0436,0x044A,0x045E,0x048B,0x04B3,0x04D9,0x0000,0x0566, - 0x057A,0x2176,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF4D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0192,0x01BE,0x01EB,0x0215,0x0238,0x0000,0x0263, - 0x0277,0x028B,0x029F,0x0000,0x1E0D,0x1E35,0x1E5D,0x1E85, - 0x1EA3,0x1ECB,0x1EF3,0x1F06,0x1F30,0x1F52,0x1F72,0x1F86, - 0x1FB2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0437,0x044B,0x045F,0x048D,0x04B5,0x04DB,0x0000,0x0567, - 0x057B,0x2177,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF4E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0195,0x01BD,0x01ED,0x0217,0x0239,0x0250,0x0264, - 0x0278,0x028C,0x02A0,0x0000,0x1E0F,0x1E37,0x1E5F,0x1E87, - 0x1EA5,0x1ECD,0x1EF5,0x1F07,0x1F31,0x1F53,0x1F73,0x1F87, - 0x1FB3,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0438,0x044C,0x0461,0x048F,0x04B7,0x04DD,0x0000,0x0568, - 0x057C,0x2178,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF4F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0199,0x01C6,0x01EF,0x0219,0x0000,0x0251,0x0265, - 0x0279,0x028D,0x02A1,0x0000,0x1E11,0x1E39,0x1E61,0x1E89, - 0x1EA7,0x1ECF,0x1EF7,0x1F10,0x1F32,0x1F54,0x1F74,0x1F90, - 0x1FB4,0x1FE1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0439,0x044D,0x0463,0x0491,0x04B9,0x04DF,0x0501,0x0569, - 0x057D,0x2179,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF50,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x019A,0x01C9,0x01F0,0x021B,0x023C,0x0252,0x0266, - 0x027A,0x028E,0x02A2,0x0000,0x1E13,0x1E3B,0x1E63,0x1E8B, - 0x1EA9,0x1ED1,0x1EF9,0x1F11,0x1F33,0x1F55,0x1F75,0x1F91, - 0x0000,0x1FE2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x043A,0x044E,0x0465,0x0493,0x04BB,0x04E1,0x0503,0x056A, - 0x057E,0x217A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x019B,0x01CC,0x01F3,0x021D,0x0000,0x0253,0x0267, - 0x027B,0x028F,0x02A3,0x0000,0x1E15,0x1E3D,0x1E65,0x1E8D, - 0x1EAB,0x1ED3,0x0000,0x1F12,0x1F34,0x1F56,0x1F76,0x1F92, - 0x1FB6,0x1FE3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x043B,0x044F,0x0467,0x0495,0x04BD,0x04E3,0x0505,0x056B, - 0x057F,0x217B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF52,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x019E,0x01CE,0x01F5,0x021F,0x023F,0x0254,0x0268, - 0x027C,0x0290,0x02A4,0x0000,0x1E17,0x1E3F,0x1E67,0x1E8F, - 0x1EAD,0x1ED5,0x0000,0x1F13,0x1F35,0x1F57,0x1F77,0x1F93, - 0x1FB7,0x1FE4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x043C,0x0450,0x0469,0x0497,0x04BF,0x04E5,0x0507,0x056C, - 0x0580,0x217C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF53,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01A1,0x01D0,0x01F9,0x0221,0x0240,0x0255,0x0269, - 0x027D,0x0291,0x02A5,0x0000,0x1E19,0x1E41,0x1E69,0x1E91, - 0x1EAF,0x1ED7,0x0000,0x1F14,0x1F36,0x0000,0x1F78,0x1F94, - 0x1FC2,0x1FE5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x043D,0x0451,0x046B,0x0499,0x0000,0x04E7,0x0509,0x056D, - 0x0581,0x217D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF54,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01A3,0x01D2,0x01FB,0x0223,0x0000,0x0256,0x026A, - 0x027E,0x0292,0x02A6,0x0000,0x1E1B,0x1E43,0x1E6B,0x1E93, - 0x1EB1,0x1ED9,0x0000,0x1F15,0x1F37,0x0000,0x1F79,0x1F95, - 0x1FC3,0x1FE6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x043E,0x0452,0x046D,0x049B,0x04C2,0x04E9,0x050B,0x056E, - 0x0582,0x217E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01A5,0x01D4,0x01FD,0x0225,0x0000,0x0257,0x026B, - 0x027F,0x0293,0x02A7,0x0000,0x1E1D,0x1E45,0x1E6D,0x1E95, - 0x1EB3,0x1EDB,0x0000,0x0000,0x1F40,0x0000,0x1F7A,0x1F96, - 0x1FC4,0x1FE7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x043F,0x0453,0x046F,0x049D,0x04C4,0x04EB,0x050D,0x056F, - 0x0583,0x217F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF56,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01A8,0x01D6,0x01FF,0x0227,0x0000,0x0258,0x026C, - 0x0280,0x0294,0x02A8,0x0000,0x1E1F,0x1E47,0x1E6F,0x1E96, - 0x1EB5,0x1EDD,0x0000,0x0000,0x1F41,0x0000,0x1F7B,0x1F97, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0440,0x0454,0x0471,0x049F,0x04C6,0x04ED,0x050F,0x0570, - 0x0584,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF57,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01AA,0x01D8,0x0201,0x0229,0x0000,0x0259,0x026D, - 0x0281,0x0295,0x02A9,0x0000,0x1E21,0x1E49,0x1E71,0x1E97, - 0x1EB7,0x1EDF,0x0000,0x0000,0x1F42,0x1F60,0x1F7C,0x1FA0, - 0x1FC6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0441,0x0455,0x0473,0x04A1,0x04C8,0x04EF,0x0000,0x0571, - 0x0585,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF58,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01AB,0x01DA,0x0203,0x022B,0x0000,0x025A,0x026E, - 0x0282,0x0296,0x02AA,0x0000,0x1E23,0x1E4B,0x1E73,0x1E98, - 0x1EB9,0x1EE1,0x0000,0x0000,0x1F43,0x1F61,0x1F7D,0x1FA1, - 0x1FC7,0x1FF2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0442,0x0456,0x0475,0x04A3,0x04CA,0x04F1,0x0000,0x0572, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF59,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01AD,0x01DC,0x0205,0x022D,0x0000,0x025B,0x026F, - 0x0283,0x0297,0x02AB,0x0000,0x1E25,0x1E4D,0x1E75,0x1E99, - 0x1EBB,0x1EE3,0x0000,0x1F20,0x1F44,0x1F62,0x0000,0x1FA2, - 0x1FD0,0x1FF3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0443,0x0457,0x0477,0x04A5,0x04CC,0x04F3,0x0000,0x0573, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0xFF5A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x01B0,0x01DD,0x0207,0x022F,0x0000,0x025C,0x0270, - 0x0284,0x0298,0x02AC,0x0000,0x1E27,0x1E4F,0x1E77,0x1E9A, - 0x1EBD,0x1EE5,0x0000,0x1F21,0x1F45,0x1F63,0x0000,0x1FA3, - 0x1FD1,0x1FF4 -}; - - -/* 00C0-05FF */ -static uint16 uni_0C00_05FF[1344]= -{ - 0x0017,0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E, - 0x001F,0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026, - 0x0027,0x0028,0x0029,0x002A,0x0067,0x0068,0x0069,0x0000, - 0x006B,0x006C,0x006D,0x006E,0x006F,0x0070,0x0071,0x008A, - 0x0037,0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E, - 0x003F,0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046, - 0x0047,0x0048,0x0049,0x004A,0x0087,0x0088,0x0089,0x0000, - 0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,0x0092, - 0x0073,0x0093,0x0074,0x0094,0x0075,0x0095,0x0076,0x0096, - 0x0077,0x0097,0x0078,0x0098,0x0079,0x0099,0x007A,0x009A, - 0x00B7,0x00D7,0x00B8,0x00D8,0x00B9,0x00D9,0x00BA,0x00DA, - 0x00BB,0x00DB,0x00BC,0x00DC,0x00BD,0x00DD,0x00BE,0x00DE, - 0x00BF,0x00DF,0x00C0,0x00E0,0x00C1,0x00E1,0x00C2,0x00E2, - 0x00C3,0x00E3,0x00C4,0x00E4,0x00C5,0x00E5,0x00C6,0x00E6, - 0x0000,0x00E7,0x00C8,0x00E8,0x00C9,0x00E9,0x00CA,0x00EA, - 0x0127,0x0108,0x0128,0x0109,0x0129,0x010A,0x012A,0x010B, - 0x012B,0x010C,0x012C,0x010D,0x012D,0x010E,0x012E,0x010F, - 0x012F,0x0130,0x0111,0x0131,0x0112,0x0132,0x0113,0x0133, - 0x0114,0x0134,0x0115,0x0135,0x0116,0x0136,0x0117,0x0137, - 0x0118,0x0138,0x0119,0x0139,0x011A,0x013A,0x0157,0x0177, - 0x0158,0x0178,0x0159,0x0179,0x015A,0x017A,0x015B,0x017B, - 0x015C,0x017C,0x015D,0x017D,0x015E,0x017E,0x015F,0x017F, - 0x0160,0x0180,0x0161,0x0181,0x0162,0x0182,0x0163,0x0183, - 0x0072,0x0164,0x0184,0x0165,0x0185,0x0166,0x0186,0x0187, - 0x1161,0x0A86,0x07B1,0x11B1,0x0801,0x1201,0x0AD6,0x0851, - 0x1251,0x0B76,0x0BC6,0x08A1,0x12A1,0x12F1,0x0D52,0x0C66, - 0x0D06,0x0941,0x1341,0x0857,0x0947,0x1391,0x0B27,0x0AD7, - 0x09E1,0x13E1,0x1431,0x1481,0x0D07,0x07B8,0x14D1,0x08A8, - 0x0B21,0x1521,0x0B71,0x1571,0x0BC1,0x15C1,0x0C18,0x0C11, - 0x1611,0x0D08,0x1661,0x16B1,0x0D01,0x1701,0x0859,0x0D51, - 0x1751,0x08F9,0x0949,0x0762,0x1162,0x07B2,0x11B2,0x0B79, - 0x0802,0x1202,0x1252,0x12A2,0x0992,0x1392,0x1342,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x09E2,0x0000,0x13E2,0x0A32, - 0x0000,0x1432,0x0A82,0x0000,0x1482,0x0AD2,0x14D2,0x0B22, - 0x1522,0x0B72,0x1572,0x0BC2,0x15C2,0x0C12,0x1612,0x0C62, - 0x1662,0x0CB2,0x16B2,0x0D02,0x1702,0x1752,0x0763,0x1163, - 0x07B3,0x11B3,0x0803,0x1203,0x0853,0x1253,0x08A3,0x12A3, - 0x08F3,0x12F3,0x0943,0x1343,0x0993,0x1393,0x09E3,0x13E3, - 0x1433,0x0A83,0x0000,0x1483,0x0AD3,0x14D3,0x0991,0x0000, - 0x0B23,0x1523,0x0B73,0x1573,0x0BC3,0x15C3,0x0C13,0x1613, - 0x0C63,0x1663,0x0CB3,0x16B3,0x0D03,0x1703,0x0D53,0x1753, - 0x0764,0x1164,0x07B4,0x11B4,0x0804,0x1204,0x0854,0x1254, - 0x08A4,0x12A4,0x08F4,0x12F4,0x0944,0x1344,0x0994,0x1394, - 0x09E4,0x13E4,0x0A34,0x1434,0x0A84,0x1484,0x0AD4,0x14D4, - 0x0AD1,0x1524,0x0B74,0x1574,0x0BC4,0x15C4,0x0C14,0x1614, - 0x0C64,0x1664,0x0CB4,0x16B4,0x0D04,0x1704,0x0D54,0x1754, - 0x0765,0x1165,0x07B5,0x11B5,0x1205,0x1255,0x12A5,0x12F5, - 0x1345,0x1395,0x09E5,0x0A35,0x1435,0x0A31,0x0A85,0x14D5, - 0x1525,0x0C19,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x1396,0x13E6,0x1436,0x1486,0x14D6,0x1526,0x1576,0x15C6, - 0x1616,0x1666,0x16B6,0x1706,0x1756,0x1167,0x11B7,0x1207, - 0x1257,0x12A7,0x12F7,0x1347,0x1397,0x13E7,0x1437,0x1487, - 0x14D7,0x1527,0x1577,0x15C7,0x1617,0x1667,0x16B7,0x1707, - 0x1757,0x1168,0x11B8,0x1208,0x1258,0x12A8,0x12F8,0x1348, - 0x1398,0x13E8,0x1438,0x1488,0x14D8,0x1528,0x1578,0x15C8, - 0x1618,0x1668,0x16B8,0x1708,0x1758,0x1169,0x11B9,0x1209, - 0x1259,0x12A9,0x12F9,0x1349,0x1399,0x13E9,0x1439,0x1489, - 0x14D9,0x1529,0x1579,0x15C9,0x1619,0x1669,0x16B9,0x1709, - 0x1759,0x116A,0x11BA,0x120A,0x125A,0x12AA,0x12FA,0x134A, - 0x139A,0x13EA,0x143A,0x148A,0x14DA,0x152A,0x157A,0x15CA, - 0x161A,0x166A,0x16BA,0x170A,0x175A,0x116B,0x11BB,0x120B, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01F7,0x0000, - 0x01F8,0x01F9,0x01FA,0x0000,0x0253,0x0000,0x0254,0x0255, - 0x01D9,0x01FC,0x0257,0x01FE,0x01FF,0x0200,0x0201,0x0202, - 0x0258,0x0204,0x02A7,0x0206,0x0207,0x0208,0x0209,0x020A, - 0x0299,0x0248,0x0000,0x02A9,0x024B,0x024C,0x0298,0x024E, - 0x024F,0x0250,0x0251,0x0252,0x0217,0x0218,0x0219,0x021A, - 0x021B,0x021C,0x021D,0x021E,0x021F,0x0220,0x0221,0x0222, - 0x0223,0x0224,0x0225,0x0226,0x0227,0x0228,0x0229,0x022A, - 0x0267,0x0268,0x0269,0x026A,0x026B,0x026C,0x026D,0x026E, - 0x026F,0x0270,0x0271,0x0272,0x0273,0x0274,0x0275,0x0000, - 0x0277,0x0278,0x0259,0x025A,0x0297,0x02B8,0x02B9,0x02BA, - 0x0000,0x02BB,0x029C,0x02BC,0x029D,0x02BD,0x029E,0x02BE, - 0x029F,0x02BF,0x02A0,0x02C0,0x02A1,0x02C1,0x02A2,0x02C2, - 0x02A3,0x02C3,0x02A4,0x02C4,0x02A5,0x02C5,0x02A6,0x02C6, - 0x02C7,0x02C8,0x02C9,0x02CA,0x0000,0x0307,0x0308,0x0000, - 0x0309,0x0000,0x0000,0x030A,0x030B,0x02EC,0x02ED,0x02EE, - 0x0AF1,0x0B41,0x0B91,0x0BE1,0x0C31,0x0C81,0x0CD1,0x0D21, - 0x0732,0x0782,0x07D2,0x0822,0x0872,0x08C2,0x0912,0x0962, - 0x0730,0x0780,0x07D0,0x0820,0x0870,0x08C0,0x0910,0x0960, - 0x09B0,0x0A00,0x0A50,0x0AA0,0x0AF0,0x0B40,0x0B90,0x0BE0, - 0x0C30,0x0C80,0x0CD0,0x0D20,0x0731,0x0781,0x07D1,0x0821, - 0x0871,0x08C1,0x0911,0x0961,0x09B1,0x0A01,0x0A51,0x0AA1, - 0x1130,0x1180,0x11D0,0x1220,0x1270,0x12C0,0x1310,0x1360, - 0x13B0,0x1400,0x1450,0x14A0,0x14F0,0x1540,0x1590,0x15E0, - 0x1630,0x1680,0x16D0,0x1720,0x1131,0x1181,0x11D1,0x1221, - 0x1271,0x12C1,0x1311,0x1361,0x13B1,0x1401,0x1451,0x14A1, - 0x14F1,0x1541,0x1591,0x15E1,0x1631,0x1681,0x16D1,0x1721, - 0x1132,0x1182,0x11D2,0x1222,0x1272,0x12C2,0x1312,0x1362, - 0x09B2,0x13B2,0x0A02,0x1402,0x0A52,0x1452,0x0AA2,0x14A2, - 0x0AF2,0x14F2,0x0B42,0x1542,0x0B92,0x1592,0x0BE2,0x15E2, - 0x0C32,0x1632,0x0C82,0x1682,0x0CD2,0x16D2,0x0D22,0x1722, - 0x0733,0x1133,0x0783,0x1183,0x07D3,0x11D3,0x0823,0x1223, - 0x0873,0x1273,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0913,0x1313,0x0963,0x1363,0x09B3,0x13B3, - 0x0A03,0x1403,0x0A53,0x1453,0x0AA3,0x14A3,0x0AF3,0x14F3, - 0x0B43,0x1543,0x0B93,0x1593,0x0BE3,0x15E3,0x0C33,0x1633, - 0x0C83,0x1683,0x0CD3,0x16D3,0x0D23,0x1723,0x0734,0x1134, - 0x0784,0x1184,0x07D4,0x11D4,0x0824,0x1224,0x0874,0x1274, - 0x08C4,0x12C4,0x0914,0x1314,0x0964,0x1364,0x09B4,0x13B4, - 0x0A04,0x1404,0x0A54,0x1454,0x0AA4,0x14A4,0x0AF4,0x14F4, - 0x0B44,0x0B94,0x1594,0x0BE4,0x15E4,0x0C34,0x1634,0x0C84, - 0x1684,0x0CD4,0x16D4,0x0D24,0x1724,0x0735,0x1135,0x0000, - 0x07D5,0x11D5,0x0825,0x1225,0x0875,0x1275,0x08C5,0x12C5, - 0x0915,0x1315,0x0965,0x1365,0x09B5,0x13B5,0x0A05,0x1405, - 0x0A55,0x1455,0x0AA5,0x14A5,0x0AF5,0x14F5,0x0B45,0x1545, - 0x0B95,0x1595,0x0BE5,0x15E5,0x0C35,0x1635,0x0C85,0x1685, - 0x0CD5,0x16D5,0x0D25,0x1725,0x0736,0x1136,0x0786,0x1186, - 0x07D6,0x11D6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0A06,0x1406,0x0A56,0x1456,0x0AA6,0x14A6,0x0AF6,0x14F6, - 0x0B46,0x1546,0x0B96,0x1596,0x0BE6,0x15E6,0x0C36,0x1636, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0787,0x07D7,0x0827,0x0877,0x08C7,0x0917,0x0967, - 0x09B7,0x0A07,0x0A57,0x0AA7,0x0AF7,0x0B47,0x0B97,0x0BE7, - 0x0C37,0x0C87,0x0CD7,0x0D27,0x0738,0x0788,0x07D8,0x0828, - 0x0878,0x08C8,0x0918,0x0968,0x09B8,0x0A08,0x0A58,0x0AA8, - 0x0AF8,0x0B48,0x0B98,0x0BE8,0x0C38,0x0C88,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x1187,0x11D7,0x1227,0x1277,0x12C7,0x1317,0x1367, - 0x13B7,0x1407,0x1457,0x14A7,0x14F7,0x1547,0x1597,0x15E7, - 0x1637,0x1687,0x16D7,0x1727,0x1138,0x1188,0x11D8,0x1228, - 0x1278,0x12C8,0x1318,0x1368,0x13B8,0x1408,0x1458,0x14A8, - 0x14F8,0x1548,0x1598,0x15E8,0x1638,0x1688,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 -}; - - -/* 1E00-1FFF */ -static uint16 uni_1E00_1FFF[512]= -{ - 0x076C,0x116C,0x07BC,0x11BC,0x080C,0x120C,0x085C,0x125C, - 0x08AC,0x12AC,0x08FC,0x12FC,0x094C,0x134C,0x099C,0x139C, - 0x09EC,0x13EC,0x0A3C,0x143C,0x0A8C,0x148C,0x0ADC,0x14DC, - 0x0B2C,0x152C,0x0B7C,0x157C,0x0BCC,0x15CC,0x0C1C,0x161C, - 0x0C6C,0x166C,0x0CBC,0x16BC,0x0D0C,0x170C,0x0D5C,0x175C, - 0x076D,0x116D,0x07BD,0x11BD,0x080D,0x120D,0x085D,0x125D, - 0x08AD,0x12AD,0x08FD,0x12FD,0x094D,0x134D,0x099D,0x139D, - 0x09ED,0x13ED,0x0A3D,0x143D,0x0A8D,0x148D,0x0ADD,0x14DD, - 0x0B2D,0x152D,0x0B7D,0x157D,0x0BCD,0x15CD,0x0C1D,0x161D, - 0x0C6D,0x166D,0x0CBD,0x16BD,0x0D0D,0x170D,0x0D5D,0x175D, - 0x076E,0x116E,0x07BE,0x11BE,0x080E,0x120E,0x085E,0x125E, - 0x08AE,0x12AE,0x08FE,0x12FE,0x094E,0x134E,0x099E,0x139E, - 0x0770,0x13EE,0x0A3E,0x143E,0x0A8E,0x148E,0x0ADE,0x14DE, - 0x0B2E,0x152E,0x0B7E,0x157E,0x0BCE,0x15CE,0x0C1E,0x161E, - 0x0C6E,0x166E,0x0CBE,0x16BE,0x0D0E,0x170E,0x0D5E,0x175E, - 0x076F,0x116F,0x07BF,0x11BF,0x080F,0x120F,0x085F,0x125F, - 0x08AF,0x12AF,0x08FF,0x12FF,0x094F,0x134F,0x099F,0x139F, - 0x09EF,0x13EF,0x0A3F,0x143F,0x0A8F,0x148F,0x0ADF,0x14DF, - 0x0B2F,0x152F,0x0B7F,0x157F,0x0BCF,0x15CF,0x161F,0x166F, - 0x16BF,0x170F,0x175F,0x1170,0x0000,0x0000,0x0000,0x0000, - 0x0900,0x1300,0x0950,0x1350,0x09A0,0x13A0,0x09F0,0x13F0, - 0x0A40,0x1440,0x0A90,0x1490,0x0AE0,0x14E0,0x0B30,0x1530, - 0x0B80,0x1580,0x0BD0,0x15D0,0x0C20,0x1620,0x0C70,0x1670, - 0x0CC0,0x16C0,0x0D10,0x1710,0x0D60,0x1760,0x0771,0x1171, - 0x07C1,0x11C1,0x0811,0x1211,0x0861,0x1261,0x08B1,0x12B1, - 0x0901,0x1301,0x0951,0x1351,0x09A1,0x13A1,0x09F1,0x13F1, - 0x0A41,0x1441,0x0A91,0x1491,0x0AE1,0x14E1,0x0B31,0x1531, - 0x0B81,0x1581,0x0BD1,0x15D1,0x0C21,0x1621,0x0C71,0x1671, - 0x0CC1,0x16C1,0x0D11,0x1711,0x0D61,0x1761,0x0772,0x1172, - 0x07C2,0x11C2,0x0812,0x1212,0x0862,0x1262,0x08B2,0x12B2, - 0x0902,0x1302,0x0952,0x1352,0x09A2,0x13A2,0x09F2,0x13F2, - 0x0A42,0x1442,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x1173,0x11C3,0x1213,0x1263,0x12B3,0x1303,0x1353,0x13A3, - 0x0773,0x07C3,0x0813,0x0863,0x08B3,0x0903,0x0953,0x09A3, - 0x13F3,0x1443,0x1493,0x14E3,0x1533,0x1583,0x0000,0x0000, - 0x09F3,0x0A43,0x0A93,0x0AE3,0x0B33,0x0B83,0x0000,0x0000, - 0x1713,0x1763,0x1174,0x11C4,0x1214,0x1264,0x12B4,0x1304, - 0x0D13,0x0D63,0x0774,0x07C4,0x0814,0x0864,0x08B4,0x0904, - 0x1354,0x13A4,0x13F4,0x1444,0x1494,0x14E4,0x1534,0x1584, - 0x0954,0x09A4,0x09F4,0x0A44,0x0A94,0x0AE4,0x0B34,0x0B84, - 0x15D4,0x1624,0x1674,0x16C4,0x1714,0x1764,0x0000,0x0000, - 0x0BD4,0x0C24,0x0C74,0x0CC4,0x0D14,0x0D64,0x0000,0x0000, - 0x12B5,0x1305,0x1355,0x13A5,0x13F5,0x1445,0x1495,0x14E5, - 0x0000,0x0905,0x0000,0x09A5,0x0000,0x0A45,0x0000,0x0AE5, - 0x1675,0x16C5,0x1715,0x1765,0x1176,0x11C6,0x1216,0x1266, - 0x0C75,0x0CC5,0x0D15,0x0D65,0x0776,0x07C6,0x0816,0x0866, - 0x12B6,0x1306,0x1356,0x13A6,0x13F6,0x1446,0x1496,0x14E6, - 0x1536,0x1586,0x15D6,0x1626,0x1676,0x16C6,0x0000,0x0000, - 0x1177,0x11C7,0x1217,0x1267,0x12B7,0x1307,0x1357,0x13A7, - 0x0777,0x07C7,0x0817,0x0867,0x08B7,0x0907,0x0957,0x09A7, - 0x13F7,0x1447,0x1497,0x14E7,0x1537,0x1587,0x15D7,0x1627, - 0x09F7,0x0A47,0x0A97,0x0AE7,0x0B37,0x0B87,0x0BD7,0x0C27, - 0x1677,0x16C7,0x1717,0x1767,0x1178,0x11C8,0x1218,0x1268, - 0x0C77,0x0CC7,0x0D17,0x0D67,0x0778,0x07C8,0x0818,0x0868, - 0x12B8,0x1308,0x1358,0x13A8,0x13F8,0x0000,0x1498,0x14E8, - 0x08B8,0x0908,0x08B6,0x0906,0x09A8,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x1538,0x1588,0x15D8,0x0000,0x1678,0x16C8, - 0x0956,0x09A6,0x09F6,0x0A46,0x0B88,0x0000,0x0000,0x0000, - 0x1718,0x1768,0x1179,0x11C9,0x0000,0x0000,0x12B9,0x1309, - 0x0D18,0x0D68,0x0A96,0x0AE6,0x0000,0x0000,0x0000,0x0000, - 0x13A9,0x13F9,0x1449,0x1499,0x14E9,0x1539,0x1589,0x15D9, - 0x09A9,0x09F9,0x0BD6,0x0C26,0x0B39,0x0000,0x0000,0x0000, - 0x0000,0x0000,0x16C9,0x1719,0x0000,0x0000,0x11CA,0x121A, - 0x0B36,0x0B86,0x0C76,0x0CC6,0x0D19,0x0000,0x0000,0x0000 -}; - - -/* 2160-217F */ -static uint16 uni_2160_217F[32]= -{ - 0x0739,0x0789,0x07D9,0x0829,0x0879,0x08C9,0x0919,0x0969, - 0x09B9,0x0A09,0x0A59,0x0AA9,0x0AF9,0x0B49,0x0B99,0x0BE9, - 0x1139,0x1189,0x11D9,0x1229,0x1279,0x12C9,0x1319,0x1369, - 0x13B9,0x1409,0x1459,0x14A9,0x14F9,0x1549,0x1599,0x15E9 -}; - - -/* 24B0-24EF */ -static uint16 uni_24B0_24EF[64]= -{ - 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0511,0x0512, - 0x0513,0x0514,0x0515,0x0516,0x0517,0x0518,0x0519,0x051A, - 0x051B,0x051C,0x051D,0x051E,0x051F,0x0520,0x0521,0x0522, - 0x0523,0x0524,0x0525,0x0526,0x0527,0x0528,0x0529,0x052A, - 0x0531,0x0532,0x0533,0x0534,0x0535,0x0536,0x0537,0x0538, - 0x0539,0x053A,0x053B,0x053C,0x053D,0x053E,0x053F,0x0540, - 0x0541,0x0542,0x0543,0x0544,0x0545,0x0546,0x0547,0x0548, - 0x0549,0x054A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 -}; - - -/* FF20-FF5F */ -static uint16 uni_FF20_FF5F[64]= -{ - 0x0000,0x0560,0x05B0,0x0600,0x0650,0x06A0,0x06F0,0x0740, - 0x0790,0x07E0,0x0830,0x0880,0x08D0,0x0920,0x0970,0x09C0, - 0x0A10,0x0A60,0x0AB0,0x0B00,0x0B50,0x0BA0,0x0BF0,0x0C40, - 0x0C90,0x0CE0,0x0D30,0x0000,0x0000,0x0000,0x0000,0x0000, - 0x0000,0x0F60,0x0FB0,0x1000,0x1050,0x10A0,0x10F0,0x1140, - 0x1190,0x11E0,0x1230,0x1280,0x12D0,0x1320,0x1370,0x13C0, - 0x1410,0x1460,0x14B0,0x1500,0x1550,0x15A0,0x15F0,0x1640, - 0x1690,0x16E0,0x1730,0x0000,0x0000,0x0000,0x0000,0x0000 -}; - - - - - -/* - Returns - a number 0..15, if a valid HEX digit in lower case, - -1 otherwise. -*/ - -static int hexlo(int x) -{ - static char hex_lo_digit[256]= - { - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */ - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */ - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* !"#$%&'()*+,-./ */ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, /* 0123456789:;<=>? */ - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* @ABCDEFGHIJKLMNO */ - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* PQRSTUVWXYZ[\]^_ */ - -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* `abcdefghijklmno */ - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* pqrstuvwxyz{|}~. */ - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */ - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */ - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */ - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */ - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */ - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */ - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */ - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */ - }; - return hex_lo_digit[(unsigned int) x]; -} - - -/* - Safe characters: - '\0' NULL - A..Z capital letters, - a..z small letters - 0..9 digits - _ underscore -*/ -static char filename_safe_char[128]= -{ - 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* !"#$%&'()*+,-./ */ - 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, /* 0123456789:;<=>? */ - 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* @ABCDEFGHIJKLMNO */ - 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1, /* PQRSTUVWXYZ[\]^_ */ - 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* `abcdefghijklmno */ - 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, /* pqrstuvwxyz{|}~. */ -}; - -#define MY_FILENAME_ESCAPE '@' - -static int -my_mb_wc_filename(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t *pwc, const uchar *s, const uchar *e) -{ - int byte1, byte2; - if (s >= e) - return MY_CS_TOOSMALL; - - if (*s < 128 && filename_safe_char[*s]) - { - *pwc= *s; - return 1; - } - - if (*s != MY_FILENAME_ESCAPE) - return MY_CS_ILSEQ; - - if (s + 3 > e) - return MY_CS_TOOSMALL3; - - byte1= s[1]; - byte2= s[2]; - - if (byte1 >= 0x30 && byte1 <= 0x7F && - byte2 >= 0x30 && byte2 <= 0x7F) - { - int code= (byte1 - 0x30) * 80 + byte2 - 0x30; - if (code < 5994 && touni[code]) - { - *pwc= touni[code]; - return 3; - } - if (byte1 == '@' && byte2 == '@') - { - *pwc= 0; - return 3; - } - } - - if (s + 4 > e) - return MY_CS_TOOSMALL4; - - if ((byte1= hexlo(byte1)) >= 0 && - (byte2= hexlo(byte2)) >= 0) - { - int byte3= hexlo(s[3]); - int byte4= hexlo(s[4]); - if (byte3 >=0 && byte4 >=0) - { - *pwc= (byte1 << 12) + (byte2 << 8) + (byte3 << 4) + byte4; - return 5; - } - } - - return MY_CS_ILSEQ; -} - - -static int -my_wc_mb_filename(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, uchar *s, uchar *e) -{ - int code; - char hex[]= "0123456789abcdef"; - if (wc < 128 && filename_safe_char[wc]) - { - *s= (uchar) wc; - return 1; - } - - if (s + 3 > e) - return MY_CS_TOOSMALL3; - - *s++= MY_FILENAME_ESCAPE; - if ((wc >= 0x00C0 && wc <= 0x05FF && (code= uni_0C00_05FF[wc - 0x00C0])) || - (wc >= 0x1E00 && wc <= 0x1FFF && (code= uni_1E00_1FFF[wc - 0x1E00])) || - (wc >= 0x2160 && wc <= 0x217F && (code= uni_2160_217F[wc - 0x2160])) || - (wc >= 0x24B0 && wc <= 0x24EF && (code= uni_24B0_24EF[wc - 0x24B0])) || - (wc >= 0xFF20 && wc <= 0xFF5F && (code= uni_FF20_FF5F[wc - 0xFF20]))) - { - *s++= (code / 80) + 0x30; - *s++= (code % 80) + 0x30; - return 3; - } - - /* Non letter */ - if (s + 5 > e) - return MY_CS_TOOSMALL5; - - *s++= hex[(wc >> 12) & 15]; - *s++= hex[(wc >> 8) & 15]; - *s++= hex[(wc >> 4) & 15]; - *s++= hex[(wc) & 15]; - return 5; -} - - -static MY_COLLATION_HANDLER my_collation_filename_handler = -{ - NULL, /* init */ - my_strnncoll_utf8, - my_strnncollsp_utf8, - my_strnxfrm_unicode, - my_strnxfrmlen_utf8, - my_like_range_mb, - my_wildcmp_utf8, - my_strcasecmp_utf8, - my_instr_mb, - my_hash_sort_utf8, - my_propagate_complex -}; - -static MY_CHARSET_HANDLER my_charset_filename_handler= -{ - NULL, /* init */ - my_ismbchar_utf8, - my_mbcharlen_utf8, - my_numchars_mb, - my_charpos_mb, - my_well_formed_len_mb, - my_lengthsp_8bit, - my_numcells_mb, - my_mb_wc_filename, - my_wc_mb_filename, - my_mb_ctype_mb, - my_caseup_str_utf8, - my_casedn_str_utf8, - my_caseup_utf8, - my_casedn_utf8, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_strtoll10_8bit, - my_strntoull10rnd_8bit, - my_scan_8bit -}; - - - -CHARSET_INFO my_charset_filename= -{ - 17,0,0, /* number */ - MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_HIDDEN|MY_CS_NONASCII, - "filename", /* cs name */ - "filename", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_utf8, /* ctype */ - to_lower_utf8, /* to_lower */ - to_upper_utf8, /* to_upper */ - to_upper_utf8, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 5, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_filename_handler, - &my_collation_filename_handler -}; - -#ifdef MY_TEST_UTF8 -#include - -static void test_mb(CHARSET_INFO *cs, uchar *s) -{ - while(*s) - { - if (my_ismbhead_utf8(cs,*s)) - { - uint len=my_mbcharlen_utf8(cs,*s); - while(len--) - { - printf("%c",*s); - s++; - } - printf("\n"); - } - else - { - printf("%c\n",*s); - s++; - } - } -} - -int main() -{ - char str[1024]=" utf8 test проба ПЕРА по-РУССКИ"; - CHARSET_INFO *cs; - - test_mb(cs,(uchar*)str); - - printf("orig :'%s'\n",str); - - my_caseup_utf8(cs,str,15); - printf("caseup :'%s'\n",str); - - my_caseup_str_utf8(cs,str); - printf("caseup_str:'%s'\n",str); - - my_casedn_utf8(cs,str,15); - printf("casedn :'%s'\n",str); - - my_casedn_str_utf8(cs,str); - printf("casedn_str:'%s'\n",str); - - return 0; -} - -#endif - -#endif /* HAVE_CHARSET_UTF8 */ - - - -#ifdef HAVE_CHARSET_utf8mb4 - -/* - We consider bytes with code more than 127 as a letter. - This garantees that word boundaries work fine with regular - expressions. Note, there is no need to mark byte 255 as a - letter, it is illegal byte in UTF8. -*/ -static uchar ctype_utf8mb4[]= -{ - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0 -}; - - -static uchar to_lower_utf8mb4[]= -{ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - - -static uchar to_upper_utf8mb4[]= -{ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - - -static inline int -bincmp_utf8mb4(const uchar *s, const uchar *se, - const uchar *t, const uchar *te) -{ - int slen= (int) (se - s), tlen= (int) (te - t); - int len= min(slen, tlen); - int cmp= memcmp(s, t, len); - return cmp ? cmp : slen - tlen; -} - - -static int -my_mb_wc_utf8mb4(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t * pwc, const uchar *s, const uchar *e) -{ - uchar c; - - if (s >= e) - return MY_CS_TOOSMALL; - - c= s[0]; - if (c < 0x80) - { - *pwc= c; - return 1; - } - else if (c < 0xc2) - return MY_CS_ILSEQ; - else if (c < 0xe0) - { - if (s + 2 > e) /* We need 2 characters */ - return MY_CS_TOOSMALL2; - - if (!((s[1] ^ 0x80) < 0x40)) - return MY_CS_ILSEQ; - - *pwc= ((my_wc_t) (c & 0x1f) << 6) | (my_wc_t) (s[1] ^ 0x80); - return 2; - } - else if (c < 0xf0) - { - if (s + 3 > e) /* We need 3 characters */ - return MY_CS_TOOSMALL3; - - if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && - (c >= 0xe1 || s[1] >= 0xa0))) - return MY_CS_ILSEQ; - - *pwc= ((my_wc_t) (c & 0x0f) << 12) | - ((my_wc_t) (s[1] ^ 0x80) << 6) | - (my_wc_t) (s[2] ^ 0x80); - return 3; - } - else if (c < 0xf5) - { - if (s + 4 > e) /* We need 4 characters */ - return MY_CS_TOOSMALL4; - - /* - UTF-8 quick four-byte mask: - 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - Encoding allows to encode U+00010000..U+001FFFFF - - The maximum character defined in the Unicode standard is U+0010FFFF. - Higher characters U+00110000..U+001FFFFF are not used. - - 11110000.10010000.10xxxxxx.10xxxxxx == F0.90.80.80 == U+00010000 (min) - 11110100.10001111.10111111.10111111 == F4.8F.BF.BF == U+0010FFFF (max) - - Valid codes: - [F0][90..BF][80..BF][80..BF] - [F1][80..BF][80..BF][80..BF] - [F2][80..BF][80..BF][80..BF] - [F3][80..BF][80..BF][80..BF] - [F4][80..8F][80..BF][80..BF] - */ - - if (!((s[1] ^ 0x80) < 0x40 && - (s[2] ^ 0x80) < 0x40 && - (s[3] ^ 0x80) < 0x40 && - (c >= 0xf1 || s[1] >= 0x90) && - (c <= 0xf3 || s[1] <= 0x8F))) - return MY_CS_ILSEQ; - *pwc = ((my_wc_t) (c & 0x07) << 18) | - ((my_wc_t) (s[1] ^ 0x80) << 12) | - ((my_wc_t) (s[2] ^ 0x80) << 6) | - (my_wc_t) (s[3] ^ 0x80); - return 4; - } - return MY_CS_ILSEQ; -} - - -/* - The same as above, but without range check - for example, for a null-terminated string -*/ -static int -my_mb_wc_utf8mb4_no_range(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t *pwc, const uchar *s) -{ - uchar c; - - c= s[0]; - if (c < 0x80) - { - *pwc = c; - return 1; - } - - if (c < 0xc2) - return MY_CS_ILSEQ; - - if (c < 0xe0) - { - if (!((s[1] ^ 0x80) < 0x40)) - return MY_CS_ILSEQ; - - *pwc = ((my_wc_t) (c & 0x1f) << 6) | (my_wc_t) (s[1] ^ 0x80); - return 2; - } - - if (c < 0xf0) - { - if (!((s[1] ^ 0x80) < 0x40 && - (s[2] ^ 0x80) < 0x40 && - (c >= 0xe1 || s[1] >= 0xa0))) - return MY_CS_ILSEQ; - *pwc= ((my_wc_t) (c & 0x0f) << 12) | - ((my_wc_t) (s[1] ^ 0x80) << 6) | - (my_wc_t) (s[2] ^ 0x80); - - return 3; - } - else if (c < 0xf5) - { - if (!((s[1] ^ 0x80) < 0x40 && - (s[2] ^ 0x80) < 0x40 && - (s[3] ^ 0x80) < 0x40 && - (c >= 0xf1 || s[1] >= 0x90) && - (c <= 0xf3 || s[1] <= 0x8F))) - return MY_CS_ILSEQ; - *pwc = ((my_wc_t) (c & 0x07) << 18) | - ((my_wc_t) (s[1] ^ 0x80) << 12) | - ((my_wc_t) (s[2] ^ 0x80) << 6) | - (my_wc_t) (s[3] ^ 0x80); - return 4; - } - return MY_CS_ILSEQ; -} - - -static int -my_wc_mb_utf8mb4(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, uchar *r, uchar *e) -{ - int count; - - if (r >= e) - return MY_CS_TOOSMALL; - - if (wc < 0x80) - count= 1; - else if (wc < 0x800) - count= 2; - else if (wc < 0x10000) - count= 3; - else if (wc < 0x200000) - count= 4; - else return MY_CS_ILUNI; - - if (r + count > e) - return MY_CS_TOOSMALLN(count); - - switch (count) { - /* Fall through all cases!!! */ - case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000; - case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; - case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0; - case 1: r[0] = (uchar) wc; - } - return count; -} - - -/* - The same as above, but without range check. -*/ -static int -my_wc_mb_utf8mb4_no_range(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, uchar *r) -{ - int count; - - if (wc < 0x80) - count= 1; - else if (wc < 0x800) - count= 2; - else if (wc < 0x10000) - count= 3; - else if (wc < 0x200000) - count= 4; - else - return MY_CS_ILUNI; - - switch (count) - { - /* Fall through all cases!!! */ - case 4: r[3]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x10000; - case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; - case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0; - case 1: r[0]= (uchar) wc; - } - return count; -} - - -static inline void -my_tolower_utf8mb4(MY_UNICASE_INFO **uni_plane, my_wc_t *wc) -{ - int page= *wc >> 8; - if (page < 256 && uni_plane[page]) - *wc= uni_plane[page][*wc & 0xFF].tolower; -} - - -static inline void -my_toupper_utf8mb4(MY_UNICASE_INFO **uni_plane, my_wc_t *wc) -{ - int page= *wc >> 8; - if (page < 256 && uni_plane[page]) - *wc= uni_plane[page][*wc & 0xFF].toupper; -} - - -static size_t -my_caseup_utf8mb4(CHARSET_INFO *cs, char *src, size_t srclen, - char *dst, size_t dstlen) -{ - my_wc_t wc; - int srcres, dstres; - char *srcend= src + srclen, *dstend= dst + dstlen, *dst0= dst; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - DBUG_ASSERT(src != dst || cs->caseup_multiply == 1); - - while ((src < srcend) && - (srcres= my_mb_wc_utf8mb4(cs, &wc, - (uchar *) src, (uchar*) srcend)) > 0) - { - my_toupper_utf8mb4(uni_plane, &wc); - if ((dstres= my_wc_mb_utf8mb4(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0) - break; - src+= srcres; - dst+= dstres; - } - return (size_t) (dst - dst0); -} - - -static inline void -my_hash_add(ulong *n1, ulong *n2, uint ch) -{ - n1[0]^= (((n1[0] & 63) + n2[0]) * (ch)) + (n1[0] << 8); - n2[0]+= 3; -} - - -static void -my_hash_sort_utf8mb4(CHARSET_INFO *cs, const uchar *s, size_t slen, - ulong *n1, ulong *n2) -{ - my_wc_t wc; - int res; - const uchar *e= s + slen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - - /* - Remove end space. We do this to be able to compare - 'A ' and 'A' as identical - */ - while (e > s && e[-1] == ' ') - e--; - - while ((res= my_mb_wc_utf8mb4(cs, &wc, (uchar*) s, (uchar*) e)) > 0) - { - my_tosort_unicode(uni_plane, &wc); - my_hash_add(n1, n2, (uint) (wc & 0xFF)); - my_hash_add(n1, n2, (uint) (wc >> 8) & 0xFF); - if (wc > 0xFFFF) - { - /* - Put the highest byte only if it is non-zero, - to make hash functions for utf8mb3 and utf8mb4 - compatible for BMP characters. - This is useful to keep order of records in - test results, e.g. for "SHOW GRANTS". - */ - my_hash_add(n1, n2, (uint) (wc >> 16) & 0xFF); - } - s+= res; - } -} - - -static size_t -my_caseup_str_utf8mb4(CHARSET_INFO *cs, char *src) -{ - my_wc_t wc; - int srcres, dstres; - char *dst= src, *dst0= src; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - DBUG_ASSERT(cs->caseup_multiply == 1); - - while (*src && - (srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (uchar *) src)) > 0) - { - my_toupper_utf8mb4(uni_plane, &wc); - if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (uchar*) dst)) <= 0) - break; - src+= srcres; - dst+= dstres; - } - *dst= '\0'; - return (size_t) (dst - dst0); -} - - -static size_t -my_casedn_utf8mb4(CHARSET_INFO *cs, - char *src, size_t srclen, - char *dst, size_t dstlen) -{ - my_wc_t wc; - int srcres, dstres; - char *srcend= src + srclen, *dstend= dst + dstlen, *dst0= dst; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - DBUG_ASSERT(src != dst || cs->casedn_multiply == 1); - - while ((src < srcend) && - (srcres= my_mb_wc_utf8mb4(cs, &wc, - (uchar*) src, (uchar*) srcend)) > 0) - { - my_tolower_utf8mb4(uni_plane, &wc); - if ((dstres= my_wc_mb_utf8mb4(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0) - break; - src+= srcres; - dst+= dstres; - } - return (size_t) (dst - dst0); -} - - -static size_t -my_casedn_str_utf8mb4(CHARSET_INFO *cs, char *src) -{ - my_wc_t wc; - int srcres, dstres; - char *dst= src, *dst0= src; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - DBUG_ASSERT(cs->casedn_multiply == 1); - - while (*src && - (srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (uchar *) src)) > 0) - { - my_tolower_utf8mb4(uni_plane, &wc); - if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (uchar*) dst)) <= 0) - break; - src+= srcres; - dst+= dstres; - } - - /* - In rare cases lower string can be shorter than - the original string, for example: - - "U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE" - (which is 0xC4B0 in utf8, i.e. two bytes) - - is converted into - - "U+0069 LATIN SMALL LETTER I" - (which is 0x69 in utf8, i.e. one byte) - - So, we need to put '\0' terminator after converting. - */ - - *dst= '\0'; - return (size_t) (dst - dst0); -} - - -static int -my_strnncoll_utf8mb4(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix) -{ - my_wc_t s_wc,t_wc; - const uchar *se= s + slen; - const uchar *te= t + tlen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - LINT_INIT(s_wc); - LINT_INIT(t_wc); - - while ( s < se && t < te ) - { - int s_res= my_mb_wc_utf8mb4(cs, &s_wc, s, se); - int t_res= my_mb_wc_utf8mb4(cs, &t_wc, t, te); - - if ( s_res <= 0 || t_res <= 0 ) - { - /* Incorrect string, compare bytewise */ - return bincmp_utf8mb4(s, se, t, te); - } - - my_tosort_unicode(uni_plane, &s_wc); - my_tosort_unicode(uni_plane, &t_wc); - - if ( s_wc != t_wc ) - { - return s_wc > t_wc ? 1 : -1; - } - - s+= s_res; - t+= t_res; - } - return (int) (t_is_prefix ? (t - te) : ((se - s) - (te - t))); -} - - -/** - - Compare strings, discarding end space - - If one string is shorter as the other, then we space extend the other - so that the strings have equal length. - - This will ensure that the following things hold: - - "a" == "a " - "a\0" < "a" - "a\0" < "a " - - @param cs Character set pinter. - @param a First string to compare. - @param a_length Length of 'a'. - @param b Second string to compare. - @param b_length Length of 'b'. - @param diff_if_only_endspace_difference - Set to 1 if the strings should be regarded as different - if they only difference in end space - - @return Comparison result. - @retval Negative number, if a less than b. - @retval 0, if a is equal to b - @retval Positive number, if a > b -*/ - -static int -my_strnncollsp_utf8mb4(CHARSET_INFO *cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference) -{ - int res; - my_wc_t s_wc, t_wc; - const uchar *se= s + slen, *te= t + tlen; - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - LINT_INIT(s_wc); - LINT_INIT(t_wc); - -#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE - diff_if_only_endspace_difference= FALSE; -#endif - - while ( s < se && t < te ) - { - int s_res= my_mb_wc_utf8mb4(cs, &s_wc, s, se); - int t_res= my_mb_wc_utf8mb4(cs, &t_wc, t, te); - - if ( s_res <= 0 || t_res <= 0 ) - { - /* Incorrect string, compare bytewise */ - return bincmp_utf8mb4(s, se, t, te); - } - - my_tosort_unicode(uni_plane, &s_wc); - my_tosort_unicode(uni_plane, &t_wc); - - if ( s_wc != t_wc ) - { - return s_wc > t_wc ? 1 : -1; - } - - s+=s_res; - t+=t_res; - } - - slen= (size_t) (se-s); - tlen= (size_t) (te-t); - res= 0; - - if (slen != tlen) - { - int swap= 1; - if (diff_if_only_endspace_difference) - res= 1; /* Assume 'a' is bigger */ - if (slen < tlen) - { - slen= tlen; - s= t; - se= te; - swap= -1; - res= -res; - } - /* - This following loop uses the fact that in UTF-8 - all multibyte characters are greater than space, - and all multibyte head characters are greater than - space. It means if we meet a character greater - than space, it always means that the longer string - is greater. So we can reuse the same loop from the - 8bit version, without having to process full multibute - sequences. - */ - for ( ; s < se; s++) - { - if (*s != ' ') - return (*s < ' ') ? -swap : swap; - } - } - return res; -} - - -/** - Compare 0-terminated UTF8 strings. - - @param cs character set handler - @param s First 0-terminated string to compare - @param t Second 0-terminated string to compare - - @return Comparison result. - @retval negative number if s < t - @retval positive number if s > t - @retval 0 is the strings are equal -*/ - -static int -my_strcasecmp_utf8mb4(CHARSET_INFO *cs, const char *s, const char *t) -{ - MY_UNICASE_INFO **uni_plane= cs->caseinfo; - while (s[0] && t[0]) - { - my_wc_t s_wc,t_wc; - - if ((uchar) s[0] < 128) - { - /* - s[0] is between 0 and 127. - It represents a single byte character. - Convert it into weight according to collation. - */ - s_wc= plane00[(uchar) s[0]].tolower; - s++; - } - else - { - int res= my_mb_wc_utf8mb4_no_range(cs, &s_wc, (const uchar*) s); - - /* - In the case of wrong multibyte sequence we will - call strcmp() for byte-to-byte comparison. - */ - if (res <= 0) - return strcmp(s, t); - s+= res; - - my_tolower_utf8mb4(uni_plane, &s_wc); - } - - - /* Do the same for the second string */ - - if ((uchar) t[0] < 128) - { - /* Convert single byte character into weight */ - t_wc= plane00[(uchar) t[0]].tolower; - t++; - } - else - { - int res= my_mb_wc_utf8mb4_no_range(cs, &t_wc, (const uchar*) t); - if (res <= 0) - return strcmp(s, t); - t+= res; - - my_tolower_utf8mb4(uni_plane, &t_wc); - } - - /* Now we have two weights, let's compare them */ - if ( s_wc != t_wc ) - return ((int) s_wc) - ((int) t_wc); - } - return ((int) (uchar) s[0]) - ((int) (uchar) t[0]); -} - - -static int -my_wildcmp_utf8mb4(CHARSET_INFO *cs, - const char *str, const char *strend, - const char *wildstr, const char *wildend, - int escape, int w_one, int w_many) -{ - return my_wildcmp_unicode(cs, str, strend, wildstr, wildend, - escape, w_one, w_many, cs->caseinfo); -} - - -static size_t -my_strnxfrmlen_utf8mb4(CHARSET_INFO *cs __attribute__((unused)), size_t len) -{ - /* TODO: fix when working on WL "Unicode new version" */ - return (len * 2 + 2) / 4; -} - - -static uint -my_ismbchar_utf8mb4(CHARSET_INFO *cs, const char *b, const char *e) -{ - my_wc_t wc; - int res= my_mb_wc_utf8mb4(cs,&wc, (const uchar*)b, (const uchar*)e); - return (res > 1) ? res : 0; -} - - -static uint -my_mbcharlen_utf8mb4(CHARSET_INFO *cs __attribute__((unused)), uint c) -{ - if (c < 0x80) - return 1; - if (c < 0xc2) - return 0; /* Illegal mb head */ - if (c < 0xe0) - return 2; - if (c < 0xf0) - return 3; - if (c < 0xf8) - return 4; - return 0; /* Illegal mb head */; -} - - -static MY_COLLATION_HANDLER my_collation_utf8mb4_general_ci_handler= -{ - NULL, /* init */ - my_strnncoll_utf8mb4, - my_strnncollsp_utf8mb4, - my_strnxfrm_unicode, - my_strnxfrmlen_utf8mb4, - my_like_range_mb, - my_wildcmp_utf8mb4, - my_strcasecmp_utf8mb4, - my_instr_mb, - my_hash_sort_utf8mb4, - my_propagate_complex -}; - - -static MY_COLLATION_HANDLER my_collation_utf8mb4_bin_handler = -{ - NULL, /* init */ - my_strnncoll_mb_bin, - my_strnncollsp_mb_bin, - my_strnxfrm_unicode_full_bin, - my_strnxfrmlen_unicode_full_bin, - my_like_range_mb, - my_wildcmp_mb_bin, - my_strcasecmp_mb_bin, - my_instr_mb, - my_hash_sort_mb_bin, - my_propagate_simple -}; - - -MY_CHARSET_HANDLER my_charset_utf8mb4_handler= -{ - NULL, /* init */ - my_ismbchar_utf8mb4, - my_mbcharlen_utf8mb4, - my_numchars_mb, - my_charpos_mb, - my_well_formed_len_mb, - my_lengthsp_8bit, - my_numcells_mb, - my_mb_wc_utf8mb4, - my_wc_mb_utf8mb4, - my_mb_ctype_mb, - my_caseup_str_utf8mb4, - my_casedn_str_utf8mb4, - my_caseup_utf8mb4, - my_casedn_utf8mb4, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_strtoll10_8bit, - my_strntoull10rnd_8bit, - my_scan_8bit -}; - - - -CHARSET_INFO my_charset_utf8mb4_general_ci= -{ - 45,0,0, /* number */ - MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_UNICODE_SUPPLEMENT, /* state */ - MY_UTF8MB4, /* cs name */ - MY_UTF8MB4_GENERAL_CI,/* name */ - "UTF-8 Unicode", /* comment */ - NULL, /* tailoring */ - ctype_utf8mb4, /* ctype */ - to_lower_utf8mb4, /* to_lower */ - to_upper_utf8mb4, /* to_upper */ - to_upper_utf8mb4, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_utf8mb4_general_ci_handler -}; - - -CHARSET_INFO my_charset_utf8mb4_bin= -{ - 46,0,0, /* number */ - MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_UNICODE|MY_CS_UNICODE_SUPPLEMENT, /* state */ - MY_UTF8MB4, /* cs name */ - MY_UTF8MB4_BIN, /* name */ - "UTF-8 Unicode", /* comment */ - NULL, /* tailoring */ - ctype_utf8mb4, /* ctype */ - to_lower_utf8mb4, /* to_lower */ - to_upper_utf8mb4, /* to_upper */ - NULL, /* sort_order */ - NULL, /* contractions */ - NULL, /* sort_order_big*/ - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 1, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 4, /* mbmaxlen */ - 0, /* min_sort_char */ - 0xFFFF, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_utf8mb4_handler, - &my_collation_utf8mb4_bin_handler -}; - -#endif /* HAVE_CHARSET_utf8mb4 */ diff --git a/deps/mysqllite/strings/ctype-win1250ch.c b/deps/mysqllite/strings/ctype-win1250ch.c deleted file mode 100644 index d9d092beb8f926..00000000000000 --- a/deps/mysqllite/strings/ctype-win1250ch.c +++ /dev/null @@ -1,715 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Shared, independent copyright: (C) 2001 Jan Pazdziora. - - Development of this software was supported by Neocortex, s.r.o. - MySQL AB expresses its gratitude to Jan for for giving us this software. - - Bug reports and suggestions are always welcome. - - This file implements the collating sequence for Windows-1250 - character set. It merely extends the binary sorting of US-ASCII - by adding characters with diacritical marks into proper places. - In addition, it sorts 'ch' between 'h' and 'i', and the sorting - is case sensitive, with uppercase being sorted first, in the - second pass. -*/ - -/* - * This comment is parsed by configure to create ctype.c, - * so don't change it unless you know what you are doing. - * - * .configure. strxfrm_multiply_win1250ch=2 - */ - -#define REAL_MYSQL -#ifdef REAL_MYSQL - -#include "my_global.h" -#include "m_string.h" -#include "m_ctype.h" - -#else - -#include -#define uchar unsigned char - -#endif - -#ifdef HAVE_CHARSET_cp1250 - - -static uint16 tab_cp1250_uni[256]={ - 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC, 0,0x201A, 0,0x201E,0x2026,0x2020,0x2021, - 0,0x2030,0x0160,0x2039,0x015A,0x0164,0x017D,0x0179, - 0,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, - 0,0x2122,0x0161,0x203A,0x015B,0x0165,0x017E,0x017A, -0x00A0,0x02C7,0x02D8,0x0141,0x00A4,0x0104,0x00A6,0x00A7, -0x00A8,0x00A9,0x015E,0x00AB,0x00AC,0x00AD,0x00AE,0x017B, -0x00B0,0x00B1,0x02DB,0x0142,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x0105,0x015F,0x00BB,0x013D,0x02DD,0x013E,0x017C, -0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, -0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, -0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, -0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, -0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, -0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, -0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, -0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 -}; - - -/* 0000-00FD , 254 chars */ -static uchar tab_uni_cp1250_plane00[]={ -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xA0,0x00,0x00,0x00,0xA4,0x00,0xA6,0xA7,0xA8,0xA9,0x00,0xAB,0xAC,0xAD,0xAE,0x00, -0xB0,0xB1,0x00,0x00,0xB4,0xB5,0xB6,0xB7,0xB8,0x00,0x00,0xBB,0x00,0x00,0x00,0x00, -0x00,0xC1,0xC2,0x00,0xC4,0x00,0x00,0xC7,0x00,0xC9,0x00,0xCB,0x00,0xCD,0xCE,0x00, -0x00,0x00,0x00,0xD3,0xD4,0x00,0xD6,0xD7,0x00,0x00,0xDA,0x00,0xDC,0xDD,0x00,0xDF, -0x00,0xE1,0xE2,0x00,0xE4,0x00,0x00,0xE7,0x00,0xE9,0x00,0xEB,0x00,0xED,0xEE,0x00, -0x00,0x00,0x00,0xF3,0xF4,0x00,0xF6,0xF7,0x00,0x00,0xFA,0x00,0xFC,0xFD}; - -/* 0102-017E , 125 chars */ -static uchar tab_uni_cp1250_plane01[]={ -0xC3,0xE3,0xA5,0xB9,0xC6,0xE6,0x00,0x00,0x00,0x00,0xC8,0xE8,0xCF,0xEF,0xD0,0xF0, -0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0xEA,0xCC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC5,0xE5,0x00,0x00,0xBC,0xBE,0x00,0x00,0xA3, -0xB3,0xD1,0xF1,0x00,0x00,0xD2,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xF5, -0x00,0x00,0xC0,0xE0,0x00,0x00,0xD8,0xF8,0x8C,0x9C,0x00,0x00,0xAA,0xBA,0x8A,0x9A, -0xDE,0xFE,0x8D,0x9D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0xF9,0xDB,0xFB, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8F,0x9F,0xAF,0xBF,0x8E,0x9E}; - -/* 2013-20AC , 154 chars */ -static uchar tab_uni_cp1250_plane20[]={ -0x96,0x97,0x00,0x00,0x00,0x91,0x92,0x82,0x00,0x93,0x94,0x84,0x00,0x86,0x87,0x95, -0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x89,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x8B,0x9B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80}; - -/* 02C7-02DD , 23 chars */ -static uchar tab_uni_cp1250_plane02[]={ -0xA1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xA2,0xFF,0x00,0xB2,0x00,0xBD}; - -/* 2122-2122 , 1 chars */ -static uchar tab_uni_cp1250_plane21[]={ -0x99}; - - -static MY_UNI_IDX idx_uni_cp1250[]={ - {0x0000,0x00FD,tab_uni_cp1250_plane00}, - {0x0102,0x017E,tab_uni_cp1250_plane01}, - {0x2013,0x20AC,tab_uni_cp1250_plane20}, - {0x02C7,0x02DD,tab_uni_cp1250_plane02}, - {0x2122,0x2122,tab_uni_cp1250_plane21}, - {0,0,NULL} -}; - - -static uchar ctype_win1250ch[] = { -0x00, -0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -0x20, 0x28, 0x28, 0x28, 0x28, 0x28, 0x20, 0x20, -0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -0x48, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, -0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, -0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, -0x84, 0x84, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, -0x10, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x10, 0x10, 0x10, 0x10, 0x10, -0x10, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x02, -0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, -0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, -0x02, 0x02, 0x02, 0x10, 0x10, 0x10, 0x10, 0x20, -0x20, 0x20, 0x10, 0x20, 0x10, 0x10, 0x10, 0x10, -0x20, 0x10, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, -0x20, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, -0x20, 0x10, 0x02, 0x10, 0x02, 0x02, 0x02, 0x02, -0x48, 0x10, 0x10, 0x01, 0x10, 0x01, 0x10, 0x01, -0x10, 0x10, 0x01, 0x10, 0x10, 0x10, 0x10, 0x01, -0x10, 0x10, 0x10, 0x02, 0x10, 0x10, 0x10, 0x10, -0x10, 0x02, 0x02, 0x10, 0x01, 0x10, 0x02, 0x02, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, -0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, -0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, -0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x10, -0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x10 -}; - -static uchar to_lower_win1250ch[] = { -0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, -0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, -0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, -0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, -0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, -0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, -0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, -0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, -0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, -0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, -0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, -0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, -0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, -0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, -0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, -0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, -0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, -0x88, 0x89, 0x9a, 0x8b, 0x9c, 0x9d, 0x9e, 0x9f, -0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, -0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, -0xa0, 0xa1, 0xa2, 0xb3, 0xa4, 0xb9, 0xa6, 0xdf, -0xa8, 0xa9, 0xba, 0xab, 0xac, 0xad, 0xae, 0xbf, -0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, -0xb8, 0xb9, 0xba, 0xbb, 0xbe, 0xbd, 0xbe, 0xbf, -0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, -0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, -0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7, -0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, -0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, -0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, -0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, -0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff -}; - -static uchar to_upper_win1250ch[] = { -0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, -0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, -0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, -0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, -0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, -0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, -0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, -0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, -0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, -0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, -0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, -0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, -0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, -0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, -0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, -0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, -0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, -0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, -0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, -0x98, 0x99, 0x8a, 0x9b, 0x8c, 0x8d, 0x8e, 0x8f, -0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, -0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, -0xb0, 0xb1, 0xb2, 0xa3, 0xb4, 0xb5, 0xb6, 0xb7, -0xb8, 0xa5, 0xaa, 0xbb, 0xbc, 0xbd, 0xbc, 0xaf, -0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, -0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, -0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, -0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xa7, -0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, -0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, -0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7, -0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xff -}; - - - -static uchar sort_order_win1250ch[] = { -0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, -16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, -32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, -80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, -96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, -112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, -128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, -144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, -160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, -176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, -192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, -208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, -224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, -240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 -}; - -static uchar _sort_order_win1250ch1[] = { -0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, -0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, -0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, -0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, -/* space ord 32 0x20 */ -0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, -0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, -/* 0 ord 48 0x30 */ -0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, -0x9a, 0x9b, - /* colon ord 58 0x3a */ - 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, -0xa2, - /* A ord 65 0x41 */ - 0xa4, 0xa5, - /* C ord 67 0x43 */ - 0xff, 0xa8, 0xa9, 0xaa, 0xab, -0xac, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, -0xb5, 0xb6, - /* R ord 82 0x52 */ - 0xb7, - /* S ord 83 0x53 */ - 0xb9, 0xbc, 0xbd, 0xbe, 0xbf, -0xc0, 0xc1, 0xc2, - /* [ ord 91 0x5b */ - 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, -0xc9, - /* a ord 97 0x61 */ - 0xa4, 0xa5, 0xff, 0xa8, 0xa9, 0xaa, 0xab, -0xac, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, -0xb5, 0xb6, 0xb7, 0xb9, 0xbc, 0xbd, 0xbe, 0xbf, -0xc0, 0xc1, 0xc2, - /* { ord 123 0x7b */ - 0xca, 0xcb, 0xcc, 0xcd, 0x81, -0x81, 0x81, 0xce, 0x81, 0xcf, 0xd0, 0xd1, 0xd2, -0x81, 0xd3, - /* Scaron ord 138 0x8a */ - 0xba, 0xd4, 0xb9, 0xbc, 0xc3, 0xc2, -0x81, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, -0x81, 0xdc, 0xba, 0xdd, 0xb9, 0xbc, 0xc3, 0xc2, -/* nobreakspace ord 160 0xa0 */ -0x82, 0xde, 0xdf, 0xb1, 0xe0, 0xa4, 0xe1, 0xe2, -0xe3, 0xe4, 0xb9, 0xe5, 0xe6, 0xe7, 0xe8, 0xc2, -0xe9, 0xea, 0xeb, 0xb1, 0xed, 0xee, 0x81, 0xef, -/* cedilla ord 183 0xb8 */ -0xf0, 0xa4, 0xb9, 0xf1, 0xb1, 0xf2, 0xb1, 0xc2, -0xb7, 0xa4, 0xa4, 0xa4, 0xa4, 0xb1, 0xa6, 0xa6, -0xa7, 0xa9, 0xa9, 0xa9, 0xa9, 0xae, 0xae, 0xa8, -/* Eth ord 208 0xd0 */ -0xa8, 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xf3, -0xb8, 0xbd, 0xbd, 0xbd, 0xbd, 0xc1, 0xbc, 0xbb, -/* racute ord 224 0xe0 */ -0xb7, 0xa4, 0xa4, 0xa4, 0xa4, 0xb1, 0xa6, 0xa6, -0xa7, 0xa9, 0xa9, 0xa9, 0xa9, 0xae, 0xae, 0xa8, -/* eth ord 240 0xf0 */ -0xa8, 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xf4, -0xb8, 0xbd, 0xbd, 0xbd, 0xbd, 0xc1, 0xbc, 0xf5 -}; - -static uchar _sort_order_win1250ch2[] = { -0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, -0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, -0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, -0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, -/* space ord 32 0x20 */ -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -/* 0 ord 48 0x30 */ -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, - /* colon ord 58 0x3a */ - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, - /* A ord 65 0x41 */ - 0x01, 0x01, - /* C ord 67 0x43 */ - 0xff, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, - /* R ord 82 0x52 */ - 0x01, - /* S ord 83 0x53 */ - 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, - /* [ ord 91 0x5b */ - 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, - /* a ord 97 0x61 */ - 0x02, 0x02, 0xff, 0x02, 0x02, 0x02, 0x02, -0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, -0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, -0x02, 0x02, 0x02, - /* { ord 123 0x7b */ - 0x01, 0x01, 0x01, 0x01, 0x22, -0x23, 0x24, 0x01, 0x25, 0x01, 0x01, 0x01, 0x01, -0x26, 0x01, - /* Scaron ord 138 0x8a */ - 0x01, 0x01, 0x03, 0x03, 0x01, 0x05, -0x27, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x28, 0x01, 0x02, 0x01, 0x04, 0x04, 0x02, 0x06, -/* nobreakspace ord 160 0xa0 */ -0x02, 0x01, 0x01, 0x07, 0x01, 0x11, 0x01, 0x01, -0x01, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x03, -0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x29, 0x01, -/* cedilla ord 184 0xb8 */ -0x01, 0x12, 0x06, 0x01, 0x05, 0x01, 0x06, 0x04, -0x03, 0x03, 0x05, 0x07, 0x09, 0x03, 0x03, 0x05, -0x01, 0x03, 0x09, 0x07, 0x05, 0x03, 0x05, 0x03, -/* Eth ord 208 0xd0 */ -0x05, 0x03, 0x05, 0x03, 0x05, 0x09, 0x07, 0x01, -0x01, 0x05, 0x03, 0x09, 0x07, 0x03, 0x05, 0x01, -/* racute ord 224 0xe0 */ -0x04, 0x04, 0x06, 0x08, 0x0a, 0x04, 0x04, 0x06, -0x02, 0x04, 0x0a, 0x08, 0x06, 0x04, 0x06, 0x04, -/* eth ord 240 0xf0 */ -0x06, 0x04, 0x06, 0x04, 0x06, 0x0a, 0x08, 0x01, -0x02, 0x06, 0x04, 0x0a, 0x08, 0x04, 0x06, 0x01 -}; - -struct wordvalue { - const uchar *word; - uchar pass1; - uchar pass2; -}; -static struct wordvalue doubles[] = { - { (uchar*) "ch", 0xad, 0x03 }, - { (uchar*) "c", 0xa6, 0x02 }, - { (uchar*) "Ch", 0xad, 0x02 }, - { (uchar*) "CH", 0xad, 0x01 }, - { (uchar*) "C", 0xa6, 0x01 }, -}; - -#define NEXT_CMP_VALUE(src, p, pass, value, len) \ - while (1) { \ - if (IS_END(p, src, len)) { \ - if (pass == 0 && len > 0) { p= src; pass++; } \ - else { value = 0; break; } \ - } \ - value = ((pass == 0) ? _sort_order_win1250ch1[*p] \ - : _sort_order_win1250ch2[*p]); \ - if (value == 0xff) { \ - int i; \ - for (i = 0; i < (int) sizeof(doubles); i++) { \ - const uchar *patt = doubles[i].word; \ - const uchar *q = (const uchar *) p; \ - while (*patt \ - && !(IS_END(q, src, len)) \ - && (*patt == *q)) { \ - patt++; q++; \ - } \ - if (!(*patt)) { \ - value = (int)((pass == 0) \ - ? doubles[i].pass1 \ - : doubles[i].pass2); \ - p = (const uchar *) q - 1; \ - break; \ - } \ - } \ - } \ - p++; \ - break; \ - } - -#define IS_END(p, src, len) (((char *)p - (char *)src) >= (len)) - -static int my_strnncoll_win1250ch(CHARSET_INFO *cs __attribute__((unused)), - const uchar *s1, size_t len1, - const uchar *s2, size_t len2, - my_bool s2_is_prefix) -{ - int v1, v2; - const uchar *p1, * p2; - int pass1 = 0, pass2 = 0; - int diff; - - if (s2_is_prefix && len1 > len2) - len1=len2; - - p1 = s1; p2 = s2; - - do - { - NEXT_CMP_VALUE(s1, p1, pass1, v1, (int)len1); - NEXT_CMP_VALUE(s2, p2, pass2, v2, (int)len2); - if ((diff = v1 - v2)) - return diff; - } while (v1); - return 0; -} - - -/* - TODO: Has to be fixed as strnncollsp in ctype-simple -*/ - -static -int my_strnncollsp_win1250ch(CHARSET_INFO * cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference - __attribute__((unused))) -{ - for ( ; slen && s[slen-1] == ' ' ; slen--); - for ( ; tlen && t[tlen-1] == ' ' ; tlen--); - return my_strnncoll_win1250ch(cs,s,slen,t,tlen,0); -} - - -static size_t my_strnxfrm_win1250ch(CHARSET_INFO * cs __attribute__((unused)), - uchar *dest, size_t len, - const uchar *src, size_t srclen) -{ - int value; - const uchar *p; - int pass = 0; - size_t totlen = 0; - p = src; - - do { - NEXT_CMP_VALUE(src, p, pass, value, (int)srclen); - if (totlen <= len) - dest[totlen] = value; - totlen++; - } while (value) ; - if (len > totlen) - bfill(dest + totlen, len - totlen, ' '); - return len; -} - -#undef IS_END - -#ifdef REAL_MYSQL - -static uchar like_range_prefix_min_win1250ch[]= -{ - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, - 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, - 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, - 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, - 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, - 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, - 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF -}; - -/* - The letter "C" is a special case: - "CH" is sorted between "H" and "I". - prefix_max for "C" is "I": prefix_max[0x43] == 0x49 - prefix_max for "c" is "i": prefix_max[0x63] == 0x69 - For all other characters: prefix_max[i] == i -*/ - -static uchar like_range_prefix_max_win1250ch[]= -{ - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, - 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, - 0x40, 0x41, 0x42, 0x49, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, - 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, - 0x60, 0x61, 0x62, 0x69, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, - 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, - 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, - 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, - 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF -}; - -#define min_sort_char '\x20' -#define max_sort_char '\xff' - -/* -** Calculate min_str and max_str that ranges a LIKE string. -** Arguments: -** ptr Pointer to LIKE string. -** ptr_length Length of LIKE string. -** escape Escape character in LIKE. (Normally '\'). -** All escape characters should be removed from min_str and max_str -** res_length Length of min_str and max_str. -** min_str Smallest case sensitive string that ranges LIKE. -** Should be space padded to res_length. -** max_str Largest case sensitive string that ranges LIKE. -** Normally padded with the biggest character sort value. -** -** The function should return 0 if ok and 1 if the LIKE string can't be -** optimized ! -*/ - -static my_bool -my_like_range_win1250ch(CHARSET_INFO *cs __attribute__((unused)), - const char *ptr, size_t ptr_length, - pbool escape, pbool w_one, pbool w_many, - size_t res_length, - char *min_str, char *max_str, - size_t *min_length, size_t *max_length) -{ - - int only_min_found= 1; - const char *end = ptr + ptr_length; - char *min_org = min_str; - char *min_end = min_str + res_length; - - /* return 1; */ - - for (; ptr != end && min_str != min_end ; ptr++) - { - if (*ptr == escape && ptr+1 != end) - ptr++; /* Skip escape */ - else if (*ptr == w_one || *ptr == w_many) /* '_' or '%' in SQL */ - break; - *min_str= like_range_prefix_min_win1250ch[(uint) (uchar) (*ptr)]; - if (*min_str != min_sort_char) - only_min_found= 0; - min_str++; - *max_str++= like_range_prefix_max_win1250ch[(uint) (uchar) (*ptr)]; - } - - if (cs->state & MY_CS_BINSORT) - *min_length= (size_t) (min_str - min_org); - else - { - /* 'a\0\0... is the smallest possible string */ - *min_length= res_length; - } - /* a\ff\ff... is the biggest possible string */ - *max_length= res_length; - - while (min_str != min_end) - { - *min_str++ = min_sort_char; - *max_str++ = max_sort_char; - } - return (only_min_found); -} - - -static MY_COLLATION_HANDLER my_collation_czech_ci_handler = -{ - NULL, /* init */ - my_strnncoll_win1250ch, - my_strnncollsp_win1250ch, - my_strnxfrm_win1250ch, - my_strnxfrmlen_simple, - my_like_range_win1250ch, - my_wildcmp_8bit, - my_strcasecmp_8bit, - my_instr_simple, - my_hash_sort_simple, - my_propagate_simple -}; - - -CHARSET_INFO my_charset_cp1250_czech_ci = -{ - 34,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_CSSORT, /* state */ - "cp1250", /* cs name */ - "cp1250_czech_cs", /* name */ - "", /* comment */ - NULL, /* tailoring */ - ctype_win1250ch, - to_lower_win1250ch, - to_upper_win1250ch, - sort_order_win1250ch, - NULL, /* contractions */ - NULL, /* sort_order_big*/ - tab_cp1250_uni, /* tab_to_uni */ - idx_uni_cp1250, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ - NULL, /* state_map */ - NULL, /* ident_map */ - 2, /* strxfrm_multiply */ - 1, /* caseup_multiply */ - 1, /* casedn_multiply */ - 1, /* mbminlen */ - 1, /* mbmaxlen */ - 0, /* min_sort_char */ - 0, /* max_sort_char */ - ' ', /* pad char */ - 0, /* escape_with_backslash_is_dangerous */ - &my_charset_8bit_handler, - &my_collation_czech_ci_handler -}; - - -#endif /* REAL_MYSQL */ - -#endif /* HAVE_CHARSET_cp1250 */ diff --git a/deps/mysqllite/strings/ctype.c b/deps/mysqllite/strings/ctype.c deleted file mode 100644 index 4891e657b6ea70..00000000000000 --- a/deps/mysqllite/strings/ctype.c +++ /dev/null @@ -1,430 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include -#include -#ifndef SCO -#include -#endif - - -/* - - This files implements routines which parse XML based - character set and collation description files. - - Unicode collations are encoded according to - - Unicode Technical Standard #35 - Locale Data Markup Language (LDML) - http://www.unicode.org/reports/tr35/ - - and converted into ICU string according to - - Collation Customization - http://oss.software.ibm.com/icu/userguide/Collate_Customization.html - -*/ - -static char *mstr(char *str,const char *src,size_t l1,size_t l2) -{ - l1= l1str; s++) - { - if (!strncmp(attr,s->str,len)) - return s; - } - return NULL; -} - -#define MY_CS_CSDESCR_SIZE 64 -#define MY_CS_TAILORING_SIZE 1024 - -typedef struct my_cs_file_info -{ - char csname[MY_CS_NAME_SIZE]; - char name[MY_CS_NAME_SIZE]; - uchar ctype[MY_CS_CTYPE_TABLE_SIZE]; - uchar to_lower[MY_CS_TO_LOWER_TABLE_SIZE]; - uchar to_upper[MY_CS_TO_UPPER_TABLE_SIZE]; - uchar sort_order[MY_CS_SORT_ORDER_TABLE_SIZE]; - uint16 tab_to_uni[MY_CS_TO_UNI_TABLE_SIZE]; - char comment[MY_CS_CSDESCR_SIZE]; - char tailoring[MY_CS_TAILORING_SIZE]; - size_t tailoring_length; - CHARSET_INFO cs; - int (*add_collation)(CHARSET_INFO *cs); -} MY_CHARSET_LOADER; - - - -static int fill_uchar(uchar *a,uint size,const char *str, size_t len) -{ - uint i= 0; - const char *s, *b, *e=str+len; - - for (s=str ; s < e ; i++) - { - for ( ; (s < e) && strchr(" \t\r\n",s[0]); s++) ; - b=s; - for ( ; (s < e) && !strchr(" \t\r\n",s[0]); s++) ; - if (s == b || i > size) - break; - a[i]= (uchar) strtoul(b,NULL,16); - } - return 0; -} - -static int fill_uint16(uint16 *a,uint size,const char *str, size_t len) -{ - uint i= 0; - - const char *s, *b, *e=str+len; - for (s=str ; s < e ; i++) - { - for ( ; (s < e) && strchr(" \t\r\n",s[0]); s++) ; - b=s; - for ( ; (s < e) && !strchr(" \t\r\n",s[0]); s++) ; - if (s == b || i > size) - break; - a[i]= (uint16) strtol(b,NULL,16); - } - return 0; -} - - -static int cs_enter(MY_XML_PARSER *st,const char *attr, size_t len) -{ - struct my_cs_file_info *i= (struct my_cs_file_info *)st->user_data; - struct my_cs_file_section_st *s= cs_file_sec(attr,len); - - if ( s && (s->state == _CS_CHARSET)) - bzero(&i->cs,sizeof(i->cs)); - - if (s && (s->state == _CS_COLLATION)) - i->tailoring_length= 0; - - return MY_XML_OK; -} - - -static int cs_leave(MY_XML_PARSER *st,const char *attr, size_t len) -{ - struct my_cs_file_info *i= (struct my_cs_file_info *)st->user_data; - struct my_cs_file_section_st *s= cs_file_sec(attr,len); - int state= s ? s->state : 0; - int rc; - - switch(state){ - case _CS_COLLATION: - rc= i->add_collation ? i->add_collation(&i->cs) : MY_XML_OK; - break; - default: - rc=MY_XML_OK; - } - return rc; -} - - -static int cs_value(MY_XML_PARSER *st,const char *attr, size_t len) -{ - struct my_cs_file_info *i= (struct my_cs_file_info *)st->user_data; - struct my_cs_file_section_st *s; - int state= (int)((s=cs_file_sec(st->attr, strlen(st->attr))) ? s->state : - 0); - - switch (state) { - case _CS_ID: - i->cs.number= strtol(attr,(char**)NULL,10); - break; - case _CS_BINARY_ID: - i->cs.binary_number= strtol(attr,(char**)NULL,10); - break; - case _CS_PRIMARY_ID: - i->cs.primary_number= strtol(attr,(char**)NULL,10); - break; - case _CS_COLNAME: - i->cs.name=mstr(i->name,attr,len,MY_CS_NAME_SIZE-1); - break; - case _CS_CSNAME: - i->cs.csname=mstr(i->csname,attr,len,MY_CS_NAME_SIZE-1); - break; - case _CS_CSDESCRIPT: - i->cs.comment=mstr(i->comment,attr,len,MY_CS_CSDESCR_SIZE-1); - break; - case _CS_FLAG: - if (!strncmp("primary",attr,len)) - i->cs.state|= MY_CS_PRIMARY; - else if (!strncmp("binary",attr,len)) - i->cs.state|= MY_CS_BINSORT; - else if (!strncmp("compiled",attr,len)) - i->cs.state|= MY_CS_COMPILED; - break; - case _CS_UPPERMAP: - fill_uchar(i->to_upper,MY_CS_TO_UPPER_TABLE_SIZE,attr,len); - i->cs.to_upper=i->to_upper; - break; - case _CS_LOWERMAP: - fill_uchar(i->to_lower,MY_CS_TO_LOWER_TABLE_SIZE,attr,len); - i->cs.to_lower=i->to_lower; - break; - case _CS_UNIMAP: - fill_uint16(i->tab_to_uni,MY_CS_TO_UNI_TABLE_SIZE,attr,len); - i->cs.tab_to_uni=i->tab_to_uni; - break; - case _CS_COLLMAP: - fill_uchar(i->sort_order,MY_CS_SORT_ORDER_TABLE_SIZE,attr,len); - i->cs.sort_order=i->sort_order; - break; - case _CS_CTYPEMAP: - fill_uchar(i->ctype,MY_CS_CTYPE_TABLE_SIZE,attr,len); - i->cs.ctype=i->ctype; - break; - case _CS_RESET: - case _CS_DIFF1: - case _CS_DIFF2: - case _CS_DIFF3: - case _CS_IDENTICAL: - { - /* - Convert collation description from - Locale Data Markup Language (LDML) - into ICU Collation Customization expression. - */ - char arg[16]; - const char *cmd[]= {"&","<","<<","<<<","="}; - i->cs.tailoring= i->tailoring; - mstr(arg,attr,len,sizeof(arg)-1); - if (i->tailoring_length + 20 < sizeof(i->tailoring)) - { - char *dst= i->tailoring_length + i->tailoring; - i->tailoring_length+= sprintf(dst," %s %s",cmd[state-_CS_RESET],arg); - } - } - } - return MY_XML_OK; -} - - -my_bool my_parse_charset_xml(const char *buf, size_t len, - int (*add_collation)(CHARSET_INFO *cs)) -{ - MY_XML_PARSER p; - struct my_cs_file_info i; - my_bool rc; - - my_xml_parser_create(&p); - my_xml_set_enter_handler(&p,cs_enter); - my_xml_set_value_handler(&p,cs_value); - my_xml_set_leave_handler(&p,cs_leave); - i.add_collation= add_collation; - my_xml_set_user_data(&p,(void*)&i); - rc= (my_xml_parse(&p,buf,len) == MY_XML_OK) ? FALSE : TRUE; - my_xml_parser_free(&p); - return rc; -} - - -/* - Check repertoire: detect pure ascii strings -*/ -uint -my_string_repertoire(CHARSET_INFO *cs, const char *str, ulong length) -{ - const char *strend= str + length; - if (cs->mbminlen == 1) - { - for ( ; str < strend; str++) - { - if (((uchar) *str) > 0x7F) - return MY_REPERTOIRE_UNICODE30; - } - } - else - { - my_wc_t wc; - int chlen; - for (; - (chlen= cs->cset->mb_wc(cs, &wc, (uchar*) str, (uchar*) strend)) > 0; - str+= chlen) - { - if (wc > 0x7F) - return MY_REPERTOIRE_UNICODE30; - } - } - return MY_REPERTOIRE_ASCII; -} - - -/* - Returns repertoire for charset -*/ -uint my_charset_repertoire(CHARSET_INFO *cs) -{ - return cs->state & MY_CS_PUREASCII ? - MY_REPERTOIRE_ASCII : MY_REPERTOIRE_UNICODE30; -} - - -/* - Detect whether a character set is ASCII compatible. - - Returns TRUE for: - - - all 8bit character sets whose Unicode mapping of 0x7B is '{' - (ignores swe7 which maps 0x7B to "LATIN LETTER A WITH DIAERESIS") - - - all multi-byte character sets having mbminlen == 1 - (ignores ucs2 whose mbminlen is 2) - - TODO: - - When merging to 5.2, this function should be changed - to check a new flag MY_CS_NONASCII, - - return (cs->flag & MY_CS_NONASCII) ? 0 : 1; - - This flag was previously added into 5.2 under terms - of WL#3759 "Optimize identifier conversion in client-server protocol" - especially to mark character sets not compatible with ASCII. - - We won't backport this flag to 5.0 or 5.1. - This function is Ok for 5.0 and 5.1, because we're not going - to introduce new tricky character sets between 5.0 and 5.2. -*/ -my_bool -my_charset_is_ascii_based(CHARSET_INFO *cs) -{ - return - (cs->mbmaxlen == 1 && cs->tab_to_uni && cs->tab_to_uni['{'] == '{') || - (cs->mbminlen == 1 && cs->mbmaxlen > 1); -} - - -/* - Detect if a character set is 8bit, - and it is pure ascii, i.e. doesn't have - characters outside U+0000..U+007F - This functions is shared between "conf_to_src" - and dynamic charsets loader in "mysqld". -*/ -my_bool -my_charset_is_8bit_pure_ascii(CHARSET_INFO *cs) -{ - size_t code; - if (!cs->tab_to_uni) - return 0; - for (code= 0; code < 256; code++) - { - if (cs->tab_to_uni[code] > 0x7F) - return 0; - } - return 1; -} - - -/* - Shared function between conf_to_src and mysys. - Check if a 8bit character set is compatible with - ascii on the range 0x00..0x7F. -*/ -my_bool -my_charset_is_ascii_compatible(CHARSET_INFO *cs) -{ - uint i; - if (!cs->tab_to_uni) - return 1; - for (i= 0; i < 128; i++) - { - if (cs->tab_to_uni[i] != i) - return 0; - } - return 1; -} diff --git a/deps/mysqllite/strings/decimal.c b/deps/mysqllite/strings/decimal.c deleted file mode 100644 index 762773f045326c..00000000000000 --- a/deps/mysqllite/strings/decimal.c +++ /dev/null @@ -1,3128 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#line 18 "decimal.c" - -/* -======================================================================= - NOTE: this library implements SQL standard "exact numeric" type - and is not at all generic, but rather intentinally crippled to - follow the standard :) -======================================================================= - Quoting the standard - (SQL:2003, Part 2 Foundations, aka ISO/IEC 9075-2:2003) - -4.4.2 Characteristics of numbers, page 27: - - An exact numeric type has a precision P and a scale S. P is a positive - integer that determines the number of significant digits in a - particular radix R, where R is either 2 or 10. S is a non-negative - integer. Every value of an exact numeric type of scale S is of the - form n*10^{-S}, where n is an integer such that �-R^P <= n <= R^P. - - [...] - - If an assignment of some number would result in a loss of its most - significant digit, an exception condition is raised. If least - significant digits are lost, implementation-defined rounding or - truncating occurs, with no exception condition being raised. - - [...] - - Whenever an exact or approximate numeric value is assigned to an exact - numeric value site, an approximation of its value that preserves - leading significant digits after rounding or truncating is represented - in the declared type of the target. The value is converted to have the - precision and scale of the target. The choice of whether to truncate - or round is implementation-defined. - - [...] - - All numeric values between the smallest and the largest value, - inclusive, in a given exact numeric type have an approximation - obtained by rounding or truncation for that type; it is - implementation-defined which other numeric values have such - approximations. - -5.3 , page 143 - - ::= - [ [ ] ] - | - -6.1 , page 165: - - 19) The of an shall not be greater than - the of the . - - 20) For the s DECIMAL and NUMERIC: - - a) The maximum value of is implementation-defined. - shall not be greater than this value. - b) The maximum value of is implementation-defined. - shall not be greater than this maximum value. - - 21) NUMERIC specifies the data type exact numeric, with the decimal - precision and scale specified by the and . - - 22) DECIMAL specifies the data type exact numeric, with the decimal - scale specified by the and the implementation-defined - decimal precision equal to or greater than the value of the - specified . - -6.26 , page 241: - - 1) If the declared type of both operands of a dyadic arithmetic - operator is exact numeric, then the declared type of the result is - an implementation-defined exact numeric type, with precision and - scale determined as follows: - - a) Let S1 and S2 be the scale of the first and second operands - respectively. - b) The precision of the result of addition and subtraction is - implementation-defined, and the scale is the maximum of S1 and S2. - c) The precision of the result of multiplication is - implementation-defined, and the scale is S1 + S2. - d) The precision and scale of the result of division are - implementation-defined. -*/ - -#include -#include -#include -#include /* for my_alloca */ -#include -#include - -/* - Internally decimal numbers are stored base 10^9 (see DIG_BASE below) - So one variable of type decimal_digit_t is limited: - - 0 < decimal_digit <= DIG_MAX < DIG_BASE - - in the struct st_decimal_t: - - intg is the number of *decimal* digits (NOT number of decimal_digit_t's !) - before the point - frac - number of decimal digits after the point - buf is an array of decimal_digit_t's - len is the length of buf (length of allocated space) in decimal_digit_t's, - not in bytes -*/ -typedef decimal_digit_t dec1; -typedef longlong dec2; - -#define DIG_PER_DEC1 9 -#define DIG_MASK 100000000 -#define DIG_BASE 1000000000 -#define DIG_MAX (DIG_BASE-1) -#define DIG_BASE2 ((dec2)DIG_BASE * (dec2)DIG_BASE) -#define ROUND_UP(X) (((X)+DIG_PER_DEC1-1)/DIG_PER_DEC1) -static const dec1 powers10[DIG_PER_DEC1+1]={ - 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000}; -static const int dig2bytes[DIG_PER_DEC1+1]={0, 1, 1, 2, 2, 3, 3, 4, 4, 4}; -static const dec1 frac_max[DIG_PER_DEC1-1]={ - 900000000, 990000000, 999000000, - 999900000, 999990000, 999999000, - 999999900, 999999990 }; - -#ifdef HAVE_purify -#define sanity(d) DBUG_ASSERT((d)->len > 0) -#else -#define sanity(d) DBUG_ASSERT((d)->len >0 && ((d)->buf[0] | \ - (d)->buf[(d)->len-1] | 1)) -#endif - -#define FIX_INTG_FRAC_ERROR(len, intg1, frac1, error) \ - do \ - { \ - if (unlikely(intg1+frac1 > (len))) \ - { \ - if (unlikely(intg1 > (len))) \ - { \ - intg1=(len); \ - frac1=0; \ - error=E_DEC_OVERFLOW; \ - } \ - else \ - { \ - frac1=(len)-intg1; \ - error=E_DEC_TRUNCATED; \ - } \ - } \ - else \ - error=E_DEC_OK; \ - } while(0) - -#define ADD(to, from1, from2, carry) /* assume carry <= 1 */ \ - do \ - { \ - dec1 a=(from1)+(from2)+(carry); \ - DBUG_ASSERT((carry) <= 1); \ - if (((carry)= a >= DIG_BASE)) /* no division here! */ \ - a-=DIG_BASE; \ - (to)=a; \ - } while(0) - -#define ADD2(to, from1, from2, carry) \ - do \ - { \ - dec2 a=((dec2)(from1))+(from2)+(carry); \ - if (((carry)= a >= DIG_BASE)) \ - a-=DIG_BASE; \ - if (unlikely(a >= DIG_BASE)) \ - { \ - a-=DIG_BASE; \ - carry++; \ - } \ - (to)=(dec1) a; \ - } while(0) - -#define SUB(to, from1, from2, carry) /* to=from1-from2 */ \ - do \ - { \ - dec1 a=(from1)-(from2)-(carry); \ - if (((carry)= a < 0)) \ - a+=DIG_BASE; \ - (to)=a; \ - } while(0) - -#define SUB2(to, from1, from2, carry) /* to=from1-from2 */ \ - do \ - { \ - dec1 a=(from1)-(from2)-(carry); \ - if (((carry)= a < 0)) \ - a+=DIG_BASE; \ - if (unlikely(a < 0)) \ - { \ - a+=DIG_BASE; \ - carry++; \ - } \ - (to)=a; \ - } while(0) - -/* - Get maximum value for given precision and scale - - SYNOPSIS - max_decimal() - precision/scale - see decimal_bin_size() below - to - decimal where where the result will be stored - to->buf and to->len must be set. -*/ - -void max_decimal(int precision, int frac, decimal_t *to) -{ - int intpart; - dec1 *buf= to->buf; - DBUG_ASSERT(precision && precision >= frac); - - to->sign= 0; - if ((intpart= to->intg= (precision - frac))) - { - int firstdigits= intpart % DIG_PER_DEC1; - if (firstdigits) - *buf++= powers10[firstdigits] - 1; /* get 9 99 999 ... */ - for(intpart/= DIG_PER_DEC1; intpart; intpart--) - *buf++= DIG_MAX; - } - - if ((to->frac= frac)) - { - int lastdigits= frac % DIG_PER_DEC1; - for(frac/= DIG_PER_DEC1; frac; frac--) - *buf++= DIG_MAX; - if (lastdigits) - *buf= frac_max[lastdigits - 1]; - } -} - - -static dec1 *remove_leading_zeroes(decimal_t *from, int *intg_result) -{ - int intg= from->intg, i; - dec1 *buf0= from->buf; - i= ((intg - 1) % DIG_PER_DEC1) + 1; - while (intg > 0 && *buf0 == 0) - { - intg-= i; - i= DIG_PER_DEC1; - buf0++; - } - if (intg > 0) - { - for (i= (intg - 1) % DIG_PER_DEC1; *buf0 < powers10[i--]; intg--) ; - DBUG_ASSERT(intg > 0); - } - else - intg=0; - *intg_result= intg; - return buf0; -} - - -/* - Count actual length of fraction part (without ending zeroes) - - SYNOPSIS - decimal_actual_fraction() - from number for processing -*/ - -int decimal_actual_fraction(decimal_t *from) -{ - int frac= from->frac, i; - dec1 *buf0= from->buf + ROUND_UP(from->intg) + ROUND_UP(frac) - 1; - - if (frac == 0) - return 0; - - i= ((frac - 1) % DIG_PER_DEC1 + 1); - while (frac > 0 && *buf0 == 0) - { - frac-= i; - i= DIG_PER_DEC1; - buf0--; - } - if (frac > 0) - { - for (i= DIG_PER_DEC1 - ((frac - 1) % DIG_PER_DEC1); - *buf0 % powers10[i++] == 0; - frac--) ; - } - return frac; -} - - -/* - Convert decimal to its printable string representation - - SYNOPSIS - decimal2string() - from - value to convert - to - points to buffer where string representation - should be stored - *to_len - in: size of to buffer - out: length of the actually written string - fixed_precision - 0 if representation can be variable length and - fixed_decimals will not be checked in this case. - Put number as with fixed point position with this - number of digits (sign counted and decimal point is - counted) - fixed_decimals - number digits after point. - filler - character to fill gaps in case of fixed_precision > 0 - - RETURN VALUE - E_DEC_OK/E_DEC_TRUNCATED/E_DEC_OVERFLOW -*/ - -int decimal2string(decimal_t *from, char *to, int *to_len, - int fixed_precision, int fixed_decimals, - char filler) -{ - int len, intg, frac= from->frac, i, intg_len, frac_len, fill; - /* number digits before decimal point */ - int fixed_intg= (fixed_precision ? - (fixed_precision - fixed_decimals) : 0); - int error=E_DEC_OK; - char *s=to; - dec1 *buf, *buf0=from->buf, tmp; - - DBUG_ASSERT(*to_len >= 2+from->sign); - - /* removing leading zeroes */ - buf0= remove_leading_zeroes(from, &intg); - if (unlikely(intg+frac==0)) - { - intg=1; - tmp=0; - buf0=&tmp; - } - - if (!(intg_len= fixed_precision ? fixed_intg : intg)) - intg_len= 1; - frac_len= fixed_precision ? fixed_decimals : frac; - len= from->sign + intg_len + test(frac) + frac_len; - if (fixed_precision) - { - if (frac > fixed_decimals) - { - error= E_DEC_TRUNCATED; - frac= fixed_decimals; - } - if (intg > fixed_intg) - { - error= E_DEC_OVERFLOW; - intg= fixed_intg; - } - } - else if (unlikely(len > --*to_len)) /* reserve one byte for \0 */ - { - int j= len-*to_len; - error= (frac && j <= frac + 1) ? E_DEC_TRUNCATED : E_DEC_OVERFLOW; - if (frac && j >= frac + 1) j--; - if (j > frac) - { - intg-= j-frac; - frac= 0; - } - else - frac-=j; - len= from->sign + intg_len + test(frac) + frac_len; - } - *to_len=len; - s[len]=0; - - if (from->sign) - *s++='-'; - - if (frac) - { - char *s1= s + intg_len; - fill= frac_len - frac; - buf=buf0+ROUND_UP(intg); - *s1++='.'; - for (; frac>0; frac-=DIG_PER_DEC1) - { - dec1 x=*buf++; - for (i=min(frac, DIG_PER_DEC1); i; i--) - { - dec1 y=x/DIG_MASK; - *s1++='0'+(uchar)y; - x-=y*DIG_MASK; - x*=10; - } - } - for(; fill; fill--) - *s1++=filler; - } - - fill= intg_len - intg; - if (intg == 0) - fill--; /* symbol 0 before digital point */ - for(; fill; fill--) - *s++=filler; - if (intg) - { - s+=intg; - for (buf=buf0+ROUND_UP(intg); intg>0; intg-=DIG_PER_DEC1) - { - dec1 x=*--buf; - for (i=min(intg, DIG_PER_DEC1); i; i--) - { - dec1 y=x/10; - *--s='0'+(uchar)(x-y*10); - x=y; - } - } - } - else - *s= '0'; - return error; -} - - -/* - Return bounds of decimal digits in the number - - SYNOPSIS - digits_bounds() - from - decimal number for processing - start_result - index (from 0 ) of first decimal digits will - be written by this address - end_result - index of position just after last decimal digit - be written by this address -*/ - -static void digits_bounds(decimal_t *from, int *start_result, int *end_result) -{ - int start, stop, i; - dec1 *buf_beg= from->buf; - dec1 *end= from->buf + ROUND_UP(from->intg) + ROUND_UP(from->frac); - dec1 *buf_end= end - 1; - - /* find non-zero digit from number begining */ - while (buf_beg < end && *buf_beg == 0) - buf_beg++; - - if (buf_beg >= end) - { - /* it is zero */ - *start_result= *end_result= 0; - return; - } - - /* find non-zero decimal digit from number begining */ - if (buf_beg == from->buf && from->intg) - { - start= DIG_PER_DEC1 - (i= ((from->intg-1) % DIG_PER_DEC1 + 1)); - i--; - } - else - { - i= DIG_PER_DEC1 - 1; - start= (int) ((buf_beg - from->buf) * DIG_PER_DEC1); - } - if (buf_beg < end) - for (; *buf_beg < powers10[i--]; start++) ; - *start_result= start; /* index of first decimal digit (from 0) */ - - /* find non-zero digit at the end */ - while (buf_end > buf_beg && *buf_end == 0) - buf_end--; - /* find non-zero decimal digit from the end */ - if (buf_end == end - 1 && from->frac) - { - stop= (int) (((buf_end - from->buf) * DIG_PER_DEC1 + - (i= ((from->frac - 1) % DIG_PER_DEC1 + 1)))); - i= DIG_PER_DEC1 - i + 1; - } - else - { - stop= (int) ((buf_end - from->buf + 1) * DIG_PER_DEC1); - i= 1; - } - for (; *buf_end % powers10[i++] == 0; stop--) ; - *end_result= stop; /* index of position after last decimal digit (from 0) */ -} - - -/* - Left shift for alignment of data in buffer - - SYNOPSIS - do_mini_left_shift() - dec pointer to decimal number which have to be shifted - shift number of decimal digits on which it should be shifted - beg/end bounds of decimal digits (see digits_bounds()) - - NOTE - Result fitting in the buffer should be garanted. - 'shift' have to be from 1 to DIG_PER_DEC1-1 (inclusive) -*/ - -void do_mini_left_shift(decimal_t *dec, int shift, int beg, int last) -{ - dec1 *from= dec->buf + ROUND_UP(beg + 1) - 1; - dec1 *end= dec->buf + ROUND_UP(last) - 1; - int c_shift= DIG_PER_DEC1 - shift; - DBUG_ASSERT(from >= dec->buf); - DBUG_ASSERT(end < dec->buf + dec->len); - if (beg % DIG_PER_DEC1 < shift) - *(from - 1)= (*from) / powers10[c_shift]; - for(; from < end; from++) - *from= ((*from % powers10[c_shift]) * powers10[shift] + - (*(from + 1)) / powers10[c_shift]); - *from= (*from % powers10[c_shift]) * powers10[shift]; -} - - -/* - Right shift for alignment of data in buffer - - SYNOPSIS - do_mini_left_shift() - dec pointer to decimal number which have to be shifted - shift number of decimal digits on which it should be shifted - beg/end bounds of decimal digits (see digits_bounds()) - - NOTE - Result fitting in the buffer should be garanted. - 'shift' have to be from 1 to DIG_PER_DEC1-1 (inclusive) -*/ - -void do_mini_right_shift(decimal_t *dec, int shift, int beg, int last) -{ - dec1 *from= dec->buf + ROUND_UP(last) - 1; - dec1 *end= dec->buf + ROUND_UP(beg + 1) - 1; - int c_shift= DIG_PER_DEC1 - shift; - DBUG_ASSERT(from < dec->buf + dec->len); - DBUG_ASSERT(end >= dec->buf); - if (DIG_PER_DEC1 - ((last - 1) % DIG_PER_DEC1 + 1) < shift) - *(from + 1)= (*from % powers10[shift]) * powers10[c_shift]; - for(; from > end; from--) - *from= (*from / powers10[shift] + - (*(from - 1) % powers10[shift]) * powers10[c_shift]); - *from= *from / powers10[shift]; -} - - -/* - Shift of decimal digits in given number (with rounding if it need) - - SYNOPSIS - decimal_shift() - dec number to be shifted - shift number of decimal positions - shift > 0 means shift to left shift - shift < 0 meand right shift - NOTE - In fact it is multipling on 10^shift. - RETURN - E_DEC_OK OK - E_DEC_OVERFLOW operation lead to overflow, number is untoched - E_DEC_TRUNCATED number was rounded to fit into buffer -*/ - -int decimal_shift(decimal_t *dec, int shift) -{ - /* index of first non zero digit (all indexes from 0) */ - int beg; - /* index of position after last decimal digit */ - int end; - /* index of digit position just after point */ - int point= ROUND_UP(dec->intg) * DIG_PER_DEC1; - /* new point position */ - int new_point= point + shift; - /* number of digits in result */ - int digits_int, digits_frac; - /* length of result and new fraction in big digits*/ - int new_len, new_frac_len; - /* return code */ - int err= E_DEC_OK; - int new_front; - - if (shift == 0) - return E_DEC_OK; - - digits_bounds(dec, &beg, &end); - - if (beg == end) - { - decimal_make_zero(dec); - return E_DEC_OK; - } - - digits_int= new_point - beg; - set_if_bigger(digits_int, 0); - digits_frac= end - new_point; - set_if_bigger(digits_frac, 0); - - if ((new_len= ROUND_UP(digits_int) + (new_frac_len= ROUND_UP(digits_frac))) > - dec->len) - { - int lack= new_len - dec->len; - int diff; - - if (new_frac_len < lack) - return E_DEC_OVERFLOW; /* lack more then we have in fraction */ - - /* cat off fraction part to allow new number to fit in our buffer */ - err= E_DEC_TRUNCATED; - new_frac_len-= lack; - diff= digits_frac - (new_frac_len * DIG_PER_DEC1); - /* Make rounding method as parameter? */ - decimal_round(dec, dec, end - point - diff, HALF_UP); - end-= diff; - digits_frac= new_frac_len * DIG_PER_DEC1; - - if (end <= beg) - { - /* - we lost all digits (they will be shifted out of buffer), so we can - just return 0 - */ - decimal_make_zero(dec); - return E_DEC_TRUNCATED; - } - } - - if (shift % DIG_PER_DEC1) - { - int l_mini_shift, r_mini_shift, mini_shift; - int do_left; - /* - Calculate left/right shift to align decimal digits inside our bug - digits correctly - */ - if (shift > 0) - { - l_mini_shift= shift % DIG_PER_DEC1; - r_mini_shift= DIG_PER_DEC1 - l_mini_shift; - /* - It is left shift so prefer left shift, but if we have not place from - left, we have to have it from right, because we checked length of - result - */ - do_left= l_mini_shift <= beg; - DBUG_ASSERT(do_left || (dec->len * DIG_PER_DEC1 - end) >= r_mini_shift); - } - else - { - r_mini_shift= (-shift) % DIG_PER_DEC1; - l_mini_shift= DIG_PER_DEC1 - r_mini_shift; - /* see comment above */ - do_left= !((dec->len * DIG_PER_DEC1 - end) >= r_mini_shift); - DBUG_ASSERT(!do_left || l_mini_shift <= beg); - } - if (do_left) - { - do_mini_left_shift(dec, l_mini_shift, beg, end); - mini_shift=- l_mini_shift; - } - else - { - do_mini_right_shift(dec, r_mini_shift, beg, end); - mini_shift= r_mini_shift; - } - new_point+= mini_shift; - /* - If number is shifted and correctly aligned in buffer we can - finish - */ - if (!(shift+= mini_shift) && (new_point - digits_int) < DIG_PER_DEC1) - { - dec->intg= digits_int; - dec->frac= digits_frac; - return err; /* already shifted as it should be */ - } - beg+= mini_shift; - end+= mini_shift; - } - - /* if new 'decimal front' is in first digit, we do not need move digits */ - if ((new_front= (new_point - digits_int)) >= DIG_PER_DEC1 || - new_front < 0) - { - /* need to move digits */ - int d_shift; - dec1 *to, *barier; - if (new_front > 0) - { - /* move left */ - d_shift= new_front / DIG_PER_DEC1; - to= dec->buf + (ROUND_UP(beg + 1) - 1 - d_shift); - barier= dec->buf + (ROUND_UP(end) - 1 - d_shift); - DBUG_ASSERT(to >= dec->buf); - DBUG_ASSERT(barier + d_shift < dec->buf + dec->len); - for(; to <= barier; to++) - *to= *(to + d_shift); - for(barier+= d_shift; to <= barier; to++) - *to= 0; - d_shift= -d_shift; - } - else - { - /* move right */ - d_shift= (1 - new_front) / DIG_PER_DEC1; - to= dec->buf + ROUND_UP(end) - 1 + d_shift; - barier= dec->buf + ROUND_UP(beg + 1) - 1 + d_shift; - DBUG_ASSERT(to < dec->buf + dec->len); - DBUG_ASSERT(barier - d_shift >= dec->buf); - for(; to >= barier; to--) - *to= *(to - d_shift); - for(barier-= d_shift; to >= barier; to--) - *to= 0; - } - d_shift*= DIG_PER_DEC1; - beg+= d_shift; - end+= d_shift; - new_point+= d_shift; - } - - /* - If there are gaps then fill ren with 0. - - Only one of following 'for' loops will work becouse beg <= end - */ - beg= ROUND_UP(beg + 1) - 1; - end= ROUND_UP(end) - 1; - DBUG_ASSERT(new_point >= 0); - - /* We don't want negative new_point below */ - if (new_point != 0) - new_point= ROUND_UP(new_point) - 1; - - if (new_point > end) - { - do - { - dec->buf[new_point]=0; - } while (--new_point > end); - } - else - { - for (; new_point < beg; new_point++) - dec->buf[new_point]= 0; - } - dec->intg= digits_int; - dec->frac= digits_frac; - return err; -} - - -/* - Convert string to decimal - - SYNOPSIS - internal_str2decl() - from - value to convert. Doesn't have to be \0 terminated! - to - decimal where where the result will be stored - to->buf and to->len must be set. - end - Pointer to pointer to end of string. Will on return be - set to the char after the last used character - fixed - use to->intg, to->frac as limits for input number - - NOTE - to->intg and to->frac can be modified even when fixed=1 - (but only decreased, in this case) - - RETURN VALUE - E_DEC_OK/E_DEC_TRUNCATED/E_DEC_OVERFLOW/E_DEC_BAD_NUM/E_DEC_OOM - In case of E_DEC_FATAL_ERROR *to is set to decimal zero - (to make error handling easier) -*/ - -int -internal_str2dec(const char *from, decimal_t *to, char **end, my_bool fixed) -{ - const char *s= from, *s1, *endp, *end_of_string= *end; - int i, intg, frac, error, intg1, frac1; - dec1 x,*buf; - sanity(to); - - error= E_DEC_BAD_NUM; /* In case of bad number */ - while (s < end_of_string && my_isspace(&my_charset_latin1, *s)) - s++; - if (s == end_of_string) - goto fatal_error; - - if ((to->sign= (*s == '-'))) - s++; - else if (*s == '+') - s++; - - s1=s; - while (s < end_of_string && my_isdigit(&my_charset_latin1, *s)) - s++; - intg= (int) (s-s1); - if (s < end_of_string && *s=='.') - { - endp= s+1; - while (endp < end_of_string && my_isdigit(&my_charset_latin1, *endp)) - endp++; - frac= (int) (endp - s - 1); - } - else - { - frac= 0; - endp= s; - } - - *end= (char*) endp; - - if (frac+intg == 0) - goto fatal_error; - - error= 0; - if (fixed) - { - if (frac > to->frac) - { - error=E_DEC_TRUNCATED; - frac=to->frac; - } - if (intg > to->intg) - { - error=E_DEC_OVERFLOW; - intg=to->intg; - } - intg1=ROUND_UP(intg); - frac1=ROUND_UP(frac); - if (intg1+frac1 > to->len) - { - error= E_DEC_OOM; - goto fatal_error; - } - } - else - { - intg1=ROUND_UP(intg); - frac1=ROUND_UP(frac); - FIX_INTG_FRAC_ERROR(to->len, intg1, frac1, error); - if (unlikely(error)) - { - frac=frac1*DIG_PER_DEC1; - if (error == E_DEC_OVERFLOW) - intg=intg1*DIG_PER_DEC1; - } - } - /* Error is guranteed to be set here */ - to->intg=intg; - to->frac=frac; - - buf=to->buf+intg1; - s1=s; - - for (x=0, i=0; intg; intg--) - { - x+= (*--s - '0')*powers10[i]; - - if (unlikely(++i == DIG_PER_DEC1)) - { - *--buf=x; - x=0; - i=0; - } - } - if (i) - *--buf=x; - - buf=to->buf+intg1; - for (x=0, i=0; frac; frac--) - { - x= (*++s1 - '0') + x*10; - - if (unlikely(++i == DIG_PER_DEC1)) - { - *buf++=x; - x=0; - i=0; - } - } - if (i) - *buf=x*powers10[DIG_PER_DEC1-i]; - - /* Handle exponent */ - if (endp+1 < end_of_string && (*endp == 'e' || *endp == 'E')) - { - int str_error; - longlong exponent= my_strtoll10(endp+1, (char**) &end_of_string, - &str_error); - - if (end_of_string != endp +1) /* If at least one digit */ - { - *end= (char*) end_of_string; - if (str_error > 0) - { - error= E_DEC_BAD_NUM; - goto fatal_error; - } - if (exponent > INT_MAX/2 || (str_error == 0 && exponent < 0)) - { - error= E_DEC_OVERFLOW; - goto fatal_error; - } - if (exponent < INT_MIN/2 && error != E_DEC_OVERFLOW) - { - error= E_DEC_TRUNCATED; - goto fatal_error; - } - if (error != E_DEC_OVERFLOW) - error= decimal_shift(to, (int) exponent); - } - } - return error; - -fatal_error: - decimal_make_zero(to); - return error; -} - - -/* - Convert decimal to double - - SYNOPSIS - decimal2double() - from - value to convert - to - result will be stored there - - RETURN VALUE - E_DEC_OK/E_DEC_OVERFLOW/E_DEC_TRUNCATED -*/ - -int decimal2double(decimal_t *from, double *to) -{ - char strbuf[FLOATING_POINT_BUFFER], *end; - int len= sizeof(strbuf); - int rc, error; - - rc = decimal2string(from, strbuf, &len, 0, 0, 0); - end= strbuf + len; - - DBUG_PRINT("info", ("interm.: %s", strbuf)); - - *to= my_strtod(strbuf, &end, &error); - - DBUG_PRINT("info", ("result: %f", *to)); - - return (rc != E_DEC_OK) ? rc : (error ? E_DEC_OVERFLOW : E_DEC_OK); -} - -/* - Convert double to decimal - - SYNOPSIS - double2decimal() - from - value to convert - to - result will be stored there - - RETURN VALUE - E_DEC_OK/E_DEC_OVERFLOW/E_DEC_TRUNCATED -*/ - -int double2decimal(double from, decimal_t *to) -{ - char buff[FLOATING_POINT_BUFFER], *end; - int res; - DBUG_ENTER("double2decimal"); - end= buff + my_gcvt(from, MY_GCVT_ARG_DOUBLE, sizeof(buff) - 1, buff, NULL); - res= string2decimal(buff, to, &end); - DBUG_PRINT("exit", ("res: %d", res)); - DBUG_RETURN(res); -} - - -static int ull2dec(ulonglong from, decimal_t *to) -{ - int intg1, error=E_DEC_OK; - ulonglong x=from; - dec1 *buf; - - sanity(to); - - for (intg1=1; from >= DIG_BASE; intg1++, from/=DIG_BASE) ; - if (unlikely(intg1 > to->len)) - { - intg1=to->len; - error=E_DEC_OVERFLOW; - } - to->frac=0; - to->intg=intg1*DIG_PER_DEC1; - - for (buf=to->buf+intg1; intg1; intg1--) - { - ulonglong y=x/DIG_BASE; - *--buf=(dec1)(x-y*DIG_BASE); - x=y; - } - return error; -} - -int ulonglong2decimal(ulonglong from, decimal_t *to) -{ - to->sign=0; - return ull2dec(from, to); -} - -int longlong2decimal(longlong from, decimal_t *to) -{ - if ((to->sign= from < 0)) - return ull2dec(-from, to); - return ull2dec(from, to); -} - -int decimal2ulonglong(decimal_t *from, ulonglong *to) -{ - dec1 *buf=from->buf; - ulonglong x=0; - int intg, frac; - - if (from->sign) - { - *to=ULL(0); - return E_DEC_OVERFLOW; - } - - for (intg=from->intg; intg > 0; intg-=DIG_PER_DEC1) - { - ulonglong y=x; - x=x*DIG_BASE + *buf++; - if (unlikely(y > ((ulonglong) ULONGLONG_MAX/DIG_BASE) || x < y)) - { - *to=ULONGLONG_MAX; - return E_DEC_OVERFLOW; - } - } - *to=x; - for (frac=from->frac; unlikely(frac > 0); frac-=DIG_PER_DEC1) - if (*buf++) - return E_DEC_TRUNCATED; - return E_DEC_OK; -} - -int decimal2longlong(decimal_t *from, longlong *to) -{ - dec1 *buf=from->buf; - longlong x=0; - int intg, frac; - - for (intg=from->intg; intg > 0; intg-=DIG_PER_DEC1) - { - longlong y=x; - /* - Attention: trick! - we're calculating -|from| instead of |from| here - because |LONGLONG_MIN| > LONGLONG_MAX - so we can convert -9223372036854775808 correctly - */ - x=x*DIG_BASE - *buf++; - if (unlikely(y < (LONGLONG_MIN/DIG_BASE) || x > y)) - { - /* - the decimal is bigger than any possible integer - return border integer depending on the sign - */ - *to= from->sign ? LONGLONG_MIN : LONGLONG_MAX; - return E_DEC_OVERFLOW; - } - } - /* boundary case: 9223372036854775808 */ - if (unlikely(from->sign==0 && x == LONGLONG_MIN)) - { - *to= LONGLONG_MAX; - return E_DEC_OVERFLOW; - } - - *to=from->sign ? x : -x; - for (frac=from->frac; unlikely(frac > 0); frac-=DIG_PER_DEC1) - if (*buf++) - return E_DEC_TRUNCATED; - return E_DEC_OK; -} - -/* - Convert decimal to its binary fixed-length representation - two representations of the same length can be compared with memcmp - with the correct -1/0/+1 result - - SYNOPSIS - decimal2bin() - from - value to convert - to - points to buffer where string representation should be stored - precision/scale - see decimal_bin_size() below - - NOTE - the buffer is assumed to be of the size decimal_bin_size(precision, scale) - - RETURN VALUE - E_DEC_OK/E_DEC_TRUNCATED/E_DEC_OVERFLOW - - DESCRIPTION - for storage decimal numbers are converted to the "binary" format. - - This format has the following properties: - 1. length of the binary representation depends on the {precision, scale} - as provided by the caller and NOT on the intg/frac of the decimal to - convert. - 2. binary representations of the same {precision, scale} can be compared - with memcmp - with the same result as decimal_cmp() of the original - decimals (not taking into account possible precision loss during - conversion). - - This binary format is as follows: - 1. First the number is converted to have a requested precision and scale. - 2. Every full DIG_PER_DEC1 digits of intg part are stored in 4 bytes - as is - 3. The first intg % DIG_PER_DEC1 digits are stored in the reduced - number of bytes (enough bytes to store this number of digits - - see dig2bytes) - 4. same for frac - full decimal_digit_t's are stored as is, - the last frac % DIG_PER_DEC1 digits - in the reduced number of bytes. - 5. If the number is negative - every byte is inversed. - 5. The very first bit of the resulting byte array is inverted (because - memcmp compares unsigned bytes, see property 2 above) - - Example: - - 1234567890.1234 - - internally is represented as 3 decimal_digit_t's - - 1 234567890 123400000 - - (assuming we want a binary representation with precision=14, scale=4) - in hex it's - - 00-00-00-01 0D-FB-38-D2 07-5A-EF-40 - - now, middle decimal_digit_t is full - it stores 9 decimal digits. It goes - into binary representation as is: - - - ........... 0D-FB-38-D2 ............ - - First decimal_digit_t has only one decimal digit. We can store one digit in - one byte, no need to waste four: - - 01 0D-FB-38-D2 ............ - - now, last digit. It's 123400000. We can store 1234 in two bytes: - - 01 0D-FB-38-D2 04-D2 - - So, we've packed 12 bytes number in 7 bytes. - And now we invert the highest bit to get the final result: - - 81 0D FB 38 D2 04 D2 - - And for -1234567890.1234 it would be - - 7E F2 04 37 2D FB 2D -*/ -int decimal2bin(decimal_t *from, uchar *to, int precision, int frac) -{ - dec1 mask=from->sign ? -1 : 0, *buf1=from->buf, *stop1; - int error=E_DEC_OK, intg=precision-frac, - isize1, intg1, intg1x, from_intg, - intg0=intg/DIG_PER_DEC1, - frac0=frac/DIG_PER_DEC1, - intg0x=intg-intg0*DIG_PER_DEC1, - frac0x=frac-frac0*DIG_PER_DEC1, - frac1=from->frac/DIG_PER_DEC1, - frac1x=from->frac-frac1*DIG_PER_DEC1, - isize0=intg0*sizeof(dec1)+dig2bytes[intg0x], - fsize0=frac0*sizeof(dec1)+dig2bytes[frac0x], - fsize1=frac1*sizeof(dec1)+dig2bytes[frac1x]; - const int orig_isize0= isize0; - const int orig_fsize0= fsize0; - uchar *orig_to= to; - - buf1= remove_leading_zeroes(from, &from_intg); - - if (unlikely(from_intg+fsize1==0)) - { - mask=0; /* just in case */ - intg=1; - buf1=&mask; - } - - intg1=from_intg/DIG_PER_DEC1; - intg1x=from_intg-intg1*DIG_PER_DEC1; - isize1=intg1*sizeof(dec1)+dig2bytes[intg1x]; - - if (intg < from_intg) - { - buf1+=intg1-intg0+(intg1x>0)-(intg0x>0); - intg1=intg0; intg1x=intg0x; - error=E_DEC_OVERFLOW; - } - else if (isize0 > isize1) - { - while (isize0-- > isize1) - *to++= (char)mask; - } - if (fsize0 < fsize1) - { - frac1=frac0; frac1x=frac0x; - error=E_DEC_TRUNCATED; - } - else if (fsize0 > fsize1 && frac1x) - { - if (frac0 == frac1) - { - frac1x=frac0x; - fsize0= fsize1; - } - else - { - frac1++; - frac1x=0; - } - } - - /* intg1x part */ - if (intg1x) - { - int i=dig2bytes[intg1x]; - dec1 x=(*buf1++ % powers10[intg1x]) ^ mask; - switch (i) - { - case 1: mi_int1store(to, x); break; - case 2: mi_int2store(to, x); break; - case 3: mi_int3store(to, x); break; - case 4: mi_int4store(to, x); break; - default: DBUG_ASSERT(0); - } - to+=i; - } - - /* intg1+frac1 part */ - for (stop1=buf1+intg1+frac1; buf1 < stop1; to+=sizeof(dec1)) - { - dec1 x=*buf1++ ^ mask; - DBUG_ASSERT(sizeof(dec1) == 4); - mi_int4store(to, x); - } - - /* frac1x part */ - if (frac1x) - { - dec1 x; - int i=dig2bytes[frac1x], - lim=(frac1 < frac0 ? DIG_PER_DEC1 : frac0x); - while (frac1x < lim && dig2bytes[frac1x] == i) - frac1x++; - x=(*buf1 / powers10[DIG_PER_DEC1 - frac1x]) ^ mask; - switch (i) - { - case 1: mi_int1store(to, x); break; - case 2: mi_int2store(to, x); break; - case 3: mi_int3store(to, x); break; - case 4: mi_int4store(to, x); break; - default: DBUG_ASSERT(0); - } - to+=i; - } - if (fsize0 > fsize1) - { - uchar *to_end= orig_to + orig_fsize0 + orig_isize0; - - while (fsize0-- > fsize1 && to < to_end) - *to++= (uchar)mask; - } - orig_to[0]^= 0x80; - - /* Check that we have written the whole decimal and nothing more */ - DBUG_ASSERT(to == orig_to + orig_fsize0 + orig_isize0); - return error; -} - -/* - Restores decimal from its binary fixed-length representation - - SYNOPSIS - bin2decimal() - from - value to convert - to - result - precision/scale - see decimal_bin_size() below - - NOTE - see decimal2bin() - the buffer is assumed to be of the size decimal_bin_size(precision, scale) - - RETURN VALUE - E_DEC_OK/E_DEC_TRUNCATED/E_DEC_OVERFLOW -*/ - -int bin2decimal(const uchar *from, decimal_t *to, int precision, int scale) -{ - int error=E_DEC_OK, intg=precision-scale, - intg0=intg/DIG_PER_DEC1, frac0=scale/DIG_PER_DEC1, - intg0x=intg-intg0*DIG_PER_DEC1, frac0x=scale-frac0*DIG_PER_DEC1, - intg1=intg0+(intg0x>0), frac1=frac0+(frac0x>0); - dec1 *buf=to->buf, mask=(*from & 0x80) ? 0 : -1; - const uchar *stop; - uchar *d_copy; - int bin_size= decimal_bin_size(precision, scale); - - sanity(to); - d_copy= (uchar*) my_alloca(bin_size); - memcpy(d_copy, from, bin_size); - d_copy[0]^= 0x80; - from= d_copy; - - FIX_INTG_FRAC_ERROR(to->len, intg1, frac1, error); - if (unlikely(error)) - { - if (intg1 < intg0+(intg0x>0)) - { - from+=dig2bytes[intg0x]+sizeof(dec1)*(intg0-intg1); - frac0=frac0x=intg0x=0; - intg0=intg1; - } - else - { - frac0x=0; - frac0=frac1; - } - } - - to->sign=(mask != 0); - to->intg=intg0*DIG_PER_DEC1+intg0x; - to->frac=frac0*DIG_PER_DEC1+frac0x; - - if (intg0x) - { - int i=dig2bytes[intg0x]; - dec1 UNINIT_VAR(x); - switch (i) - { - case 1: x=mi_sint1korr(from); break; - case 2: x=mi_sint2korr(from); break; - case 3: x=mi_sint3korr(from); break; - case 4: x=mi_sint4korr(from); break; - default: DBUG_ASSERT(0); - } - from+=i; - *buf=x ^ mask; - if (((ulonglong)*buf) >= (ulonglong) powers10[intg0x+1]) - goto err; - if (buf > to->buf || *buf != 0) - buf++; - else - to->intg-=intg0x; - } - for (stop=from+intg0*sizeof(dec1); from < stop; from+=sizeof(dec1)) - { - DBUG_ASSERT(sizeof(dec1) == 4); - *buf=mi_sint4korr(from) ^ mask; - if (((uint32)*buf) > DIG_MAX) - goto err; - if (buf > to->buf || *buf != 0) - buf++; - else - to->intg-=DIG_PER_DEC1; - } - DBUG_ASSERT(to->intg >=0); - for (stop=from+frac0*sizeof(dec1); from < stop; from+=sizeof(dec1)) - { - DBUG_ASSERT(sizeof(dec1) == 4); - *buf=mi_sint4korr(from) ^ mask; - if (((uint32)*buf) > DIG_MAX) - goto err; - buf++; - } - if (frac0x) - { - int i=dig2bytes[frac0x]; - dec1 UNINIT_VAR(x); - switch (i) - { - case 1: x=mi_sint1korr(from); break; - case 2: x=mi_sint2korr(from); break; - case 3: x=mi_sint3korr(from); break; - case 4: x=mi_sint4korr(from); break; - default: DBUG_ASSERT(0); - } - *buf=(x ^ mask) * powers10[DIG_PER_DEC1 - frac0x]; - if (((uint32)*buf) > DIG_MAX) - goto err; - buf++; - } - my_afree(d_copy); - return error; - -err: - my_afree(d_copy); - decimal_make_zero(((decimal_t*) to)); - return(E_DEC_BAD_NUM); -} - -/* - Returns the size of array to hold a decimal with given precision and scale - - RETURN VALUE - size in dec1 - (multiply by sizeof(dec1) to get the size if bytes) -*/ - -int decimal_size(int precision, int scale) -{ - DBUG_ASSERT(scale >= 0 && precision > 0 && scale <= precision); - return ROUND_UP(precision-scale)+ROUND_UP(scale); -} - -/* - Returns the size of array to hold a binary representation of a decimal - - RETURN VALUE - size in bytes -*/ - -int decimal_bin_size(int precision, int scale) -{ - int intg=precision-scale, - intg0=intg/DIG_PER_DEC1, frac0=scale/DIG_PER_DEC1, - intg0x=intg-intg0*DIG_PER_DEC1, frac0x=scale-frac0*DIG_PER_DEC1; - - DBUG_ASSERT(scale >= 0 && precision > 0 && scale <= precision); - return intg0*sizeof(dec1)+dig2bytes[intg0x]+ - frac0*sizeof(dec1)+dig2bytes[frac0x]; -} - -/* - Rounds the decimal to "scale" digits - - SYNOPSIS - decimal_round() - from - decimal to round, - to - result buffer. from==to is allowed - scale - to what position to round. can be negative! - mode - round to nearest even or truncate - - NOTES - scale can be negative ! - one TRUNCATED error (line XXX below) isn't treated very logical :( - - RETURN VALUE - E_DEC_OK/E_DEC_TRUNCATED -*/ - -int -decimal_round(decimal_t *from, decimal_t *to, int scale, - decimal_round_mode mode) -{ - int frac0=scale>0 ? ROUND_UP(scale) : scale/DIG_PER_DEC1, - frac1=ROUND_UP(from->frac), UNINIT_VAR(round_digit), - intg0=ROUND_UP(from->intg), error=E_DEC_OK, len=to->len, - intg1=ROUND_UP(from->intg + - (((intg0 + frac0)>0) && (from->buf[0] == DIG_MAX))); - dec1 *buf0=from->buf, *buf1=to->buf, x, y, carry=0; - int first_dig; - - sanity(to); - - switch (mode) { - case HALF_UP: - case HALF_EVEN: round_digit=5; break; - case CEILING: round_digit= from->sign ? 10 : 0; break; - case FLOOR: round_digit= from->sign ? 0 : 10; break; - case TRUNCATE: round_digit=10; break; - default: DBUG_ASSERT(0); - } - - if (unlikely(frac0+intg0 > len)) - { - frac0=len-intg0; - scale=frac0*DIG_PER_DEC1; - error=E_DEC_TRUNCATED; - } - - if (scale+from->intg < 0) - { - decimal_make_zero(to); - return E_DEC_OK; - } - - if (to != from || intg1>intg0) - { - dec1 *p0= buf0+intg0+max(frac1, frac0); - dec1 *p1= buf1+intg1+max(frac1, frac0); - - while (buf0 < p0) - *(--p1) = *(--p0); - if (unlikely(intg1 > intg0)) - to->buf[0]= 0; - - intg0= intg1; - buf0=to->buf; - buf1=to->buf; - to->sign=from->sign; - to->intg=min(intg0, len)*DIG_PER_DEC1; - } - - if (frac0 > frac1) - { - buf1+=intg0+frac1; - while (frac0-- > frac1) - *buf1++=0; - goto done; - } - - if (scale >= from->frac) - goto done; /* nothing to do */ - - buf0+=intg0+frac0-1; - buf1+=intg0+frac0-1; - if (scale == frac0*DIG_PER_DEC1) - { - int do_inc= FALSE; - DBUG_ASSERT(frac0+intg0 >= 0); - switch (round_digit) { - case 0: - { - dec1 *p0= buf0 + (frac1-frac0); - for (; p0 > buf0; p0--) - { - if (*p0) - { - do_inc= TRUE; - break; - } - } - break; - } - case 5: - { - x= buf0[1]/DIG_MASK; - do_inc= (x>5) || ((x == 5) && - (mode == HALF_UP || (frac0+intg0 > 0 && *buf0 & 1))); - break; - } - default: - break; - } - if (do_inc) - { - if (frac0+intg0>0) - (*buf1)++; - else - *(++buf1)=DIG_BASE; - } - else if (frac0+intg0==0) - { - decimal_make_zero(to); - return E_DEC_OK; - } - } - else - { - /* TODO - fix this code as it won't work for CEILING mode */ - int pos=frac0*DIG_PER_DEC1-scale-1; - DBUG_ASSERT(frac0+intg0 > 0); - x=*buf1 / powers10[pos]; - y=x % 10; - if (y > round_digit || - (round_digit == 5 && y == 5 && (mode == HALF_UP || (x/10) & 1))) - x+=10; - *buf1=powers10[pos]*(x-y); - } - /* - In case we're rounding e.g. 1.5e9 to 2.0e9, the decimal_digit_t's inside - the buffer are as follows. - - Before <1, 5e8> - After <2, 5e8> - - Hence we need to set the 2nd field to 0. - The same holds if we round 1.5e-9 to 2e-9. - */ - if (frac0 < frac1) - { - dec1 *buf= to->buf + ((scale == 0 && intg0 == 0) ? 1 : intg0 + frac0); - dec1 *end= to->buf + len; - - while (buf < end) - *buf++=0; - } - if (*buf1 >= DIG_BASE) - { - carry=1; - *buf1-=DIG_BASE; - while (carry && --buf1 >= to->buf) - ADD(*buf1, *buf1, 0, carry); - if (unlikely(carry)) - { - /* shifting the number to create space for new digit */ - if (frac0+intg0 >= len) - { - frac0--; - scale=frac0*DIG_PER_DEC1; - error=E_DEC_TRUNCATED; /* XXX */ - } - for (buf1=to->buf+intg0+max(frac0,0); buf1 > to->buf; buf1--) - { - buf1[0]=buf1[-1]; - } - *buf1=1; - to->intg++; - } - } - else - { - for (;;) - { - if (likely(*buf1)) - break; - if (buf1-- == to->buf) - { - /* making 'zero' with the proper scale */ - dec1 *p0= to->buf + frac0 + 1; - to->intg=1; - to->frac= max(scale, 0); - to->sign= 0; - for (buf1= to->buf; buf1 1000 case when we need to increase intg */ - first_dig= to->intg % DIG_PER_DEC1; - if (first_dig && (*buf1 >= powers10[first_dig])) - to->intg++; - - if (scale<0) - scale=0; - -done: - to->frac=scale; - return error; -} - -/* - Returns the size of the result of the operation - - SYNOPSIS - decimal_result_size() - from1 - operand of the unary operation or first operand of the - binary operation - from2 - second operand of the binary operation - op - operation. one char '+', '-', '*', '/' are allowed - others may be added later - param - extra param to the operation. unused for '+', '-', '*' - scale increment for '/' - - NOTE - returned valued may be larger than the actual buffer requred - in the operation, as decimal_result_size, by design, operates on - precision/scale values only and not on the actual decimal number - - RETURN VALUE - size of to->buf array in dec1 elements. to get size in bytes - multiply by sizeof(dec1) -*/ - -int decimal_result_size(decimal_t *from1, decimal_t *from2, char op, int param) -{ - switch (op) { - case '-': - return ROUND_UP(max(from1->intg, from2->intg)) + - ROUND_UP(max(from1->frac, from2->frac)); - case '+': - return ROUND_UP(max(from1->intg, from2->intg)+1) + - ROUND_UP(max(from1->frac, from2->frac)); - case '*': - return ROUND_UP(from1->intg+from2->intg)+ - ROUND_UP(from1->frac)+ROUND_UP(from2->frac); - case '/': - return ROUND_UP(from1->intg+from2->intg+1+from1->frac+from2->frac+param); - default: DBUG_ASSERT(0); - } - return -1; /* shut up the warning */ -} - -static int do_add(decimal_t *from1, decimal_t *from2, decimal_t *to) -{ - int intg1=ROUND_UP(from1->intg), intg2=ROUND_UP(from2->intg), - frac1=ROUND_UP(from1->frac), frac2=ROUND_UP(from2->frac), - frac0=max(frac1, frac2), intg0=max(intg1, intg2), error; - dec1 *buf1, *buf2, *buf0, *stop, *stop2, x, carry; - - sanity(to); - - /* is there a need for extra word because of carry ? */ - x=intg1 > intg2 ? from1->buf[0] : - intg2 > intg1 ? from2->buf[0] : - from1->buf[0] + from2->buf[0] ; - if (unlikely(x > DIG_MAX-1)) /* yes, there is */ - { - intg0++; - to->buf[0]=0; /* safety */ - } - - FIX_INTG_FRAC_ERROR(to->len, intg0, frac0, error); - if (unlikely(error == E_DEC_OVERFLOW)) - { - max_decimal(to->len * DIG_PER_DEC1, 0, to); - return error; - } - - buf0=to->buf+intg0+frac0; - - to->sign=from1->sign; - to->frac=max(from1->frac, from2->frac); - to->intg=intg0*DIG_PER_DEC1; - if (unlikely(error)) - { - set_if_smaller(to->frac, frac0*DIG_PER_DEC1); - set_if_smaller(frac1, frac0); - set_if_smaller(frac2, frac0); - set_if_smaller(intg1, intg0); - set_if_smaller(intg2, intg0); - } - - /* part 1 - max(frac) ... min (frac) */ - if (frac1 > frac2) - { - buf1=from1->buf+intg1+frac1; - stop=from1->buf+intg1+frac2; - buf2=from2->buf+intg2+frac2; - stop2=from1->buf+(intg1 > intg2 ? intg1-intg2 : 0); - } - else - { - buf1=from2->buf+intg2+frac2; - stop=from2->buf+intg2+frac1; - buf2=from1->buf+intg1+frac1; - stop2=from2->buf+(intg2 > intg1 ? intg2-intg1 : 0); - } - while (buf1 > stop) - *--buf0=*--buf1; - - /* part 2 - min(frac) ... min(intg) */ - carry=0; - while (buf1 > stop2) - { - ADD(*--buf0, *--buf1, *--buf2, carry); - } - - /* part 3 - min(intg) ... max(intg) */ - buf1= intg1 > intg2 ? ((stop=from1->buf)+intg1-intg2) : - ((stop=from2->buf)+intg2-intg1) ; - while (buf1 > stop) - { - ADD(*--buf0, *--buf1, 0, carry); - } - - if (unlikely(carry)) - *--buf0=1; - DBUG_ASSERT(buf0 == to->buf || buf0 == to->buf+1); - - return error; -} - -/* to=from1-from2. - if to==0, return -1/0/+1 - the result of the comparison */ -static int do_sub(decimal_t *from1, decimal_t *from2, decimal_t *to) -{ - int intg1=ROUND_UP(from1->intg), intg2=ROUND_UP(from2->intg), - frac1=ROUND_UP(from1->frac), frac2=ROUND_UP(from2->frac); - int frac0=max(frac1, frac2), error; - dec1 *buf1, *buf2, *buf0, *stop1, *stop2, *start1, *start2, carry=0; - - /* let carry:=1 if from2 > from1 */ - start1=buf1=from1->buf; stop1=buf1+intg1; - start2=buf2=from2->buf; stop2=buf2+intg2; - if (unlikely(*buf1 == 0)) - { - while (buf1 < stop1 && *buf1 == 0) - buf1++; - start1=buf1; - intg1= (int) (stop1-buf1); - } - if (unlikely(*buf2 == 0)) - { - while (buf2 < stop2 && *buf2 == 0) - buf2++; - start2=buf2; - intg2= (int) (stop2-buf2); - } - if (intg2 > intg1) - carry=1; - else if (intg2 == intg1) - { - dec1 *end1= stop1 + (frac1 - 1); - dec1 *end2= stop2 + (frac2 - 1); - while (unlikely((buf1 <= end1) && (*end1 == 0))) - end1--; - while (unlikely((buf2 <= end2) && (*end2 == 0))) - end2--; - frac1= (int) (end1 - stop1) + 1; - frac2= (int) (end2 - stop2) + 1; - while (buf1 <=end1 && buf2 <= end2 && *buf1 == *buf2) - buf1++, buf2++; - if (buf1 <= end1) - { - if (buf2 <= end2) - carry= *buf2 > *buf1; - else - carry= 0; - } - else - { - if (buf2 <= end2) - carry=1; - else /* short-circuit everything: from1 == from2 */ - { - if (to == 0) /* decimal_cmp() */ - return 0; - decimal_make_zero(to); - return E_DEC_OK; - } - } - } - - if (to == 0) /* decimal_cmp() */ - return carry == from1->sign ? 1 : -1; - - sanity(to); - - to->sign=from1->sign; - - /* ensure that always from1 > from2 (and intg1 >= intg2) */ - if (carry) - { - swap_variables(decimal_t *,from1,from1); - swap_variables(dec1 *,start1, start2); - swap_variables(int,intg1,intg2); - swap_variables(int,frac1,frac2); - to->sign= 1 - to->sign; - } - - FIX_INTG_FRAC_ERROR(to->len, intg1, frac0, error); - buf0=to->buf+intg1+frac0; - - to->frac=max(from1->frac, from2->frac); - to->intg=intg1*DIG_PER_DEC1; - if (unlikely(error)) - { - set_if_smaller(to->frac, frac0*DIG_PER_DEC1); - set_if_smaller(frac1, frac0); - set_if_smaller(frac2, frac0); - set_if_smaller(intg2, intg1); - } - carry=0; - - /* part 1 - max(frac) ... min (frac) */ - if (frac1 > frac2) - { - buf1=start1+intg1+frac1; - stop1=start1+intg1+frac2; - buf2=start2+intg2+frac2; - while (frac0-- > frac1) - *--buf0=0; - while (buf1 > stop1) - *--buf0=*--buf1; - } - else - { - buf1=start1+intg1+frac1; - buf2=start2+intg2+frac2; - stop2=start2+intg2+frac1; - while (frac0-- > frac2) - *--buf0=0; - while (buf2 > stop2) - { - SUB(*--buf0, 0, *--buf2, carry); - } - } - - /* part 2 - min(frac) ... intg2 */ - while (buf2 > start2) - { - SUB(*--buf0, *--buf1, *--buf2, carry); - } - - /* part 3 - intg2 ... intg1 */ - while (carry && buf1 > start1) - { - SUB(*--buf0, *--buf1, 0, carry); - } - - while (buf1 > start1) - *--buf0=*--buf1; - - while (buf0 > to->buf) - *--buf0=0; - - return error; -} - -int decimal_intg(decimal_t *from) -{ - int res; - remove_leading_zeroes(from, &res); - return res; -} - -int decimal_add(decimal_t *from1, decimal_t *from2, decimal_t *to) -{ - if (likely(from1->sign == from2->sign)) - return do_add(from1, from2, to); - return do_sub(from1, from2, to); -} - -int decimal_sub(decimal_t *from1, decimal_t *from2, decimal_t *to) -{ - if (likely(from1->sign == from2->sign)) - return do_sub(from1, from2, to); - return do_add(from1, from2, to); -} - -int decimal_cmp(decimal_t *from1, decimal_t *from2) -{ - if (likely(from1->sign == from2->sign)) - return do_sub(from1, from2, 0); - return from1->sign > from2->sign ? -1 : 1; -} - -int decimal_is_zero(decimal_t *from) -{ - dec1 *buf1=from->buf, - *end=buf1+ROUND_UP(from->intg)+ROUND_UP(from->frac); - while (buf1 < end) - if (*buf1++) - return 0; - return 1; -} - -/* - multiply two decimals - - SYNOPSIS - decimal_mul() - from1, from2 - factors - to - product - - RETURN VALUE - E_DEC_OK/E_DEC_TRUNCATED/E_DEC_OVERFLOW; - - NOTES - in this implementation, with sizeof(dec1)=4 we have DIG_PER_DEC1=9, - and 63-digit number will take only 7 dec1 words (basically a 7-digit - "base 999999999" number). Thus there's no need in fast multiplication - algorithms, 7-digit numbers can be multiplied with a naive O(n*n) - method. - - XXX if this library is to be used with huge numbers of thousands of - digits, fast multiplication must be implemented. -*/ -int decimal_mul(decimal_t *from1, decimal_t *from2, decimal_t *to) -{ - int intg1=ROUND_UP(from1->intg), intg2=ROUND_UP(from2->intg), - frac1=ROUND_UP(from1->frac), frac2=ROUND_UP(from2->frac), - intg0=ROUND_UP(from1->intg+from2->intg), - frac0=frac1+frac2, error, i, j, d_to_move; - dec1 *buf1=from1->buf+intg1, *buf2=from2->buf+intg2, *buf0, - *start2, *stop2, *stop1, *start0, carry; - - sanity(to); - - i=intg0; /* save 'ideal' values */ - j=frac0; - FIX_INTG_FRAC_ERROR(to->len, intg0, frac0, error); /* bound size */ - to->sign=from1->sign != from2->sign; - to->frac=from1->frac+from2->frac; /* store size in digits */ - to->intg=intg0*DIG_PER_DEC1; - - if (unlikely(error)) - { - set_if_smaller(to->frac, frac0*DIG_PER_DEC1); - set_if_smaller(to->intg, intg0*DIG_PER_DEC1); - if (unlikely(i > intg0)) /* bounded integer-part */ - { - i-=intg0; - j=i >> 1; - intg1-= j; - intg2-=i-j; - frac1=frac2=0; /* frac0 is already 0 here */ - } - else /* bounded fract part */ - { - j-=frac0; - i=j >> 1; - if (frac1 <= frac2) - { - frac1-= i; - frac2-=j-i; - } - else - { - frac2-= i; - frac1-=j-i; - } - } - } - start0=to->buf+intg0+frac0-1; - start2=buf2+frac2-1; - stop1=buf1-intg1; - stop2=buf2-intg2; - - bzero(to->buf, (intg0+frac0)*sizeof(dec1)); - - for (buf1+=frac1-1; buf1 >= stop1; buf1--, start0--) - { - carry=0; - for (buf0=start0, buf2=start2; buf2 >= stop2; buf2--, buf0--) - { - dec1 hi, lo; - dec2 p= ((dec2)*buf1) * ((dec2)*buf2); - hi=(dec1)(p/DIG_BASE); - lo=(dec1)(p-((dec2)hi)*DIG_BASE); - ADD2(*buf0, *buf0, lo, carry); - carry+=hi; - } - if (carry) - { - if (buf0 < to->buf) - return E_DEC_OVERFLOW; - ADD2(*buf0, *buf0, 0, carry); - } - for (buf0--; carry; buf0--) - { - if (buf0 < to->buf) - return E_DEC_OVERFLOW; - ADD(*buf0, *buf0, 0, carry); - } - } - - /* Now we have to check for -0.000 case */ - if (to->sign) - { - dec1 *buf= to->buf; - dec1 *end= to->buf + intg0 + frac0; - DBUG_ASSERT(buf != end); - for (;;) - { - if (*buf) - break; - if (++buf == end) - { - /* We got decimal zero */ - decimal_make_zero(to); - break; - } - } - } - buf1= to->buf; - d_to_move= intg0 + ROUND_UP(to->frac); - while (!*buf1 && (to->intg > DIG_PER_DEC1)) - { - buf1++; - to->intg-= DIG_PER_DEC1; - d_to_move--; - } - if (to->buf < buf1) - { - dec1 *cur_d= to->buf; - for (; d_to_move--; cur_d++, buf1++) - *cur_d= *buf1; - } - return error; -} - -/* - naive division algorithm (Knuth's Algorithm D in 4.3.1) - - it's ok for short numbers - also we're using alloca() to allocate a temporary buffer - - XXX if this library is to be used with huge numbers of thousands of - digits, fast division must be implemented and alloca should be - changed to malloc (or at least fallback to malloc if alloca() fails) - but then, decimal_mul() should be rewritten too :( -*/ -static int do_div_mod(decimal_t *from1, decimal_t *from2, - decimal_t *to, decimal_t *mod, int scale_incr) -{ - int frac1=ROUND_UP(from1->frac)*DIG_PER_DEC1, prec1=from1->intg+frac1, - frac2=ROUND_UP(from2->frac)*DIG_PER_DEC1, prec2=from2->intg+frac2, - UNINIT_VAR(error), i, intg0, frac0, len1, len2, dintg, div_mod=(!mod); - dec1 *buf0, *buf1=from1->buf, *buf2=from2->buf, *tmp1, - *start2, *stop2, *stop1, *stop0, norm2, carry, *start1, dcarry; - dec2 norm_factor, x, guess, y; - - if (mod) - to=mod; - - sanity(to); - - /* removing all the leading zeroes */ - i= ((prec2 - 1) % DIG_PER_DEC1) + 1; - while (prec2 > 0 && *buf2 == 0) - { - prec2-= i; - i= DIG_PER_DEC1; - buf2++; - } - if (prec2 <= 0) /* short-circuit everything: from2 == 0 */ - return E_DEC_DIV_ZERO; - for (i= (prec2 - 1) % DIG_PER_DEC1; *buf2 < powers10[i--]; prec2--) ; - DBUG_ASSERT(prec2 > 0); - - i=((prec1-1) % DIG_PER_DEC1)+1; - while (prec1 > 0 && *buf1 == 0) - { - prec1-=i; - i=DIG_PER_DEC1; - buf1++; - } - if (prec1 <= 0) - { /* short-circuit everything: from1 == 0 */ - decimal_make_zero(to); - return E_DEC_OK; - } - for (i=(prec1-1) % DIG_PER_DEC1; *buf1 < powers10[i--]; prec1--) ; - DBUG_ASSERT(prec1 > 0); - - /* let's fix scale_incr, taking into account frac1,frac2 increase */ - if ((scale_incr-= frac1 - from1->frac + frac2 - from2->frac) < 0) - scale_incr=0; - - dintg=(prec1-frac1)-(prec2-frac2)+(*buf1 >= *buf2); - if (dintg < 0) - { - dintg/=DIG_PER_DEC1; - intg0=0; - } - else - intg0=ROUND_UP(dintg); - if (mod) - { - /* we're calculating N1 % N2. - The result will have - frac=max(frac1, frac2), as for subtraction - intg=intg2 - */ - to->sign=from1->sign; - to->frac=max(from1->frac, from2->frac); - frac0=0; - } - else - { - /* - we're calculating N1/N2. N1 is in the buf1, has prec1 digits - N2 is in the buf2, has prec2 digits. Scales are frac1 and - frac2 accordingly. - Thus, the result will have - frac = ROUND_UP(frac1+frac2+scale_incr) - and - intg = (prec1-frac1) - (prec2-frac2) + 1 - prec = intg+frac - */ - frac0=ROUND_UP(frac1+frac2+scale_incr); - FIX_INTG_FRAC_ERROR(to->len, intg0, frac0, error); - to->sign=from1->sign != from2->sign; - to->intg=intg0*DIG_PER_DEC1; - to->frac=frac0*DIG_PER_DEC1; - } - buf0=to->buf; - stop0=buf0+intg0+frac0; - if (likely(div_mod)) - while (dintg++ < 0) - *buf0++=0; - - len1=(i=ROUND_UP(prec1))+ROUND_UP(2*frac2+scale_incr+1) + 1; - set_if_bigger(len1, 3); - if (!(tmp1=(dec1 *)my_alloca(len1*sizeof(dec1)))) - return E_DEC_OOM; - memcpy(tmp1, buf1, i*sizeof(dec1)); - bzero(tmp1+i, (len1-i)*sizeof(dec1)); - - start1=tmp1; - stop1=start1+len1; - start2=buf2; - stop2=buf2+ROUND_UP(prec2)-1; - - /* removing end zeroes */ - while (*stop2 == 0 && stop2 >= start2) - stop2--; - len2= (int) (stop2++ - start2); - - /* - calculating norm2 (normalized *start2) - we need *start2 to be large - (at least > DIG_BASE/2), but unlike Knuth's Alg. D we don't want to - normalize input numbers (as we don't make a copy of the divisor). - Thus we normalize first dec1 of buf2 only, and we'll normalize *start1 - on the fly for the purpose of guesstimation only. - It's also faster, as we're saving on normalization of buf2 - */ - norm_factor=DIG_BASE/(*start2+1); - norm2=(dec1)(norm_factor*start2[0]); - if (likely(len2>0)) - norm2+=(dec1)(norm_factor*start2[1]/DIG_BASE); - - if (*start1 < *start2) - dcarry=*start1++; - else - dcarry=0; - - /* main loop */ - for (; buf0 < stop0; buf0++) - { - /* short-circuit, if possible */ - if (unlikely(dcarry == 0 && *start1 < *start2)) - guess=0; - else - { - /* D3: make a guess */ - x=start1[0]+((dec2)dcarry)*DIG_BASE; - y=start1[1]; - guess=(norm_factor*x+norm_factor*y/DIG_BASE)/norm2; - if (unlikely(guess >= DIG_BASE)) - guess=DIG_BASE-1; - if (likely(len2>0)) - { - /* hmm, this is a suspicious trick - I removed normalization here */ - if (start2[1]*guess > (x-guess*start2[0])*DIG_BASE+y) - guess--; - if (unlikely(start2[1]*guess > (x-guess*start2[0])*DIG_BASE+y)) - guess--; - DBUG_ASSERT(start2[1]*guess <= (x-guess*start2[0])*DIG_BASE+y); - } - - /* D4: multiply and subtract */ - buf2=stop2; - buf1=start1+len2; - DBUG_ASSERT(buf1 < stop1); - for (carry=0; buf2 > start2; buf1--) - { - dec1 hi, lo; - x=guess * (*--buf2); - hi=(dec1)(x/DIG_BASE); - lo=(dec1)(x-((dec2)hi)*DIG_BASE); - SUB2(*buf1, *buf1, lo, carry); - carry+=hi; - } - carry= dcarry < carry; - - /* D5: check the remainder */ - if (unlikely(carry)) - { - /* D6: correct the guess */ - guess--; - buf2=stop2; - buf1=start1+len2; - for (carry=0; buf2 > start2; buf1--) - { - ADD(*buf1, *buf1, *--buf2, carry); - } - } - } - if (likely(div_mod)) - *buf0=(dec1)guess; - dcarry= *start1; - start1++; - } - if (mod) - { - /* - now the result is in tmp1, it has - intg=prec1-frac1 - frac=max(frac1, frac2)=to->frac - */ - if (dcarry) - *--start1=dcarry; - buf0=to->buf; - intg0=(int) (ROUND_UP(prec1-frac1)-(start1-tmp1)); - frac0=ROUND_UP(to->frac); - error=E_DEC_OK; - if (unlikely(frac0==0 && intg0==0)) - { - decimal_make_zero(to); - goto done; - } - if (intg0<=0) - { - if (unlikely(-intg0 >= to->len)) - { - decimal_make_zero(to); - error=E_DEC_TRUNCATED; - goto done; - } - stop1=start1+frac0; - frac0+=intg0; - to->intg=0; - while (intg0++ < 0) - *buf0++=0; - } - else - { - if (unlikely(intg0 > to->len)) - { - frac0=0; - intg0=to->len; - error=E_DEC_OVERFLOW; - goto done; - } - DBUG_ASSERT(intg0 <= ROUND_UP(from2->intg)); - stop1=start1+frac0+intg0; - to->intg=min(intg0*DIG_PER_DEC1, from2->intg); - } - if (unlikely(intg0+frac0 > to->len)) - { - stop1-=frac0+intg0-to->len; - frac0=to->len-intg0; - to->frac=frac0*DIG_PER_DEC1; - error=E_DEC_TRUNCATED; - } - DBUG_ASSERT(buf0 + (stop1 - start1) <= to->buf + to->len); - while (start1 < stop1) - *buf0++=*start1++; - } -done: - my_afree(tmp1); - return error; -} - -/* - division of two decimals - - SYNOPSIS - decimal_div() - from1 - dividend - from2 - divisor - to - quotient - - RETURN VALUE - E_DEC_OK/E_DEC_TRUNCATED/E_DEC_OVERFLOW/E_DEC_DIV_ZERO; - - NOTES - see do_div_mod() -*/ - -int -decimal_div(decimal_t *from1, decimal_t *from2, decimal_t *to, int scale_incr) -{ - return do_div_mod(from1, from2, to, 0, scale_incr); -} - -/* - modulus - - SYNOPSIS - decimal_mod() - from1 - dividend - from2 - divisor - to - modulus - - RETURN VALUE - E_DEC_OK/E_DEC_TRUNCATED/E_DEC_OVERFLOW/E_DEC_DIV_ZERO; - - NOTES - see do_div_mod() - - DESCRIPTION - the modulus R in R = M mod N - - is defined as - - 0 <= |R| < |M| - sign R == sign M - R = M - k*N, where k is integer - - thus, there's no requirement for M or N to be integers -*/ - -int decimal_mod(decimal_t *from1, decimal_t *from2, decimal_t *to) -{ - return do_div_mod(from1, from2, 0, to, 0); -} - -#ifdef MAIN - -int full= 0; -decimal_t a, b, c; -char buf1[100], buf2[100], buf3[100]; - -void dump_decimal(decimal_t *d) -{ - int i; - printf("/* intg=%d, frac=%d, sign=%d, buf[]={", d->intg, d->frac, d->sign); - for (i=0; i < ROUND_UP(d->frac)+ROUND_UP(d->intg)-1; i++) - printf("%09d, ", d->buf[i]); - printf("%09d} */ ", d->buf[i]); -} - - -void check_result_code(int actual, int want) -{ - if (actual != want) - { - printf("\n^^^^^^^^^^^^^ must return %d\n", want); - exit(1); - } -} - - -void print_decimal(decimal_t *d, const char *orig, int actual, int want) -{ - char s[100]; - int slen=sizeof(s); - - if (full) dump_decimal(d); - decimal2string(d, s, &slen, 0, 0, 0); - printf("'%s'", s); - check_result_code(actual, want); - if (orig && strcmp(orig, s)) - { - printf("\n^^^^^^^^^^^^^ must've been '%s'\n", orig); - exit(1); - } -} - -void test_d2s() -{ - char s[100]; - int slen, res; - - /***********************************/ - printf("==== decimal2string ====\n"); - a.buf[0]=12345; a.intg=5; a.frac=0; a.sign=0; - slen=sizeof(s); - res=decimal2string(&a, s, &slen, 0, 0, 0); - dump_decimal(&a); printf(" --> res=%d str='%s' len=%d\n", res, s, slen); - - a.buf[1]=987000000; a.frac=3; - slen=sizeof(s); - res=decimal2string(&a, s, &slen, 0, 0, 0); - dump_decimal(&a); printf(" --> res=%d str='%s' len=%d\n", res, s, slen); - - a.sign=1; - slen=sizeof(s); - res=decimal2string(&a, s, &slen, 0, 0, 0); - dump_decimal(&a); printf(" --> res=%d str='%s' len=%d\n", res, s, slen); - - slen=8; - res=decimal2string(&a, s, &slen, 0, 0, 0); - dump_decimal(&a); printf(" --> res=%d str='%s' len=%d\n", res, s, slen); - - slen=5; - res=decimal2string(&a, s, &slen, 0, 0, 0); - dump_decimal(&a); printf(" --> res=%d str='%s' len=%d\n", res, s, slen); - - a.buf[0]=987000000; a.frac=3; a.intg=0; - slen=sizeof(s); - res=decimal2string(&a, s, &slen, 0, 0, 0); - dump_decimal(&a); printf(" --> res=%d str='%s' len=%d\n", res, s, slen); -} - -void test_s2d(const char *s, const char *orig, int ex) -{ - char s1[100], *end; - int res; - sprintf(s1, "'%s'", s); - end= strend(s); - printf("len=%2d %-30s => res=%d ", a.len, s1, - (res= string2decimal(s, &a, &end))); - print_decimal(&a, orig, res, ex); - printf("\n"); -} - -void test_d2f(const char *s, int ex) -{ - char s1[100], *end; - double x; - int res; - - sprintf(s1, "'%s'", s); - end= strend(s); - string2decimal(s, &a, &end); - res=decimal2double(&a, &x); - if (full) dump_decimal(&a); - printf("%-40s => res=%d %.*g\n", s1, res, a.intg+a.frac, x); - check_result_code(res, ex); -} - -void test_d2b2d(const char *str, int p, int s, const char *orig, int ex) -{ - char s1[100], buf[100], *end; - int res, i, size=decimal_bin_size(p, s); - - sprintf(s1, "'%s'", str); - end= strend(str); - string2decimal(str, &a, &end); - res=decimal2bin(&a, buf, p, s); - printf("%-31s {%2d, %2d} => res=%d size=%-2d ", s1, p, s, res, size); - if (full) - { - printf("0x"); - for (i=0; i < size; i++) - printf("%02x", ((uchar *)buf)[i]); - } - res=bin2decimal(buf, &a, p, s); - printf(" => res=%d ", res); - print_decimal(&a, orig, res, ex); - printf("\n"); -} - -void test_f2d(double from, int ex) -{ - int res; - - res=double2decimal(from, &a); - printf("%-40.*f => res=%d ", DBL_DIG-2, from, res); - print_decimal(&a, 0, res, ex); - printf("\n"); -} - -void test_ull2d(ulonglong from, const char *orig, int ex) -{ - char s[100]; - int res; - - res=ulonglong2decimal(from, &a); - longlong10_to_str(from,s,10); - printf("%-40s => res=%d ", s, res); - print_decimal(&a, orig, res, ex); - printf("\n"); -} - -void test_ll2d(longlong from, const char *orig, int ex) -{ - char s[100]; - int res; - - res=longlong2decimal(from, &a); - longlong10_to_str(from,s,-10); - printf("%-40s => res=%d ", s, res); - print_decimal(&a, orig, res, ex); - printf("\n"); -} - -void test_d2ull(const char *s, const char *orig, int ex) -{ - char s1[100], *end; - ulonglong x; - int res; - - end= strend(s); - string2decimal(s, &a, &end); - res=decimal2ulonglong(&a, &x); - if (full) dump_decimal(&a); - longlong10_to_str(x,s1,10); - printf("%-40s => res=%d %s\n", s, res, s1); - check_result_code(res, ex); - if (orig && strcmp(orig, s1)) - { - printf("\n^^^^^^^^^^^^^ must've been '%s'\n", orig); - exit(1); - } -} - -void test_d2ll(const char *s, const char *orig, int ex) -{ - char s1[100], *end; - longlong x; - int res; - - end= strend(s); - string2decimal(s, &a, &end); - res=decimal2longlong(&a, &x); - if (full) dump_decimal(&a); - longlong10_to_str(x,s1,-10); - printf("%-40s => res=%d %s\n", s, res, s1); - check_result_code(res, ex); - if (orig && strcmp(orig, s1)) - { - printf("\n^^^^^^^^^^^^^ must've been '%s'\n", orig); - exit(1); - } -} - -void test_da(const char *s1, const char *s2, const char *orig, int ex) -{ - char s[100], *end; - int res; - sprintf(s, "'%s' + '%s'", s1, s2); - end= strend(s1); - string2decimal(s1, &a, &end); - end= strend(s2); - string2decimal(s2, &b, &end); - res=decimal_add(&a, &b, &c); - printf("%-40s => res=%d ", s, res); - print_decimal(&c, orig, res, ex); - printf("\n"); -} - -void test_ds(const char *s1, const char *s2, const char *orig, int ex) -{ - char s[100], *end; - int res; - sprintf(s, "'%s' - '%s'", s1, s2); - end= strend(s1); - string2decimal(s1, &a, &end); - end= strend(s2); - string2decimal(s2, &b, &end); - res=decimal_sub(&a, &b, &c); - printf("%-40s => res=%d ", s, res); - print_decimal(&c, orig, res, ex); - printf("\n"); -} - -void test_dc(const char *s1, const char *s2, int orig) -{ - char s[100], *end; - int res; - sprintf(s, "'%s' <=> '%s'", s1, s2); - end= strend(s1); - string2decimal(s1, &a, &end); - end= strend(s2); - string2decimal(s2, &b, &end); - res=decimal_cmp(&a, &b); - printf("%-40s => res=%d\n", s, res); - if (orig != res) - { - printf("\n^^^^^^^^^^^^^ must've been %d\n", orig); - exit(1); - } -} - -void test_dm(const char *s1, const char *s2, const char *orig, int ex) -{ - char s[100], *end; - int res; - sprintf(s, "'%s' * '%s'", s1, s2); - end= strend(s1); - string2decimal(s1, &a, &end); - end= strend(s2); - string2decimal(s2, &b, &end); - res=decimal_mul(&a, &b, &c); - printf("%-40s => res=%d ", s, res); - print_decimal(&c, orig, res, ex); - printf("\n"); -} - -void test_dv(const char *s1, const char *s2, const char *orig, int ex) -{ - char s[100], *end; - int res; - sprintf(s, "'%s' / '%s'", s1, s2); - end= strend(s1); - string2decimal(s1, &a, &end); - end= strend(s2); - string2decimal(s2, &b, &end); - res=decimal_div(&a, &b, &c, 5); - printf("%-40s => res=%d ", s, res); - check_result_code(res, ex); - if (res == E_DEC_DIV_ZERO) - printf("E_DEC_DIV_ZERO"); - else - print_decimal(&c, orig, res, ex); - printf("\n"); -} - -void test_md(const char *s1, const char *s2, const char *orig, int ex) -{ - char s[100], *end; - int res; - sprintf(s, "'%s' %% '%s'", s1, s2); - end= strend(s1); - string2decimal(s1, &a, &end); - end= strend(s2); - string2decimal(s2, &b, &end); - res=decimal_mod(&a, &b, &c); - printf("%-40s => res=%d ", s, res); - check_result_code(res, ex); - if (res == E_DEC_DIV_ZERO) - printf("E_DEC_DIV_ZERO"); - else - print_decimal(&c, orig, res, ex); - printf("\n"); -} - -const char *round_mode[]= -{"TRUNCATE", "HALF_EVEN", "HALF_UP", "CEILING", "FLOOR"}; - -void test_ro(const char *s1, int n, decimal_round_mode mode, const char *orig, - int ex) -{ - char s[100], *end; - int res; - sprintf(s, "'%s', %d, %s", s1, n, round_mode[mode]); - end= strend(s1); - string2decimal(s1, &a, &end); - res=decimal_round(&a, &b, n, mode); - printf("%-40s => res=%d ", s, res); - print_decimal(&b, orig, res, ex); - printf("\n"); -} - - -void test_mx(int precision, int frac, const char *orig) -{ - char s[100]; - sprintf(s, "%d, %d", precision, frac); - max_decimal(precision, frac, &a); - printf("%-40s => ", s); - print_decimal(&a, orig, 0, 0); - printf("\n"); -} - - -void test_pr(const char *s1, int prec, int dec, char filler, const char *orig, - int ex) -{ - char s[100], *end; - char s2[100]; - int slen= sizeof(s2); - int res; - - sprintf(s, filler ? "'%s', %d, %d, '%c'" : "'%s', %d, %d, '\\0'", - s1, prec, dec, filler); - end= strend(s1); - string2decimal(s1, &a, &end); - res= decimal2string(&a, s2, &slen, prec, dec, filler); - printf("%-40s => res=%d '%s'", s, res, s2); - check_result_code(res, ex); - if (orig && strcmp(orig, s2)) - { - printf("\n^^^^^^^^^^^^^ must've been '%s'\n", orig); - exit(1); - } - printf("\n"); -} - - -void test_sh(const char *s1, int shift, const char *orig, int ex) -{ - char s[100], *end; - int res; - sprintf(s, "'%s' %s %d", s1, ((shift < 0) ? ">>" : "<<"), abs(shift)); - end= strend(s1); - string2decimal(s1, &a, &end); - res= decimal_shift(&a, shift); - printf("%-40s => res=%d ", s, res); - print_decimal(&a, orig, res, ex); - printf("\n"); -} - - -void test_fr(const char *s1, const char *orig) -{ - char s[100], *end; - sprintf(s, "'%s'", s1); - printf("%-40s => ", s); - end= strend(s1); - string2decimal(s1, &a, &end); - a.frac= decimal_actual_fraction(&a); - print_decimal(&a, orig, 0, 0); - printf("\n"); -} - - -int main() -{ - a.buf=(void*)buf1; - a.len=sizeof(buf1)/sizeof(dec1); - b.buf=(void*)buf2; - b.len=sizeof(buf2)/sizeof(dec1); - c.buf=(void*)buf3; - c.len=sizeof(buf3)/sizeof(dec1); - - if (full) - test_d2s(); - - printf("==== string2decimal ====\n"); - test_s2d("12345", "12345", 0); - test_s2d("12345.", "12345", 0); - test_s2d("123.45", "123.45", 0); - test_s2d("-123.45", "-123.45", 0); - test_s2d(".00012345000098765", "0.00012345000098765", 0); - test_s2d(".12345000098765", "0.12345000098765", 0); - test_s2d("-.000000012345000098765", "-0.000000012345000098765", 0); - test_s2d("1234500009876.5", "1234500009876.5", 0); - a.len=1; - test_s2d("123450000098765", "98765", 2); - test_s2d("123450.000098765", "123450", 1); - a.len=sizeof(buf1)/sizeof(dec1); - test_s2d("123E5", "12300000", 0); - test_s2d("123E-2", "1.23", 0); - - printf("==== decimal2double ====\n"); - test_d2f("12345", 0); - test_d2f("123.45", 0); - test_d2f("-123.45", 0); - test_d2f("0.00012345000098765", 0); - test_d2f("1234500009876.5", 0); - - printf("==== double2decimal ====\n"); - test_f2d(12345, 0); - test_f2d(1.0/3, 0); - test_f2d(-123.45, 0); - test_f2d(0.00012345000098765, 0); - test_f2d(1234500009876.5, 0); - - printf("==== ulonglong2decimal ====\n"); - test_ull2d(ULL(12345), "12345", 0); - test_ull2d(ULL(0), "0", 0); - test_ull2d(ULL(18446744073709551615), "18446744073709551615", 0); - - printf("==== decimal2ulonglong ====\n"); - test_d2ull("12345", "12345", 0); - test_d2ull("0", "0", 0); - test_d2ull("18446744073709551615", "18446744073709551615", 0); - test_d2ull("18446744073709551616", "18446744073", 2); - test_d2ull("-1", "0", 2); - test_d2ull("1.23", "1", 1); - test_d2ull("9999999999999999999999999.000", "9999999999999999", 2); - - printf("==== longlong2decimal ====\n"); - test_ll2d(LL(-12345), "-12345", 0); - test_ll2d(LL(-1), "-1", 0); - test_ll2d(LL(-9223372036854775807), "-9223372036854775807", 0); - test_ll2d(ULL(9223372036854775808), "-9223372036854775808", 0); - - printf("==== decimal2longlong ====\n"); - test_d2ll("18446744073709551615", "18446744073", 2); - test_d2ll("-1", "-1", 0); - test_d2ll("-1.23", "-1", 1); - test_d2ll("-9223372036854775807", "-9223372036854775807", 0); - test_d2ll("-9223372036854775808", "-9223372036854775808", 0); - test_d2ll("9223372036854775808", "9223372036854775807", 2); - - printf("==== do_add ====\n"); - test_da(".00012345000098765" ,"123.45", "123.45012345000098765", 0); - test_da(".1" ,".45", "0.55", 0); - test_da("1234500009876.5" ,".00012345000098765", "1234500009876.50012345000098765", 0); - test_da("9999909999999.5" ,".555", "9999910000000.055", 0); - test_da("99999999" ,"1", "100000000", 0); - test_da("989999999" ,"1", "990000000", 0); - test_da("999999999" ,"1", "1000000000", 0); - test_da("12345" ,"123.45", "12468.45", 0); - test_da("-12345" ,"-123.45", "-12468.45", 0); - test_ds("-12345" ,"123.45", "-12468.45", 0); - test_ds("12345" ,"-123.45", "12468.45", 0); - - printf("==== do_sub ====\n"); - test_ds(".00012345000098765", "123.45","-123.44987654999901235", 0); - test_ds("1234500009876.5", ".00012345000098765","1234500009876.49987654999901235", 0); - test_ds("9999900000000.5", ".555","9999899999999.945", 0); - test_ds("1111.5551", "1111.555","0.0001", 0); - test_ds(".555", ".555","0", 0); - test_ds("10000000", "1","9999999", 0); - test_ds("1000001000", ".1","1000000999.9", 0); - test_ds("1000000000", ".1","999999999.9", 0); - test_ds("12345", "123.45","12221.55", 0); - test_ds("-12345", "-123.45","-12221.55", 0); - test_da("-12345", "123.45","-12221.55", 0); - test_da("12345", "-123.45","12221.55", 0); - test_ds("123.45", "12345","-12221.55", 0); - test_ds("-123.45", "-12345","12221.55", 0); - test_da("123.45", "-12345","-12221.55", 0); - test_da("-123.45", "12345","12221.55", 0); - test_da("5", "-6.0","-1.0", 0); - - printf("==== decimal_mul ====\n"); - test_dm("12", "10","120", 0); - test_dm("-123.456", "98765.4321","-12193185.1853376", 0); - test_dm("-123456000000", "98765432100000","-12193185185337600000000000", 0); - test_dm("123456", "987654321","121931851853376", 0); - test_dm("123456", "9876543210","1219318518533760", 0); - test_dm("123", "0.01","1.23", 0); - test_dm("123", "0","0", 0); - - printf("==== decimal_div ====\n"); - test_dv("120", "10","12.000000000", 0); - test_dv("123", "0.01","12300.000000000", 0); - test_dv("120", "100000000000.00000","0.000000001200000000", 0); - test_dv("123", "0","", 4); - test_dv("0", "0", "", 4); - test_dv("-12193185.1853376", "98765.4321","-123.456000000000000000", 0); - test_dv("121931851853376", "987654321","123456.000000000", 0); - test_dv("0", "987","0", 0); - test_dv("1", "3","0.333333333", 0); - test_dv("1.000000000000", "3","0.333333333333333333", 0); - test_dv("1", "1","1.000000000", 0); - test_dv("0.0123456789012345678912345", "9999999999","0.000000000001234567890246913578148141", 0); - test_dv("10.333000000", "12.34500","0.837019036046982584042122316", 0); - test_dv("10.000000000060", "2","5.000000000030000000", 0); - - printf("==== decimal_mod ====\n"); - test_md("234","10","4", 0); - test_md("234.567","10.555","2.357", 0); - test_md("-234.567","10.555","-2.357", 0); - test_md("234.567","-10.555","2.357", 0); - c.buf[1]=0x3ABECA; - test_md("99999999999999999999999999999999999999","3","0", 0); - if (c.buf[1] != 0x3ABECA) - { - printf("%X - overflow\n", c.buf[1]); - exit(1); - } - - printf("==== decimal2bin/bin2decimal ====\n"); - test_d2b2d("-10.55", 4, 2,"-10.55", 0); - test_d2b2d("0.0123456789012345678912345", 30, 25,"0.0123456789012345678912345", 0); - test_d2b2d("12345", 5, 0,"12345", 0); - test_d2b2d("12345", 10, 3,"12345.000", 0); - test_d2b2d("123.45", 10, 3,"123.450", 0); - test_d2b2d("-123.45", 20, 10,"-123.4500000000", 0); - test_d2b2d(".00012345000098765", 15, 14,"0.00012345000098", 0); - test_d2b2d(".00012345000098765", 22, 20,"0.00012345000098765000", 0); - test_d2b2d(".12345000098765", 30, 20,"0.12345000098765000000", 0); - test_d2b2d("-.000000012345000098765", 30, 20,"-0.00000001234500009876", 0); - test_d2b2d("1234500009876.5", 30, 5,"1234500009876.50000", 0); - test_d2b2d("111111111.11", 10, 2,"11111111.11", 0); - test_d2b2d("000000000.01", 7, 3,"0.010", 0); - test_d2b2d("123.4", 10, 2, "123.40", 0); - - - printf("==== decimal_cmp ====\n"); - test_dc("12","13",-1); - test_dc("13","12",1); - test_dc("-10","10",-1); - test_dc("10","-10",1); - test_dc("-12","-13",1); - test_dc("0","12",-1); - test_dc("-10","0",-1); - test_dc("4","4",0); - - printf("==== decimal_round ====\n"); - test_ro("5678.123451",-4,TRUNCATE,"0", 0); - test_ro("5678.123451",-3,TRUNCATE,"5000", 0); - test_ro("5678.123451",-2,TRUNCATE,"5600", 0); - test_ro("5678.123451",-1,TRUNCATE,"5670", 0); - test_ro("5678.123451",0,TRUNCATE,"5678", 0); - test_ro("5678.123451",1,TRUNCATE,"5678.1", 0); - test_ro("5678.123451",2,TRUNCATE,"5678.12", 0); - test_ro("5678.123451",3,TRUNCATE,"5678.123", 0); - test_ro("5678.123451",4,TRUNCATE,"5678.1234", 0); - test_ro("5678.123451",5,TRUNCATE,"5678.12345", 0); - test_ro("5678.123451",6,TRUNCATE,"5678.123451", 0); - test_ro("-5678.123451",-4,TRUNCATE,"0", 0); - memset(buf2, 33, sizeof(buf2)); - test_ro("99999999999999999999999999999999999999",-31,TRUNCATE,"99999990000000000000000000000000000000", 0); - test_ro("15.1",0,HALF_UP,"15", 0); - test_ro("15.5",0,HALF_UP,"16", 0); - test_ro("15.9",0,HALF_UP,"16", 0); - test_ro("-15.1",0,HALF_UP,"-15", 0); - test_ro("-15.5",0,HALF_UP,"-16", 0); - test_ro("-15.9",0,HALF_UP,"-16", 0); - test_ro("15.1",1,HALF_UP,"15.1", 0); - test_ro("-15.1",1,HALF_UP,"-15.1", 0); - test_ro("15.17",1,HALF_UP,"15.2", 0); - test_ro("15.4",-1,HALF_UP,"20", 0); - test_ro("-15.4",-1,HALF_UP,"-20", 0); - test_ro("5.4",-1,HALF_UP,"10", 0); - test_ro(".999", 0, HALF_UP, "1", 0); - memset(buf2, 33, sizeof(buf2)); - test_ro("999999999", -9, HALF_UP, "1000000000", 0); - test_ro("15.1",0,HALF_EVEN,"15", 0); - test_ro("15.5",0,HALF_EVEN,"16", 0); - test_ro("14.5",0,HALF_EVEN,"14", 0); - test_ro("15.9",0,HALF_EVEN,"16", 0); - test_ro("15.1",0,CEILING,"16", 0); - test_ro("-15.1",0,CEILING,"-15", 0); - test_ro("15.1",0,FLOOR,"15", 0); - test_ro("-15.1",0,FLOOR,"-16", 0); - test_ro("999999999999999999999.999", 0, CEILING,"1000000000000000000000", 0); - test_ro("-999999999999999999999.999", 0, FLOOR,"-1000000000000000000000", 0); - - b.buf[0]=DIG_BASE+1; - b.buf++; - test_ro(".3", 0, HALF_UP, "0", 0); - b.buf--; - if (b.buf[0] != DIG_BASE+1) - { - printf("%d - underflow\n", b.buf[0]); - exit(1); - } - - printf("==== max_decimal ====\n"); - test_mx(1,1,"0.9"); - test_mx(1,0,"9"); - test_mx(2,1,"9.9"); - test_mx(4,2,"99.99"); - test_mx(6,3,"999.999"); - test_mx(8,4,"9999.9999"); - test_mx(10,5,"99999.99999"); - test_mx(12,6,"999999.999999"); - test_mx(14,7,"9999999.9999999"); - test_mx(16,8,"99999999.99999999"); - test_mx(18,9,"999999999.999999999"); - test_mx(20,10,"9999999999.9999999999"); - test_mx(20,20,"0.99999999999999999999"); - test_mx(20,0,"99999999999999999999"); - test_mx(40,20,"99999999999999999999.99999999999999999999"); - - printf("==== decimal2string ====\n"); - test_pr("123.123", 0, 0, 0, "123.123", 0); - test_pr("123.123", 7, 3, '0', "123.123", 0); - test_pr("123.123", 9, 3, '0', "00123.123", 0); - test_pr("123.123", 9, 4, '0', "0123.1230", 0); - test_pr("123.123", 9, 5, '0', "123.12300", 0); - test_pr("123.123", 9, 2, '0', "000123.12", 1); - test_pr("123.123", 9, 6, '0', "23.123000", 2); - - printf("==== decimal_shift ====\n"); - test_sh("123.123", 1, "1231.23", 0); - test_sh("123457189.123123456789000", 1, "1234571891.23123456789", 0); - test_sh("123457189.123123456789000", 4, "1234571891231.23456789", 0); - test_sh("123457189.123123456789000", 8, "12345718912312345.6789", 0); - test_sh("123457189.123123456789000", 9, "123457189123123456.789", 0); - test_sh("123457189.123123456789000", 10, "1234571891231234567.89", 0); - test_sh("123457189.123123456789000", 17, "12345718912312345678900000", 0); - test_sh("123457189.123123456789000", 18, "123457189123123456789000000", 0); - test_sh("123457189.123123456789000", 19, "1234571891231234567890000000", 0); - test_sh("123457189.123123456789000", 26, "12345718912312345678900000000000000", 0); - test_sh("123457189.123123456789000", 27, "123457189123123456789000000000000000", 0); - test_sh("123457189.123123456789000", 28, "1234571891231234567890000000000000000", 0); - test_sh("000000000000000000000000123457189.123123456789000", 26, "12345718912312345678900000000000000", 0); - test_sh("00000000123457189.123123456789000", 27, "123457189123123456789000000000000000", 0); - test_sh("00000000000000000123457189.123123456789000", 28, "1234571891231234567890000000000000000", 0); - test_sh("123", 1, "1230", 0); - test_sh("123", 10, "1230000000000", 0); - test_sh(".123", 1, "1.23", 0); - test_sh(".123", 10, "1230000000", 0); - test_sh(".123", 14, "12300000000000", 0); - test_sh("000.000", 1000, "0", 0); - test_sh("000.", 1000, "0", 0); - test_sh(".000", 1000, "0", 0); - test_sh("1", 1000, "1", 2); - test_sh("123.123", -1, "12.3123", 0); - test_sh("123987654321.123456789000", -1, "12398765432.1123456789", 0); - test_sh("123987654321.123456789000", -2, "1239876543.21123456789", 0); - test_sh("123987654321.123456789000", -3, "123987654.321123456789", 0); - test_sh("123987654321.123456789000", -8, "1239.87654321123456789", 0); - test_sh("123987654321.123456789000", -9, "123.987654321123456789", 0); - test_sh("123987654321.123456789000", -10, "12.3987654321123456789", 0); - test_sh("123987654321.123456789000", -11, "1.23987654321123456789", 0); - test_sh("123987654321.123456789000", -12, "0.123987654321123456789", 0); - test_sh("123987654321.123456789000", -13, "0.0123987654321123456789", 0); - test_sh("123987654321.123456789000", -14, "0.00123987654321123456789", 0); - test_sh("00000087654321.123456789000", -14, "0.00000087654321123456789", 0); - a.len= 2; - test_sh("123.123", -2, "1.23123", 0); - test_sh("123.123", -3, "0.123123", 0); - test_sh("123.123", -6, "0.000123123", 0); - test_sh("123.123", -7, "0.0000123123", 0); - test_sh("123.123", -15, "0.000000000000123123", 0); - test_sh("123.123", -16, "0.000000000000012312", 1); - test_sh("123.123", -17, "0.000000000000001231", 1); - test_sh("123.123", -18, "0.000000000000000123", 1); - test_sh("123.123", -19, "0.000000000000000012", 1); - test_sh("123.123", -20, "0.000000000000000001", 1); - test_sh("123.123", -21, "0", 1); - test_sh(".000000000123", -1, "0.0000000000123", 0); - test_sh(".000000000123", -6, "0.000000000000000123", 0); - test_sh(".000000000123", -7, "0.000000000000000012", 1); - test_sh(".000000000123", -8, "0.000000000000000001", 1); - test_sh(".000000000123", -9, "0", 1); - test_sh(".000000000123", 1, "0.00000000123", 0); - test_sh(".000000000123", 8, "0.0123", 0); - test_sh(".000000000123", 9, "0.123", 0); - test_sh(".000000000123", 10, "1.23", 0); - test_sh(".000000000123", 17, "12300000", 0); - test_sh(".000000000123", 18, "123000000", 0); - test_sh(".000000000123", 19, "1230000000", 0); - test_sh(".000000000123", 20, "12300000000", 0); - test_sh(".000000000123", 21, "123000000000", 0); - test_sh(".000000000123", 22, "1230000000000", 0); - test_sh(".000000000123", 23, "12300000000000", 0); - test_sh(".000000000123", 24, "123000000000000", 0); - test_sh(".000000000123", 25, "1230000000000000", 0); - test_sh(".000000000123", 26, "12300000000000000", 0); - test_sh(".000000000123", 27, "123000000000000000", 0); - test_sh(".000000000123", 28, "0.000000000123", 2); - test_sh("123456789.987654321", -1, "12345678.998765432", 1); - test_sh("123456789.987654321", -2, "1234567.899876543", 1); - test_sh("123456789.987654321", -8, "1.234567900", 1); - test_sh("123456789.987654321", -9, "0.123456789987654321", 0); - test_sh("123456789.987654321", -10, "0.012345678998765432", 1); - test_sh("123456789.987654321", -17, "0.000000001234567900", 1); - test_sh("123456789.987654321", -18, "0.000000000123456790", 1); - test_sh("123456789.987654321", -19, "0.000000000012345679", 1); - test_sh("123456789.987654321", -26, "0.000000000000000001", 1); - test_sh("123456789.987654321", -27, "0", 1); - test_sh("123456789.987654321", 1, "1234567900", 1); - test_sh("123456789.987654321", 2, "12345678999", 1); - test_sh("123456789.987654321", 4, "1234567899877", 1); - test_sh("123456789.987654321", 8, "12345678998765432", 1); - test_sh("123456789.987654321", 9, "123456789987654321", 0); - test_sh("123456789.987654321", 10, "123456789.987654321", 2); - test_sh("123456789.987654321", 0, "123456789.987654321", 0); - a.len= sizeof(buf1)/sizeof(dec1); - - printf("==== decimal_actual_fraction ====\n"); - test_fr("1.123456789000000000", "1.123456789"); - test_fr("1.12345678000000000", "1.12345678"); - test_fr("1.1234567000000000", "1.1234567"); - test_fr("1.123456000000000", "1.123456"); - test_fr("1.12345000000000", "1.12345"); - test_fr("1.1234000000000", "1.1234"); - test_fr("1.123000000000", "1.123"); - test_fr("1.12000000000", "1.12"); - test_fr("1.1000000000", "1.1"); - test_fr("1.000000000", "1"); - test_fr("1.0", "1"); - test_fr("10000000000000000000.0", "10000000000000000000"); - - return 0; -} -#endif diff --git a/deps/mysqllite/strings/dtoa.c b/deps/mysqllite/strings/dtoa.c deleted file mode 100644 index d64c420b4991ba..00000000000000 --- a/deps/mysqllite/strings/dtoa.c +++ /dev/null @@ -1,2793 +0,0 @@ -/* Copyright (C) 2007 MySQL AB - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; version 2 - of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/**************************************************************** - - This file incorporates work covered by the following copyright and - permission notice: - - The author of this software is David M. Gay. - - Copyright (c) 1991, 2000, 2001 by Lucent Technologies. - - Permission to use, copy, modify, and distribute this software for any - purpose without fee is hereby granted, provided that this entire notice - is included in all copies of any software which is or includes a copy - or modification of this software and in all copies of the supporting - documentation for such software. - - THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY - REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - - ***************************************************************/ - -#include /* for EOVERFLOW on Windows */ -#include -#include /* for memcpy and NOT_FIXED_DEC */ - -/** - Appears to suffice to not call malloc() in most cases. - @todo - see if it is possible to get rid of malloc(). - this constant is sufficient to avoid malloc() on all inputs I have tried. -*/ -#define DTOA_BUFF_SIZE (420 * sizeof(void *)) - -/* Magic value returned by dtoa() to indicate overflow */ -#define DTOA_OVERFLOW 9999 - -static double my_strtod_int(const char *, char **, int *, char *, size_t); -static char *dtoa(double, int, int, int *, int *, char **, char *, size_t); -static void dtoa_free(char *, char *, size_t); - -/** - @brief - Converts a given floating point number to a zero-terminated string - representation using the 'f' format. - - @details - This function is a wrapper around dtoa() to do the same as - sprintf(to, "%-.*f", precision, x), though the conversion is usually more - precise. The only difference is in handling [-,+]infinity and nan values, - in which case we print '0\0' to the output string and indicate an overflow. - - @param x the input floating point number. - @param precision the number of digits after the decimal point. - All properties of sprintf() apply: - - if the number of significant digits after the decimal - point is less than precision, the resulting string is - right-padded with zeros - - if the precision is 0, no decimal point appears - - if a decimal point appears, at least one digit appears - before it - @param to pointer to the output buffer. The longest string which - my_fcvt() can return is FLOATING_POINT_BUFFER bytes - (including the terminating '\0'). - @param error if not NULL, points to a location where the status of - conversion is stored upon return. - FALSE successful conversion - TRUE the input number is [-,+]infinity or nan. - The output string in this case is always '0'. - @return number of written characters (excluding terminating '\0') -*/ - -size_t my_fcvt(double x, int precision, char *to, my_bool *error) -{ - int decpt, sign, len, i; - char *res, *src, *end, *dst= to; - char buf[DTOA_BUFF_SIZE]; - DBUG_ASSERT(precision >= 0 && precision < NOT_FIXED_DEC && to != NULL); - - res= dtoa(x, 5, precision, &decpt, &sign, &end, buf, sizeof(buf)); - - if (decpt == DTOA_OVERFLOW) - { - dtoa_free(res, buf, sizeof(buf)); - *to++= '0'; - *to= '\0'; - if (error != NULL) - *error= TRUE; - return 1; - } - - src= res; - len= end - src; - - if (sign) - *dst++= '-'; - - if (decpt <= 0) - { - *dst++= '0'; - *dst++= '.'; - for (i= decpt; i < 0; i++) - *dst++= '0'; - } - - for (i= 1; i <= len; i++) - { - *dst++= *src++; - if (i == decpt && i < len) - *dst++= '.'; - } - while (i++ <= decpt) - *dst++= '0'; - - if (precision > 0) - { - if (len <= decpt) - *dst++= '.'; - - for (i= precision - max(0, (len - decpt)); i > 0; i--) - *dst++= '0'; - } - - *dst= '\0'; - if (error != NULL) - *error= FALSE; - - dtoa_free(res, buf, sizeof(buf)); - - return dst - to; -} - -/** - @brief - Converts a given floating point number to a zero-terminated string - representation with a given field width using the 'e' format - (aka scientific notation) or the 'f' one. - - @details - The format is chosen automatically to provide the most number of significant - digits (and thus, precision) with a given field width. In many cases, the - result is similar to that of sprintf(to, "%g", x) with a few notable - differences: - - the conversion is usually more precise than C library functions. - - there is no 'precision' argument. instead, we specify the number of - characters available for conversion (i.e. a field width). - - the result never exceeds the specified field width. If the field is too - short to contain even a rounded decimal representation, my_gcvt() - indicates overflow and truncates the output string to the specified width. - - float-type arguments are handled differently than double ones. For a - float input number (i.e. when the 'type' argument is MY_GCVT_ARG_FLOAT) - we deliberately limit the precision of conversion by FLT_DIG digits to - avoid garbage past the significant digits. - - unlike sprintf(), in cases where the 'e' format is preferred, we don't - zero-pad the exponent to save space for significant digits. The '+' sign - for a positive exponent does not appear for the same reason. - - @param x the input floating point number. - @param type is either MY_GCVT_ARG_FLOAT or MY_GCVT_ARG_DOUBLE. - Specifies the type of the input number (see notes above). - @param width field width in characters. The minimal field width to - hold any number representation (albeit rounded) is 7 - characters ("-Ne-NNN"). - @param to pointer to the output buffer. The result is always - zero-terminated, and the longest returned string is thus - 'width + 1' bytes. - @param error if not NULL, points to a location where the status of - conversion is stored upon return. - FALSE successful conversion - TRUE the input number is [-,+]infinity or nan. - The output string in this case is always '0'. - @return number of written characters (excluding terminating '\0') - - @todo - Check if it is possible and makes sense to do our own rounding on top of - dtoa() instead of calling dtoa() twice in (rare) cases when the resulting - string representation does not fit in the specified field width and we want - to re-round the input number with fewer significant digits. Examples: - - my_gcvt(-9e-3, ..., 4, ...); - my_gcvt(-9e-3, ..., 2, ...); - my_gcvt(1.87e-3, ..., 4, ...); - my_gcvt(55, ..., 1, ...); - - We do our best to minimize such cases by: - - - passing to dtoa() the field width as the number of significant digits - - - removing the sign of the number early (and decreasing the width before - passing it to dtoa()) - - - choosing the proper format to preserve the most number of significant - digits. -*/ - -size_t my_gcvt(double x, my_gcvt_arg_type type, int width, char *to, - my_bool *error) -{ - int decpt, sign, len, exp_len; - char *res, *src, *end, *dst= to, *dend= dst + width; - char buf[DTOA_BUFF_SIZE]; - my_bool have_space, force_e_format; - DBUG_ASSERT(width > 0 && to != NULL); - - /* We want to remove '-' from equations early */ - if (x < 0.) - width--; - - res= dtoa(x, 4, type == MY_GCVT_ARG_DOUBLE ? width : min(width, FLT_DIG), - &decpt, &sign, &end, buf, sizeof(buf)); - if (decpt == DTOA_OVERFLOW) - { - dtoa_free(res, buf, sizeof(buf)); - *to++= '0'; - *to= '\0'; - if (error != NULL) - *error= TRUE; - return 1; - } - - if (error != NULL) - *error= FALSE; - - src= res; - len= end - res; - - /* - Number of digits in the exponent from the 'e' conversion. - The sign of the exponent is taken into account separetely, we don't need - to count it here. - */ - exp_len= 1 + (decpt >= 101 || decpt <= -99) + (decpt >= 11 || decpt <= -9); - - /* - Do we have enough space for all digits in the 'f' format? - Let 'len' be the number of significant digits returned by dtoa, - and F be the length of the resulting decimal representation. - Consider the following cases: - 1. decpt <= 0, i.e. we have "0.NNN" => F = len - decpt + 2 - 2. 0 < decpt < len, i.e. we have "NNN.NNN" => F = len + 1 - 3. len <= decpt, i.e. we have "NNN00" => F = decpt - */ - have_space= (decpt <= 0 ? len - decpt + 2 : - decpt > 0 && decpt < len ? len + 1 : - decpt) <= width; - /* - The following is true when no significant digits can be placed with the - specified field width using the 'f' format, and the 'e' format - will not be truncated. - */ - force_e_format= (decpt <= 0 && width <= 2 - decpt && width >= 3 + exp_len); - /* - Assume that we don't have enough space to place all significant digits in - the 'f' format. We have to choose between the 'e' format and the 'f' one - to keep as many significant digits as possible. - Let E and F be the lengths of decimal representaion in the 'e' and 'f' - formats, respectively. We want to use the 'f' format if, and only if F <= E. - Consider the following cases: - 1. decpt <= 0. - F = len - decpt + 2 (see above) - E = len + (len > 1) + 1 + 1 (decpt <= -99) + (decpt <= -9) + 1 - ("N.NNe-MMM") - (F <= E) <=> (len == 1 && decpt >= -1) || (len > 1 && decpt >= -2) - We also need to ensure that if the 'f' format is chosen, - the field width allows us to place at least one significant digit - (i.e. width > 2 - decpt). If not, we prefer the 'e' format. - 2. 0 < decpt < len - F = len + 1 (see above) - E = len + 1 + 1 + ... ("N.NNeMMM") - F is always less than E. - 3. len <= decpt <= width - In this case we have enough space to represent the number in the 'f' - format, so we prefer it with some exceptions. - 4. width < decpt - The number cannot be represented in the 'f' format at all, always use - the 'e' 'one. - */ - if ((have_space || - /* - Not enough space, let's see if the 'f' format provides the most number - of significant digits. - */ - ((decpt <= width && (decpt >= -1 || (decpt == -2 && - (len > 1 || !force_e_format)))) && - !force_e_format)) && - - /* - Use the 'e' format in some cases even if we have enough space for the - 'f' one. See comment for MAX_DECPT_FOR_F_FORMAT. - */ - (!have_space || (decpt >= -MAX_DECPT_FOR_F_FORMAT + 1 && - (decpt <= MAX_DECPT_FOR_F_FORMAT || len > decpt)))) - { - /* 'f' format */ - int i; - - width-= (decpt < len) + (decpt <= 0 ? 1 - decpt : 0); - - /* Do we have to truncate any digits? */ - if (width < len) - { - if (width < decpt) - { - if (error != NULL) - *error= TRUE; - width= decpt; - } - - /* - We want to truncate (len - width) least significant digits after the - decimal point. For this we are calling dtoa with mode=5, passing the - number of significant digits = (len-decpt) - (len-width) = width-decpt - */ - dtoa_free(res, buf, sizeof(buf)); - res= dtoa(x, 5, width - decpt, &decpt, &sign, &end, buf, sizeof(buf)); - src= res; - len= end - res; - } - - if (len == 0) - { - /* Underflow. Just print '0' and exit */ - *dst++= '0'; - goto end; - } - - /* - At this point we are sure we have enough space to put all digits - returned by dtoa - */ - if (sign && dst < dend) - *dst++= '-'; - if (decpt <= 0) - { - if (dst < dend) - *dst++= '0'; - if (len > 0 && dst < dend) - *dst++= '.'; - for (; decpt < 0 && dst < dend; decpt++) - *dst++= '0'; - } - - for (i= 1; i <= len && dst < dend; i++) - { - *dst++= *src++; - if (i == decpt && i < len && dst < dend) - *dst++= '.'; - } - while (i++ <= decpt && dst < dend) - *dst++= '0'; - } - else - { - /* 'e' format */ - int decpt_sign= 0; - - if (--decpt < 0) - { - decpt= -decpt; - width--; - decpt_sign= 1; - } - width-= 1 + exp_len; /* eNNN */ - - if (len > 1) - width--; - - if (width <= 0) - { - /* Overflow */ - if (error != NULL) - *error= TRUE; - width= 0; - } - - /* Do we have to truncate any digits? */ - if (width < len) - { - /* Yes, re-convert with a smaller width */ - dtoa_free(res, buf, sizeof(buf)); - res= dtoa(x, 4, width, &decpt, &sign, &end, buf, sizeof(buf)); - src= res; - len= end - res; - if (--decpt < 0) - decpt= -decpt; - } - /* - At this point we are sure we have enough space to put all digits - returned by dtoa - */ - if (sign && dst < dend) - *dst++= '-'; - if (dst < dend) - *dst++= *src++; - if (len > 1 && dst < dend) - { - *dst++= '.'; - while (src < end && dst < dend) - *dst++= *src++; - } - if (dst < dend) - *dst++= 'e'; - if (decpt_sign && dst < dend) - *dst++= '-'; - - if (decpt >= 100 && dst < dend) - { - *dst++= decpt / 100 + '0'; - decpt%= 100; - if (dst < dend) - *dst++= decpt / 10 + '0'; - } - else if (decpt >= 10 && dst < dend) - *dst++= decpt / 10 + '0'; - if (dst < dend) - *dst++= decpt % 10 + '0'; - - } - -end: - dtoa_free(res, buf, sizeof(buf)); - *dst= '\0'; - - return dst - to; -} - -/** - @brief - Converts string to double (string does not have to be zero-terminated) - - @details - This is a wrapper around dtoa's version of strtod(). - - @param str input string - @param end address of a pointer to the first character after the input - string. Upon return the pointer is set to point to the first - rejected character. - @param error Upon return is set to EOVERFLOW in case of underflow or - overflow. - - @return The resulting double value. In case of underflow, 0.0 is - returned. In case overflow, signed DBL_MAX is returned. -*/ - -double my_strtod(const char *str, char **end, int *error) -{ - char buf[DTOA_BUFF_SIZE]; - double res; - DBUG_ASSERT(end != NULL && ((str != NULL && *end != NULL) || - (str == NULL && *end == NULL)) && - error != NULL); - - res= my_strtod_int(str, end, error, buf, sizeof(buf)); - return (*error == 0) ? res : (res < 0 ? -DBL_MAX : DBL_MAX); -} - - -double my_atof(const char *nptr) -{ - int error; - const char *end= nptr+65535; /* Should be enough */ - return (my_strtod(nptr, (char**) &end, &error)); -} - - -/**************************************************************** - * - * The author of this software is David M. Gay. - * - * Copyright (c) 1991, 2000, 2001 by Lucent Technologies. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - * - ***************************************************************/ -/* Please send bug reports to David M. Gay (dmg at acm dot org, - * with " at " changed at "@" and " dot " changed to "."). */ - -/* - Original copy of the software is located at http://www.netlib.org/fp/dtoa.c - It was adjusted to serve MySQL server needs: - * strtod() was modified to not expect a zero-terminated string. - It now honors 'se' (end of string) argument as the input parameter, - not just as the output one. - * in dtoa(), in case of overflow/underflow/NaN result string now contains "0"; - decpt is set to DTOA_OVERFLOW to indicate overflow. - * support for VAX, IBM mainframe and 16-bit hardware removed - * we always assume that 64-bit integer type is available - * support for Kernigan-Ritchie style headers (pre-ANSI compilers) - removed - * all gcc warnings ironed out - * we always assume multithreaded environment, so we had to change - memory allocation procedures to use stack in most cases; - malloc is used as the last resort. - * pow5mult rewritten to use pre-calculated pow5 list instead of - the one generated on the fly. -*/ - - -/* - On a machine with IEEE extended-precision registers, it is - necessary to specify double-precision (53-bit) rounding precision - before invoking strtod or dtoa. If the machine uses (the equivalent - of) Intel 80x87 arithmetic, the call - _control87(PC_53, MCW_PC); - does this with many compilers. Whether this or another call is - appropriate depends on the compiler; for this to work, it may be - necessary to #include "float.h" or another system-dependent header - file. -*/ - -/* - #define Honor_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3 - and dtoa should round accordingly. - #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3 - and Honor_FLT_ROUNDS is not #defined. - - TODO: check if we can get rid of the above two -*/ - -typedef int32 Long; -typedef uint32 ULong; -typedef int64 LLong; -typedef uint64 ULLong; - -typedef union { double d; ULong L[2]; } U; - -#if defined(WORDS_BIGENDIAN) || (defined(__FLOAT_WORD_ORDER) && \ - (__FLOAT_WORD_ORDER == __BIG_ENDIAN)) -#define word0(x) (x)->L[0] -#define word1(x) (x)->L[1] -#else -#define word0(x) (x)->L[1] -#define word1(x) (x)->L[0] -#endif - -#define dval(x) (x)->d - -/* #define P DBL_MANT_DIG */ -/* Ten_pmax= floor(P*log(2)/log(5)) */ -/* Bletch= (highest power of 2 < DBL_MAX_10_EXP) / 16 */ -/* Quick_max= floor((P-1)*log(FLT_RADIX)/log(10) - 1) */ -/* Int_max= floor(P*log(FLT_RADIX)/log(10) - 1) */ - -#define Exp_shift 20 -#define Exp_shift1 20 -#define Exp_msk1 0x100000 -#define Exp_mask 0x7ff00000 -#define P 53 -#define Bias 1023 -#define Emin (-1022) -#define Exp_1 0x3ff00000 -#define Exp_11 0x3ff00000 -#define Ebits 11 -#define Frac_mask 0xfffff -#define Frac_mask1 0xfffff -#define Ten_pmax 22 -#define Bletch 0x10 -#define Bndry_mask 0xfffff -#define Bndry_mask1 0xfffff -#define LSB 1 -#define Sign_bit 0x80000000 -#define Log2P 1 -#define Tiny1 1 -#define Quick_max 14 -#define Int_max 14 - -#ifndef Flt_Rounds -#ifdef FLT_ROUNDS -#define Flt_Rounds FLT_ROUNDS -#else -#define Flt_Rounds 1 -#endif -#endif /*Flt_Rounds*/ - -#ifdef Honor_FLT_ROUNDS -#define Rounding rounding -#undef Check_FLT_ROUNDS -#define Check_FLT_ROUNDS -#else -#define Rounding Flt_Rounds -#endif - -#define rounded_product(a,b) a*= b -#define rounded_quotient(a,b) a/= b - -#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1)) -#define Big1 0xffffffff -#define FFFFFFFF 0xffffffffUL - -/* This is tested to be enough for dtoa */ - -#define Kmax 15 - -#define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign, \ - 2*sizeof(int) + y->wds*sizeof(ULong)) - -/* Arbitrary-length integer */ - -typedef struct Bigint -{ - union { - ULong *x; /* points right after this Bigint object */ - struct Bigint *next; /* to maintain free lists */ - } p; - int k; /* 2^k = maxwds */ - int maxwds; /* maximum length in 32-bit words */ - int sign; /* not zero if number is negative */ - int wds; /* current length in 32-bit words */ -} Bigint; - - -/* A simple stack-memory based allocator for Bigints */ - -typedef struct Stack_alloc -{ - char *begin; - char *free; - char *end; - /* - Having list of free blocks lets us reduce maximum required amount - of memory from ~4000 bytes to < 1680 (tested on x86). - */ - Bigint *freelist[Kmax+1]; -} Stack_alloc; - - -/* - Try to allocate object on stack, and resort to malloc if all - stack memory is used. Ensure allocated objects to be aligned by the pointer - size in order to not break the alignment rules when storing a pointer to a - Bigint. -*/ - -static Bigint *Balloc(int k, Stack_alloc *alloc) -{ - Bigint *rv; - if (k <= Kmax && alloc->freelist[k]) - { - rv= alloc->freelist[k]; - alloc->freelist[k]= rv->p.next; - } - else - { - int x, len; - - x= 1 << k; - len= MY_ALIGN(sizeof(Bigint) + x * sizeof(ULong), SIZEOF_CHARP); - - if (alloc->free + len <= alloc->end) - { - rv= (Bigint*) alloc->free; - alloc->free+= len; - } - else - rv= (Bigint*) malloc(len); - - rv->k= k; - rv->maxwds= x; - } - rv->sign= rv->wds= 0; - rv->p.x= (ULong*) (rv + 1); - return rv; -} - - -/* - If object was allocated on stack, try putting it to the free - list. Otherwise call free(). -*/ - -static void Bfree(Bigint *v, Stack_alloc *alloc) -{ - char *gptr= (char*) v; /* generic pointer */ - if (gptr < alloc->begin || gptr >= alloc->end) - free(gptr); - else if (v->k <= Kmax) - { - /* - Maintain free lists only for stack objects: this way we don't - have to bother with freeing lists in the end of dtoa; - heap should not be used normally anyway. - */ - v->p.next= alloc->freelist[v->k]; - alloc->freelist[v->k]= v; - } -} - - -/* - This is to place return value of dtoa in: tries to use stack - as well, but passes by free lists management and just aligns len by - the pointer size in order to not break the alignment rules when storing a - pointer to a Bigint. -*/ - -static char *dtoa_alloc(int i, Stack_alloc *alloc) -{ - char *rv; - int aligned_size= MY_ALIGN(i, SIZEOF_CHARP); - if (alloc->free + aligned_size <= alloc->end) - { - rv= alloc->free; - alloc->free+= aligned_size; - } - else - rv= malloc(i); - return rv; -} - - -/* - dtoa_free() must be used to free values s returned by dtoa() - This is the counterpart of dtoa_alloc() -*/ - -static void dtoa_free(char *gptr, char *buf, size_t buf_size) -{ - if (gptr < buf || gptr >= buf + buf_size) - free(gptr); -} - - -/* Bigint arithmetic functions */ - -/* Multiply by m and add a */ - -static Bigint *multadd(Bigint *b, int m, int a, Stack_alloc *alloc) -{ - int i, wds; - ULong *x; - ULLong carry, y; - Bigint *b1; - - wds= b->wds; - x= b->p.x; - i= 0; - carry= a; - do - { - y= *x * (ULLong)m + carry; - carry= y >> 32; - *x++= (ULong)(y & FFFFFFFF); - } - while (++i < wds); - if (carry) - { - if (wds >= b->maxwds) - { - b1= Balloc(b->k+1, alloc); - Bcopy(b1, b); - Bfree(b, alloc); - b= b1; - } - b->p.x[wds++]= (ULong) carry; - b->wds= wds; - } - return b; -} - - -static Bigint *s2b(const char *s, int nd0, int nd, ULong y9, Stack_alloc *alloc) -{ - Bigint *b; - int i, k; - Long x, y; - - x= (nd + 8) / 9; - for (k= 0, y= 1; x > y; y <<= 1, k++) ; - b= Balloc(k, alloc); - b->p.x[0]= y9; - b->wds= 1; - - i= 9; - if (9 < nd0) - { - s+= 9; - do - b= multadd(b, 10, *s++ - '0', alloc); - while (++i < nd0); - s++; - } - else - s+= 10; - for(; i < nd; i++) - b= multadd(b, 10, *s++ - '0', alloc); - return b; -} - - -static int hi0bits(register ULong x) -{ - register int k= 0; - - if (!(x & 0xffff0000)) - { - k= 16; - x<<= 16; - } - if (!(x & 0xff000000)) - { - k+= 8; - x<<= 8; - } - if (!(x & 0xf0000000)) - { - k+= 4; - x<<= 4; - } - if (!(x & 0xc0000000)) - { - k+= 2; - x<<= 2; - } - if (!(x & 0x80000000)) - { - k++; - if (!(x & 0x40000000)) - return 32; - } - return k; -} - - -static int lo0bits(ULong *y) -{ - register int k; - register ULong x= *y; - - if (x & 7) - { - if (x & 1) - return 0; - if (x & 2) - { - *y= x >> 1; - return 1; - } - *y= x >> 2; - return 2; - } - k= 0; - if (!(x & 0xffff)) - { - k= 16; - x>>= 16; - } - if (!(x & 0xff)) - { - k+= 8; - x>>= 8; - } - if (!(x & 0xf)) - { - k+= 4; - x>>= 4; - } - if (!(x & 0x3)) - { - k+= 2; - x>>= 2; - } - if (!(x & 1)) - { - k++; - x>>= 1; - if (!x) - return 32; - } - *y= x; - return k; -} - - -/* Convert integer to Bigint number */ - -static Bigint *i2b(int i, Stack_alloc *alloc) -{ - Bigint *b; - - b= Balloc(1, alloc); - b->p.x[0]= i; - b->wds= 1; - return b; -} - - -/* Multiply two Bigint numbers */ - -static Bigint *mult(Bigint *a, Bigint *b, Stack_alloc *alloc) -{ - Bigint *c; - int k, wa, wb, wc; - ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0; - ULong y; - ULLong carry, z; - - if (a->wds < b->wds) - { - c= a; - a= b; - b= c; - } - k= a->k; - wa= a->wds; - wb= b->wds; - wc= wa + wb; - if (wc > a->maxwds) - k++; - c= Balloc(k, alloc); - for (x= c->p.x, xa= x + wc; x < xa; x++) - *x= 0; - xa= a->p.x; - xae= xa + wa; - xb= b->p.x; - xbe= xb + wb; - xc0= c->p.x; - for (; xb < xbe; xc0++) - { - if ((y= *xb++)) - { - x= xa; - xc= xc0; - carry= 0; - do - { - z= *x++ * (ULLong)y + *xc + carry; - carry= z >> 32; - *xc++= (ULong) (z & FFFFFFFF); - } - while (x < xae); - *xc= (ULong) carry; - } - } - for (xc0= c->p.x, xc= xc0 + wc; wc > 0 && !*--xc; --wc) ; - c->wds= wc; - return c; -} - - -/* - Precalculated array of powers of 5: tested to be enough for - vasting majority of dtoa_r cases. -*/ - -static ULong powers5[]= -{ - 625UL, - - 390625UL, - - 2264035265UL, 35UL, - - 2242703233UL, 762134875UL, 1262UL, - - 3211403009UL, 1849224548UL, 3668416493UL, 3913284084UL, 1593091UL, - - 781532673UL, 64985353UL, 253049085UL, 594863151UL, 3553621484UL, - 3288652808UL, 3167596762UL, 2788392729UL, 3911132675UL, 590UL, - - 2553183233UL, 3201533787UL, 3638140786UL, 303378311UL, 1809731782UL, - 3477761648UL, 3583367183UL, 649228654UL, 2915460784UL, 487929380UL, - 1011012442UL, 1677677582UL, 3428152256UL, 1710878487UL, 1438394610UL, - 2161952759UL, 4100910556UL, 1608314830UL, 349175UL -}; - - -static Bigint p5_a[]= -{ - /* { x } - k - maxwds - sign - wds */ - { { powers5 }, 1, 1, 0, 1 }, - { { powers5 + 1 }, 1, 1, 0, 1 }, - { { powers5 + 2 }, 1, 2, 0, 2 }, - { { powers5 + 4 }, 2, 3, 0, 3 }, - { { powers5 + 7 }, 3, 5, 0, 5 }, - { { powers5 + 12 }, 4, 10, 0, 10 }, - { { powers5 + 22 }, 5, 19, 0, 19 } -}; - -#define P5A_MAX (sizeof(p5_a)/sizeof(*p5_a) - 1) - -static Bigint *pow5mult(Bigint *b, int k, Stack_alloc *alloc) -{ - Bigint *b1, *p5, *p51; - int i; - static int p05[3]= { 5, 25, 125 }; - - if ((i= k & 3)) - b= multadd(b, p05[i-1], 0, alloc); - - if (!(k>>= 2)) - return b; - p5= p5_a; - for (;;) - { - if (k & 1) - { - b1= mult(b, p5, alloc); - Bfree(b, alloc); - b= b1; - } - if (!(k>>= 1)) - break; - /* Calculate next power of 5 */ - if (p5 < p5_a + P5A_MAX) - ++p5; - else if (p5 == p5_a + P5A_MAX) - p5= mult(p5, p5, alloc); - else - { - p51= mult(p5, p5, alloc); - Bfree(p5, alloc); - p5= p51; - } - } - return b; -} - - -static Bigint *lshift(Bigint *b, int k, Stack_alloc *alloc) -{ - int i, k1, n, n1; - Bigint *b1; - ULong *x, *x1, *xe, z; - - n= k >> 5; - k1= b->k; - n1= n + b->wds + 1; - for (i= b->maxwds; n1 > i; i<<= 1) - k1++; - b1= Balloc(k1, alloc); - x1= b1->p.x; - for (i= 0; i < n; i++) - *x1++= 0; - x= b->p.x; - xe= x + b->wds; - if (k&= 0x1f) - { - k1= 32 - k; - z= 0; - do - { - *x1++= *x << k | z; - z= *x++ >> k1; - } - while (x < xe); - if ((*x1= z)) - ++n1; - } - else - do - *x1++= *x++; - while (x < xe); - b1->wds= n1 - 1; - Bfree(b, alloc); - return b1; -} - - -static int cmp(Bigint *a, Bigint *b) -{ - ULong *xa, *xa0, *xb, *xb0; - int i, j; - - i= a->wds; - j= b->wds; - if (i-= j) - return i; - xa0= a->p.x; - xa= xa0 + j; - xb0= b->p.x; - xb= xb0 + j; - for (;;) - { - if (*--xa != *--xb) - return *xa < *xb ? -1 : 1; - if (xa <= xa0) - break; - } - return 0; -} - - -static Bigint *diff(Bigint *a, Bigint *b, Stack_alloc *alloc) -{ - Bigint *c; - int i, wa, wb; - ULong *xa, *xae, *xb, *xbe, *xc; - ULLong borrow, y; - - i= cmp(a,b); - if (!i) - { - c= Balloc(0, alloc); - c->wds= 1; - c->p.x[0]= 0; - return c; - } - if (i < 0) - { - c= a; - a= b; - b= c; - i= 1; - } - else - i= 0; - c= Balloc(a->k, alloc); - c->sign= i; - wa= a->wds; - xa= a->p.x; - xae= xa + wa; - wb= b->wds; - xb= b->p.x; - xbe= xb + wb; - xc= c->p.x; - borrow= 0; - do - { - y= (ULLong)*xa++ - *xb++ - borrow; - borrow= y >> 32 & (ULong)1; - *xc++= (ULong) (y & FFFFFFFF); - } - while (xb < xbe); - while (xa < xae) - { - y= *xa++ - borrow; - borrow= y >> 32 & (ULong)1; - *xc++= (ULong) (y & FFFFFFFF); - } - while (!*--xc) - wa--; - c->wds= wa; - return c; -} - - -static double ulp(U *x) -{ - register Long L; - U u; - - L= (word0(x) & Exp_mask) - (P - 1)*Exp_msk1; - word0(&u) = L; - word1(&u) = 0; - return dval(&u); -} - - -static double b2d(Bigint *a, int *e) -{ - ULong *xa, *xa0, w, y, z; - int k; - U d; -#define d0 word0(&d) -#define d1 word1(&d) - - xa0= a->p.x; - xa= xa0 + a->wds; - y= *--xa; - k= hi0bits(y); - *e= 32 - k; - if (k < Ebits) - { - d0= Exp_1 | y >> (Ebits - k); - w= xa > xa0 ? *--xa : 0; - d1= y << ((32-Ebits) + k) | w >> (Ebits - k); - goto ret_d; - } - z= xa > xa0 ? *--xa : 0; - if (k-= Ebits) - { - d0= Exp_1 | y << k | z >> (32 - k); - y= xa > xa0 ? *--xa : 0; - d1= z << k | y >> (32 - k); - } - else - { - d0= Exp_1 | y; - d1= z; - } - ret_d: -#undef d0 -#undef d1 - return dval(&d); -} - - -static Bigint *d2b(U *d, int *e, int *bits, Stack_alloc *alloc) -{ - Bigint *b; - int de, k; - ULong *x, y, z; - int i; -#define d0 word0(d) -#define d1 word1(d) - - b= Balloc(1, alloc); - x= b->p.x; - - z= d0 & Frac_mask; - d0 &= 0x7fffffff; /* clear sign bit, which we ignore */ - if ((de= (int)(d0 >> Exp_shift))) - z|= Exp_msk1; - if ((y= d1)) - { - if ((k= lo0bits(&y))) - { - x[0]= y | z << (32 - k); - z>>= k; - } - else - x[0]= y; - i= b->wds= (x[1]= z) ? 2 : 1; - } - else - { - k= lo0bits(&z); - x[0]= z; - i= b->wds= 1; - k+= 32; - } - if (de) - { - *e= de - Bias - (P-1) + k; - *bits= P - k; - } - else - { - *e= de - Bias - (P-1) + 1 + k; - *bits= 32*i - hi0bits(x[i-1]); - } - return b; -#undef d0 -#undef d1 -} - - -static double ratio(Bigint *a, Bigint *b) -{ - U da, db; - int k, ka, kb; - - dval(&da)= b2d(a, &ka); - dval(&db)= b2d(b, &kb); - k= ka - kb + 32*(a->wds - b->wds); - if (k > 0) - word0(&da)+= k*Exp_msk1; - else - { - k= -k; - word0(&db)+= k*Exp_msk1; - } - return dval(&da) / dval(&db); -} - -static const double tens[] = -{ - 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, - 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, - 1e20, 1e21, 1e22 -}; - -static const double bigtens[]= { 1e16, 1e32, 1e64, 1e128, 1e256 }; -static const double tinytens[]= -{ 1e-16, 1e-32, 1e-64, 1e-128, - 9007199254740992.*9007199254740992.e-256 /* = 2^106 * 1e-53 */ -}; -/* - The factor of 2^53 in tinytens[4] helps us avoid setting the underflow - flag unnecessarily. It leads to a song and dance at the end of strtod. -*/ -#define Scale_Bit 0x10 -#define n_bigtens 5 - -/* - strtod for IEEE--arithmetic machines. - - This strtod returns a nearest machine number to the input decimal - string (or sets errno to EOVERFLOW). Ties are broken by the IEEE round-even - rule. - - Inspired loosely by William D. Clinger's paper "How to Read Floating - Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101]. - - Modifications: - - 1. We only require IEEE (not IEEE double-extended). - 2. We get by with floating-point arithmetic in a case that - Clinger missed -- when we're computing d * 10^n - for a small integer d and the integer n is not too - much larger than 22 (the maximum integer k for which - we can represent 10^k exactly), we may be able to - compute (d*10^k) * 10^(e-k) with just one roundoff. - 3. Rather than a bit-at-a-time adjustment of the binary - result in the hard case, we use floating-point - arithmetic to determine the adjustment to within - one bit; only in really hard cases do we need to - compute a second residual. - 4. Because of 3., we don't need a large table of powers of 10 - for ten-to-e (just some small tables, e.g. of 10^k - for 0 <= k <= 22). -*/ - -static double my_strtod_int(const char *s00, char **se, int *error, char *buf, size_t buf_size) -{ - int scale; - int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, UNINIT_VAR(c), dsign, - e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign; - const char *s, *s0, *s1, *end = *se; - double aadj, aadj1; - U aadj2, adj, rv, rv0; - Long L; - ULong y, z; - Bigint *bb, *bb1, *bd, *bd0, *bs, *delta; -#ifdef SET_INEXACT - int inexact, oldinexact; -#endif -#ifdef Honor_FLT_ROUNDS - int rounding; -#endif - Stack_alloc alloc; - - *error= 0; - - alloc.begin= alloc.free= buf; - alloc.end= buf + buf_size; - memset(alloc.freelist, 0, sizeof(alloc.freelist)); - - sign= nz0= nz= 0; - dval(&rv)= 0.; - for (s= s00; s < end; s++) - switch (*s) { - case '-': - sign= 1; - /* no break */ - case '+': - s++; - goto break2; - case '\t': - case '\n': - case '\v': - case '\f': - case '\r': - case ' ': - continue; - default: - goto break2; - } - break2: - if (s >= end) - goto ret0; - - if (*s == '0') - { - nz0= 1; - while (++s < end && *s == '0') ; - if (s >= end) - goto ret; - } - s0= s; - y= z= 0; - for (nd= nf= 0; s < end && (c= *s) >= '0' && c <= '9'; nd++, s++) - if (nd < 9) - y= 10*y + c - '0'; - else if (nd < 16) - z= 10*z + c - '0'; - nd0= nd; - if (s < end - 1 && c == '.') - { - c= *++s; - if (!nd) - { - for (; s < end && c == '0'; c= *++s) - nz++; - if (s < end && c > '0' && c <= '9') - { - s0= s; - nf+= nz; - nz= 0; - goto have_dig; - } - goto dig_done; - } - for (; s < end && c >= '0' && c <= '9'; c = *++s) - { - have_dig: - nz++; - if (c-= '0') - { - nf+= nz; - for (i= 1; i < nz; i++) - if (nd++ < 9) - y*= 10; - else if (nd <= DBL_DIG + 1) - z*= 10; - if (nd++ < 9) - y= 10*y + c; - else if (nd <= DBL_DIG + 1) - z= 10*z + c; - nz= 0; - } - } - } - dig_done: - e= 0; - if (s < end && (c == 'e' || c == 'E')) - { - if (!nd && !nz && !nz0) - goto ret0; - s00= s; - esign= 0; - if (++s < end) - switch (c= *s) { - case '-': - esign= 1; - case '+': - c= *++s; - } - if (s < end && c >= '0' && c <= '9') - { - while (s < end && c == '0') - c= *++s; - if (s < end && c > '0' && c <= '9') { - L= c - '0'; - s1= s; - while (++s < end && (c= *s) >= '0' && c <= '9') - L= 10*L + c - '0'; - if (s - s1 > 8 || L > 19999) - /* Avoid confusion from exponents - * so large that e might overflow. - */ - e= 19999; /* safe for 16 bit ints */ - else - e= (int)L; - if (esign) - e= -e; - } - else - e= 0; - } - else - s= s00; - } - if (!nd) - { - if (!nz && !nz0) - { - ret0: - s= s00; - sign= 0; - } - goto ret; - } - e1= e -= nf; - - /* - Now we have nd0 digits, starting at s0, followed by a - decimal point, followed by nd-nd0 digits. The number we're - after is the integer represented by those digits times - 10**e - */ - - if (!nd0) - nd0= nd; - k= nd < DBL_DIG + 1 ? nd : DBL_DIG + 1; - dval(&rv)= y; - if (k > 9) - { -#ifdef SET_INEXACT - if (k > DBL_DIG) - oldinexact = get_inexact(); -#endif - dval(&rv)= tens[k - 9] * dval(&rv) + z; - } - bd0= 0; - if (nd <= DBL_DIG -#ifndef Honor_FLT_ROUNDS - && Flt_Rounds == 1 -#endif - ) - { - if (!e) - goto ret; - if (e > 0) - { - if (e <= Ten_pmax) - { -#ifdef Honor_FLT_ROUNDS - /* round correctly FLT_ROUNDS = 2 or 3 */ - if (sign) - { - rv.d= -rv.d; - sign= 0; - } -#endif - /* rv = */ rounded_product(dval(&rv), tens[e]); - goto ret; - } - i= DBL_DIG - nd; - if (e <= Ten_pmax + i) - { - /* - A fancier test would sometimes let us do - this for larger i values. - */ -#ifdef Honor_FLT_ROUNDS - /* round correctly FLT_ROUNDS = 2 or 3 */ - if (sign) - { - rv.d= -rv.d; - sign= 0; - } -#endif - e-= i; - dval(&rv)*= tens[i]; - /* rv = */ rounded_product(dval(&rv), tens[e]); - goto ret; - } - } -#ifndef Inaccurate_Divide - else if (e >= -Ten_pmax) - { -#ifdef Honor_FLT_ROUNDS - /* round correctly FLT_ROUNDS = 2 or 3 */ - if (sign) - { - rv.d= -rv.d; - sign= 0; - } -#endif - /* rv = */ rounded_quotient(dval(&rv), tens[-e]); - goto ret; - } -#endif - } - e1+= nd - k; - -#ifdef SET_INEXACT - inexact= 1; - if (k <= DBL_DIG) - oldinexact= get_inexact(); -#endif - scale= 0; -#ifdef Honor_FLT_ROUNDS - if ((rounding= Flt_Rounds) >= 2) - { - if (sign) - rounding= rounding == 2 ? 0 : 2; - else - if (rounding != 2) - rounding= 0; - } -#endif - - /* Get starting approximation = rv * 10**e1 */ - - if (e1 > 0) - { - if ((i= e1 & 15)) - dval(&rv)*= tens[i]; - if (e1&= ~15) - { - if (e1 > DBL_MAX_10_EXP) - { - ovfl: - *error= EOVERFLOW; - /* Can't trust HUGE_VAL */ -#ifdef Honor_FLT_ROUNDS - switch (rounding) - { - case 0: /* toward 0 */ - case 3: /* toward -infinity */ - word0(&rv)= Big0; - word1(&rv)= Big1; - break; - default: - word0(&rv)= Exp_mask; - word1(&rv)= 0; - } -#else /*Honor_FLT_ROUNDS*/ - word0(&rv)= Exp_mask; - word1(&rv)= 0; -#endif /*Honor_FLT_ROUNDS*/ -#ifdef SET_INEXACT - /* set overflow bit */ - dval(&rv0)= 1e300; - dval(&rv0)*= dval(&rv0); -#endif - if (bd0) - goto retfree; - goto ret; - } - e1>>= 4; - for(j= 0; e1 > 1; j++, e1>>= 1) - if (e1 & 1) - dval(&rv)*= bigtens[j]; - /* The last multiplication could overflow. */ - word0(&rv)-= P*Exp_msk1; - dval(&rv)*= bigtens[j]; - if ((z= word0(&rv) & Exp_mask) > Exp_msk1 * (DBL_MAX_EXP + Bias - P)) - goto ovfl; - if (z > Exp_msk1 * (DBL_MAX_EXP + Bias - 1 - P)) - { - /* set to largest number (Can't trust DBL_MAX) */ - word0(&rv)= Big0; - word1(&rv)= Big1; - } - else - word0(&rv)+= P*Exp_msk1; - } - } - else if (e1 < 0) - { - e1= -e1; - if ((i= e1 & 15)) - dval(&rv)/= tens[i]; - if ((e1>>= 4)) - { - if (e1 >= 1 << n_bigtens) - goto undfl; - if (e1 & Scale_Bit) - scale= 2 * P; - for(j= 0; e1 > 0; j++, e1>>= 1) - if (e1 & 1) - dval(&rv)*= tinytens[j]; - if (scale && (j = 2 * P + 1 - ((word0(&rv) & Exp_mask) >> Exp_shift)) > 0) - { - /* scaled rv is denormal; zap j low bits */ - if (j >= 32) - { - word1(&rv)= 0; - if (j >= 53) - word0(&rv)= (P + 2) * Exp_msk1; - else - word0(&rv)&= 0xffffffff << (j - 32); - } - else - word1(&rv)&= 0xffffffff << j; - } - if (!dval(&rv)) - { - undfl: - dval(&rv)= 0.; - if (bd0) - goto retfree; - goto ret; - } - } - } - - /* Now the hard part -- adjusting rv to the correct value.*/ - - /* Put digits into bd: true value = bd * 10^e */ - - bd0= s2b(s0, nd0, nd, y, &alloc); - - for(;;) - { - bd= Balloc(bd0->k, &alloc); - Bcopy(bd, bd0); - bb= d2b(&rv, &bbe, &bbbits, &alloc); /* rv = bb * 2^bbe */ - bs= i2b(1, &alloc); - - if (e >= 0) - { - bb2= bb5= 0; - bd2= bd5= e; - } - else - { - bb2= bb5= -e; - bd2= bd5= 0; - } - if (bbe >= 0) - bb2+= bbe; - else - bd2-= bbe; - bs2= bb2; -#ifdef Honor_FLT_ROUNDS - if (rounding != 1) - bs2++; -#endif - j= bbe - scale; - i= j + bbbits - 1; /* logb(rv) */ - if (i < Emin) /* denormal */ - j+= P - Emin; - else - j= P + 1 - bbbits; - bb2+= j; - bd2+= j; - bd2+= scale; - i= bb2 < bd2 ? bb2 : bd2; - if (i > bs2) - i= bs2; - if (i > 0) - { - bb2-= i; - bd2-= i; - bs2-= i; - } - if (bb5 > 0) - { - bs= pow5mult(bs, bb5, &alloc); - bb1= mult(bs, bb, &alloc); - Bfree(bb, &alloc); - bb= bb1; - } - if (bb2 > 0) - bb= lshift(bb, bb2, &alloc); - if (bd5 > 0) - bd= pow5mult(bd, bd5, &alloc); - if (bd2 > 0) - bd= lshift(bd, bd2, &alloc); - if (bs2 > 0) - bs= lshift(bs, bs2, &alloc); - delta= diff(bb, bd, &alloc); - dsign= delta->sign; - delta->sign= 0; - i= cmp(delta, bs); -#ifdef Honor_FLT_ROUNDS - if (rounding != 1) - { - if (i < 0) - { - /* Error is less than an ulp */ - if (!delta->p.x[0] && delta->wds <= 1) - { - /* exact */ -#ifdef SET_INEXACT - inexact= 0; -#endif - break; - } - if (rounding) - { - if (dsign) - { - adj.d= 1.; - goto apply_adj; - } - } - else if (!dsign) - { - adj.d= -1.; - if (!word1(&rv) && !(word0(&rv) & Frac_mask)) - { - y= word0(&rv) & Exp_mask; - if (!scale || y > 2*P*Exp_msk1) - { - delta= lshift(delta, Log2P, &alloc); - if (cmp(delta, bs) <= 0) - adj.d= -0.5; - } - } - apply_adj: - if (scale && (y= word0(&rv) & Exp_mask) <= 2 * P * Exp_msk1) - word0(&adj)+= (2 * P + 1) * Exp_msk1 - y; - dval(&rv)+= adj.d * ulp(&rv); - } - break; - } - adj.d= ratio(delta, bs); - if (adj.d < 1.) - adj.d= 1.; - if (adj.d <= 0x7ffffffe) - { - /* adj = rounding ? ceil(adj) : floor(adj); */ - y= adj.d; - if (y != adj.d) - { - if (!((rounding >> 1) ^ dsign)) - y++; - adj.d= y; - } - } - if (scale && (y= word0(&rv) & Exp_mask) <= 2 * P * Exp_msk1) - word0(&adj)+= (2 * P + 1) * Exp_msk1 - y; - adj.d*= ulp(&rv); - if (dsign) - dval(&rv)+= adj.d; - else - dval(&rv)-= adj.d; - goto cont; - } -#endif /*Honor_FLT_ROUNDS*/ - - if (i < 0) - { - /* - Error is less than half an ulp -- check for special case of mantissa - a power of two. - */ - if (dsign || word1(&rv) || word0(&rv) & Bndry_mask || - (word0(&rv) & Exp_mask) <= (2 * P + 1) * Exp_msk1) - { -#ifdef SET_INEXACT - if (!delta->x[0] && delta->wds <= 1) - inexact= 0; -#endif - break; - } - if (!delta->p.x[0] && delta->wds <= 1) - { - /* exact result */ -#ifdef SET_INEXACT - inexact= 0; -#endif - break; - } - delta= lshift(delta, Log2P, &alloc); - if (cmp(delta, bs) > 0) - goto drop_down; - break; - } - if (i == 0) - { - /* exactly half-way between */ - if (dsign) - { - if ((word0(&rv) & Bndry_mask1) == Bndry_mask1 && - word1(&rv) == - ((scale && (y = word0(&rv) & Exp_mask) <= 2 * P * Exp_msk1) ? - (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) : - 0xffffffff)) - { - /*boundary case -- increment exponent*/ - word0(&rv)= (word0(&rv) & Exp_mask) + Exp_msk1; - word1(&rv) = 0; - dsign = 0; - break; - } - } - else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) - { - drop_down: - /* boundary case -- decrement exponent */ - if (scale) - { - L= word0(&rv) & Exp_mask; - if (L <= (2 *P + 1) * Exp_msk1) - { - if (L > (P + 2) * Exp_msk1) - /* round even ==> accept rv */ - break; - /* rv = smallest denormal */ - goto undfl; - } - } - L= (word0(&rv) & Exp_mask) - Exp_msk1; - word0(&rv)= L | Bndry_mask1; - word1(&rv)= 0xffffffff; - break; - } - if (!(word1(&rv) & LSB)) - break; - if (dsign) - dval(&rv)+= ulp(&rv); - else - { - dval(&rv)-= ulp(&rv); - if (!dval(&rv)) - goto undfl; - } - dsign= 1 - dsign; - break; - } - if ((aadj= ratio(delta, bs)) <= 2.) - { - if (dsign) - aadj= aadj1= 1.; - else if (word1(&rv) || word0(&rv) & Bndry_mask) - { - if (word1(&rv) == Tiny1 && !word0(&rv)) - goto undfl; - aadj= 1.; - aadj1= -1.; - } - else - { - /* special case -- power of FLT_RADIX to be rounded down... */ - if (aadj < 2. / FLT_RADIX) - aadj= 1. / FLT_RADIX; - else - aadj*= 0.5; - aadj1= -aadj; - } - } - else - { - aadj*= 0.5; - aadj1= dsign ? aadj : -aadj; -#ifdef Check_FLT_ROUNDS - switch (Rounding) - { - case 2: /* towards +infinity */ - aadj1-= 0.5; - break; - case 0: /* towards 0 */ - case 3: /* towards -infinity */ - aadj1+= 0.5; - } -#else - if (Flt_Rounds == 0) - aadj1+= 0.5; -#endif /*Check_FLT_ROUNDS*/ - } - y= word0(&rv) & Exp_mask; - - /* Check for overflow */ - - if (y == Exp_msk1 * (DBL_MAX_EXP + Bias - 1)) - { - dval(&rv0)= dval(&rv); - word0(&rv)-= P * Exp_msk1; - adj.d= aadj1 * ulp(&rv); - dval(&rv)+= adj.d; - if ((word0(&rv) & Exp_mask) >= Exp_msk1 * (DBL_MAX_EXP + Bias - P)) - { - if (word0(&rv0) == Big0 && word1(&rv0) == Big1) - goto ovfl; - word0(&rv)= Big0; - word1(&rv)= Big1; - goto cont; - } - else - word0(&rv)+= P * Exp_msk1; - } - else - { - if (scale && y <= 2 * P * Exp_msk1) - { - if (aadj <= 0x7fffffff) - { - if ((z= (ULong) aadj) <= 0) - z= 1; - aadj= z; - aadj1= dsign ? aadj : -aadj; - } - dval(&aadj2) = aadj1; - word0(&aadj2)+= (2 * P + 1) * Exp_msk1 - y; - aadj1= dval(&aadj2); - adj.d= aadj1 * ulp(&rv); - dval(&rv)+= adj.d; - if (rv.d == 0.) - goto undfl; - } - else - { - adj.d= aadj1 * ulp(&rv); - dval(&rv)+= adj.d; - } - } - z= word0(&rv) & Exp_mask; -#ifndef SET_INEXACT - if (!scale) - if (y == z) - { - /* Can we stop now? */ - L= (Long)aadj; - aadj-= L; - /* The tolerances below are conservative. */ - if (dsign || word1(&rv) || word0(&rv) & Bndry_mask) - { - if (aadj < .4999999 || aadj > .5000001) - break; - } - else if (aadj < .4999999 / FLT_RADIX) - break; - } -#endif - cont: - Bfree(bb, &alloc); - Bfree(bd, &alloc); - Bfree(bs, &alloc); - Bfree(delta, &alloc); - } -#ifdef SET_INEXACT - if (inexact) - { - if (!oldinexact) - { - word0(&rv0)= Exp_1 + (70 << Exp_shift); - word1(&rv0)= 0; - dval(&rv0)+= 1.; - } - } - else if (!oldinexact) - clear_inexact(); -#endif - if (scale) - { - word0(&rv0)= Exp_1 - 2 * P * Exp_msk1; - word1(&rv0)= 0; - dval(&rv)*= dval(&rv0); - } -#ifdef SET_INEXACT - if (inexact && !(word0(&rv) & Exp_mask)) - { - /* set underflow bit */ - dval(&rv0)= 1e-300; - dval(&rv0)*= dval(&rv0); - } -#endif - retfree: - Bfree(bb, &alloc); - Bfree(bd, &alloc); - Bfree(bs, &alloc); - Bfree(bd0, &alloc); - Bfree(delta, &alloc); - ret: - *se= (char *)s; - return sign ? -dval(&rv) : dval(&rv); -} - - -static int quorem(Bigint *b, Bigint *S) -{ - int n; - ULong *bx, *bxe, q, *sx, *sxe; - ULLong borrow, carry, y, ys; - - n= S->wds; - if (b->wds < n) - return 0; - sx= S->p.x; - sxe= sx + --n; - bx= b->p.x; - bxe= bx + n; - q= *bxe / (*sxe + 1); /* ensure q <= true quotient */ - if (q) - { - borrow= 0; - carry= 0; - do - { - ys= *sx++ * (ULLong)q + carry; - carry= ys >> 32; - y= *bx - (ys & FFFFFFFF) - borrow; - borrow= y >> 32 & (ULong)1; - *bx++= (ULong) (y & FFFFFFFF); - } - while (sx <= sxe); - if (!*bxe) - { - bx= b->p.x; - while (--bxe > bx && !*bxe) - --n; - b->wds= n; - } - } - if (cmp(b, S) >= 0) - { - q++; - borrow= 0; - carry= 0; - bx= b->p.x; - sx= S->p.x; - do - { - ys= *sx++ + carry; - carry= ys >> 32; - y= *bx - (ys & FFFFFFFF) - borrow; - borrow= y >> 32 & (ULong)1; - *bx++= (ULong) (y & FFFFFFFF); - } - while (sx <= sxe); - bx= b->p.x; - bxe= bx + n; - if (!*bxe) - { - while (--bxe > bx && !*bxe) - --n; - b->wds= n; - } - } - return q; -} - - -/* - dtoa for IEEE arithmetic (dmg): convert double to ASCII string. - - Inspired by "How to Print Floating-Point Numbers Accurately" by - Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126]. - - Modifications: - 1. Rather than iterating, we use a simple numeric overestimate - to determine k= floor(log10(d)). We scale relevant - quantities using O(log2(k)) rather than O(k) multiplications. - 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't - try to generate digits strictly left to right. Instead, we - compute with fewer bits and propagate the carry if necessary - when rounding the final digit up. This is often faster. - 3. Under the assumption that input will be rounded nearest, - mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22. - That is, we allow equality in stopping tests when the - round-nearest rule will give the same floating-point value - as would satisfaction of the stopping test with strict - inequality. - 4. We remove common factors of powers of 2 from relevant - quantities. - 5. When converting floating-point integers less than 1e16, - we use floating-point arithmetic rather than resorting - to multiple-precision integers. - 6. When asked to produce fewer than 15 digits, we first try - to get by with floating-point arithmetic; we resort to - multiple-precision integer arithmetic only if we cannot - guarantee that the floating-point calculation has given - the correctly rounded result. For k requested digits and - "uniformly" distributed input, the probability is - something like 10^(k-15) that we must resort to the Long - calculation. - */ - -static char *dtoa(double dd, int mode, int ndigits, int *decpt, int *sign, - char **rve, char *buf, size_t buf_size) -{ - /* - Arguments ndigits, decpt, sign are similar to those - of ecvt and fcvt; trailing zeros are suppressed from - the returned string. If not null, *rve is set to point - to the end of the return value. If d is +-Infinity or NaN, - then *decpt is set to DTOA_OVERFLOW. - - mode: - 0 ==> shortest string that yields d when read in - and rounded to nearest. - 1 ==> like 0, but with Steele & White stopping rule; - e.g. with IEEE P754 arithmetic , mode 0 gives - 1e23 whereas mode 1 gives 9.999999999999999e22. - 2 ==> max(1,ndigits) significant digits. This gives a - return value similar to that of ecvt, except - that trailing zeros are suppressed. - 3 ==> through ndigits past the decimal point. This - gives a return value similar to that from fcvt, - except that trailing zeros are suppressed, and - ndigits can be negative. - 4,5 ==> similar to 2 and 3, respectively, but (in - round-nearest mode) with the tests of mode 0 to - possibly return a shorter string that rounds to d. - With IEEE arithmetic and compilation with - -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same - as modes 2 and 3 when FLT_ROUNDS != 1. - 6-9 ==> Debugging modes similar to mode - 4: don't try - fast floating-point estimate (if applicable). - - Values of mode other than 0-9 are treated as mode 0. - - Sufficient space is allocated to the return value - to hold the suppressed trailing zeros. - */ - - int bbits, b2, b5, be, dig, i, ieps, UNINIT_VAR(ilim), ilim0, - UNINIT_VAR(ilim1), j, j1, k, k0, k_check, leftright, m2, m5, s2, s5, - spec_case, try_quick; - Long L; - int denorm; - ULong x; - Bigint *b, *b1, *delta, *mlo, *mhi, *S; - U d2, eps, u; - double ds; - char *s, *s0; -#ifdef Honor_FLT_ROUNDS - int rounding; -#endif - Stack_alloc alloc; - - alloc.begin= alloc.free= buf; - alloc.end= buf + buf_size; - memset(alloc.freelist, 0, sizeof(alloc.freelist)); - - u.d= dd; - if (word0(&u) & Sign_bit) - { - /* set sign for everything, including 0's and NaNs */ - *sign= 1; - word0(&u) &= ~Sign_bit; /* clear sign bit */ - } - else - *sign= 0; - - /* If infinity, set decpt to DTOA_OVERFLOW, if 0 set it to 1 */ - if (((word0(&u) & Exp_mask) == Exp_mask && (*decpt= DTOA_OVERFLOW)) || - (!dval(&u) && (*decpt= 1))) - { - /* Infinity, NaN, 0 */ - char *res= (char*) dtoa_alloc(2, &alloc); - res[0]= '0'; - res[1]= '\0'; - if (rve) - *rve= res + 1; - return res; - } - -#ifdef Honor_FLT_ROUNDS - if ((rounding= Flt_Rounds) >= 2) - { - if (*sign) - rounding= rounding == 2 ? 0 : 2; - else - if (rounding != 2) - rounding= 0; - } -#endif - - b= d2b(&u, &be, &bbits, &alloc); - if ((i= (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) - { - dval(&d2)= dval(&u); - word0(&d2) &= Frac_mask1; - word0(&d2) |= Exp_11; - - /* - log(x) ~=~ log(1.5) + (x-1.5)/1.5 - log10(x) = log(x) / log(10) - ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10)) - log10(d)= (i-Bias)*log(2)/log(10) + log10(d2) - - This suggests computing an approximation k to log10(d) by - - k= (i - Bias)*0.301029995663981 - + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 ); - - We want k to be too large rather than too small. - The error in the first-order Taylor series approximation - is in our favor, so we just round up the constant enough - to compensate for any error in the multiplication of - (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077, - and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14, - adding 1e-13 to the constant term more than suffices. - Hence we adjust the constant term to 0.1760912590558. - (We could get a more accurate k by invoking log10, - but this is probably not worthwhile.) - */ - - i-= Bias; - denorm= 0; - } - else - { - /* d is denormalized */ - - i= bbits + be + (Bias + (P-1) - 1); - x= i > 32 ? word0(&u) << (64 - i) | word1(&u) >> (i - 32) - : word1(&u) << (32 - i); - dval(&d2)= x; - word0(&d2)-= 31*Exp_msk1; /* adjust exponent */ - i-= (Bias + (P-1) - 1) + 1; - denorm= 1; - } - ds= (dval(&d2)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981; - k= (int)ds; - if (ds < 0. && ds != k) - k--; /* want k= floor(ds) */ - k_check= 1; - if (k >= 0 && k <= Ten_pmax) - { - if (dval(&u) < tens[k]) - k--; - k_check= 0; - } - j= bbits - i - 1; - if (j >= 0) - { - b2= 0; - s2= j; - } - else - { - b2= -j; - s2= 0; - } - if (k >= 0) - { - b5= 0; - s5= k; - s2+= k; - } - else - { - b2-= k; - b5= -k; - s5= 0; - } - if (mode < 0 || mode > 9) - mode= 0; - -#ifdef Check_FLT_ROUNDS - try_quick= Rounding == 1; -#else - try_quick= 1; -#endif - - if (mode > 5) - { - mode-= 4; - try_quick= 0; - } - leftright= 1; - switch (mode) { - case 0: - case 1: - ilim= ilim1= -1; - i= 18; - ndigits= 0; - break; - case 2: - leftright= 0; - /* no break */ - case 4: - if (ndigits <= 0) - ndigits= 1; - ilim= ilim1= i= ndigits; - break; - case 3: - leftright= 0; - /* no break */ - case 5: - i= ndigits + k + 1; - ilim= i; - ilim1= i - 1; - if (i <= 0) - i= 1; - } - s= s0= dtoa_alloc(i, &alloc); - -#ifdef Honor_FLT_ROUNDS - if (mode > 1 && rounding != 1) - leftright= 0; -#endif - - if (ilim >= 0 && ilim <= Quick_max && try_quick) - { - /* Try to get by with floating-point arithmetic. */ - i= 0; - dval(&d2)= dval(&u); - k0= k; - ilim0= ilim; - ieps= 2; /* conservative */ - if (k > 0) - { - ds= tens[k&0xf]; - j= k >> 4; - if (j & Bletch) - { - /* prevent overflows */ - j&= Bletch - 1; - dval(&u)/= bigtens[n_bigtens-1]; - ieps++; - } - for (; j; j>>= 1, i++) - { - if (j & 1) - { - ieps++; - ds*= bigtens[i]; - } - } - dval(&u)/= ds; - } - else if ((j1= -k)) - { - dval(&u)*= tens[j1 & 0xf]; - for (j= j1 >> 4; j; j>>= 1, i++) - { - if (j & 1) - { - ieps++; - dval(&u)*= bigtens[i]; - } - } - } - if (k_check && dval(&u) < 1. && ilim > 0) - { - if (ilim1 <= 0) - goto fast_failed; - ilim= ilim1; - k--; - dval(&u)*= 10.; - ieps++; - } - dval(&eps)= ieps*dval(&u) + 7.; - word0(&eps)-= (P-1)*Exp_msk1; - if (ilim == 0) - { - S= mhi= 0; - dval(&u)-= 5.; - if (dval(&u) > dval(&eps)) - goto one_digit; - if (dval(&u) < -dval(&eps)) - goto no_digits; - goto fast_failed; - } - if (leftright) - { - /* Use Steele & White method of only generating digits needed. */ - dval(&eps)= 0.5/tens[ilim-1] - dval(&eps); - for (i= 0;;) - { - L= (Long) dval(&u); - dval(&u)-= L; - *s++= '0' + (int)L; - if (dval(&u) < dval(&eps)) - goto ret1; - if (1. - dval(&u) < dval(&eps)) - goto bump_up; - if (++i >= ilim) - break; - dval(&eps)*= 10.; - dval(&u)*= 10.; - } - } - else - { - /* Generate ilim digits, then fix them up. */ - dval(&eps)*= tens[ilim-1]; - for (i= 1;; i++, dval(&u)*= 10.) - { - L= (Long)(dval(&u)); - if (!(dval(&u)-= L)) - ilim= i; - *s++= '0' + (int)L; - if (i == ilim) - { - if (dval(&u) > 0.5 + dval(&eps)) - goto bump_up; - else if (dval(&u) < 0.5 - dval(&eps)) - { - while (*--s == '0'); - s++; - goto ret1; - } - break; - } - } - } - fast_failed: - s= s0; - dval(&u)= dval(&d2); - k= k0; - ilim= ilim0; - } - - /* Do we have a "small" integer? */ - - if (be >= 0 && k <= Int_max) - { - /* Yes. */ - ds= tens[k]; - if (ndigits < 0 && ilim <= 0) - { - S= mhi= 0; - if (ilim < 0 || dval(&u) <= 5*ds) - goto no_digits; - goto one_digit; - } - for (i= 1;; i++, dval(&u)*= 10.) - { - L= (Long)(dval(&u) / ds); - dval(&u)-= L*ds; -#ifdef Check_FLT_ROUNDS - /* If FLT_ROUNDS == 2, L will usually be high by 1 */ - if (dval(&u) < 0) - { - L--; - dval(&u)+= ds; - } -#endif - *s++= '0' + (int)L; - if (!dval(&u)) - { - break; - } - if (i == ilim) - { -#ifdef Honor_FLT_ROUNDS - if (mode > 1) - { - switch (rounding) { - case 0: goto ret1; - case 2: goto bump_up; - } - } -#endif - dval(&u)+= dval(&u); - if (dval(&u) > ds || (dval(&u) == ds && L & 1)) - { -bump_up: - while (*--s == '9') - if (s == s0) - { - k++; - *s= '0'; - break; - } - ++*s++; - } - break; - } - } - goto ret1; - } - - m2= b2; - m5= b5; - mhi= mlo= 0; - if (leftright) - { - i = denorm ? be + (Bias + (P-1) - 1 + 1) : 1 + P - bbits; - b2+= i; - s2+= i; - mhi= i2b(1, &alloc); - } - if (m2 > 0 && s2 > 0) - { - i= m2 < s2 ? m2 : s2; - b2-= i; - m2-= i; - s2-= i; - } - if (b5 > 0) - { - if (leftright) - { - if (m5 > 0) - { - mhi= pow5mult(mhi, m5, &alloc); - b1= mult(mhi, b, &alloc); - Bfree(b, &alloc); - b= b1; - } - if ((j= b5 - m5)) - b= pow5mult(b, j, &alloc); - } - else - b= pow5mult(b, b5, &alloc); - } - S= i2b(1, &alloc); - if (s5 > 0) - S= pow5mult(S, s5, &alloc); - - /* Check for special case that d is a normalized power of 2. */ - - spec_case= 0; - if ((mode < 2 || leftright) -#ifdef Honor_FLT_ROUNDS - && rounding == 1 -#endif - ) - { - if (!word1(&u) && !(word0(&u) & Bndry_mask) && - word0(&u) & (Exp_mask & ~Exp_msk1) - ) - { - /* The special case */ - b2+= Log2P; - s2+= Log2P; - spec_case= 1; - } - } - - /* - Arrange for convenient computation of quotients: - shift left if necessary so divisor has 4 leading 0 bits. - - Perhaps we should just compute leading 28 bits of S once - a nd for all and pass them and a shift to quorem, so it - can do shifts and ors to compute the numerator for q. - */ - if ((i= ((s5 ? 32 - hi0bits(S->p.x[S->wds-1]) : 1) + s2) & 0x1f)) - i= 32 - i; - if (i > 4) - { - i-= 4; - b2+= i; - m2+= i; - s2+= i; - } - else if (i < 4) - { - i+= 28; - b2+= i; - m2+= i; - s2+= i; - } - if (b2 > 0) - b= lshift(b, b2, &alloc); - if (s2 > 0) - S= lshift(S, s2, &alloc); - if (k_check) - { - if (cmp(b,S) < 0) - { - k--; - /* we botched the k estimate */ - b= multadd(b, 10, 0, &alloc); - if (leftright) - mhi= multadd(mhi, 10, 0, &alloc); - ilim= ilim1; - } - } - if (ilim <= 0 && (mode == 3 || mode == 5)) - { - if (ilim < 0 || cmp(b,S= multadd(S,5,0, &alloc)) <= 0) - { - /* no digits, fcvt style */ -no_digits: - k= -1 - ndigits; - goto ret; - } -one_digit: - *s++= '1'; - k++; - goto ret; - } - if (leftright) - { - if (m2 > 0) - mhi= lshift(mhi, m2, &alloc); - - /* - Compute mlo -- check for special case that d is a normalized power of 2. - */ - - mlo= mhi; - if (spec_case) - { - mhi= Balloc(mhi->k, &alloc); - Bcopy(mhi, mlo); - mhi= lshift(mhi, Log2P, &alloc); - } - - for (i= 1;;i++) - { - dig= quorem(b,S) + '0'; - /* Do we yet have the shortest decimal string that will round to d? */ - j= cmp(b, mlo); - delta= diff(S, mhi, &alloc); - j1= delta->sign ? 1 : cmp(b, delta); - Bfree(delta, &alloc); - if (j1 == 0 && mode != 1 && !(word1(&u) & 1) -#ifdef Honor_FLT_ROUNDS - && rounding >= 1 -#endif - ) - { - if (dig == '9') - goto round_9_up; - if (j > 0) - dig++; - *s++= dig; - goto ret; - } - if (j < 0 || (j == 0 && mode != 1 && !(word1(&u) & 1))) - { - if (!b->p.x[0] && b->wds <= 1) - { - goto accept_dig; - } -#ifdef Honor_FLT_ROUNDS - if (mode > 1) - switch (rounding) { - case 0: goto accept_dig; - case 2: goto keep_dig; - } -#endif /*Honor_FLT_ROUNDS*/ - if (j1 > 0) - { - b= lshift(b, 1, &alloc); - j1= cmp(b, S); - if ((j1 > 0 || (j1 == 0 && dig & 1)) - && dig++ == '9') - goto round_9_up; - } -accept_dig: - *s++= dig; - goto ret; - } - if (j1 > 0) - { -#ifdef Honor_FLT_ROUNDS - if (!rounding) - goto accept_dig; -#endif - if (dig == '9') - { /* possible if i == 1 */ -round_9_up: - *s++= '9'; - goto roundoff; - } - *s++= dig + 1; - goto ret; - } -#ifdef Honor_FLT_ROUNDS -keep_dig: -#endif - *s++= dig; - if (i == ilim) - break; - b= multadd(b, 10, 0, &alloc); - if (mlo == mhi) - mlo= mhi= multadd(mhi, 10, 0, &alloc); - else - { - mlo= multadd(mlo, 10, 0, &alloc); - mhi= multadd(mhi, 10, 0, &alloc); - } - } - } - else - for (i= 1;; i++) - { - *s++= dig= quorem(b,S) + '0'; - if (!b->p.x[0] && b->wds <= 1) - { - goto ret; - } - if (i >= ilim) - break; - b= multadd(b, 10, 0, &alloc); - } - - /* Round off last digit */ - -#ifdef Honor_FLT_ROUNDS - switch (rounding) { - case 0: goto trimzeros; - case 2: goto roundoff; - } -#endif - b= lshift(b, 1, &alloc); - j= cmp(b, S); - if (j > 0 || (j == 0 && dig & 1)) - { -roundoff: - while (*--s == '9') - if (s == s0) - { - k++; - *s++= '1'; - goto ret; - } - ++*s++; - } - else - { -#ifdef Honor_FLT_ROUNDS -trimzeros: -#endif - while (*--s == '0'); - s++; - } -ret: - Bfree(S, &alloc); - if (mhi) - { - if (mlo && mlo != mhi) - Bfree(mlo, &alloc); - Bfree(mhi, &alloc); - } -ret1: - Bfree(b, &alloc); - *s= 0; - *decpt= k + 1; - if (rve) - *rve= s; - return s0; -} diff --git a/deps/mysqllite/strings/int2str.c b/deps/mysqllite/strings/int2str.c deleted file mode 100644 index ecc214d58d50f0..00000000000000 --- a/deps/mysqllite/strings/int2str.c +++ /dev/null @@ -1,164 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include "m_string.h" - -/* - _dig_vec arrays are public because they are used in several outer places. -*/ -char _dig_vec_upper[] = - "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; -char _dig_vec_lower[] = - "0123456789abcdefghijklmnopqrstuvwxyz"; - - -/* - Convert integer to its string representation in given scale of notation. - - SYNOPSIS - int2str() - val - value to convert - dst - points to buffer where string representation should be stored - radix - radix of scale of notation - upcase - set to 1 if we should use upper-case digits - - DESCRIPTION - Converts the (long) integer value to its character form and moves it to - the destination buffer followed by a terminating NUL. - If radix is -2..-36, val is taken to be SIGNED, if radix is 2..36, val is - taken to be UNSIGNED. That is, val is signed if and only if radix is. - All other radixes treated as bad and nothing will be changed in this case. - - For conversion to decimal representation (radix is -10 or 10) one can use - optimized int10_to_str() function. - - RETURN VALUE - Pointer to ending NUL character or NullS if radix is bad. -*/ - -char * -int2str(register long int val, register char *dst, register int radix, - int upcase) -{ - char buffer[65]; - register char *p; - long int new_val; - char *dig_vec= upcase ? _dig_vec_upper : _dig_vec_lower; - ulong uval= (ulong) val; - - if (radix < 0) - { - if (radix < -36 || radix > -2) - return NullS; - if (val < 0) - { - *dst++ = '-'; - /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */ - uval = (ulong)0 - uval; - } - radix = -radix; - } - else if (radix > 36 || radix < 2) - return NullS; - - /* - The slightly contorted code which follows is due to the fact that - few machines directly support unsigned long / and %. Certainly - the VAX C compiler generates a subroutine call. In the interests - of efficiency (hollow laugh) I let this happen for the first digit - only; after that "val" will be in range so that signed integer - division will do. Sorry 'bout that. CHECK THE CODE PRODUCED BY - YOUR C COMPILER. The first % and / should be unsigned, the second - % and / signed, but C compilers tend to be extraordinarily - sensitive to minor details of style. This works on a VAX, that's - all I claim for it. - */ - p = &buffer[sizeof(buffer)-1]; - *p = '\0'; - new_val= uval / (ulong) radix; - *--p = dig_vec[(uchar) (uval- (ulong) new_val*(ulong) radix)]; - val = new_val; -#ifdef HAVE_LDIV - while (val != 0) - { - ldiv_t res; - res=ldiv(val,radix); - *--p = dig_vec[res.rem]; - val= res.quot; - } -#else - while (val != 0) - { - new_val=val/radix; - *--p = dig_vec[(uchar) (val-new_val*radix)]; - val= new_val; - } -#endif - while ((*dst++ = *p++) != 0) ; - return dst-1; -} - - -/* - Converts integer to its string representation in decimal notation. - - SYNOPSIS - int10_to_str() - val - value to convert - dst - points to buffer where string representation should be stored - radix - flag that shows whenever val should be taken as signed or not - - DESCRIPTION - This is version of int2str() function which is optimized for normal case - of radix 10/-10. It takes only sign of radix parameter into account and - not its absolute value. - - RETURN VALUE - Pointer to ending NUL character. -*/ - -char *int10_to_str(long int val,char *dst,int radix) -{ - char buffer[65]; - register char *p; - long int new_val; - unsigned long int uval = (unsigned long int) val; - - if (radix < 0) /* -10 */ - { - if (val < 0) - { - *dst++ = '-'; - /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */ - uval = (unsigned long int)0 - uval; - } - } - - p = &buffer[sizeof(buffer)-1]; - *p = '\0'; - new_val= (long) (uval / 10); - *--p = '0'+ (char) (uval - (unsigned long) new_val * 10); - val = new_val; - - while (val != 0) - { - new_val=val/10; - *--p = '0' + (char) (val-new_val*10); - val= new_val; - } - while ((*dst++ = *p++) != 0) ; - return dst-1; -} diff --git a/deps/mysqllite/strings/is_prefix.c b/deps/mysqllite/strings/is_prefix.c deleted file mode 100644 index 451cd468b7e5b5..00000000000000 --- a/deps/mysqllite/strings/is_prefix.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : is_prefix.c - Author : Michael Widenius - Defines: is_prefix() - - is_prefix(s, t) returns 1 if s starts with t. - A empty t is allways a prefix. -*/ - -#include -#include "m_string.h" - -int is_prefix(register const char *s, register const char *t) -{ - while (*t) - if (*s++ != *t++) return 0; - return 1; /* WRONG */ -} diff --git a/deps/mysqllite/strings/latin2.def b/deps/mysqllite/strings/latin2.def deleted file mode 100644 index 159d01894f394a..00000000000000 --- a/deps/mysqllite/strings/latin2.def +++ /dev/null @@ -1,478 +0,0 @@ -; Character code definition file for latin2 languages (for use with cset) -; it's written for Czech, but may be used generally; works -; minimum for Slovenian alphabet too (or at least I hope so) -; -; Written by Jaromir Dolecek -; -; Notes of defined sorting order: -; Upper/Lower case is ignored -; All characters with the accents are sorted after appropriate -; character without accent in order: -; Xacute, Xring , Xcaron, Xslash, Xcedilla, Xogonek, Xcircumflex, -; Xbreve, Xhungarumlaut, Xdieresis, Xdotaccent -; -latin2 -*** -NUL 0 C -SOH C -STX C -ETX C -EOT C -ENQ C -ACK C -BEL C -BS C -HT CS -LF CS -VT CS -FF CS -CR CS -SO C -SI C -DLE C -DC1 C -DC2 C -DC3 C -DC4 C -NAK C -SYN C -ETB C -CAN C -EM C -SUB C -ESC C -FS C -GS C -RS C -US C -/space BS -/exclam P -/quotedbl P -/numbersign P -/dollar P -/percent P -/ampersand P -/quoteright P -/parenleft P -/parenright P -/asterisk P -/plus P -/comma P -/minus P -/period P -/slash P -/zero NX -/one NX -/two NX -/three NX -/four NX -/five NX -/six NX -/seven NX -/eight NX -/nine NX -/colon P -/semicolon P -/less P -/equal P -/greater P -/question P -/at P -/A UX -/B UX -/C UX -/D UX -/E UX -/F UX -/G U -/H U -/I U -/J U -/K U -/L U -/M U -/N U -/O U -/P U -/Q U -/R U -/S U -/T U -/U U -/V U -/W U -/X U -/Y U -/Z U -/bracketleft P -/backslash P -/bracketright P -/asciicircum P -/underscore P -/quoteleft P -/a LX -/b LX -/c LX -/d LX -/e LX -/f LX -/g L -/h L -/i L -/j L -/k L -/l L -/m L -/n L -/o L -/p L -/q L -/r L -/s L -/t L -/u L -/v L -/w L -/x L -/y L -/z L -/braceleft P -/bar P -/braceright P -/tilde P -NUL_ C -SOH_ C -STX_ C -ETX_ C -EOT_ C -ENQ_ C -ACK_ C -BEL_ C -BS_ C -HT_ CS -LF_ CS -VT_ CS -FF_ CS -CR_ CS -SO_ C -SI_ C -DLE_ C -DC1_ C -DC2_ C -DC3_ C -DC4_ C -NAK_ C -SYN_ C -ETB_ C -CAN_ C -EM_ C -SUB_ C -ESC_ C -FS_ C -GS_ C -RS_ C -US_ C -/space_ SB -/Aogonek U -/breve P -/Lslash U -/currency P -/Lcaron U -/Sacute U -/dieresis P -/Scaron 169 U -/Scedilla U -/Tcaron U -/Zacute U -/hyphen P -/Zcaron U -/Zdotaccent U -/degree P -/aogonek L -/ogonek P -/lslash L -/acute P -/lcaron L -/sacute L -/caron P -/cedilla P -/scaron L -/scedilla L -/tcaron L -/zacute L -/hungarumlaut P -/zcaron L -/zdotaccent L -/Racute U -/Aacute U -/Acircumflex U -/Abreve U -/Adieresis U -/Lacute U -/Cacute U -/Ccedilla U -/Ccaron U -/Eacute U -/Eogonek U -/Edieresis U -/Ecaron U -/Iacute U -/Icircumflex U -/Dcaron U -/Eth P -/Nacute U -/Ncaron U -/Oacute U -/Ocircumflex U -/Ohungarumlaut U -/Odieresis U -/multiply P -/Rcaron U -/Uring U -/Uacute U -/Uhungarumlaut U -/Udieresis U -/Yacute U -/Tcedilla U -/germandbls P -/racute L -/aacute L -/acircumflex L -/abreve L -/adieresis L -/lacute L -/cacute L -/ccedilla L -/ccaron L -/eacute L -/eogonek L -/edieresis L -/ecaron L -/iacute L -/icircumflex L -/dcaron L -/dbar L -/nacute L -/ncaron L -/oacute L -/ocircumflex L -/ohungarumlaut L -/odieresis L -/divide P -/rcaron L -/uring L -/uacute L -/uhungarumlaut L -/udieresis L -/yacute L -/tcedilla L -/dotaccent P -*** -/A /a -/B /b -/C /c -/D /d -/E /e -/F /f -/G /g -/H /h -/I /i -/J /j -/K /k -/L /l -/M /m -/N /n -/O /o -/P /p -/Q /q -/R /r -/S /s -/T /t -/U /u -/V /v -/W /w -/X /x -/Y /y -/Z /z -/Aogonek /aogonek -/Lslash /lslash -/Lcaron /lcaron -/Sacute /sacute -/Scaron /scaron -/Scedilla /scedilla -/Tcaron /tcaron -/Zacute /zacute -/Zcaron /zcaron -/Zdotaccent /zdotaccent -/Racute /racute -/Aacute /aacute -/Acircumflex /acircumflex -/Abreve /abreve -/Adieresis /adieresis -/Lacute /lacute -/Cacute /cacute -/Ccedilla /ccedilla -/Ccaron /ccaron -/Eacute /eacute -/Eogonek /eogonek -/Edieresis /edieresis -/Ecaron /ecaron -/Iacute /iacute -/Icircumflex /icircumflex -/Dcaron /dcaron -/Nacute /nacute -/Ncaron /ncaron -/Oacute /oacute -/Ocircumflex /ocircumflex -/Ohungarumlaut /ohungarumlaut -/Odieresis /odieresis -/Rcaron /rcaron -/Uring /uring -/Uacute /uacute -/Uhungarumlaut /uhungarumlaut -/Udieresis /udieresis -/Yacute /yacute -/Tcedilla /tcedilla -*** -NUL NUL_ -SOH SOH_ -STX STX_ -ETX ETX_ -EOT EOT_ -ENQ ENQ_ -ACK ACK_ -BEL BEL_ -BS BS_ -HT HT_ -LF LF_ -VT VT_ -FF FF_ -CR CR_ -SO SO_ -SI SI_ -DLE DLE_ -DC1 DC1_ -DC2 DC2_ -DC3 DC3_ -DC4 DC4_ -NAK NAK_ -SYN SYN_ -ETB ETB_ -CAN CAN_ -EM EM_ -SUB SUB_ -ESC ESC_ -FS FS_ -GS GS_ -RS RS_ -US US_ -/space -/exclam -/quotedbl -/numbersign -/dollar -/percent -/ampersand -/quoteright -/parenleft -/parenright -/asterisk -/plus -/comma -/minus -/period -/slash -/zero -/one -/two -/three -/four -/five -/six -/seven -/eight -/nine -/colon -/semicolon -/less -/equal -/greater -/question -/at -/A /a -/Aogonek /aogonek -/Aacute /aacute -/Acircumflex /acircumflex -/Abreve /abreve -/Adieresis /adieresis -/B /b -/C /c -/Cacute /cacute -/Ccaron /ccaron -/Ccedilla /ccedilla -/D /d -/Dcaron /dcaron -/E /e -/Eacute /eacute -/Ecaron /ecaron -/Eogonek /eogonek -/Edieresis /edieresis -/F /f -/G /g -/H /h -/I /i -/Icircumflex -/icircumflex -/Iacute /iacute -/J /j -/K /k -/L /l -/Lslash /lslash -/Lcaron /lcaron -/Lacute /lacute -/M /m -/N /n -/Nacute /nacute -/Ncaron /ncaron -/O /o -/Oacute /oacute -/Ocircumflex /ocircumflex -/Ohungarumlaut /ohungarumlaut -/Odieresis /odieresis -/P /p -/Q /q -/R /r -/Racute /racute -/Rcaron /rcaron -/S /s -/Sacute /sacute -/Scaron /scaron -/Scedilla /scedilla -/T /t -/Tcaron /tcaron -/Tcedilla /tcedilla -/U /u -/Uacute /uacute -/Uring /uring -/Uhungarumlaut /uhungarumlaut -/Udieresis /udieresis -/V /v -/W /w -/X /x -/Y /y -/Yacute /yacute -/Z /z -/Zacute /zacute -/Zcaron /zcaron -/Zdotaccent /zdotaccent -/bracketleft -/backslash -/bracketright -/asciicircum -/underscore -/quoteleft -/braceleft -/bar -/braceright -/tilde -*** diff --git a/deps/mysqllite/strings/llstr.c b/deps/mysqllite/strings/llstr.c deleted file mode 100644 index 643cf36a31147b..00000000000000 --- a/deps/mysqllite/strings/llstr.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Defines: llstr(); - - llstr(value, buff); - - This function saves a longlong value in a buffer and returns the pointer to - the buffer. This is useful when trying to portable print longlong - variables with printf() as there is no usable printf() standard one can use. -*/ - - -#include -#include "m_string.h" - -char *llstr(longlong value,char *buff) -{ - longlong10_to_str(value,buff,-10); - return buff; -} - -char *ullstr(longlong value,char *buff) -{ - longlong10_to_str(value,buff,10); - return buff; -} diff --git a/deps/mysqllite/strings/longlong2str.c b/deps/mysqllite/strings/longlong2str.c deleted file mode 100644 index 641ae0955d3516..00000000000000 --- a/deps/mysqllite/strings/longlong2str.c +++ /dev/null @@ -1,143 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Defines: longlong2str(); - - longlong2str(dst, radix, val) - converts the (longlong) integer "val" to character form and moves it to - the destination string "dst" followed by a terminating NUL. The - result is normally a pointer to this NUL character, but if the radix - is dud the result will be NullS and nothing will be changed. - - If radix is -2..-36, val is taken to be SIGNED. - If radix is 2.. 36, val is taken to be UNSIGNED. - That is, val is signed if and only if radix is. You will normally - use radix -10 only through itoa and ltoa, for radix 2, 8, or 16 - unsigned is what you generally want. - - _dig_vec is public just in case someone has a use for it. - The definitions of itoa and ltoa are actually macros in m_string.h, - but this is where the code is. - - Note: The standard itoa() returns a pointer to the argument, when int2str - returns the pointer to the end-null. - itoa assumes that 10 -base numbers are allways signed and other arn't. -*/ - -#include -#include "m_string.h" - -#ifndef ll2str - -/* - This assumes that longlong multiplication is faster than longlong division. -*/ - -char *ll2str(longlong val,char *dst,int radix, int upcase) -{ - char buffer[65]; - register char *p; - long long_val; - char *dig_vec= upcase ? _dig_vec_upper : _dig_vec_lower; - ulonglong uval= (ulonglong) val; - - if (radix < 0) - { - if (radix < -36 || radix > -2) return (char*) 0; - if (val < 0) { - *dst++ = '-'; - /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */ - uval = (ulonglong)0 - uval; - } - radix = -radix; - } - else - { - if (radix > 36 || radix < 2) return (char*) 0; - } - if (uval == 0) - { - *dst++='0'; - *dst='\0'; - return dst; - } - p = &buffer[sizeof(buffer)-1]; - *p = '\0'; - - while (uval > (ulonglong) LONG_MAX) - { - ulonglong quo= uval/(uint) radix; - uint rem= (uint) (uval- quo* (uint) radix); - *--p= dig_vec[rem]; - uval= quo; - } - long_val= (long) uval; - while (long_val != 0) - { - long quo= long_val/radix; - *--p= dig_vec[(uchar) (long_val - quo*radix)]; - long_val= quo; - } - while ((*dst++ = *p++) != 0) ; - return dst-1; -} -#endif - -#ifndef longlong10_to_str -char *longlong10_to_str(longlong val,char *dst,int radix) -{ - char buffer[65]; - register char *p; - long long_val; - ulonglong uval= (ulonglong) val; - - if (radix < 0) - { - if (val < 0) - { - *dst++ = '-'; - /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */ - uval = (ulonglong)0 - uval; - } - } - - if (uval == 0) - { - *dst++='0'; - *dst='\0'; - return dst; - } - p = &buffer[sizeof(buffer)-1]; - *p = '\0'; - - while (uval > (ulonglong) LONG_MAX) - { - ulonglong quo= uval/(uint) 10; - uint rem= (uint) (uval- quo* (uint) 10); - *--p = _dig_vec_upper[rem]; - uval= quo; - } - long_val= (long) uval; - while (long_val != 0) - { - long quo= long_val/10; - *--p = _dig_vec_upper[(uchar) (long_val - quo*10)]; - long_val= quo; - } - while ((*dst++ = *p++) != 0) ; - return dst-1; -} -#endif diff --git a/deps/mysqllite/strings/my_strchr.c b/deps/mysqllite/strings/my_strchr.c deleted file mode 100644 index 08fa51ba17a286..00000000000000 --- a/deps/mysqllite/strings/my_strchr.c +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (C) 2005 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include "m_string.h" -#include "m_ctype.h" - -#define NEQ(A, B) ((A) != (B)) -#define EQU(A, B) ((A) == (B)) - -/** - Macro for the body of the string scanning. - - @param CS The character set of the string - @param STR Pointer to beginning of string - @param END Pointer to one-after-end of string - @param ACC Pointer to beginning of accept (or reject) string - @param LEN Length of accept (or reject) string - @param CMP is a function-like for doing the comparison of two characters. - */ - -#define SCAN_STRING(CS, STR, END, ACC, LEN, CMP) \ - do { \ - uint mbl; \ - const char *ptr_str, *ptr_acc; \ - const char *acc_end= (ACC) + (LEN); \ - for (ptr_str= (STR) ; ptr_str < (END) ; ptr_str+= mbl) \ - { \ - mbl= my_mbcharlen((CS), *(uchar*)ptr_str); \ - if (mbl < 2) \ - { \ - DBUG_ASSERT(mbl == 1); \ - for (ptr_acc= (ACC) ; ptr_acc < acc_end ; ++ptr_acc) \ - if (CMP(*ptr_acc, *ptr_str)) \ - goto end; \ - } \ - } \ -end: \ - return (size_t) (ptr_str - (STR)); \ - } while (0) - - -/* - my_strchr(cs, str, end, c) returns a pointer to the first place in - str where c (1-byte character) occurs, or NULL if c does not occur - in str. This function is multi-byte safe. - TODO: should be moved to CHARSET_INFO if it's going to be called - frequently. -*/ - -char *my_strchr(CHARSET_INFO *cs, const char *str, const char *end, - pchar c) -{ - uint mbl; - while (str < end) - { - mbl= my_mbcharlen(cs, *(uchar *)str); - if (mbl < 2) - { - if (*str == c) - return((char *)str); - str++; - } - else - str+= mbl; - } - return(0); -} - -/** - Calculate the length of the initial segment of 'str' which consists - entirely of characters not in 'reject'. - - @note The reject string points to single-byte characters so it is - only possible to find the first occurrence of a single-byte - character. Multi-byte characters in 'str' are treated as not - matching any character in the reject string. - - @todo should be moved to CHARSET_INFO if it's going to be called - frequently. - - @internal The implementation builds on the assumption that 'str' is long, - while 'reject' is short. So it compares each character in string - with the characters in 'reject' in a tight loop over the characters - in 'reject'. -*/ - -size_t my_strcspn(CHARSET_INFO *cs, const char *str, const char *str_end, - const char *reject) -{ - SCAN_STRING(cs, str, str_end, reject, strlen(reject), EQU); -} diff --git a/deps/mysqllite/strings/my_strtoll10.c b/deps/mysqllite/strings/my_strtoll10.c deleted file mode 100644 index b9fc4b4be8ef67..00000000000000 --- a/deps/mysqllite/strings/my_strtoll10.c +++ /dev/null @@ -1,236 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include /* Needed for MY_ERRNO_ERANGE */ -#include - -#define MAX_NEGATIVE_NUMBER ((ulonglong) LL(0x8000000000000000)) -#define INIT_CNT 9 -#define LFACTOR ULL(1000000000) -#define LFACTOR1 ULL(10000000000) -#define LFACTOR2 ULL(100000000000) - -static unsigned long lfactor[9]= -{ - 1L, 10L, 100L, 1000L, 10000L, 100000L, 1000000L, 10000000L, 100000000L -}; - -/* - Convert a string to an to unsigned long long integer value - - SYNOPSYS - my_strtoll10() - nptr in pointer to the string to be converted - endptr in/out pointer to the end of the string/ - pointer to the stop character - error out returned error code - - DESCRIPTION - This function takes the decimal representation of integer number - from string nptr and converts it to an signed or unsigned - long long integer value. - Space characters and tab are ignored. - A sign character might precede the digit characters. The number - may have any number of pre-zero digits. - - The function stops reading the string nptr at the first character - that is not a decimal digit. If endptr is not NULL then the function - will not read characters after *endptr. - - RETURN VALUES - Value of string as a signed/unsigned longlong integer - - if no error and endptr != NULL, it will be set to point at the character - after the number - - The error parameter contains information how things went: - -1 Number was an ok negative number - 0 ok - ERANGE If the the value of the converted number exceeded the - maximum negative/unsigned long long integer. - In this case the return value is ~0 if value was - positive and LONGLONG_MIN if value was negative. - EDOM If the string didn't contain any digits. In this case - the return value is 0. - - If endptr is not NULL the function will store the end pointer to - the stop character here. -*/ - - -longlong my_strtoll10(const char *nptr, char **endptr, int *error) -{ - const char *s, *end, *start, *n_end, *true_end; - char *dummy; - uchar c; - unsigned long i, j, k; - ulonglong li; - int negative; - ulong cutoff, cutoff2, cutoff3; - - s= nptr; - /* If fixed length string */ - if (endptr) - { - end= *endptr; - while (s != end && (*s == ' ' || *s == '\t')) - s++; - if (s == end) - goto no_conv; - } - else - { - endptr= &dummy; /* Easier end test */ - while (*s == ' ' || *s == '\t') - s++; - if (!*s) - goto no_conv; - /* This number must be big to guard against a lot of pre-zeros */ - end= s+65535; /* Can't be longer than this */ - } - - /* Check for a sign. */ - negative= 0; - if (*s == '-') - { - *error= -1; /* Mark as negative number */ - negative= 1; - if (++s == end) - goto no_conv; - cutoff= MAX_NEGATIVE_NUMBER / LFACTOR2; - cutoff2= (MAX_NEGATIVE_NUMBER % LFACTOR2) / 100; - cutoff3= MAX_NEGATIVE_NUMBER % 100; - } - else - { - *error= 0; - if (*s == '+') - { - if (++s == end) - goto no_conv; - } - cutoff= ULONGLONG_MAX / LFACTOR2; - cutoff2= ULONGLONG_MAX % LFACTOR2 / 100; - cutoff3= ULONGLONG_MAX % 100; - } - - /* Handle case where we have a lot of pre-zero */ - if (*s == '0') - { - i= 0; - do - { - if (++s == end) - goto end_i; /* Return 0 */ - } - while (*s == '0'); - n_end= s+ INIT_CNT; - } - else - { - /* Read first digit to check that it's a valid number */ - if ((c= (*s-'0')) > 9) - goto no_conv; - i= c; - n_end= ++s+ INIT_CNT-1; - } - - /* Handle first 9 digits and store them in i */ - if (n_end > end) - n_end= end; - for (; s != n_end ; s++) - { - if ((c= (*s-'0')) > 9) - goto end_i; - i= i*10+c; - } - if (s == end) - goto end_i; - - /* Handle next 9 digits and store them in j */ - j= 0; - start= s; /* Used to know how much to shift i */ - n_end= true_end= s + INIT_CNT; - if (n_end > end) - n_end= end; - do - { - if ((c= (*s-'0')) > 9) - goto end_i_and_j; - j= j*10+c; - } while (++s != n_end); - if (s == end) - { - if (s != true_end) - goto end_i_and_j; - goto end3; - } - if ((c= (*s-'0')) > 9) - goto end3; - - /* Handle the next 1 or 2 digits and store them in k */ - k=c; - if (++s == end || (c= (*s-'0')) > 9) - goto end4; - k= k*10+c; - *endptr= (char*) ++s; - - /* number string should have ended here */ - if (s != end && (c= (*s-'0')) <= 9) - goto overflow; - - /* Check that we didn't get an overflow with the last digit */ - if (i > cutoff || (i == cutoff && ((j > cutoff2 || j == cutoff2) && - k > cutoff3))) - goto overflow; - li=i*LFACTOR2+ (ulonglong) j*100 + k; - return (longlong) li; - -overflow: /* *endptr is set here */ - *error= MY_ERRNO_ERANGE; - return negative ? LONGLONG_MIN : (longlong) ULONGLONG_MAX; - -end_i: - *endptr= (char*) s; - return (negative ? ((longlong) -(long) i) : (longlong) i); - -end_i_and_j: - li= (ulonglong) i * lfactor[(uint) (s-start)] + j; - *endptr= (char*) s; - return (negative ? -((longlong) li) : (longlong) li); - -end3: - li=(ulonglong) i*LFACTOR+ (ulonglong) j; - *endptr= (char*) s; - return (negative ? -((longlong) li) : (longlong) li); - -end4: - li=(ulonglong) i*LFACTOR1+ (ulonglong) j * 10 + k; - *endptr= (char*) s; - if (negative) - { - if (li > MAX_NEGATIVE_NUMBER) - goto overflow; - return -((longlong) li); - } - return (longlong) li; - -no_conv: - /* There was no number to convert. */ - *error= MY_ERRNO_EDOM; - *endptr= (char *) nptr; - return 0; -} diff --git a/deps/mysqllite/strings/my_vsnprintf.c b/deps/mysqllite/strings/my_vsnprintf.c deleted file mode 100644 index e9786dacfdcd26..00000000000000 --- a/deps/mysqllite/strings/my_vsnprintf.c +++ /dev/null @@ -1,681 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include -#include -#include - - -#define MAX_ARGS 32 /* max positional args count*/ -#define MAX_PRINT_INFO 32 /* max print position count */ - -#define LENGTH_ARG 1 -#define WIDTH_ARG 2 -#define PREZERO_ARG 4 -#define ESCAPED_ARG 8 - -typedef struct pos_arg_info ARGS_INFO; -typedef struct print_info PRINT_INFO; - -struct pos_arg_info -{ - char arg_type; /* argument type */ - uint have_longlong; /* used from integer values */ - char *str_arg; /* string value of the arg */ - longlong longlong_arg; /* integer value of the arg */ - double double_arg; /* double value of the arg */ -}; - - -struct print_info -{ - char arg_type; /* argument type */ - size_t arg_idx; /* index of the positional arg */ - size_t length; /* print width or arg index */ - size_t width; /* print width or arg index */ - uint flags; - const char *begin; /**/ - const char *end; /**/ -}; - - -/** - Calculates print length or index of positional argument - - @param fmt processed string - @param length print length or index of positional argument - @param pre_zero returns flags with PREZERO_ARG set if necessary - - @retval - string position right after length digits -*/ - -static const char *get_length(const char *fmt, size_t *length, uint *pre_zero) -{ - for (; my_isdigit(&my_charset_latin1, *fmt); fmt++) - { - *length= *length * 10 + (uint)(*fmt - '0'); - if (!*length) - *pre_zero|= PREZERO_ARG; /* first digit was 0 */ - } - return fmt; -} - - -/** - Calculates print width or index of positional argument - - @param fmt processed string - @param width print width or index of positional argument - - @retval - string position right after width digits -*/ - -static const char *get_width(const char *fmt, size_t *width) -{ - for (; my_isdigit(&my_charset_latin1, *fmt); fmt++) - { - *width= *width * 10 + (uint)(*fmt - '0'); - } - return fmt; -} - -/** - Calculates print width or index of positional argument - - @param fmt processed string - @param have_longlong TRUE if longlong is required - - @retval - string position right after modifier symbol -*/ - -static const char *check_longlong(const char *fmt, uint *have_longlong) -{ - *have_longlong= 0; - if (*fmt == 'l') - { - fmt++; - if (*fmt != 'l') - *have_longlong= (sizeof(long) == sizeof(longlong)); - else - { - fmt++; - *have_longlong= 1; - } - } - else if (*fmt == 'z') - { - fmt++; - *have_longlong= (sizeof(size_t) == sizeof(longlong)); - } - return fmt; -} - - -/** - Returns escaped string - - @param cs string charset - @param to buffer where escaped string will be placed - @param end end of buffer - @param par string to escape - @param par_len string length - @param quote_char character for quoting - - @retval - position in buffer which points on the end of escaped string -*/ - -static char *backtick_string(CHARSET_INFO *cs, char *to, char *end, - char *par, size_t par_len, char quote_char) -{ - uint char_len; - char *start= to; - char *par_end= par + par_len; - size_t buff_length= (size_t) (end - to); - - if (buff_length <= par_len) - goto err; - *start++= quote_char; - - for ( ; par < par_end; par+= char_len) - { - uchar c= *(uchar *) par; - if (!(char_len= my_mbcharlen(cs, c))) - char_len= 1; - if (char_len == 1 && c == (uchar) quote_char ) - { - if (start + 1 >= end) - goto err; - *start++= quote_char; - } - if (start + char_len >= end) - goto err; - start= strnmov(start, par, char_len); - } - - if (start + 1 >= end) - goto err; - *start++= quote_char; - return start; - -err: - *to='\0'; - return to; -} - - -/** - Prints string argument -*/ - -static char *process_str_arg(CHARSET_INFO *cs, char *to, char *end, - size_t width, char *par, uint print_type) -{ - int well_formed_error; - size_t plen, left_len= (size_t) (end - to) + 1; - if (!par) - par = (char*) "(null)"; - - plen= strnlen(par, width); - if (left_len <= plen) - plen = left_len - 1; - plen= cs->cset->well_formed_len(cs, par, par + plen, - width, &well_formed_error); - if (print_type & ESCAPED_ARG) - to= backtick_string(cs, to, end, par, plen, '`'); - else - to= strnmov(to,par,plen); - return to; -} - - -/** - Prints binary argument -*/ - -static char *process_bin_arg(char *to, char *end, size_t width, char *par) -{ - DBUG_ASSERT(to <= end); - if (to + width + 1 > end) - width= end - to - 1; /* sign doesn't matter */ - memmove(to, par, width); - to+= width; - return to; -} - - -/** - Prints double or float argument -*/ - -static char *process_dbl_arg(char *to, char *end, size_t width, - double par, char arg_type) -{ - if (width == SIZE_T_MAX) - width= FLT_DIG; /* width not set, use default */ - else if (width >= NOT_FIXED_DEC) - width= NOT_FIXED_DEC - 1; /* max.precision for my_fcvt() */ - width= min(width, (size_t)(end-to) - 1); - - if (arg_type == 'f') - to+= my_fcvt(par, (int)width , to, NULL); - else - to+= my_gcvt(par, MY_GCVT_ARG_DOUBLE, (int) width , to, NULL); - return to; -} - - -/** - Prints integer argument -*/ - -static char *process_int_arg(char *to, char *end, size_t length, - longlong par, char arg_type, uint print_type) -{ - size_t res_length, to_length; - char *store_start= to, *store_end; - char buff[32]; - - if ((to_length= (size_t) (end-to)) < 16 || length) - store_start= buff; - - if (arg_type == 'd' || arg_type == 'i') - store_end= longlong10_to_str(par, store_start, -10); - else if (arg_type == 'u') - store_end= longlong10_to_str(par, store_start, 10); - else if (arg_type == 'p') - { - store_start[0]= '0'; - store_start[1]= 'x'; - store_end= ll2str(par, store_start + 2, 16, 0); - } - else if (arg_type == 'o') - { - store_end= ll2str(par, store_start, 8, 0); - } - else - { - DBUG_ASSERT(arg_type == 'X' || arg_type =='x'); - store_end= ll2str(par, store_start, 16, (arg_type == 'X')); - } - - if ((res_length= (size_t) (store_end - store_start)) > to_length) - return to; /* num doesn't fit in output */ - /* If %#d syntax was used, we have to pre-zero/pre-space the string */ - if (store_start == buff) - { - length= min(length, to_length); - if (res_length < length) - { - size_t diff= (length- res_length); - bfill(to, diff, (print_type & PREZERO_ARG) ? '0' : ' '); - if (arg_type == 'p' && print_type & PREZERO_ARG) - { - if (diff > 1) - to[1]= 'x'; - else - store_start[0]= 'x'; - store_start[1]= '0'; - } - to+= diff; - } - bmove(to, store_start, res_length); - } - to+= res_length; - return to; -} - - -/** - Procesed positional arguments. - - @param cs string charset - @param to buffer where processed string will be place - @param end end of buffer - @param par format string - @param arg_index arg index of the first occurrence of positional arg - @param ap list of parameters - - @retval - end of buffer where processed string is placed -*/ - -static char *process_args(CHARSET_INFO *cs, char *to, char *end, - const char* fmt, size_t arg_index, va_list ap) -{ - ARGS_INFO args_arr[MAX_ARGS]; - PRINT_INFO print_arr[MAX_PRINT_INFO]; - uint idx= 0, arg_count= arg_index; - -start: - /* Here we are at the beginning of positional argument, right after $ */ - arg_index--; - print_arr[idx].flags= 0; - if (*fmt == '`') - { - print_arr[idx].flags|= ESCAPED_ARG; - fmt++; - } - if (*fmt == '-') - fmt++; - print_arr[idx].length= print_arr[idx].width= 0; - /* Get print length */ - if (*fmt == '*') - { - fmt++; - fmt= get_length(fmt, &print_arr[idx].length, &print_arr[idx].flags); - print_arr[idx].length--; - DBUG_ASSERT(*fmt == '$' && print_arr[idx].length < MAX_ARGS); - args_arr[print_arr[idx].length].arg_type= 'd'; - print_arr[idx].flags|= LENGTH_ARG; - arg_count= max(arg_count, print_arr[idx].length + 1); - fmt++; - } - else - fmt= get_length(fmt, &print_arr[idx].length, &print_arr[idx].flags); - - if (*fmt == '.') - { - fmt++; - /* Get print width */ - if (*fmt == '*') - { - fmt++; - fmt= get_width(fmt, &print_arr[idx].width); - print_arr[idx].width--; - DBUG_ASSERT(*fmt == '$' && print_arr[idx].width < MAX_ARGS); - args_arr[print_arr[idx].width].arg_type= 'd'; - print_arr[idx].flags|= WIDTH_ARG; - arg_count= max(arg_count, print_arr[idx].width + 1); - fmt++; - } - else - fmt= get_width(fmt, &print_arr[idx].width); - } - else - print_arr[idx].width= SIZE_T_MAX; - - fmt= check_longlong(fmt, &args_arr[arg_index].have_longlong); - if (*fmt == 'p') - args_arr[arg_index].have_longlong= (sizeof(void *) == sizeof(longlong)); - args_arr[arg_index].arg_type= print_arr[idx].arg_type= *fmt; - - print_arr[idx].arg_idx= arg_index; - print_arr[idx].begin= ++fmt; - - while (*fmt && *fmt != '%') - fmt++; - - if (!*fmt) /* End of format string */ - { - uint i; - print_arr[idx].end= fmt; - /* Obtain parameters from the list */ - for (i= 0 ; i < arg_count; i++) - { - switch (args_arr[i].arg_type) { - case 's': - case 'b': - args_arr[i].str_arg= va_arg(ap, char *); - break; - case 'f': - case 'g': - args_arr[i].double_arg= va_arg(ap, double); - break; - case 'd': - case 'i': - case 'u': - case 'x': - case 'X': - case 'o': - case 'p': - if (args_arr[i].have_longlong) - args_arr[i].longlong_arg= va_arg(ap,longlong); - else if (args_arr[i].arg_type == 'd' || args_arr[i].arg_type == 'i') - args_arr[i].longlong_arg= va_arg(ap, int); - else - args_arr[i].longlong_arg= va_arg(ap, uint); - break; - case 'c': - args_arr[i].longlong_arg= va_arg(ap, int); - break; - default: - DBUG_ASSERT(0); - } - } - /* Print result string */ - for (i= 0; i <= idx; i++) - { - size_t width= 0, length= 0; - switch (print_arr[i].arg_type) { - case 's': - { - char *par= args_arr[print_arr[i].arg_idx].str_arg; - width= (print_arr[i].flags & WIDTH_ARG) - ? (size_t)args_arr[print_arr[i].width].longlong_arg - : print_arr[i].width; - to= process_str_arg(cs, to, end, width, par, print_arr[i].flags); - break; - } - case 'b': - { - char *par = args_arr[print_arr[i].arg_idx].str_arg; - width= (print_arr[i].flags & WIDTH_ARG) - ? (size_t)args_arr[print_arr[i].width].longlong_arg - : print_arr[i].width; - to= process_bin_arg(to, end, width, par); - break; - } - case 'c': - { - if (to == end) - break; - *to++= (char) args_arr[print_arr[i].arg_idx].longlong_arg; - break; - } - case 'f': - case 'g': - { - double d= args_arr[print_arr[i].arg_idx].double_arg; - width= (print_arr[i].flags & WIDTH_ARG) ? - (uint)args_arr[print_arr[i].width].longlong_arg : print_arr[i].width; - to= process_dbl_arg(to, end, width, d, print_arr[i].arg_type); - break; - } - case 'd': - case 'i': - case 'u': - case 'x': - case 'X': - case 'o': - case 'p': - { - /* Integer parameter */ - longlong larg; - length= (print_arr[i].flags & LENGTH_ARG) - ? (size_t)args_arr[print_arr[i].length].longlong_arg - : print_arr[i].length; - - if (args_arr[print_arr[i].arg_idx].have_longlong) - larg = args_arr[print_arr[i].arg_idx].longlong_arg; - else if (print_arr[i].arg_type == 'd' || print_arr[i].arg_type == 'i' ) - larg = (int) args_arr[print_arr[i].arg_idx].longlong_arg; - else - larg= (uint) args_arr[print_arr[i].arg_idx].longlong_arg; - - to= process_int_arg(to, end, length, larg, print_arr[i].arg_type, - print_arr[i].flags); - break; - } - default: - break; - } - - if (to == end) - break; - - length= min(end - to , print_arr[i].end - print_arr[i].begin); - if (to + length < end) - length++; - to= strnmov(to, print_arr[i].begin, length); - } - DBUG_ASSERT(to <= end); - *to='\0'; /* End of errmessage */ - return to; - } - else - { - /* Process next positional argument*/ - DBUG_ASSERT(*fmt == '%'); - print_arr[idx].end= fmt - 1; - idx++; - fmt++; - arg_index= 0; - fmt= get_width(fmt, &arg_index); - DBUG_ASSERT(*fmt == '$'); - fmt++; - arg_count= max(arg_count, arg_index); - goto start; - } - - return 0; -} - - - -/** - Produces output string according to a format string - - See the detailed documentation around my_snprintf_service_st - - @param cs string charset - @param to buffer where processed string will be place - @param n size of buffer - @param par format string - @param ap list of parameters - - @retval - length of result string -*/ - -size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n, - const char* fmt, va_list ap) -{ - char *start=to, *end=to+n-1; - size_t length, width; - uint print_type, have_longlong; - - for (; *fmt ; fmt++) - { - if (*fmt != '%') - { - if (to == end) /* End of buffer */ - break; - *to++= *fmt; /* Copy ordinary char */ - continue; - } - fmt++; /* skip '%' */ - - length= width= 0; - print_type= 0; - - /* Read max fill size (only used with %d and %u) */ - if (my_isdigit(&my_charset_latin1, *fmt)) - { - fmt= get_length(fmt, &length, &print_type); - if (*fmt == '$') - { - to= process_args(cs, to, end, (fmt+1), length, ap); - return (size_t) (to - start); - } - } - else - { - if (*fmt == '`') - { - print_type|= ESCAPED_ARG; - fmt++; - } - if (*fmt == '-') - fmt++; - if (*fmt == '*') - { - fmt++; - length= va_arg(ap, int); - } - else - fmt= get_length(fmt, &length, &print_type); - } - - if (*fmt == '.') - { - fmt++; - if (*fmt == '*') - { - fmt++; - width= va_arg(ap, int); - } - else - fmt= get_width(fmt, &width); - } - else - width= SIZE_T_MAX; - - fmt= check_longlong(fmt, &have_longlong); - - if (*fmt == 's') /* String parameter */ - { - reg2 char *par= va_arg(ap, char *); - to= process_str_arg(cs, to, end, width, par, print_type); - continue; - } - else if (*fmt == 'b') /* Buffer parameter */ - { - char *par = va_arg(ap, char *); - to= process_bin_arg(to, end, width, par); - continue; - } - else if (*fmt == 'f' || *fmt == 'g') - { - double d= va_arg(ap, double); - to= process_dbl_arg(to, end, width, d, *fmt); - continue; - } - else if (*fmt == 'd' || *fmt == 'i' || *fmt == 'u' || *fmt == 'x' || - *fmt == 'X' || *fmt == 'p' || *fmt == 'o') - { - /* Integer parameter */ - longlong larg; - if (*fmt == 'p') - have_longlong= (sizeof(void *) == sizeof(longlong)); - - if (have_longlong) - larg = va_arg(ap,longlong); - else if (*fmt == 'd' || *fmt == 'i') - larg = va_arg(ap, int); - else - larg= va_arg(ap, uint); - - to= process_int_arg(to, end, length, larg, *fmt, print_type); - continue; - } - else if (*fmt == 'c') /* Character parameter */ - { - register int larg; - if (to == end) - break; - larg = va_arg(ap, int); - *to++= (char) larg; - continue; - } - - /* We come here on '%%', unknown code or too long parameter */ - if (to == end) - break; - *to++='%'; /* % used as % or unknown code */ - } - DBUG_ASSERT(to <= end); - *to='\0'; /* End of errmessage */ - return (size_t) (to - start); -} - - -/* - Limited snprintf() implementations - - exported to plugins as a service, see the detailed documentation - around my_snprintf_service_st -*/ - -size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap) -{ - return my_vsnprintf_ex(&my_charset_latin1, to, n, fmt, ap); -} - - -size_t my_snprintf(char* to, size_t n, const char* fmt, ...) -{ - size_t result; - va_list args; - va_start(args,fmt); - result= my_vsnprintf(to, n, fmt, args); - va_end(args); - return result; -} - diff --git a/deps/mysqllite/strings/str2int.c b/deps/mysqllite/strings/str2int.c deleted file mode 100644 index c4a4c07eeff6bf..00000000000000 --- a/deps/mysqllite/strings/str2int.c +++ /dev/null @@ -1,201 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - str2int(src, radix, lower, upper, &val) - converts the string pointed to by src to an integer and stores it in - val. It skips leading spaces and tabs (but not newlines, formfeeds, - backspaces), then it accepts an optional sign and a sequence of digits - in the specified radix. The result should satisfy lower <= *val <= upper. - The result is a pointer to the first character after the number; - trailing spaces will NOT be skipped. - - If an error is detected, the result will be NullS, the value put - in val will be 0, and errno will be set to - EDOM if there are no digits - ERANGE if the result would overflow or otherwise fail to lie - within the specified bounds. - Check that the bounds are right for your machine. - This looks amazingly complicated for what you probably thought was an - easy task. Coping with integer overflow and the asymmetric range of - twos complement machines is anything but easy. - - So that users of atoi and atol can check whether an error occured, - I have taken a wholly unprecedented step: errno is CLEARED if this - call has no problems. -*/ - -#include -#include "m_string.h" -#include "m_ctype.h" -#include "my_sys.h" /* defines errno */ -#include - -#define char_val(X) (X >= '0' && X <= '9' ? X-'0' :\ - X >= 'A' && X <= 'Z' ? X-'A'+10 :\ - X >= 'a' && X <= 'z' ? X-'a'+10 :\ - '\177') - -char *str2int(register const char *src, register int radix, long int lower, - long int upper, long int *val) -{ - int sign; /* is number negative (+1) or positive (-1) */ - int n; /* number of digits yet to be converted */ - long limit; /* "largest" possible valid input */ - long scale; /* the amount to multiply next digit by */ - long sofar; /* the running value */ - register int d; /* (negative of) next digit */ - char *start; - int digits[32]; /* Room for numbers */ - - /* Make sure *val is sensible in case of error */ - - *val = 0; - - /* Check that the radix is in the range 2..36 */ - -#ifndef DBUG_OFF - if (radix < 2 || radix > 36) { - errno=EDOM; - return NullS; - } -#endif - - /* The basic problem is: how do we handle the conversion of - a number without resorting to machine-specific code to - check for overflow? Obviously, we have to ensure that - no calculation can overflow. We are guaranteed that the - "lower" and "upper" arguments are valid machine integers. - On sign-and-magnitude, twos-complement, and ones-complement - machines all, if +|n| is representable, so is -|n|, but on - twos complement machines the converse is not true. So the - "maximum" representable number has a negative representative. - Limit is set to min(-|lower|,-|upper|); this is the "largest" - number we are concerned with. */ - - /* Calculate Limit using Scale as a scratch variable */ - - if ((limit = lower) > 0) limit = -limit; - if ((scale = upper) > 0) scale = -scale; - if (scale < limit) limit = scale; - - /* Skip leading spaces and check for a sign. - Note: because on a 2s complement machine MinLong is a valid - integer but |MinLong| is not, we have to keep the current - converted value (and the scale!) as *negative* numbers, - so the sign is the opposite of what you might expect. - */ - while (my_isspace(&my_charset_latin1,*src)) src++; - sign = -1; - if (*src == '+') src++; else - if (*src == '-') src++, sign = 1; - - /* Skip leading zeros so that we never compute a power of radix - in scale that we won't have a need for. Otherwise sticking - enough 0s in front of a number could cause the multiplication - to overflow when it neededn't. - */ - start=(char*) src; - while (*src == '0') src++; - - /* Move over the remaining digits. We have to convert from left - to left in order to avoid overflow. Answer is after last digit. - */ - - for (n = 0; (digits[n]=char_val(*src)) < radix && n < 20; n++,src++) ; - - /* Check that there is at least one digit */ - - if (start == src) { - errno=EDOM; - return NullS; - } - - /* The invariant we want to maintain is that src is just - to the right of n digits, we've converted k digits to - sofar, scale = -radix**k, and scale < sofar < 0. Now - if the final number is to be within the original - Limit, we must have (to the left)*scale+sofar >= Limit, - or (to the left)*scale >= Limit-sofar, i.e. the digits - to the left of src must form an integer <= (Limit-sofar)/(scale). - In particular, this is true of the next digit. In our - incremental calculation of Limit, - - IT IS VITAL that (-|N|)/(-|D|) = |N|/|D| - */ - - for (sofar = 0, scale = -1; --n >= 1;) - { - if ((long) -(d=digits[n]) < limit) { - errno=ERANGE; - return NullS; - } - limit = (limit+d)/radix, sofar += d*scale; scale *= radix; - } - if (n == 0) - { - if ((long) -(d=digits[n]) < limit) /* get last digit */ - { - errno=ERANGE; - return NullS; - } - sofar+=d*scale; - } - - /* Now it might still happen that sofar = -32768 or its equivalent, - so we can't just multiply by the sign and check that the result - is in the range lower..upper. All of this caution is a right - pain in the neck. If only there were a standard routine which - says generate thus and such a signal on integer overflow... - But not enough machines can do it *SIGH*. - */ - if (sign < 0) - { - if (sofar < -LONG_MAX || (sofar= -sofar) > upper) - { - errno=ERANGE; - return NullS; - } - } - else if (sofar < lower) - { - errno=ERANGE; - return NullS; - } - *val = sofar; - errno=0; /* indicate that all went well */ - return (char*) src; -} - - /* Theese are so slow compared with ordinary, optimized atoi */ - -#ifdef WANT_OUR_ATOI - -int atoi(const char *src) -{ - long val; - str2int(src, 10, (long) INT_MIN, (long) INT_MAX, &val); - return (int) val; -} - - -long atol(const char *src) -{ - long val; - str2int(src, 10, LONG_MIN, LONG_MAX, &val); - return val; -} - -#endif /* WANT_OUR_ATOI */ diff --git a/deps/mysqllite/strings/str_alloc.c b/deps/mysqllite/strings/str_alloc.c deleted file mode 100644 index 615ad1ba1e279f..00000000000000 --- a/deps/mysqllite/strings/str_alloc.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include -#include - -static void *my_str_malloc_default(size_t size) -{ - void *ret= malloc(size); - if (!ret) - exit(1); - return ret; -} - -static void my_str_free_default(void *ptr) -{ - free(ptr); -} - -void *(*my_str_malloc)(size_t)= &my_str_malloc_default; -void (*my_str_free)(void *)= &my_str_free_default; diff --git a/deps/mysqllite/strings/strappend.c b/deps/mysqllite/strings/strappend.c deleted file mode 100644 index bb926f7466563d..00000000000000 --- a/deps/mysqllite/strings/strappend.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : strappend.c - Author : Monty - Updated: 1987.02.07 - Defines: strappend() - - strappend(dest, len, fill) appends fill-characters to a string so that - the result length == len. If the string is longer than len it's - trunked. The des+len character is allways set to NULL. -*/ - -#include -#include "m_string.h" - - -void strappend(register char *s, size_t len, pchar fill) -{ - register char *endpos; - - endpos = s+len; - while (*s++); - s--; - while (s -#include "m_string.h" - -char *strcend(register const char *s, register pchar c) -{ - for (;;) - { - if (*s == (char) c) return (char*) s; - if (!*s++) return (char*) s-1; - } -} - diff --git a/deps/mysqllite/strings/strcont.c b/deps/mysqllite/strings/strcont.c deleted file mode 100644 index 5a518a3550f76e..00000000000000 --- a/deps/mysqllite/strings/strcont.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : strcont.c - Author : Monty - Updated: 1988.07.27 - Defines: strcont() - - strcont(str, set) if str contanies any character in the string set. - The result is the position of the first found character in str, or NullS - if there isn't anything found. - -*/ - -#include -#include "m_string.h" - -char * strcont(reg1 const char *str,reg2 const char *set) -{ - reg3 char * start = (char *) set; - - while (*str) - { - while (*set) - { - if (*set++ == *str) - return ((char*) str); - } - set=start; str++; - } - return (NullS); -} /* strcont */ diff --git a/deps/mysqllite/strings/strend.c b/deps/mysqllite/strings/strend.c deleted file mode 100644 index d70a5d648d5110..00000000000000 --- a/deps/mysqllite/strings/strend.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2002 MySQL AB - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; version 2 - of the License. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -/* File : strend.c - Author : Richard A. O'Keefe. - Updated: 23 April 1984 - Defines: strend() - - strend(s) returns a character pointer to the NUL which ends s. That - is, strend(s)-s == strlen(s). This is useful for adding things at - the end of strings. It is redundant, because strchr(s,'\0') could - be used instead, but this is clearer and faster. -*/ - -#include -#include "m_string.h" - -char *strend(register const char *s) -{ - while (*s++); - return (char*) (s-1); -} - diff --git a/deps/mysqllite/strings/strfill.c b/deps/mysqllite/strings/strfill.c deleted file mode 100644 index 4b1fe67b2061f7..00000000000000 --- a/deps/mysqllite/strings/strfill.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : strfill.c - Author : Monty - Updated: 1987.04.16 - Defines: strfill() - - strfill(dest, len, fill) makes a string of fill-characters. The result - string is of length == len. The des+len character is allways set to NULL. - strfill() returns pointer to dest+len; -*/ - -#include -#include "m_string.h" - -char * strfill(char *s, size_t len, pchar fill) -{ - while (len--) *s++ = fill; - *(s) = '\0'; - return(s); -} /* strfill */ diff --git a/deps/mysqllite/strings/strmake.c b/deps/mysqllite/strings/strmake.c deleted file mode 100644 index 2d5fa5e36aa83f..00000000000000 --- a/deps/mysqllite/strings/strmake.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : strmake.c - Author : Michael Widenius - Updated: 20 Jul 1984 - Defines: strmake() - - strmake(dst,src,length) moves length characters, or until end, of src to - dst and appends a closing NUL to dst. - Note that if strlen(src) >= length then dst[length] will be set to \0 - strmake() returns pointer to closing null -*/ - -#include -#include "m_string.h" - -char *strmake(register char *dst, register const char *src, size_t length) -{ -#ifdef EXTRA_DEBUG - /* - 'length' is the maximum length of the string; the buffer needs - to be one character larger to accomodate the terminating '\0'. - This is easy to get wrong, so we make sure we write to the - entire length of the buffer to identify incorrect buffer-sizes. - We only initialise the "unused" part of the buffer here, a) for - efficiency, and b) because dst==src is allowed, so initialising - the entire buffer would overwrite the source-string. Also, we - write a character rather than '\0' as this makes spotting these - problems in the results easier. - */ - uint n= 0; - while (n < length && src[n++]); - memset(dst + n, (int) 'Z', length - n + 1); -#endif - - while (length--) - if (! (*dst++ = *src++)) - return dst-1; - *dst=0; - return dst; -} diff --git a/deps/mysqllite/strings/strmov.c b/deps/mysqllite/strings/strmov.c deleted file mode 100644 index 4d4915d27a0122..00000000000000 --- a/deps/mysqllite/strings/strmov.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - strmov(dst, src) moves all the characters of src (including the - closing NUL) to dst, and returns a pointer to the new closing NUL in - dst. The similar UNIX routine strcpy returns the old value of dst, - which I have never found useful. strmov(strmov(dst,a),b) moves a//b - into dst, which seems useful. -*/ - -#include -#include "m_string.h" - -#ifdef strmov -#undef strmov -#define strmov strmov_overlapp -#endif - -char *strmov(register char *dst, register const char *src) -{ - while ((*dst++ = *src++)) ; - return dst-1; -} - diff --git a/deps/mysqllite/strings/strnlen.c b/deps/mysqllite/strings/strnlen.c deleted file mode 100644 index 826cd5ae5dd612..00000000000000 --- a/deps/mysqllite/strings/strnlen.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : strnlen.c - Author : Michael Widenius - Updated: 20 April 1984 - Defines: strnlen. - strnlen(s, len) returns the length of s or len if s is longer than len. -*/ - -#include -#include "m_string.h" - -#ifndef HAVE_STRNLEN - -size_t strnlen(register const char *s, register size_t maxlen) -{ - const char *end= (const char *)memchr(s, '\0', maxlen); - return end ? (size_t) (end - s) : maxlen; -} - -#endif diff --git a/deps/mysqllite/strings/strnmov.c b/deps/mysqllite/strings/strnmov.c deleted file mode 100644 index 7e26877637bc32..00000000000000 --- a/deps/mysqllite/strings/strnmov.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - strnmov(dst,src,length) moves length characters, or until end, of src to - dst and appends a closing NUL to dst if src is shorter than length. - The result is a pointer to the first NUL in dst, or is dst+n if dst was - truncated. -*/ - -#include -#include "m_string.h" - -char *strnmov(register char *dst, register const char *src, size_t n) -{ - while (n-- != 0) { - if (!(*dst++ = *src++)) { - return (char*) dst-1; - } - } - return dst; -} diff --git a/deps/mysqllite/strings/strxmov.c b/deps/mysqllite/strings/strxmov.c deleted file mode 100644 index 9dd2c936620c37..00000000000000 --- a/deps/mysqllite/strings/strxmov.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2002 MySQL AB - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; version 2 - of the License. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -/* File : strxmov.c - Author : Richard A. O'Keefe. - Updated: 25 may 1984 - Defines: strxmov() - - strxmov(dst, src1, ..., srcn, NullS) - moves the concatenation of src1,...,srcn to dst, terminates it - with a NUL character, and returns a pointer to the terminating NUL. - It is just like strmov except that it concatenates multiple sources. - Beware: the last argument should be the null character pointer. - Take VERY great care not to omit it! Also be careful to use NullS - and NOT to use 0, as on some machines 0 is not the same size as a - character pointer, or not the same bit pattern as NullS. -*/ - -#include -#include "m_string.h" -#include - -char *strxmov(char *dst,const char *src, ...) -{ - va_list pvar; - - va_start(pvar,src); - while (src != NullS) { - while ((*dst++ = *src++)) ; - dst--; - src = va_arg(pvar, char *); - } - va_end(pvar); - *dst = 0; /* there might have been no sources! */ - return dst; -} diff --git a/deps/mysqllite/strings/strxnmov.c b/deps/mysqllite/strings/strxnmov.c deleted file mode 100644 index 16469be6e456f0..00000000000000 --- a/deps/mysqllite/strings/strxnmov.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 2002 MySQL AB - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; version 2 - of the License. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -/* File : strxnmov.c - Author : Richard A. O'Keefe. - Updated: 2 June 1984 - Defines: strxnmov() - - strxnmov(dst, len, src1, ..., srcn, NullS) - moves the first len characters of the concatenation of src1,...,srcn - to dst and add a closing NUL character. - It is just like strnmov except that it concatenates multiple sources. - Beware: the last argument should be the null character pointer. - Take VERY great care not to omit it! Also be careful to use NullS - and NOT to use 0, as on some machines 0 is not the same size as a - character pointer, or not the same bit pattern as NullS. - - NOTE - strxnmov is like strnmov in that it moves up to len - characters; dst will be padded on the right with one '\0' character. - if total-string-length >= length then dst[length] will be set to \0 -*/ - -#include -#include "m_string.h" -#include - -char *strxnmov(char *dst, size_t len, const char *src, ...) -{ - va_list pvar; - char *end_of_dst=dst+len; - - va_start(pvar,src); - while (src != NullS) - { - do - { - if (dst == end_of_dst) - goto end; - } - while ((*dst++ = *src++)); - dst--; - src = va_arg(pvar, char *); - } -end: - *dst=0; - va_end(pvar); - return dst; -} diff --git a/deps/mysqllite/strings/t_ctype.h b/deps/mysqllite/strings/t_ctype.h deleted file mode 100644 index af4f3ebbaa1b51..00000000000000 --- a/deps/mysqllite/strings/t_ctype.h +++ /dev/null @@ -1,258 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Copyright (C) 1998, 1999 by Pruet Boonma, all rights reserved. - Copyright (C) 1998 by Theppitak Karoonboonyanan, all rights reserved. - Permission to use, copy, modify, distribute and sell this software - and its documentation for any purpose is hereby granted without fee, - provided that the above copyright notice appear in all copies. - Smaphan Raruenrom and Pruet Boonma makes no representations about - the suitability of this software for any purpose. It is provided - "as is" without express or implied warranty. -*/ - -/* - LC_COLLATE category + Level information -*/ - -#ifndef _t_ctype_h -#define _t_ctype_h - -typedef unsigned char tchar; - -#define TOT_LEVELS 5 -#define LAST_LEVEL 4 /* TOT_LEVELS - 1 */ - -#define IGNORE 0 - - -/* level 1 symbols & order */ -enum l1_symbols { - L1_08 = TOT_LEVELS, - L1_18, - L1_28, - L1_38, - L1_48, - L1_58, - L1_68, - L1_78, - L1_88, - L1_98, - L1_A8, - L1_B8, - L1_C8, - L1_D8, - L1_E8, - L1_F8, - L1_G8, - L1_H8, - L1_I8, - L1_J8, - L1_K8, - L1_L8, - L1_M8, - L1_N8, - L1_O8, - L1_P8, - L1_Q8, - L1_R8, - L1_S8, - L1_T8, - L1_U8, - L1_V8, - L1_W8, - L1_X8, - L1_Y8, - L1_Z8, - L1_KO_KAI, - L1_KHO_KHAI, - L1_KHO_KHUAT, - L1_KHO_KHWAI, - L1_KHO_KHON, - L1_KHO_RAKHANG, - L1_NGO_NGU, - L1_CHO_CHAN, - L1_CHO_CHING, - L1_CHO_CHANG, - L1_SO_SO, - L1_CHO_CHOE, - L1_YO_YING, - L1_DO_CHADA, - L1_TO_PATAK, - L1_THO_THAN, - L1_THO_NANGMONTHO, - L1_THO_PHUTHAO, - L1_NO_NEN, - L1_DO_DEK, - L1_TO_TAO, - L1_THO_THUNG, - L1_THO_THAHAN, - L1_THO_THONG, - L1_NO_NU, - L1_BO_BAIMAI, - L1_PO_PLA, - L1_PHO_PHUNG, - L1_FO_FA, - L1_PHO_PHAN, - L1_FO_FAN, - L1_PHO_SAMPHAO, - L1_MO_MA, - L1_YO_YAK, - L1_RO_RUA, - L1_RU, - L1_LO_LING, - L1_LU, - L1_WO_WAEN, - L1_SO_SALA, - L1_SO_RUSI, - L1_SO_SUA, - L1_HO_HIP, - L1_LO_CHULA, - L1_O_ANG, - L1_HO_NOKHUK, - L1_NKHIT, - L1_SARA_A, - L1_MAI_HAN_AKAT, - L1_SARA_AA, - L1_SARA_AM, - L1_SARA_I, - L1_SARA_II, - L1_SARA_UE, - L1_SARA_UEE, - L1_SARA_U, - L1_SARA_UU, - L1_SARA_E, - L1_SARA_AE, - L1_SARA_O, - L1_SARA_AI_MAIMUAN, - L1_SARA_AI_MAIMALAI -}; - -/* level 2 symbols & order */ -enum l2_symbols { - L2_BLANK = TOT_LEVELS, - L2_THAII, - L2_YAMAK, - L2_PINTHU, - L2_GARAN, - L2_TYKHU, - L2_TONE1, - L2_TONE2, - L2_TONE3, - L2_TONE4 -}; - -/* level 3 symbols & order */ -enum l3_symbols { - L3_BLANK = TOT_LEVELS, - L3_SPACE, - L3_NB_SACE, - L3_LOW_LINE, - L3_HYPHEN, - L3_COMMA, - L3_SEMICOLON, - L3_COLON, - L3_EXCLAMATION, - L3_QUESTION, - L3_SOLIDUS, - L3_FULL_STOP, - L3_PAIYAN_NOI, - L3_MAI_YAMOK, - L3_GRAVE, - L3_CIRCUMFLEX, - L3_TILDE, - L3_APOSTROPHE, - L3_QUOTATION, - L3_L_PARANTHESIS, - L3_L_BRACKET, - L3_L_BRACE, - L3_R_BRACE, - L3_R_BRACKET, - L3_R_PARENTHESIS, - L3_AT, - L3_BAHT, - L3_DOLLAR, - L3_FONGMAN, - L3_ANGKHANKHU, - L3_KHOMUT, - L3_ASTERISK, - L3_BK_SOLIDUS, - L3_AMPERSAND, - L3_NUMBER, - L3_PERCENT, - L3_PLUS, - L3_LESS_THAN, - L3_EQUAL, - L3_GREATER_THAN, - L3_V_LINE -}; - -/* level 4 symbols & order */ -enum l4_symbols { - L4_BLANK = TOT_LEVELS, - L4_MIN, - L4_CAP, - L4_EXT -}; - -enum level_symbols { - L_UPRUPR = TOT_LEVELS, - L_UPPER, - L_MIDDLE, - L_LOWER -}; - -#define _is(c) (t_ctype[(c)][LAST_LEVEL]) -#define _level 8 -#define _consnt 16 -#define _ldvowel 32 -#define _fllwvowel 64 -#define _uprvowel 128 -#define _lwrvowel 256 -#define _tone 512 -#define _diacrt1 1024 -#define _diacrt2 2048 -#define _combine 4096 -#define _stone 8192 -#define _tdig 16384 -#define _rearvowel (_fllwvowel | _uprvowel | _lwrvowel) -#define _diacrt (_diacrt1 | _diacrt2) -#define levelof(c) ( _is(c) & _level ) -#define isthai(c) ( (c) >= 128 ) -#define istalpha(c) ( _is(c) & (_consnt|_ldvowel|_rearvowel|\ - _tone|_diacrt1|_diacrt2) ) -#define isconsnt(c) ( _is(c) & _consnt ) -#define isldvowel(c) ( _is(c) & _ldvowel ) -#define isfllwvowel(c) ( _is(c) & _fllwvowel ) -#define ismidvowel(c) ( _is(c) & (_ldvowel|_fllwvowel) ) -#define isuprvowel(c) ( _is(c) & _uprvowel ) -#define islwrvowel(c) ( _is(c) & _lwrvowel ) -#define isuprlwrvowel(c) ( _is(c) & (_lwrvowel | _uprvowel)) -#define isrearvowel(c) ( _is(c) & _rearvowel ) -#define isvowel(c) ( _is(c) & (_ldvowel|_rearvowel) ) -#define istone(c) ( _is(c) & _tone ) -#define isunldable(c) ( _is(c) & (_rearvowel|_tone|_diacrt1|_diacrt2) ) -#define iscombinable(c) ( _is(c) & _combine ) -#define istdigit(c) ( _is(c) & _tdig ) -#define isstone(c) ( _is(c) & _stone ) -#define isdiacrt1(c) ( _is(c) & _diacrt1) -#define isdiacrt2(c) ( _is(c) & _diacrt2) -#define isdiacrt(c) ( _is(c) & _diacrt) - -/* Function prototype called by sql/field.cc */ -void ThNormalize(uchar* ptr, uint field_length, const uchar* from, uint length); - -#endif diff --git a/deps/mysqllite/strings/xml.c b/deps/mysqllite/strings/xml.c deleted file mode 100644 index f3cfaad54fa5dd..00000000000000 --- a/deps/mysqllite/strings/xml.c +++ /dev/null @@ -1,496 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "my_global.h" -#include "m_string.h" -#include "my_xml.h" - - -#define MY_XML_UNKNOWN 'U' -#define MY_XML_EOF 'E' -#define MY_XML_STRING 'S' -#define MY_XML_IDENT 'I' -#define MY_XML_EQ '=' -#define MY_XML_LT '<' -#define MY_XML_GT '>' -#define MY_XML_SLASH '/' -#define MY_XML_COMMENT 'C' -#define MY_XML_TEXT 'T' -#define MY_XML_QUESTION '?' -#define MY_XML_EXCLAM '!' -#define MY_XML_CDATA 'D' - -typedef struct xml_attr_st -{ - const char *beg; - const char *end; -} MY_XML_ATTR; - - -/* - XML ctype: -*/ -#define MY_XML_ID0 0x01 /* Identifier initial character */ -#define MY_XML_ID1 0x02 /* Identifier medial character */ -#define MY_XML_SPC 0x08 /* Spacing character */ - - -/* - http://www.w3.org/TR/REC-xml/ - [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | - CombiningChar | Extender - [5] Name ::= (Letter | '_' | ':') (NameChar)* -*/ - -static char my_xml_ctype[256]= -{ -/*00*/ 0,0,0,0,0,0,0,0,0,8,8,0,0,8,0,0, -/*10*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -/*20*/ 8,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0, /* !"#$%&'()*+,-./ */ -/*30*/ 2,2,2,2,2,2,2,2,2,2,3,0,0,0,0,0, /* 0123456789:;<=>? */ -/*40*/ 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, /* @ABCDEFGHIJKLMNO */ -/*50*/ 3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,3, /* PQRSTUVWXYZ[\]^_ */ -/*60*/ 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, /* `abcdefghijklmno */ -/*70*/ 3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0, /* pqrstuvwxyz{|}~ */ -/*80*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -/*90*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -/*A0*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -/*B0*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -/*C0*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -/*D0*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -/*E0*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -/*F0*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 -}; - -#define my_xml_is_space(c) (my_xml_ctype[(uchar) (c)] & MY_XML_SPC) -#define my_xml_is_id0(c) (my_xml_ctype[(uchar) (c)] & MY_XML_ID0) -#define my_xml_is_id1(c) (my_xml_ctype[(uchar) (c)] & MY_XML_ID1) - - -static const char *lex2str(int lex) -{ - switch(lex) - { - case MY_XML_EOF: return "END-OF-INPUT"; - case MY_XML_STRING: return "STRING"; - case MY_XML_IDENT: return "IDENT"; - case MY_XML_CDATA: return "CDATA"; - case MY_XML_EQ: return "'='"; - case MY_XML_LT: return "'<'"; - case MY_XML_GT: return "'>'"; - case MY_XML_SLASH: return "'/'"; - case MY_XML_COMMENT: return "COMMENT"; - case MY_XML_TEXT: return "TEXT"; - case MY_XML_QUESTION: return "'?'"; - case MY_XML_EXCLAM: return "'!'"; - } - return "unknown token"; -} - -static void my_xml_norm_text(MY_XML_ATTR *a) -{ - for ( ; (a->beg < a->end) && my_xml_is_space(a->beg[0]) ; a->beg++ ); - for ( ; (a->beg < a->end) && my_xml_is_space(a->end[-1]) ; a->end-- ); -} - - -static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a) -{ - int lex; - - for (; ( p->cur < p->end) && my_xml_is_space(p->cur[0]) ; p->cur++); - - if (p->cur >= p->end) - { - a->beg=p->end; - a->end=p->end; - lex=MY_XML_EOF; - goto ret; - } - - a->beg=p->cur; - a->end=p->cur; - - if ((p->end - p->cur > 3) && !memcmp(p->cur,"", 3); p->cur++) - {} - if (!memcmp(p->cur, "-->", 3)) - p->cur+=3; - a->end=p->cur; - lex=MY_XML_COMMENT; - } - else if (!memcmp(p->cur, "cur+= 9; - for (; p->cur < p->end - 2 ; p->cur++) - { - if (p->cur[0] == ']' && p->cur[1] == ']' && p->cur[2] == '>') - { - p->cur+= 3; - a->end= p->cur; - break; - } - } - lex= MY_XML_CDATA; - } - else if (strchr("?=/<>!",p->cur[0])) - { - p->cur++; - a->end=p->cur; - lex=a->beg[0]; - } - else if ( (p->cur[0] == '"') || (p->cur[0] == '\'') ) - { - p->cur++; - for (; ( p->cur < p->end ) && (p->cur[0] != a->beg[0]); p->cur++) - {} - a->end=p->cur; - if (a->beg[0] == p->cur[0])p->cur++; - a->beg++; - if (!(p->flags & MY_XML_FLAG_SKIP_TEXT_NORMALIZATION)) - my_xml_norm_text(a); - lex=MY_XML_STRING; - } - else if (my_xml_is_id0(p->cur[0])) - { - p->cur++; - while (p->cur < p->end && my_xml_is_id1(p->cur[0])) - p->cur++; - a->end=p->cur; - my_xml_norm_text(a); - lex=MY_XML_IDENT; - } - else - lex= MY_XML_UNKNOWN; - -#if 0 - printf("LEX=%s[%d]\n",lex2str(lex),a->end-a->beg); -#endif - -ret: - return lex; -} - - -static int my_xml_value(MY_XML_PARSER *st, const char *str, size_t len) -{ - return (st->value) ? (st->value)(st,str,len) : MY_XML_OK; -} - - -static int my_xml_enter(MY_XML_PARSER *st, const char *str, size_t len) -{ - if ((size_t) (st->attrend-st->attr+len+1) > sizeof(st->attr)) - { - sprintf(st->errstr,"To deep XML"); - return MY_XML_ERROR; - } - if (st->attrend > st->attr) - { - st->attrend[0]= '/'; - st->attrend++; - } - memcpy(st->attrend,str,len); - st->attrend+=len; - st->attrend[0]='\0'; - if (st->flags & MY_XML_FLAG_RELATIVE_NAMES) - return st->enter ? st->enter(st, str, len) : MY_XML_OK; - else - return st->enter ? st->enter(st,st->attr,st->attrend-st->attr) : MY_XML_OK; -} - - -static void mstr(char *s,const char *src,size_t l1, size_t l2) -{ - l1 = l1attrend; (e>p->attr) && (e[0] != '/') ; e--); - glen = (size_t) ((e[0] == '/') ? (p->attrend-e-1) : p->attrend-e); - - if (str && (slen != glen)) - { - mstr(s,str,sizeof(s)-1,slen); - if (glen) - { - mstr(g,e+1,sizeof(g)-1,glen), - sprintf(p->errstr,"'' unexpected ('' wanted)",s,g); - } - else - sprintf(p->errstr,"'' unexpected (END-OF-INPUT wanted)", s); - return MY_XML_ERROR; - } - - if (p->flags & MY_XML_FLAG_RELATIVE_NAMES) - rc= p->leave_xml ? p->leave_xml(p, str, slen) : MY_XML_OK; - else - rc= (p->leave_xml ? p->leave_xml(p,p->attr,p->attrend-p->attr) : - MY_XML_OK); - - *e='\0'; - p->attrend=e; - - return rc; -} - - -int my_xml_parse(MY_XML_PARSER *p,const char *str, size_t len) -{ - p->attrend=p->attr; - p->beg=str; - p->cur=str; - p->end=str+len; - - while ( p->cur < p->end ) - { - MY_XML_ATTR a; - if (p->cur[0] == '<') - { - int lex; - int question=0; - int exclam=0; - - lex=my_xml_scan(p,&a); - - if (MY_XML_COMMENT == lex) - continue; - - if (lex == MY_XML_CDATA) - { - a.beg+= 9; - a.end-= 3; - my_xml_value(p, a.beg, (size_t) (a.end-a.beg)); - continue; - } - - lex=my_xml_scan(p,&a); - - if (MY_XML_SLASH == lex) - { - if (MY_XML_IDENT != (lex=my_xml_scan(p,&a))) - { - sprintf(p->errstr,"%s unexpected (ident wanted)",lex2str(lex)); - return MY_XML_ERROR; - } - if (MY_XML_OK != my_xml_leave(p,a.beg,(size_t) (a.end-a.beg))) - return MY_XML_ERROR; - lex=my_xml_scan(p,&a); - goto gt; - } - - if (MY_XML_EXCLAM == lex) - { - lex=my_xml_scan(p,&a); - exclam=1; - } - else if (MY_XML_QUESTION == lex) - { - lex=my_xml_scan(p,&a); - question=1; - } - - if (MY_XML_IDENT == lex) - { - p->current_node_type= MY_XML_NODE_TAG; - if (MY_XML_OK != my_xml_enter(p,a.beg,(size_t) (a.end-a.beg))) - return MY_XML_ERROR; - } - else - { - sprintf(p->errstr,"%s unexpected (ident or '/' wanted)", - lex2str(lex)); - return MY_XML_ERROR; - } - - while ((MY_XML_IDENT == (lex=my_xml_scan(p,&a))) || - ((MY_XML_STRING == lex && exclam))) - { - MY_XML_ATTR b; - if (MY_XML_EQ == (lex=my_xml_scan(p,&b))) - { - lex=my_xml_scan(p,&b); - if ( (lex == MY_XML_IDENT) || (lex == MY_XML_STRING) ) - { - p->current_node_type= MY_XML_NODE_ATTR; - if ((MY_XML_OK != my_xml_enter(p,a.beg,(size_t) (a.end-a.beg))) || - (MY_XML_OK != my_xml_value(p,b.beg,(size_t) (b.end-b.beg))) || - (MY_XML_OK != my_xml_leave(p,a.beg,(size_t) (a.end-a.beg)))) - return MY_XML_ERROR; - } - else - { - sprintf(p->errstr,"%s unexpected (ident or string wanted)", - lex2str(lex)); - return MY_XML_ERROR; - } - } - else if (MY_XML_IDENT == lex) - { - p->current_node_type= MY_XML_NODE_ATTR; - if ((MY_XML_OK != my_xml_enter(p,a.beg,(size_t) (a.end-a.beg))) || - (MY_XML_OK != my_xml_leave(p,a.beg,(size_t) (a.end-a.beg)))) - return MY_XML_ERROR; - } - else if ((MY_XML_STRING == lex) && exclam) - { - /* - We are in , e.g. - - - Just skip "SystemLiteral" and "PublicidLiteral" - */ - } - else - break; - } - - if (lex == MY_XML_SLASH) - { - if (MY_XML_OK != my_xml_leave(p,NULL,0)) - return MY_XML_ERROR; - lex=my_xml_scan(p,&a); - } - -gt: - if (question) - { - if (lex != MY_XML_QUESTION) - { - sprintf(p->errstr,"%s unexpected ('?' wanted)",lex2str(lex)); - return MY_XML_ERROR; - } - if (MY_XML_OK != my_xml_leave(p,NULL,0)) - return MY_XML_ERROR; - lex=my_xml_scan(p,&a); - } - - if (exclam) - { - if (MY_XML_OK != my_xml_leave(p,NULL,0)) - return MY_XML_ERROR; - } - - if (lex != MY_XML_GT) - { - sprintf(p->errstr,"%s unexpected ('>' wanted)",lex2str(lex)); - return MY_XML_ERROR; - } - } - else - { - a.beg=p->cur; - for ( ; (p->cur < p->end) && (p->cur[0] != '<') ; p->cur++); - a.end=p->cur; - - if (!(p->flags & MY_XML_FLAG_SKIP_TEXT_NORMALIZATION)) - my_xml_norm_text(&a); - if (a.beg != a.end) - { - my_xml_value(p,a.beg,(size_t) (a.end-a.beg)); - } - } - } - - if (p->attr[0]) - { - sprintf(p->errstr,"unexpected END-OF-INPUT"); - return MY_XML_ERROR; - } - return MY_XML_OK; -} - - -void my_xml_parser_create(MY_XML_PARSER *p) -{ - bzero((void*)p,sizeof(p[0])); -} - - -void my_xml_parser_free(MY_XML_PARSER *p __attribute__((unused))) -{ -} - - -void my_xml_set_value_handler(MY_XML_PARSER *p, - int (*action)(MY_XML_PARSER *p, const char *s, - size_t l)) -{ - p->value=action; -} - -void my_xml_set_enter_handler(MY_XML_PARSER *p, - int (*action)(MY_XML_PARSER *p, const char *s, - size_t l)) -{ - p->enter=action; -} - - -void my_xml_set_leave_handler(MY_XML_PARSER *p, - int (*action)(MY_XML_PARSER *p, const char *s, - size_t l)) -{ - p->leave_xml=action; -} - - -void my_xml_set_user_data(MY_XML_PARSER *p, void *user_data) -{ - p->user_data=user_data; -} - - -const char *my_xml_error_string(MY_XML_PARSER *p) -{ - return p->errstr; -} - - -size_t my_xml_error_pos(MY_XML_PARSER *p) -{ - const char *beg=p->beg; - const char *s; - for ( s=p->beg ; scur; s++) - { - if (s[0] == '\n') - beg=s; - } - return (size_t) (p->cur-beg); -} - -uint my_xml_error_lineno(MY_XML_PARSER *p) -{ - uint res=0; - const char *s; - for (s=p->beg ; scur; s++) - { - if (s[0] == '\n') - res++; - } - return res; -} diff --git a/deps/mysqllite/vio/vio.c b/deps/mysqllite/vio/vio.c deleted file mode 100644 index 48f103c33e8571..00000000000000 --- a/deps/mysqllite/vio/vio.c +++ /dev/null @@ -1,291 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Note that we can't have assertion on file descriptors; The reason for - this is that during mysql shutdown, another thread can close a file - we are working on. In this case we should just return read errors from - the file descriptior. -*/ - -#include "vio_priv.h" - -#if defined(__WIN__) || defined(HAVE_SMEM) - -/** - Stub poll_read method that defaults to indicate that there - is data to read. - - Used for named pipe and shared memory VIO types. - - @param vio Unused. - @param timeout Unused. - - @retval FALSE There is data to read. -*/ - -static my_bool no_poll_read(Vio *vio __attribute__((unused)), - uint timeout __attribute__((unused))) -{ - return FALSE; -} - -#endif - -static my_bool has_no_data(Vio *vio __attribute__((unused))) -{ - return FALSE; -} - -/* - * Helper to fill most of the Vio* with defaults. - */ - -static void vio_init(Vio* vio, enum enum_vio_type type, - my_socket sd, HANDLE hPipe, uint flags) -{ - DBUG_ENTER("vio_init"); - DBUG_PRINT("enter", ("type: %d sd: %d flags: %d", type, sd, flags)); - -#ifndef HAVE_VIO_READ_BUFF - flags&= ~VIO_BUFFERED_READ; -#endif - bzero((char*) vio, sizeof(*vio)); - vio->type = type; - vio->sd = sd; - vio->hPipe = hPipe; - vio->localhost= flags & VIO_LOCALHOST; - if ((flags & VIO_BUFFERED_READ) && - !(vio->read_buffer= (char*)my_malloc(VIO_READ_BUFFER_SIZE, MYF(MY_WME)))) - flags&= ~VIO_BUFFERED_READ; -#ifdef _WIN32 - if (type == VIO_TYPE_NAMEDPIPE) - { - vio->viodelete =vio_delete; - vio->vioerrno =vio_errno; - vio->read =vio_read_pipe; - vio->write =vio_write_pipe; - vio->fastsend =vio_fastsend; - vio->viokeepalive =vio_keepalive; - vio->should_retry =vio_should_retry; - vio->was_interrupted=vio_was_interrupted; - vio->vioclose =vio_close_pipe; - vio->peer_addr =vio_peer_addr; - vio->vioblocking =vio_blocking; - vio->is_blocking =vio_is_blocking; - - vio->poll_read =no_poll_read; - vio->is_connected =vio_is_connected_pipe; - vio->has_data =has_no_data; - - vio->timeout=vio_win32_timeout; - /* Set default timeout */ - vio->read_timeout_ms= INFINITE; - vio->write_timeout_ms= INFINITE; - vio->pipe_overlapped.hEvent= CreateEvent(NULL, TRUE, FALSE, NULL); - DBUG_VOID_RETURN; - } -#endif -#ifdef HAVE_SMEM - if (type == VIO_TYPE_SHARED_MEMORY) - { - vio->viodelete =vio_delete; - vio->vioerrno =vio_errno; - vio->read =vio_read_shared_memory; - vio->write =vio_write_shared_memory; - vio->fastsend =vio_fastsend; - vio->viokeepalive =vio_keepalive; - vio->should_retry =vio_should_retry; - vio->was_interrupted=vio_was_interrupted; - vio->vioclose =vio_close_shared_memory; - vio->peer_addr =vio_peer_addr; - vio->vioblocking =vio_blocking; - vio->is_blocking =vio_is_blocking; - - vio->poll_read =no_poll_read; - vio->is_connected =vio_is_connected_shared_memory; - vio->has_data =has_no_data; - - /* Currently, shared memory is on Windows only, hence the below is ok*/ - vio->timeout= vio_win32_timeout; - /* Set default timeout */ - vio->read_timeout_ms= INFINITE; - vio->write_timeout_ms= INFINITE; - DBUG_VOID_RETURN; - } -#endif -#ifdef HAVE_OPENSSL - if (type == VIO_TYPE_SSL) - { - vio->viodelete =vio_ssl_delete; - vio->vioerrno =vio_errno; - vio->read =vio_ssl_read; - vio->write =vio_ssl_write; - vio->fastsend =vio_fastsend; - vio->viokeepalive =vio_keepalive; - vio->should_retry =vio_should_retry; - vio->was_interrupted=vio_was_interrupted; - vio->vioclose =vio_ssl_close; - vio->peer_addr =vio_peer_addr; - vio->vioblocking =vio_ssl_blocking; - vio->is_blocking =vio_is_blocking; - vio->timeout =vio_timeout; - vio->poll_read =vio_poll_read; - vio->is_connected =vio_is_connected; - vio->has_data =vio_ssl_has_data; - DBUG_VOID_RETURN; - } -#endif /* HAVE_OPENSSL */ - vio->viodelete =vio_delete; - vio->vioerrno =vio_errno; - vio->read= (flags & VIO_BUFFERED_READ) ? vio_read_buff : vio_read; - vio->write =vio_write; - vio->fastsend =vio_fastsend; - vio->viokeepalive =vio_keepalive; - vio->should_retry =vio_should_retry; - vio->was_interrupted =vio_was_interrupted; - vio->vioclose =vio_close; - vio->peer_addr =vio_peer_addr; - vio->vioblocking =vio_blocking; - vio->is_blocking =vio_is_blocking; - vio->timeout =vio_timeout; - vio->poll_read =vio_poll_read; - vio->is_connected =vio_is_connected; - vio->has_data= (flags & VIO_BUFFERED_READ) ? - vio_buff_has_data : has_no_data; - DBUG_VOID_RETURN; -} - - -/* Reset initialized VIO to use with another transport type */ - -void vio_reset(Vio* vio, enum enum_vio_type type, - my_socket sd, HANDLE hPipe, uint flags) -{ - my_free(vio->read_buffer); - vio_init(vio, type, sd, hPipe, flags); -} - - -/* Open the socket or TCP/IP connection and read the fnctl() status */ - -Vio *vio_new(my_socket sd, enum enum_vio_type type, uint flags) -{ - Vio *vio; - DBUG_ENTER("vio_new"); - DBUG_PRINT("enter", ("sd: %d", sd)); - if ((vio = (Vio*) my_malloc(sizeof(*vio),MYF(MY_WME)))) - { - vio_init(vio, type, sd, 0, flags); - sprintf(vio->desc, - (vio->type == VIO_TYPE_SOCKET ? "socket (%d)" : "TCP/IP (%d)"), - vio->sd); -#if !defined(__WIN__) -#if !defined(NO_FCNTL_NONBLOCK) - /* - We call fcntl() to set the flags and then immediately read them back - to make sure that we and the system are in agreement on the state of - things. - - An example of why we need to do this is FreeBSD (and apparently some - other BSD-derived systems, like Mac OS X), where the system sometimes - reports that the socket is set for non-blocking when it really will - block. - */ - fcntl(sd, F_SETFL, 0); - vio->fcntl_mode= fcntl(sd, F_GETFL); -#elif defined(HAVE_SYS_IOCTL_H) /* hpux */ - /* Non blocking sockets doesn't work good on HPUX 11.0 */ - (void) ioctl(sd,FIOSNBIO,0); - vio->fcntl_mode &= ~O_NONBLOCK; -#endif -#else /* !defined(__WIN__) */ - { - /* set to blocking mode by default */ - ulong arg=0, r; - r = ioctlsocket(sd,FIONBIO,(void*) &arg); - vio->fcntl_mode &= ~O_NONBLOCK; - } -#endif - } - DBUG_RETURN(vio); -} - - -#ifdef __WIN__ - -Vio *vio_new_win32pipe(HANDLE hPipe) -{ - Vio *vio; - DBUG_ENTER("vio_new_handle"); - if ((vio = (Vio*) my_malloc(sizeof(Vio),MYF(MY_WME)))) - { - vio_init(vio, VIO_TYPE_NAMEDPIPE, 0, hPipe, VIO_LOCALHOST); - strmov(vio->desc, "named pipe"); - } - DBUG_RETURN(vio); -} - -#ifdef HAVE_SMEM -Vio *vio_new_win32shared_memory(HANDLE handle_file_map, HANDLE handle_map, - HANDLE event_server_wrote, HANDLE event_server_read, - HANDLE event_client_wrote, HANDLE event_client_read, - HANDLE event_conn_closed) -{ - Vio *vio; - DBUG_ENTER("vio_new_win32shared_memory"); - if ((vio = (Vio*) my_malloc(sizeof(Vio),MYF(MY_WME)))) - { - vio_init(vio, VIO_TYPE_SHARED_MEMORY, 0, 0, VIO_LOCALHOST); - vio->handle_file_map= handle_file_map; - vio->handle_map= handle_map; - vio->event_server_wrote= event_server_wrote; - vio->event_server_read= event_server_read; - vio->event_client_wrote= event_client_wrote; - vio->event_client_read= event_client_read; - vio->event_conn_closed= event_conn_closed; - vio->shared_memory_remain= 0; - vio->shared_memory_pos= handle_map; - strmov(vio->desc, "shared memory"); - } - DBUG_RETURN(vio); -} -#endif -#endif - - -void vio_delete(Vio* vio) -{ - if (!vio) - return; /* It must be safe to delete null pointers. */ - - if (vio->type != VIO_CLOSED) - vio->vioclose(vio); - my_free(vio->read_buffer); - my_free(vio); -} - - -/* - Cleanup memory allocated by vio or the - components below it when application finish - -*/ -void vio_end(void) -{ -#ifdef HAVE_YASSL - yaSSL_CleanUp(); -#endif -} diff --git a/deps/mysqllite/vio/vio_priv.h b/deps/mysqllite/vio/vio_priv.h deleted file mode 100644 index 1bfb857b039fea..00000000000000 --- a/deps/mysqllite/vio/vio_priv.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef VIO_PRIV_INCLUDED -#define VIO_PRIV_INCLUDED - -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Structures and functions private to the vio package */ - -#define DONT_MAP_VIO -#include -#include -#include -#include -#include - -#ifndef __WIN__ -#include -#include -#endif - -#ifdef _WIN32 -void vio_win32_timeout(Vio *vio, uint which, uint timeout); -#endif - -#ifdef __WIN__ -size_t vio_read_pipe(Vio *vio, uchar * buf, size_t size); -size_t vio_write_pipe(Vio *vio, const uchar * buf, size_t size); -my_bool vio_is_connected_pipe(Vio *vio); -int vio_close_pipe(Vio * vio); -#endif - -#ifdef HAVE_SMEM -size_t vio_read_shared_memory(Vio *vio, uchar * buf, size_t size); -size_t vio_write_shared_memory(Vio *vio, const uchar * buf, size_t size); -my_bool vio_is_connected_shared_memory(Vio *vio); -int vio_close_shared_memory(Vio * vio); -#endif - -void vio_timeout(Vio *vio,uint which, uint timeout); -my_bool vio_buff_has_data(Vio *vio); - -#ifdef HAVE_OPENSSL -#include "my_net.h" /* needed because of struct in_addr */ - -size_t vio_ssl_read(Vio *vio,uchar* buf, size_t size); -size_t vio_ssl_write(Vio *vio,const uchar* buf, size_t size); - -/* When the workday is over... */ -int vio_ssl_close(Vio *vio); -void vio_ssl_delete(Vio *vio); - -int vio_ssl_blocking(Vio *vio, my_bool set_blocking_mode, my_bool *old_mode); - -my_bool vio_ssl_has_data(Vio *vio); - -#endif /* HAVE_OPENSSL */ -#endif /* VIO_PRIV_INCLUDED */ diff --git a/deps/mysqllite/vio/viosocket.c b/deps/mysqllite/vio/viosocket.c deleted file mode 100644 index 163eb279d4522b..00000000000000 --- a/deps/mysqllite/vio/viosocket.c +++ /dev/null @@ -1,1100 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Note that we can't have assertion on file descriptors; The reason for - this is that during mysql shutdown, another thread can close a file - we are working on. In this case we should just return read errors from - the file descriptior. -*/ - -#include "vio_priv.h" - -int vio_errno(Vio *vio __attribute__((unused))) -{ - return socket_errno; /* On Win32 this mapped to WSAGetLastError() */ -} - - -size_t vio_read(Vio * vio, uchar* buf, size_t size) -{ - size_t r; - DBUG_ENTER("vio_read"); - DBUG_PRINT("enter", ("sd: %d buf: 0x%lx size: %u", vio->sd, (long) buf, - (uint) size)); - - /* Ensure nobody uses vio_read_buff and vio_read simultaneously */ - DBUG_ASSERT(vio->read_end == vio->read_pos); -#ifdef __WIN__ - r = recv(vio->sd, buf, size,0); -#else - errno=0; /* For linux */ - r = read(vio->sd, buf, size); -#endif /* __WIN__ */ -#ifndef DBUG_OFF - if (r == (size_t) -1) - { - DBUG_PRINT("vio_error", ("Got error %d during read",errno)); - } -#endif /* DBUG_OFF */ - DBUG_PRINT("exit", ("%ld", (long) r)); - DBUG_RETURN(r); -} - - -/* - Buffered read: if average read size is small it may - reduce number of syscalls. -*/ - -size_t vio_read_buff(Vio *vio, uchar* buf, size_t size) -{ - size_t rc; -#define VIO_UNBUFFERED_READ_MIN_SIZE 2048 - DBUG_ENTER("vio_read_buff"); - DBUG_PRINT("enter", ("sd: %d buf: 0x%lx size: %u", vio->sd, (long) buf, - (uint) size)); - - if (vio->read_pos < vio->read_end) - { - rc= min((size_t) (vio->read_end - vio->read_pos), size); - memcpy(buf, vio->read_pos, rc); - vio->read_pos+= rc; - /* - Do not try to read from the socket now even if rc < size: - vio_read can return -1 due to an error or non-blocking mode, and - the safest way to handle it is to move to a separate branch. - */ - } - else if (size < VIO_UNBUFFERED_READ_MIN_SIZE) - { - rc= vio_read(vio, (uchar*) vio->read_buffer, VIO_READ_BUFFER_SIZE); - if (rc != 0 && rc != (size_t) -1) - { - if (rc > size) - { - vio->read_pos= vio->read_buffer + size; - vio->read_end= vio->read_buffer + rc; - rc= size; - } - memcpy(buf, vio->read_buffer, rc); - } - } - else - rc= vio_read(vio, buf, size); - DBUG_RETURN(rc); -#undef VIO_UNBUFFERED_READ_MIN_SIZE -} - -my_bool vio_buff_has_data(Vio *vio) -{ - return (vio->read_pos != vio->read_end); -} - -size_t vio_write(Vio * vio, const uchar* buf, size_t size) -{ - size_t r; - DBUG_ENTER("vio_write"); - DBUG_PRINT("enter", ("sd: %d buf: 0x%lx size: %u", vio->sd, (long) buf, - (uint) size)); -#ifdef __WIN__ - r = send(vio->sd, buf, size,0); -#else - r = write(vio->sd, buf, size); -#endif /* __WIN__ */ -#ifndef DBUG_OFF - if (r == (size_t) -1) - { - DBUG_PRINT("vio_error", ("Got error on write: %d",socket_errno)); - } -#endif /* DBUG_OFF */ - DBUG_PRINT("exit", ("%u", (uint) r)); - DBUG_RETURN(r); -} - -int vio_blocking(Vio * vio __attribute__((unused)), my_bool set_blocking_mode, - my_bool *old_mode) -{ - int r=0; - DBUG_ENTER("vio_blocking"); - - *old_mode= test(!(vio->fcntl_mode & O_NONBLOCK)); - DBUG_PRINT("enter", ("set_blocking_mode: %d old_mode: %d", - (int) set_blocking_mode, (int) *old_mode)); - -#if !defined(__WIN__) -#if !defined(NO_FCNTL_NONBLOCK) - if (vio->sd >= 0) - { - int old_fcntl=vio->fcntl_mode; - if (set_blocking_mode) - vio->fcntl_mode &= ~O_NONBLOCK; /* clear bit */ - else - vio->fcntl_mode |= O_NONBLOCK; /* set bit */ - if (old_fcntl != vio->fcntl_mode) - { - r= fcntl(vio->sd, F_SETFL, vio->fcntl_mode); - if (r == -1) - { - DBUG_PRINT("info", ("fcntl failed, errno %d", errno)); - vio->fcntl_mode= old_fcntl; - } - } - } -#else - r= set_blocking_mode ? 0 : 1; -#endif /* !defined(NO_FCNTL_NONBLOCK) */ -#else /* !defined(__WIN__) */ - if (vio->type != VIO_TYPE_NAMEDPIPE && vio->type != VIO_TYPE_SHARED_MEMORY) - { - ulong arg; - int old_fcntl=vio->fcntl_mode; - if (set_blocking_mode) - { - arg = 0; - vio->fcntl_mode &= ~O_NONBLOCK; /* clear bit */ - } - else - { - arg = 1; - vio->fcntl_mode |= O_NONBLOCK; /* set bit */ - } - if (old_fcntl != vio->fcntl_mode) - r = ioctlsocket(vio->sd,FIONBIO,(void*) &arg); - } - else - r= test(!(vio->fcntl_mode & O_NONBLOCK)) != set_blocking_mode; -#endif /* !defined(__WIN__) */ - DBUG_PRINT("exit", ("%d", r)); - DBUG_RETURN(r); -} - -my_bool -vio_is_blocking(Vio * vio) -{ - my_bool r; - DBUG_ENTER("vio_is_blocking"); - r = !(vio->fcntl_mode & O_NONBLOCK); - DBUG_PRINT("exit", ("%d", (int) r)); - DBUG_RETURN(r); -} - - -int vio_fastsend(Vio * vio __attribute__((unused))) -{ - int r=0; - DBUG_ENTER("vio_fastsend"); - -#if defined(IPTOS_THROUGHPUT) - { - int tos = IPTOS_THROUGHPUT; - r= setsockopt(vio->sd, IPPROTO_IP, IP_TOS, (void *) &tos, sizeof(tos)); - } -#endif /* IPTOS_THROUGHPUT */ - if (!r) - { -#ifdef __WIN__ - BOOL nodelay= 1; -#else - int nodelay = 1; -#endif - - r= setsockopt(vio->sd, IPPROTO_TCP, TCP_NODELAY, - IF_WIN((const char*), (void*)) &nodelay, - sizeof(nodelay)); - - } - if (r) - { - DBUG_PRINT("warning", ("Couldn't set socket option for fast send")); - r= -1; - } - DBUG_PRINT("exit", ("%d", r)); - DBUG_RETURN(r); -} - -int vio_keepalive(Vio* vio, my_bool set_keep_alive) -{ - int r=0; - uint opt = 0; - DBUG_ENTER("vio_keepalive"); - DBUG_PRINT("enter", ("sd: %d set_keep_alive: %d", vio->sd, (int) - set_keep_alive)); - if (vio->type != VIO_TYPE_NAMEDPIPE) - { - if (set_keep_alive) - opt = 1; - r = setsockopt(vio->sd, SOL_SOCKET, SO_KEEPALIVE, (char *) &opt, - sizeof(opt)); - } - DBUG_RETURN(r); -} - - -my_bool -vio_should_retry(Vio * vio) -{ - int en = socket_errno; - /* - man 2 read write - EAGAIN or EWOULDBLOCK when a socket is a non-blocking mode means - that the read/write would block. - man 7 socket - EAGAIN or EWOULDBLOCK when a socket is in a blocking mode means - that the corresponding receiving or sending timeout was reached. - */ - return en == SOCKET_EINTR || - (!vio_is_blocking(vio) && - (en == SOCKET_EAGAIN || en == SOCKET_EWOULDBLOCK)); -} - - -my_bool -vio_was_interrupted(Vio *vio __attribute__((unused))) -{ - int en= socket_errno; - return (en == SOCKET_EAGAIN || en == SOCKET_EINTR || - en == SOCKET_EWOULDBLOCK || en == SOCKET_ETIMEDOUT); -} - - -int vio_close(Vio * vio) -{ - int r=0; - DBUG_ENTER("vio_close"); - - if (vio->type != VIO_CLOSED) - { - DBUG_ASSERT(vio->type == VIO_TYPE_TCPIP || - vio->type == VIO_TYPE_SOCKET || - vio->type == VIO_TYPE_SSL); - - DBUG_ASSERT(vio->sd >= 0); - if (shutdown(vio->sd, SHUT_RDWR)) - r= -1; - if (closesocket(vio->sd)) - r= -1; - } - if (r) - { - DBUG_PRINT("vio_error", ("close() failed, error: %d",socket_errno)); - /* FIXME: error handling (not critical for MySQL) */ - } - vio->type= VIO_CLOSED; - vio->sd= -1; - DBUG_RETURN(r); -} - - -const char *vio_description(Vio * vio) -{ - return vio->desc; -} - -enum enum_vio_type vio_type(Vio* vio) -{ - return vio->type; -} - -my_socket vio_fd(Vio* vio) -{ - return vio->sd; -} - -/** - Convert a sock-address (AF_INET or AF_INET6) into the "normalized" form, - which is the IPv4 form for IPv4-mapped or IPv4-compatible IPv6 addresses. - - @note Background: when IPv4 and IPv6 are used simultaneously, IPv4 - addresses may be written in a form of IPv4-mapped or IPv4-compatible IPv6 - addresses. That means, one address (a.b.c.d) can be written in three forms: - - IPv4: a.b.c.d; - - IPv4-compatible IPv6: ::a.b.c.d; - - IPv4-mapped IPv4: ::ffff:a.b.c.d; - - Having three forms of one address makes it a little difficult to compare - addresses with each other (the IPv4-compatible IPv6-address of foo.bar - will be different from the IPv4-mapped IPv6-address of foo.bar). - - @note This function can be made public when it's needed. - - @param src [in] source IP address (AF_INET or AF_INET6). - @param src_length [in] length of the src. - @param dst [out] a buffer to store normalized IP address - (sockaddr_storage). - @param dst_length [out] actual length of the normalized IP address. -*/ -static void vio_get_normalized_ip(const struct sockaddr *src, - int src_length, - struct sockaddr *dst, - int *dst_length) -{ - switch (src->sa_family) { - case AF_INET: - memcpy(dst, src, src_length); - *dst_length= src_length; - break; - -#ifdef HAVE_IPV6 - case AF_INET6: - { - const struct sockaddr_in6 *src_addr6= (const struct sockaddr_in6 *) src; - const struct in6_addr *src_ip6= &(src_addr6->sin6_addr); - const uint32 *src_ip6_int32= (uint32 *) src_ip6->s6_addr; - - if (IN6_IS_ADDR_V4MAPPED(src_ip6) || IN6_IS_ADDR_V4COMPAT(src_ip6)) - { - struct sockaddr_in *dst_ip4= (struct sockaddr_in *) dst; - - /* - This is an IPv4-mapped or IPv4-compatible IPv6 address. It should - be converted to the IPv4 form. - */ - - *dst_length= sizeof (struct sockaddr_in); - - memset(dst_ip4, 0, *dst_length); - dst_ip4->sin_family= AF_INET; - dst_ip4->sin_port= src_addr6->sin6_port; - - /* - In an IPv4 mapped or compatible address, the last 32 bits represent - the IPv4 address. The byte orders for IPv6 and IPv4 addresses are - the same, so a simple copy is possible. - */ - dst_ip4->sin_addr.s_addr= src_ip6_int32[3]; - } - else - { - /* This is a "native" IPv6 address. */ - - memcpy(dst, src, src_length); - *dst_length= src_length; - } - - break; - } -#endif /* HAVE_IPV6 */ - } -} - - -/** - Return the normalized IP address string for a sock-address. - - The idea is to return an IPv4-address for an IPv4-mapped and - IPv4-compatible IPv6 address. - - The function writes the normalized IP address to the given buffer. - The buffer should have enough space, otherwise error flag is returned. - The system constant INET6_ADDRSTRLEN can be used to reserve buffers of - the right size. - - @param addr [in] sockaddr object (AF_INET or AF_INET6). - @param addr_length [in] length of the addr. - @param ip_string [out] buffer to write normalized IP address. - @param ip_string_size [in] size of the ip_string. - - @return Error status. - @retval TRUE in case of error (the ip_string buffer is not enough). - @retval FALSE on success. -*/ - -my_bool vio_get_normalized_ip_string(const struct sockaddr *addr, - int addr_length, - char *ip_string, - size_t ip_string_size) -{ - struct sockaddr_storage norm_addr_storage; - struct sockaddr *norm_addr= (struct sockaddr *) &norm_addr_storage; - int norm_addr_length; - int err_code; - - vio_get_normalized_ip(addr, addr_length, norm_addr, &norm_addr_length); - - err_code= vio_getnameinfo(norm_addr, ip_string, ip_string_size, NULL, 0, - NI_NUMERICHOST); - - if (!err_code) - return FALSE; - - DBUG_PRINT("error", ("getnameinfo() failed with %d (%s).", - (int) err_code, - (const char *) gai_strerror(err_code))); - return TRUE; -} - - -/** - Return IP address and port of a VIO client socket. - - The function returns an IPv4 address if IPv6 support is disabled. - - The function returns an IPv4 address if the client socket is associated - with an IPv4-compatible or IPv4-mapped IPv6 address. Otherwise, the native - IPv6 address is returned. -*/ - -my_bool vio_peer_addr(Vio *vio, char *ip_buffer, uint16 *port, - size_t ip_buffer_size) -{ - DBUG_ENTER("vio_peer_addr"); - DBUG_PRINT("enter", ("Client socked fd: %d", (int) vio->sd)); - - if (vio->localhost) - { - /* - Initialize vio->remote and vio->addLen. Set vio->remote to IPv4 loopback - address. - */ - struct in_addr *ip4= &((struct sockaddr_in *) &(vio->remote))->sin_addr; - - vio->remote.ss_family= AF_INET; - vio->addrLen= sizeof (struct sockaddr_in); - - ip4->s_addr= htonl(INADDR_LOOPBACK); - - /* Initialize ip_buffer and port. */ - - strmov(ip_buffer, "127.0.0.1"); - *port= 0; - } - else - { - int err_code; - char port_buffer[NI_MAXSERV]; - - struct sockaddr_storage addr_storage; - struct sockaddr *addr= (struct sockaddr *) &addr_storage; - size_socket addr_length= sizeof (addr_storage); - - /* Get sockaddr by socked fd. */ - - err_code= getpeername(vio->sd, addr, &addr_length); - - if (err_code) - { - DBUG_PRINT("exit", ("getpeername() gave error: %d", socket_errno)); - DBUG_RETURN(TRUE); - } - - /* Normalize IP address. */ - - vio_get_normalized_ip(addr, addr_length, - (struct sockaddr *) &vio->remote, &vio->addrLen); - - /* Get IP address & port number. */ - - err_code= vio_getnameinfo((struct sockaddr *) &vio->remote, - ip_buffer, ip_buffer_size, - port_buffer, NI_MAXSERV, - NI_NUMERICHOST | NI_NUMERICSERV); - - if (err_code) - { - DBUG_PRINT("exit", ("getnameinfo() gave error: %s", - gai_strerror(err_code))); - DBUG_RETURN(TRUE); - } - - *port= (uint16) strtol(port_buffer, NULL, 10); - } - - DBUG_PRINT("exit", ("Client IP address: %s; port: %d", - (const char *) ip_buffer, - (int) *port)); - DBUG_RETURN(FALSE); -} - - -/** - Indicate whether there is data to read on a given socket. - - @note An exceptional condition event and/or errors are - interpreted as if there is data to read. - - @param sd A connected socket. - @param timeout Maximum time in seconds to poll. - - @retval FALSE There is data to read. - @retval TRUE There is no data to read. -*/ - -static my_bool socket_poll_read(my_socket sd, uint timeout) -{ -#ifdef __WIN__ - int res; - my_socket fd= sd; - fd_set readfds, errorfds; - struct timeval tm; - DBUG_ENTER("socket_poll_read"); - tm.tv_sec= timeout; - tm.tv_usec= 0; - FD_ZERO(&readfds); - FD_ZERO(&errorfds); - FD_SET(fd, &readfds); - FD_SET(fd, &errorfds); - /* The first argument is ignored on Windows, so a conversion to int is OK */ - if ((res= select((int) fd, &readfds, NULL, &errorfds, &tm) <= 0)) - { - DBUG_RETURN(res < 0 ? 0 : 1); - } - res= FD_ISSET(fd, &readfds) || FD_ISSET(fd, &errorfds); - DBUG_RETURN(!res); -#elif defined(HAVE_POLL) - struct pollfd fds; - int res; - DBUG_ENTER("socket_poll_read"); - fds.fd=sd; - fds.events=POLLIN; - fds.revents=0; - if ((res=poll(&fds,1,(int) timeout*1000)) <= 0) - { - DBUG_RETURN(res < 0 ? 0 : 1); /* Don't return 1 on errors */ - } - DBUG_RETURN(fds.revents & (POLLIN | POLLERR | POLLHUP) ? 0 : 1); -#else - return 0; -#endif -} - - -/** - Retrieve the amount of data that can be read from a socket. - - @param vio A VIO object. - @param bytes[out] The amount of bytes available. - - @retval FALSE Success. - @retval TRUE Failure. -*/ - -static my_bool socket_peek_read(Vio *vio, uint *bytes) -{ -#ifdef __WIN__ - int len; - if (ioctlsocket(vio->sd, FIONREAD, &len)) - return TRUE; - *bytes= len; - return FALSE; -#elif FIONREAD_IN_SYS_IOCTL - int len; - if (ioctl(vio->sd, FIONREAD, &len) < 0) - return TRUE; - *bytes= len; - return FALSE; -#else - char buf[1024]; - ssize_t res= recv(vio->sd, &buf, sizeof(buf), MSG_PEEK); - if (res < 0) - return TRUE; - *bytes= res; - return FALSE; -#endif -} - - -/** - Indicate whether there is data to read on a given socket. - - @remark Errors are interpreted as if there is data to read. - - @param sd A connected socket. - @param timeout Maximum time in seconds to wait. - - @retval FALSE There is data (or EOF) to read. Also FALSE if error. - @retval TRUE There is _NO_ data to read or timed out. -*/ - -my_bool vio_poll_read(Vio *vio, uint timeout) -{ - my_socket sd= vio->sd; - DBUG_ENTER("vio_poll_read"); -#ifdef HAVE_OPENSSL - if (vio->type == VIO_TYPE_SSL) - sd= SSL_get_fd((SSL*) vio->ssl_arg); -#endif - DBUG_RETURN(socket_poll_read(sd, timeout)); -} - - -/** - Determine if the endpoint of a connection is still available. - - @remark The socket is assumed to be disconnected if an EOF - condition is encountered. - - @param vio The VIO object. - - @retval TRUE EOF condition not found. - @retval FALSE EOF condition is signaled. -*/ - -my_bool vio_is_connected(Vio *vio) -{ - uint bytes= 0; - DBUG_ENTER("vio_is_connected"); - - /* In the presence of errors the socket is assumed to be connected. */ - - /* - The first step of detecting a EOF condition is veryfing - whether there is data to read. Data in this case would - be the EOF. - */ - if (vio_poll_read(vio, 0)) - DBUG_RETURN(TRUE); - - /* - The second step is read() or recv() from the socket returning - 0 (EOF). Unfortunelly, it's not possible to call read directly - as we could inadvertently read meaningful connection data. - Simulate a read by retrieving the number of bytes available to - read -- 0 meaning EOF. - */ - if (socket_peek_read(vio, &bytes)) - DBUG_RETURN(TRUE); - -#ifdef HAVE_OPENSSL - /* There might be buffered data at the SSL layer. */ - if (!bytes && vio->type == VIO_TYPE_SSL) - bytes= SSL_pending((SSL*) vio->ssl_arg); -#endif - - DBUG_RETURN(bytes ? TRUE : FALSE); -} - - -void vio_timeout(Vio *vio, uint which, uint timeout) -{ -#if defined(SO_SNDTIMEO) && defined(SO_RCVTIMEO) - int r; - DBUG_ENTER("vio_timeout"); - - { -#ifdef __WIN__ - /* Windows expects time in milliseconds as int */ - int wait_timeout= (int) timeout * 1000; -#else - /* POSIX specifies time as struct timeval. */ - struct timeval wait_timeout; - wait_timeout.tv_sec= timeout; - wait_timeout.tv_usec= 0; -#endif - - r= setsockopt(vio->sd, SOL_SOCKET, which ? SO_SNDTIMEO : SO_RCVTIMEO, - IF_WIN((const char*), (const void*))&wait_timeout, - sizeof(wait_timeout)); - - } - - if (r != 0) - DBUG_PRINT("error", ("setsockopt failed: %d, errno: %d", r, socket_errno)); - - DBUG_VOID_RETURN; -#else -/* - Platforms not suporting setting of socket timeout should either use - thr_alarm or just run without read/write timeout(s) -*/ -#endif -} - - -#ifdef __WIN__ - -/* - Finish pending IO on pipe. Honor wait timeout -*/ -static size_t pipe_complete_io(Vio* vio, char* buf, size_t size, DWORD timeout_ms) -{ - DWORD length; - DWORD ret; - - DBUG_ENTER("pipe_complete_io"); - - ret= WaitForSingleObject(vio->pipe_overlapped.hEvent, timeout_ms); - /* - WaitForSingleObjects will normally return WAIT_OBJECT_O (success, IO completed) - or WAIT_TIMEOUT. - */ - if(ret != WAIT_OBJECT_0) - { - CancelIo(vio->hPipe); - DBUG_PRINT("error",("WaitForSingleObject() returned %d", ret)); - DBUG_RETURN((size_t)-1); - } - - if (!GetOverlappedResult(vio->hPipe,&(vio->pipe_overlapped),&length, FALSE)) - { - DBUG_PRINT("error",("GetOverlappedResult() returned last error %d", - GetLastError())); - DBUG_RETURN((size_t)-1); - } - - DBUG_RETURN(length); -} - - -size_t vio_read_pipe(Vio * vio, uchar *buf, size_t size) -{ - DWORD bytes_read; - size_t retval; - DBUG_ENTER("vio_read_pipe"); - DBUG_PRINT("enter", ("sd: %d buf: 0x%lx size: %u", vio->sd, (long) buf, - (uint) size)); - - if (ReadFile(vio->hPipe, buf, (DWORD)size, &bytes_read, - &(vio->pipe_overlapped))) - { - retval= bytes_read; - } - else - { - if (GetLastError() != ERROR_IO_PENDING) - { - DBUG_PRINT("error",("ReadFile() returned last error %d", - GetLastError())); - DBUG_RETURN((size_t)-1); - } - retval= pipe_complete_io(vio, buf, size,vio->read_timeout_ms); - } - - DBUG_PRINT("exit", ("%lld", (longlong)retval)); - DBUG_RETURN(retval); -} - - -size_t vio_write_pipe(Vio * vio, const uchar* buf, size_t size) -{ - DWORD bytes_written; - size_t retval; - DBUG_ENTER("vio_write_pipe"); - DBUG_PRINT("enter", ("sd: %d buf: 0x%lx size: %u", vio->sd, (long) buf, - (uint) size)); - - if (WriteFile(vio->hPipe, buf, (DWORD)size, &bytes_written, - &(vio->pipe_overlapped))) - { - retval= bytes_written; - } - else - { - if (GetLastError() != ERROR_IO_PENDING) - { - DBUG_PRINT("vio_error",("WriteFile() returned last error %d", - GetLastError())); - DBUG_RETURN((size_t)-1); - } - retval= pipe_complete_io(vio, (char *)buf, size, vio->write_timeout_ms); - } - - DBUG_PRINT("exit", ("%lld", (longlong)retval)); - DBUG_RETURN(retval); -} - - -my_bool vio_is_connected_pipe(Vio *vio) -{ - if (PeekNamedPipe(vio->hPipe, NULL, 0, NULL, NULL, NULL)) - return TRUE; - else - return (GetLastError() != ERROR_BROKEN_PIPE); -} - - -int vio_close_pipe(Vio * vio) -{ - int r; - DBUG_ENTER("vio_close_pipe"); - - CancelIo(vio->hPipe); - CloseHandle(vio->pipe_overlapped.hEvent); - DisconnectNamedPipe(vio->hPipe); - r= CloseHandle(vio->hPipe); - if (r) - { - DBUG_PRINT("vio_error", ("close() failed, error: %d",GetLastError())); - /* FIXME: error handling (not critical for MySQL) */ - } - vio->type= VIO_CLOSED; - vio->sd= -1; - DBUG_RETURN(r); -} - - -void vio_win32_timeout(Vio *vio, uint which , uint timeout_sec) -{ - DWORD timeout_ms; - /* - Windows is measuring timeouts in milliseconds. Check for possible int - overflow. - */ - if (timeout_sec > UINT_MAX/1000) - timeout_ms= INFINITE; - else - timeout_ms= timeout_sec * 1000; - - /* which == 1 means "write", which == 0 means "read".*/ - if(which) - vio->write_timeout_ms= timeout_ms; - else - vio->read_timeout_ms= timeout_ms; -} - - -#ifdef HAVE_SMEM - -size_t vio_read_shared_memory(Vio * vio, uchar* buf, size_t size) -{ - size_t length; - size_t remain_local; - char *current_postion; - HANDLE events[2]; - - DBUG_ENTER("vio_read_shared_memory"); - DBUG_PRINT("enter", ("sd: %d buf: 0x%lx size: %d", vio->sd, (long) buf, - size)); - - remain_local = size; - current_postion=buf; - - events[0]= vio->event_server_wrote; - events[1]= vio->event_conn_closed; - - do - { - if (vio->shared_memory_remain == 0) - { - /* - WaitForMultipleObjects can return next values: - WAIT_OBJECT_0+0 - event from vio->event_server_wrote - WAIT_OBJECT_0+1 - event from vio->event_conn_closed. We can't read - anything - WAIT_ABANDONED_0 and WAIT_TIMEOUT - fail. We can't read anything - */ - if (WaitForMultipleObjects(array_elements(events), events, FALSE, - vio->read_timeout_ms) != WAIT_OBJECT_0) - { - DBUG_RETURN(-1); - }; - - vio->shared_memory_pos = vio->handle_map; - vio->shared_memory_remain = uint4korr((ulong*)vio->shared_memory_pos); - vio->shared_memory_pos+=4; - } - - length = size; - - if (vio->shared_memory_remain < length) - length = vio->shared_memory_remain; - if (length > remain_local) - length = remain_local; - - memcpy(current_postion,vio->shared_memory_pos,length); - - vio->shared_memory_remain-=length; - vio->shared_memory_pos+=length; - current_postion+=length; - remain_local-=length; - - if (!vio->shared_memory_remain) - { - if (!SetEvent(vio->event_client_read)) - DBUG_RETURN(-1); - } - } while (remain_local); - length = size; - - DBUG_PRINT("exit", ("%lu", (ulong) length)); - DBUG_RETURN(length); -} - - -size_t vio_write_shared_memory(Vio * vio, const uchar* buf, size_t size) -{ - size_t length, remain, sz; - HANDLE pos; - const uchar *current_postion; - HANDLE events[2]; - - DBUG_ENTER("vio_write_shared_memory"); - DBUG_PRINT("enter", ("sd: %d buf: 0x%lx size: %d", vio->sd, (long) buf, - size)); - - remain = size; - current_postion = buf; - - events[0]= vio->event_server_read; - events[1]= vio->event_conn_closed; - - while (remain != 0) - { - if (WaitForMultipleObjects(array_elements(events), events, FALSE, - vio->write_timeout_ms) != WAIT_OBJECT_0) - { - DBUG_RETURN((size_t) -1); - } - - sz= (remain > shared_memory_buffer_length ? shared_memory_buffer_length : - remain); - - int4store(vio->handle_map,sz); - pos = vio->handle_map + 4; - memcpy(pos,current_postion,sz); - remain-=sz; - current_postion+=sz; - if (!SetEvent(vio->event_client_wrote)) - DBUG_RETURN((size_t) -1); - } - length = size; - - DBUG_PRINT("exit", ("%lu", (ulong) length)); - DBUG_RETURN(length); -} - - -my_bool vio_is_connected_shared_memory(Vio *vio) -{ - return (WaitForSingleObject(vio->event_conn_closed, 0) != WAIT_OBJECT_0); -} - - -/** - Close shared memory and DBUG_PRINT any errors that happen on closing. - @return Zero if all closing functions succeed, and nonzero otherwise. -*/ -int vio_close_shared_memory(Vio * vio) -{ - int error_count= 0; - DBUG_ENTER("vio_close_shared_memory"); - if (vio->type != VIO_CLOSED) - { - /* - Set event_conn_closed for notification of both client and server that - connection is closed - */ - SetEvent(vio->event_conn_closed); - /* - Close all handlers. UnmapViewOfFile and CloseHandle return non-zero - result if they are success. - */ - if (UnmapViewOfFile(vio->handle_map) == 0) - { - error_count++; - DBUG_PRINT("vio_error", ("UnmapViewOfFile() failed")); - } - if (CloseHandle(vio->event_server_wrote) == 0) - { - error_count++; - DBUG_PRINT("vio_error", ("CloseHandle(vio->esw) failed")); - } - if (CloseHandle(vio->event_server_read) == 0) - { - error_count++; - DBUG_PRINT("vio_error", ("CloseHandle(vio->esr) failed")); - } - if (CloseHandle(vio->event_client_wrote) == 0) - { - error_count++; - DBUG_PRINT("vio_error", ("CloseHandle(vio->ecw) failed")); - } - if (CloseHandle(vio->event_client_read) == 0) - { - error_count++; - DBUG_PRINT("vio_error", ("CloseHandle(vio->ecr) failed")); - } - if (CloseHandle(vio->handle_file_map) == 0) - { - error_count++; - DBUG_PRINT("vio_error", ("CloseHandle(vio->hfm) failed")); - } - if (CloseHandle(vio->event_conn_closed) == 0) - { - error_count++; - DBUG_PRINT("vio_error", ("CloseHandle(vio->ecc) failed")); - } - } - vio->type= VIO_CLOSED; - vio->sd= -1; - DBUG_RETURN(error_count); -} -#endif /* HAVE_SMEM */ -#endif /* __WIN__ */ - - -/** - Number of bytes in the read buffer. - - @return number of bytes in the read buffer or < 0 if error. -*/ - -ssize_t vio_pending(Vio *vio) -{ -#ifdef HAVE_OPENSSL - SSL *ssl= (SSL*) vio->ssl_arg; -#endif - - if (vio->read_pos < vio->read_end) - return vio->read_end - vio->read_pos; - -#ifdef HAVE_OPENSSL - if (ssl) - return SSL_pending(ssl); -#endif - - return 0; -} - - -/** - This is a wrapper for the system getnameinfo(), because different OS - differ in the getnameinfo() implementation: - - Solaris 10 requires that the 2nd argument (salen) must match the - actual size of the struct sockaddr_storage passed to it; - - Mac OS X has sockaddr_in::sin_len and sockaddr_in6::sin6_len and - requires them to be filled. -*/ - -int vio_getnameinfo(const struct sockaddr *sa, - char *hostname, size_t hostname_size, - char *port, size_t port_size, - int flags) -{ - int sa_length= 0; - - switch (sa->sa_family) { - case AF_INET: - sa_length= sizeof (struct sockaddr_in); -#ifdef HAVE_SOCKADDR_IN_SIN_LEN - ((struct sockaddr_in *) sa)->sin_len= sa_length; -#endif /* HAVE_SOCKADDR_IN_SIN_LEN */ - break; - -#ifdef HAVE_IPV6 - case AF_INET6: - sa_length= sizeof (struct sockaddr_in6); -# ifdef HAVE_SOCKADDR_IN6_SIN6_LEN - ((struct sockaddr_in6 *) sa)->sin6_len= sa_length; -# endif /* HAVE_SOCKADDR_IN6_SIN6_LEN */ - break; -#endif /* HAVE_IPV6 */ - } - - return getnameinfo(sa, sa_length, - hostname, hostname_size, - port, port_size, - flags); -} diff --git a/deps/mysqllite/vio/viossl.c b/deps/mysqllite/vio/viossl.c deleted file mode 100644 index 5cb5f36f20d5e9..00000000000000 --- a/deps/mysqllite/vio/viossl.c +++ /dev/null @@ -1,252 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Note that we can't have assertion on file descriptors; The reason for - this is that during mysql shutdown, another thread can close a file - we are working on. In this case we should just return read errors from - the file descriptior. -*/ - -#include "vio_priv.h" - -#ifdef HAVE_OPENSSL - -static void -report_errors(SSL* ssl) -{ - unsigned long l; - const char *file; - const char *data; - int line, flags; -#ifndef DBUG_OFF - char buf[512]; -#endif - - DBUG_ENTER("report_errors"); - - while ((l= ERR_get_error_line_data(&file,&line,&data,&flags))) - { - DBUG_PRINT("error", ("OpenSSL: %s:%s:%d:%s\n", ERR_error_string(l,buf), - file,line,(flags&ERR_TXT_STRING)?data:"")) ; - } - - if (ssl) - DBUG_PRINT("error", ("error: %s", - ERR_error_string(SSL_get_error(ssl, l), buf))); - - DBUG_PRINT("info", ("socket_errno: %d", socket_errno)); - DBUG_VOID_RETURN; -} - - -size_t vio_ssl_read(Vio *vio, uchar* buf, size_t size) -{ - size_t r; - DBUG_ENTER("vio_ssl_read"); - DBUG_PRINT("enter", ("sd: %d buf: 0x%lx size: %u ssl: 0x%lx", - vio->sd, (long) buf, (uint) size, (long) vio->ssl_arg)); - - r= SSL_read((SSL*) vio->ssl_arg, buf, size); -#ifndef DBUG_OFF - if (r == (size_t) -1) - report_errors((SSL*) vio->ssl_arg); -#endif - DBUG_PRINT("exit", ("%u", (uint) r)); - DBUG_RETURN(r); -} - - -size_t vio_ssl_write(Vio *vio, const uchar* buf, size_t size) -{ - size_t r; - DBUG_ENTER("vio_ssl_write"); - DBUG_PRINT("enter", ("sd: %d buf: 0x%lx size: %u", vio->sd, - (long) buf, (uint) size)); - - r= SSL_write((SSL*) vio->ssl_arg, buf, size); -#ifndef DBUG_OFF - if (r == (size_t) -1) - report_errors((SSL*) vio->ssl_arg); -#endif - DBUG_PRINT("exit", ("%u", (uint) r)); - DBUG_RETURN(r); -} - - -int vio_ssl_close(Vio *vio) -{ - int r= 0; - SSL *ssl= (SSL*)vio->ssl_arg; - DBUG_ENTER("vio_ssl_close"); - - if (ssl) - { - /* - THE SSL standard says that SSL sockets must send and receive a close_notify - alert on socket shutdown to avoid truncation attacks. However, this can - cause problems since we often hold a lock during shutdown and this IO can - take an unbounded amount of time to complete. Since our packets are self - describing with length, we aren't vunerable to these attacks. Therefore, - we just shutdown by closing the socket (quiet shutdown). - */ - SSL_set_quiet_shutdown(ssl, 1); - - switch ((r= SSL_shutdown(ssl))) { - case 1: - /* Shutdown successful */ - break; - case 0: - /* - Shutdown not yet finished - since the socket is going to - be closed there is no need to call SSL_shutdown() a second - time to wait for the other side to respond - */ - break; - default: /* Shutdown failed */ - DBUG_PRINT("vio_error", ("SSL_shutdown() failed, error: %d", - SSL_get_error(ssl, r))); - break; - } - } - DBUG_RETURN(vio_close(vio)); -} - - -void vio_ssl_delete(Vio *vio) -{ - if (!vio) - return; /* It must be safe to delete null pointer */ - - if (vio->type == VIO_TYPE_SSL) - vio_ssl_close(vio); /* Still open, close connection first */ - - if (vio->ssl_arg) - { - SSL_free((SSL*) vio->ssl_arg); - vio->ssl_arg= 0; - } - - vio_delete(vio); -} - - -static int ssl_do(struct st_VioSSLFd *ptr, Vio *vio, long timeout, - int (*connect_accept_func)(SSL*)) -{ - SSL *ssl; - my_bool unused; - my_bool was_blocking; - - DBUG_ENTER("ssl_do"); - DBUG_PRINT("enter", ("ptr: 0x%lx, sd: %d ctx: 0x%lx", - (long) ptr, vio->sd, (long) ptr->ssl_context)); - - /* Set socket to blocking if not already set */ - vio_blocking(vio, 1, &was_blocking); - - if (!(ssl= SSL_new(ptr->ssl_context))) - { - DBUG_PRINT("error", ("SSL_new failure")); - report_errors(ssl); - vio_blocking(vio, was_blocking, &unused); - DBUG_RETURN(1); - } - DBUG_PRINT("info", ("ssl: 0x%lx timeout: %ld", (long) ssl, timeout)); - SSL_clear(ssl); - SSL_SESSION_set_timeout(SSL_get_session(ssl), timeout); - SSL_set_fd(ssl, vio->sd); - - if (connect_accept_func(ssl) < 1) - { - DBUG_PRINT("error", ("SSL_connect/accept failure")); - report_errors(ssl); - SSL_free(ssl); - vio_blocking(vio, was_blocking, &unused); - DBUG_RETURN(1); - } - - /* - Connection succeeded. Install new function handlers, - change type, set sd to the fd used when connecting - and set pointer to the SSL structure - */ - vio_reset(vio, VIO_TYPE_SSL, SSL_get_fd(ssl), 0, 0); - vio->ssl_arg= (void*)ssl; - -#ifndef DBUG_OFF - { - /* Print some info about the peer */ - X509 *cert; - char buf[512]; - - DBUG_PRINT("info",("SSL connection succeeded")); - DBUG_PRINT("info",("Using cipher: '%s'" , SSL_get_cipher_name(ssl))); - - if ((cert= SSL_get_peer_certificate (ssl))) - { - DBUG_PRINT("info",("Peer certificate:")); - X509_NAME_oneline(X509_get_subject_name(cert), buf, sizeof(buf)); - DBUG_PRINT("info",("\t subject: '%s'", buf)); - X509_NAME_oneline(X509_get_issuer_name(cert), buf, sizeof(buf)); - DBUG_PRINT("info",("\t issuer: '%s'", buf)); - X509_free(cert); - } - else - DBUG_PRINT("info",("Peer does not have certificate.")); - - if (SSL_get_shared_ciphers(ssl, buf, sizeof(buf))) - { - DBUG_PRINT("info",("shared_ciphers: '%s'", buf)); - } - else - DBUG_PRINT("info",("no shared ciphers!")); - } -#endif - - DBUG_RETURN(0); -} - - -int sslaccept(struct st_VioSSLFd *ptr, Vio *vio, long timeout) -{ - DBUG_ENTER("sslaccept"); - DBUG_RETURN(ssl_do(ptr, vio, timeout, SSL_accept)); -} - - -int sslconnect(struct st_VioSSLFd *ptr, Vio *vio, long timeout) -{ - DBUG_ENTER("sslconnect"); - DBUG_RETURN(ssl_do(ptr, vio, timeout, SSL_connect)); -} - - -int vio_ssl_blocking(Vio *vio __attribute__((unused)), - my_bool set_blocking_mode, - my_bool *old_mode) -{ - /* Mode is always blocking */ - *old_mode= 1; - /* Return error if we try to change to non_blocking mode */ - return (set_blocking_mode ? 0 : 1); -} - -my_bool vio_ssl_has_data(Vio *vio) -{ - return SSL_pending(vio->ssl_arg) > 0 ? TRUE : FALSE; -} - -#endif /* HAVE_OPENSSL */ diff --git a/deps/mysqllite/vio/viosslfactories.c b/deps/mysqllite/vio/viosslfactories.c deleted file mode 100644 index 4971dec37fb996..00000000000000 --- a/deps/mysqllite/vio/viosslfactories.c +++ /dev/null @@ -1,315 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "vio_priv.h" - -#ifdef HAVE_OPENSSL - -static my_bool ssl_algorithms_added = FALSE; -static my_bool ssl_error_strings_loaded= FALSE; - -static unsigned char dh512_p[]= -{ - 0xDA,0x58,0x3C,0x16,0xD9,0x85,0x22,0x89,0xD0,0xE4,0xAF,0x75, - 0x6F,0x4C,0xCA,0x92,0xDD,0x4B,0xE5,0x33,0xB8,0x04,0xFB,0x0F, - 0xED,0x94,0xEF,0x9C,0x8A,0x44,0x03,0xED,0x57,0x46,0x50,0xD3, - 0x69,0x99,0xDB,0x29,0xD7,0x76,0x27,0x6B,0xA2,0xD3,0xD4,0x12, - 0xE2,0x18,0xF4,0xDD,0x1E,0x08,0x4C,0xF6,0xD8,0x00,0x3E,0x7C, - 0x47,0x74,0xE8,0x33, -}; - -static unsigned char dh512_g[]={ - 0x02, -}; - -static DH *get_dh512(void) -{ - DH *dh; - if ((dh=DH_new())) - { - dh->p=BN_bin2bn(dh512_p,sizeof(dh512_p),NULL); - dh->g=BN_bin2bn(dh512_g,sizeof(dh512_g),NULL); - if (! dh->p || ! dh->g) - { - DH_free(dh); - dh=0; - } - } - return(dh); -} - - -static void -report_errors() -{ - unsigned long l; - const char* file; - const char* data; - int line,flags; - - DBUG_ENTER("report_errors"); - - while ((l=ERR_get_error_line_data(&file,&line,&data,&flags)) != 0) - { -#ifndef DBUG_OFF /* Avoid warning */ - char buf[200]; - DBUG_PRINT("error", ("OpenSSL: %s:%s:%d:%s\n", ERR_error_string(l,buf), - file,line,(flags & ERR_TXT_STRING) ? data : "")) ; -#endif - } - DBUG_VOID_RETURN; -} - -static const char* -ssl_error_string[] = -{ - "No error", - "Unable to get certificate", - "Unable to get private key", - "Private key does not match the certificate public key" - "SSL_CTX_set_default_verify_paths failed", - "Failed to set ciphers to use", - "SSL_CTX_new failed" -}; - -const char* -sslGetErrString(enum enum_ssl_init_error e) -{ - DBUG_ASSERT(SSL_INITERR_NOERROR < e && e < SSL_INITERR_LASTERR); - return ssl_error_string[e]; -} - -static int -vio_set_cert_stuff(SSL_CTX *ctx, const char *cert_file, const char *key_file, - enum enum_ssl_init_error* error) -{ - DBUG_ENTER("vio_set_cert_stuff"); - DBUG_PRINT("enter", ("ctx: 0x%lx cert_file: %s key_file: %s", - (long) ctx, cert_file, key_file)); - if (cert_file) - { - if (SSL_CTX_use_certificate_file(ctx, cert_file, SSL_FILETYPE_PEM) <= 0) - { - *error= SSL_INITERR_CERT; - DBUG_PRINT("error",("%s from file '%s'", sslGetErrString(*error), cert_file)); - DBUG_EXECUTE("error", ERR_print_errors_fp(DBUG_FILE);); - fprintf(stderr, "SSL error: %s from '%s'\n", sslGetErrString(*error), - cert_file); - fflush(stderr); - DBUG_RETURN(1); - } - - if (!key_file) - key_file= cert_file; - - if (SSL_CTX_use_PrivateKey_file(ctx, key_file, SSL_FILETYPE_PEM) <= 0) - { - *error= SSL_INITERR_KEY; - DBUG_PRINT("error", ("%s from file '%s'", sslGetErrString(*error), key_file)); - DBUG_EXECUTE("error", ERR_print_errors_fp(DBUG_FILE);); - fprintf(stderr, "SSL error: %s from '%s'\n", sslGetErrString(*error), - key_file); - fflush(stderr); - DBUG_RETURN(1); - } - - /* - If we are using DSA, we can copy the parameters from the private key - Now we know that a key and cert have been set against the SSL context - */ - if (!SSL_CTX_check_private_key(ctx)) - { - *error= SSL_INITERR_NOMATCH; - DBUG_PRINT("error", ("%s",sslGetErrString(*error))); - DBUG_EXECUTE("error", ERR_print_errors_fp(DBUG_FILE);); - fprintf(stderr, "SSL error: %s\n", sslGetErrString(*error)); - fflush(stderr); - DBUG_RETURN(1); - } - } - DBUG_RETURN(0); -} - - -static void check_ssl_init() -{ - if (!ssl_algorithms_added) - { - ssl_algorithms_added= TRUE; - SSL_library_init(); - OpenSSL_add_all_algorithms(); - - } - - if (!ssl_error_strings_loaded) - { - ssl_error_strings_loaded= TRUE; - SSL_load_error_strings(); - } -} - -/************************ VioSSLFd **********************************/ -static struct st_VioSSLFd * -new_VioSSLFd(const char *key_file, const char *cert_file, - const char *ca_file, const char *ca_path, - const char *cipher, SSL_METHOD *method, - enum enum_ssl_init_error* error) -{ - DH *dh; - struct st_VioSSLFd *ssl_fd; - DBUG_ENTER("new_VioSSLFd"); - DBUG_PRINT("enter", - ("key_file: '%s' cert_file: '%s' ca_file: '%s' ca_path: '%s' " - "cipher: '%s'", - key_file ? key_file : "NULL", - cert_file ? cert_file : "NULL", - ca_file ? ca_file : "NULL", - ca_path ? ca_path : "NULL", - cipher ? cipher : "NULL")); - - check_ssl_init(); - - if (!(ssl_fd= ((struct st_VioSSLFd*) - my_malloc(sizeof(struct st_VioSSLFd),MYF(0))))) - DBUG_RETURN(0); - - if (!(ssl_fd->ssl_context= SSL_CTX_new(method))) - { - *error= SSL_INITERR_MEMFAIL; - DBUG_PRINT("error", ("%s", sslGetErrString(*error))); - report_errors(); - my_free(ssl_fd); - DBUG_RETURN(0); - } - - /* - Set the ciphers that can be used - NOTE: SSL_CTX_set_cipher_list will return 0 if - none of the provided ciphers could be selected - */ - if (cipher && - SSL_CTX_set_cipher_list(ssl_fd->ssl_context, cipher) == 0) - { - *error= SSL_INITERR_CIPHERS; - DBUG_PRINT("error", ("%s", sslGetErrString(*error))); - report_errors(); - SSL_CTX_free(ssl_fd->ssl_context); - my_free(ssl_fd); - DBUG_RETURN(0); - } - - /* Load certs from the trusted ca */ - if (SSL_CTX_load_verify_locations(ssl_fd->ssl_context, ca_file, ca_path) == 0) - { - DBUG_PRINT("warning", ("SSL_CTX_load_verify_locations failed")); - if (SSL_CTX_set_default_verify_paths(ssl_fd->ssl_context) == 0) - { - *error= SSL_INITERR_BAD_PATHS; - DBUG_PRINT("error", ("%s", sslGetErrString(*error))); - report_errors(); - SSL_CTX_free(ssl_fd->ssl_context); - my_free(ssl_fd); - DBUG_RETURN(0); - } - } - - if (vio_set_cert_stuff(ssl_fd->ssl_context, cert_file, key_file, error)) - { - DBUG_PRINT("error", ("vio_set_cert_stuff failed")); - report_errors(); - SSL_CTX_free(ssl_fd->ssl_context); - my_free(ssl_fd); - DBUG_RETURN(0); - } - - /* DH stuff */ - dh=get_dh512(); - SSL_CTX_set_tmp_dh(ssl_fd->ssl_context, dh); - DH_free(dh); - - DBUG_PRINT("exit", ("OK 1")); - - DBUG_RETURN(ssl_fd); -} - - -/************************ VioSSLConnectorFd **********************************/ -struct st_VioSSLFd * -new_VioSSLConnectorFd(const char *key_file, const char *cert_file, - const char *ca_file, const char *ca_path, - const char *cipher) -{ - struct st_VioSSLFd *ssl_fd; - int verify= SSL_VERIFY_PEER; - enum enum_ssl_init_error dummy; - - /* - Turn off verification of servers certificate if both - ca_file and ca_path is set to NULL - */ - if (ca_file == 0 && ca_path == 0) - verify= SSL_VERIFY_NONE; - - if (!(ssl_fd= new_VioSSLFd(key_file, cert_file, ca_file, - ca_path, cipher, TLSv1_client_method(), &dummy))) - { - return 0; - } - - /* Init the VioSSLFd as a "connector" ie. the client side */ - - SSL_CTX_set_verify(ssl_fd->ssl_context, verify, NULL); - - return ssl_fd; -} - - -/************************ VioSSLAcceptorFd **********************************/ -struct st_VioSSLFd * -new_VioSSLAcceptorFd(const char *key_file, const char *cert_file, - const char *ca_file, const char *ca_path, - const char *cipher, enum enum_ssl_init_error* error) -{ - struct st_VioSSLFd *ssl_fd; - int verify= SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE; - if (!(ssl_fd= new_VioSSLFd(key_file, cert_file, ca_file, - ca_path, cipher, TLSv1_server_method(), error))) - { - return 0; - } - /* Init the the VioSSLFd as a "acceptor" ie. the server side */ - - /* Set max number of cached sessions, returns the previous size */ - SSL_CTX_sess_set_cache_size(ssl_fd->ssl_context, 128); - - SSL_CTX_set_verify(ssl_fd->ssl_context, verify, NULL); - - /* - Set session_id - an identifier for this server session - Use the ssl_fd pointer - */ - SSL_CTX_set_session_id_context(ssl_fd->ssl_context, - (const unsigned char *)ssl_fd, - sizeof(ssl_fd)); - - return ssl_fd; -} - -void free_vio_ssl_acceptor_fd(struct st_VioSSLFd *fd) -{ - SSL_CTX_free(fd->ssl_context); - my_free(fd); -} -#endif /* HAVE_OPENSSL */ From 6e0e5a6939f524c54b5f31bcfcfd8b0010acd6c4 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sun, 24 Nov 2024 15:39:19 +0100 Subject: [PATCH 16/55] fix(Scripts/ZulAman): Harrison Jones gong event RP with taskscheduler (#20713) --- .../rev_1732428469975738467.sql | 34 +++ .../EasternKingdoms/ZulAman/zulaman.cpp | 236 ++++++++---------- 2 files changed, 136 insertions(+), 134 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1732428469975738467.sql diff --git a/data/sql/updates/pending_db_world/rev_1732428469975738467.sql b/data/sql/updates/pending_db_world/rev_1732428469975738467.sql new file mode 100644 index 00000000000000..47799bcd7c1248 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1732428469975738467.sql @@ -0,0 +1,34 @@ +-- +-- IMMUNE_TO_PC +UPDATE `creature_template` SET `unit_flags` = `unit_flags` | 256 WHERE (`entry` = 24358); + +-- purge old waypoints +DELETE FROM `waypoint_data` WHERE `id`=860442; +DELETE FROM `waypoint_data` WHERE `id`=860441; +DELETE FROM `waypoint_data` WHERE `id`=860440; + +-- verify model 22340 +UPDATE `creature_template_model` SET `VerifiedBuild` = 53788 WHERE (`CreatureID` = 24358) AND `Idx` = 0; + +-- text +-- broadcast text still says three +UPDATE `creature_text` SET `Text`='Suit yourself. At least five of you must assist me if we\'re to get inside. Follow me....' WHERE `CreatureID`=24358 AND `GroupID`=0 AND `ID`=0; + +-- to gong +DELETE FROM `waypoint_data` WHERE `id` = 2435800; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`) VALUES +(2435800, 1, 123.585014, 1646.5702, 42.208447, NULL, 0, 1), +(2435800, 2, 130.58502, 1644.0702, 42.208447, NULL, 0, 1), +(2435800, 3, 131.15666, 1643.7225, 42.18348, NULL, 0, 1); + +-- to door +DELETE FROM `waypoint_data` WHERE `id` = 2435801; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +(2435801, 1, 126.804565, 1641.6201, 42.500977), +(2435801, 2, 121.95248, 1639.0178, 42.318478), +(2435801, 3, 120.78983, 1609.0632, 43.555756); + +-- stealth +DELETE FROM `waypoint_data` WHERE `id` = 2435802; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +(2435802, 1, 120.59397, 1587.591, 43.74926); diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index a583d1f6c7eb35..da714fb7b5ec35 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -323,31 +323,23 @@ enum Spells SPELL_COSMETIC_SPEAR_THROW = 43647 }; -enum Events +enum Phases { - GONG_EVENT_1 = 1, - GONG_EVENT_2 = 2, - GONG_EVENT_3 = 3, - GONG_EVENT_4 = 4, - GONG_EVENT_5 = 5, - GONG_EVENT_6 = 6, - GONG_EVENT_7 = 7, - GONG_EVENT_8 = 8, - GONG_EVENT_9 = 9, - GONG_EVENT_10 = 10, - GONG_EVENT_11 = 11 + PHASE_GONG = 0, + PHASE_GATE_CLOSED = 1, + PHASE_GATE_OPENED = 2 }; enum Actions { - ACTION_COMPLETE_EVENT_3 = 0, + ACTION_COMPLETE_GONG_RITUAL = 0 }; enum Waypoints { - HARRISON_MOVE_1 = 860440, - HARRISON_MOVE_2 = 860441, - HARRISON_MOVE_3 = 860442 + HARRISON_MOVE_1 = 2435800, + HARRISON_MOVE_2 = 2435801, + HARRISON_MOVE_3 = 2435802 }; enum DisplayIds @@ -379,9 +371,8 @@ struct npc_harrison_jones : public ScriptedAI void Reset() override { - _gongEvent = 0; - _gongTimer = 0; - uiTargetGUID.Clear(); + _phase = PHASE_GONG; + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } void JustEngagedWith(Unit* /*who*/) override { } @@ -394,8 +385,10 @@ struct npc_harrison_jones : public ScriptedAI me->SetFacingToObject(player); me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); Talk(SAY_HARRISON_0); - _gongEvent = GONG_EVENT_1; - _gongTimer = 4000; + scheduler.Schedule(2s, [this](TaskContext /*task*/) + { + me->GetMotionMaster()->MovePath(HARRISON_MOVE_1, false); + }); } } @@ -403,12 +396,16 @@ struct npc_harrison_jones : public ScriptedAI { if (spell->Id == SPELL_COSMETIC_SPEAR_THROW) { - me->RemoveAllAuras(); + me->RemoveAllAuras(); // remove stealth me->SetEntry(NPC_HARRISON_JONES_2); - me->SetDisplayId(MODEL_HARRISON_JONES_2); - me->SetTarget(); - me->SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, UNIT_STAND_STATE_DEAD); - me->SetDynamicFlag(UNIT_DYNFLAG_DEAD); + me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->PlayDistanceSound(1332); // human male death + me->HandleEmoteCommand(EMOTE_ONESHOT_WOUND_CRITICAL); + me->StopMoving(); + scheduler.Schedule(1s, [this](TaskContext /*task*/) + { + me->SetStandState(UNIT_STAND_STATE_DEAD); + }); _instance->StorePersistentData(DATA_TIMED_RUN, 21); _instance->DoAction(ACTION_START_TIMED_RUN); me->DespawnOrUnsummon(3min+30s, 0s); @@ -417,132 +414,103 @@ struct npc_harrison_jones : public ScriptedAI void DoAction(int32 action) override { - if (action == ACTION_COMPLETE_EVENT_3) + if (action == ACTION_COMPLETE_GONG_RITUAL) { me->GetMap()->ToInstanceMap()->PermBindAllPlayers(); - _gongEvent = GONG_EVENT_4; - _gongTimer = 0; + _phase = PHASE_GATE_CLOSED; + me->RemoveAura(SPELL_BANGING_THE_GONG); + me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(0)); + if (GameObject* gong = _instance->GetGameObject(DATA_STRANGE_GONG)) + gong->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE); + // Players are Now Saved to instance at SPECIAL (Player should be notified?) + scheduler.Schedule(500ms, [this](TaskContext /*task*/) + { + me->GetMotionMaster()->MovePath(HARRISON_MOVE_2, false); + }); } } - void UpdateAI(uint32 diff) override + void OpenMassiveGateAndCallGuards() { - if (_gongEvent) + if (GameObject* gate = _instance->GetGameObject(DATA_MASSIVE_GATE)) + { + gate->AllowSaveToDB(true); + gate->SetGoState(GO_STATE_ACTIVE); + } + std::list targetList; + GetCreatureListWithEntryInGrid(targetList, me, NPC_AMANISHI_GUARDIAN, 26.0f); + if (!targetList.empty()) { - if (_gongTimer <= diff) + for (auto const& creature : targetList) { - switch (_gongEvent) + if (creature) { - case GONG_EVENT_1: - me->GetMotionMaster()->MovePath(HARRISON_MOVE_1, false); - _gongEvent = GONG_EVENT_2; - _gongTimer = 12000; - break; - case GONG_EVENT_2: - me->SetFacingTo(6.235659f); - Talk(SAY_HARRISON_1); - DoCastSelf(SPELL_BANGING_THE_GONG); - me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_MACE)); - me->SetSheath(SHEATH_STATE_MELEE); - _gongEvent = GONG_EVENT_3; - _gongTimer = 4000; - break; - case GONG_EVENT_3: - if (GameObject* gong = _instance->GetGameObject(DATA_STRANGE_GONG)) - gong->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); - break; - case GONG_EVENT_4: - me->RemoveAura(SPELL_BANGING_THE_GONG); - if (GameObject* gong = _instance->GetGameObject(DATA_STRANGE_GONG)) - gong->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE); - - // Players are Now Saved to instance at SPECIAL (Player should be notified?) - me->GetMotionMaster()->MovePath(HARRISON_MOVE_2, false); - _gongEvent = GONG_EVENT_5; - _gongTimer = 5000; - break; - case GONG_EVENT_5: - me->SetEntry(NPC_HARRISON_JONES_1); - me->SetDisplayId(MODEL_HARRISON_JONES_1); - Talk(SAY_HARRISON_2); - _gongTimer = 12000; - _gongEvent = GONG_EVENT_6; - break; - case GONG_EVENT_6: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING); - Talk(SAY_HARRISON_3); - _gongTimer = 7000; - _gongEvent = GONG_EVENT_7; - break; - case GONG_EVENT_7: - if (!uiTargetGUID) - { - std::list targetList; - GetCreatureListWithEntryInGrid(targetList, me, NPC_AMANISHI_GUARDIAN, 26.0f); - if (!targetList.empty()) - { - for (auto const& creature : targetList) - { - if (creature) - { - creature->SetImmuneToPC(true); - creature->SetReactState(REACT_PASSIVE); - - if (creature->GetPositionX() > 120) - { - creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_SPEAR)); - creature->AI()->SetData(0, 1); - } - else - creature->AI()->SetData(0, 2); - } - } - } - } + creature->SetImmuneToPC(true); + creature->SetReactState(REACT_PASSIVE); - if (GameObject* gate = _instance->GetGameObject(DATA_MASSIVE_GATE)) + if (creature->GetPositionX() > 120) { - gate->AllowSaveToDB(true); - gate->SetGoState(GO_STATE_ACTIVE); + creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_SPEAR)); + creature->AI()->SetData(0, 1); } - _gongTimer = 2000; - _gongEvent = GONG_EVENT_8; - break; - case GONG_EVENT_8: - DoCastSelf(SPELL_STEALTH); - me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(0)); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); - me->GetMotionMaster()->MovePath(HARRISON_MOVE_3, false); - _gongTimer = 1000; - _gongEvent = 0; - break; - case GONG_EVENT_9: - me->GetMotionMaster()->MovePoint(0, 120.687f, 1674.0f, 42.0217f); - _gongTimer = 12000; - _gongEvent = GONG_EVENT_10; - break; - case GONG_EVENT_10: - me->SetFacingTo(1.59044f); - _gongEvent = 11; - _gongTimer = 6000; - break; - case GONG_EVENT_11: - me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); - _gongEvent = 0; - _gongTimer = 1000; - break; + else + creature->AI()->SetData(0, 2); } } - else - _gongTimer -= diff; } } + void MovementInform(uint32 type, uint32 id) override + { + // at gong + if (type == WAYPOINT_MOTION_TYPE && id == 2 && _phase == PHASE_GONG) + { + if (GameObject* gong = _instance->GetGameObject(DATA_STRANGE_GONG)) + me->SetFacingToObject(gong); + scheduler.Schedule(2s, [this](TaskContext /*task*/) + { + Talk(SAY_HARRISON_1); + }).Schedule(7s, [this](TaskContext /*task*/) + { + DoCastSelf(SPELL_BANGING_THE_GONG); + me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_MACE)); + me->SetFacingTo(5.9696f); + if (GameObject* gong = _instance->GetGameObject(DATA_STRANGE_GONG)) + gong->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); + }); + } + // to the massive gate + else if (type == WAYPOINT_MOTION_TYPE && id == 1 && _phase == PHASE_GATE_CLOSED) + { + me->SetEntry(NPC_HARRISON_JONES_1); + Talk(SAY_HARRISON_2); + } + // at massive gate + else if (type == WAYPOINT_MOTION_TYPE && id == 2 && _phase == PHASE_GATE_CLOSED) + { + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING); + Talk(SAY_HARRISON_3); + scheduler.Schedule(8s, [this](TaskContext /*task*/) + { + OpenMassiveGateAndCallGuards(); + _phase = PHASE_GATE_OPENED; + }).Schedule(10s, [this](TaskContext /*task*/) + { + DoCastSelf(SPELL_STEALTH); + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + me->GetMotionMaster()->MovePath(HARRISON_MOVE_3, false); + }); + } + } + + void UpdateAI(uint32 diff) override + { + scheduler.Update(diff); + } + private: InstanceScript* _instance; - uint8 _gongEvent; - uint32 _gongTimer; - ObjectGuid uiTargetGUID; + uint32 _phase; }; class spell_ritual_of_power : public SpellScript @@ -553,7 +521,7 @@ class spell_ritual_of_power : public SpellScript { if (InstanceScript* instance = GetCaster()->GetInstanceScript()) if (Creature* creature = instance->GetCreature(DATA_HARRISON_JONES)) - creature->AI()->DoAction(ACTION_COMPLETE_EVENT_3); + creature->AI()->DoAction(ACTION_COMPLETE_GONG_RITUAL); } void Register() override From 735a5a5037cd685e0c5246c793fe7159745d836e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 24 Nov 2024 14:41:02 +0000 Subject: [PATCH 17/55] chore(DB): import pending files Referenced commit(s): 6e0e5a6939f524c54b5f31bcfcfd8b0010acd6c4 --- .../rev_1732428469975738467.sql => db_world/2024_11_24_03.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1732428469975738467.sql => db_world/2024_11_24_03.sql} (97%) diff --git a/data/sql/updates/pending_db_world/rev_1732428469975738467.sql b/data/sql/updates/db_world/2024_11_24_03.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1732428469975738467.sql rename to data/sql/updates/db_world/2024_11_24_03.sql index 47799bcd7c1248..13c91b4fcc361f 100644 --- a/data/sql/updates/pending_db_world/rev_1732428469975738467.sql +++ b/data/sql/updates/db_world/2024_11_24_03.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_24_02 -> 2024_11_24_03 -- -- IMMUNE_TO_PC UPDATE `creature_template` SET `unit_flags` = `unit_flags` | 256 WHERE (`entry` = 24358); From ab7f49b220f9dd3cc62fbeb7015df2d76e53301b Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 24 Nov 2024 12:02:56 -0300 Subject: [PATCH 18/55] feat(Core/Scripting): Implement TaskScheduler GetNextGroupOccurrence() (#20714) --- src/common/Utilities/TaskScheduler.cpp | 22 ++++++++++++++++++++++ src/common/Utilities/TaskScheduler.h | 8 ++++++++ 2 files changed, 30 insertions(+) diff --git a/src/common/Utilities/TaskScheduler.cpp b/src/common/Utilities/TaskScheduler.cpp index 1e4e0222da86e7..6f8978f3c8c1e3 100644 --- a/src/common/Utilities/TaskScheduler.cpp +++ b/src/common/Utilities/TaskScheduler.cpp @@ -124,6 +124,11 @@ bool TaskScheduler::IsGroupScheduled(group_t const group) return _task_holder.IsGroupQueued(group); } +Milliseconds TaskScheduler::GetNextGroupOcurrence(group_t const group) const +{ + return std::chrono::duration_cast(_task_holder.GetNextGroupOcurrence(group) - clock_t::now()); +} + void TaskScheduler::TaskQueue::Push(TaskContainer&& task) { container.insert(task); @@ -189,6 +194,18 @@ bool TaskScheduler::TaskQueue::IsGroupQueued(group_t const group) return false; } +TaskScheduler::timepoint_t TaskScheduler::TaskQueue::GetNextGroupOcurrence(group_t const group) const +{ + TaskScheduler::timepoint_t next = TaskScheduler::timepoint_t::max(); + for (auto const& task : container) + { + if (task->IsInGroup(group) && task->_end < next) + next = task->_end; + } + + return next; +} + bool TaskScheduler::TaskQueue::IsEmpty() const { return container.empty(); @@ -231,6 +248,11 @@ TaskScheduler::repeated_t TaskContext::GetRepeatCounter() const return _task->_repeated; } +TaskScheduler::timepoint_t TaskContext::GetNextOcurrence() const +{ + return _task->_end; +} + TaskContext& TaskContext::Async(std::function const& callable) { return Dispatch(std::bind(&TaskScheduler::Async, std::placeholders::_1, callable)); diff --git a/src/common/Utilities/TaskScheduler.h b/src/common/Utilities/TaskScheduler.h index 145489e086355b..b85ad54978fc2d 100644 --- a/src/common/Utilities/TaskScheduler.h +++ b/src/common/Utilities/TaskScheduler.h @@ -148,6 +148,9 @@ class TaskScheduler /// Check if the group exists and is currently scheduled. bool IsGroupQueued(group_t const group); + // Returns the next group occurrence. + TaskScheduler::timepoint_t GetNextGroupOcurrence(group_t const group) const; + bool IsEmpty() const; }; @@ -373,6 +376,9 @@ class TaskScheduler return RescheduleGroup(group, RandomDurationBetween(min, max)); } + // Returns the next group occurrence. + Milliseconds GetNextGroupOcurrence(group_t const group) const; + private: /// Insert a new task to the enqueued tasks. TaskScheduler& InsertTask(TaskContainer task); @@ -477,6 +483,8 @@ class TaskContext /// Returns the repeat counter which increases every time the task is repeated. TaskScheduler::repeated_t GetRepeatCounter() const; + TaskScheduler::timepoint_t GetNextOcurrence() const; + /// Repeats the event and sets a new duration. /// std::chrono::seconds(5) for example. /// This will consume the task context, its not possible to repeat the task again From c1c9443dd1b4c08c796f5a1507eda2367d603dd3 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sun, 24 Nov 2024 16:18:23 +0100 Subject: [PATCH 19/55] fix(Scripts/ZulAman): remove cast transfigure when going into lynx (#20716) --- src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp index 4a57a42cf94074..491dd4e9ab8a5f 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp @@ -158,10 +158,7 @@ struct boss_halazzi : public BossAI case PHASE_LYNX: { if (_phase == PHASE_MERGE) - { - DoCastSelf(SPELL_TRANSFIGURE, true); me->ResumeChasingVictim(); - } summons.DespawnAll(); if (_transformCount) From 72b5e26c91242232f75f6d9128de0985da4b284e Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 24 Nov 2024 12:24:45 -0300 Subject: [PATCH 20/55] =?UTF-8?q?fix(Scripts/ZulAman):=20Dont=20cast=20Gus?= =?UTF-8?q?t=20of=20Wind=20if=20about=20to=20start=20Electr=E2=80=A6=20(#2?= =?UTF-8?q?0717)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EasternKingdoms/ZulAman/boss_akilzon.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp index 57e3d8635ef48d..bab5e26021b4f0 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp @@ -52,7 +52,8 @@ enum Says enum Misc { - ACTION_STORM_EXPIRE = 1 + ACTION_STORM_EXPIRE = 1, + GROUP_ELECTRICAL_STORM = 1 }; constexpr auto NPC_SOARING_EAGLE = 24858; @@ -91,14 +92,16 @@ struct boss_akilzon : public BossAI }, 10s, 18s); ScheduleTimedEvent(20s, 30s, [&] { - DoCastRandomTarget(SPELL_GUST_OF_WIND, 1); + if (scheduler.GetNextGroupOcurrence(GROUP_ELECTRICAL_STORM) > 5s) + DoCastRandomTarget(SPELL_GUST_OF_WIND, 1); }, 20s, 30s); ScheduleTimedEvent(10s, 20s, [&] { DoCastVictim(SPELL_CALL_LIGHTNING); }, 12s, 17s); - ScheduleTimedEvent(1min, [&] { + scheduler.Schedule(1min, GROUP_ELECTRICAL_STORM, [this](TaskContext context) + { Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50, true); if (!target) { @@ -123,7 +126,9 @@ struct boss_akilzon : public BossAI _isRaining = true; } }, Seconds(urand(47, 52))); - }, 1min); + + context.Repeat(); + }); ScheduleTimedEvent(47s, 52s, [&] { if (!_isRaining) From 33d038b22781a273a9002b8e92eed528afd1c7b5 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 24 Nov 2024 15:43:34 -0300 Subject: [PATCH 21/55] =?UTF-8?q?fix(DB/SAI):=20Fix=20Disciple=20of=20Nara?= =?UTF-8?q?lex=20despawning=20if=20talked=20while=20in=20co=E2=80=A6=20(#2?= =?UTF-8?q?0718)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(DB/SAI): Fix Disciple of Naralex despawning if talked while in combat --- data/sql/updates/pending_db_world/rev_1732465168517068600.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1732465168517068600.sql diff --git a/data/sql/updates/pending_db_world/rev_1732465168517068600.sql b/data/sql/updates/pending_db_world/rev_1732465168517068600.sql new file mode 100644 index 00000000000000..e0c969605f1b43 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1732465168517068600.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 3678) AND (`source_type` = 0) AND (`id` IN (26)); From c139c948cc96467e2cd9c975e1b98d12a751440d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 24 Nov 2024 18:45:20 +0000 Subject: [PATCH 22/55] chore(DB): import pending files Referenced commit(s): 33d038b22781a273a9002b8e92eed528afd1c7b5 --- .../rev_1732465168517068600.sql => db_world/2024_11_24_04.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1732465168517068600.sql => db_world/2024_11_24_04.sql} (70%) diff --git a/data/sql/updates/pending_db_world/rev_1732465168517068600.sql b/data/sql/updates/db_world/2024_11_24_04.sql similarity index 70% rename from data/sql/updates/pending_db_world/rev_1732465168517068600.sql rename to data/sql/updates/db_world/2024_11_24_04.sql index e0c969605f1b43..e8a099d084352b 100644 --- a/data/sql/updates/pending_db_world/rev_1732465168517068600.sql +++ b/data/sql/updates/db_world/2024_11_24_04.sql @@ -1,2 +1,3 @@ +-- DB update 2024_11_24_03 -> 2024_11_24_04 -- DELETE FROM `smart_scripts` WHERE (`entryorguid` = 3678) AND (`source_type` = 0) AND (`id` IN (26)); From 2bb208cc5415362a18a7c0734a96a7a16b6edd6c Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 24 Nov 2024 16:03:01 -0300 Subject: [PATCH 23/55] fix(DB/Spell): Correct gender requirement for ZA charm spells (#20722) --- data/sql/updates/pending_db_world/rev_1732474303790541000.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1732474303790541000.sql diff --git a/data/sql/updates/pending_db_world/rev_1732474303790541000.sql b/data/sql/updates/pending_db_world/rev_1732474303790541000.sql new file mode 100644 index 00000000000000..e41cc4efd44aec --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1732474303790541000.sql @@ -0,0 +1,2 @@ +-- +UPDATE `spell_area` SET `gender` = 2 WHERE `spell` IN (43818, 43820, 43822); From 8792cd38dc8e083c888e8c1f5f7b0b5c193b97c4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 24 Nov 2024 19:04:45 +0000 Subject: [PATCH 24/55] chore(DB): import pending files Referenced commit(s): 2bb208cc5415362a18a7c0734a96a7a16b6edd6c --- .../rev_1732474303790541000.sql => db_world/2024_11_24_05.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1732474303790541000.sql => db_world/2024_11_24_05.sql} (64%) diff --git a/data/sql/updates/pending_db_world/rev_1732474303790541000.sql b/data/sql/updates/db_world/2024_11_24_05.sql similarity index 64% rename from data/sql/updates/pending_db_world/rev_1732474303790541000.sql rename to data/sql/updates/db_world/2024_11_24_05.sql index e41cc4efd44aec..945dc48e356936 100644 --- a/data/sql/updates/pending_db_world/rev_1732474303790541000.sql +++ b/data/sql/updates/db_world/2024_11_24_05.sql @@ -1,2 +1,3 @@ +-- DB update 2024_11_24_04 -> 2024_11_24_05 -- UPDATE `spell_area` SET `gender` = 2 WHERE `spell` IN (43818, 43820, 43822); From 9874a47de5c31a7f9ba046193e3f8fb2a6b5ebf5 Mon Sep 17 00:00:00 2001 From: Grimdhex <176165533+Grimdhex@users.noreply.github.com> Date: Sun, 24 Nov 2024 21:02:32 +0100 Subject: [PATCH 25/55] refactor(Core): fix few static analysis (#20566) * refactor(Core): fix few static analysis * fix builds * revert FacingInfo change and fix GraveYard ID use in a log --- src/server/game/Combat/ThreatMgr.cpp | 4 ++-- src/server/game/Misc/GameGraveyard.cpp | 10 +++++----- src/server/game/Server/WorldSocket.cpp | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/server/game/Combat/ThreatMgr.cpp b/src/server/game/Combat/ThreatMgr.cpp index 620556c5f8605a..30fb7a146d29fc 100644 --- a/src/server/game/Combat/ThreatMgr.cpp +++ b/src/server/game/Combat/ThreatMgr.cpp @@ -217,7 +217,7 @@ void HostileReference::setOnlineOfflineState(bool isOnline) { iOnline = isOnline; - ThreatRefStatusChangeEvent event(UEV_THREAT_REF_ONLINE_STATUS, this); + ThreatRefStatusChangeEvent event(UEV_THREAT_REF_ONLINE_STATUS, this, isOnline); fireStatusChanged(event); } } @@ -230,7 +230,7 @@ void HostileReference::removeReference() { invalidate(); - ThreatRefStatusChangeEvent event(UEV_THREAT_REF_REMOVE_FROM_LIST, this); + ThreatRefStatusChangeEvent event(UEV_THREAT_REF_REMOVE_FROM_LIST, this, false); fireStatusChanged(event); } diff --git a/src/server/game/Misc/GameGraveyard.cpp b/src/server/game/Misc/GameGraveyard.cpp index 08d9232bc88072..38269a3fc4249a 100644 --- a/src/server/game/Misc/GameGraveyard.cpp +++ b/src/server/game/Misc/GameGraveyard.cpp @@ -46,11 +46,11 @@ void Graveyard::LoadGraveyardFromDB() do { - Field* fields = result->Fetch(); - uint32 ID = fields[0].Get(); - GraveyardStruct Graveyard; + Field* fields = result->Fetch(); + + Graveyard.ID = fields[0].Get(); Graveyard.Map = fields[1].Get(); Graveyard.x = fields[2].Get(); Graveyard.y = fields[3].Get(); @@ -59,13 +59,13 @@ void Graveyard::LoadGraveyardFromDB() if (!Utf8toWStr(Graveyard.name, Graveyard.wnameLow)) { - LOG_ERROR("sql.sql", "Wrong UTF8 name for id {} in `game_graveyard` table, ignoring.", ID); + LOG_ERROR("sql.sql", "Wrong UTF8 name for id {} in `game_graveyard` table, ignoring.", Graveyard.ID); continue; } wstrToLower(Graveyard.wnameLow); - _graveyardStore[ID] = Graveyard; + _graveyardStore[Graveyard.ID] = std::move(Graveyard); ++Count; } while (result->NextRow()); diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 4bba0868c263a4..fefe24949bd6d7 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -476,7 +476,7 @@ WorldSocket::ReadDataHandlerResult WorldSocket::ReadDataHandler() OpcodeHandler const* handler = opcodeTable[opcode]; if (!handler) { - LOG_ERROR("network.opcode", "No defined handler for opcode {} sent by {}", GetOpcodeNameForLogging(static_cast(packet.GetOpcode())), _worldSession->GetPlayerInfo()); + LOG_ERROR("network.opcode", "No defined handler for opcode {} sent by {}", GetOpcodeNameForLogging(static_cast(packetToQueue->GetOpcode())), _worldSession->GetPlayerInfo()); delete packetToQueue; return ReadDataHandlerResult::Error; } From 7f5bcda7f7f94fb2d8ba5efd7805f09c49125643 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 24 Nov 2024 17:03:41 -0300 Subject: [PATCH 26/55] chore(DB/Spells): Add missing Charm of the Bloodletter gender (#20724) --- data/sql/updates/db_world/2024_11_24_05.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/sql/updates/db_world/2024_11_24_05.sql b/data/sql/updates/db_world/2024_11_24_05.sql index 945dc48e356936..fe43372442c586 100644 --- a/data/sql/updates/db_world/2024_11_24_05.sql +++ b/data/sql/updates/db_world/2024_11_24_05.sql @@ -1,3 +1,3 @@ -- DB update 2024_11_24_04 -> 2024_11_24_05 -- -UPDATE `spell_area` SET `gender` = 2 WHERE `spell` IN (43818, 43820, 43822); +UPDATE `spell_area` SET `gender` = 2 WHERE `spell` IN (43816, 43818, 43820, 43822); From b2c04603f74dd7bdb458285b19b1e38117eceea6 Mon Sep 17 00:00:00 2001 From: sudlud Date: Sun, 24 Nov 2024 21:25:02 +0100 Subject: [PATCH 27/55] feat(Core/SmartAI): add startup error for non existent SmartAI entries (#20694) --- .../rev_1732397002606741000.sql | 3 + .../game/AI/SmartScripts/SmartScriptMgr.cpp | 79 +++++++++++++++++++ .../game/AI/SmartScripts/SmartScriptMgr.h | 1 + src/server/game/Globals/ObjectMgr.h | 1 + 4 files changed, 84 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1732397002606741000.sql diff --git a/data/sql/updates/pending_db_world/rev_1732397002606741000.sql b/data/sql/updates/pending_db_world/rev_1732397002606741000.sql new file mode 100644 index 00000000000000..aa37bb210b7a62 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1732397002606741000.sql @@ -0,0 +1,3 @@ +-- disable SmartAI for creatures and gameobjects without SmartAI entries +UPDATE `creature_template` SET `AIName` = '' WHERE (`entry` IN (100, 10042, 10158, 1020, 10296, 10337, 10338, 1039, 10639, 11018, 1128, 11327, 114, 11698, 11724, 11725, 11789, 11858, 11918, 1199, 1201, 12160, 1224, 13017, 13159, 14275, 14276, 14369, 14378, 15186, 1520, 1537, 1543, 1547, 1548, 1549, 15591, 15651, 15652, 16054, 16069, 1654, 1655, 1656, 1658, 16591, 16599, 1662, 16764, 1693, 17056, 17405, 17417, 17493, 17558, 1770, 18043, 18075, 18076, 18521, 1869, 1871, 19048, 1934, 1935, 19355, 19421, 19425, 19426, 19432, 19562, 19579, 19580, 19647, 19653, 19686, 1972, 19836, 19932, 20154, 20480, 20520, 20710, 20825, 21456, 2164, 21867, 22134, 22265, 2248, 2275, 23146, 232, 2321, 2322, 2323, 23401, 2347, 23845, 23852, 23853, 23854, 23855, 24043, 24385, 24717, 2473, 2474, 24821, 24826, 24827, 24828, 24829, 24831, 24832, 24837, 24958, 2535, 2536, 25471, 25472, 25473, 2559, 25751, 2578, 2723, 2735, 2736, 2773, 2780, 2781, 2782, 27896, 27897, 27993, 28206, 28355, 28374, 28843, 28878, 2923, 2944, 29500, 29620, 29915, 3, 30315, 30316, 30317, 30318, 30423, 30889, 31195, 31418, 32326, 32364, 32367, 32711, 3285, 3476, 36, 36508, 3722, 37782, 3812, 3814, 39371, 39372, 3988, 3999, 4130, 4388, 4390, 4419, 4620, 4661, 4687, 5061, 5192, 5246, 5253, 5260, 5292, 5293, 5300, 5435, 5461, 5477, 5602, 5622, 5850, 5853, 6020, 6068, 6093, 6233, 6352, 7032, 7067, 7287, 7307, 7369, 756, 757, 822, 8256, 8447, 862, 880, 92, 5287, 4389, 4872)); +UPDATE `gameobject_template` SET `AIName` = '' WHERE (`entry` IN (164881, 164882, 164883, 164884, 173325, 173326, 174609, 174616, 174617, 174618, 174619, 174620, 174621, 174622, 174623, 174624, 174625, 174685, 174687, 174710, 174711, 179829, 186432)); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 44c85241d6580b..4d4a3541639348 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -296,10 +296,89 @@ void SmartAIMgr::LoadSmartAIFromDB() mEventMap[source_type][temp.entryOrGuid].push_back(temp); } while (result->NextRow()); + CheckIfSmartAIInDatabaseExists(); + LOG_INFO("server.loading", ">> Loaded {} SmartAI scripts in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); LOG_INFO("server.loading", " "); } +void SmartAIMgr::CheckIfSmartAIInDatabaseExists() +{ + // SMART_SCRIPT_TYPE_CREATURE + for (auto const& [entry, creatureTemplate] : *sObjectMgr->GetCreatureTemplates()) + { + if (creatureTemplate.AIName != "SmartAI") + continue; + + bool found = false; + + // check template SAI + if (mEventMap[uint32(SmartScriptType::SMART_SCRIPT_TYPE_CREATURE)].find(creatureTemplate.Entry) != mEventMap[uint32(SmartScriptType::SMART_SCRIPT_TYPE_CREATURE)].end()) + found = true; + else + { + // check GUID SAI + for (auto const& pair : sObjectMgr->GetAllCreatureData()) + { + if (pair.second.id1 != creatureTemplate.Entry) + continue; + + if (mEventMap[uint32(SmartScriptType::SMART_SCRIPT_TYPE_CREATURE)].find((-1) * pair.first) != mEventMap[uint32(SmartScriptType::SMART_SCRIPT_TYPE_CREATURE)].end()) + { + found = true; + break; + } + } + } + + if (!found) + LOG_ERROR("sql.sql", "Creature entry ({}) has SmartAI enabled but no SmartAI entries in the database.", creatureTemplate.Entry); + } + + // SMART_SCRIPT_TYPE_GAMEOBJECT + for (auto const& [entry, gameobjectTemplate] : *sObjectMgr->GetGameObjectTemplates()) + { + if (gameobjectTemplate.AIName != "SmartGameObjectAI") + continue; + + bool found = false; + + // check template SAI + if (mEventMap[uint32(SmartScriptType::SMART_SCRIPT_TYPE_GAMEOBJECT)].find(gameobjectTemplate.entry) != mEventMap[uint32(SmartScriptType::SMART_SCRIPT_TYPE_GAMEOBJECT)].end()) + found = true; + else + { + // check GUID SAI + for (auto const& pair : sObjectMgr->GetAllGOData()) + { + if (pair.second.id != gameobjectTemplate.entry) + continue; + + if (mEventMap[uint32(SmartScriptType::SMART_SCRIPT_TYPE_GAMEOBJECT)].find((-1) * pair.first) != mEventMap[uint32(SmartScriptType::SMART_SCRIPT_TYPE_GAMEOBJECT)].end()) + { + found = true; + break; + } + } + } + + if (!found) + LOG_ERROR("sql.sql", "Gameobject entry ({}) has SmartGameobjectAI enabled but no SmartAI entries in the database.", gameobjectTemplate.entry); + } + + // SMART_SCRIPT_TYPE_AREATRIGGER + uint32 scriptID = sObjectMgr->GetScriptId("SmartTrigger"); + + for (auto const& pair : sObjectMgr->GetAllAreaTriggerScriptData()) + { + if (pair.second != scriptID) + continue; + + if (mEventMap[uint32(SmartScriptType::SMART_SCRIPT_TYPE_AREATRIGGER)].find(pair.first) == mEventMap[uint32(SmartScriptType::SMART_SCRIPT_TYPE_AREATRIGGER)].end()) + LOG_ERROR("sql.sql", "AreaTrigger entry ({}) has SmartTrigger enabled but no SmartAI entries in the database.", pair.first); + } +} + /*static*/ bool SmartAIMgr::EventHasInvoker(SMART_EVENT event) { switch (event) diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index be8508e6beecef..bf414f532c0122 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -2060,6 +2060,7 @@ class SmartAIMgr static SmartAIMgr* instance(); void LoadSmartAIFromDB(); + void CheckIfSmartAIInDatabaseExists(); SmartAIEventList GetScript(int32 entry, SmartScriptType type) { diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 8c25ade400b6c6..f1d53892ed16a7 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -884,6 +884,7 @@ class ObjectMgr [[nodiscard]] AreaTriggerTeleport const* GetGoBackTrigger(uint32 Map) const; [[nodiscard]] AreaTriggerTeleport const* GetMapEntranceTrigger(uint32 Map) const; + [[nodiscard]] AreaTriggerScriptContainer const& GetAllAreaTriggerScriptData() const { return _areaTriggerScriptStore; } uint32 GetAreaTriggerScriptId(uint32 trigger_id); SpellScriptsBounds GetSpellScriptsBounds(uint32 spell_id); From 6b2cc0fd8688bf0df41f01f4e9e22d2a8c54471d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 24 Nov 2024 20:25:57 +0000 Subject: [PATCH 28/55] chore(DB): import pending files Referenced commit(s): b2c04603f74dd7bdb458285b19b1e38117eceea6 --- .../rev_1732397002606741000.sql => db_world/2024_11_24_06.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1732397002606741000.sql => db_world/2024_11_24_06.sql} (97%) diff --git a/data/sql/updates/pending_db_world/rev_1732397002606741000.sql b/data/sql/updates/db_world/2024_11_24_06.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1732397002606741000.sql rename to data/sql/updates/db_world/2024_11_24_06.sql index aa37bb210b7a62..733df28c57be5e 100644 --- a/data/sql/updates/pending_db_world/rev_1732397002606741000.sql +++ b/data/sql/updates/db_world/2024_11_24_06.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_24_05 -> 2024_11_24_06 -- disable SmartAI for creatures and gameobjects without SmartAI entries UPDATE `creature_template` SET `AIName` = '' WHERE (`entry` IN (100, 10042, 10158, 1020, 10296, 10337, 10338, 1039, 10639, 11018, 1128, 11327, 114, 11698, 11724, 11725, 11789, 11858, 11918, 1199, 1201, 12160, 1224, 13017, 13159, 14275, 14276, 14369, 14378, 15186, 1520, 1537, 1543, 1547, 1548, 1549, 15591, 15651, 15652, 16054, 16069, 1654, 1655, 1656, 1658, 16591, 16599, 1662, 16764, 1693, 17056, 17405, 17417, 17493, 17558, 1770, 18043, 18075, 18076, 18521, 1869, 1871, 19048, 1934, 1935, 19355, 19421, 19425, 19426, 19432, 19562, 19579, 19580, 19647, 19653, 19686, 1972, 19836, 19932, 20154, 20480, 20520, 20710, 20825, 21456, 2164, 21867, 22134, 22265, 2248, 2275, 23146, 232, 2321, 2322, 2323, 23401, 2347, 23845, 23852, 23853, 23854, 23855, 24043, 24385, 24717, 2473, 2474, 24821, 24826, 24827, 24828, 24829, 24831, 24832, 24837, 24958, 2535, 2536, 25471, 25472, 25473, 2559, 25751, 2578, 2723, 2735, 2736, 2773, 2780, 2781, 2782, 27896, 27897, 27993, 28206, 28355, 28374, 28843, 28878, 2923, 2944, 29500, 29620, 29915, 3, 30315, 30316, 30317, 30318, 30423, 30889, 31195, 31418, 32326, 32364, 32367, 32711, 3285, 3476, 36, 36508, 3722, 37782, 3812, 3814, 39371, 39372, 3988, 3999, 4130, 4388, 4390, 4419, 4620, 4661, 4687, 5061, 5192, 5246, 5253, 5260, 5292, 5293, 5300, 5435, 5461, 5477, 5602, 5622, 5850, 5853, 6020, 6068, 6093, 6233, 6352, 7032, 7067, 7287, 7307, 7369, 756, 757, 822, 8256, 8447, 862, 880, 92, 5287, 4389, 4872)); UPDATE `gameobject_template` SET `AIName` = '' WHERE (`entry` IN (164881, 164882, 164883, 164884, 173325, 173326, 174609, 174616, 174617, 174618, 174619, 174620, 174621, 174622, 174623, 174624, 174625, 174685, 174687, 174710, 174711, 179829, 186432)); From ec84bf98f9aa0b54d495449000d8ed4e2be89b99 Mon Sep 17 00:00:00 2001 From: daobashun <49193927+fangshun2004@users.noreply.github.com> Date: Mon, 25 Nov 2024 05:03:34 +0800 Subject: [PATCH 29/55] fix(Scripts/Spell): Added random whispers of the Death Knight Newbie Village Lich King (#19006) * Use rand Spell Whispers * Added smart script for creature 28576|28577 * Added spell script name * Fixed the wrong name * The script name is lowercase Remove spaces * Remove spaces * Remove spaces * Players will only be able to whisper if they have mission 12678 Attacking civilians is the only way to whisper * Validate * Update src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com> --------- Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com> --- .../rev_1717511658299508400.sql | 31 +++++++ .../ScarletEnclave/chapter1.cpp | 84 +++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1717511658299508400.sql diff --git a/data/sql/updates/pending_db_world/rev_1717511658299508400.sql b/data/sql/updates/pending_db_world/rev_1717511658299508400.sql new file mode 100644 index 00000000000000..5abe029c7d013a --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1717511658299508400.sql @@ -0,0 +1,31 @@ +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 28576; + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 28576) AND (`source_type` = 0) AND (`id` IN (8)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(28576, 0, 8, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 0, 86, 58207, 0, 10, 128581, 28765, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Aggro - Cross Cast \'Lich King VO Blocker\''); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = 28576 AND `SourceId` = 0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `Comment`) VALUES +(22, 9, 28576, 0, 0, 14, 0, 12678, 0, 0, 1, 'Action invoker has finished or active quest If Chaos Drives, Let Suffering Hold The Reins (12678)'); + +DELETE +FROM `spell_script_names` +WHERE `spell_id` BETWEEN 58207 AND 58223; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(58207, 'spell_lich_king_vo_blocker'), +(58208, 'spell_lich_king_whisper'), +(58209, 'spell_lich_king_whisper'), +(58210, 'spell_lich_king_whisper'), +(58211, 'spell_lich_king_whisper'), +(58212, 'spell_lich_king_whisper'), +(58213, 'spell_lich_king_whisper'), +(58214, 'spell_lich_king_whisper'), +(58215, 'spell_lich_king_whisper'), +(58216, 'spell_lich_king_whisper'), +(58217, 'spell_lich_king_whisper'), +(58218, 'spell_lich_king_whisper'), +(58219, 'spell_lich_king_whisper'), +(58220, 'spell_lich_king_whisper'), +(58221, 'spell_lich_king_whisper'), +(58222, 'spell_lich_king_whisper'), +(58223, 'spell_lich_king_whisper'); diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index def69437c08d22..941bc2f9f0aa2a 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -1215,6 +1215,88 @@ class spell_death_knight_initiate_visual : public SpellScript } }; +enum spells_lich_king_whisper +{ + SPELL_LICH_KING_VO_BLOCKER = 58207, + SPELL_LICHKINGDK001 = 58208, + SPELL_LICHKINGDK002 = 58209, + SPELL_LICHKINGDK003 = 58210, + SPELL_LICHKINGDK004 = 58211, + SPELL_LICHKINGDK005 = 58212, + SPELL_LICHKINGDK006 = 58213, + SPELL_LICHKINGDK007 = 58214, + SPELL_LICHKINGDK008 = 58215, + SPELL_LICHKINGDK009 = 58216, + SPELL_LICHKINGDK010 = 58217, + SPELL_LICHKINGDK011 = 58218, + SPELL_LICHKINGDK012 = 58219, + SPELL_LICHKINGDK013 = 58220, + SPELL_LICHKINGDK014 = 58221, + SPELL_LICHKINGDK015 = 58222, + SPELL_LICHKINGDK016 = 58223 +}; + +//spell 58207 rand Whisper +class spell_lich_king_vo_blocker : public AuraScript +{ + PrepareAuraScript(spell_lich_king_vo_blocker); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo + ({ + SPELL_LICHKINGDK001, SPELL_LICHKINGDK002, SPELL_LICHKINGDK003, SPELL_LICHKINGDK004, + SPELL_LICHKINGDK005, SPELL_LICHKINGDK006, SPELL_LICHKINGDK007, SPELL_LICHKINGDK008, + SPELL_LICHKINGDK009, SPELL_LICHKINGDK010, SPELL_LICHKINGDK011, SPELL_LICHKINGDK012, + SPELL_LICHKINGDK013, SPELL_LICHKINGDK014, SPELL_LICHKINGDK015, SPELL_LICHKINGDK016 + }); + } + + void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Player* target = GetTarget()->ToPlayer()) + { + //spell 58208-58223 + GetCaster()->CastSpell(target, urand(SPELL_LICHKINGDK001, SPELL_LICHKINGDK016), true); + } + } + + void Register() override + { + OnEffectApply += AuraEffectApplyFn(spell_lich_king_vo_blocker::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 58208 - 58224 - Creature - The Lich King (28765) Whisper +class spell_lich_king_whisper : public SpellScript +{ + PrepareSpellScript(spell_lich_king_whisper); + + bool Validate(SpellInfo const* spellInfo) override + { + return sObjectMgr->GetBroadcastText(uint32(spellInfo->GetEffect(EFFECT_0).CalcValue())) && + sSoundEntriesStore.LookupEntry(uint32(spellInfo->GetEffect(EFFECT_1).CalcValue())); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetHitPlayer()) + GetCaster()->Whisper(uint32(GetEffectValue()), player, false); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetHitPlayer()) + player->PlayDistanceSound(uint32(GetEffectValue()), player); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_lich_king_whisper::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + OnEffectHitTarget += SpellEffectFn(spell_lich_king_whisper::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); + } +}; + void AddSC_the_scarlet_enclave_c1() { // Ours @@ -1237,4 +1319,6 @@ void AddSC_the_scarlet_enclave_c1() new go_inconspicuous_mine_car(); RegisterSpellScript(spell_death_knight_initiate_visual); + RegisterSpellScript(spell_lich_king_whisper); + RegisterSpellScript(spell_lich_king_vo_blocker); } From b2225cd385e2c5060919f2f6aa7aea20c88a787c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 24 Nov 2024 21:04:28 +0000 Subject: [PATCH 30/55] chore(DB): import pending files Referenced commit(s): ec84bf98f9aa0b54d495449000d8ed4e2be89b99 --- .../rev_1717511658299508400.sql => db_world/2024_11_24_07.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1717511658299508400.sql => db_world/2024_11_24_07.sql} (97%) diff --git a/data/sql/updates/pending_db_world/rev_1717511658299508400.sql b/data/sql/updates/db_world/2024_11_24_07.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1717511658299508400.sql rename to data/sql/updates/db_world/2024_11_24_07.sql index 5abe029c7d013a..d0a9b99c9c99ee 100644 --- a/data/sql/updates/pending_db_world/rev_1717511658299508400.sql +++ b/data/sql/updates/db_world/2024_11_24_07.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_24_06 -> 2024_11_24_07 UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 28576; DELETE FROM `smart_scripts` WHERE (`entryorguid` = 28576) AND (`source_type` = 0) AND (`id` IN (8)); From 94873d129b123bc92a1bf5b308fd23f8b126499c Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 24 Nov 2024 19:21:00 -0300 Subject: [PATCH 31/55] =?UTF-8?q?fix(Scripts/ZulAman):=20Fix=20Berserk=20c?= =?UTF-8?q?rash=20and=20Corrupted=20Totems=20not=20atta=E2=80=A6=20(#20726?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(Scripts/ZulAman): Fix Berserk crash and Corrupted Totems not attacking --- .../scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp index 491dd4e9ab8a5f..fc15e1e3831735 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp @@ -42,7 +42,7 @@ enum Spells enum UniqueEvents { - EVENT_BERSERK = 0 + EVENT_BERSERK = 1 }; enum Hal_CreatureIds @@ -137,6 +137,14 @@ struct boss_halazzi : public BossAI me->UpdateEntry(NPC_HALAZZI_TROLL); } + void JustSummoned(Creature* summon) override + { + BossAI::JustSummoned(summon); + + if (summon->GetEntry() == NPC_TOTEM) + summon->Attack(me->GetVictim(), false); + } + void AttackStart(Unit* who) override { if (_phase != PHASE_MERGE) From 78dc29371c27cc429f7529b1bcc2476f825cc2a3 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 24 Nov 2024 19:38:52 -0300 Subject: [PATCH 32/55] =?UTF-8?q?fix(Scripts/MagisterTerrace):=20Fix=20Sel?= =?UTF-8?q?in's=20crystal=20drain=20being=20interru=E2=80=A6=20(#20727)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(Scripts/MagisterTerrace): Fix Selin's crystal drain being interrupted --- .../MagistersTerrace/boss_selin_fireheart.cpp | 27 +++++-------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp index 24225da51ef20a..c6e09d78c62800 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp @@ -41,16 +41,6 @@ enum Spells SPELL_DRAIN_MANA = 46153 }; -enum Events -{ - EVENT_SPELL_DRAIN_LIFE = 1, - EVENT_SPELL_FEL_EXPLOSION = 2, - EVENT_SPELL_DRAIN_MANA = 3, - EVENT_DRAIN_CRYSTAL = 4, - EVENT_EMPOWER = 5, - EVENT_RESTORE_COMBAT = 6 -}; - const Position crystalSummons[5] = { {248.053f, 14.592f, 3.74882f, 3.94444f}, @@ -82,16 +72,10 @@ struct boss_selin_fireheart : public BossAI me->SummonCreature(NPC_FEL_CRYSTAL, pos, TEMPSUMMON_CORPSE_DESPAWN); } - void JustSummoned(Creature* summon) override - { - BossAI::JustSummoned(summon); - summon->SetReactState(REACT_PASSIVE); - } - void SummonedCreatureDies(Creature* summon, Unit* killer) override { BossAI::SummonedCreatureDies(summon, killer); - me->GetMotionMaster()->MoveChase(me->GetVictim()); + me->ResumeChasingVictim(); } void OnPowerUpdate(Powers /*power*/, int32 /*gain*/, int32 /*updateVal*/, uint32 currentPower) override @@ -100,9 +84,9 @@ struct boss_selin_fireheart : public BossAI { Talk(SAY_EMPOWERED); if (Creature* crystal = SelectNearestCrystal(false)) - crystal->Kill(crystal, crystal); + crystal->KillSelf(); scheduler.DelayAll(10s); - me->GetMotionMaster()->MoveChase(me->GetVictim()); + me->ResumeChasingVictim(); } } @@ -125,7 +109,7 @@ struct boss_selin_fireheart : public BossAI ScheduleTimedEvent(7500ms, [&]{ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, PowerUsersSelector(me, POWER_MANA, 40.0f, false))) DoCast(target, SPELL_DRAIN_MANA); - }, 10000ms); + }, 10s); } } @@ -178,11 +162,12 @@ struct boss_selin_fireheart : public BossAI { Talk(EMOTE_CRYSTAL); crystal->ReplaceAllUnitFlags(UNIT_FLAG_NONE); + crystal->SetInCombatWithZone(); crystal->AI()->DoCast(me, SPELL_MANA_RAGE, true); DoCast(crystal, SPELL_FEL_CRYSTAL_COSMETIC, true); } else - me->GetMotionMaster()->MoveChase(me->GetVictim()); + me->ResumeChasingVictim(); } } }; From 7da3ab573c054cbfa80449e51dbe12705bdeff5a Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 25 Nov 2024 03:15:07 -0300 Subject: [PATCH 33/55] =?UTF-8?q?fix(Scripts/Events):=20Earning=20Spirit?= =?UTF-8?q?=20of=20Sharing=20should=20remove=20the=20othe=E2=80=A6=20(#207?= =?UTF-8?q?32)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(Scripts/Events): Earning Spirit of Sharing should remove the other buffs --- src/server/scripts/Events/pilgrims_bounty.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/server/scripts/Events/pilgrims_bounty.cpp b/src/server/scripts/Events/pilgrims_bounty.cpp index d1d5c7029966b9..cdcc853017d3ae 100644 --- a/src/server/scripts/Events/pilgrims_bounty.cpp +++ b/src/server/scripts/Events/pilgrims_bounty.cpp @@ -501,7 +501,14 @@ class spell_pilgrims_bounty_feast_on_generic : public SpellScript // Cast spirit of sharing if (count >= 5) + { + player->RemoveAurasDueToSpell(SPELL_PLAYER_TURKEY); + player->RemoveAurasDueToSpell(SPELL_PLAYER_STUFFING); + player->RemoveAurasDueToSpell(SPELL_PLAYER_PIE); + player->RemoveAurasDueToSpell(SPELL_PLAYER_CRANBERRY); + player->RemoveAurasDueToSpell(SPELL_PLAYER_SWEET_POTATOES); player->CastSpell(player, SPELL_SPIRIT_OF_SHARING, true); + } } } } From 65ec5bbceb5e7352195472c16677cc02d90dbe91 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 25 Nov 2024 03:15:49 -0300 Subject: [PATCH 34/55] refactor(Scripts/Nexus): Update creature scripts to new register method (#20728) --- .../Northrend/Nexus/Nexus/boss_anomalus.cpp | 215 ++++++++-------- .../boss_commander_stoutbeard_kolurg.cpp | 119 ++++----- .../Nexus/Nexus/boss_keristrasza.cpp | 217 ++++++++-------- .../Nexus/Nexus/boss_magus_telestra.cpp | 241 +++++++++--------- .../Northrend/Nexus/Nexus/boss_ormorok.cpp | 240 ++++++++--------- .../Northrend/Nexus/Nexus/instance_nexus.cpp | 145 +++++------ .../scripts/Northrend/Nexus/Nexus/nexus.h | 2 + 7 files changed, 543 insertions(+), 636 deletions(-) diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp index 1f34b91ec33a0d..397f9ec8bbf09a 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp @@ -67,146 +67,131 @@ class ChargeRifts : public BasicEvent Creature* _caster; }; -class boss_anomalus : public CreatureScript +struct boss_anomalus : public BossAI { -public: - boss_anomalus() : CreatureScript("boss_anomalus") { } + boss_anomalus(Creature* creature) : BossAI(creature, DATA_ANOMALUS_EVENT) { } + + bool achievement; + uint16 activeRifts; - CreatureAI* GetAI(Creature* creature) const override + void Reset() override { - return GetNexusAI(creature); + BossAI::Reset(); + achievement = true; + me->CastSpell(me, SPELL_CLOSE_RIFTS, true); } - struct boss_anomalusAI : public BossAI + uint32 GetData(uint32 data) const override { - boss_anomalusAI(Creature* creature) : BossAI(creature, DATA_ANOMALUS_EVENT) - { - } - - bool achievement; - uint16 activeRifts; - - void Reset() override - { - BossAI::Reset(); - achievement = true; - me->CastSpell(me, SPELL_CLOSE_RIFTS, true); - } - - uint32 GetData(uint32 data) const override - { - if (data == me->GetEntry()) - return achievement; - return 0; - } + if (data == me->GetEntry()) + return achievement; + return 0; + } - void SetData(uint32 type, uint32) override + void SetData(uint32 type, uint32) override + { + if (type == me->GetEntry()) { - if (type == me->GetEntry()) + if (activeRifts > 0 && --activeRifts == 0 && me->HasAura(SPELL_RIFT_SHIELD)) { - if (activeRifts > 0 && --activeRifts == 0 && me->HasAura(SPELL_RIFT_SHIELD)) - { - events.DelayEvents(me->GetAura(SPELL_RIFT_SHIELD)->GetDuration() - 46000); - me->RemoveAura(SPELL_RIFT_SHIELD); - me->InterruptNonMeleeSpells(false); - } - achievement = false; + events.DelayEvents(me->GetAura(SPELL_RIFT_SHIELD)->GetDuration() - 46000); + me->RemoveAura(SPELL_RIFT_SHIELD); + me->InterruptNonMeleeSpells(false); } + achievement = false; } + } - void JustSummoned(Creature* summon) override - { - summons.Summon(summon); - activeRifts++; - } - - void JustEngagedWith(Unit* who) override - { - Talk(SAY_AGGRO); - BossAI::JustEngagedWith(who); + void JustSummoned(Creature* summon) override + { + summons.Summon(summon); + activeRifts++; + } - activeRifts = 0; - events.SetTimer(45000); - events.ScheduleEvent(EVENT_ANOMALUS_SPARK, 5s); - events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1s); - events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15s : 25s); - if (IsHeroic()) - events.ScheduleEvent(EVENT_ANOMALUS_ARCANE_ATTRACTION, 8s); - } + void JustEngagedWith(Unit* who) override + { + Talk(SAY_AGGRO); + BossAI::JustEngagedWith(who); + + activeRifts = 0; + events.SetTimer(45000); + events.ScheduleEvent(EVENT_ANOMALUS_SPARK, 5s); + events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1s); + events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15s : 25s); + if (IsHeroic()) + events.ScheduleEvent(EVENT_ANOMALUS_ARCANE_ATTRACTION, 8s); + } - void JustDied(Unit* killer) override - { - Talk(SAY_DEATH); - BossAI::JustDied(killer); - me->CastSpell(me, SPELL_CLOSE_RIFTS, true); - } + void JustDied(Unit* killer) override + { + Talk(SAY_DEATH); + BossAI::JustDied(killer); + me->CastSpell(me, SPELL_CLOSE_RIFTS, true); + } - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + events.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - switch (events.ExecuteEvent()) + switch (events.ExecuteEvent()) + { + case EVENT_ANOMALUS_SPARK: + me->CastSpell(me->GetVictim(), SPELL_SPARK, false); + events.ScheduleEvent(EVENT_ANOMALUS_SPARK, 5s); + break; + case EVENT_ANOMALUS_HEALTH: + if (me->HealthBelowPct(51)) { - case EVENT_ANOMALUS_SPARK: - me->CastSpell(me->GetVictim(), SPELL_SPARK, false); - events.ScheduleEvent(EVENT_ANOMALUS_SPARK, 5s); - break; - case EVENT_ANOMALUS_HEALTH: - if (me->HealthBelowPct(51)) - { - //First time we reach 51%, the next rift going to be empowered following timings. - events.CancelEvent(EVENT_ANOMALUS_SPAWN_RIFT); - events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED, 1s); - break; - } - events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1s); - break; - case EVENT_ANOMALUS_ARCANE_ATTRACTION: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) - me->CastSpell(target, SPELL_ARCANE_ATTRACTION, false); - events.ScheduleEvent(EVENT_ANOMALUS_ARCANE_ATTRACTION, 15s); - break; - case EVENT_ANOMALUS_SPAWN_RIFT: - Talk(SAY_RIFT); - Talk(EMOTE_RIFT); - me->CastSpell(me, SPELL_CREATE_RIFT, false); - //Once we hit 51% hp mark, after each rift we spawn an empowered - events.ScheduleEvent(me->HealthBelowPct(51) ? EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED : EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15000 : 25000); - break; - case EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED: - Talk(SAY_RIFT); - Talk(EMOTE_RIFT); - - me->CastSpell(me, SPELL_CREATE_RIFT, false); - me->CastSpell(me, SPELL_RIFT_SHIELD, true); - me->m_Events.AddEvent(new ChargeRifts(me), me->m_Events.CalculateTime(1000)); - events.DelayEvents(46s); - //As we just spawned an empowered spawn a normal one - events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15s : 25s); - break; + //First time we reach 51%, the next rift going to be empowered following timings. + events.CancelEvent(EVENT_ANOMALUS_SPAWN_RIFT); + events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED, 1s); + break; } - - DoMeleeAttackIfReady(); + events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1s); + break; + case EVENT_ANOMALUS_ARCANE_ATTRACTION: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) + me->CastSpell(target, SPELL_ARCANE_ATTRACTION, false); + events.ScheduleEvent(EVENT_ANOMALUS_ARCANE_ATTRACTION, 15s); + break; + case EVENT_ANOMALUS_SPAWN_RIFT: + Talk(SAY_RIFT); + Talk(EMOTE_RIFT); + me->CastSpell(me, SPELL_CREATE_RIFT, false); + //Once we hit 51% hp mark, after each rift we spawn an empowered + events.ScheduleEvent(me->HealthBelowPct(51) ? EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED : EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15000 : 25000); + break; + case EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED: + Talk(SAY_RIFT); + Talk(EMOTE_RIFT); + + me->CastSpell(me, SPELL_CREATE_RIFT, false); + me->CastSpell(me, SPELL_RIFT_SHIELD, true); + me->m_Events.AddEvent(new ChargeRifts(me), me->m_Events.CalculateTime(1000)); + events.DelayEvents(46s); + //As we just spawned an empowered spawn a normal one + events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15s : 25s); + break; } - bool CheckEvadeIfOutOfCombatArea() const override - { - return me->GetHomePosition().GetExactDist2d(me) > 60.0f; - } - }; + DoMeleeAttackIfReady(); + } + + bool CheckEvadeIfOutOfCombatArea() const override + { + return me->GetHomePosition().GetExactDist2d(me) > 60.0f; + } }; class achievement_chaos_theory : public AchievementCriteriaScript { public: - achievement_chaos_theory() : AchievementCriteriaScript("achievement_chaos_theory") - { - } + achievement_chaos_theory() : AchievementCriteriaScript("achievement_chaos_theory") { } bool OnCheck(Player* /*player*/, Unit* target, uint32 /*criteria_id*/) override { @@ -219,6 +204,6 @@ class achievement_chaos_theory : public AchievementCriteriaScript void AddSC_boss_anomalus() { - new boss_anomalus(); + RegisterNexusCreatureAI(boss_anomalus); new achievement_chaos_theory(); } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard_kolurg.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard_kolurg.cpp index 3f6f1a5b2ee58b..3e73dda8e4027d 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard_kolurg.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard_kolurg.cpp @@ -43,90 +43,77 @@ enum Says SAY_KILL = 2 }; -class boss_commander_stoutbeard : public CreatureScript +struct boss_commander_stoutbeard : public BossAI { -public: - boss_commander_stoutbeard() : CreatureScript("boss_commander_stoutbeard") { } + boss_commander_stoutbeard(Creature* creature) : BossAI(creature, DATA_COMMANDER_EVENT) {} - CreatureAI* GetAI(Creature* creature) const override + void Reset() override { - return GetNexusAI(creature); + BossAI::Reset(); } - struct boss_commander_stoutbeardAI : public BossAI + void JustEngagedWith(Unit* who) override { - boss_commander_stoutbeardAI(Creature* creature) : BossAI(creature, DATA_COMMANDER_EVENT) - { - } + BossAI::JustEngagedWith(who); + Talk(SAY_AGGRO); + + events.ScheduleEvent(EVENT_BATTLE_SHOUT, 0ms); + events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 10s); + events.ScheduleEvent(EVENT_WHIRLWIND, 15s); + events.ScheduleEvent(EVENT_COMMANDER_CHARGE, 1s); + me->RemoveAllAuras(); + } - void Reset() override + void KilledUnit(Unit*) override + { + if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { - BossAI::Reset(); + Talk(SAY_KILL); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } + } - void JustEngagedWith(Unit* who) override - { - BossAI::JustEngagedWith(who); - Talk(SAY_AGGRO); + void JustDied(Unit* killer) override + { + BossAI::JustDied(killer); + Talk(SAY_DEATH); + } - events.ScheduleEvent(EVENT_BATTLE_SHOUT, 0ms); - events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 10s); - events.ScheduleEvent(EVENT_WHIRLWIND, 15s); - events.ScheduleEvent(EVENT_COMMANDER_CHARGE, 1s); - me->RemoveAllAuras(); - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - void KilledUnit(Unit*) override - { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) - { - Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6s); - } - } + events.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - void JustDied(Unit* killer) override + switch (events.ExecuteEvent()) { - BossAI::JustDied(killer); - Talk(SAY_DEATH); + case EVENT_BATTLE_SHOUT: + me->CastSpell(me, SPELL_BATTLE_SHOUT, true); + events.ScheduleEvent(EVENT_BATTLE_SHOUT, 2min); + break; + case EVENT_FRIGHTENING_SHOUT: + me->CastSpell(me->GetVictim(), SPELL_FRIGHTENING_SHOUT, false); + events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 15s, 20s); + break; + case EVENT_WHIRLWIND: + me->CastSpell(me, SPELL_WHIRLWIND, false); + events.ScheduleEvent(EVENT_WHIRLWIND, 16s); + break; + case EVENT_COMMANDER_CHARGE: + if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 25.0f)) + me->CastSpell(target, SPELL_CHARGE, false); + events.ScheduleEvent(EVENT_COMMANDER_CHARGE, 20s); + break; } - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_BATTLE_SHOUT: - me->CastSpell(me, SPELL_BATTLE_SHOUT, true); - events.ScheduleEvent(EVENT_BATTLE_SHOUT, 2min); - break; - case EVENT_FRIGHTENING_SHOUT: - me->CastSpell(me->GetVictim(), SPELL_FRIGHTENING_SHOUT, false); - events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 15s, 20s); - break; - case EVENT_WHIRLWIND: - me->CastSpell(me, SPELL_WHIRLWIND, false); - events.ScheduleEvent(EVENT_WHIRLWIND, 16s); - break; - case EVENT_COMMANDER_CHARGE: - if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 25.0f)) - me->CastSpell(target, SPELL_CHARGE, false); - events.ScheduleEvent(EVENT_COMMANDER_CHARGE, 20s); - break; - } - - DoMeleeAttackIfReady(); - } - }; + DoMeleeAttackIfReady(); + } }; void AddSC_boss_commander_stoutbeard() { - new boss_commander_stoutbeard(); + RegisterNexusCreatureAI(boss_commander_stoutbeard); } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp index 5cdc4662257576..a367d605922373 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp @@ -55,152 +55,137 @@ enum Events EVENT_KILL_TALK = 6 }; -class boss_keristrasza : public CreatureScript +struct boss_keristrasza : public BossAI { -public: - boss_keristrasza() : CreatureScript("boss_keristrasza") { } + boss_keristrasza(Creature* creature) : BossAI(creature, DATA_KERISTRASZA_EVENT) {} + + std::set aGuids; - CreatureAI* GetAI(Creature* creature) const override + void Reset() override { - return GetNexusAI(creature); + BossAI::Reset(); + RemovePrison(CanRemovePrison()); + aGuids.clear(); } - struct boss_keristraszaAI : public BossAI + void JustEngagedWith(Unit* who) override { - boss_keristraszaAI(Creature* creature) : BossAI(creature, DATA_KERISTRASZA_EVENT) - { - } + Talk(SAY_AGGRO); + BossAI::JustEngagedWith(who); + + me->CastSpell(me, SPELL_INTENSE_COLD, true); + events.ScheduleEvent(EVENT_CRYSTALFIRE_BREATH, 14s); + events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, DUNGEON_MODE(20000, 11000)); + events.ScheduleEvent(EVENT_TAIL_SWEEP, 5s); + events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s); + events.ScheduleEvent(EVENT_ACHIEVEMENT_CHECK, 1s); + } - std::set aGuids; + void JustDied(Unit* killer) override + { + Talk(SAY_DEATH); + BossAI::JustDied(killer); + } - void Reset() override + void KilledUnit(Unit*) override + { + if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { - BossAI::Reset(); - RemovePrison(CanRemovePrison()); - aGuids.clear(); + Talk(SAY_SLAY); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } + } - void JustEngagedWith(Unit* who) override - { - Talk(SAY_AGGRO); - BossAI::JustEngagedWith(who); + void SetData(uint32 type, uint32) override + { + if (type == me->GetEntry() && CanRemovePrison()) + RemovePrison(true); + } - me->CastSpell(me, SPELL_INTENSE_COLD, true); - events.ScheduleEvent(EVENT_CRYSTALFIRE_BREATH, 14s); - events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, DUNGEON_MODE(20000, 11000)); - events.ScheduleEvent(EVENT_TAIL_SWEEP, 5s); - events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s); - events.ScheduleEvent(EVENT_ACHIEVEMENT_CHECK, 1s); - } + bool CanRemovePrison() + { + for (uint8 i = DATA_TELESTRA_ORB; i <= DATA_ORMOROK_ORB; ++i) + if (instance->GetBossState(i) != DONE) + return false; + return true; + } - void JustDied(Unit* killer) override + void RemovePrison(bool remove) + { + if (remove) { - Talk(SAY_DEATH); - BossAI::JustDied(killer); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->RemoveAurasDueToSpell(SPELL_FROZEN_PRISON); } - - void KilledUnit(Unit*) override + else { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) - { - Talk(SAY_SLAY); - events.ScheduleEvent(EVENT_KILL_TALK, 6s); - } + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->CastSpell(me, SPELL_FROZEN_PRISON, true); } + } - void SetData(uint32 type, uint32) override - { - if (type == me->GetEntry() && CanRemovePrison()) - RemovePrison(true); - } + uint32 GetData(uint32 guid) const override + { + return aGuids.find(guid) == aGuids.end(); + } - bool CanRemovePrison() - { - for (uint8 i = DATA_TELESTRA_ORB; i <= DATA_ORMOROK_ORB; ++i) - if (instance->GetBossState(i) != DONE) - return false; - return true; - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + events.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - void RemovePrison(bool remove) + switch (events.ExecuteEvent()) { - if (remove) + case EVENT_HEALTH_CHECK: + if (me->HealthBelowPct(26)) { - me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - me->RemoveAurasDueToSpell(SPELL_FROZEN_PRISON); + Talk(SAY_ENRAGE); + Talk(EMOTE_FRENZY); + me->CastSpell(me, SPELL_ENRAGE, true); + break; } - else - { - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - me->CastSpell(me, SPELL_FROZEN_PRISON, true); - } - } - - uint32 GetData(uint32 guid) const override + events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s); + break; + case EVENT_ACHIEVEMENT_CHECK: { - return aGuids.find(guid) == aGuids.end(); + Map::PlayerList const& pList = me->GetMap()->GetPlayers(); + for (Map::PlayerList::const_iterator itr = pList.begin(); itr != pList.end(); ++itr) + if (Aura* aur = itr->GetSource()->GetAura(SPELL_INTENSE_COLD_TRIGGER)) + if (aur->GetStackAmount() > 2) + aGuids.insert(itr->GetSource()->GetGUID().GetCounter()); + events.ScheduleEvent(EVENT_ACHIEVEMENT_CHECK, 500ms); + break; } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_HEALTH_CHECK: - if (me->HealthBelowPct(26)) - { - Talk(SAY_ENRAGE); - Talk(EMOTE_FRENZY); - me->CastSpell(me, SPELL_ENRAGE, true); - break; - } - events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s); - break; - case EVENT_ACHIEVEMENT_CHECK: - { - Map::PlayerList const& pList = me->GetMap()->GetPlayers(); - for(Map::PlayerList::const_iterator itr = pList.begin(); itr != pList.end(); ++itr) - if (Aura* aur = itr->GetSource()->GetAura(SPELL_INTENSE_COLD_TRIGGER)) - if (aur->GetStackAmount() > 2) - aGuids.insert(itr->GetSource()->GetGUID().GetCounter()); - events.ScheduleEvent(EVENT_ACHIEVEMENT_CHECK, 500ms); - break; - } - case EVENT_CRYSTALFIRE_BREATH: - me->CastSpell(me->GetVictim(), SPELL_CRYSTALFIRE_BREATH, false); - events.ScheduleEvent(EVENT_CRYSTALFIRE_BREATH, 14s); - break; - case EVENT_TAIL_SWEEP: - me->CastSpell(me, SPELL_TAIL_SWEEP, false); - events.ScheduleEvent(EVENT_TAIL_SWEEP, 5s); - break; - case EVENT_CRYSTAL_CHAINS: - Talk(SAY_CRYSTAL_NOVA); - if (IsHeroic()) - me->CastSpell(me, SPELL_CRYSTALIZE, false); - else if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true)) - me->CastSpell(target, SPELL_CRYSTAL_CHAINS, false); - events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, DUNGEON_MODE(20000, 11000)); - break; - } - - DoMeleeAttackIfReady(); + case EVENT_CRYSTALFIRE_BREATH: + me->CastSpell(me->GetVictim(), SPELL_CRYSTALFIRE_BREATH, false); + events.ScheduleEvent(EVENT_CRYSTALFIRE_BREATH, 14s); + break; + case EVENT_TAIL_SWEEP: + me->CastSpell(me, SPELL_TAIL_SWEEP, false); + events.ScheduleEvent(EVENT_TAIL_SWEEP, 5s); + break; + case EVENT_CRYSTAL_CHAINS: + Talk(SAY_CRYSTAL_NOVA); + if (IsHeroic()) + me->CastSpell(me, SPELL_CRYSTALIZE, false); + else if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true)) + me->CastSpell(target, SPELL_CRYSTAL_CHAINS, false); + events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, DUNGEON_MODE(20000, 11000)); + break; } - }; + + DoMeleeAttackIfReady(); + } }; class achievement_intense_cold : public AchievementCriteriaScript { public: - achievement_intense_cold() : AchievementCriteriaScript("achievement_intense_cold") - { - } + achievement_intense_cold() : AchievementCriteriaScript("achievement_intense_cold") { } bool OnCheck(Player* player, Unit* target, uint32 /*criteria_id*/) override { @@ -213,6 +198,6 @@ class achievement_intense_cold : public AchievementCriteriaScript void AddSC_boss_keristrasza() { - new boss_keristrasza(); + RegisterNexusCreatureAI(boss_keristrasza); new achievement_intense_cold(); } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp index 16257929219518..e0c82fd6e4d5c1 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp @@ -79,159 +79,146 @@ enum Events EVENT_KILL_TALK = 9 }; -class boss_magus_telestra : public CreatureScript +struct boss_magus_telestra : public BossAI { -public: - boss_magus_telestra() : CreatureScript("boss_magus_telestra") { } + boss_magus_telestra(Creature* creature) : BossAI(creature, DATA_MAGUS_TELESTRA_EVENT) { } + + uint8 copiesDied; + bool achievement; - CreatureAI* GetAI(Creature* creature) const override + void Reset() override { - return GetNexusAI(creature); + BossAI::Reset(); + copiesDied = 0; + achievement = true; + + if (IsHeroic() && sGameEventMgr->IsActiveEvent(GAME_EVENT_WINTER_VEIL) && !me->HasAura(SPELL_WEAR_CHRISTMAS_HAT)) + me->AddAura(SPELL_WEAR_CHRISTMAS_HAT, me); } - struct boss_magus_telestraAI : public BossAI + uint32 GetData(uint32 data) const override { - boss_magus_telestraAI(Creature* creature) : BossAI(creature, DATA_MAGUS_TELESTRA_EVENT) - { - } - - uint8 copiesDied; - bool achievement; + if (data == me->GetEntry()) + return achievement; + return 0; + } - void Reset() override - { - BossAI::Reset(); - copiesDied = 0; - achievement = true; + void JustEngagedWith(Unit* who) override + { + BossAI::JustEngagedWith(who); + Talk(SAY_AGGRO); + + events.ScheduleEvent(EVENT_MAGUS_ICE_NOVA, 10s); + events.ScheduleEvent(EVENT_MAGUS_FIREBOMB, 0ms); + events.ScheduleEvent(EVENT_MAGUS_GRAVITY_WELL, 20s); + events.ScheduleEvent(EVENT_MAGUS_HEALTH1, 1s); + if (IsHeroic()) + events.ScheduleEvent(EVENT_MAGUS_HEALTH2, 1s); + } - if (IsHeroic() && sGameEventMgr->IsActiveEvent(GAME_EVENT_WINTER_VEIL) && !me->HasAura(SPELL_WEAR_CHRISTMAS_HAT)) - me->AddAura(SPELL_WEAR_CHRISTMAS_HAT, me); - } + void AttackStart(Unit* who) override + { + if (who && me->Attack(who, true)) + me->GetMotionMaster()->MoveChase(who, 20.0f); + } - uint32 GetData(uint32 data) const override - { - if (data == me->GetEntry()) - return achievement; - return 0; - } + void JustDied(Unit* killer) override + { + BossAI::JustDied(killer); + Talk(SAY_DEATH); + } - void JustEngagedWith(Unit* who) override + void KilledUnit(Unit*) override + { + if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { - BossAI::JustEngagedWith(who); - Talk(SAY_AGGRO); - - events.ScheduleEvent(EVENT_MAGUS_ICE_NOVA, 10s); - events.ScheduleEvent(EVENT_MAGUS_FIREBOMB, 0ms); - events.ScheduleEvent(EVENT_MAGUS_GRAVITY_WELL, 20s); - events.ScheduleEvent(EVENT_MAGUS_HEALTH1, 1s); - if (IsHeroic()) - events.ScheduleEvent(EVENT_MAGUS_HEALTH2, 1s); + Talk(SAY_KILL); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } + } - void AttackStart(Unit* who) override - { - if (who && me->Attack(who, true)) - me->GetMotionMaster()->MoveChase(who, 20.0f); - } + void JustSummoned(Creature* summon) override + { + summons.Summon(summon); + summon->SetInCombatWithZone(); + } - void JustDied(Unit* killer) override + void SpellHit(Unit* caster, SpellInfo const* spellInfo) override + { + if (spellInfo->Id >= SPELL_FIRE_MAGUS_DEATH && spellInfo->Id <= SPELL_ARCANE_MAGUS_DEATH && caster->ToCreature()) { - BossAI::JustDied(killer); - Talk(SAY_DEATH); - } + events.ScheduleEvent(EVENT_MAGUS_FAIL_ACHIEVEMENT, 5s); + caster->ToCreature()->DespawnOrUnsummon(1000); - void KilledUnit(Unit*) override - { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (++copiesDied >= 3) { - Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6s); + copiesDied = 0; + events.CancelEvent(EVENT_MAGUS_FAIL_ACHIEVEMENT); + events.ScheduleEvent(EVENT_MAGUS_MERGED, 5s); + me->CastSpell(me, SPELL_BURNING_WINDS, true); } } + } - void JustSummoned(Creature* summon) override - { - summons.Summon(summon); - summon->SetInCombatWithZone(); - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - void SpellHit(Unit* caster, SpellInfo const* spellInfo) override + events.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (events.ExecuteEvent()) { - if (spellInfo->Id >= SPELL_FIRE_MAGUS_DEATH && spellInfo->Id <= SPELL_ARCANE_MAGUS_DEATH && caster->ToCreature()) + case EVENT_MAGUS_HEALTH1: + if (me->HealthBelowPct(51)) { - events.ScheduleEvent(EVENT_MAGUS_FAIL_ACHIEVEMENT, 5s); - caster->ToCreature()->DespawnOrUnsummon(1000); - - if (++copiesDied >= 3) - { - copiesDied = 0; - events.CancelEvent(EVENT_MAGUS_FAIL_ACHIEVEMENT); - events.ScheduleEvent(EVENT_MAGUS_MERGED, 5s); - me->CastSpell(me, SPELL_BURNING_WINDS, true); - } + me->CastSpell(me, SPELL_START_SUMMON_CLONES, false); + events.ScheduleEvent(EVENT_MAGUS_RELOCATE, 3500ms); + Talk(SAY_SPLIT); + break; } - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) + events.ScheduleEvent(EVENT_MAGUS_HEALTH1, 1s); + break; + case EVENT_MAGUS_HEALTH2: + if (me->HealthBelowPct(11)) { - case EVENT_MAGUS_HEALTH1: - if (me->HealthBelowPct(51)) - { - me->CastSpell(me, SPELL_START_SUMMON_CLONES, false); - events.ScheduleEvent(EVENT_MAGUS_RELOCATE, 3500ms); - Talk(SAY_SPLIT); - break; - } - events.ScheduleEvent(EVENT_MAGUS_HEALTH1, 1s); - break; - case EVENT_MAGUS_HEALTH2: - if (me->HealthBelowPct(11)) - { - me->CastSpell(me, SPELL_START_SUMMON_CLONES, false); - events.ScheduleEvent(EVENT_MAGUS_RELOCATE, 3500ms); - Talk(SAY_SPLIT); - break; - } - events.ScheduleEvent(EVENT_MAGUS_HEALTH2, 1s); - break; - case EVENT_MAGUS_FIREBOMB: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(target, SPELL_FIREBOMB, false); - events.ScheduleEvent(EVENT_MAGUS_FIREBOMB, 3s); - break; - case EVENT_MAGUS_ICE_NOVA: - me->CastSpell(me, SPELL_ICE_NOVA, false); - events.ScheduleEvent(EVENT_MAGUS_ICE_NOVA, 15s); - break; - case EVENT_MAGUS_GRAVITY_WELL: - me->CastSpell(me, SPELL_GRAVITY_WELL, false); - events.ScheduleEvent(EVENT_MAGUS_GRAVITY_WELL, 15s); - break; - case EVENT_MAGUS_FAIL_ACHIEVEMENT: - achievement = false; - break; - case EVENT_MAGUS_RELOCATE: - me->NearTeleportTo(505.04f, 88.915f, -16.13f, 2.98f); - break; - case EVENT_MAGUS_MERGED: - me->CastSpell(me, SPELL_TELESTRA_BACK, true); - me->RemoveAllAuras(); - Talk(SAY_MERGE); - break; + me->CastSpell(me, SPELL_START_SUMMON_CLONES, false); + events.ScheduleEvent(EVENT_MAGUS_RELOCATE, 3500ms); + Talk(SAY_SPLIT); + break; } - - DoMeleeAttackIfReady(); + events.ScheduleEvent(EVENT_MAGUS_HEALTH2, 1s); + break; + case EVENT_MAGUS_FIREBOMB: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) + me->CastSpell(target, SPELL_FIREBOMB, false); + events.ScheduleEvent(EVENT_MAGUS_FIREBOMB, 3s); + break; + case EVENT_MAGUS_ICE_NOVA: + me->CastSpell(me, SPELL_ICE_NOVA, false); + events.ScheduleEvent(EVENT_MAGUS_ICE_NOVA, 15s); + break; + case EVENT_MAGUS_GRAVITY_WELL: + me->CastSpell(me, SPELL_GRAVITY_WELL, false); + events.ScheduleEvent(EVENT_MAGUS_GRAVITY_WELL, 15s); + break; + case EVENT_MAGUS_FAIL_ACHIEVEMENT: + achievement = false; + break; + case EVENT_MAGUS_RELOCATE: + me->NearTeleportTo(505.04f, 88.915f, -16.13f, 2.98f); + break; + case EVENT_MAGUS_MERGED: + me->CastSpell(me, SPELL_TELESTRA_BACK, true); + me->RemoveAllAuras(); + Talk(SAY_MERGE); + break; } - }; + + DoMeleeAttackIfReady(); + } }; class spell_boss_magus_telestra_summon_telestra_clones_aura : public AuraScript @@ -331,7 +318,7 @@ class achievement_split_personality : public AchievementCriteriaScript void AddSC_boss_magus_telestra() { - new boss_magus_telestra(); + RegisterNexusCreatureAI(boss_magus_telestra); RegisterSpellScript(spell_boss_magus_telestra_summon_telestra_clones_aura); RegisterSpellScript(spell_boss_magus_telestra_gravity_well); new achievement_split_personality(); diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp index 66dd21655ca4ba..82b36095dbaabf 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp @@ -60,173 +60,147 @@ enum Misc GO_CRYSTAL_SPIKE = 188537 }; -class boss_ormorok : public CreatureScript +struct boss_ormorok : public BossAI { -public: - boss_ormorok() : CreatureScript("boss_ormorok") { } + boss_ormorok(Creature* creature) : BossAI(creature, DATA_ORMOROK_EVENT) {} - CreatureAI* GetAI(Creature* creature) const override + uint8 _spikesCount; + + void Reset() override { - return GetNexusAI(creature); + _spikesCount = 0; + BossAI::Reset(); } - struct boss_ormorokAI : public BossAI + void JustEngagedWith(Unit* who) override { - boss_ormorokAI(Creature* creature) : BossAI(creature, DATA_ORMOROK_EVENT) - { - } + Talk(SAY_AGGRO); + BossAI::JustEngagedWith(who); + + events.ScheduleEvent(EVENT_ORMOROK_CRYSTAL_SPIKES, 12s); + events.ScheduleEvent(EVENT_ORMOROK_TRAMPLE, 10s); + events.ScheduleEvent(EVENT_ORMOROK_SPELL_REFLECTION, 30s); + events.ScheduleEvent(EVENT_ORMOROK_HEALTH, 1s); + if (IsHeroic()) + events.ScheduleEvent(EVENT_ORMOROK_SUMMON, 17s); + } - uint8 _spikesCount; + void JustDied(Unit* killer) override + { + Talk(SAY_DEATH); + BossAI::JustDied(killer); + } - void Reset() override + void KilledUnit(Unit* /*victim*/) override + { + if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { - _spikesCount = 0; - BossAI::Reset(); + Talk(SAY_KILL); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } + } - void JustEngagedWith(Unit* who) override - { - Talk(SAY_AGGRO); - BossAI::JustEngagedWith(who); + void JustSummoned(Creature* summon) override + { + summons.Summon(summon); + } - events.ScheduleEvent(EVENT_ORMOROK_CRYSTAL_SPIKES, 12s); - events.ScheduleEvent(EVENT_ORMOROK_TRAMPLE, 10s); - events.ScheduleEvent(EVENT_ORMOROK_SPELL_REFLECTION, 30s); - events.ScheduleEvent(EVENT_ORMOROK_HEALTH, 1s); - if (IsHeroic()) - events.ScheduleEvent(EVENT_ORMOROK_SUMMON, 17s); - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - void JustDied(Unit* killer) override - { - Talk(SAY_DEATH); - BossAI::JustDied(killer); - } + events.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - void KilledUnit(Unit* /*victim*/) override + switch (events.ExecuteEvent()) { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + case EVENT_ORMOROK_HEALTH: + if (me->HealthBelowPct(26)) { - Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6s); + me->CastSpell(me, SPELL_FRENZY, true); + Talk(EMOTE_FRENZY); + break; } - } - - void JustSummoned(Creature* summon) override - { - summons.Summon(summon); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) + events.ScheduleEvent(EVENT_ORMOROK_HEALTH, 1s); + break; + case EVENT_ORMOROK_TRAMPLE: + me->CastSpell(me, SPELL_TRAMPLE, false); + events.ScheduleEvent(EVENT_ORMOROK_TRAMPLE, 10s); + break; + case EVENT_ORMOROK_SPELL_REFLECTION: + Talk(SAY_REFLECT); + me->CastSpell(me, SPELL_SPELL_REFLECTION, false); + events.ScheduleEvent(EVENT_ORMOROK_SPELL_REFLECTION, 30s); + break; + case EVENT_ORMOROK_SUMMON: + if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 50.0f, true)) + me->CastSpell(target, SPELL_SUMMON_CRYSTALLINE_TANGLER, true); + events.ScheduleEvent(EVENT_ORMOROK_SUMMON, 17s); + break; + case EVENT_ORMOROK_CRYSTAL_SPIKES: + Talk(SAY_CRYSTAL_SPIKES); + me->CastSpell(me, SPELL_CRYSTAL_SPIKES, false); + _spikesCount = 0; + events.ScheduleEvent(EVENT_ORMOROK_SUMMON_SPIKES, 300ms); + events.ScheduleEvent(EVENT_ORMOROK_CRYSTAL_SPIKES, 20s); + break; + case EVENT_ORMOROK_SUMMON_SPIKES: + if (++_spikesCount > 9) + break; + for (uint8 i = 0; i < 4; ++i) { - case EVENT_ORMOROK_HEALTH: - if (me->HealthBelowPct(26)) - { - me->CastSpell(me, SPELL_FRENZY, true); - Talk(EMOTE_FRENZY); - break; - } - events.ScheduleEvent(EVENT_ORMOROK_HEALTH, 1s); - break; - case EVENT_ORMOROK_TRAMPLE: - me->CastSpell(me, SPELL_TRAMPLE, false); - events.ScheduleEvent(EVENT_ORMOROK_TRAMPLE, 10s); - break; - case EVENT_ORMOROK_SPELL_REFLECTION: - Talk(SAY_REFLECT); - me->CastSpell(me, SPELL_SPELL_REFLECTION, false); - events.ScheduleEvent(EVENT_ORMOROK_SPELL_REFLECTION, 30s); - break; - case EVENT_ORMOROK_SUMMON: - if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 50.0f, true)) - me->CastSpell(target, SPELL_SUMMON_CRYSTALLINE_TANGLER, true); - events.ScheduleEvent(EVENT_ORMOROK_SUMMON, 17s); - break; - case EVENT_ORMOROK_CRYSTAL_SPIKES: - Talk(SAY_CRYSTAL_SPIKES); - me->CastSpell(me, SPELL_CRYSTAL_SPIKES, false); - _spikesCount = 0; - events.ScheduleEvent(EVENT_ORMOROK_SUMMON_SPIKES, 300ms); - events.ScheduleEvent(EVENT_ORMOROK_CRYSTAL_SPIKES, 20s); - break; - case EVENT_ORMOROK_SUMMON_SPIKES: - if (++_spikesCount > 9) - break; - for (uint8 i = 0; i < 4; ++i) - { - float o = rand_norm() * 2.0f * M_PI; - float x = me->GetPositionX() + 5.0f * _spikesCount * cos(o); - float y = me->GetPositionY() + 5.0f * _spikesCount * std::sin(o); - float h = me->GetMapHeight(x, y, me->GetPositionZ()); - - if (h != INVALID_HEIGHT) - me->SummonCreature(NPC_CRYSTAL_SPIKE, x, y, h, 0, TEMPSUMMON_TIMED_DESPAWN, 7000); - } - events.ScheduleEvent(EVENT_ORMOROK_SUMMON_SPIKES, 200ms); - break; - } + float o = rand_norm() * 2.0f * M_PI; + float x = me->GetPositionX() + 5.0f * _spikesCount * cos(o); + float y = me->GetPositionY() + 5.0f * _spikesCount * std::sin(o); + float h = me->GetMapHeight(x, y, me->GetPositionZ()); - DoMeleeAttackIfReady(); + if (h != INVALID_HEIGHT) + me->SummonCreature(NPC_CRYSTAL_SPIKE, x, y, h, 0, TEMPSUMMON_TIMED_DESPAWN, 7000); + } + events.ScheduleEvent(EVENT_ORMOROK_SUMMON_SPIKES, 200ms); + break; } - }; + + DoMeleeAttackIfReady(); + } }; -class npc_crystal_spike : public CreatureScript +struct npc_crystal_spike : public NullCreatureAI { -public: - npc_crystal_spike() : CreatureScript("npc_crystal_spike") { } + npc_crystal_spike(Creature* c) : NullCreatureAI(c) { } - CreatureAI* GetAI(Creature* pCreature) const override - { - return GetNexusAI(pCreature); - } + int32 _damageTimer; + ObjectGuid _gameObjectGUID; - struct npc_crystal_spikeAI : public NullCreatureAI + void Reset() override { - npc_crystal_spikeAI(Creature* c) : NullCreatureAI(c) - { - } - - int32 _damageTimer; - ObjectGuid _gameObjectGUID; - - void Reset() override - { - if (GameObject* gameobject = me->SummonGameObject(GO_CRYSTAL_SPIKE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 3500)) - _gameObjectGUID = gameobject->GetGUID(); + if (GameObject* gameobject = me->SummonGameObject(GO_CRYSTAL_SPIKE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 3500)) + _gameObjectGUID = gameobject->GetGUID(); - _damageTimer = 1; - } + _damageTimer = 1; + } - void UpdateAI(uint32 diff) override + void UpdateAI(uint32 diff) override + { + if (_damageTimer) { - if (_damageTimer) + _damageTimer += diff; + if (_damageTimer >= 2000) { - _damageTimer += diff; - if (_damageTimer >= 2000) - { - if (GameObject* gameobject = ObjectAccessor::GetGameObject(*me, _gameObjectGUID)) - gameobject->SetGoState(GO_STATE_ACTIVE); - - me->CastSpell(me, SPELL_CRYSTAL_SPIKE_DAMAGE, false); - _damageTimer = 0; - } + if (GameObject* gameobject = ObjectAccessor::GetGameObject(*me, _gameObjectGUID)) + gameobject->SetGoState(GO_STATE_ACTIVE); + + me->CastSpell(me, SPELL_CRYSTAL_SPIKE_DAMAGE, false); + _damageTimer = 0; } } - }; + } }; void AddSC_boss_ormorok() { - new boss_ormorok(); - new npc_crystal_spike(); + RegisterNexusCreatureAI(boss_ormorok); + RegisterNexusCreatureAI(npc_crystal_spike); } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp index aa22aede438144..658e903f9c7fd9 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp @@ -166,110 +166,97 @@ enum eFrayer SPELL_ENSNARE = 48053 }; -class npc_crystalline_frayer : public CreatureScript +struct npc_crystalline_frayer : public ScriptedAI { -public: - npc_crystalline_frayer() : CreatureScript("npc_crystalline_frayer") { } + npc_crystalline_frayer(Creature* creature) : ScriptedAI(creature) { } + + bool _allowDeath; + uint32 restoreTimer; + uint32 abilityTimer1; + uint32 abilityTimer2; - CreatureAI* GetAI(Creature* creature) const override + void Reset() override { - return GetNexusAI(creature); + restoreTimer = 0; + abilityTimer1 = 0; + abilityTimer2 = 30000; + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } - struct npc_crystalline_frayerAI : public ScriptedAI + void JustEngagedWith(Unit*) override { - npc_crystalline_frayerAI(Creature* creature) : ScriptedAI(creature) - { - } - - bool _allowDeath; - uint32 restoreTimer; - uint32 abilityTimer1; - uint32 abilityTimer2; - - void Reset() override - { - restoreTimer = 0; - abilityTimer1 = 0; - abilityTimer2 = 30000; - me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - } - - void JustEngagedWith(Unit*) override - { - _allowDeath = me->GetInstanceScript()->GetBossState(DATA_ORMOROK_EVENT) == DONE; - } + _allowDeath = me->GetInstanceScript()->GetBossState(DATA_ORMOROK_EVENT) == DONE; + } - void EnterEvadeMode(EvadeReason why) override - { - if (me->isRegeneratingHealth()) - ScriptedAI::EnterEvadeMode(why); - } + void EnterEvadeMode(EvadeReason why) override + { + if (me->isRegeneratingHealth()) + ScriptedAI::EnterEvadeMode(why); + } - void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override + void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override + { + if (damage >= me->GetHealth()) { - if (damage >= me->GetHealth()) + if (!_allowDeath) { - if (!_allowDeath) - { - me->RemoveAllAuras(); - me->GetThreatMgr().ClearAllThreat(); - me->CombatStop(true); - damage = 0; + me->RemoveAllAuras(); + me->GetThreatMgr().ClearAllThreat(); + me->CombatStop(true); + damage = 0; - me->SetReactState(REACT_PASSIVE); - me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - me->SetRegeneratingHealth(false); - me->CastSpell(me, SPELL_SUMMON_SEED_POD, true); - me->CastSpell(me, SPELL_SEED_POD, true); - me->CastSpell(me, SPELL_AURA_OF_REGENERATION, false); - restoreTimer = 1; - } + me->SetReactState(REACT_PASSIVE); + me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->SetRegeneratingHealth(false); + me->CastSpell(me, SPELL_SUMMON_SEED_POD, true); + me->CastSpell(me, SPELL_SEED_POD, true); + me->CastSpell(me, SPELL_AURA_OF_REGENERATION, false); + restoreTimer = 1; } } + } - void UpdateAI(uint32 diff) override + void UpdateAI(uint32 diff) override + { + if (restoreTimer) { - if (restoreTimer) + restoreTimer += diff; + if (restoreTimer >= 90 * IN_MILLISECONDS) { - restoreTimer += diff; - if (restoreTimer >= 90 * IN_MILLISECONDS) - { - Talk(0); - me->SetRegeneratingHealth(true); - restoreTimer = 0; - me->SetReactState(REACT_AGGRESSIVE); - me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - } - return; + Talk(0); + me->SetRegeneratingHealth(true); + restoreTimer = 0; + me->SetReactState(REACT_AGGRESSIVE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } + return; + } - if (!UpdateVictim()) - return; + if (!UpdateVictim()) + return; - abilityTimer1 += diff; - abilityTimer2 += diff; + abilityTimer1 += diff; + abilityTimer2 += diff; - if (abilityTimer1 >= 5000) - { - me->CastSpell(me->GetVictim(), SPELL_ENSNARE, false); - abilityTimer1 = 0; - } + if (abilityTimer1 >= 5000) + { + me->CastSpell(me->GetVictim(), SPELL_ENSNARE, false); + abilityTimer1 = 0; + } - if (abilityTimer2 >= 30000) - { - me->CastSpell(me->GetVictim(), SPELL_CRYSTAL_BLOOM, false); - abilityTimer2 = 0; - } + if (abilityTimer2 >= 30000) + { + me->CastSpell(me->GetVictim(), SPELL_CRYSTAL_BLOOM, false); + abilityTimer2 = 0; } - }; + } }; void AddSC_instance_nexus() { new instance_nexus(); - new npc_crystalline_frayer(); + RegisterNexusCreatureAI(npc_crystalline_frayer); } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h index dbc87982a5fd22..43099ce5189448 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h +++ b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h @@ -62,4 +62,6 @@ inline AI* GetNexusAI(T* obj) return GetInstanceAI(obj, NexusScriptName); } +#define RegisterNexusCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetNexusAI) + #endif From 00564e6ab54be6ba9a05f5736f2fcbf0deb2f929 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 25 Nov 2024 09:56:03 -0300 Subject: [PATCH 35/55] fix(Scripts/ZulAman): Fix Malacrass not using Slice and Dice (#20735) --- src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp index 4cf23a5ec4a690..6d281274dac150 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp @@ -89,7 +89,7 @@ enum Spells // Rogue SPELL_RO_BLIND = 43433, - SPELL_RO_SLICE_DICE = 43457, + SPELL_RO_SLICE_DICE = 43547, SPELL_RO_WOUND_POISON = 43461, // Shaman From 5d229d47f8dec5d8229e7daf926c856a4900b770 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 25 Nov 2024 10:33:11 -0300 Subject: [PATCH 36/55] fix(DB/SAI): Fix Grimtotem Raider using net under crowd control effects (#20733) --- data/sql/updates/pending_db_world/rev_1732503730550901400.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1732503730550901400.sql diff --git a/data/sql/updates/pending_db_world/rev_1732503730550901400.sql b/data/sql/updates/pending_db_world/rev_1732503730550901400.sql new file mode 100644 index 00000000000000..1b7dc1c1856fa9 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1732503730550901400.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 7725) AND (`source_type` = 0) AND (`id` IN (1)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(7725, 0, 1, 0, 0, 0, 100, 512, 2000, 5000, 5000, 8000, 0, 0, 11, 6533, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Grimtotem Raider - In Combat - Cast \'Net\''); From 1d69ff706e06cf479545bedcd6ad3ce887abf4c9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 25 Nov 2024 13:34:04 +0000 Subject: [PATCH 37/55] chore(DB): import pending files Referenced commit(s): 5d229d47f8dec5d8229e7daf926c856a4900b770 --- .../rev_1732503730550901400.sql => db_world/2024_11_25_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1732503730550901400.sql => db_world/2024_11_25_00.sql} (94%) diff --git a/data/sql/updates/pending_db_world/rev_1732503730550901400.sql b/data/sql/updates/db_world/2024_11_25_00.sql similarity index 94% rename from data/sql/updates/pending_db_world/rev_1732503730550901400.sql rename to data/sql/updates/db_world/2024_11_25_00.sql index 1b7dc1c1856fa9..ca5a3087341c77 100644 --- a/data/sql/updates/pending_db_world/rev_1732503730550901400.sql +++ b/data/sql/updates/db_world/2024_11_25_00.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_24_07 -> 2024_11_25_00 -- DELETE FROM `smart_scripts` WHERE (`entryorguid` = 7725) AND (`source_type` = 0) AND (`id` IN (1)); INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES From 96ec2dc626f05ce45de6f89bc3ae0c20c6c6d1d9 Mon Sep 17 00:00:00 2001 From: FlyingArowana Date: Mon, 25 Nov 2024 13:35:23 +0000 Subject: [PATCH 38/55] fix(DB/Creature): Taunt Immunity to Boss: "Hex Lord Malacrass" (Zul'aman) (#20737) --- data/sql/updates/pending_db_world/rev_1732540722483734200.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1732540722483734200.sql diff --git a/data/sql/updates/pending_db_world/rev_1732540722483734200.sql b/data/sql/updates/pending_db_world/rev_1732540722483734200.sql new file mode 100644 index 00000000000000..92ebb8a4c07944 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1732540722483734200.sql @@ -0,0 +1,3 @@ +-- +-- Adds "Taunt Immunity" to Boss "Hex Lord Malacrass" (Zul'aman) +UPDATE `creature_template` SET `flags_extra` = `flags_extra` | 256 WHERE `entry` = 24239; From 42879621e4365eb730238515ecd795f6ce510074 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 25 Nov 2024 13:36:22 +0000 Subject: [PATCH 39/55] chore(DB): import pending files Referenced commit(s): 96ec2dc626f05ce45de6f89bc3ae0c20c6c6d1d9 --- .../rev_1732540722483734200.sql => db_world/2024_11_25_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1732540722483734200.sql => db_world/2024_11_25_01.sql} (78%) diff --git a/data/sql/updates/pending_db_world/rev_1732540722483734200.sql b/data/sql/updates/db_world/2024_11_25_01.sql similarity index 78% rename from data/sql/updates/pending_db_world/rev_1732540722483734200.sql rename to data/sql/updates/db_world/2024_11_25_01.sql index 92ebb8a4c07944..9e0a607d0cf2c4 100644 --- a/data/sql/updates/pending_db_world/rev_1732540722483734200.sql +++ b/data/sql/updates/db_world/2024_11_25_01.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_25_00 -> 2024_11_25_01 -- -- Adds "Taunt Immunity" to Boss "Hex Lord Malacrass" (Zul'aman) UPDATE `creature_template` SET `flags_extra` = `flags_extra` | 256 WHERE `entry` = 24239; From 3d5d300f766dd9ac67df1eb3b71e1104b8933571 Mon Sep 17 00:00:00 2001 From: FlyingArowana Date: Tue, 26 Nov 2024 10:49:19 +0000 Subject: [PATCH 40/55] fix(DB/Creature) - Adds "Disarm" Immunity to Boss: Nalorakk [Zul'Aman] (#20746) * File created * Added Disarm immunity * The mighty newline --- data/sql/updates/pending_db_world/rev_1732609621113544900.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1732609621113544900.sql diff --git a/data/sql/updates/pending_db_world/rev_1732609621113544900.sql b/data/sql/updates/pending_db_world/rev_1732609621113544900.sql new file mode 100644 index 00000000000000..7fd5a8481573fe --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1732609621113544900.sql @@ -0,0 +1,3 @@ +-- +-- Adds "Disarm" immunity to Creautre (Boss) "Nalorakk" - [Zul'Aman] +UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` | 4 WHERE `entry` = 23576; From e5b83b29deb3b530329a56693f8a1cdfa4bf2a1b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 26 Nov 2024 10:50:13 +0000 Subject: [PATCH 41/55] chore(DB): import pending files Referenced commit(s): 3d5d300f766dd9ac67df1eb3b71e1104b8933571 --- .../rev_1732609621113544900.sql => db_world/2024_11_26_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1732609621113544900.sql => db_world/2024_11_26_00.sql} (80%) diff --git a/data/sql/updates/pending_db_world/rev_1732609621113544900.sql b/data/sql/updates/db_world/2024_11_26_00.sql similarity index 80% rename from data/sql/updates/pending_db_world/rev_1732609621113544900.sql rename to data/sql/updates/db_world/2024_11_26_00.sql index 7fd5a8481573fe..7b77674e52b460 100644 --- a/data/sql/updates/pending_db_world/rev_1732609621113544900.sql +++ b/data/sql/updates/db_world/2024_11_26_00.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_25_01 -> 2024_11_26_00 -- -- Adds "Disarm" immunity to Creautre (Boss) "Nalorakk" - [Zul'Aman] UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` | 4 WHERE `entry` = 23576; From 2649ca2d652b6ab7e186667d8988db6a90e87c46 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Tue, 26 Nov 2024 12:17:02 -0300 Subject: [PATCH 42/55] feat(Core/Spells): Allow modifying MiscValues during cast (#20731) --- src/server/game/Spells/Spell.cpp | 13 +++++++++++++ src/server/game/Spells/Spell.h | 1 + src/server/game/Spells/SpellDefines.h | 5 ++++- src/server/game/Spells/SpellEffects.cpp | 4 ++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 8e8bbf6e3c5b67..932704c0195229 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -556,7 +556,11 @@ void SpellCastTargets::OutDebug() const SpellValue::SpellValue(SpellInfo const* proto) { for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) + { EffectBasePoints[i] = proto->Effects[i].BasePoints; + MiscVal[i] = 0; + } + MaxAffectedTargets = proto->MaxAffectedTargets; RadiusMod = 1.0f; AuraStackAmount = 1; @@ -8458,6 +8462,15 @@ void Spell::SetSpellValue(SpellValueMod mod, int32 value) case SPELLVALUE_FORCED_CRIT_RESULT: m_spellValue->ForcedCritResult = (bool)value; break; + case SPELLVALUE_MISCVALUE0: + m_spellValue->MiscVal[0] = value; + break; + case SPELLVALUE_MISCVALUE1: + m_spellValue->MiscVal[1] = value; + break; + case SPELLVALUE_MISCVALUE2: + m_spellValue->MiscVal[2] = value; + break; } } diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 45ae5719487f1f..4d44af2e441719 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -218,6 +218,7 @@ struct SpellValue uint8 AuraStackAmount; int32 AuraDuration; bool ForcedCritResult; + uint32 MiscVal[MAX_SPELL_EFFECTS]; }; enum SpellState diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h index 4da855467fe1a4..22caee957b8550 100644 --- a/src/server/game/Spells/SpellDefines.h +++ b/src/server/game/Spells/SpellDefines.h @@ -117,7 +117,10 @@ enum SpellValueMod SPELLVALUE_MAX_TARGETS, SPELLVALUE_AURA_STACK, SPELLVALUE_AURA_DURATION, - SPELLVALUE_FORCED_CRIT_RESULT + SPELLVALUE_FORCED_CRIT_RESULT, + SPELLVALUE_MISCVALUE0, + SPELLVALUE_MISCVALUE1, + SPELLVALUE_MISCVALUE2, }; enum SpellFacingFlags diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index ace8a1b51ecf9b..4e8e9e507b227d 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -2332,6 +2332,10 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) return; uint32 entry = m_spellInfo->Effects[effIndex].MiscValue; + + if (m_spellValue->MiscVal[effIndex]) + entry = m_spellValue->MiscVal[effIndex]; + if (!entry) return; From 7fc938dfcb985652b0113aeb37e465be986449cf Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Tue, 26 Nov 2024 16:00:46 -0300 Subject: [PATCH 43/55] =?UTF-8?q?fix(DB/Spells):=20Malacrass=20Drain=20Pow?= =?UTF-8?q?er=20should=20stack=20from=20different=20cas=E2=80=A6=20(#20749?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(DB/Spells): Malacrass Drain Power should stack from different casters --- data/sql/updates/pending_db_world/mala.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/mala.sql diff --git a/data/sql/updates/pending_db_world/mala.sql b/data/sql/updates/pending_db_world/mala.sql new file mode 100644 index 00000000000000..c35d5c0b0859e3 --- /dev/null +++ b/data/sql/updates/pending_db_world/mala.sql @@ -0,0 +1,2 @@ +DELETE FROM `spell_custom_attr` WHERE `spell_id`=44132; +INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES (44132, 4194304); From 6ab70f0926079b3c64d95666c6192c4d88019197 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 26 Nov 2024 19:01:50 +0000 Subject: [PATCH 44/55] chore(DB): import pending files Referenced commit(s): 7fc938dfcb985652b0113aeb37e465be986449cf --- .../{pending_db_world/mala.sql => db_world/2024_11_26_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/mala.sql => db_world/2024_11_26_01.sql} (76%) diff --git a/data/sql/updates/pending_db_world/mala.sql b/data/sql/updates/db_world/2024_11_26_01.sql similarity index 76% rename from data/sql/updates/pending_db_world/mala.sql rename to data/sql/updates/db_world/2024_11_26_01.sql index c35d5c0b0859e3..b7d416fcde2375 100644 --- a/data/sql/updates/pending_db_world/mala.sql +++ b/data/sql/updates/db_world/2024_11_26_01.sql @@ -1,2 +1,3 @@ +-- DB update 2024_11_26_00 -> 2024_11_26_01 DELETE FROM `spell_custom_attr` WHERE `spell_id`=44132; INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES (44132, 4194304); From 1de7a9505451a5ff10e6193c019d8a715050b2ca Mon Sep 17 00:00:00 2001 From: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com> Date: Tue, 26 Nov 2024 20:02:51 +0100 Subject: [PATCH 45/55] Fix(DB/Spawn/WP) Scarlet Captains. (#20720) Create Scarlet_Captains.sql Fix for Scarlet Captains in DK Starting Area. --- .../pending_db_world/Scarlet_Captains.sql | 137 ++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 data/sql/updates/pending_db_world/Scarlet_Captains.sql diff --git a/data/sql/updates/pending_db_world/Scarlet_Captains.sql b/data/sql/updates/pending_db_world/Scarlet_Captains.sql new file mode 100644 index 00000000000000..29b2894c9f98d5 --- /dev/null +++ b/data/sql/updates/pending_db_world/Scarlet_Captains.sql @@ -0,0 +1,137 @@ + +-- Remove Wrong Guids + +DELETE FROM `creature` WHERE (`id1` = 28611) AND (`guid` IN (129294, 129297, 129298, 129300, 129303)); + + +-- Add Waypoints + +DELETE FROM `waypoint_data` WHERE `id` IN (12929200, 12929300, 12929500, 12929600, 12929900, 12930100, 12930200, 12930400, 12930500); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12930500, 1, 2374.73, -5855.05, 105.204, NULL, 0, 0, 0, 100, 0), +(12930500, 2, 2359.39, -5856.19, 103.536, NULL, 0, 0, 0, 100, 0), +(12930500, 3, 2343.31, -5854.01, 101.126, NULL, 0, 0, 0, 100, 0), +(12930500, 4, 2332.27, -5850.46, 100.934, NULL, 0, 0, 0, 100, 0), +(12930500, 5, 2316.51, -5848.56, 100.935, NULL, 0, 0, 0, 100, 0), +(12930500, 6, 2332.27, -5850.46, 100.934, NULL, 0, 0, 0, 100, 0), +(12930500, 7, 2343.31, -5854.01, 101.126, NULL, 0, 0, 0, 100, 0), +(12930500, 8, 2359.39, -5856.19, 103.536, NULL, 0, 0, 0, 100, 0), +(12930500, 9, 2374.73, -5855.05, 105.204, NULL, 0, 0, 0, 100, 0), +(12930500, 10, 2395.31, -5848.83, 107.756, NULL, 0, 0, 0, 100, 0), +(12930400, 1, 2412.42, -5854.43, 106.352, NULL, 0, 0, 0, 100, 0), +(12930400, 2, 2402.93, -5842.97, 109.672, NULL, 0, 0, 0, 100, 0), +(12930400, 3, 2412.42, -5854.43, 106.352, NULL, 0, 0, 0, 100, 0), +(12930400, 4, 2422.19, -5860.64, 105.745, NULL, 0, 0, 0, 100, 0), +(12930100, 1, 2282.34, -5879.39, 100.511, NULL, 0, 0, 0, 100, 0), +(12930100, 2, 2298.16, -5877.04, 100.659, NULL, 0, 0, 0, 100, 0), +(12930100, 3, 2332.68, -5870.94, 101.275, NULL, 0, 0, 0, 100, 0), +(12930100, 4, 2343.74, -5873.16, 103.259, NULL, 0, 0, 0, 100, 0), +(12930100, 5, 2359.56, -5876.34, 104.555, NULL, 0, 0, 0, 100, 0), +(12930100, 6, 2373.53, -5899.89, 107.302, NULL, 0, 0, 0, 100, 0), +(12930100, 7, 2383.58, -5923.9, 110.248, NULL, 0, 0, 0, 100, 0), +(12930100, 8, 2373.53, -5899.89, 107.302, NULL, 0, 0, 0, 100, 0), +(12930100, 9, 2359.56, -5876.34, 104.555, NULL, 0, 0, 0, 100, 0), +(12930100, 10, 2343.74, -5873.16, 103.259, NULL, 0, 0, 0, 100, 0), +(12930100, 11, 2332.68, -5870.94, 101.275, NULL, 0, 0, 0, 100, 0), +(12930100, 12, 2298.16, -5877.04, 100.659, NULL, 0, 0, 0, 100, 0), +(12930100, 13, 2282.34, -5879.39, 100.511, NULL, 0, 0, 0, 100, 0), +(12930100, 14, 2261.25, -5882.46, 101.871, NULL, 0, 0, 0, 100, 0), +(12929500, 1, 2270.25, -5814.23, 100.935, NULL, 0, 0, 0, 100, 0), +(12929500, 2, 2258.81, -5827.16, 101.01, NULL, 0, 0, 0, 100, 0), +(12929500, 3, 2263.75, -5846.31, 100.946, NULL, 0, 0, 0, 100, 0), +(12929500, 4, 2277.02, -5851.78, 100.956, NULL, 0, 0, 0, 100, 0), +(12929500, 5, 2287.03, -5859.74, 100.932, NULL, 0, 0, 0, 100, 0), +(12929500, 6, 2301.7, -5860.49, 100.934, NULL, 0, 0, 0, 100, 0), +(12929500, 7, 2304.83, -5844.42, 100.934, NULL, 0, 0, 0, 100, 0), +(12929500, 8, 2307.86, -5827.64, 101.103, NULL, 0, 0, 0, 100, 0), +(12929500, 9, 2291.21, -5815.83, 101.052, NULL, 0, 0, 0, 100, 0), +(12929200, 1, 2192.48, -5751.67, 102.118, NULL, 0, 0, 0, 100, 0), +(12929200, 2, 2202.8, -5748.1, 102.467, NULL, 0, 0, 0, 100, 0), +(12929200, 3, 2211.03, -5751.19, 102.489, NULL, 0, 0, 0, 100, 0), +(12929200, 4, 2226.86, -5757.15, 101.971, NULL, 0, 0, 0, 100, 0), +(12929200, 5, 2222.44, -5771.2, 101.682, NULL, 0, 0, 0, 100, 0), +(12929200, 6, 2212.7, -5784.32, 101.645, NULL, 0, 0, 0, 100, 0), +(12929200, 7, 2196.78, -5777.67, 101.373, NULL, 0, 0, 0, 100, 0), +(12929200, 8, 2181.33, -5770.79, 101.357, NULL, 0, 0, 0, 100, 0), +(12929200, 9, 2178.22, -5758.94, 101.309, NULL, 0, 0, 0, 100, 0), +(12929600, 1, 2071.02, -5751.46, 98.8196, NULL, 0, 0, 0, 100, 0), +(12929600, 2, 2068.28, -5740.5, 99.1555, NULL, 0, 0, 0, 100, 0), +(12929600, 3, 2078.86, -5724.54, 101.533, NULL, 0, 0, 0, 100, 0), +(12929600, 4, 2094.46, -5726.09, 100.311, NULL, 0, 0, 0, 100, 0), +(12929600, 5, 2105.5, -5731.14, 100.3, NULL, 0, 0, 0, 100, 0), +(12929600, 6, 2114.52, -5751.33, 99.0498, NULL, 0, 0, 0, 100, 0), +(12929600, 7, 2115.35, -5761.94, 98.3894, NULL, 0, 0, 0, 100, 0), +(12929600, 8, 2116.15, -5772.22, 98.1393, NULL, 0, 0, 0, 100, 0), +(12929600, 9, 2103.76, -5770.65, 98.6399, NULL, 0, 0, 0, 100, 0), +(12929600, 10, 2089.87, -5770.89, 99.1377, NULL, 0, 0, 0, 100, 0), +(12930200, 1, 2135.82, -5800.13, 99.739, NULL, 0, 0, 0, 100, 0), +(12930200, 2, 2143.67, -5816.31, 100.827, NULL, 0, 0, 0, 100, 0), +(12930200, 3, 2143.72, -5829.03, 101.223, NULL, 0, 0, 0, 100, 0), +(12930200, 4, 2142.77, -5854.49, 101.349, NULL, 0, 0, 0, 100, 0), +(12930200, 5, 2161.43, -5866.23, 101.331, NULL, 0, 0, 0, 100, 0), +(12930200, 6, 2181.55, -5871.43, 101.271, NULL, 0, 0, 0, 100, 0), +(12930200, 7, 2161.43, -5866.23, 101.331, NULL, 0, 0, 0, 100, 0), +(12930200, 8, 2142.77, -5854.49, 101.349, NULL, 0, 0, 0, 100, 0), +(12930200, 9, 2143.72, -5829.03, 101.223, NULL, 0, 0, 0, 100, 0), +(12930200, 10, 2143.67, -5816.31, 100.827, NULL, 0, 0, 0, 100, 0), +(12930200, 11, 2135.82, -5800.13, 99.739, NULL, 0, 0, 0, 100, 0), +(12930200, 12, 2129.66, -5787.29, 98.852, NULL, 0, 0, 0, 100, 0), +(12929900, 1, 2146.6, -5758.24, 99.7128, NULL, 0, 0, 0, 100, 0), +(12929900, 2, 2146.64, -5747.25, 99.9351, NULL, 0, 0, 0, 100, 0), +(12929900, 3, 2146.47, -5736.57, 100.398, NULL, 0, 0, 0, 100, 0), +(12929900, 4, 2141.57, -5729.49, 100.39, NULL, 0, 0, 0, 100, 0), +(12929900, 5, 2136.73, -5722.5, 100.563, NULL, 0, 0, 0, 100, 0), +(12929900, 6, 2128.72, -5710.92, 100.776, NULL, 0, 0, 0, 100, 0), +(12929900, 7, 2136.73, -5722.5, 100.563, NULL, 0, 0, 0, 100, 0), +(12929900, 8, 2141.57, -5729.49, 100.39, NULL, 0, 0, 0, 100, 0), +(12929900, 9, 2146.47, -5736.57, 100.398, NULL, 0, 0, 0, 100, 0), +(12929900, 10, 2146.64, -5747.25, 99.9351, NULL, 0, 0, 0, 100, 0), +(12929900, 11, 2146.6, -5758.24, 99.7128, NULL, 0, 0, 0, 100, 0), +(12929900, 12, 2146.88, -5768.92, 99.848, NULL, 0, 0, 0, 100, 0), +(12929300, 1, 2163.01, -5915.32, 100.19, NULL, 0, 0, 0, 100, 0), +(12929300, 2, 2181.89, -5919.04, 100.921, NULL, 0, 0, 0, 100, 0), +(12929300, 3, 2189.84, -5910.22, 100.848, NULL, 0, 0, 0, 100, 0), +(12929300, 4, 2185.54, -5897.07, 100.693, NULL, 0, 0, 0, 100, 0), +(12929300, 5, 2177.43, -5894.1, 101.309, NULL, 0, 0, 0, 100, 0), +(12929300, 6, 2167.9, -5893.54, 101.112, NULL, 0, 0, 0, 100, 0), +(12929300, 7, 2141.5, -5901.44, 102.039, NULL, 0, 0, 0, 100, 0), +(12929300, 8, 2134.57, -5895.35, 102.476, NULL, 0, 0, 0, 100, 0), +(12929300, 9, 2124.09, -5885.86, 102.768, NULL, 0, 0, 0, 100, 0), +(12929300, 10, 2127.24, -5862.9, 101.846, NULL, 0, 0, 0, 100, 0), +(12929300, 11, 2144.77, -5853.55, 101.35, NULL, 0, 0, 0, 100, 0), +(12929300, 12, 2160.56, -5868.36, 101.312, NULL, 0, 0, 0, 100, 0), +(12929300, 13, 2159.3, -5877.75, 101.317, NULL, 0, 0, 0, 100, 0); + + +-- Update Spawn-Points + +UPDATE `creature` SET `position_x` = 2177.7983, `position_y` = -5758.793, `position_z` = 101.29145, `orientation` = 0.51258016 WHERE `guid` = 129292 AND `id1` = 28611; +UPDATE `creature` SET `position_x` = 2158, `position_y` = -5887.69, `position_z` = 101.37, `orientation` = 4.47917 WHERE `guid` = 129293 AND `id1` = 28611; +UPDATE `creature` SET `position_x` = 2291.298, `position_y` = -5815.7197, `position_z` = 101.05994, `orientation` = 2.814103 WHERE `guid` = 129295 AND `id1` = 28611; +UPDATE `creature` SET `position_x` = 2089.395, `position_y` = -5771.01, `position_z` = 99.147934, `orientation` = 2.3090818 WHERE `guid` = 129296 AND `id1` = 28611; +UPDATE `creature` SET `position_x` = 2146.8882, `position_y` = -5768.9214, `position_z` = 99.84805, `orientation` = 1.5770894 WHERE `guid` = 129299 AND `id1` = 28611; +UPDATE `creature` SET `position_x` = 2261.2556, `position_y` = -5882.462, `position_z` = 101.87194, `orientation` = 0.29108763 WHERE `guid` = 129301 AND `id1` = 28611; +UPDATE `creature` SET `position_x` = 2129.6663, `position_y` = -5787.2954, `position_z` = 98.85208, `orientation` = 5.258737 WHERE `guid` = 129302 AND `id1` = 28611; +UPDATE `creature` SET `position_x` = 2422.1914, `position_y` = -5860.641, `position_z` = 105.74505, `orientation` = 2.593869 WHERE `guid` = 129304 AND `id1` = 28611; +UPDATE `creature` SET `position_x` = 2395.3108, `position_y` = -5848.834, `position_z` = 107.756935, `orientation` = 3.5421836 WHERE `guid` = 129305 AND `id1` = 28611; + + +-- Update Movement Type and Wander Distance + +UPDATE `creature` SET `MovementType` = 2 WHERE (`guid` IN (129292, 129293, 129295, 129296, 129299, 129301, 129302, 129304, 129305)); +UPDATE `creature` SET `wander_distance` = 0 WHERE (`guid` IN (129292, 129293, 129295, 129296, 129299, 129301, 129302, 129304, 129305)); + + +-- Add Spawn Addon + +DELETE FROM `creature_addon` WHERE (`guid` IN (129292, 129293, 129295, 129296, 129299, 129301, 129302, 129304, 129305)); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(129292, 12929200, 2404, 0, 1, 0, 0, NULL), +(129293, 12929300, 2404, 0, 1, 0, 0, NULL), +(129295, 12929500, 2404, 0, 1, 0, 0, NULL), +(129296, 12929600, 2404, 0, 1, 0, 0, NULL), +(129299, 12929900, 2404, 0, 1, 0, 0, NULL), +(129301, 12930100, 2404, 0, 1, 0, 0, NULL), +(129302, 12930200, 2404, 0, 1, 0, 0, NULL), +(129304, 12930400, 2404, 0, 1, 0, 0, NULL), +(129305, 12930500, 2404, 0, 1, 0, 0, NULL); From 4703bf08d0ad27f75591e613bb11cd40ab0f946d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 26 Nov 2024 19:02:56 +0000 Subject: [PATCH 46/55] chore(DB): import pending files Referenced commit(s): 6ab70f0926079b3c64d95666c6192c4d88019197 --- .../Scarlet_Captains.sql => db_world/2024_11_26_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/Scarlet_Captains.sql => db_world/2024_11_26_02.sql} (99%) diff --git a/data/sql/updates/pending_db_world/Scarlet_Captains.sql b/data/sql/updates/db_world/2024_11_26_02.sql similarity index 99% rename from data/sql/updates/pending_db_world/Scarlet_Captains.sql rename to data/sql/updates/db_world/2024_11_26_02.sql index 29b2894c9f98d5..c56afc032d9310 100644 --- a/data/sql/updates/pending_db_world/Scarlet_Captains.sql +++ b/data/sql/updates/db_world/2024_11_26_02.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_26_01 -> 2024_11_26_02 -- Remove Wrong Guids From 8a2ffc7a584505ecea17c7b0f1c67c02b00a323c Mon Sep 17 00:00:00 2001 From: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com> Date: Wed, 27 Nov 2024 08:41:04 +0100 Subject: [PATCH 47/55] Fix(DB/Spawn/WP) Scarlet Medics. (#20738) Create Scarlet_Medics_Fix.sql Remove some wrong guids. Add waypoints for Scarlet Medics. --- .../pending_db_world/Scarlet_Medics_Fix.sql | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 data/sql/updates/pending_db_world/Scarlet_Medics_Fix.sql diff --git a/data/sql/updates/pending_db_world/Scarlet_Medics_Fix.sql b/data/sql/updates/pending_db_world/Scarlet_Medics_Fix.sql new file mode 100644 index 00000000000000..d255c0361fd76c --- /dev/null +++ b/data/sql/updates/pending_db_world/Scarlet_Medics_Fix.sql @@ -0,0 +1,118 @@ + +-- Remove Wrong Guids + +DELETE FROM `creature` WHERE (`id1` = 28608) AND (`guid` IN (129257, 129260, 129261, 129262, 129263)); + + +-- Add Waypoints + +DELETE FROM `waypoint_data` WHERE `id` IN (12925900, 12925400, 12925300, 12925600, 12925500, 12925800); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12925900, 1, 2393.85, -5867.42, 104.623, NULL, 0, 0, 0, 100, 0), +(12925900, 2, 2384.14, -5868.85, 104.717, NULL, 0, 0, 0, 100, 0), +(12925900, 3, 2374.47, -5870.27, 104.651, NULL, 0, 0, 0, 100, 0), +(12925900, 4, 2374.07, -5880.72, 105, NULL, 0, 0, 0, 100, 0), +(12925900, 5, 2379.33, -5892.84, 106.397, NULL, 0, 0, 0, 100, 0), +(12925900, 6, 2392.93, -5906.33, 109.858, NULL, 0, 0, 0, 100, 0), +(12925900, 7, 2398.14, -5911.46, 110.23, NULL, 0, 0, 0, 100, 0), +(12925900, 8, 2388.46, -5924, 110.265, NULL, 0, 0, 0, 100, 0), +(12925900, 9, 2383.91, -5916.7, 110.05, NULL, 0, 0, 0, 100, 0), +(12925900, 10, 2374.87, -5900.46, 107.485, NULL, 0, 0, 0, 100, 0), +(12925900, 11, 2371.01, -5887.31, 105.561, NULL, 0, 0, 0, 100, 0), +(12925900, 12, 2361.64, -5870.66, 104.405, NULL, 0, 0, 0, 100, 0), +(12925900, 13, 2364.24, -5862.32, 104.223, NULL, 0, 0, 0, 100, 0), +(12925900, 14, 2374.76, -5861.15, 104.809, NULL, 0, 0, 0, 100, 0), +(12925900, 15, 2391.64, -5860.2, 105.318, NULL, 0, 0, 0, 100, 0), +(12925900, 16, 2407.92, -5861.47, 105.057, NULL, 0, 0, 0, 100, 0), +(12925900, 17, 2408.01, -5865.92, 104.647, NULL, 0, 0, 0, 100, 0), +(12925400, 1, 2245.25, -5881.24, 100.781, NULL, 0, 0, 0, 100, 0), +(12925400, 2, 2252.44, -5874.35, 100.925, NULL, 0, 0, 0, 100, 0), +(12925400, 3, 2257.84, -5865.62, 101.521, NULL, 0, 0, 0, 100, 0), +(12925400, 4, 2265.58, -5852.52, 101.158, NULL, 0, 0, 0, 100, 0), +(12925400, 5, 2257.84, -5865.62, 101.521, NULL, 0, 0, 0, 100, 0), +(12925400, 6, 2252.44, -5874.35, 100.925, NULL, 0, 0, 0, 100, 0), +(12925400, 7, 2245.25, -5881.24, 100.781, NULL, 0, 0, 0, 100, 0), +(12925400, 8, 2237.98, -5888.56, 100.79, NULL, 0, 0, 0, 100, 0), +(12925300, 1, 2166.5, -5852.88, 102.042, NULL, 0, 0, 0, 100, 0), +(12925300, 2, 2162.32, -5839.37, 101.433, NULL, 0, 0, 0, 100, 0), +(12925300, 3, 2158.63, -5827.33, 101.499, NULL, 0, 0, 0, 100, 0), +(12925300, 4, 2154.28, -5813.41, 101.838, NULL, 0, 0, 0, 100, 0), +(12925300, 5, 2155.38, -5805.82, 101.126, NULL, 0, 0, 0, 100, 0), +(12925300, 6, 2164.54, -5798.98, 101.145, NULL, 0, 0, 0, 100, 0), +(12925300, 7, 2174.14, -5791.68, 101.276, NULL, 0, 0, 0, 100, 0), +(12925300, 8, 2179.7, -5787.44, 101.256, NULL, 0, 0, 0, 100, 0), +(12925300, 9, 2174.14, -5791.68, 101.276, NULL, 0, 0, 0, 100, 0), +(12925300, 10, 2164.54, -5798.98, 101.145, NULL, 0, 0, 0, 100, 0), +(12925300, 11, 2155.38, -5805.82, 101.126, NULL, 0, 0, 0, 100, 0), +(12925300, 12, 2154.28, -5813.41, 101.838, NULL, 0, 0, 0, 100, 0), +(12925300, 13, 2158.63, -5827.33, 101.499, NULL, 0, 0, 0, 100, 0), +(12925300, 14, 2162.32, -5839.37, 101.433, NULL, 0, 0, 0, 100, 0), +(12925300, 15, 2166.5, -5852.88, 102.042, NULL, 0, 0, 0, 100, 0), +(12925300, 16, 2169.78, -5863.75, 101.35, NULL, 0, 0, 0, 100, 0), +(12925600, 1, 2171.57, -5781.3, 101.267, NULL, 0, 0, 0, 100, 0), +(12925600, 2, 2161.47, -5787.41, 100.968, NULL, 0, 0, 0, 100, 0), +(12925600, 3, 2147.94, -5795.67, 100.381, NULL, 0, 0, 0, 100, 0), +(12925600, 4, 2132.97, -5792.91, 99.2783, NULL, 0, 0, 0, 100, 0), +(12925600, 5, 2136.68, -5780.42, 99.0729, NULL, 0, 0, 0, 100, 0), +(12925600, 6, 2148.77, -5772.53, 100.085, NULL, 0, 0, 0, 100, 0), +(12925600, 7, 2161.02, -5764.45, 100.964, NULL, 0, 0, 0, 100, 0), +(12925600, 8, 2172.77, -5757.18, 101.234, NULL, 0, 0, 0, 100, 0), +(12925600, 9, 2176.58, -5768.25, 101.33, NULL, 0, 0, 0, 100, 0), +(12925600, 10, 2178.72, -5776.63, 101.38, NULL, 0, 0, 0, 100, 0), +(12925500, 1, 2220.55, -5786.82, 101.655, NULL, 0, 0, 0, 100, 0), +(12925500, 2, 2233.64, -5792.13, 101.161, NULL, 0, 0, 0, 100, 0), +(12925500, 3, 2242.44, -5799.18, 100.966, NULL, 0, 0, 0, 100, 0), +(12925500, 4, 2253.64, -5808.14, 100.953, NULL, 0, 0, 0, 100, 0), +(12925500, 5, 2262.18, -5815.47, 100.936, NULL, 0, 0, 0, 100, 0), +(12925500, 6, 2253.64, -5808.14, 100.953, NULL, 0, 0, 0, 100, 0), +(12925500, 7, 2242.44, -5799.18, 100.966, NULL, 0, 0, 0, 100, 0), +(12925500, 8, 2233.64, -5792.13, 101.161, NULL, 0, 0, 0, 100, 0), +(12925500, 9, 2220.55, -5786.82, 101.655, NULL, 0, 0, 0, 100, 0), +(12925500, 10, 2211.51, -5783.26, 101.63, NULL, 0, 0, 0, 100, 0), +(12925800, 1, 2129.46, -5690.47, 101.372, NULL, 0, 0, 0, 100, 0), +(12925800, 2, 2127.82, -5697.43, 101.051, NULL, 0, 0, 0, 100, 0), +(12925800, 3, 2125.35, -5707.95, 100.708, NULL, 0, 0, 0, 100, 0), +(12925800, 4, 2130.94, -5716.03, 100.713, NULL, 0, 0, 0, 100, 0), +(12925800, 5, 2140.7, -5730.14, 100.305, NULL, 0, 0, 0, 100, 0), +(12925800, 6, 2150.79, -5730.22, 100.835, NULL, 0, 0, 0, 100, 0), +(12925800, 7, 2164.25, -5729.12, 101.318, NULL, 0, 0, 0, 100, 0), +(12925800, 8, 2175.68, -5728.08, 102.006, NULL, 0, 0, 0, 100, 0), +(12925800, 9, 2182.5, -5724.03, 105.799, NULL, 0, 0, 0, 100, 0), +(12925800, 10, 2175.68, -5728.08, 102.006, NULL, 0, 0, 0, 100, 0), +(12925800, 11, 2164.25, -5729.12, 101.318, NULL, 0, 0, 0, 100, 0), +(12925800, 12, 2150.79, -5730.22, 100.835, NULL, 0, 0, 0, 100, 0), +(12925800, 13, 2140.7, -5730.14, 100.305, NULL, 0, 0, 0, 100, 0), +(12925800, 14, 2130.94, -5716.03, 100.713, NULL, 0, 0, 0, 100, 0), +(12925800, 15, 2125.35, -5707.95, 100.708, NULL, 0, 0, 0, 100, 0), +(12925800, 16, 2127.82, -5697.43, 101.051, NULL, 0, 0, 0, 100, 0), +(12925800, 17, 2129.46, -5690.47, 101.372, NULL, 0, 0, 0, 100, 0), +(12925800, 18, 2131.78, -5680.34, 101.83, NULL, 0, 0, 0, 100, 0); + + +-- Update Spawn-Points + +UPDATE `creature` SET `position_x` = 2169.78, `position_y` = -5863.75, `position_z` = 101.35, `orientation` = 1.8841 WHERE `guid` = 129253 AND `id1` = 28608; +UPDATE `creature` SET `position_x` = 2237.98, `position_y` = -5888.56, `position_z` = 100.79, `orientation` = 0.7781 WHERE `guid` = 129254 AND `id1` = 28608; +UPDATE `creature` SET `position_x` = 2211.51, `position_y` = -5783.26, `position_z` = 101.63, `orientation` = 5.8463 WHERE `guid` = 129255 AND `id1` = 28608; +UPDATE `creature` SET `position_x` = 2178.59, `position_y` = -5776.99, `position_z` = 101.38, `orientation` = 3.7383 WHERE `guid` = 129256 AND `id1` = 28608; +UPDATE `creature` SET `position_x` = 2131.78, `position_y` = -5680.34, `position_z` = 101.83, `orientation` = 4.3431 WHERE `guid` = 129258 AND `id1` = 28608; +UPDATE `creature` SET `position_x` = 2403.13, `position_y` = -5865.98, `position_z` = 104.72, `orientation` = 3.0314 WHERE `guid` = 129259 AND `id1` = 28608; + + +-- Update Movement Type and Wander Distance + +UPDATE `creature` SET `MovementType` = 2 WHERE (`guid` IN (129253, 129254, 129255, 129256, 129258, 129259)); +UPDATE `creature` SET `wander_distance` = 0 WHERE (`guid` IN (129253, 129254, 129255, 129256, 129258, 129259)); + + +-- Add Spawn Addon + +DELETE FROM `creature_addon` WHERE (`guid` IN (129259, 129254, 129253, 129256, 129255, 129258)); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(129259, 12925900, 0, 0, 1, 0, 0, NULL), +(129254, 12925400, 0, 0, 1, 0, 0, NULL), +(129253, 12925300, 0, 0, 1, 0, 0, NULL), +(129256, 12925600, 0, 0, 1, 0, 0, NULL), +(129255, 12925500, 0, 0, 1, 0, 0, NULL), +(129258, 12925800, 0, 0, 1, 0, 0, NULL); + From 8ec510865ca920cb41e2be59ab22c5143a64fdc3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 27 Nov 2024 07:41:58 +0000 Subject: [PATCH 48/55] chore(DB): import pending files Referenced commit(s): 8a2ffc7a584505ecea17c7b0f1c67c02b00a323c --- .../Scarlet_Medics_Fix.sql => db_world/2024_11_27_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/Scarlet_Medics_Fix.sql => db_world/2024_11_27_00.sql} (99%) diff --git a/data/sql/updates/pending_db_world/Scarlet_Medics_Fix.sql b/data/sql/updates/db_world/2024_11_27_00.sql similarity index 99% rename from data/sql/updates/pending_db_world/Scarlet_Medics_Fix.sql rename to data/sql/updates/db_world/2024_11_27_00.sql index d255c0361fd76c..cdf3064340457e 100644 --- a/data/sql/updates/pending_db_world/Scarlet_Medics_Fix.sql +++ b/data/sql/updates/db_world/2024_11_27_00.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_26_02 -> 2024_11_27_00 -- Remove Wrong Guids From ff650d0a45dd8957eb5c2fe4bc4ad24e245037e3 Mon Sep 17 00:00:00 2001 From: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com> Date: Wed, 27 Nov 2024 11:48:50 +0100 Subject: [PATCH 49/55] fix(DB/Creature): Scarlet Miners and Cars don't follow a path. (#20701) * Create Scarlet_miners_and_Cars_Fix.sql * Update Scarlet_miners_and_Cars_Fix.sql Missing Delete waypoint * Update Scarlet_miners_and_Cars_Fix.sql Removed Mine Car spawn points and spawn addon. Modified respawn timers for Scarlet Miners outside the mine. SmartAI Improved. * Update Scarlet_miners_and_Cars_Fix.sql Waypoints Improved. * Update Scarlet_miners_and_Cars_Fix.sql * Update Scarlet_miners_and_Cars_Fix.sql * Update Scarlet_miners_and_Cars_Fix.sql Add Comment in Scarlet Miners DBGuid. --- .../Scarlet_miners_and_Cars_Fix.sql | 255 ++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 data/sql/updates/pending_db_world/Scarlet_miners_and_Cars_Fix.sql diff --git a/data/sql/updates/pending_db_world/Scarlet_miners_and_Cars_Fix.sql b/data/sql/updates/pending_db_world/Scarlet_miners_and_Cars_Fix.sql new file mode 100644 index 00000000000000..3a654d1cf3f0be --- /dev/null +++ b/data/sql/updates/pending_db_world/Scarlet_miners_and_Cars_Fix.sql @@ -0,0 +1,255 @@ + +-- Remove Wrong Guids + +DELETE FROM `creature` WHERE (`id1` = 28822) AND (`guid` IN (128885, 128886, 128887, 128888, 128889, 128890, 128891, 128897, 128900, 128902, 128903, 128904, 128905, 128906, 128907, 128908, 128909)); +DELETE FROM `creature` WHERE `id1` = 28821; +DELETE FROM `creature_addon` WHERE (`guid` IN (128860, 128861, 128862, 128863, 128864, 128865, 128866, 128867, 128868, 128869, 128870, 128871, 128872, 128873, 128874, 128875, 128876, 128877, 128878, 128879, 128880, 128881, 128882, 128883, 128884)); + + +-- Add Waypoints + +DELETE FROM `waypoint_data` WHERE `id` IN (12889500, 12890100, 12889300, 12889400, 12889200, 12889800, 12889900, 12889600); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES + +-- Inside the Mine + +(12889500, 1, 2457.81, -5971.01, 94.5838, NULL, 0, 0, 0, 100, 0), +(12889500, 2, 2468.17, -5975.07, 95.2765, NULL, 0, 0, 0, 100, 0), +(12889500, 3, 2479.37, -5975.9, 95.7913, NULL, 0, 0, 0, 100, 0), +(12889500, 4, 2495.7, -5979.33, 95.4122, NULL, 0, 0, 0, 100, 0), +(12889500, 5, 2503.53, -5985.32, 96.5173, NULL, 0, 0, 0, 100, 0), +(12889500, 6, 2515.44, -5993.6, 102.24, NULL, 0, 0, 0, 100, 0), +(12889500, 7, 2526.11, -5994.83, 103.623, NULL, 0, 0, 0, 100, 0), +(12889500, 8, 2536.84, -5995.78, 103.055, NULL, 0, 0, 0, 100, 0), +(12890100, 1, 2531.59, -5984.55, 103.079, NULL, 0, 0, 0, 100, 0), +(12890100, 2, 2525.21, -5974.85, 104.959, NULL, 0, 0, 0, 100, 0), +(12890100, 3, 2519.88, -5963.3, 106.808, NULL, 0, 0, 0, 100, 0), +(12890100, 4, 2520.58, -5959.67, 107.449, NULL, 0, 0, 0, 100, 0), +(12890100, 5, 2522.39, -5951.61, 109.614, NULL, 0, 0, 0, 100, 0), +(12890100, 6, 2519.53, -5944.17, 110.163, NULL, 0, 0, 0, 100, 0), +(12890100, 7, 2514.74, -5940.45, 110.76, NULL, 0, 0, 0, 100, 0), +(12890100, 8, 2506.28, -5933.64, 114.661, NULL, 0, 0, 0, 100, 0), +(12890100, 9, 2497.09, -5932, 115.473, NULL, 0, 0, 0, 100, 0), +(12890100, 10, 2487.37, -5936.89, 116.275, NULL, 0, 0, 0, 100, 0), +(12890100, 11, 2481.05, -5933.07, 116.141, NULL, 0, 0, 0, 100, 0), +(12889300, 1, 2470.42, -5926.1, 115.008, NULL, 0, 0, 0, 100, 0), +(12889300, 2, 2463.34, -5917.07, 113.401, NULL, 0, 0, 0, 100, 0), +(12889300, 3, 2458.6, -5911.03, 112.855, NULL, 0, 0, 0, 100, 0), +(12889300, 4, 2451.09, -5911.71, 112.944, NULL, 0, 0, 0, 100, 0), +(12889300, 5, 2446.34, -5911.87, 113.166, NULL, 0, 0, 0, 100, 0), +(12889300, 6, 2436.46, -5915.82, 112.753, NULL, 0, 0, 0, 100, 0), +(12889300, 7, 2430.58, -5911.54, 112.894, NULL, 0, 0, 0, 100, 0), +(12889400, 1, 2435.06, -5894.12, 104.829, NULL, 0, 0, 0, 100, 0), +(12889400, 2, 2442.21, -5913, 102.131, NULL, 0, 0, 0, 100, 0), +(12889400, 3, 2436.28, -5932.54, 95.8856, NULL, 0, 0, 0, 100, 0), +(12889400, 4, 2426.06, -5937.89, 95.255, NULL, 0, 0, 0, 100, 0), +(12889400, 5, 2422.21, -5939.99, 96.5058, NULL, 0, 0, 0, 100, 0), +(12889400, 6, 2418.61, -5943.65, 96.577, NULL, 0, 0, 0, 100, 0), +(12889400, 7, 2419.33, -5951.59, 97.7769, NULL, 0, 0, 0, 100, 0), +(12889400, 8, 2421.13, -5961.58, 96.9244, NULL, 0, 0, 0, 100, 0), +(12889400, 9, 2438.07, -5973.54, 95.7458, NULL, 0, 0, 0, 100, 0), +(12889400, 10, 2439.83, -5978.79, 96.0635, NULL, 0, 0, 0, 100, 0), +(12889400, 11, 2444.96, -5980.43, 95.6443, NULL, 0, 0, 0, 100, 0), + +-- Out of the Mine + +(12889200, 1, 2382.04, -5921.96, 110.242, NULL, 0, 0, 0, 100, 0), +(12889200, 2, 2359.96, -5905.98, 105.751, NULL, 0, 0, 0, 100, 0), +(12889200, 3, 2345.92, -5901.88, 103.249, NULL, 0, 0, 0, 100, 0), +(12889200, 4, 2323.33, -5899.63, 97.4549, NULL, 0, 0, 0, 100, 0), +(12889200, 5, 2297.8, -5907.54, 87.3678, NULL, 0, 0, 0, 100, 0), +(12889200, 6, 2289.81, -5921.47, 80.0533, NULL, 0, 0, 0, 100, 0), +(12889200, 7, 2286.44, -5933.45, 70.1835, NULL, 0, 0, 0, 100, 0), +(12889200, 8, 2281.33, -5948.36, 60.3395, NULL, 0, 0, 0, 100, 0), +(12889200, 9, 2275.66, -5962.62, 52.2482, NULL, 0, 0, 0, 100, 0), +(12889200, 10, 2269.13, -5966.74, 48.7308, NULL, 0, 0, 0, 100, 0), +(12889200, 11, 2258.51, -5969.35, 43.6041, NULL, 0, 0, 0, 100, 0), +(12889200, 12, 2248.35, -5972.64, 39.794, NULL, 0, 0, 0, 100, 0), +(12889200, 13, 2240.77, -5976.29, 37.8815, NULL, 0, 0, 0, 100, 0), +(12889200, 14, 2230.78, -5991.88, 27.7426, NULL, 0, 0, 0, 100, 0), +(12889200, 15, 2219.15, -6015.72, 10.2269, NULL, 0, 0, 0, 100, 0), +(12889200, 16, 2199.6, -6039.85, 6.60174, NULL, 0, 0, 0, 100, 0), +(12889200, 17, 2192.6, -6052.12, 6.17986, NULL, 0, 0, 0, 100, 0), +(12889200, 18, 2187.14, -6079.83, 3.74995, NULL, 0, 0, 0, 100, 0), +(12889200, 19, 2184.65, -6094.9, 1.1951, NULL, 0, 0, 0, 100, 0), +(12889200, 20, 2180.87, -6108.83, 1.42742, NULL, 0, 0, 0, 100, 0), +(12889200, 21, 2176.42, -6122.98, 1.03207, NULL, 0, 0, 0, 100, 0), +(12889200, 22, 2174.1, -6138.22, 1.08874, NULL, 0, 0, 0, 100, 0), +(12889200, 23, 2172.34, -6150.78, 1.10813, NULL, 0, 0, 0, 100, 0), +(12889200, 24, 2170.01, -6166.01, 1.05316, NULL, 0, 0, 0, 100, 0), +(12889900, 1, 2405.54, -5918.65, 110.479, NULL, 0, 0, 0, 100, 0), +(12889900, 2, 2388.47, -5913.34, 109.999, NULL, 0, 0, 0, 100, 0), +(12889900, 3, 2369.29, -5911.69, 107.857, NULL, 0, 0, 0, 100, 0), +(12889900, 4, 2351.15, -5908.11, 104.67, NULL, 0, 0, 0, 100, 0), +(12889900, 5, 2331.58, -5902.87, 99.9088, NULL, 0, 0, 0, 100, 0), +(12889900, 6, 2313.75, -5905.73, 92.7526, NULL, 0, 0, 0, 100, 0), +(12889900, 7, 2299.84, -5911.64, 86.2449, NULL, 0, 0, 0, 100, 0), +(12889900, 8, 2295.14, -5918.49, 81.6661, NULL, 0, 0, 0, 100, 0), +(12889900, 9, 2291.21, -5934.34, 70.5652, NULL, 0, 0, 0, 100, 0), +(12889900, 10, 2284.95, -5949.05, 61.0421, NULL, 0, 0, 0, 100, 0), +(12889900, 11, 2277.55, -5963.95, 52.5199, NULL, 0, 0, 0, 100, 0), +(12889900, 12, 2271.31, -5970.06, 48.8038, NULL, 0, 0, 0, 100, 0), +(12889900, 13, 2256.63, -5978.17, 39.8053, NULL, 0, 0, 0, 100, 0), +(12889900, 14, 2244.13, -5984.78, 32.9579, NULL, 0, 0, 0, 100, 0), +(12889900, 15, 2240.24, -5996.13, 28.4352, NULL, 0, 0, 0, 100, 0), +(12889900, 16, 2231.2, -6010.75, 15.9018, NULL, 0, 0, 0, 100, 0), +(12889900, 17, 2224.83, -6023.55, 8.75607, NULL, 0, 0, 0, 100, 0), +(12889900, 18, 2219.76, -6034.62, 7.12963, NULL, 0, 0, 0, 100, 0), +(12889900, 19, 2213.29, -6047.36, 6.41622, NULL, 0, 0, 0, 100, 0), +(12889900, 20, 2213.17, -6067.14, 5.44721, NULL, 0, 0, 0, 100, 0), +(12889900, 21, 2214.16, -6085.68, 4.16441, NULL, 0, 0, 0, 100, 0), +(12889900, 22, 2214.76, -6102.52, 4.00186, NULL, 0, 0, 0, 100, 0), +(12889900, 23, 2217.78, -6120.79, 5.36503, NULL, 0, 0, 0, 100, 0), +(12889900, 24, 2220.36, -6137.75, 4.70524, NULL, 0, 0, 0, 100, 0), +(12889900, 25, 2222.37, -6155.49, 1.70917, NULL, 0, 0, 0, 100, 0), +(12889900, 26, 2217.15, -6172.6, 0.789688, NULL, 0, 0, 0, 100, 0), +(12889600, 1, 2369.51, -5908.76, 107.55, NULL, 0, 0, 0, 100, 0), +(12889600, 2, 2354.31, -5907.67, 105.178, NULL, 0, 0, 0, 100, 0), +(12889600, 3, 2343.31, -5906.82, 103.387, NULL, 0, 0, 0, 100, 0), +(12889600, 4, 2326.47, -5904.37, 98.0022, NULL, 0, 0, 0, 100, 0), +(12889600, 5, 2302.91, -5908.62, 88.0557, NULL, 0, 0, 0, 100, 0), +(12889600, 6, 2297.43, -5916.56, 83.4883, NULL, 0, 0, 0, 100, 0), +(12889600, 7, 2294.39, -5929.78, 73.8046, NULL, 0, 0, 0, 100, 0), +(12889600, 8, 2291.11, -5941.63, 66.5253, NULL, 0, 0, 0, 100, 0), +(12889600, 9, 2285.16, -5950, 60.6343, NULL, 0, 0, 0, 100, 0), +(12889600, 10, 2274.82, -5963.1, 51.807, NULL, 0, 0, 0, 100, 0), +(12889600, 11, 2266.62, -5968.36, 47.4507, NULL, 0, 0, 0, 100, 0), +(12889600, 12, 2256.1, -5974.46, 40.8902, NULL, 0, 0, 0, 100, 0), +(12889600, 13, 2245.62, -5980.4, 35.077, NULL, 0, 0, 0, 100, 0), +(12889600, 14, 2242.71, -5988.02, 31.8258, NULL, 0, 0, 0, 100, 0), +(12889600, 15, 2239.34, -5996.3, 27.931, NULL, 0, 0, 0, 100, 0), +(12889600, 16, 2235.32, -6003.91, 22.1893, NULL, 0, 0, 0, 100, 0), +(12889600, 17, 2231.05, -6011.65, 15.2639, NULL, 0, 0, 0, 100, 0), +(12889600, 18, 2227.07, -6019.02, 10.3049, NULL, 0, 0, 0, 100, 0), +(12889600, 19, 2218.23, -6037.9, 6.88196, NULL, 0, 0, 0, 100, 0), +(12889600, 20, 2207.97, -6060.2, 5.96104, NULL, 0, 0, 0, 100, 0), +(12889600, 21, 2194.82, -6074.19, 3.82115, NULL, 0, 0, 0, 100, 0), +(12889600, 22, 2194.56, -6089.64, 2.68589, NULL, 0, 0, 0, 100, 0), +(12889600, 23, 2194.6, -6109.86, 1.11994, NULL, 0, 0, 0, 100, 0), +(12889600, 24, 2199.39, -6125.17, 3.28229, NULL, 0, 0, 0, 100, 0), +(12889600, 25, 2201.02, -6138.01, 5.35399, NULL, 0, 0, 0, 100, 0), +(12889800, 1, 2397.83, -5922.97, 110.373, NULL, 0, 0, 0, 100, 0), +(12889800, 2, 2386.57, -5918.26, 110.209, NULL, 0, 0, 0, 100, 0), +(12889800, 3, 2370.05, -5912.67, 108.097, NULL, 0, 0, 0, 100, 0), +(12889800, 4, 2352.75, -5908.58, 105.014, NULL, 0, 0, 0, 100, 0), +(12889800, 5, 2338.3, -5901.52, 101.878, NULL, 0, 0, 0, 100, 0), +(12889800, 6, 2320.69, -5902.6, 96.0814, NULL, 0, 0, 0, 100, 0), +(12889800, 7, 2303.02, -5906.62, 88.7967, NULL, 0, 0, 0, 100, 0), +(12889800, 8, 2292.08, -5910.15, 86.1959, NULL, 0, 0, 0, 100, 0), +(12889800, 9, 2290.14, -5919.46, 81.3954, NULL, 0, 0, 0, 100, 0), +(12889800, 10, 2288.1, -5929.7, 73.4314, NULL, 0, 0, 0, 100, 0), +(12889800, 11, 2285.71, -5938.77, 66.5439, NULL, 0, 0, 0, 100, 0), +(12889800, 12, 2282.96, -5948.26, 60.8342, NULL, 0, 0, 0, 100, 0), +(12889800, 13, 2278.88, -5960.01, 54.3672, NULL, 0, 0, 0, 100, 0), +(12889800, 14, 2275.86, -5972.99, 50.1883, NULL, 0, 0, 0, 100, 0), +(12889800, 15, 2266.45, -5975.92, 45.7126, NULL, 0, 0, 0, 100, 0), +(12889800, 16, 2257.05, -5977.68, 40.1854, NULL, 0, 0, 0, 100, 0), +(12889800, 17, 2248.05, -5979.76, 35.7801, NULL, 0, 0, 0, 100, 0), +(12889800, 18, 2240.11, -5989.08, 30.5966, NULL, 0, 0, 0, 100, 0), +(12889800, 19, 2232.67, -6001.29, 22.5347, NULL, 0, 0, 0, 100, 0), +(12889800, 20, 2227.55, -6009.1, 15.5793, NULL, 0, 0, 0, 100, 0), +(12889800, 21, 2222.56, -6017.32, 10.2762, NULL, 0, 0, 0, 100, 0), +(12889800, 22, 2219.65, -6035.31, 7.07337, NULL, 0, 0, 0, 100, 0), +(12889800, 23, 2217.22, -6052.6, 6.29405, NULL, 0, 0, 0, 100, 0), +(12889800, 24, 2226.42, -6062.52, 6.18018, NULL, 0, 0, 0, 100, 0), +(12889800, 25, 2237.33, -6073.54, 5.80553, NULL, 0, 0, 0, 100, 0), +(12889800, 26, 2247.76, -6083.73, 6.15304, NULL, 0, 0, 0, 100, 0), +(12889800, 27, 2254.38, -6094.76, 6.24679, NULL, 0, 0, 0, 100, 0); + + +-- Activate SmartAI to Scarlet Miners and Mine Cars + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE (`entry` = 28822); +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE (`entry` = 28821); + + +-- SMARTAI + +-- Mine Cars + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 28821; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 28821); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(28821, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 29, 1, 180, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Mine Car - On Respawn - Start Follow Owner Or Summoner'); + + +-- Scarlet Miners + +UPDATE `creature` SET `Comment` = "has guid specific SAI" WHERE (`id1` = 28822) AND (`guid` IN (128895, 128901, 128893, 128894, 128892, 128899, 128896, 128898)); + +-- Miners inside the Mine + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128895); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-128895, 0, 0, 1, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 12, 28821, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Summon Creature \'Mine Car\''), +(-128895, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52465, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Cast \'Drag Mine Cart\''), +(-128895, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12889500, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Start Path 12889500'), +(-128895, 0, 3, 0, 109, 0, 100, 0, 0, 12889500, 0, 0, 0, 0, 41, 2000, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12889500 Finished - Despawn In 2000 ms'), +(-128895, 0, 4, 0, 109, 0, 100, 0, 0, 12889500, 0, 0, 0, 0, 41, 2000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12889500 Finished - Despawn In 2000 ms'), +(-128895, 0, 5, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Just Died - Despawn In 1000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128901); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-128901, 0, 0, 1, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 12, 28821, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Summon Creature \'Mine Car\''), +(-128901, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52465, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Cast \'Drag Mine Cart\''), +(-128901, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12890100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Start Path 12890100'), +(-128901, 0, 3, 0, 109, 0, 100, 0, 0, 12890100, 0, 0, 0, 0, 41, 2000, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12890100 Finished - Despawn In 2000 ms'), +(-128901, 0, 4, 0, 109, 0, 100, 0, 0, 12890100, 0, 0, 0, 0, 41, 2000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12890100 Finished - Despawn In 2000 ms'), +(-128901, 0, 5, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Just Died - Despawn In 1000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128893); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-128893, 0, 0, 1, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 12, 28821, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Summon Creature \'Mine Car\''), +(-128893, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52465, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Cast \'Drag Mine Cart\''), +(-128893, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12889300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Start Path 12889300'), +(-128893, 0, 3, 0, 109, 0, 100, 0, 0, 12889300, 0, 0, 0, 0, 41, 2000, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12889300 Finished - Despawn In 2000 ms'), +(-128893, 0, 4, 0, 109, 0, 100, 0, 0, 12889300, 0, 0, 0, 0, 41, 2000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12889300 Finished - Despawn In 2000 ms'), +(-128893, 0, 5, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Just Died - Despawn In 1000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128894); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-128894, 0, 0, 1, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 12, 28821, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Summon Creature \'Mine Car\''), +(-128894, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52465, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Cast \'Drag Mine Cart\''), +(-128894, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12889400, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Start Path 12889400'), +(-128894, 0, 3, 0, 109, 0, 100, 0, 0, 12889400, 0, 0, 0, 0, 41, 2000, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12889400 Finished - Despawn In 2000 ms'), +(-128894, 0, 4, 0, 109, 0, 100, 0, 0, 12889400, 0, 0, 0, 0, 41, 2000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12889400 Finished - Despawn In 2000 ms'), +(-128894, 0, 5, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Just Died - Despawn In 1000 ms'); + +-- Miners outside the Mine + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128892); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-128892, 0, 0, 1, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 12, 28821, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Summon Creature \'Mine Car\''), +(-128892, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52465, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Cast \'Drag Mine Cart\''), +(-128892, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12889200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Start Path 12889200'), +(-128892, 0, 3, 0, 109, 0, 100, 0, 0, 12889200, 0, 0, 0, 0, 41, 2000, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12889200 Finished - Despawn In 2000 ms'), +(-128892, 0, 4, 0, 109, 0, 100, 0, 0, 12889200, 0, 0, 0, 0, 41, 2000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12889200 Finished - Despawn In 2000 ms'), +(-128892, 0, 5, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Just Died - Despawn In 1000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128899); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-128899, 0, 0, 1, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 12, 28821, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Summon Creature \'Mine Car\''), +(-128899, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52465, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Cast \'Drag Mine Cart\''), +(-128899, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12889900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Start Path 12889900'), +(-128899, 0, 3, 0, 109, 0, 100, 0, 0, 12889900, 0, 0, 0, 0, 41, 2000, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12889900 Finished - Despawn In 2000 ms'), +(-128899, 0, 4, 0, 109, 0, 100, 0, 0, 12889900, 0, 0, 0, 0, 41, 2000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12889900 Finished - Despawn In 2000 ms'), +(-128899, 0, 5, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Just Died - Despawn In 1000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128896); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-128896, 0, 0, 1, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 12, 28821, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Summon Creature \'Mine Car\''), +(-128896, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52465, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Cast \'Drag Mine Cart\''), +(-128896, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12889600, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Start Path 12889600'), +(-128896, 0, 3, 0, 109, 0, 100, 0, 0, 12889600, 0, 0, 0, 0, 41, 2000, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12889600 Finished - Despawn In 2000 ms'), +(-128896, 0, 4, 0, 109, 0, 100, 0, 0, 12889600, 0, 0, 0, 0, 41, 2000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12889600 Finished - Despawn In 2000 ms'), +(-128896, 0, 5, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Just Died - Despawn In 1000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128898); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-128898, 0, 0, 1, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 12, 28821, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Summon Creature \'Mine Car\''), +(-128898, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52465, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Cast \'Drag Mine Cart\''), +(-128898, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12889800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Respawn - Start Path 12889800'), +(-128898, 0, 3, 0, 109, 0, 100, 0, 0, 12889800, 0, 0, 0, 0, 41, 2000, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12889800 Finished - Despawn In 2000 ms'), +(-128898, 0, 4, 0, 109, 0, 100, 0, 0, 12889800, 0, 0, 0, 0, 41, 2000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Path 12889800 Finished - Despawn In 2000 ms'), +(-128898, 0, 5, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 204, 28821, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Miner - On Just Died - Despawn In 1000 ms'); From d9863e737391869cf66283dfdb8f38af38e2aaff Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 27 Nov 2024 10:49:43 +0000 Subject: [PATCH 50/55] chore(DB): import pending files Referenced commit(s): ff650d0a45dd8957eb5c2fe4bc4ad24e245037e3 --- .../2024_11_27_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/Scarlet_miners_and_Cars_Fix.sql => db_world/2024_11_27_01.sql} (99%) diff --git a/data/sql/updates/pending_db_world/Scarlet_miners_and_Cars_Fix.sql b/data/sql/updates/db_world/2024_11_27_01.sql similarity index 99% rename from data/sql/updates/pending_db_world/Scarlet_miners_and_Cars_Fix.sql rename to data/sql/updates/db_world/2024_11_27_01.sql index 3a654d1cf3f0be..b9e6eae5633c14 100644 --- a/data/sql/updates/pending_db_world/Scarlet_miners_and_Cars_Fix.sql +++ b/data/sql/updates/db_world/2024_11_27_01.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_27_00 -> 2024_11_27_01 -- Remove Wrong Guids From bcfcdbdb4c4a02d0c7468bf096fdcf998c05ffc7 Mon Sep 17 00:00:00 2001 From: sudlud Date: Wed, 27 Nov 2024 21:26:02 +0100 Subject: [PATCH 51/55] =?UTF-8?q?fix(DB/item=5Ftemplate):=20add=20flag=20C?= =?UTF-8?q?U=5FDURATION=5FREAL=5FTIME=20to=20Pilgrim's=20Bo=E2=80=A6=20(#2?= =?UTF-8?q?0756)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(DB/item_template): add flag CU_DURATION_REAL_TIME to Pilgrim's Bounty items * set duration to 7 days --- .../rev_1732725060262033200.sql | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1732725060262033200.sql diff --git a/data/sql/updates/pending_db_world/rev_1732725060262033200.sql b/data/sql/updates/pending_db_world/rev_1732725060262033200.sql new file mode 100644 index 00000000000000..06cea99820c4de --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1732725060262033200.sql @@ -0,0 +1,21 @@ +-- add flag CU_DURATION_REAL_TIME to Pilgrim's Bounty items +-- Wild Turkey +UPDATE `item_template` SET `flagsCustom` = (`flagsCustom` | 1) WHERE (`entry` = 44834); +-- Recipe: Cranberry Chutney +UPDATE `item_template` SET `flagsCustom` = (`flagsCustom` | 1) WHERE (`entry` = 44858); +UPDATE `item_template` SET `flagsCustom` = (`flagsCustom` | 1) WHERE (`entry` = 46805); +-- Recipe: Candied Sweet Potato +UPDATE `item_template` SET `flagsCustom` = (`flagsCustom` | 1) WHERE (`entry` = 44859); +UPDATE `item_template` SET `flagsCustom` = (`flagsCustom` | 1) WHERE (`entry` = 46806); +-- Recipe: Spice Bread Stuffing +UPDATE `item_template` SET `flagsCustom` = (`flagsCustom` | 1) WHERE (`entry` = 44860); +UPDATE `item_template` SET `flagsCustom` = (`flagsCustom` | 1) WHERE (`entry` = 46803); +-- Recipe: Slow-Roasted Turkey +UPDATE `item_template` SET `flagsCustom` = (`flagsCustom` | 1) WHERE (`entry` = 44861); +UPDATE `item_template` SET `flagsCustom` = (`flagsCustom` | 1) WHERE (`entry` = 46807); +-- Recipe: Pumpkin Pie +UPDATE `item_template` SET `flagsCustom` = (`flagsCustom` | 1) WHERE (`entry` = 44862); +UPDATE `item_template` SET `flagsCustom` = (`flagsCustom` | 1) WHERE (`entry` = 46804); + +-- set duration to 7 days +UPDATE `item_template` SET `duration` = 604800 WHERE (`entry` IN (44858, 46805, 44859, 46806, 44860, 46803, 44861, 46807, 44862, 46804)); From b5be6bc7029e98cab2f09addfa348e5c412e0c95 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 27 Nov 2024 20:26:59 +0000 Subject: [PATCH 52/55] chore(DB): import pending files Referenced commit(s): bcfcdbdb4c4a02d0c7468bf096fdcf998c05ffc7 --- .../rev_1732725060262033200.sql => db_world/2024_11_27_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1732725060262033200.sql => db_world/2024_11_27_02.sql} (96%) diff --git a/data/sql/updates/pending_db_world/rev_1732725060262033200.sql b/data/sql/updates/db_world/2024_11_27_02.sql similarity index 96% rename from data/sql/updates/pending_db_world/rev_1732725060262033200.sql rename to data/sql/updates/db_world/2024_11_27_02.sql index 06cea99820c4de..04c9d9323335c1 100644 --- a/data/sql/updates/pending_db_world/rev_1732725060262033200.sql +++ b/data/sql/updates/db_world/2024_11_27_02.sql @@ -1,3 +1,4 @@ +-- DB update 2024_11_27_01 -> 2024_11_27_02 -- add flag CU_DURATION_REAL_TIME to Pilgrim's Bounty items -- Wild Turkey UPDATE `item_template` SET `flagsCustom` = (`flagsCustom` | 1) WHERE (`entry` = 44834); From dd3eb38378732ff5f80dacb91f68ccd113a37f92 Mon Sep 17 00:00:00 2001 From: "Riley S." Date: Thu, 28 Nov 2024 12:34:15 -0500 Subject: [PATCH 53/55] fix(Scripts/ZulAman): Hex Lord Malacrass' Drain Power Timer (#20754) * Initial Fix for #20751 * Tighten timings * Condense Code * Move `ScheduleHealthCheckEvent` into `Reset()` --- .../scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp index 6d281274dac150..47e6840755db35 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp @@ -236,6 +236,12 @@ struct boss_hexlord_malacrass : public BossAI _currentClass = CLASS_NONE; _classAbilityTimer = 10000ms; SpawnAdds(); + ScheduleHealthCheckEvent(80, [&] { + ScheduleTimedEvent(0s, [&] { + DoCastSelf(SPELL_DRAIN_POWER, true); + Talk(SAY_DRAIN_POWER); + }, 30s, 30s); + }); } void SpawnAdds() @@ -257,10 +263,6 @@ struct boss_hexlord_malacrass : public BossAI add->SetInCombatWithZone(); }); - ScheduleTimedEvent(60s, [&]{ - DoCastSelf(SPELL_DRAIN_POWER, true); - Talk(SAY_DRAIN_POWER); - }, 40s, 55s); ScheduleTimedEvent(30s, [&]{ DoCastSelf(SPELL_SPIRIT_BOLTS); scheduler.Schedule(10s, [this](TaskContext) From d8123cbc37ee0941fa6c3475ffeab1bd2e4d2c6c Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Fri, 29 Nov 2024 09:04:44 +0100 Subject: [PATCH 54/55] fix(Scripts/ZulAman): Halazzi Lynx Ability Timers (#20761) fix(Scripts/ZulAman)HalazziLynxAbilityTimers --- .../scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp index fc15e1e3831735..43669101065634 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp @@ -189,15 +189,15 @@ struct boss_halazzi : public BossAI } scheduler.CancelGroup(GROUP_MERGE); - scheduler.Schedule(16s, GROUP_LYNX, [this](TaskContext context) - { - DoCastSelf(SPELL_FRENZY); - context.Repeat(10s, 15s); - }).Schedule(20s, GROUP_LYNX, [this](TaskContext context) + scheduler.Schedule(5s, 15s, GROUP_LYNX, [this](TaskContext context) { Talk(SAY_SABER); DoCastVictim(SPELL_SABER_LASH, true); - context.Repeat(30s); + context.Repeat(); + }).Schedule(20s, 35s, GROUP_LYNX, [this](TaskContext context) + { + DoCastSelf(SPELL_FRENZY); + context.Repeat(); }); break; } From a22403356c08ae21bdb2e7083fa1ae89c60523f0 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Fri, 29 Nov 2024 09:32:49 -0300 Subject: [PATCH 55/55] fix(Scripts/ZulAman): Fix Soul Siphon visual effect (#20765) --- src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp index 47e6840755db35..390df838feb1c0 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp @@ -274,7 +274,7 @@ struct boss_hexlord_malacrass : public BossAI siphonTrigger->SetDisplayId(11686); siphonTrigger->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); siphonTrigger->AI()->DoCast(target, SPELL_SIPHON_SOUL, true); - siphonTrigger->GetMotionMaster()->MoveChase(me); + siphonTrigger->GetMotionMaster()->MoveFollow(me, 0.0f, 0.0f); if (Player* player = target->ToPlayer()) _currentClass = player->HasAura(AURA_SHADOW_FORM) ? uint8(ADDITIONAL_CLASS_SPRIEST) : player->getClass(); }